[commit] r13778 - in freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp: . commons commons/include include
Author: jmesquita Date: Mon Jun 15 23:12:08 2009 New Revision: 13778 Log: * Added the KChannel -> session relationship so I always know what is what * Added handlers for almost all events sent by the board * Cleaned up the code a little bit more Added: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/include/k3lVersion.h Modified: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/k3lapi.hpp freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/k3lapi.cpp freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp Modified: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile ============================================================================== --- freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile (original) +++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile Mon Jun 15 23:12:08 2009 @@ -1,5 +1,5 @@ MODNAME=mod_khomp -LOCAL_CFLAGS=-I./include -I./commons/include -lk3l -D_REENTRANT -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DK3L_HOSTSYSTEM -DKHOMP_COMMONS_WITH_CHANNEL +LOCAL_CFLAGS=-I./include -I./commons/include -lk3l -D_REENTRANT -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DK3L_HOSTSYSTEM LOCAL_OBJS= ./commons/k3lapi.o Modified: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/k3lapi.hpp ============================================================================== --- freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/k3lapi.hpp (original) +++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/k3lapi.hpp Mon Jun 15 23:12:08 2009 @@ -1,10 +1,7 @@ #include <string> #include <k3l.h> - -#ifndef KHOMP_COMMONS_WITH_CHANNEL -# include <k3lVersion.h> -#endif +#include <k3lVersion.h> #ifdef __GNUC_PREREQ #if __GNUC_PREREQ(4,3) @@ -15,6 +12,12 @@ #ifndef INCLUDED_K3LAPI_HPP #define INCLUDED_K3LAPI_HPP +/* FreeSWITCH include */ +extern "C" { + #include "switch.h" +} + + struct K3LAPI { /* exceptions */ @@ -78,12 +81,29 @@ std::string name; KLibraryStatus rc; }; + + struct KChannel { + public: + KChannel() : _session(NULL){}; + void setSession(switch_core_session_t * session) + { + _session = session; + } + switch_core_session_t * getSession() + { + return _session; + } + protected: + switch_core_session_t * _session; + }; typedef K3L_DEVICE_CONFIG device_conf_type; typedef K3L_CHANNEL_CONFIG channel_conf_type; typedef K3L_CHANNEL_CONFIG * channel_ptr_conf_type; typedef K3L_LINK_CONFIG link_conf_type; typedef K3L_LINK_CONFIG * link_ptr_conf_type; + typedef KChannel KChannel_t; + typedef KChannel_t * KChannel_ptr_t; /* constructors/destructors */ @@ -186,12 +206,27 @@ void init(void); + void setSession(unsigned int boardId, unsigned int chanId, switch_core_session_t * session) + { + if (!valid_channel(boardId, chanId)) + throw invalid_channel(boardId, chanId); + _KChannel[boardId][chanId].setSession(session); + } + + switch_core_session_t * getSession(unsigned int boardId, unsigned int chanId) + { + if (!valid_channel(boardId, chanId)) + throw invalid_channel(boardId, chanId); + return _KChannel[boardId][chanId].getSession(); + } + protected: - unsigned int _device_count; - unsigned int * _channel_count; - unsigned int * _link_count; - + unsigned int _device_count; + unsigned int * _channel_count; + unsigned int * _link_count; + + KChannel_ptr_t * _KChannel; device_conf_type * _device_config; channel_ptr_conf_type * _channel_config; link_ptr_conf_type * _link_config; Modified: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/k3lapi.cpp ============================================================================== --- freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/k3lapi.cpp (original) +++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/k3lapi.cpp Mon Jun 15 23:12:08 2009 @@ -22,7 +22,7 @@ void K3LAPI::start(void) { /* tie the used k3l to the compiled k3l version */ - char *ret = k3lStart(k3lApiMajorVersion, k3lApiMinorVersion, 0); //k3lApiBuildVersion); + char *ret = k3lStart(2, 0, 0); //k3lApiMajorVersion, k3lApiMinorVersion, 0); //k3lApiBuildVersion); if (ret && *ret) throw start_failed(ret); @@ -129,6 +129,7 @@ _device_type = new KDeviceType[_device_count]; _device_config = new device_conf_type[_device_count]; _channel_config = new channel_ptr_conf_type[_device_count]; + _KChannel = new KChannel_ptr_t[_device_count]; _link_config = new link_ptr_conf_type[_device_count]; _channel_count = new unsigned int[_device_count]; _link_count = new unsigned int[_device_count]; @@ -147,12 +148,15 @@ /* caches each channel config */ _channel_config[dev] = new channel_conf_type[_channel_count[dev]]; + _KChannel[dev] = new KChannel_t[_channel_count[dev]]; for (unsigned int obj = 0; obj < _channel_count[dev]; obj++) { if (k3lGetDeviceConfig(dev, ksoChannel + obj, &(_channel_config[dev][obj]), sizeof(_channel_config[dev][obj])) != ksSuccess) + { throw start_failed("k3lGetDeviceConfig(channel)"); + } } /* adjust link count for device */ Added: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/include/k3lVersion.h ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/include/k3lVersion.h Mon Jun 15 23:12:08 2009 @@ -0,0 +1,9 @@ +#ifndef k3lVersion_h +#define k3lVersion_h + +#define k3lApiMajorVersion 2 +#define k3lApiMinorVersion 0 +#define k3lApiBuildVersion 0 + +#endif + 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 Mon Jun 15 23:12:08 2009 @@ -98,9 +98,8 @@ switch_mutex_t *mutex; switch_mutex_t *flag_mutex; //switch_thread_cond_t *cond; - unsigned int Kdevice; // Represent de board we are making the call from - unsigned int Klink; // Represent the link we are making the call from - unsigned int Kchannel; // Represent the channel we are making the call from + unsigned int KDeviceId; // Represent de board we are making the call from + unsigned int KChannel; // Represent the channel we are making the call from }; typedef struct private_object private_t; @@ -128,8 +127,8 @@ static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig); /* Helper function prototypes */ -static void printSystemSummary(switch_stream_handle_t*); -static const char* linkStatus(unsigned int device, unsigned int link); +static void printSystemSummary(switch_stream_handle_t* stream); +static void printLinks(switch_stream_handle_t* stream, 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); @@ -268,7 +267,7 @@ } try { - k3l->command(tech_pvt->Kdevice, tech_pvt->Kchannel, CM_DISCONNECT, NULL); + k3l->command(tech_pvt->KDeviceId, tech_pvt->KChannel, CM_DISCONNECT, NULL); } catch(K3LAPI::failed_command & e) { @@ -352,8 +351,6 @@ tech_pvt->read_frame.flags = SFF_NONE; *frame = NULL; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Are we being called?"); - while (switch_test_flag(tech_pvt, TFLAG_IO)) { @@ -403,8 +400,6 @@ private_t *tech_pvt = NULL; //switch_frame_t *pframe; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Are we being called?"); - channel = switch_core_session_get_channel(session); assert(channel != NULL); @@ -436,8 +431,6 @@ 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; } @@ -476,7 +469,7 @@ switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags) { - char *argv[4] = { 0 }; + char *argv[3] = { 0 }; int argc = 0; if ((*new_session = switch_core_session_request(khomp_endpoint_interface, SWITCH_CALL_DIRECTION_OUTBOUND, pool)) != 0) { @@ -501,20 +494,19 @@ switch_channel_set_name(channel, name); /* Let's setup our own vars on tech_pvt */ - if ((argc = switch_separate_string(outbound_profile->destination_number, '/', argv, (sizeof(argv) / sizeof(argv[0])))) < 4) + if ((argc = switch_separate_string(outbound_profile->destination_number, '/', argv, (sizeof(argv) / sizeof(argv[0])))) < 3) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid dial string. Should be on the format:[Khomp/BOARD/LINK/CHANNEL]\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid dial string. Should be on the format:[Khomp/BOARD/CHANNEL]\n"); return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; } else { - tech_pvt->Kdevice = atoi(argv[0]); - tech_pvt->Klink = atoi(argv[1]); - tech_pvt->Kchannel = atoi(argv[2]); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Dialing out from Board:%d, Link:%d, Channel:%d.\n", - tech_pvt->Kdevice, - tech_pvt->Klink, - tech_pvt->Kchannel); + tech_pvt->KDeviceId = atoi(argv[0]); + tech_pvt->KChannel = atoi(argv[1]); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Dialing to %s out from Board:%u, Channel:%u.\n", + argv[2], + tech_pvt->KDeviceId, + tech_pvt->KChannel); } @@ -524,6 +516,8 @@ } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Doh! no caller profile\n"); switch_core_session_destroy(new_session); + /* Destroy the channel session */ + k3l->setSession(tech_pvt->KDeviceId, tech_pvt->KChannel, NULL); return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; } @@ -536,9 +530,9 @@ try { /* Lets make the call! */ char params[ 255 ]; - sprintf(params, "dest_addr=\"%s\"", argv[3]); + sprintf(params, "dest_addr=\"%s\"", argv[2]); 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); + k3l->command(tech_pvt->KDeviceId,tech_pvt->KChannel, CM_MAKE_CALL, params); } catch(K3LAPI::failed_command & e) { @@ -546,6 +540,9 @@ return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; } + /* Add the new session the the channel's info */ + k3l->setSession(tech_pvt->KDeviceId, tech_pvt->KChannel, *new_session); + return SWITCH_CAUSE_SUCCESS; } @@ -718,6 +715,7 @@ /* khomp API definition + TODO: Add as xml modifier */ SWITCH_STANDARD_API(khomp) { @@ -748,23 +746,12 @@ } /* Show all the links and their status */ if (argv[1] && !strncasecmp(argv[1], "links", 5)) { - for(int device=0 ; device < k3l->device_count() ; device++) - { - stream->write_function(stream, "___________________________________________\n"); - stream->write_function(stream, "|--------------Khomp Links----------------|\n"); - stream->write_function(stream, "|----Board----|----Link----|----Status----|\n"); - for(int link=0 ; link < k3l->link_count(device) ; link++) - { - stream->write_function(stream, "|%13d|%12d|%s|\n" - , device - , link - , linkStatus(device, link)); - } - } - stream->write_function(stream, "-------------------------------------------\n"); + /* TODO: Let show specific boards/links */ + printLinks(stream, NULL, NULL); } // Show all channels from all boards and all links if (argv[1] && !strncasecmp(argv[1], "channels", 8)) { + /* TODO: Let show specific channels */ printChannels(stream, NULL, NULL); } @@ -799,34 +786,16 @@ stream->write_function(stream, "Damn, again something bad happened.\n"); return; } - switch(status.AddInfo) { - case kecsFree: + switch(status.CallStatus) { + case kcsFree: 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: + case kcsOutgoing: stream->write_function(stream, "| %6u| %8u| Outgoing |\n", board, channel); break; - case kecsIncoming: + case kcsIncoming: 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); } @@ -837,60 +806,98 @@ } } -static const char * linkStatus(unsigned int device, unsigned int link) +static void printLinks(switch_stream_handle_t* stream, unsigned int device, unsigned int link) { - K3L_LINK_CONFIG & config = k3l->link_config(device, link); - K3L_LINK_STATUS status; - - KLibraryStatus ret = (KLibraryStatus) k3lGetDeviceStatus (device, link + ksoLink, &status, sizeof(status)); + stream->write_function(stream, "___________________________________________\n"); + stream->write_function(stream, "|--------------Khomp Links----------------|\n"); + stream->write_function(stream, "|----Board----|----Link----|----Status----|\n"); - if (ret == ksSuccess) - { - switch (config.Signaling) + // We want to see all links from all devices + if (!device) { + for(int device=0 ; device < k3l->device_count() ; device++) { - case ksigInactive: - return "[ksigInactive]"; + K3L_LINK_CONFIG & config = k3l->link_config(device, link); + K3L_LINK_STATUS status; - case ksigAnalog: - return "[ksigAnalog]"; - - case ksigSIP: - return "[ksigSIP]"; - - case ksigOpenCAS: - case ksigOpenR2: - case ksigR2Digital: - case ksigUserR2Digital: - case ksigOpenCCS: - case ksigPRI_EndPoint: - case ksigPRI_Network: - case ksigPRI_Passive: - case ksigLineSide: - case ksigCAS_EL7: - case ksigAnalogTerminal: - if (kesOk == status.E1) + for(int link=0 ; link < k3l->link_count(device) ; link++) + { + const char * E1Status = ""; + if (k3lGetDeviceStatus (device, link + ksoLink, &status, sizeof(status)) == ksSuccess) { - return "kesOk"; + switch (config.Signaling) + { + case ksigInactive: + E1Status = "[ksigInactive]"; + break; + + case ksigAnalog: + E1Status = "[ksigAnalog]"; + break; + + case ksigSIP: + E1Status = "[ksigSIP]"; + break; + + case ksigOpenCAS: + case ksigOpenR2: + case ksigR2Digital: + case ksigUserR2Digital: + case ksigOpenCCS: + case ksigPRI_EndPoint: + case ksigPRI_Network: + case ksigPRI_Passive: + case ksigLineSide: + case ksigCAS_EL7: + case ksigAnalogTerminal: + switch (status.E1) { + + case (kesOk): + E1Status = "kesOk"; + break; + case (kesSignalLost): + E1Status = "kesSignalLost"; + break; + case (kesNetworkAlarm): + E1Status = "kesNetworkAlarm"; + break; + case (kesFrameSyncLost): + E1Status = "kesFrameSyncLost"; + break; + case (kesMultiframeSyncLost): + E1Status = "kesMultiframeSyncLost"; + break; + case (kesRemoteAlarm): + E1Status = "kesRemoteAlarm"; + break; + case (kesHighErrorRate): + E1Status = "kesHighErrorRate"; + break; + case (kesUnknownAlarm): + E1Status = "kesUnknownAlarm"; + break; + case (kesE1Error): + E1Status = "kesE1Error"; + break; + case (kesNotInitialized): + E1Status = "kesNotInitialized"; + break; + default: + E1Status = "UnknownE1Status"; + } + break; + default: + E1Status = "NotImplementedBoard"; + } } - else - { - if (kesSignalLost & status.E1) return "SignalLost"; - if (kesNetworkAlarm & status.E1) return "NetworkAlarm"; - if (kesFrameSyncLost & status.E1) return "FrameSyncLost"; - if (kesMultiframeSyncLost & status.E1) return "MultiframeSyncLost"; - if (kesRemoteAlarm & status.E1) return "RemoteAlarm"; - if (kesHighErrorRate & status.E1) return "HighErrorRate"; - if (kesUnknownAlarm & status.E1) return "UnknownAlarm"; - if (kesE1Error & status.E1) return "E1Error"; - - } - default: - return "NotImplementedBoard"; + stream->write_function(stream, "|%13d|%12d|%s|\n" + , device + , link + , E1Status); + } } } - - return "<unknown>"; + stream->write_function(stream, "-------------------------------------------\n"); } @@ -1000,28 +1007,139 @@ static int32 Kstdcall EventCallBack(int32 obj, K3L_EVENT * e) { - /* TODO: We should hash things to make it stateful */ + /* TODO: How do we make sure channels inside FreeSWITCH only change to valid states on K3L? */ 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()); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "New call on %u to %s. [EV_NEW_CALL]\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"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not set board channel status! [EV_NEW_CALL]\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); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Called party dropped the call on: %u. Releasing channel. [EV_DISCONNECT]\n", obj); + /* Do we need to release on the board? */ k3l->command(e->DeviceId, obj, CM_DISCONNECT, NULL); + try { + k3l->setSession(e->DeviceId, obj, NULL); + } + catch(K3LAPI::invalid_channel & err) + { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Called party dropped the call on: %u. Releasing channel. [EV_DISCONNECT]\n", obj); + } break; - default: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "New Event has just arrived on %u with untreated code: %x\n", obj, e->Code); + case EV_CONNECT: + switch_channel_t *channel; + /* TODO: We should check if the session is there before getting the channel. */ + channel = switch_core_session_get_channel(k3l->getSession(e->DeviceId ,obj)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Call will be answered on board %u, channel %u. [EV_CONNECT]\n", e->DeviceId, obj); + switch_channel_mark_answered(channel); + break; + case EV_CALL_SUCCESS: + /* TODO: Should we bridge here? Maybe check a certain variable if we should generate ringback? */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Call on board %u, channel %u is ringing. [EV_CALL_SUCESS]\n", e->DeviceId, obj); + break; + case EV_CHANNEL_FREE: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Channel %u on board %u is now free. [EV_CHANNEL_FREE]\n", obj, e->DeviceId); + break; + case EV_NO_ANSWER: + /* TODO: Destroy sessions and channels */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No one answered the call on board %u channel %u. [EV_NO_ANSWER]\n", e->DeviceId, obj); break; + case EV_CALL_ANSWER_INFO: + { + /* TODO: Set channel variable if we get this event */ + /* TODO: Fire an event so ESL can get it? */ + /* Call Analyser has to be enabled on k3lconfig */ + const char * startInfo = ""; + switch (e->AddInfo) + { + case (kcsiHumanAnswer): + startInfo = "kcsiHumanAnswer"; + break; + case (kcsiAnsweringMachine): + startInfo = "kcsiAnsweringMachine"; + break; + case (kcsiCellPhoneMessageBox): + startInfo = "kcsiCellPhoneMessageBox"; + break; + case (kcsiUnknown): + startInfo = "kcsiUnknown"; + break; + case (kcsiCarrierMessage): + startInfo = "kcsiCarrierMessage"; + break; + default: + startInfo = "Error or unknown code!"; + + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel %u, board %u detected: \"%s\". [EV_CALL_ANSWER_INFO]\n", e->DeviceId, obj, startInfo); + break; + } + case EV_DTMF_DETECTED: + /* TODO: What to do with DTMF? */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Board %u detected DTMF (%d) on channel %u. [EV_DTMF_DETECTED]\n", e->DeviceId, e->AddInfo, obj); + break; + case EV_DTMF_SEND_FINISH: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel %u on board %u has sucessfully generated DTMF. [EV_DTMF_SEND_FINNISH]\n", obj, e->DeviceId); + break; + case EV_CALL_FAIL: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Channel %u on board %u reported call fail. [EV_CALL_FAIL]\n", obj, e->DeviceId); + break; + case EV_CHANNEL_FAIL: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Channel %u on board %u reported failure. [EV_CHANNEL_FAIL]\n", obj, e->DeviceId); + break; + case EV_LINK_STATUS: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Link %u on board %u changed. [EV_LINK_STATUS]\n", e->DeviceId, obj); + break; + case EV_PHYSICAL_LINK_DOWN: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Link %u on board %u is DOWN. [EV_PHYSICAL_LINK_DOWN]\n", e->DeviceId, obj); + break; + case EV_PHYSICAL_LINK_UP: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Link %u on board %u is UP. [EV_PHYSICAL_LINK_UP]\n", e->DeviceId, obj); + break; + case EV_INTERNAL_FAIL: + { + const char * msg = ""; + switch(e->AddInfo) + { + case kifInterruptCtrl: + msg = "kifInterruptCtrl"; + break; + case kifCommunicationFail: + msg = "kifCommunicationFail"; + break; + case kifProtocolFail: + msg = "kifProtocolFail"; + break; + case kifInternalBuffer: + msg = "kifInternalBuffer"; + break; + case kifMonitorBuffer: + msg = "kifMonitorBuffer"; + break; + case kifInitialization: + msg = "kifInitialization"; + break; + case kifInterfaceFail: + msg = "kifInterfaceFail"; + break; + case kifClientCommFail: + msg = "kifClientCommFail"; + break; + default: + msg = "UnknownError"; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "This is a fatal error and we will not recover. Reason: %s. [EV_INTERNAL_FAIL]\n", msg); + break; + } + default: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "New Event has just arrived on %u with untreated code: %x\n", obj, e->Code); } return ksSuccess;
participants (1)
-
FreeSWITCH SVN