Я пытаюсь настроить связь SIP с внутренним сервером (используя библиотеку PJSIP), однако для этого сервера требуется собственное поле заголовка с указанным значением заголовка для вызова REGISTRATION
. Например, мы назовем этот заголовок MyHeader
.
Из того, что я нашел, функция pjsua_acc_add()
добавит учетную запись и зарегистрирует ее на сервере, используя конфигурационную структуру.
Параметр reg_hdr_list
конфигурационной структуры имеет описание:
Дополнительные пользовательские заголовки SIP, которые будут помещены в запрос регистрации.
Кажется, что это именно то, что мне нужно, однако, похоже, не влияет на сам вызов.
Вот что я до сих пор:
pjsua_acc_config cfg;
pjsua_acc_config_default(&cfg);
//...Some other config stuff related to the server...
pjsip_hdr test;
test.name = pj_str("MyHeader");
test.sname = pj_str("MyHdr");
test.type = PJSIP_H_OTHER;
test.prev = cfg.reg_hdr_list.prev;
test.next = cfg.reg_hdr_list.next;
cfg.reg_hdr_list = test;
pj_status_t status;
status = pjsua_acc_add(&cfg, PJ_TRUE, &acc_id);
На стороне сервера нет дополнительных полей заголовка или чего-либо еще. И структура, которая используется для определения заголовка (pjsua_hdr
), не имеет value
или эквивалентного поля, поэтому даже если он создал заголовок, как он устанавливает значение?
Здесь - это ссылка для определения списка заголовков и ссылка для структуры заголовка.
Изменить: Я нашел решение благодаря сотруднику:
struct pjsip_generic_string_hdr CustomHeader;
pj_str_t name = pj_str("MyHeader");
pj_str_t value = pj_str("HeaderValue");
pjsip_generic_string_hdr_init2(&CustomHeader, &name, &value);
pj_list_push_back(&cfg.reg_hdr_list, &CustomHeader);
Это похоже на работу, как ожидалось.