Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Grinderrr

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

01.03.2013, 15:47. Показов 2360. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru