I managed to figure out what was going on here. I discovered that the
problem as described only manifests for scenarios in which
*authenticated* INVITE's are in use. In that circumstance the ACK
which follows the 401 response incorrectly results in SIPp internal
state for that call-id being marked 'call_established=true'. In turn
that leads to BYE being sent on unexpected message rather than ACK.
I fixed the bug and created this patch (below) against the the file
call.cpp. I'll leave it to someone more knowledgeable than me to
decide whether or not to bless this and incorporate for next sipp
turnaround. At least in my testing of it w/ my scenario file the
default unexpected message behavior is now correct.
- Russ
*** call.cpp 2009-07-28 06:16:12.000000000 -0400
--- call.cpp.new 2010-02-22 13:02:22.000138000 -0500
***************
*** 1245,1252 ****
}
if (strcmp(msg_name,"ACK") == 0) {
- call_established = true ;
ack_is_pending = false ;
}
*send_status = send_raw(dest, index, *len);
--- 1245,1255 ----
}
if (strcmp(msg_name,"ACK") == 0) {
ack_is_pending = false ;
+ /* If 401 then INVITE is being challenged -- no call established. */
+ if (get_reply_code(last_recv_msg) != 401) {
+ call_established = true ;
+ }
}
*send_status = send_raw(dest, index, *len);
r...@cedarpointcom wrote:
> At one point the documentation for sipp 3.1 regarding the default
> behavior for unexpected messages states:
>
> "...if no 200 OK message has been received...(and) the unexpected
> message is a 4XX or 5XX, SIPp will send an ACK"
>
> At a later point the "online help" (sipp -h) is documented as such:
>
> -nd : No Default. Disable all default behavior of SIPp which
> are the following:
> - On UDP retransmission timeout, abort the call by
> sending a BYE or a CANCEL
> - On receive timeout with no ontimeout attribute, abort
> the call by sending a BYE or a CANCEL
> - On unexpected BYE send a 200 OK and close the call
> - On unexpected CANCEL send a 200 OK and close the call
> - On unexpected PING send a 200 OK and continue the call
> - On any other unexpected message, abort the call by
> sending a BYE or a CANCEL
>
> Notice that in this second description there's no mention of sending ACK
> under any circumstance.
> So, at the very least, it appears to me that there's conflicting info in
> the documentation.
>
> The correct response when a 4XX/5XX is rec'd prior to a call being
> connected is the first one -- to send ACK.
>
> In fact the current behavior of sipp 3.1 (2009-07-29) is to send BYE.
> Here's an excerpt for a single call id from the short message trace file:
>
> 2010-02-19 15:52:40:648 1266612760.648841 S
> [email protected] CSeq:1 INVITE INVITE
> sip:[email protected];user=phone SIP/2.0
> 2010-02-19 15:52:40:649 1266612760.649834 R
> [email protected] CSeq: 1 INVITE SIP/2.0 401 Unauthorized
> 2010-02-19 15:52:40:649 1266612760.649959 S
> [email protected] CSeq:1 ACK ACK sip:8252007...@8252007456:5060
> SIP/2.0
> 2010-02-19 15:52:40:850 1266612760.850845 S
> [email protected] CSeq:2 INVITE INVITE
> sip:[email protected];user=phone SIP/2.0
> 2010-02-19 15:52:40:852 1266612760.852562 R
> [email protected] CSeq: 2 INVITE SIP/2.0 100 Trying
> 2010-02-19 15:52:40:858 1266612760.858710 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:52:40:858 1266612760.858825 S
> [email protected] CSeq:3 BYE BYE
> sip:[email protected];user=phone SIP/2.0
> 2010-02-19 15:52:40:860 1266612760.860048 R
> [email protected] CSeq: 3 BYE SIP/2.0 481 Call/Transaction Does Not
> Exist
> 2010-02-19 15:52:41:358 1266612761.358890 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:52:42:358 1266612762.358308 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:52:44:358 1266612764.358286 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:52:48:358 1266612768.358527 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:52:52:358 1266612772.358358 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:52:56:357 1266612776.357566 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:53:00:357 1266612780.357227 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:53:04:357 1266612784.357154 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:53:08:357 1266612788.357302 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
> 2010-02-19 15:53:12:356 1266612792.356628 R
> [email protected] CSeq: 2 INVITE SIP/2.0 486 Busy Here
>
>
> I did a search of the mailing list archive on this topic and found one
> item which suggested that this was indeed working correctly (.ie sending
> ACK) but implied that one must be using one of the default embedded
> scenarios (i'm using custom.)
>
> I realize that I can make the call flow correct by handling 4xx/5xx as
> optional responses w/ branching etc within my custom scenario file, but
> in doing so these become no longer "unexpected" messages and thus don't
> show up in the error log, unexpected msg counts etc, which makes it not
> so satisfying a solution for me.
>
> - Russ
>
>
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Sipp-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sipp-users