From 2fba00576459ccfe04a08e8c028c5d848a305024 Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Fri, 25 Mar 2011 16:48:57 -0400 Subject: [PATCH] freetdm: added support to restart all channels on a span --- libs/freetdm/mod_freetdm/mod_freetdm.c | 40 +++++++++++++++++++------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index 4fd79f8a03..9c3805329a 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -3615,7 +3615,7 @@ void dump_chan_xml(ftdm_span_t *span, uint32_t chan_id, switch_stream_handle_t * "--------------------------------------------------------------------------------\n" \ "ftdm list\n" \ "ftdm start|stop \n" \ -"ftdm restart \n" \ +"ftdm restart []\n" \ "ftdm dump []\n" \ "ftdm sigstatus get|set [] [] []\n" \ "ftdm trace []\n" \ @@ -4141,10 +4141,11 @@ SWITCH_STANDARD_API(ft_function) stream->write_function(stream, "+OK queue sizes set to Rx %d and Tx %d\n", rxsize, txsize); } else if (!strcasecmp(argv[0], "restart")) { uint32_t chan_id = 0; + uint32_t ccount = 0; ftdm_channel_t *chan; ftdm_span_t *span = NULL; - if (argc < 3) { - stream->write_function(stream, "-ERR Usage: ftdm restart \n"); + if (argc < 2) { + stream->write_function(stream, "-ERR Usage: ftdm restart []\n"); goto end; } ftdm_span_find_by_name(argv[1], &span); @@ -4152,15 +4153,32 @@ SWITCH_STANDARD_API(ft_function) stream->write_function(stream, "-ERR invalid span\n"); goto end; } - - chan_id = atoi(argv[2]); - chan = ftdm_span_get_channel(span, chan_id); - if (!chan) { - stream->write_function(stream, "-ERR Could not find chan\n"); - goto end; + + if (argc > 2) { + chan_id = atoi(argv[2]); + if (chan_id > ftdm_span_get_chan_count(span)) { + stream->write_function(stream, "-ERR invalid chan\n"); + goto end; + } } - stream->write_function(stream, "Resetting channel %s:%s\n", argv[2], argv[3]); - ftdm_channel_reset(chan); + if (chan_id) { + chan = ftdm_span_get_channel(span, chan_id); + if (!chan) { + stream->write_function(stream, "-ERR Could not find chan\n"); + goto end; + } + stream->write_function(stream, "Resetting channel %s:%s\n", argv[1], argv[2]); + ftdm_channel_reset(chan); + } else { + uint32_t i = 0; + ccount = ftdm_span_get_chan_count(span); + for (i = 1; i < ccount; i++) { + chan = ftdm_span_get_channel(span, i); + stream->write_function(stream, "Resetting channel %s:%d\n", argv[1], i); + ftdm_channel_reset(chan); + } + } + } else { char *rply = ftdm_api_execute(cmd);