]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Some clients do not put the call-id for replaces at the beginning, so support it...
authorJoshua Colp <jcolp@digium.com>
Fri, 6 Feb 2009 17:14:15 +0000 (17:14 +0000)
committerJoshua Colp <jcolp@digium.com>
Fri, 6 Feb 2009 17:14:15 +0000 (17:14 +0000)
(closes issue #14350)
Reported by: fhackenberger

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

channels/chan_sip.c

index db6973bb0dfd658d01afb8f970aa58edc350e006..ce07ecc7da760d7466124f254da924c3d2aff669 100644 (file)
@@ -9322,50 +9322,48 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi
        }
 
        /* Check for arguments in the refer_to header */
-       if ((ptr = strchr(refer_to, '?'))) { /* Search for arguments */
-               *ptr++ = '\0';
-               if (!strncasecmp(ptr, "REPLACES=", 9)) {
-                       char *to = NULL, *from = NULL;
-
-                       /* This is an attended transfer */
-                       referdata->attendedtransfer = 1;
-                       ast_copy_string(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid));
-                       ast_uri_decode(referdata->replaces_callid);
-                       if ((ptr = strchr(referdata->replaces_callid, ';')))    /* Find options */ {
-                               *ptr++ = '\0';
-                       }
-
-                       if (ptr) {
-                               /* Find the different tags before we destroy the string */
-                               to = strcasestr(ptr, "to-tag=");
-                               from = strcasestr(ptr, "from-tag=");
-                       }
-
-                       /* Grab the to header */
-                       if (to) {
-                               ptr = to + 7;
-                               if ((to = strchr(ptr, '&')))
-                                       *to = '\0';
-                               if ((to = strchr(ptr, ';')))
-                                       *to = '\0';
-                               ast_copy_string(referdata->replaces_callid_totag, ptr, sizeof(referdata->replaces_callid_totag));
-                       }
-
-                       if (from) {
-                               ptr = from + 9;
-                               if ((to = strchr(ptr, '&')))
-                                       *to = '\0';
-                               if ((to = strchr(ptr, ';')))
-                                       *to = '\0';
-                               ast_copy_string(referdata->replaces_callid_fromtag, ptr, sizeof(referdata->replaces_callid_fromtag));
-                       }
-
-                       if (option_debug > 1) {
-                               if (!pedanticsipchecking)
-                                       ast_log(LOG_DEBUG,"Attended transfer: Will use Replace-Call-ID : %s (No check of from/to tags)\n", referdata->replaces_callid );
-                               else
-                                       ast_log(LOG_DEBUG,"Attended transfer: Will use Replace-Call-ID : %s F-tag: %s T-tag: %s\n", referdata->replaces_callid, referdata->replaces_callid_fromtag ? referdata->replaces_callid_fromtag : "<none>", referdata->replaces_callid_totag ? referdata->replaces_callid_totag : "<none>" );
-                       }
+       ast_log(LOG_NOTICE, "refer to = %s\n", refer_to);
+       if ((ptr = strcasestr(refer_to, "replaces="))) {
+               char *to = NULL, *from = NULL;
+               
+               /* This is an attended transfer */
+               referdata->attendedtransfer = 1;
+               ast_copy_string(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid));
+               ast_uri_decode(referdata->replaces_callid);
+               if ((ptr = strchr(referdata->replaces_callid, ';')))    /* Find options */ {
+                       *ptr++ = '\0';
+               }
+               
+               if (ptr) {
+                       /* Find the different tags before we destroy the string */
+                       to = strcasestr(ptr, "to-tag=");
+                       from = strcasestr(ptr, "from-tag=");
+               }
+               
+               /* Grab the to header */
+               if (to) {
+                       ptr = to + 7;
+                       if ((to = strchr(ptr, '&')))
+                               *to = '\0';
+                       if ((to = strchr(ptr, ';')))
+                               *to = '\0';
+                       ast_copy_string(referdata->replaces_callid_totag, ptr, sizeof(referdata->replaces_callid_totag));
+               }
+               
+               if (from) {
+                       ptr = from + 9;
+                       if ((to = strchr(ptr, '&')))
+                               *to = '\0';
+                       if ((to = strchr(ptr, ';')))
+                               *to = '\0';
+                       ast_copy_string(referdata->replaces_callid_fromtag, ptr, sizeof(referdata->replaces_callid_fromtag));
+               }
+               
+               if (option_debug > 1) {
+                       if (!pedanticsipchecking)
+                               ast_log(LOG_DEBUG,"Attended transfer: Will use Replace-Call-ID : %s (No check of from/to tags)\n", referdata->replaces_callid );
+                       else
+                               ast_log(LOG_DEBUG,"Attended transfer: Will use Replace-Call-ID : %s F-tag: %s T-tag: %s\n", referdata->replaces_callid, referdata->replaces_callid_fromtag ? referdata->replaces_callid_fromtag : "<none>", referdata->replaces_callid_totag ? referdata->replaces_callid_totag : "<none>" );
                }
        }