3
public void call(Response response) {
    try {
        cseq++;

        current_process = cseq + " INVITE";
        ArrayList viaHeaders = new ArrayList();
        ViaHeader viaHeader = this.headerFactory.createViaHeader(this.ip,
                5060, "udp", null);
        viaHeaders.add(viaHeader);
        // The "Max-Forwards" header.
        MaxForwardsHeader maxForwardsHeader = this.headerFactory
                .createMaxForwardsHeader(70);
        // The "Call-Id" header.
        CallIdHeader callIdHeader = this.sipProvider.getNewCallId();
        // The "CSeq" header.
        CSeqHeader cSeqHeader = this.headerFactory.createCSeqHeader(cseq,
                "INVITE");

        Address fromAddress = addressFactory.createAddress("sip:"
                + username + '@' + server);

        Address toAddress = addressFactory.createAddress("sip:"+this.toPrefix+this.toNumber+'@'+this.toUri);

        FromHeader fromHeader = this.headerFactory.createFromHeader(
                fromAddress, String.valueOf(this.tag));
        // The "To" header.
        ToHeader toHeader = this.headerFactory.createToHeader(toAddress,
                null);

        ContentLengthHeader contentLength = this.headerFactory.createContentLengthHeader(300);
        ContentTypeHeader contentType = this.headerFactory.createContentTypeHeader("application", "sdp");

        String sdpData = "v=0\n" + 
                "o=user1 392867480 292042336 IN IP4 192.168.10.31\n" + 
                "s=-\n" + 
                "c=IN IP4 192.168.10.31\n" + 
                "t=0 0\n" + 
                "m=audio 8000 RTP/AVP 0 8 101\n" + 
                "a=rtpmap:0 PCMU/8000\n" + 
                "a=rtpmap:8 PCMA/8000\n" + 
                "a=rtpmap:101 telephone-event/8000\n" + 
                "a=sendrecv";
         byte[] contents = sdpData.getBytes();
        // this.contactHeader = this.headerFactory
        // .createContactHeader(contactAddress);

        request = this.messageFactory.createRequest("sip:"+this.toPrefix+this.toNumber+'@'
                + this.toUri + " SIP/2.0\r\n\r\n");
        request.addHeader(viaHeader);
        request.addHeader(maxForwardsHeader);
        request.addHeader(toHeader);
        request.addHeader(fromHeader);
        request.addHeader(callIdHeader);
        request.addHeader(cSeqHeader);
        request.addHeader(contactHeader);
        request.addHeader(contentLength);
        request.addHeader(contentType);
        if (response != null) {
                            retry = true;
            System.out.println("DEBUG: Response: "+response);
        }
        inviteTid = sipProvider.getNewClientTransaction(request);
        // send the request out.
        inviteTid.sendRequest();
        this.dialog = inviteTid.getDialog();
        // Send the request statelessly through the SIP provider.
        // this.sipProvider.sendRequest(request);

        // Display the message in the text area.
        logger.debug("Request sent:\n" + request.toString() + "\n\n");
    } catch (Exception e) {
        // If an error occurred, display the error.
        e.printStackTrace();
        logger.debug("Request sent failed: " + e.getMessage() + "\n");
    }
}

これが processResponse です。

