Я пытаюсь настроить связь SIP с внутренним сервером (с использованием библиотеки PJSIP), однако этому серверу требуется настраиваемое поле заголовка с указанным значением заголовка для вызова REGISTRATION
. Например, мы назовем этот обязательный заголовок MyHeader
.
Из того, что я обнаружил, функция pjsua_acc_add ()
добавит учетную запись и зарегистрирует ее на сервере с помощью структуры конфигурации.
Параметр reg_hdr_list
структуры config имеет описание:
Необязательные настраиваемые заголовки 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
), не имеет значения
или эквивалентного поля, поэтому даже если она создала заголовок, как она устанавливает значение?
Здесь ссылка на определение списка заголовков и ссылка ссылка для структуры заголовка.
Изменить: Я нашел решение благодаря коллеге:
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);
Кажется, это работает, как ожидалось.