Author: mmichelson
Date: Wed Jan  7 11:45:56 2015
New Revision: 430314

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=430314
Log:
Fix ability to perform a remote attended transfer with PJSIP.

This fix has two parts:

* Corrected an error message to properly state that external_replaces is an 
extension. The
  error message also prints what dialplan context the external_replaces 
extension was being
  looked for in.
* Corrected the printing of the Replaces: header in an INVITE request. We were 
duplicating
  "Replaces: " in the header.

ASTERISK-24376 #close
Reported by Matt Jordan

Review: https://reviewboard.asterisk.org/r/4296
........

Merged revisions 430313 from http://svn.asterisk.org/svn/asterisk/branches/13

Modified:
    trunk/   (props changed)
    trunk/res/res_pjsip_refer.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-13-merged' - no diff available.

Modified: trunk/res/res_pjsip_refer.c
URL: 
http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip_refer.c?view=diff&rev=430314&r1=430313&r2=430314
==============================================================================
--- trunk/res/res_pjsip_refer.c (original)
+++ trunk/res/res_pjsip_refer.c Wed Jan  7 11:45:56 2015
@@ -599,9 +599,16 @@
 
        if (refer->replaces) {
                char replaces[512];
-
-               pjsip_hdr_print_on(refer->replaces, replaces, sizeof(replaces));
-               pbx_builtin_setvar_helper(chan, "__SIPREPLACESHDR", 
S_OR(replaces, NULL));
+               char *replaces_val = NULL;
+               int len;
+
+               len = pjsip_hdr_print_on(refer->replaces, replaces, 
sizeof(replaces) - 1);
+               if (len != -1) {
+                       /* pjsip_hdr_print_on does not NULL terminate the 
buffer */
+                       replaces[len] = '\0';
+                       replaces_val = replaces + sizeof("Replaces:");
+               }
+               pbx_builtin_setvar_helper(chan, "__SIPREPLACESHDR", 
replaces_val);
        } else {
                pbx_builtin_setvar_helper(chan, "SIPREPLACESHDR", NULL);
        }
@@ -674,8 +681,8 @@
                }
 
                if (!ast_exists_extension(NULL, context, "external_replaces", 
1, NULL)) {
-                       ast_log(LOG_ERROR, "Received REFER for remote session 
on channel '%s' from endpoint '%s' but 'external_replaces' context does not 
exist for handling\n",
-                               ast_channel_name(session->channel), 
ast_sorcery_object_get_id(session->endpoint));
+                       ast_log(LOG_ERROR, "Received REFER for remote session 
on channel '%s' from endpoint '%s' but 'external_replaces' extension not found 
in context %s\n",
+                               ast_channel_name(session->channel), 
ast_sorcery_object_get_id(session->endpoint), context);
                        return 404;
                }
 


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to