@Override
public void processResponse(ResponseEvent responseEvent) {
    System.out.println(responseEvent.getResponse());
    int statusCode = responseEvent.getResponse().getStatusCode();
            if (statusCode > 400 && statusCode < 410) {
    if(statusCode == 401 && current_process.contains("REGISTER")) {
        register(responseEvent.getResponse());
    }
    else if(statusCode == 401 && current_process.contains("INVITE")) {
        System.out.println("Invite 401");
    }
    else if(statusCode == 200) {
        System.out.println("Registered");
        call(null);
    }       
    else {
        System.out.println("Other code: "+ statusCode);
    }
}

サーバーへのアカウントの登録に成功しましたが、INVITE リクエストを開始したときに応答が返されません。

以下は、私が得た応答 (REGISTER 応答を含む) です。最終的に、発信 INVITE 要求が応答を返さないことがわかります。

DEBUG - Request sent:
REGISTER sip:sip.dialnow.com SIP/2.0
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-c591d8f797a179ed25a2114311df1854
Max-Forwards: 70
To: <sip:Frax01@sip.dialnow.com>
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
Call-ID: 6e49a1b2631c4b107199a8b7d9c5ee52@192.168.10.31
CSeq: 1 REGISTER
Contact: <sip:Frax01@192.168.10.31:5060;transport=UDP>
Expires: 120
Content-Length: 0




SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-c591d8f797a179ed25a2114311df1854
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
To: <sip:Frax01@sip.dialnow.com>
Contact: <sip:77.72.169.129:5060>
Call-ID: 6e49a1b2631c4b107199a8b7d9c5ee52@192.168.10.31
CSeq: 1 REGISTER
Server: (Very nice Sip Registrar/Proxy Server)
Allow: ACK,BYE,CANCEL,INVITE,REGISTER,OPTIONS,INFO,MESSAGE
WWW-Authenticate: Digest realm="sip.dialnow.com",nonce="2849852658",algorithm=MD5
Content-Length: 0


12d2ad0d764601c0573be88a3d94a2d8
8b3a241c08615fba24fb161a2a344cc9
40810f9cf3d19138dc0875dea15e3970
DEBUG - Request sent:
REGISTER sip:sip.dialnow.com SIP/2.0
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-3ccb8a78b8614638665f0af2a998a686
Max-Forwards: 70
To: <sip:Frax01@sip.dialnow.com>
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
Call-ID: 50baef7c3a407e50d4d539a1e35cff41@192.168.10.31
CSeq: 2 REGISTER
Contact: <sip:Frax01@192.168.10.31:5060;transport=UDP>
Expires: 120
Authorization: Digest realm="sip.dialnow.com",nonce="2849852658",username="Frax01",uri="sip:sip.dialnow.com",algorithm=MD5,response="40810f9cf3d19138dc0875dea15e3970"
Content-Length: 0




SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-3ccb8a78b8614638665f0af2a998a686
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
To: <sip:Frax01@sip.dialnow.com>
Contact: <sip:77.72.169.129:5060>
Call-ID: 50baef7c3a407e50d4d539a1e35cff41@192.168.10.31
CSeq: 2 REGISTER
Server: (Very nice Sip Registrar/Proxy Server)
Allow: ACK,BYE,CANCEL,INVITE,REGISTER,OPTIONS,INFO,MESSAGE
Content-Length: 0


Other code: 100
SIP/2.0 200 Ok
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-3ccb8a78b8614638665f0af2a998a686
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
To: <sip:Frax01@sip.dialnow.com>
Contact: <sip:Frax01@192.168.10.31:5060;transport=udp>;expires=120
Call-ID: 50baef7c3a407e50d4d539a1e35cff41@192.168.10.31
CSeq: 2 REGISTER
Server: (Very nice Sip Registrar/Proxy Server)
Allow: ACK,BYE,CANCEL,INVITE,REGISTER,OPTIONS,INFO,MESSAGE
Content-Length: 0


Registered
DEBUG - Request sent:
INVITE sip:6281386725319@dialnow.com SIP/2.0
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-e18f3eca8f76bd0a4378a12dd6e7a0d7
Max-Forwards: 70
To: <sip:6281386725319@dialnow.com>
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
Call-ID: 66341e5e43e50e106a7fbf2866c0a1d3@192.168.10.31
CSeq: 3 INVITE
Contact: <sip:Frax01@192.168.10.31:5060;transport=UDP>
Content-Type: application/sdp
Content-Length: 300

ご覧のとおり、INVITE リクエストが送信された後に停止しました。

前もって感謝します、

アダム。


さらに詳しい情報:

user2932861 の提案を試してみましたが、うまくいきませんでした。パブリック IP アドレスを使用してみましたが、まだ INVITE 要求でスタックしています。また、SDP コンテンツを設定しました。以下は SDP コンテンツです。

        ContentTypeHeader contentType = this.headerFactory.createContentTypeHeader("application", "sdp");

        String sdpData = "v=0\n" + 
                "o=user1 392867480 292042336 IN IP4 *my IP*\n" + 
                "s=-\n" + 
                "c=IN IP4 *my IP*\n" + 
                "t=0 0\n" + 
                "m=audio 8000 RTP/AVP 0 8 101\n" + 
                "a=rtpmap:0 PCMU/8000\n" + 
                "a=rtpmap:8 PCMA/8000\n" + 
                "a=rtpmap:101 telephone-event/8000\n" + 
                "a=sendrecv";
         byte[] contents = sdpData.getBytes();

         request.setContent(contents, contentType);

注: IP アドレスは検閲されています。

前もって感謝します!


実際のところ、まったく応答が返されませんでした。しばらく沈黙した後 (何も返さない)、コンソールに「トランザクション タイムアウト」が表示されました。なぜこれが起こっているのですか?

4

3 に答える 3

3

トランザクション タイムアウトは、32 秒である必要がある sip タイムアウトに対応します。応答がないため、この 408 応答が返されます。これは、リモート パーティによる回答ではなく、スタック自体によって生成された自動回答です。

ファイアウォールの設定を確認しましたか? OS のファイアウォールに問題がなければ、ホーム ゲートウェイを確認しましたか?

REGISTER および INVITE 要求は同じ IP アドレスに送信されますか? Wiresharkを使用して確認できます。

ヨハン

于 2013-11-14T08:30:35.207 に答える
0

低レベルの SIP をいじる代わりに、SIP サーブレットhttps://code.google.com/p/sipservlets/などの高レベルのフレームワークを試してみませんか?これにより、コア ビジネス ロジックに集中できます。Amazon AMI を試すこともできます https://aws.amazon.com/marketplace/pp/B00G9G94JW/ref=srh_res_product_title?ie=UTF8&sr=0-3&qid=1383128640630#support

于 2013-11-15T23:13:32.500 に答える
0

あなたの悩みに対する私の推測:

連絡先ヘッダーにプライベート アドレスが表示されています。ここでは、パブリックにルーティング可能なアドレスを使用してみてください。( STUN を使用して、パブリック アドレスまたはその他の手段を検出できます。) B2BUA (AKA セッション ボーダー コントローラー) を経由している場合は、それらが書き換えられます。SIP でのファイアウォールと NAT トラバーサルは簡単ではありません。

また、INVITE にコンテンツの長さがありますが、コンテンツはありますか? SDP コンテンツの設定を忘れていませんか?

于 2013-11-12T20:32:05.300 に答える