javasipjain-sip

Why sometimes Jain Sip return "481 Call Leg/Transaction Does Not Exist" on received bye?


Using jain sip to create sip proxy app.
client A -> proxy app -> client B
In case A call B: A can hangup, but when B send BYE sometime Jain Sip return 481 call leg to B.
When the call end in seconds, it can BYE success.
But if the call end in minutes, when B send BYE, Jain sip return 481 call leg.
And the caller client A always BYE success.

already check the call-id, request uri, from, to tag. Still no idea.

Here is the LOG

<message
from="192.168.101.217:5217" 
to="192.168.100.45:5062" 
time="1593501306804"
isSender="false" 
transactionId="z9hg4bk474906270" 
callId="1024711825" 
firstLine="INVITE sip:14@192.168.100.45:5062 SIP/2.0" 
>
<![CDATA[INVITE sip:14@192.168.100.45:5062 SIP/2.0
Via: SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK474906270;received=192.168.101.217
From: <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>
Call-ID: 1024711825
CSeq: 20 INVITE
Contact: <sip:217@192.168.101.217:5217>
Content-Type: application/sdp
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO
Max-Forwards: 70
User-Agent: eXosip/3.1.0
Subject: Call conversation
Expires: 120
Content-Length: 405

]]>
</message>

<message
from="192.168.100.45:5062" 
to="192.168.101.14:5014" 
time="1593501306864"
isSender="true" 
transactionId="z9hg4bk-3137-6aaa9fa3786b6b7fb08d9bdbbf9256c5" 
callId="1024711825" 
firstLine="INVITE sip:14@192.168.100.45:5062 SIP/2.0" 
>
<![CDATA[INVITE sip:14@192.168.100.45:5062 SIP/2.0
Via: SIP/2.0/UDP 192.168.100.45:5062;branch=z9hG4bK-3137-6aaa9fa3786b6b7fb08d9bdbbf9256c5,SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK474906270;received=192.168.101.217
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>
Call-ID: 1024711825
CSeq: 20 INVITE
Contact: <sip:217@192.168.101.217:5217>
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO
Max-Forwards: 70
User-Agent: eXosip/3.1.0
Subject: Call conversation
Expires: 120
Content-Type: application/sdp
Route: "14" <sip:14@192.168.101.14:5014;lr>
Record-Route: "TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
Content-Length: 403

]]>
</message>


<message
from="192.168.101.14:5014" 
to="192.168.100.45:5062" 
time="1593501307050"
isSender="false" 
transactionId="z9hg4bk-3137-6aaa9fa3786b6b7fb08d9bdbbf9256c5" 
callId="1024711825" 
firstLine="SIP/2.0 200 OK" 
>
<![CDATA[SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.100.45:5062;branch=z9hG4bK-3137-6aaa9fa3786b6b7fb08d9bdbbf9256c5,SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK474906270;received=192.168.101.217
Record-Route: "TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 20 INVITE
Contact: <sip:14@192.168.101.14:5014>
Content-Type: application/sdp
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO
User-Agent: eXosip/3.1.0
Content-Length: 200

]]>
</message>

<message
from="192.168.101.14:5014" 
to="192.168.100.45:5062" 
time="1593501307051"
isSender="false" 
transactionId="z9hg4bk-3137-6aaa9fa3786b6b7fb08d9bdbbf9256c5" 
callId="1024711825" 
firstLine="SIP/2.0 200 OK" 
>
<![CDATA[SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.100.45:5062;branch=z9hG4bK-3137-6aaa9fa3786b6b7fb08d9bdbbf9256c5,SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK474906270;received=192.168.101.217
Record-Route: "TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 20 INVITE
Contact: <sip:14@192.168.101.14:5014>
Content-Type: application/sdp
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO
User-Agent: eXosip/3.1.0
Content-Length: 200

]]>
</message>

<message
from="192.168.100.45:5062" 
to="192.168.101.217:5217" 
time="1593501307054"
isSender="true" 
transactionId="z9hg4bk474906270" 
callId="1024711825" 
firstLine="SIP/2.0 200 OK" 
>
<![CDATA[SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK474906270;received=192.168.101.217
Record-Route: "TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 20 INVITE
Contact: <sip:14@192.168.101.14:5014>
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO
User-Agent: eXosip/3.1.0
Content-Type: application/sdp
Content-Length: 200

]]>
</message>

