From 08aeb74d7a1d9ab3715bfe10cb77aa4c0842b0cc Mon Sep 17 00:00:00 2001 From: David Vossel Date: Tue, 21 Sep 2010 18:33:18 +0000 Subject: [PATCH] Merged revisions 287929 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r287929 | dvossel | 2010-09-21 13:32:12 -0500 (Tue, 21 Sep 2010) | 4 lines Send a "415 Unsupported Media Type" after failure to process sdp due to unknown Content-Encoding header. ABE-2258 ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@287930 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 5c833b71ed..a19930e593 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -21157,7 +21157,14 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int /* Handle SDP here if we already have an owner */ if (find_sdp(req)) { if (process_sdp(p, req, SDP_T38_INITIATE)) { - transmit_response_reliable(p, "488 Not acceptable here", req); + if (!ast_strlen_zero(get_header(req, "Content-Encoding"))) { + /* Asterisk does not yet support any Content-Encoding methods. Always + * attempt to process the sdp, but return a 415 if a Content-Encoding header + * was present after processing failed. */ + transmit_response_reliable(p, "415 Unsupported Media type", req); + } else { + transmit_response_reliable(p, "488 Not acceptable here", req); + } if (!p->lastinvite) sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); res = -1; @@ -21222,8 +21229,15 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int /* We have a successful authentication, process the SDP portion if there is one */ if (find_sdp(req)) { if (process_sdp(p, req, SDP_T38_INITIATE)) { - /* Unacceptable codecs */ - transmit_response_reliable(p, "488 Not acceptable here", req); + /* Asterisk does not yet support any Content-Encoding methods. Always + * attempt to process the sdp, but return a 415 if a Content-Encoding header + * was present after processing fails. */ + if (!ast_strlen_zero(get_header(req, "Content-Encoding"))) { + transmit_response_reliable(p, "415 Unsupported Media type", req); + } else { + /* Unacceptable codecs */ + transmit_response_reliable(p, "488 Not acceptable here", req); + } p->invitestate = INV_COMPLETED; sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); ast_debug(1, "No compatible codecs for this SIP call.\n");