PJSIP-pjsua2android:如何在调用时添加头?

PJSIP-pjsua2android:如何在调用时添加头?,android,sip,pjsip,sip-server,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"); SipHeade

下面是我的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++文档通过标题,但似乎调用未被建立,并要求在服务器上通过头文件进行身份验证的某些PIN。
有人能帮忙吗?

我没有使用
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\u macro.conf
以转发自定义头。您可以通过以下方式完成此任务:

  exten => s,n,SIPAddHeader(headerName: ${SIP_HEADER(headerName)})
您还可以检查线程以获得其他一些澄清


希望有帮助。

我没有使用
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\u macro.conf
以转发自定义头。您可以通过以下方式完成此任务:

  exten => s,n,SIPAddHeader(headerName: ${SIP_HEADER(headerName)})
您还可以检查线程以获得其他一些澄清


希望有帮助。

我可以确认这是有效的。。。别忘了第二部分。。。否则,标头确实会到达sip服务器,但很可能不会传递到目标服务器。我可以确认这是有效的。。。别忘了第二部分。。。否则,报头会到达sip服务器,但很可能不会传递到目标服务器。