Grinderrr

siprtp.c (PJSIP) - добавление REGISTER

01.03.2013, 15:47. Показов 2365. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите, пожалуйста, разобраться с проблемой:

В либе PJSIP есть тестовый пример siprtp.c, необходимо добавить туда процедуру REGISTER перед INVITE (чтобы сообщение приходило абоненту не от Unknown, а от существующего абонента Asterisk). Пробовал воспользоваться методом добавления аккаунта из другого примера (simple_pjsua.c), но там очень мудрено, и тащит за собой кучу ненужного.

Подскажите, как добавить REGISTER (pjsip_regc_create, pjsip_regc_init и так далее), используя уже созданный UDP transport?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 /* Add UDP transport. */
    {
    pj_sockaddr_in addr;
    pjsip_host_port addrname;
    pjsip_transport *tp;
 
    pj_bzero(&addr, sizeof(addr));
    addr.sin_family = pj_AF_INET();
    addr.sin_addr.s_addr = 0;
    addr.sin_port = pj_htons((pj_uint16_t)app.sip_port);
 
    if (app.local_addr.slen) {
 
        addrname.host = app.local_addr;
        addrname.port = app.sip_port;
 
        status = pj_sockaddr_in_init(&addr, &app.local_addr, 
                     (pj_uint16_t)app.sip_port);
        if (status != PJ_SUCCESS) {
        app_perror(THIS_FILE, "Unable to resolve IP interface", status);
        return status;
        }
    }
 
    status = pjsip_udp_transport_start( app.sip_endpt, &addr, 
                        (app.local_addr.slen ? &addrname:NULL),
                        1, &tp);
    if (status != PJ_SUCCESS) {
        app_perror(THIS_FILE, "Unable to start UDP transport", status);
        return status;
    }
 
    PJ_LOG(3,(THIS_FILE, "SIP UDP listening on %.*s:%d",
          (int)tp->local_name.host.slen, tp->local_name.host.ptr,
          tp->local_name.port));
    }

А добавить надо перед INVITE
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 * Make outgoing call.
 */
static pj_status_t make_call(const pj_str_t *dst_uri)
{
    unsigned i;
    struct call *call;
    pjsip_dialog *dlg;
    pjmedia_sdp_session *sdp;
    pjsip_tx_data *tdata;
    pj_status_t status;
 
 
    /* Find unused call slot */
    for (i=0; i<app.max_calls; ++i) {
    if (app.call[i].inv == NULL)
        break;
    }
 
    if (i == app.max_calls)
    return PJ_ETOOMANY;
 
    call = &app.call[i];
 
    /* Create UAC dialog */
    status = pjsip_dlg_create_uac( pjsip_ua_instance(), 
                   &app.local_uri/* local URI        */
                   &app.local_contact/* local Contact    */
                   dst_uri,     /* remote URI       */
                   dst_uri,     /* remote target    */
                   &dlg);       /* dialog       */
    if (status != PJ_SUCCESS) {
    ++app.uac_calls;
    return status;
    }
 
    /* Create SDP */
    create_sdp( dlg->pool, call, &sdp);
 
    /* Create the INVITE session. */
    status = pjsip_inv_create_uac( dlg, sdp, 0, &call->inv);
    if (status != PJ_SUCCESS) {
    pjsip_dlg_terminate(dlg);
    ++app.uac_calls;
    return status;
    }
 
 
    /* Attach call data to invite session */
    call->inv->mod_data[mod_siprtp.id] = call;
 
    /* Mark start of call */
    pj_gettimeofday(&call->start_time);
 
 
    /* Create initial INVITE request.
     * This INVITE request will contain a perfectly good request and 
     * an SDP body as well.
     */
    status = pjsip_inv_invite(call->inv, &tdata);
    PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
 
 
    /* Send initial INVITE request. 
     * From now on, the invite session's state will be reported to us
     * via the invite session callbacks.
     */
    status = pjsip_inv_send_msg(call->inv, tdata);
    PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
 
 
    return PJ_SUCCESS;
}

Нужно очень срочно, а на нормальное изучение pjsip уйдет несколько месяцев :-(

Буду рад любой помощи. У буржуев на форумах такие же проблемы, внятно никто не может объяснить :-(

Спасибо!
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2013, 15:47
Ответы с готовыми решениями:

Замена register.php на /register
Здравствуйте, у меня появился новый вопрос: Как сделать так чтобы вместо register.php было /register? Я знаю что это пишется в...

Как собрать dll из PJSIP
Добрый день. Вот библиотека PJSIP]. Мне нужно ее скомпилировать в библиотеку. Запускаю pjproject-vs8.sln и пытаюсь собрать но...

Как сделать dll из PJSIP
Добрый день. Вот библиотека PJSIP. Мне нужно ее скомпилировать в dll. Я создал проект библиотеки в MSVC2019. Скажите пожалуйста...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2013, 15:47
Помогаю со студенческими работами здесь

Syntax error в Register: <%@ Register TagPrefix="sb" Namespace="SB.WebControls" Assembly="SB.WebControls"%>
Народ, помогите плз. чего ему не нравиться? &lt;%@ Register TagPrefix=&quot;sb&quot; Namespace=&quot;SB.WebControls&quot;...

PJSIP - доступ к элементам формы из другого класса
Здравствуйте, пишу софтфон с использованием PJSIP. Вот код регистрации: endpoint = new Endpoint(); ...

Как передавать видео и звук, используя pjsip?
Добрый день. Как с помощью pjsip передавать видео и звук? P.S. Извините за заглавие, нельзя использовать одновременно русские и...

register
&lt;?php echo &quot;&lt;h1&gt;Register&lt;/h1&gt;&quot; $submit = $_POST; // form date $fullname = $_POST; $username = $_POST; $password =...

Register не работает
Приветствую! пациент https://eternity-mvb.com/atele.html вот такой код ] &lt;form class=&quot;form&quot; action=&quot;]]]&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 01.04.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru