Вызов PJSIP VOIP не подключен с помощью сервера SIP2SIP.info

Я использую PJSIP для голосовых вызовов. Когда я использовал наш сервер, все было нормально, т.е. звонил, общался. Но когда я использую сервер SIP2SIP.INFO. Регистрация в порядке, но звонок не подключен. Я видел журнал в SIP2SIP.info, там не было журнала исходящих или входящих звонков. так что вызов не инициируется.

    char cfg_reg_uri[] = "sip:sip2sip.info";
    char cfg_cred_realm[] = "sip2sip.info";
    char cfg_cred_scheme[]="digest";

    pjsua_acc_config cfg;
    pjsua_acc_config_default(&cfg);
    cfg.id = pj_str(cfg_id);
    cfg.reg_uri = pj_str(cfg_reg_uri);
    cfg.cred_count = 1;
    cfg.cred_info[0].realm = pj_str(cfg_cred_realm);
    cfg.cred_info[0].scheme = pj_str(cfg_cred_scheme);
    cfg.cred_info[0].username = pj_str(cfg_cred_username);
    cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
    cfg.cred_info[0].data = pj_str(cfg_cred_password);
    status = pjsua_acc_add(&cfg, PJ_TRUE, &_acc_id);

Я заметил, что нам нужно использовать исходящий прокси в sip2sip под названием «proxy.sipthor.net». но запутался, как я могу использовать в коде pjsip.

пожалуйста, помогите эксперту.


person Rahul Rawat    schedule 07.02.2014    source источник
comment
Как вы подключаетесь к местному, я пытался, регистрация прошла успешно, но звонок не подключен. я использовал   -  person Rahul Jain    schedule 14.09.2017


Ответы (1)


Если вы читаете страницу конфигурации устройства Sip2Sip, на ней говорится, что:

«устройство SIP всегда должно выполнять поиск DNS, как определено в стандарте SIP RFC3263 (NAPTR + SRV + поиск DNS)»

PJSIP поддерживает поиск DNS SRV.

В PJSUA он будет выполнять поиск DNS SRV только в том случае, если вы не укажете номер порта в URL-адресе SIP.

sip: [email protected] сначала попытается выполнить поиск записи DNS SRV, а затем переключится на поиск имени DNS A / C.

а также

"sip: [email protected]: 5060" будет выполнять только поиск имен DNS A / C.

Они говорят, что PJSUA не будет поддерживать автоматически поддержку аварийного переключения:

«Мы предлагали реализовать механизм аварийного переключения на уровне приложений».

Если вам нужна «быстрая и легкая» установка, вам нужно установить outbound_proxy на "proxy.sipthor.net". например

    cfg.outbound_proxy_cnt = 1;
    cfg.outbound_proxy[0] = pj_str("sip:proxy.sipthor.net:5060");

Если вам нужно более надежное решение, вам нужно использовать разрешение SRV pjsip. функции для разрешения sip2sip.info srv-записи, например: "_sip._udp.sip2sip.info", а затем установить записи outbound_proxy с результатом.

Код немного запутан.

pjsip_resolver_t* resolver_;

...

status = pjsip_resolver_create( pool, &resolver_ );

...

pjsip_host_info host;
host.flag = PJSIP_TRANSPORT_DATAGRAM; // is using UDP, see pjsip_transport_flags_e
host.type = PJSIP_TRANSPORT_UDP; // if using UDP, see pjsip_transport_type_e
host.addr.host = pj_str("sip2sip.info");
host.addr.port = 5060;

pjsip_resolve(resolver_, pool, &host, token, resolver_cb_func);

...


static void resolver_cb_func( pj_status_t status, void *token, const struct pjsip_server_addresses *addr)
{
    ...
            // use results to fill in the outbound_proxy
}

Вы также можете использовать его для поддержки аварийного переключения, но похоже, что sip2sip не имеет нескольких sip-серверов в записи DNS SRV, поэтому в настоящее время он не будет использоваться. Если они когда-нибудь добавят еще, это станет более полезным.

_sip._udp.sip2sip.info Сервер: fritz.box Адрес: fd00 :: 2665: 11ff: fef9: ec51
Неавторизованный ответ:
_sip._udp.sip2sip.info Местоположение службы SRV:
приоритет = 100
вес = 100
порт = 5060
svr hostname = proxy.sipthor.net
sip2sip.info nameserver = ns2.dns-hosting.info sip2sip.info nameserver = ns1.dns-hosting .info sip2sip.info nameserver = ns7.dns-hosting.info

Sip2Sip также поддерживает настройку STUN, поэтому я бы также установил настройки STUN для учетной записи:

cfg.stun_srv_cnt = 1;
cfg.stun_srv[0] = pj_str("sip2sip.info");

Поскольку ваш пример, похоже, не предоставляет информацию о порте, он должен работать. Для дальнейшей диагностики потребуется просмотреть вывод журнала pjsip.

person Shane Powell    schedule 20.02.2014
comment
Как выполнить синхронный поиск с помощью pjsip_resolve? По какой-то причине pj_gethostbyname у меня не работает, и я хотел использовать pjsip_resolve, используя собственный сервер имен. - person BTR Naidu; 19.09.2016
comment
pjsip не предоставляет синхронный API для pjsip_resolve. Вы должны иметь возможность превратить его в синхронный API, используя обещание / будущее (c ++ 11) или мьютекс (например, мьютекс pthread) - person Shane Powell; 20.09.2016