Merge "res_pjsip: Prevent "user=phone" being added multiple times to header"
authorJenkins2 <jenkins2@gerrit.asterisk.org>
Thu, 12 Oct 2017 12:03:59 +0000 (07:03 -0500)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Thu, 12 Oct 2017 12:03:59 +0000 (07:03 -0500)
addons/cdr_mysql.c
apps/app_originate.c
channels/chan_vpb.cc

index 1c11663..1f97362 100644 (file)
@@ -510,7 +510,6 @@ static int my_load_module(int reload)
        } else {
                calldate_compat = 0;
        }
-       ast_free(compat);
 
        if (res < 0) {
                if (reload) {
index 8edccc7..30fa565 100644 (file)
@@ -155,6 +155,7 @@ static int originate_exec(struct ast_channel *chan, const char *data)
        char *parse;
        char *chantech, *chandata;
        int res = -1;
+       int continue_in_dialplan = 0;
        int outgoing_status = 0;
        unsigned int timeout = 30;
        static const char default_exten[] = "s";
@@ -223,6 +224,12 @@ static int originate_exec(struct ast_channel *chan, const char *data)
                predial_callee = opt_args[OPT_ARG_PREDIAL_CALLEE];
        }
 
+       if (strcasecmp(args.type, "exten") && strcasecmp(args.type, "app")) {
+               ast_log(LOG_ERROR, "Incorrect type, it should be 'exten' or 'app': %s\n",
+                               args.type);
+               goto return_cleanup;
+       }
+
        if (!strcasecmp(args.type, "exten")) {
                int priority = 1; /* Initialized in case priority not specified */
                const char *exten = args.arg2;
@@ -241,25 +248,32 @@ static int originate_exec(struct ast_channel *chan, const char *data)
                ast_debug(1, "Originating call to '%s/%s' and connecting them to extension %s,%s,%d\n",
                                chantech, chandata, args.arg1, exten, priority);
 
-               ast_pbx_outgoing_exten_predial(chantech, cap_slin, chandata,
+               res = ast_pbx_outgoing_exten_predial(chantech, cap_slin, chandata,
                                timeout * 1000, args.arg1, exten, priority, &outgoing_status,
                                AST_OUTGOING_WAIT, NULL, NULL, NULL, NULL, NULL, 0, NULL,
                                predial_callee);
-       } else if (!strcasecmp(args.type, "app")) {
+       } else {
                ast_debug(1, "Originating call to '%s/%s' and connecting them to %s(%s)\n",
                                chantech, chandata, args.arg1, S_OR(args.arg2, ""));
 
-               ast_pbx_outgoing_app_predial(chantech, cap_slin, chandata,
+               res = ast_pbx_outgoing_app_predial(chantech, cap_slin, chandata,
                                timeout * 1000, args.arg1, args.arg2, &outgoing_status,
                                AST_OUTGOING_WAIT, NULL, NULL, NULL, NULL, NULL, NULL,
                                predial_callee);
-       } else {
-               ast_log(LOG_ERROR, "Incorrect type, it should be 'exten' or 'app': %s\n",
-                               args.type);
-               goto return_cleanup;
        }
 
-       res = 0;
+       /*
+        * Getting here means that we have passed the various validation checks and
+        * have at least attempted the dial. If we have a reason (outgoing_status),
+        * we clear our error indicator so that we ultimately report the right thing
+        * to the caller.
+        */
+       if (res && outgoing_status) {
+               res = 0;
+       }
+
+       /* We need to exit cleanly if we've gotten this far */
+       continue_in_dialplan = 1;
 
 return_cleanup:
        if (res) {
@@ -292,7 +306,7 @@ return_cleanup:
        ao2_cleanup(cap_slin);
        ast_autoservice_stop(chan);
 
-       return res;
+       return continue_in_dialplan ? 0 : -1;
 }
 
 static int unload_module(void)
index d7e9732..6e77dc2 100644 (file)
@@ -1791,7 +1791,7 @@ static int vpb_digit_end(struct ast_channel *ast, char digit, unsigned int durat
        ast_verb(4, "%s: vpb_digit: asked to play digit[%s]\n", p->dev, s);
 
        ast_mutex_lock(&p->play_dtmf_lock);
-       strncat(p->play_dtmf, s, sizeof(*p->play_dtmf) - strlen(p->play_dtmf) - 1);
+       strncat(p->play_dtmf, s, sizeof(p->play_dtmf) - strlen(p->play_dtmf) - 1);
        ast_mutex_unlock(&p->play_dtmf_lock);
 
        ast_mutex_unlock(&p->lock);