mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Updated chan_sip to place calls on hold if SDP address in INVITE is ANY
This patch fixes the case where an INVITE is received with c=0.0.0.0 or ::. In this case, the call should be placed on hold. Previously, we checked for the address being null; this patch keeps that behavior but also checks for the ANY IP addresses. Review: https://reviewboard.asterisk.org/r/1504/ (closes issue ASTERISK-18086) Reported by: James Bottomley Tested by: Matt Jordan git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@340164 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -8494,6 +8494,17 @@ static int get_ip_and_port_from_sdp(struct sip_request *req, const enum media_ty | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*! \internal
 | ||||
|  * \brief Returns whether or not the address is null or ANY / unspecified (0.0.0.0 or ::) | ||||
|  * \retval TRUE if the address is null or any | ||||
|  * \retval FALSE if the address it not null or any | ||||
|  * \note In some circumstances, calls should be placed on hold if either of these conditions exist. | ||||
|  */ | ||||
| static int sockaddr_is_null_or_any(const struct ast_sockaddr *addr) | ||||
| { | ||||
| 	return ast_sockaddr_isnull(addr) || ast_sockaddr_is_any(addr); | ||||
| } | ||||
| 
 | ||||
| /*! \brief Process SIP SDP offer, select formats and activate RTP channels
 | ||||
| 	If offer is rejected, we will not change any properties of the call | ||||
|  	Return 0 on success, a negative value on errors. | ||||
| @@ -9075,7 +9086,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action | ||||
| 		/* Activate a re-invite */ | ||||
| 		ast_queue_frame(p->owner, &ast_null_frame); | ||||
| 		change_hold_state(p, req, FALSE, sendonly); | ||||
| 	} else if ((ast_sockaddr_isnull(sa) && ast_sockaddr_isnull(vsa) && ast_sockaddr_isnull(tsa) && ast_sockaddr_isnull(isa)) || (sendonly && sendonly != -1)) { | ||||
| 	} else if ((sockaddr_is_null_or_any(sa) && sockaddr_is_null_or_any(vsa) && sockaddr_is_null_or_any(tsa) && sockaddr_is_null_or_any(isa)) || (sendonly && sendonly != -1)) { | ||||
| 		ast_queue_control_data(p->owner, AST_CONTROL_HOLD, | ||||
| 				       S_OR(p->mohsuggest, NULL), | ||||
| 				       !ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user