diff options
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r-- | channels/chan_sip.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index bec53b776..4210322c6 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -23250,6 +23250,15 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest 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) { @@ -24200,7 +24209,11 @@ static void handle_response(struct sip_pvt *p, int resp, const char *rest, struc 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. |