1

I need to implement next flow using SIP servlets:

1) My SIP Servlet should catch INVITE message 2) Look on SIP TO header, and if it match by some pattern I need comeback REFER message.

I google it, and found this manual (Basic Transfer): www.dialogic.com/webhelp/IMG1010/10.5.1/WebHelp/sip_rfr_calltrans.htm

As I understood correctly, this flow looks like bellow: 1) userA send INVITE message to SIP App 2) SIP App should send 200 OK back 3) UserA sending ACK message 4) SIP App send REFER message to UserA 5) UserA should send back 202Accepted and than NOTIFY

My enviroment:

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 File:

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")

OPTIONS:("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")

From user3@127.0.0.1 I calling to refuser@127.0.0.1

So my source code looks like bellow: 1) Catching INVITE package and make 200 OK response:

@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

And my response: 200 OK Respnose like bellow:

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

Then I trying to process ACK package and generate REFER package:

@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

And my REFER package:

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

Then I see at log file TRYING message:

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

And after ~30 secs I see that Microsip show "Not Acceptable" message:

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

Can any body explaine: whats wrong with this guy??? Also another point that blow my brain: in some cases after sending 200 OK message (when I processed INVITE) I immediatly recive BYE message before ACK... Why its happens?

yotommy
  • 1,472
  • 1
  • 12
  • 17

1 Answers1

0

It looks like in your REFER header that your Contact and CallID does not link up with your original ACK and 200OK messages. So that's why you are getting a 100 Trying eventually because there is no outstanding message waiting for any sort of response.

RaginBajin
  • 41
  • 2