Как обработать сообщение pjsip? - PullRequest
0 голосов
/ 02 апреля 2020

Я получил сообщение вроде этого:

07:27:06.671           pjsua_core.c  .RX 544 bytes Request msg MESSAGE/cseq=20 (rdata0x7ff3a00086b8) from UDP 192.168.42.128:5060:
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.42.128:5060;rport;branch=z9hG4bK40553892
From: <sip:34020000001320000001@3402000000>;tag=365877371
To: <sip:34020000002000000001@3402000000>
Call-ID: 300721342
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length:   179

<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Keepalive</CmdType>
<SN>2608</SN>
<DeviceID>34020000001320000001</DeviceID>
<Status>OK</Status>
<Info>
</Info>
</Notify>

Я использую on_rx_request(), слушаю его и просто что-то печатаю.

static pj_bool_t default_mod_on_rx_request(pjsip_rx_data *rdata) {

    cout << "=================== rx request ======================\n\n\n" << endl;

    pjsip_endpt_create_response(pjsua_get_pjsip_endpt(), rdata, 200, NULL, &tdata);
    pjsip_endpt_send_response2(pjsua_get_pjsip_endpt(), rdata, tdata, NULL, NULL);
    return PJ_TRUE;
}

Используйте pjsip_module и зарегистрируйте его, REGISTER req в порядке!

pjsip_endpt_register_module(pjsua_get_pjsip_endpt(), &mod_default_handler);

во время работы ничего не выводится, так как я должен обрабатывать данные. спасибо

1 Ответ

1 голос
/ 02 апреля 2020

Я знаю, MESSAGE должен обрабатывать метод onInstantMessage() учетной записи в pjsua2. Например:

void ServerAccount::onInstantMessage(OnInstantMessageParam &prm)
{
  std::cout << "prm.fromUri: " + prm.fromUri << std::endl;
  std::cout << "prm.toUri: " + prm.toUri << std::endl;
  std::cout << "prm.contactUri: " + prm.contactUri << std::endl;
  std::cout << "prm.contentType: " + prm.contentType << std::endl;

  std::cout << "---------" << std::endl;
  std::cout << prm.msgBody << std::endl;
}

Документ с параметрами: OnInstantMessageParam

...