[asterisk-commits] jrose: branch 1.8 r398835 - in /branches/1.8/channels: ./ sip/include/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Sep 11 14:39:40 CDT 2013
Author: jrose
Date: Wed Sep 11 14:39:36 2013
New Revision: 398835
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=398835
Log:
chan_sip: Reject calls without prior SDP on 200 OK
If we receive a 200 OK without SDP, we will now check to see if
the remote address has been established for that channel's RTP
session and if the to tag for that channel has changed from
the most recent to tag in a response less than 200.
If either a change has been made since the last to-tag was
received or the remote address is unset, then we will drop
the call.
(closes issue ASTERISK-22424)
Reported by: Jonathan Rose
Review: https://reviewboard.asterisk.org/r/2827/diff/#index_header
Modified:
branches/1.8/channels/chan_sip.c
branches/1.8/channels/sip/include/sip.h
Modified: branches/1.8/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/chan_sip.c?view=diff&rev=398835&r1=398834&r2=398835
==============================================================================
--- branches/1.8/channels/chan_sip.c (original)
+++ branches/1.8/channels/chan_sip.c Wed Sep 11 14:39:36 2013
@@ -20907,6 +20907,15 @@
ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
}
ast_rtp_instance_activate(p->rtp);
+ } else if (!reinvite) {
+ struct ast_sockaddr remote_address = {{0,}};
+
+ ast_rtp_instance_get_remote_address(p->rtp, &remote_address);
+ if (ast_sockaddr_isnull(&remote_address) || (!ast_strlen_zero(p->theirprovtag) && strcmp(p->theirtag, p->theirprovtag))) {
+ ast_log(LOG_WARNING, "Received response: \"200 OK\" from '%s' without SDP\n", p->relatedpeer->name);
+ ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
+ ast_rtp_instance_activate(p->rtp);
+ }
}
if (!req->ignore && p->owner) {
@@ -21762,7 +21771,11 @@
gettag(req, "To", tag, sizeof(tag));
ast_string_field_set(p, theirtag, tag);
- }
+ } else {
+ /* Store theirtag to track for changes when 200 responses to invites are received without SDP */
+ ast_string_field_set(p, theirprovtag, p->theirtag);
+ }
+
/* This needs to be configurable on a channel/peer level,
not mandatory for all communication. Sadly enough, NAT implementations
are not so stable so we can always rely on these headers.
Modified: branches/1.8/channels/sip/include/sip.h
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/sip/include/sip.h?view=diff&rev=398835&r1=398834&r2=398835
==============================================================================
--- branches/1.8/channels/sip/include/sip.h (original)
+++ branches/1.8/channels/sip/include/sip.h Wed Sep 11 14:39:36 2013
@@ -967,6 +967,7 @@
AST_STRING_FIELD(rdnis); /*!< Referring DNIS */
AST_STRING_FIELD(redircause); /*!< Referring cause */
AST_STRING_FIELD(theirtag); /*!< Their tag */
+ AST_STRING_FIELD(theirprovtag); /*!< Provisional their tag, used when evaluating responses to invites */
AST_STRING_FIELD(tag); /*!< Our tag for this session */
AST_STRING_FIELD(username); /*!< [user] name */
AST_STRING_FIELD(peername); /*!< [peer] name, not set if [user] */
More information about the asterisk-commits
mailing list