1

SIP サーブレットを使用して次のフローを実装する必要があります。

1) 私の SIP サーブレットは INVITE メッセージをキャッチする必要があります 2) SIP TO ヘッダーを見て、それが何らかのパターンで一致する場合は、カムバック REFER メッセージが必要です。

Google で調べたところ、次のマニュアル (Basic Transfer) が見つかりました: www.dialogic.com/webhelp/IMG1010/10.5.1/WebHelp/sip_rfr_calltrans.htm

私が正しく理解したように、このフローは次のようになります: 1) userA は INVITE メッセージを SIP App に送信します 2) SIP App は 200 OK を返信する必要があります 3) UserA は ACK メッセージを送信します 4) SIP App は REFER メッセージを UserA に送信します 5) UserA は返信する必要があります202Accepted および NOTIFY より

私の環境:

1) mss-2.0.0.FINAL-jboss-as-7.1.2.Final as SIP PROXY Server 127.0.0.1:5080

2) user3@127.0.0.1:5060 --- MicroSIP ( http://www.microsip.org/ )

3) user2@127.0.0.1:5090 --- Zoiper_Free_2.41

DAR ファイル:

INVITE:("org.call.forwarding.CallForward","DAR:From","ORIGINATING","","NO_ROUTE", "0")

REGISTER:("org.call.forwarding.CallForward","DAR:From", "ORIGINATING", "", "NO_ROUTE", "0")

SUBSCRIBE:("org.call.forwarding.CallForward","DAR:From","ORIGINATING","","NO_ROUTE", "0")

オプション:("org.call.forwarding.CallForward","DAR:From","ORIGINATING", "", "NO_ROUTE", "0")

NOTIFY:("org.call.forwarding.CallForward", "DAR:From", "ORIGINATING", "", "NO_ROUTE", "0")

REFER:("org.call.forwarding.CallForward", "DAR:From", "ORIGINATING", "", "NO_ROUTE", "0")

user3@127.0.0.1 から rejectr@127.0.0.1 に電話します

したがって、私のソースコードは以下のようになります: 1) INVITE パッケージをキャッチし、200 OK 応答を行います:

@Override
protected void doInvite(SipServletRequest request) throws Exception {
    // Pattern match logic ommited       
    SipServletResponse response = request.createResponse(SipServletResponse.SC_OK);
    String str = response.toString();
    response.send()
}

INVITE sip:refuser@127.0.0.1:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.17:5060;rport=5060;branch=z9hG4bKPjb1570e34df4c442093af6fb2fa238667;received=127.0.0.1
Max-Forwards: 70
From: "user3" <sip:user3@127.0.0.1>;tag=87be8901c4e242fbb5c696d90d0ec068
To: <sip:refuser@127.0.0.1>
Contact: "user3" <sip:user3@127.0.0.1:5060;ob>
Call-ID: 983d9572c4a541d49566699b3edec1e0
CSeq: 22256 INVITE
Allow: PRACK,INVITE,ACK,BYE,CANCEL,UPDATE,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,OPTIONS
Supported: replaces,100rel,timer,norefersub
Session-Expires: 1800
Min-SE: 90
User-Agent: MicroSIP/3.3.21
Content-Type: application/sdp
Content-Length: 673

そして私の応答: 怒鳴るような 200 OK Respnose:

SIP/2.0 200 OK
To: <sip:refuser@127.0.0.1>;tag=25395207_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e
Via: SIP/2.0/UDP 192.168.0.17:5060;rport=5060;branch=z9hG4bKPjb1570e34df4c442093af6fb2fa238667;received=127.0.0.1
CSeq: 22256 INVITE
Call-ID: 983d9572c4a541d49566699b3edec1e0
From: "user3" <sip:user3@127.0.0.1>;tag=87be8901c4e242fbb5c696d90d0ec068
Contact: <sip:127.0.0.1:5080>
Content-Length: 0

