diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 8c4724606f..019bb9fad4 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -2658,6 +2658,47 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t return SWITCH_STATUS_SUCCESS; } +static void xml_gateway_status(sofia_gateway_t *gp, switch_stream_handle_t *stream) +{ + char xmlbuf[2096]; + const int buflen = 2096; + + stream->write_function(stream, " \n"); + stream->write_function(stream, " %s\n", switch_str_nil(gp->name)); + stream->write_function(stream, " %s\n", gp->profile->name); + stream->write_function(stream, " %s\n", switch_str_nil(gp->register_scheme)); + stream->write_function(stream, " %s\n", switch_str_nil(gp->register_realm)); + stream->write_function(stream, " %s\n", switch_str_nil(gp->register_username)); + stream->write_function(stream, " %s\n", zstr(gp->register_password) ? "no" : "yes"); + stream->write_function(stream, " %s\n", switch_amp_encode(switch_str_nil(gp->register_from), xmlbuf, buflen)); + stream->write_function(stream, " %s\n", switch_amp_encode(switch_str_nil(gp->register_contact), xmlbuf, buflen)); + stream->write_function(stream, " %s\n", switch_amp_encode(switch_str_nil(gp->extension), xmlbuf, buflen)); + stream->write_function(stream, " %s\n", switch_str_nil(gp->register_to)); + stream->write_function(stream, " %s\n", switch_str_nil(gp->register_proxy)); + stream->write_function(stream, " %s\n", switch_str_nil(gp->register_context)); + stream->write_function(stream, " %s\n", switch_str_nil(gp->expires_str)); + stream->write_function(stream, " %d\n", gp->freq); + stream->write_function(stream, " %d\n", gp->ping); + stream->write_function(stream, " %d\n", gp->ping_freq); + stream->write_function(stream, " %s\n", sofia_state_names[gp->state]); + stream->write_function(stream, " %s%s\n", status_names[gp->status], gp->pinging ? " (ping)" : ""); + stream->write_function(stream, " %d\n", gp->ib_calls); + stream->write_function(stream, " %d\n", gp->ob_calls); + stream->write_function(stream, " %d\n", gp->ib_failed_calls); + stream->write_function(stream, " %d\n", gp->ob_failed_calls); + + if (gp->state == REG_STATE_FAILED || gp->state == REG_STATE_TRYING) { + time_t now = switch_epoch_time_now(NULL); + if (gp->retry > now) { + stream->write_function(stream, " %ds\n", gp->retry - now); + } else { + stream->write_function(stream, " NEVER\n"); + } + } + + stream->write_function(stream, " \n"); +} + static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handle_t *stream) { sofia_profile_t *profile = NULL; @@ -2665,8 +2706,6 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl switch_hash_index_t *hi; void *val; const void *vvar; - const int buflen = 2096; - char xmlbuf[2096]; int c = 0; int ac = 0; const char *header = ""; @@ -2688,24 +2727,7 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl for (gp = profile->gateways; gp; gp = gp->next) { switch_assert(gp->state < REG_STATE_LAST); - stream->write_function(stream, "\t\n"); - stream->write_function(stream, "\t\t%s\n", profile->name); - stream->write_function(stream, "\t\t%s\n", gp->register_to); - stream->write_function(stream, "\t\t%s\n", sofia_state_names[gp->state]); - stream->write_function(stream, "\t\t%ld\n", gp->ib_calls); - stream->write_function(stream, "\t\t%ld\n", gp->ob_calls); - stream->write_function(stream, "\t\t%ld\n", gp->ib_failed_calls); - stream->write_function(stream, "\t\t%ld\n", gp->ob_failed_calls); - - if (gp->state == REG_STATE_FAILED || gp->state == REG_STATE_TRYING) { - time_t now = switch_epoch_time_now(NULL); - if (gp->retry > now) { - stream->write_function(stream, "\t\t%ds\n", gp->retry - now); - } else { - stream->write_function(stream, "\t\tNEVER\n"); - } - } - stream->write_function(stream, "\t\n"); + xml_gateway_status(gp, stream); } } } @@ -2713,36 +2735,12 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl switch_mutex_unlock(mod_sofia_globals.hash_mutex); stream->write_function(stream, "\n"); - return SWITCH_STATUS_SUCCESS; - } - if (!strcasecmp(argv[0], "gateway")) { + } else if (argc == 1 && !strcasecmp(argv[0], "profile")) { + } else if (!strcasecmp(argv[0], "gateway")) { if ((gp = sofia_reg_find_gateway(argv[1]))) { switch_assert(gp->state < REG_STATE_LAST); stream->write_function(stream, "%s\n", header); - stream->write_function(stream, " \n"); - stream->write_function(stream, " %s\n", switch_str_nil(gp->name)); - stream->write_function(stream, " %s\n", gp->profile->name); - stream->write_function(stream, " %s\n", switch_str_nil(gp->register_scheme)); - stream->write_function(stream, " %s\n", switch_str_nil(gp->register_realm)); - stream->write_function(stream, " %s\n", switch_str_nil(gp->register_username)); - stream->write_function(stream, " %s\n", zstr(gp->register_password) ? "no" : "yes"); - stream->write_function(stream, " %s\n", switch_amp_encode(switch_str_nil(gp->register_from), xmlbuf, buflen)); - stream->write_function(stream, " %s\n", switch_amp_encode(switch_str_nil(gp->register_contact), xmlbuf, buflen)); - stream->write_function(stream, " %s\n", switch_amp_encode(switch_str_nil(gp->extension), xmlbuf, buflen)); - stream->write_function(stream, " %s\n", switch_str_nil(gp->register_to)); - stream->write_function(stream, " %s\n", switch_str_nil(gp->register_proxy)); - stream->write_function(stream, " %s\n", switch_str_nil(gp->register_context)); - stream->write_function(stream, " %s\n", switch_str_nil(gp->expires_str)); - stream->write_function(stream, " %d\n", gp->freq); - stream->write_function(stream, " %d\n", gp->ping); - stream->write_function(stream, " %d\n", gp->ping_freq); - stream->write_function(stream, " %s\n", sofia_state_names[gp->state]); - stream->write_function(stream, " %s%s\n", status_names[gp->status], gp->pinging ? " (ping)" : ""); - stream->write_function(stream, " %d\n", gp->ib_calls); - stream->write_function(stream, " %d\n", gp->ob_calls); - stream->write_function(stream, " %d\n", gp->ib_failed_calls); - stream->write_function(stream, " %d\n", gp->ob_failed_calls); - stream->write_function(stream, " \n"); + xml_gateway_status(gp, stream); sofia_reg_release_gateway(gp); } else { stream->write_function(stream, "Invalid Gateway!\n");