0

我正在尝试创建转接呼叫的 REFER 请求,我已经创建了 Refer-To 和 Referred-By 标头,对于联系人标头,它是 follos SipURI myURI = address.createSipURI(contactNew, realm); Address contactAddress = addressFactory.createAddress(myURI); contactAddress.setDisplayName(contactNew); ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);

(contactNew 是联系人值,realm 是我的域)当我发送 REFER 请求时,我得到了响应“400 缺少联系人”并且联系人标题没有出现在我的请求中!我没发现问题出在哪里!谁能帮我 ?提前致谢

4

2 回答 2

0
 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:这是“参考”的方法

于 2015-03-25T09:52:50.517 回答
0

我没有看到您将该联系人标头添加到您发送的请求中。你这样做:

referRequest.addHeader(contactHeader);

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

于 2015-03-21T16:36:05.723 回答