[commit] r14008 - in freeswitch/trunk/contrib/mod/endpoints/mod_khomp: . include
Author: raulfragoso Date: Fri Jun 26 22:34:07 2009 New Revision: 14008 Log: Some more work to get calls working again, but still crashing :/ Modified: freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h freeswitch/trunk/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp Modified: freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h ============================================================================== --- freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h (original) +++ freeswitch/trunk/contrib/mod/endpoints/mod_khomp/include/khomp_pvt.h Fri Jun 26 22:34:07 2009 @@ -71,6 +71,9 @@ switch_mutex_t *_mutex; switch_mutex_t *flag_mutex; //TODO: Alterar o nome depois + unsigned int _KDeviceId; // Represent de board we are making the call from + unsigned int _KChannel; // Represent the channel we are making the call from + /* static stuff */ static KhompPvtVector _pvts; }; Modified: freeswitch/trunk/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp ============================================================================== --- freeswitch/trunk/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp (original) +++ freeswitch/trunk/contrib/mod/endpoints/mod_khomp/mod_khomp.cpp Fri Jun 26 22:34:07 2009 @@ -127,10 +127,12 @@ { tech_pvt->_read_frame.data = tech_pvt->_databuf; tech_pvt->_read_frame.buflen = sizeof(tech_pvt->_databuf); - switch_mutex_init(&tech_pvt->_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session)); + switch_mutex_init(&tech_pvt->_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session)); switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session)); + switch_core_session_set_private(session, tech_pvt); + tech_pvt->_session = session; if (switch_core_codec_init(&tech_pvt->_read_codec, @@ -160,6 +162,7 @@ switch_core_session_set_read_codec(tech_pvt->_session, &tech_pvt->_read_codec); switch_core_session_set_write_codec(tech_pvt->_session, &tech_pvt->_write_codec); + switch_set_flag_locked(tech_pvt, TFLAG_CODEC); tech_pvt->_read_frame.codec = &tech_pvt->_read_codec; @@ -255,6 +258,16 @@ switch_core_codec_destroy(&tech_pvt->_write_codec); } + try + { + Globals::_k3lapi.command(tech_pvt->_KDeviceId, tech_pvt->_KChannel, CM_DISCONNECT, NULL); + } + catch(K3LAPI::failed_command & e) + { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "WE COULD NOT HANGUP THE CHANNEL! rc:%d\n", e.rc); + return SWITCH_STATUS_TERM; + } + 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--; @@ -343,7 +356,6 @@ return SWITCH_STATUS_FALSE; } - switch_clear_flag_locked(tech_pvt, TFLAG_VOICE); if (!tech_pvt->_read_frame.datalen) { continue; } @@ -447,7 +459,7 @@ switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags) { - char *argv[3] = { 0 }; + char *argv[3] = { 0 }; int argc = 0; if ((*new_session = switch_core_session_request(Globals::_khomp_endpoint_interface, SWITCH_CALL_DIRECTION_OUTBOUND, pool)) != 0) { @@ -480,12 +492,12 @@ else { // usar algoritmo de busca de canais (spec.*). -// 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\n",// from Board:%u, Channel:%u.\n", - argv[2] - //, tech_pvt->_KDeviceId, 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); } @@ -496,7 +508,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Doh! no caller profile\n"); switch_core_session_destroy(new_session); /* Destroy the channel session */ - // Globals::_k3lapi.setSession(tech_pvt->_KDeviceId, tech_pvt->_KChannel, NULL); + KhompPvt::khompPvt(tech_pvt->_KDeviceId, tech_pvt->_KChannel)->session(NULL); return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; } @@ -509,9 +521,9 @@ try { /* Lets make the call! */ char params[ 255 ]; - sprintf(params, "dest_addr=\"%s\"", argv[2]); + snprintf(params, sizeof(params), "dest_addr=\"%s\" orig_addr=\"%s\"", argv[2], outbound_profile->caller_id_number); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "We are calling with params: %s.\n", params); - //Globals::_k3lapi.command(tech_pvt->_KDeviceId,tech_pvt->_KChannel, CM_MAKE_CALL, params); + Globals::_k3lapi.command(tech_pvt->_KDeviceId,tech_pvt->_KChannel, CM_MAKE_CALL, params); } catch(K3LAPI::failed_command & e) { @@ -520,7 +532,7 @@ } /* Add the new session the the channel's info */ - //Globals::_k3lapi.setSession(tech_pvt->_KDeviceId, tech_pvt->_KChannel, *new_session); + KhompPvt::khompPvt(tech_pvt->_KDeviceId, tech_pvt->_KChannel)->session(*new_session); return SWITCH_CAUSE_SUCCESS; } @@ -629,7 +641,7 @@ */ SWITCH_STANDARD_API(khomp) { - char *argv[10] = { 0 }; + char *argv[10] = { 0 }; int argc = 0; void *val; char *myarg = NULL;
participants (1)
-
FreeSWITCH SVN