]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Responding to OPTIONS packet with 404 because Asterisk not looking for "s" extension.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 5 Apr 2011 15:38:14 +0000 (15:38 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 5 Apr 2011 15:38:14 +0000 (15:38 +0000)
The get_destination() function was not using the "s" extension when the
request URI did not specify an extension.  This is a regression caused
when the URI parsing code was extracted into parse_uri().

Made get_destination() substitute the "s" extension when the parsed URI
results in an empty string.

(closes issue #18348)
Reported by: shmaize
Patches:
      issue18348_v1.8.patch uploaded by rmudgett (license 664)
Tested by: shmaize

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@312866 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 9d9dacefb07aba67050c22aa15fff1477030de91..7c11ba6d5c9b8dc989b26c460cb78e085845ce59 100644 (file)
@@ -14398,16 +14398,20 @@ static int get_rdnis(struct sip_pvt *p, struct sip_request *oreq, char **name, c
        return 0;
 }
 
-/*! \brief Find out who the call is for.
-       We use the request uri as a destination.
-       This code assumes authentication has been done, so that the
-       device (peer/user) context is already set.
-       \return 0 on success (found a matching extension), non-zero on failure
-
-  \note If the incoming uri is a SIPS: uri, we are required to carry this across
-       the dialplan, so that the outbound call also is a sips: call or encrypted
-       IAX2 call. If that's not available, the call should FAIL.
-*/
+/*!
+ * \brief Find out who the call is for.
+ *
+ * \details
+ * We use the request uri as a destination.
+ * This code assumes authentication has been done, so that the
+ * device (peer/user) context is already set.
+ *
+ * \return 0 on success (found a matching extension), non-zero on failure
+ *
+ * \note If the incoming uri is a SIPS: uri, we are required to carry this across
+ * the dialplan, so that the outbound call also is a sips: call or encrypted
+ * IAX2 call. If that's not available, the call should FAIL.
+ */
 static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_request *oreq, int *cc_recall_core_id)
 {
        char tmp[256] = "", *uri, *domain, *dummy = NULL;
@@ -14433,6 +14437,14 @@ static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_re
 
        SIP_PEDANTIC_DECODE(domain);
        SIP_PEDANTIC_DECODE(uri);
+       if (ast_strlen_zero(uri)) {
+               /*
+                * Either there really was no extension found or the request
+                * URI had encoded nulls that made the string "empty".  Use "s"
+                * as the extension.
+                */
+               uri = "s";
+       }
 
        ast_string_field_set(p, domain, domain);