[asterisk-bugs] [Asterisk 0010946]: chan_sip can generate several outstanding requests, but ignores responses
noreply at bugs.digium.com
noreply at bugs.digium.com
Wed Nov 7 19:09:30 CST 2007
The following issue has been ASSIGNED.
======================================================================
http://bugs.digium.com/view.php?id=10946
======================================================================
Reported By: flefoll
Assigned To: file
======================================================================
Project: Asterisk
Issue ID: 10946
Category: Channels/chan_sip/General
Reproducibility: sometimes
Severity: minor
Priority: normal
Status: assigned
Asterisk Version: 1.4.11
SVN Branch (only for SVN checkouts, not tarball releases): N/A
SVN Revision (number only!):
Disclaimer on File?: N/A
Request Review:
======================================================================
Date Submitted: 10-11-2007 02:25 CDT
Last Modified: 11-07-2007 19:09 CST
======================================================================
Summary: chan_sip can generate several outstanding requests,
but ignores responses
Description:
chan_sip can generate several outstanding requests within a dialog. The
problem then, is that chan_sip will ignore all responses where CSeq is
lower than last outgoing CSeq, which will provoke retransmission of all
requests, except last one.
This is especially the case when chan_sip handles a REFER request and
generates NOTIFY messages towards the REFER requester : one NOTIFY is
transmitted per event during the REFER operations, without waiting for
response to previous NOTIFY's. As far as I understand, this is "BAD" but
not forbidden (see additional information).
The problem is higly related to the speed of answer of SIP devices implied
in the REFER operation.
This behaviour comes from a code section in handle_request()
[handle_incoming() in SVN trunk, but the problem seems to be the same]
after "if (req->method == SIP_RESPONSE)" :
[...] if (p->ocseq && (p->ocseq != seqno)) {
/* ignore means "don't do anything with it" but still have to
respond appropriately */
ignore = TRUE;
ast_set_flag(req, SIP_PKT_IGNORE);
ast_set_flag(req, SIP_PKT_IGNORE_RESP);
append_history(p, "Ignore", "Ignoring this retransmit\n");
} [...]
My first idea is to remove this code, in order let handle_response() do
its work (just below). I tried and it seems to work, but I'm not 100% sure
of side-effects. Any opinions ?
======================================================================
----------------------------------------------------------------------
svnbot - 11-07-07 19:09
----------------------------------------------------------------------
Repository: asterisk
Revision: 89097
U branches/1.4/channels/chan_sip.c
------------------------------------------------------------------------
r89097 | file | 2007-11-07 19:09:28 -0600 (Wed, 07 Nov 2007) | 8 lines
Add support for allowing one outgoing transaction. This means if a
response comes back out of order chan_sip will still handle it. I dream of
a chan_sip with real transaction support.
(closes issue http://bugs.digium.com/view.php?id=10946)
Reported by: flefoll
(closes issue http://bugs.digium.com/view.php?id=10915)
Reported by: ramonpeek
(closes issue http://bugs.digium.com/view.php?id=9567)
Reported by: atca_pres
------------------------------------------------------------------------
Issue History
Date Modified Username Field Change
======================================================================
11-07-07 19:09 svnbot Checkin
11-07-07 19:09 svnbot Note Added: 0073343
11-07-07 19:09 svnbot Status acknowledged => assigned
11-07-07 19:09 svnbot Assigned To => file
======================================================================
More information about the asterisk-bugs
mailing list