[Freeswitch-svn] [commit] r13773 - freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp
FreeSWITCH SVN
jmesquita at freeswitch.org
Sun Jun 14 21:08:53 PDT 2009
Author: jmesquita
Date: Sun Jun 14 23:08:52 2009
New Revision: 13773
Log:
Add [khomp show channels].
Modified:
freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp
Modified: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp
==============================================================================
--- freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp (original)
+++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp Sun Jun 14 23:08:52 2009
@@ -30,7 +30,7 @@
*
*/
-#define KHOMP_SYNTAX "khomp show [info|links]"
+#define KHOMP_SYNTAX "khomp show [info|links|channels]"
/* Our includes */
#include "k3lapi.hpp"
@@ -127,9 +127,11 @@
static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
-/* My function prototypes */
-static void printBoardsInfo(switch_stream_handle_t*);
+/* Helper function prototypes */
+static void printSystemSummary(switch_stream_handle_t*);
static const char* linkStatus(unsigned int device, unsigned int link);
+static void printChannels(switch_stream_handle_t* stream, unsigned int device, unsigned int link);
+/* Handles callbacks and events from the boards */
static int32 Kstdcall EventCallBack(int32 obj, K3L_EVENT * e);
@@ -266,7 +268,7 @@
}
try {
- k3l->command(tech_pvt->Kchannel, CM_DISCONNECT, NULL);
+ k3l->command(tech_pvt->Kdevice, tech_pvt->Kchannel, CM_DISCONNECT, NULL);
}
catch(K3LAPI::failed_command & e)
{
@@ -275,7 +277,7 @@
}
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL HANGUP\n", switch_channel_get_name(channel));
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s Originator Hangup.\n", switch_channel_get_name(channel));
switch_mutex_lock(globals.mutex);
globals.calls--;
if (globals.calls < 0) {
@@ -434,6 +436,7 @@
tech_pvt = static_cast<private_t*>(switch_core_session_get_private(session));
assert(tech_pvt != NULL);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "When the fuck is this called?.\n");
return SWITCH_STATUS_SUCCESS;
}
@@ -444,6 +447,8 @@
switch_channel_t *channel;
private_t *tech_pvt;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "When the fuck is this called?.\n");
+
channel = switch_core_session_get_channel(session);
assert(channel != NULL);
@@ -535,10 +540,9 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "We are calling with params: %s.\n", params);
k3l->command(tech_pvt->Kdevice,tech_pvt->Kchannel, CM_MAKE_CALL, params);
}
- /* TODO: Cmon learn how to catch already! */
catch(K3LAPI::failed_command & e)
{
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not place call! Cause: code%d and rc%d.\n", e.code, e.rc);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not place call! Cause: code%x and rc%d.\n", e.code, e.rc);
return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
}
@@ -740,7 +744,7 @@
if (argv[0] && !strncasecmp(argv[0], "show", 4)) {
/* Show the API summary and information */
if (argv[1] && !strncasecmp(argv[1], "info", 4)) {
- printBoardsInfo(stream);
+ printSystemSummary(stream);
}
/* Show all the links and their status */
if (argv[1] && !strncasecmp(argv[1], "links", 5)) {
@@ -759,6 +763,10 @@
}
stream->write_function(stream, "-------------------------------------------\n");
}
+ // Show all channels from all boards and all links
+ if (argv[1] && !strncasecmp(argv[1], "channels", 8)) {
+ printChannels(stream, NULL, NULL);
+ }
} else {
stream->write_function(stream, "USAGE: %s\n", KHOMP_SYNTAX);
@@ -771,6 +779,64 @@
}
/* Helper functions */
+static void printChannels(switch_stream_handle_t* stream, unsigned int device, unsigned int link) {
+ if (!device) {
+ // Print all channels from all boards and links
+ stream->write_function(stream, "|--------- Khomp ----------|\n");
+ stream->write_function(stream, "| Board | Channel | Status |\n");
+ for (int board=0 ; board < k3l->device_count() ; board++) {
+ for (int channel=0 ; channel < k3l->channel_count(board) ; channel++) {
+ try {
+ K3L_CHANNEL_CONFIG channelConfig;
+ channelConfig = k3l->channel_config( board, channel );
+ }
+ catch (...){
+ stream->write_function(stream, "OOOPSS. Something went wrong, cleanup this mess!\n");
+ return;
+ }
+ K3L_CHANNEL_STATUS status;
+ if (k3lGetDeviceStatus( board, channel + ksoChannel, &status, sizeof(status) ) != ksSuccess) {
+ stream->write_function(stream, "Damn, again something bad happened.\n");
+ return;
+ }
+ switch(status.AddInfo) {
+ case kecsFree:
+ stream->write_function(stream, "| %6u| %8u| Free |\n", board, channel);
+ break;
+ case kecsBusy:
+ stream->write_function(stream, "| %6u| %8u| Busy |\n", board, channel);
+ break;
+ case kecsOutgoing:
+ stream->write_function(stream, "| %6u| %8u| Outgoing |\n", board, channel);
+ break;
+ case kecsIncoming:
+ stream->write_function(stream, "| %6u| %8u| Incoming |\n", board, channel);
+ break;
+ case kecsLocked:
+ stream->write_function(stream, "| %6u| %8u| Locked |\n", board, channel);
+ break;
+ case kecsOutgoingLock:
+ stream->write_function(stream, "| %6u| %8u| OutgoingLock |\n", board, channel);
+ break;
+ case kecsLocalFail:
+ stream->write_function(stream, "| %6u| %8u| LocalFail |\n", board, channel);
+ break;
+ case kecsIncomingLock:
+ stream->write_function(stream, "| %6u| %8u| IncomingLock |\n", board, channel);
+ break;
+ case kecsRemoteLock:
+ stream->write_function(stream, "| %6u| %8u| RemoteLock |\n", board, channel);
+ break;
+ default:
+ stream->write_function(stream, "| %6u| %8u| UNKNOWN : %x |\n", board, channel, status.AddInfo);
+ }
+
+ }
+ }
+ stream->write_function(stream, "----------------------------\n");
+ }
+}
+
static const char * linkStatus(unsigned int device, unsigned int link)
{
@@ -828,7 +894,7 @@
}
-static void printBoardsInfo(switch_stream_handle_t* stream) {
+static void printSystemSummary(switch_stream_handle_t* stream) {
K3L_API_CONFIG apiCfg;
@@ -934,11 +1000,20 @@
static int32 Kstdcall EventCallBack(int32 obj, K3L_EVENT * e)
{
- /* TODO: We should hash things to make it statful */
+ /* TODO: We should hash things to make it stateful */
switch(e->Code)
{
case EV_NEW_CALL:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "New call on %u to %s.\n", obj, k3l->get_param(e, "dest_addr").c_str());
+ try {
+ k3l->command(e->DeviceId, obj, CM_RINGBACK, NULL);
+ k3l->command(e->DeviceId, obj, CM_CONNECT, NULL);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Accepeted the call.\n");
+ }
+ catch (K3LAPI::failed_command & err)
+ {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Something went wrong here!\n");
+ }
break;
case EV_DISCONNECT:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Called party dropped the call on: %u. Releasing channel.\n", obj);
More information about the Freeswitch-svn
mailing list