Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Flatly)
  • No Skin
Collapse
Brand Logo

NetXMS Forum

  1. Home
  2. Support (Russian)
  3. Отправка сообщений nxevent в cp1251

Отправка сообщений nxevent в cp1251

Scheduled Pinned Locked Moved Support (Russian)
4 Posts 2 Posters 7.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I
    I
    IFriendly
    wrote on last edited by
    #1

    Добрый день!

    Помогите пожалуйста разобраться в причине почему не отсылается русский текст (кодировка 1251) через nxevent на Linux сборке.

    Конфигурация

    1. Сервер. Linux SL 6.5. x86/Postgres. 1.2.16. netxms.conf->CodePage = CP1251
    2. Клиент. Linux SL 6.5. x86. 1.2.16. --with-client  --with-all-static
      Сборку клиента делал в 2х вариантах: UNICODE и не UNICODE.

    msg="Это текст"
    /usr/local/bin/nxevent -d -u user -P pass 1.1.1.1 SYS_TEST_OK "$msg"

    *debug* SendMsg("CMD_GET_SERVER_INFO", id:0)
    *debug* RecvMsg("CMD_REQUEST_COMPLETED", id:0)
    *debug* SendMsg("CMD_LOGIN", id:1)
    *debug* RecvMsg("CMD_LOGIN_RESP", id:1)
    *debug* SendMsg("CMD_TRAP", id:2)
    *debug* RecvMsg("CMD_REQUEST_COMPLETED", id:2)
    *debug* Network receiver thread stopped

    На сервер сообщение приходит без текста сообщения.

      ** 00130000000000800000000200000006
      ** 00000018000000000000000000000000
      ** 000000A9010000000000001600530059
      ** 0053005F0054004500530054005F004F
      ** 004B000019BE01000000000300BF0100
      ** 00000000281291090000012A01000000
      ** 0000000010F290090000005803000001
      ** 00008000010000000000000001000000
      ** code=0x0013 (CMD_TRAP) flags=0x0000 id=2 size=128 numFields=6
      ** [    24] INT32  0
      ** [  169] STRING "SYS_TEST_OK"
      ** [    3] INT32  0
      ** [  298] STRING ""
      ** [    88] INT16  1
      ** [ 32768] STRING ""

    Использовал разные варианты LANG и iconv (-f utf8 -t cp1251, -f cp1251 -t utf8) на клиенте - не помогает.

    Сделал в nxevent.cpp дополнительную отладку для вывода строки сообщения перед вызовом NXCSendEvent - мой  $msg присутствует в той кодировке, которая ушла из скрипта. Добавил оладку (dump)  перед отправкой сообщения в session.cpp Похоже теряется уже где-то внутри:

    ...
    *debug* RecvMsg("CMD_LOGIN_RESP", id:1)
    Message to be send: Это текст
    *debug* SendMsg("CMD_TRAP", id:2)
    *debug* Raw data:
      ** 00130000000000800000000200000006
      ** 00000018000000000000000000000000
      ** 000000A9010000000000001600530059
      ** 0053005F0054004500530054005F004F
      ** 004B6D7341BE01000000000300BF0100
      ** 0000000000A262080000012A01000000
      ** 00000000E88162080000005803000001
      ** 00008000010000000000000001000000
      ** code=0x0013 (CMD_TRAP) flags=0x0000 id=2 size=128 numFields=6
      ** [    24] INT32  0
      ** [  169] STRING "SYS_TEST_OK"
      ** [    3] INT32  0
      ** [  298] STRING ""
      ** [    88] INT16  1
      ** [ 32768] STRING ""
    *debug* RecvMsg("CMD_REQUEST_COMPLETED", id:2)
    ...
    При этом из Windows клиентов все работает (установка из готовой сборки 1.2.16).

    Заранее спасибо

    1 Reply Last reply
    0
    • V
      V
      Victor Kirhenshtein
      wrote on last edited by
      #2

      Проблема в том, что nxevent не выставляет code page, и внутренние функции вызывают iconv используя ASCII. Я добавлю возможность выставлять code page для утилит. Как workaround можно добавить в main() в nxevent строчку

      SetDefaultCodepage("CP1251");

      1 Reply Last reply
      0
      • I
        I
        IFriendly
        wrote on last edited by
        #3

        Виктор,

        Спасибо за информацию, добавлю.
        Отпишусь о результатах.

        1 Reply Last reply
        0
        • I
          I
          IFriendly
          wrote on last edited by
          #4

          Сработало, спасибо.
          Изменения nxevent.cpp через command_line

          static TCHAR m_szCP[MAX_DB_STRING] = _T("");
          //...
          while((ch = getopt(argc, argv, "deho:P:T:u:c:vw:")) != -1)
          //...
          "  -c <codepage> : Specify codepage (default UTF8).\n"
          //...
                  case 'c':
          #ifdef UNICODE
                          MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, optarg, -1, m_szCP, MAX_DB_STRING);
                          m_szCP[MAX_DB_STRING - 1] = 0;
          #else
                      nx_strncpy(m_szCP, optarg, MAX_DB_STRING);
          #endif
                      SetDefaultCodepage(m_szCP);
                      break;
          //...

          Вызов:
          nxevent -u user -P pass -c CP1251 1.1.1.1 SYS_TEST_OK "Это тест"

          для нормального отображения символов в CL
          LANG=ru_RU.cp1251
          export LANG

          1 Reply Last reply
          0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          • Login

          • Don't have an account? Register

          • Login or register to search.
          Powered by NodeBB Contributors
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups