]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3321 --resolve
authorMarc Olivier Chouinard <mochouinard@moctel.com>
Thu, 15 Dec 2011 17:16:41 +0000 (12:16 -0500)
committerMarc Olivier Chouinard <mochouinard@moctel.com>
Thu, 15 Dec 2011 17:16:41 +0000 (12:16 -0500)
src/include/switch_types.h
src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp
src/mod/endpoints/mod_sofia/mod_sofia.c
src/switch_channel.c
src/switch_ivr_originate.c

index 62af4f9aaf1aa0a4746801c095a186a2fca664f5..ea65319924cfe7e0ad8882576b817f97f0833bba 100644 (file)
@@ -1691,7 +1691,11 @@ typedef enum {
        SWITCH_CAUSE_MEDIA_TIMEOUT = 604,
        SWITCH_CAUSE_PICKED_OFF = 605,
        SWITCH_CAUSE_USER_NOT_REGISTERED = 606,
-       SWITCH_CAUSE_PROGRESS_TIMEOUT = 607
+       SWITCH_CAUSE_PROGRESS_TIMEOUT = 607,
+       SWITCH_CAUSE_INVALID_GATEWAY = 608,
+       SWITCH_CAUSE_GATEWAY_DOWN = 609,
+       SWITCH_CAUSE_INVALID_URL = 610,
+       SWITCH_CAUSE_INVALID_PROFILE = 611
 } switch_call_cause_t;
 
 typedef enum {
index aaacd4ecba96a1192db1790f4c50a2aeb86b76cd..b5f68132e61a8fadd7293ee10352aeab3a39abbc 100644 (file)
@@ -1399,6 +1399,8 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET:
                     case SWITCH_CAUSE_NO_ROUTE_DESTINATION:
                     case SWITCH_CAUSE_INVALID_NUMBER_FORMAT:
+                    case SWITCH_CAUSE_INVALID_GATEWAY:
+                    case SWITCH_CAUSE_INVALID_URL:
                     case SWITCH_CAUSE_FACILITY_NOT_SUBSCRIBED:
                     case SWITCH_CAUSE_INCOMPATIBLE_DESTINATION:
 
@@ -1430,7 +1432,9 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL:
                     case SWITCH_CAUSE_CHANNEL_UNACCEPTABLE:
                     case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
+                    case SWITCH_CAUSE_INVALID_PROFILE:
                     case SWITCH_CAUSE_NETWORK_OUT_OF_ORDER:
+                    case SWITCH_CAUSE_GATEWAY_DOWN:
                     case SWITCH_CAUSE_FACILITY_REJECTED:
                     case SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED:
                     case SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED:
@@ -1448,6 +1452,8 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET:
                     case SWITCH_CAUSE_NO_ROUTE_DESTINATION:
                     case SWITCH_CAUSE_INVALID_NUMBER_FORMAT:
+                    case SWITCH_CAUSE_INVALID_GATEWAY:
+                    case SWITCH_CAUSE_INVALID_URL:
                     case SWITCH_CAUSE_FACILITY_NOT_SUBSCRIBED:
                     case SWITCH_CAUSE_INCOMPATIBLE_DESTINATION:
 
@@ -1480,6 +1486,7 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_CHANNEL_UNACCEPTABLE:
                     case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
                     case SWITCH_CAUSE_NETWORK_OUT_OF_ORDER:
+                    case SWITCH_CAUSE_GATEWAY_DOWN:
                     case SWITCH_CAUSE_FACILITY_REJECTED:
                     case SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED:
                     case SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED:
@@ -1497,6 +1504,8 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET:
                     case SWITCH_CAUSE_NO_ROUTE_DESTINATION:
                     case SWITCH_CAUSE_INVALID_NUMBER_FORMAT:
+                    case SWITCH_CAUSE_INVALID_GATEWAY:
+                    case SWITCH_CAUSE_INVALID_URL:
                     case SWITCH_CAUSE_FACILITY_NOT_SUBSCRIBED:
                     case SWITCH_CAUSE_INCOMPATIBLE_DESTINATION:
 
@@ -1529,6 +1538,7 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_CHANNEL_UNACCEPTABLE:
                     case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
                     case SWITCH_CAUSE_NETWORK_OUT_OF_ORDER:
+                    case SWITCH_CAUSE_GATEWAY_DOWN:
                     case SWITCH_CAUSE_FACILITY_REJECTED:
                     case SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED:
                     case SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED:
@@ -1553,6 +1563,8 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET:
                     case SWITCH_CAUSE_NO_ROUTE_DESTINATION:
                     case SWITCH_CAUSE_INVALID_NUMBER_FORMAT:
+                    case SWITCH_CAUSE_INVALID_GATEWAY:
+                    case SWITCH_CAUSE_INVALID_URL:
                     case SWITCH_CAUSE_FACILITY_NOT_SUBSCRIBED:
                     case SWITCH_CAUSE_INCOMPATIBLE_DESTINATION:
 
@@ -1585,6 +1597,7 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_CHANNEL_UNACCEPTABLE:
                     case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
                     case SWITCH_CAUSE_NETWORK_OUT_OF_ORDER:
+                    case SWITCH_CAUSE_GATEWAY_DOWN:
                     case SWITCH_CAUSE_FACILITY_REJECTED:
                     case SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED:
                     case SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED:
@@ -1622,6 +1635,8 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET:
                     case SWITCH_CAUSE_NO_ROUTE_DESTINATION:
                     case SWITCH_CAUSE_INVALID_NUMBER_FORMAT:
+                    case SWITCH_CAUSE_INVALID_GATEWAY:
+                    case SWITCH_CAUSE_INVALID_URL:
                     case SWITCH_CAUSE_FACILITY_NOT_SUBSCRIBED:
                     case SWITCH_CAUSE_INCOMPATIBLE_DESTINATION:
 
@@ -1629,6 +1644,7 @@ int BoardE1::KhompPvtR2::callFailFromCause(int cause)
                     case SWITCH_CAUSE_CHANNEL_UNACCEPTABLE:
                     case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
                     case SWITCH_CAUSE_NETWORK_OUT_OF_ORDER:
+                    case SWITCH_CAUSE_GATEWAY_DOWN:
                     case SWITCH_CAUSE_FACILITY_REJECTED:
                     case SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED:
                     case SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED:
index 7e102047f34492d3d3aa7e7a719d6b04f164940e..b747bea6dda1891c429ac686ad9b536890235d2e 100644 (file)
@@ -326,8 +326,11 @@ static int hangup_cause_to_sip(switch_call_cause_t cause)
        case SWITCH_CAUSE_REDIRECTION_TO_NEW_DESTINATION:
                return 410;
        case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
+       case SWITCH_CAUSE_INVALID_PROFILE:
                return 502;
        case SWITCH_CAUSE_INVALID_NUMBER_FORMAT:
+       case SWITCH_CAUSE_INVALID_URL:
+       case SWITCH_CAUSE_INVALID_GATEWAY:
                return 484;
        case SWITCH_CAUSE_FACILITY_REJECTED:
                return 501;
@@ -338,6 +341,7 @@ static int hangup_cause_to_sip(switch_call_cause_t cause)
        case SWITCH_CAUSE_NETWORK_OUT_OF_ORDER:
        case SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE:
        case SWITCH_CAUSE_SWITCH_CONGESTION:
+       case SWITCH_CAUSE_GATEWAY_DOWN:
                return 503;
        case SWITCH_CAUSE_OUTGOING_CALL_BARRED:
        case SWITCH_CAUSE_INCOMING_CALL_BARRED:
@@ -4266,7 +4270,7 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
        *new_session = NULL;
 
        if (!outbound_profile || zstr(outbound_profile->destination_number)) {
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Invalid Destination\n");
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Invalid Empty Destination\n");
                goto error;
        }
 
@@ -4303,30 +4307,30 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
                char *gw, *params;
 
                if (!(gw = strchr(profile_name, '/'))) {
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid URL\n");
-                       cause = SWITCH_CAUSE_INVALID_NUMBER_FORMAT;
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid URL \'%s\'\n", gw);
+                       cause = SWITCH_CAUSE_INVALID_URL;
                        goto error;
                }
 
                *gw++ = '\0';
 
                if (!(dest = strchr(gw, '/'))) {
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid URL\n");
-                       cause = SWITCH_CAUSE_INVALID_NUMBER_FORMAT;
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid URL \'%s\'\n", gw);
+                       cause = SWITCH_CAUSE_INVALID_URL;
                        goto error;
                }
 
                *dest++ = '\0';
 
                if (!(gateway_ptr = sofia_reg_find_gateway(gw))) {
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid Gateway\n");
-                       cause = SWITCH_CAUSE_INVALID_NUMBER_FORMAT;
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid Gateway \'%s\'\n", gw);
+                       cause = SWITCH_CAUSE_INVALID_GATEWAY;
                        goto error;
                }
 
                if (gateway_ptr->status != SOFIA_GATEWAY_UP) {
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Gateway is down!\n");
-                       cause = SWITCH_CAUSE_NETWORK_OUT_OF_ORDER;
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Gateway \'%s\' is down!\n", gw);
+                       cause = SWITCH_CAUSE_GATEWAY_DOWN;
                        gateway_ptr->ob_failed_calls++;
                        goto error;
                }
@@ -4433,14 +4437,14 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
        } else {
                if (!(dest = strchr(profile_name, '/'))) {
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid URL\n");
-                       cause = SWITCH_CAUSE_INVALID_NUMBER_FORMAT;
+                       cause = SWITCH_CAUSE_INVALID_URL;
                        goto error;
                }
                *dest++ = '\0';
 
                if (!(profile = sofia_glue_find_profile(profile_name))) {
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid Profile\n");
-                       cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+                       cause = SWITCH_CAUSE_INVALID_PROFILE;
                        goto error;
                }
 
index 3a7ce9302380ae4d348425fecad7ec6fd026c8a4..a0b5b9c018a3b43d37508f920edfb036b9b0b650 100644 (file)
@@ -103,6 +103,10 @@ static struct switch_cause_table CAUSE_CHART[] = {
        {"PICKED_OFF", SWITCH_CAUSE_PICKED_OFF},
        {"USER_NOT_REGISTERED", SWITCH_CAUSE_USER_NOT_REGISTERED},
        {"PROGRESS_TIMEOUT", SWITCH_CAUSE_PROGRESS_TIMEOUT},
+       {"INVALID_GATEWAY", SWITCH_CAUSE_INVALID_GATEWAY},
+       {"GATEWAY_DOWN", SWITCH_CAUSE_GATEWAY_DOWN},
+       {"INVALID_URL", SWITCH_CAUSE_INVALID_URL},
+       {"INVALID_PROFILE", SWITCH_CAUSE_INVALID_PROFILE},
        {NULL, 0}
 };
 
index 71cdfacde545c2aaafcd2ad0f73f68e556f787e3..582ca2ea23be9d4519dae7304b88a59cc0cadf00 100644 (file)
@@ -3383,6 +3383,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                        switch_channel_set_variable(caller_channel, "DIALSTATUS", "NOANSWER");
                                        break;
                                case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
+                               case SWITCH_CAUSE_INVALID_PROFILE:
                                        switch_channel_set_variable(caller_channel, "DIALSTATUS", "INVALIDARGS");
                                        break;
                                case SWITCH_CAUSE_CALL_REJECTED: