PJSIP - Pjsua2 android:如何在调用时添加标题?

时间:2016-08-05 14:27:07

标签: android sip pjsip sip-server

以下是pjsip调用的源代码 -

    String buddy_uri = item.get("uri");

    SipHeaderVector sipHeaderVector = new SipHeaderVector(2);

    SipHeader sipHeader1 = new SipHeader();
    sipHeader1.setHName("Header1");
    sipHeader1.setHValue("Value1");

    SipHeader sipHeader2 = new SipHeader();
    sipHeader.setHName("Header2");
    sipHeader.setHValue("Value2");

    sipHeaderVector.set(0,sipHeader1);
    sipHeaderVector.set(1,sipHeader2);

    MyCall call = new MyCall(account, -1);

    CallOpParam prm = new CallOpParam(true);

    SipTxOption sipTxOption = new SipTxOption();
    sipTxOption.setHeaders(sipHeaderVector);
    prm.setTxOption(sipTxOption);

    try {
    call.makeCall(buddy_uri, prm);
} catch (Exception e) {
    call.delete();
    return;
}

上面是传递自定义标头的PJSIP调用代码。不幸的是,身份验证失败了,因为看起来标题值不在请求中。

上面的代码是否正确传递自定义标头及其各自的值,因为pjsua提供的所有C ++文档都传递了标题,但似乎没有建立调用,并要求服务器上的某些引脚通过标头进行身份验证。< / p>

可以帮助一些人吗?

1 个答案:

答案 0 :(得分:1)

我没有使用传递SipTxOption的参数。以下是我的工作示例:

    CallOpParam prm = new CallOpParam(true);
    SipHeaderVector shv = new SipHeaderVector();
    SipHeader sh = new SipHeader();
    sh.setHName("headerName");
    sh.setHValue("headerValue");

    // add the sip header to the vector
    shv.add(sh);        

    // set headers to the parameter object 
    prm.getTxOption().setHeaders(shv);

    // make call using the desired parameters
    try {
        call.makeCall(buddy_uri, prm);
    } catch (Exception e) {
        call.delete();
        return;
    }

但为了让SipHeaders成为其他参与方,您必须编辑extensions_macro.conf以转发自定义标头。您可以通过编写:

来完成此任务
  exten => s,n,SIPAddHeader(headerName: ${SIP_HEADER(headerName)})

您还可以查看this帖子以获取其他一些说明。

希望它有所帮助。