aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_gtalk.c
diff options
context:
space:
mode:
authorphsultan <phsultan@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-31 17:38:26 +0000
committerphsultan <phsultan@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-31 17:38:26 +0000
commit47d39c5862a09820a061375710a132b44d1a311a (patch)
treeb56fe5edd62e750517ebd9441742a6dc9c914597 /channels/chan_gtalk.c
parent092b8c5bb7d15712d7cd829a9370b117e3aa30ee (diff)
Make the 'gtalk show channels' CLI command available.
Closes issue 10548, reported by keepitcool. git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@81410 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_gtalk.c')
-rw-r--r--channels/chan_gtalk.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/channels/chan_gtalk.c b/channels/chan_gtalk.c
index 3f25acd6a..604d4c27f 100644
--- a/channels/chan_gtalk.c
+++ b/channels/chan_gtalk.c
@@ -1563,13 +1563,54 @@ static struct ast_channel *gtalk_request(const char *type, int format, void *dat
/*! \brief CLI command "gtalk show channels" */
static int gtalk_show_channels(int fd, int argc, char **argv)
{
+#define FORMAT "%-30.30s %-30.30s %-15.15s %-5.5s %-5.5s \n"
+ struct gtalk_pvt *p;
+ struct ast_channel *chan;
+ int numchans = 0;
+ char them[100];
+ char *jid = NULL;
+ char *resource = NULL;
+
if (argc != 3)
return RESULT_SHOWUSAGE;
+
ast_mutex_lock(&gtalklock);
-// if (!gtalk_list->p)
- ast_cli(fd, "No gtalk channels in use\n");
+ ast_cli(fd, FORMAT, "Channel", "Jabber ID", "Resource", "Read", "Write");
+ ASTOBJ_CONTAINER_TRAVERSE(&gtalk_list, 1, {
+ ASTOBJ_WRLOCK(iterator);
+ p = iterator->p;
+ while(p) {
+ chan = p->owner;
+ ast_copy_string(them, p->them, sizeof(them));
+ jid = them;
+ resource = strchr(them, '/');
+ if (!resource)
+ resource = "None";
+ else {
+ *resource = '\0';
+ resource ++;
+ }
+ if (chan)
+ ast_cli(fd, FORMAT,
+ chan->name,
+ jid,
+ resource,
+ ast_getformatname(chan->readformat),
+ ast_getformatname(chan->writeformat)
+ );
+ else
+ ast_log(LOG_WARNING, "No available channel\n");
+ numchans ++;
+ p = p->next;
+ }
+ ASTOBJ_UNLOCK(iterator);
+ });
+
ast_mutex_unlock(&gtalklock);
+
+ ast_cli(fd, "%d active gtalk channel%s\n", numchans, (numchans != 1) ? "s" : "");
return RESULT_SUCCESS;
+#undef FORMAT
}
/*! \brief CLI command "gtalk show channels" */