<message
from="192.168.101.217:5217" 
to="192.168.100.45:5062" 
time="1593501307348"
isSender="false" 
transactionId="z9hg4bk1089380003" 
callId="1024711825" 
firstLine="ACK sip:14@192.168.100.45:5062 SIP/2.0" 
>
<![CDATA[ACK sip:14@192.168.100.45:5062 SIP/2.0
Via: SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK1089380003;received=192.168.101.217
Route: "TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 20 ACK
Contact: <sip:217@192.168.101.217:5217>
Max-Forwards: 70
User-Agent: eXosip/3.1.0
Content-Length: 0

]]>
</message>

<message
from="192.168.100.45:5062" 
to="192.168.101.14:5014" 
time="1593501307353"
isSender="true" 
transactionId="966553558-1024711825-20-ack-192.168.100.45-50623137" 
callId="1024711825" 
firstLine="ACK sip:14@192.168.100.45:5062 SIP/2.0" 
>
<![CDATA[ACK sip:14@192.168.100.45:5062 SIP/2.0
Via: SIP/2.0/UDP 192.168.100.45:5062;branch=966553558-1024711825-20-ack-192.168.100.45-50623137,SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK1089380003;received=192.168.101.217
Route: "14" <sip:14@192.168.101.14:5014;lr>,"TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 20 ACK
Contact: <sip:217@192.168.101.217:5217>
Max-Forwards: 70
User-Agent: eXosip/3.1.0
Content-Length: 0

]]>
</message>


<message
from="192.168.101.14:5014" 
to="192.168.100.45:5062" 
time="1593501381766"
isSender="false" 
transactionId="z9hg4bk106975397" 
callId="1024711825" 
firstLine="BYE sip:217@192.168.100.45:5062 SIP/2.0" 
>
<![CDATA[BYE sip:217@192.168.100.45:5062 SIP/2.0
Via: SIP/2.0/UDP 192.168.101.14:5014;rport=5014;branch=z9hG4bK106975397;received=192.168.101.14
Route: "TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
From: <sip:14@192.168.100.45:5062>;tag=113355942
To: "217" <sip:217@192.168.100.45:5062>;tag=966553558
Call-ID: 1024711825
CSeq: 2 BYE
Contact: <sip:14@192.168.101.14:5014>
Max-Forwards: 70
User-Agent: eXosip/3.1.0
Content-Length: 0

]]>
</message>

<message
from="192.168.100.45:5062" 
to="192.168.101.14:5014" 
time="1593501381771"
isSender="true" 
transactionId="z9hg4bk106975397" 
callId="1024711825" 
firstLine="SIP/2.0 481 Call leg/Transaction does not exist" 
>
<![CDATA[SIP/2.0 481 Call leg/Transaction does not exist
CSeq: 2 BYE
Call-ID: 1024711825
From: <sip:14@192.168.100.45:5062>;tag=113355942
To: "217" <sip:217@192.168.100.45:5062>;tag=966553558
Via: SIP/2.0/UDP 192.168.101.14:5014;rport=5014;branch=z9hG4bK106975397;received=192.168.101.14
Content-Length: 0

]]>
</message>


<message
from="192.168.101.217:5217" 
to="192.168.100.45:5062" 
time="1593501389132"
isSender="false" 
transactionId="z9hg4bk550352336" 
callId="1024711825" 
firstLine="BYE sip:14@192.168.100.45:5062 SIP/2.0" 
>
<![CDATA[BYE sip:14@192.168.100.45:5062 SIP/2.0
Via: SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK550352336;received=192.168.101.217
Route: "TERRA_PROXY_SERVER" <sip:TERRA_PROXY_SERVER@192.168.100.45:5062;lr>
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 21 BYE
Contact: <sip:217@192.168.101.217:5217>
Max-Forwards: 70
User-Agent: eXosip/3.1.0
Content-Length: 0

]]>
</message>