次に、ACK パッケージを処理して REFER パッケージを生成しようとしています。

@Override
protected void doAck(SipServletRequest request) throws ServletException, IOException {          
    String ack = request.toString();
    logger.info("Got ASK!!!: " + request.toString());
    SipFactory sipFactory = (SipFactory) getServletContext().getAttribute(SIP_FACTORY);        
    SipApplicationSession appSession = request.getApplicationSession();
    SipServletRequest refer = sipFactory.createRequest(appSession, "REFER",
                                                         sipFactory.createURI("sip:user@127.0.0.1:5080"), // from                                            sipFactory.createURI("sip:user2@127.0.0.1:5090")); // to
    refer.addHeader("Refer-To", "sip:user3@127.0.0.1:5080");
    refer.addHeader("Referred-By", "sip:user@127.0.0.1:5080");
    logger.info("!!!!!!!!!!!THIS IS REFER: \n" + refer.toString());
    String strRefer = refer.toString();
    refer.send();               
} 

ACK sip:127.0.0.1:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.17:5060;rport=5060;branch=z9hG4bKPje03842cfb4104d379db989f2d77a871a;received=127.0.0.1
Max-Forwards: 70
From: "user3" <sip:user3@127.0.0.1>;tag=87be8901c4e242fbb5c696d90d0ec068
To: <sip:refuser@127.0.0.1>;tag=25395207_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e
Call-ID: 983d9572c4a541d49566699b3edec1e0
CSeq: 22256 ACK
Content-Length: 0

そして私のREFERパッケージ:

REFER sip:user2@127.0.0.1:5090 SIP/2.0
Call-ID: ca002d9261fe165c0a4eaedc99ead2c7@127.0.0.1
CSeq: 1 REFER
From: <sip:user@127.0.0.1:5080>;tag=14387494_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e
To: <sip:user2@127.0.0.1:5090>
Max-Forwards: 70
Contact: <sip:user@127.0.0.1:5080>
Refer-To: <sip:user3@127.0.0.1:5080>
Referred-By: <sip:user@127.0.0.1:5080>
Content-Length: 0

次に、ログ ファイルに TRYING メッセージが表示されます。

SIP/2.0 100 Trying
Via: SIP/2.0/UDP 127.0.0.1:5080;branch=z9hG4bK8479416b-da5c-4dca-baef-    f9b7db279b9e_da1be872_1872624593941
To: <sip:user2@127.0.0.1:5090>
From: <sip:user@127.0.0.1:5080>;tag=14387494_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e
Call-ID: ca002d9261fe165c0a4eaedc99ead2c7@127.0.0.1
CSeq: 1 REFER
Content-Length: 0

約 30 秒後、Microsip に「受け入れられません」というメッセージが表示されます。

SIP/2.0 408 Request timeout
To: <sip:user2@127.0.0.1:5090>;tag=37903989_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e
Via: SIP/2.0/UDP 127.0.0.1:5080;branch=z9hG4bK8479416b-da5c-4dca-baef-f9b7db279b9e_da1be872_1872624593941
CSeq: 1 REFER
Call-ID: ca002d9261fe165c0a4eaedc99ead2c7@127.0.0.1
From: <sip:user@127.0.0.1:5080>;tag=14387494_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e
Contact: <sip:127.0.0.1:5080>
Content-Length: 0

誰でも説明できますか: この男の何が問題なのか??? また、私の脳を吹き飛ばすもう 1 つのポイント: 場合によっては、200 OK メッセージを送信した後 (INVITE を処理したとき)、ACK の前に BYE メッセージをすぐに受信します...なぜそれが起こるのでしょうか?

4

1 に答える 1

0

REFER ヘッダーで、連絡先と CallID が元の ACK および 200OK メッセージとリンクしていないようです。そのため、何らかの応答を待っている未解決のメッセージがないため、最終的に 100 Trying が返されます。

于 2013-10-31T02:38:07.217 に答える