- Fix more problems in transfer code (thanks Tholo!)
authorOlle Johansson <oej@edvina.net>
Sun, 4 Jun 2006 21:01:13 +0000 (21:01 +0000)
committerOlle Johansson <oej@edvina.net>
Sun, 4 Jun 2006 21:01:13 +0000 (21:01 +0000)
- Add debug for hangup not in UP state

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

channels/chan_sip.c

index f2eb0f6..b366ea5 100644 (file)
@@ -2908,8 +2908,11 @@ static int sip_hangup(struct ast_channel *ast)
                return 0;
        }
        /* If the call is not UP, we need to send CANCEL instead of BYE */
                return 0;
        }
        /* If the call is not UP, we need to send CANCEL instead of BYE */
-       if (ast->_state != AST_STATE_UP)
+       if (ast->_state != AST_STATE_UP) {
                needcancel = TRUE;
                needcancel = TRUE;
+               if (option_debug > 3)
+                       ast_log(LOG_DEBUG, "Hanging up channel in state %s (not UP)\n", ast_state2str(ast->_state));
+       }
 
        /* Disconnect */
        p = ast->tech_pvt;
 
        /* Disconnect */
        p = ast->tech_pvt;
@@ -7318,23 +7321,23 @@ 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 */
 
        /* Check for arguments in the refer_to header */
        if ((ptr = strchr(refer_to, '?'))) { /* Search for arguments */
-               *ptr = '\0';
-               ptr++;
+               *ptr++ = '\0';
                if (!strncasecmp(ptr, "REPLACES=", 9)) {
                if (!strncasecmp(ptr, "REPLACES=", 9)) {
-                       char *to, *from;
+                       char *to = NULL, *from = NULL;
 
                        /* This is an attended transfer */
                        referdata->attendedtransfer = 1;
                        strncpy(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid));
                        ast_uri_decode(referdata->replaces_callid);
 
                        /* This is an attended transfer */
                        referdata->attendedtransfer = 1;
                        strncpy(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid));
                        ast_uri_decode(referdata->replaces_callid);
-                       if ((ptr = strchr(referdata->replaces_callid, ';')))    /* Remove options */ {
-                               *ptr = '\0';
-                               ptr++;
+                       if ((ptr = strchr(referdata->replaces_callid, ';')))    /* Find options */ {
+                               *ptr++ = '\0';
                        }
 
                        }
 
-                       /* Find the different tags before we destroy the string */
-                       to = strcasestr(ptr, "to-tag=");
-                       from = strcasestr(ptr, "from-tag=");
+                       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) {
 
                        /* Grab the to header */
                        if (to) {