以下是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>
可以帮助一些人吗?
答案 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帖子以获取其他一些说明。
希望它有所帮助。