首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么REFER sip请求的"400 missing contact“响应?

为什么REFER sip请求的"400 missing contact“响应?
EN

Stack Overflow用户
提问于 2015-03-21 23:21:05
回答 2查看 309关注 0票数 0

我正在尝试创建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头没有出现在我的请求中!我没有找到问题出在哪里!有人能帮我吗?提前感谢

EN

回答 2

Stack Overflow用户

发布于 2015-03-22 00:36:06

我不认为您会将contact标头添加到您发送的请求中。您是否执行以下操作:

代码语言:javascript
复制
referRequest.addHeader(contactHeader);

您必须在发送请求之前执行此操作。否则,您只有一个未使用的独立联系人标头。如果这不是问题所在,那么你应该附加调试日志。

票数 0
EN

Stack Overflow用户

发布于 2015-03-25 17:52:51

代码语言:javascript
复制
 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“的方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29184393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档