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 {
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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;
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:
*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;
}
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;
}
} 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;
}
{"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}
};
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: