PJSIP自定义注册标题

Dan*_*ton 44 header registration sip pjsip ios

我正在尝试与内部服务器(使用PJSIP库)建立SIP通信,但是,此服务器需要一个具有指定标头值的自定义标头字段REGISTRATION.例如,我们称之为必需的标题MyHeader.

根据我的发现,该pjsua_acc_add()函数将添加一个帐户并使用config结构将其注册到服务器.

reg_hdr_listconfig结构的参数有以下描述:

要在注册请求中添加的可选自定义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);
Run Code Online (Sandbox Code Playgroud)

从服务器端,没有额外的头字段或任何东西.并且用于定义header(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);
Run Code Online (Sandbox Code Playgroud)

这似乎按预期工作.

Isl*_* Q. 4

只是引用OP,因为他找到了解决方案,但忘记将其添加为答案:

编辑:感谢同事,我找到了解决方案:

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);
Run Code Online (Sandbox Code Playgroud)

这似乎按预期工作。