]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge Script <automerge@asterisk.org>
Sat, 21 Apr 2007 14:23:55 +0000 (14:23 +0000)
committerAutomerge Script <automerge@asterisk.org>
Sat, 21 Apr 2007 14:23:55 +0000 (14:23 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61752 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_dial.c
apps/app_queue.c
channels/chan_sip.c
funcs/func_callerid.c
funcs/func_cdr.c
funcs/func_groupcount.c
funcs/func_language.c
funcs/func_moh.c
funcs/func_timeout.c
loader.c

index d900a14d2322c3ad5b00fc3f910df85eb6ad5c5d..b04b3343506135a87598fb0665d5bad64998e702 100644 (file)
@@ -90,7 +90,10 @@ static char *descrip =
 "ends the call.\n"
 "  The optional URL will be sent to the called party if the channel supports it.\n"
 "  If the OUTBOUND_GROUP variable is set, all peer channels created by this\n"
-"application will be put into that group (as in Set(GROUP()=...).\n\n"
+"application will be put into that group (as in Set(GROUP()=...).\n"
+"  If the OUTBOUND_GROUP_ONCE variable is set, all peer channels created by this\n"
+"application will be put into that group (as in Set(GROUP()=...). Unlike OUTBOUND_GROUP,\n"
+"however, the variable will be unset after use.\n\n"
 "  Options:\n"
 "    A(x) - Play an announcement to the called party, using 'x' as the file.\n"
 "    C    - Reset the CDR for this call.\n"
@@ -1009,10 +1012,15 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
 
        if (continue_exec)
                *continue_exec = 0;
-
+       
        /* If a channel group has been specified, get it for use when we create peer channels */
-       outbound_group = pbx_builtin_getvar_helper(chan, "OUTBOUND_GROUP");
-
+       if ((outbound_group = pbx_builtin_getvar_helper(chan, "OUTBOUND_GROUP_ONCE"))) {
+               outbound_group = ast_strdupa(outbound_group);
+               pbx_builtin_setvar_helper(chan, "OUTBOUND_GROUP_ONCE", NULL);
+       } else {
+               outbound_group = pbx_builtin_getvar_helper(chan, "OUTBOUND_GROUP");
+       }
+           
        ast_copy_flags(peerflags, &opts, OPT_DTMF_EXIT | OPT_GO_ON | OPT_ORIGINAL_CLID | OPT_CALLER_HANGUP);
        cur = args.peers;
        do {
index b6d809862f3a90354a0bbeaf2bea0c93d9dbb192..712619256d838e7b8a7db60d99fd321b80e18eef 100644 (file)
@@ -1990,7 +1990,7 @@ static struct localuser *wait_for_answer(struct queue_ent *qe, struct localuser
                                ast_frfree(f);
                                return NULL;
                        }
-                       if ((f->frametype == AST_FRAME_DTMF) && (f->subclass != '*') && valid_exit(qe, f->subclass)) {
+                       if ((f->frametype == AST_FRAME_DTMF) && valid_exit(qe, f->subclass)) {
                                if (option_verbose > 3)
                                        ast_verbose(VERBOSE_PREFIX_3 "User pressed digit: %c\n", f->subclass);
                                *to=0;
index 6f366add933ead2cb0db79f8928ee991987cf170..9ef5e9fabfc70de8b8e0fac39293b1907b4ee50b 100644 (file)
@@ -10298,13 +10298,15 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
                        if ((resp >= 300) && (resp < 700)) {
                                if ((option_verbose > 2) && (resp != 487))
                                        ast_verbose(VERBOSE_PREFIX_3 "Got SIP response %d \"%s\" back from %s\n", resp, rest, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr));
-                               if (p->rtp) {
-                                       /* Immediately stop RTP */
-                                       ast_rtp_stop(p->rtp);
-                               }
-                               if (p->vrtp) {
-                                       /* Immediately stop VRTP */
-                                       ast_rtp_stop(p->vrtp);
+                               if (sipmethod == SIP_INVITE) {
+                                       if (p->rtp) {
+                                               /* Immediately stop RTP */
+                                               ast_rtp_stop(p->rtp);
+                                       }
+                                       if (p->vrtp) {
+                                               /* Immediately stop VRTP */
+                                               ast_rtp_stop(p->vrtp);
+                                       }
                                }
                                /* XXX Locking issues?? XXX */
                                switch(resp) {
@@ -10348,7 +10350,8 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
                                /* ACK on invite */
                                if (sipmethod == SIP_INVITE) 
                                        transmit_request(p, SIP_ACK, seqno, 0, 0);
-                               ast_set_flag(p, SIP_ALREADYGONE);       
+                               if (sipmethod != SIP_MESSAGE && sipmethod != SIP_INFO)
+                                       ast_set_flag(p, SIP_ALREADYGONE);       
                                if (!p->owner)
                                        ast_set_flag(p, SIP_NEEDDESTROY);       
                        } else if ((resp >= 100) && (resp < 200)) {
@@ -11175,6 +11178,10 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
                        ast_copy_string(p->context, p->subscribecontext, sizeof(p->context));
                else if (ast_strlen_zero(p->context))
                        strcpy(p->context, default_context);
+
+               /* Get full contact header - this needs to be used as a request URI in NOTIFY's */
+               parse_ok_contact(p, req);
+
                /* Get destination right away */
                build_contact(p);
                if (gotdest) {
index 264c404dd5fe62c2ca603266dc0f794e708eb45b..374d131337ced0d978e1d680aac2aa0e758bc780 100644 (file)
@@ -42,6 +42,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
+       if (!chan)
+               return "";
+
        if (!strncasecmp("all", data, 3)) {
                snprintf(buf, len, "\"%s\" <%s>", chan->cid.cid_name ? chan->cid.cid_name : "", chan->cid.cid_num ? chan->cid.cid_num : "");    
        } else if (!strncasecmp("name", data, 4)) {
@@ -73,9 +76,9 @@ static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char
 
 static void callerid_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
 {
-       if (!value)
+       if (!value || !chan)
                 return;
-       
+
        if (!strncasecmp("all", data, 3)) {
                char name[256];
                char num[256];
index fdd241894b6d6bf8ebef4a6fa911645b376a72a1..5ff3ffcf9ff76e0b85a8d068df3f97f2cc5d9e02 100644 (file)
@@ -44,7 +44,7 @@ static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char
        int argc;
        char *argv[2];
        int recursive = 0;
-       struct ast_cdr *cdr = chan->cdr;
+       struct ast_cdr *cdr = chan ? chan->cdr : NULL;
 
        if (ast_strlen_zero(data))
                return NULL;
@@ -78,9 +78,9 @@ static void builtin_function_cdr_write(struct ast_channel *chan, char *cmd, char
        char *argv[2];
        int recursive = 0;
 
-       if (ast_strlen_zero(data) || !value)
+       if (ast_strlen_zero(data) || !value || !chan)
                return;
-       
+
        mydata = ast_strdupa(data);
        argc = ast_app_separate_args(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
 
index 0f07d832776611d42221d149a02397410005dbea..87bcdf4f5ea74c248663c620842506ce33746b64 100644 (file)
@@ -149,6 +149,9 @@ static char *group_list_function_read(struct ast_channel *chan, char *cmd, char
        char tmp1[1024] = "";
        char tmp2[1024] = "";
 
+       if (!chan)
+               return "";
+
        headp=&chan->varshead;
        AST_LIST_TRAVERSE(headp,current,entries) {
                if (!strncmp(ast_var_name(current), GROUP_CATEGORY_PREFIX "_", strlen(GROUP_CATEGORY_PREFIX) + 1)) {
index ea829a2f4497528bcc58ef2b10ea91021c299be1..eef732326e941e1996708d267109ef4b11effba9 100644 (file)
 
 static char *builtin_function_language_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
-       ast_copy_string(buf, chan->language, len);
+       ast_copy_string(buf, chan ? chan->language : "", len);
 
        return buf;
 }
 
 static void builtin_function_language_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
 {
-       if (value)
+       if (chan && value)
                ast_copy_string(chan->language, value, sizeof(chan->language));
 }
 
index 25aa73af7de09c7c5a36f7db3e0b9b6b8548fbc7..203a4332dc56fd8220a7aa5e648c331fbf26f0c7 100644 (file)
 
 static char *function_moh_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
 {
-       ast_copy_string(buf, chan->musicclass, len);
+       ast_copy_string(buf, chan ? chan->musicclass : "", len);
 
        return buf;
 }
 
 static void function_moh_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
 {
-       ast_copy_string(chan->musicclass, value, sizeof(chan->musicclass));
+       if (chan)
+               ast_copy_string(chan->musicclass, value, sizeof(chan->musicclass));
 }
 
 #ifndef BUILTIN_FUNC
index 5983617aa6c5be87024bd47de5445c5229c58eef..95490594e8016d204b0a45c673d205667085c91c 100644 (file)
@@ -42,6 +42,9 @@ static char *builtin_function_timeout_read(struct ast_channel *chan, char *cmd,
 {
        time_t myt;
 
+       if (!chan)
+               return "";
+
        if (!data) {
                ast_log(LOG_ERROR, "Must specify type of timeout to get.\n");
                 return NULL;
@@ -86,6 +89,9 @@ static void builtin_function_timeout_write(struct ast_channel *chan, char *cmd,
        char timestr[64];
        struct tm myt;
 
+       if (!chan)
+               return;
+
        if (!data) {
                ast_log(LOG_ERROR, "Must specify type of timeout to set.\n");
                return;
index d9e0c88d02a92df9d9148253e151f56d72890cb7..c42d2b13720a364ff578c85535eb07016a512b69 100644 (file)
--- a/loader.c
+++ b/loader.c
@@ -215,6 +215,8 @@ int ast_module_reload(const char *name)
                ast_verbose("The previous reload command didn't finish yet\n");
                return -1;
        }
+       time(&ast_lastreloadtime);
+
        if (!name || !strcasecmp(name, "extconfig")) {
                read_config_maps();
                reloaded = 2;
@@ -239,7 +241,6 @@ int ast_module_reload(const char *name)
                dnsmgr_reload();
                reloaded = 2;
        }
-       time(&ast_lastreloadtime);
 
        ast_mutex_lock(&modlock);
        oldversion = modlistver;