我正在尝试创建REFER请求来前转呼叫,我已经创建了Refer-To和Referred标头,而对于contact标头,它是SipURI myURI = address.createSipURI(contactNew, realm); Address contactAddress = addressFactory.createAddress(myURI); contactAddress.setDisplayName(contactNew); ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);
(contactNew是contact值,realm是我的域)当我发送REFER请求时,我得到了响应“400Missing contact”,并且contact头没有出现在我的请求中!我没有找到问题出在哪里!有人能帮我吗?提前感谢
发布于 2015-03-22 00:36:06
我不认为您会将contact标头添加到您发送的请求中。您是否执行以下操作:
referRequest.addHeader(contactHeader);您必须在发送请求之前执行此操作。否则,您只有一个未使用的独立联系人标头。如果这不是问题所在,那么你应该附加调试日志。
发布于 2015-03-25 17:52:51
private void refer(Request request, String referTo, String referredBy, String contactNew) throws Exception {
try{
AddressFactory address = SipFactory.getInstance().createAddressFactory();
FromHeader fromheader = (FromHeader)request.getHeader(FromHeader.NAME);
String tagfrom=fromheader.getTag();
// System.out.println(((FromHeader)request.getHeader(FromHeader.NAME)).getAddress().toString());
//from
SipURI myRealmURI = addressFactory.createSipURI(username, realm);
Address fromAddress = addressFactory.createAddress(myRealmURI);
fromAddress.setDisplayName(username);
FromHeader fromHeader = headerFactory.createFromHeader(fromAddress, new BigInteger(130, tag).toString(32));
//to
//ki nous a appelé!?????
String appelant=((FromHeader)request.getHeader(FromHeader.NAME)).getAddress().toString();
int index=appelant.indexOf("@");
int index1=appelant.indexOf(":");
SipURI myRealmURII = addressFactory.createSipURI(appelant.substring(index1+1, (index)), realm);
Address toAddress = addressFactory.createAddress(myRealmURII);
toAddress.setDisplayName(appelant.substring(index1+1, (index)));
ToHeader toHeader = headerFactory.createToHeader(toAddress,tagfrom);
//refer-to:à saisir
String ref="sip:"+referTo + "@"+realm;
ReferToHeader referto = headerFactory.createReferToHeader(
addressFactory.createAddress( ref )
);
//contactHeader
//referred-by
Header referredby = headerFactory.createHeader("Referred-By","sip:"+referredBy+"@"+realm);
URI requestURI =addressFactory.createURI("sip:sip.ooredoo.tn"+":"+distantPort);
List<ViaHeader> viaHeaders = new ArrayList<>();
CallIdHeader callIdHeader = sipProvider.getNewCallId();
long seq = 1;
CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(seq++, Request.REFER);
int max=70;
MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(max);
Request reques = messageFactory.createRequest(requestURI, Request.REFER, callIdHeader,
cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards);
SipURI myURI = address.createSipURI(contactNew, realm);
Address contactAddress = addressFactory.createAddress(myURI);
contactAddress.setDisplayName(contactNew);
ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);
request.addHeader(contactHeader);
reques.addHeader(referto);
reques.addHeader(referredby);
System.out.println(contactHeader.toString());
ClientTransaction transaction = sipProvider.getNewClientTransaction(reques);
transaction.sendRequest();
System.out.println(reques.toString());
CallID callidres = (CallID)reques.getHeader(CallID.NAME);
((DefaultTableModel)jTable3.getModel()).addRow(new Object[]{new date().date(),username,appelant.substring(index1+1, (index)) ,contactNew,password,localPort,distantPort,protocol,proxy,ipSRC,callidres.getValue(),"REGISTERED","REFER"});
} catch (Throwable e) {
e.printStackTrace();
System.out.println("Can't send REFER reply.");
} }PS:这是"refer“的方法
https://stackoverflow.com/questions/29184393
复制相似问题