<message
from="192.168.100.45:5062" 
to="192.168.101.217:5217" 
time="1593501389136"
isSender="true" 
transactionId="z9hg4bk550352336" 
callId="1024711825" 
firstLine="SIP/2.0 200 OK" 
>
<![CDATA[SIP/2.0 200 OK
CSeq: 21 BYE
Call-ID: 1024711825
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Via: SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK550352336;received=192.168.101.217
Contact: "217" <sip:217@192.168.101.217>;expires=60
Expires: 60
Content-Length: 0

]]>
</message>

<message
from="192.168.100.45:5062" 
to="192.168.101.14:5014" 
time="1593501389137"
isSender="true" 
transactionId="966553558-1024711825-21-bye-192.168.100.45-50623137" 
callId="1024711825" 
firstLine="BYE sip:14@192.168.101.14:5014 SIP/2.0" 
>
<![CDATA[BYE sip:14@192.168.101.14:5014 SIP/2.0
Via: SIP/2.0/UDP 192.168.100.45:5062;branch=966553558-1024711825-21-bye-192.168.100.45-50623137,SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK550352336;received=192.168.101.217
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 21 BYE
Contact: <sip:217@192.168.101.217:5217>
Max-Forwards: 70
User-Agent: eXosip/3.1.0
Content-Length: 0

]]>
</message>

<message
from="192.168.101.14:5014" 
to="192.168.100.45:5062" 
time="1593501389154"
isSender="false" 
transactionId="966553558-1024711825-21-bye-192.168.100.45-50623137" 
callId="1024711825" 
firstLine="SIP/2.0 481 Call Leg/Transaction Does Not Exist" 
>
<![CDATA[SIP/2.0 481 Call Leg/Transaction Does Not Exist
Via: SIP/2.0/UDP 192.168.100.45:5062;branch=966553558-1024711825-21-bye-192.168.100.45-50623137,SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK550352336;received=192.168.101.217
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 21 BYE
User-Agent: eXosip/3.1.0
Content-Length: 0

]]>
</message>

<message
from="192.168.101.14:5014" 
to="192.168.100.45:5062" 
time="1593501389155"
isSender="false" 
transactionId="966553558-1024711825-21-bye-192.168.100.45-50623137" 
callId="1024711825" 
firstLine="SIP/2.0 481 Call Leg/Transaction Does Not Exist" 
>
<![CDATA[SIP/2.0 481 Call Leg/Transaction Does Not Exist
Via: SIP/2.0/UDP 192.168.100.45:5062;branch=966553558-1024711825-21-bye-192.168.100.45-50623137,SIP/2.0/UDP 192.168.101.217:5217;rport=5217;branch=z9hG4bK550352336;received=192.168.101.217
From: "217" <sip:217@192.168.100.45:5062>;tag=966553558
To: <sip:14@192.168.100.45:5062>;tag=113355942
Call-ID: 1024711825
CSeq: 21 BYE
User-Agent: eXosip/3.1.0
Content-Length: 0

]]>
</message>

getServerTransaction code when auto-dialogs are off. st is null, but still exception when getNewServerTransaction.

  public static ServerTransaction getServerTransaction(RequestEvent eventObject) {
    ServerTransaction st = eventObject.getServerTransaction();
    if (st != null) {
      return st;
    }
    SipProvider sipProvider = (SipProvider) eventObject.getSource();
    if (sipProvider == null) {
      log.debug("getServerTransaction fail. SipProvider is null.");
      return null;
    }
    try {
      st = sipProvider.getNewServerTransaction(eventObject.getRequest());
    } catch (SipException se) {
      log.debug("getServerTransaction fail.", se);
    }
    return st;
  }

Solution

  • If you are receiving 481 from jsip that suggests you are trying to look up a dialog when you receive the BYE and it probably doesn't exist at this point. When jsip is a proxy you should not have any jsip dialogs.

    Proxy applications in jsip shouldn't rely on jsip dialogs and must maintain their own dialog state (or not for stateless proxies). Proxies should always be implemented in a dialog-stateless mode which basically means to avoid creating any dialogs. You can see a general example here https://github.com/usnistgov/jsip/blob/master/src/examples/forked/invite/Proxy.java

    If you have already done this please post some code and debug level logs.