Modified: freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.c (15079 => 15080)
--- freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.c 2009-10-05 10:16:56 UTC (rev 15079)
+++ freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.c 2009-10-05 12:10:14 UTC (rev 15080)
@@ -677,9 +677,27 @@
tech_pvt->phone_callflow = CALLFLOW_CALL_LINEBUSY;
if (option_debug > 1)
DEBUGA_GSMOPEN("|%s| CALLFLOW_CALL_LINEBUSY\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
- if (tech_pvt->interface_state != GSMOPEN_STATE_DOWN && tech_pvt->owner) {
- ast_setstate(tech_pvt->owner, GSMOPEN_STATE_BUSY);
- gsmopen_queue_control(tech_pvt->owner, GSMOPEN_CONTROL_BUSY);
+ //if (tech_pvt->interface_state != GSMOPEN_STATE_DOWN && tech_pvt->owner && tech_pvt->phone_callflow != CALLFLOW_CALL_DOWN) {
+ if (tech_pvt->interface_state != GSMOPEN_STATE_DOWN && tech_pvt->phone_callflow != CALLFLOW_CALL_DOWN) {
+ //ast_setstate(tech_pvt->owner, GSMOPEN_STATE_BUSY);
+ //gsmopen_queue_control(tech_pvt->owner, GSMOPEN_CONTROL_BUSY);
+ //cicopet
+ switch_core_session_t *session = NULL;
+ switch_channel_t *channel = NULL;
+
+ tech_pvt->interface_state = GSMOPEN_STATE_DOWN;
+
+ session = switch_core_session_locate(tech_pvt->session_uuid_str);
+ if (session) {
+ channel = switch_core_session_get_channel(session);
+ //gsmopen_hangup(tech_pvt);
+ switch_core_session_rwunlock(session);
+ switch_channel_hangup(channel, 0);
+ }
+ //
+ //tech_pvt->owner->hangupcause = GSMOPEN_CAUSE_FAILURE;
+ //gsmopen_queue_control(tech_pvt->owner, GSMOPEN_CONTROL_HANGUP);
+
} else {
ERRORA("Why BUSY now?\n", GSMOPEN_P_LOG);
}
Modified: freeswitch/branches/gmaruzz/mod_gsmopen/mod_gsmopen.c (15079 => 15080)
--- freeswitch/branches/gmaruzz/mod_gsmopen/mod_gsmopen.c 2009-10-05 10:16:56 UTC (rev 15079)
+++ freeswitch/branches/gmaruzz/mod_gsmopen/mod_gsmopen.c 2009-10-05 12:10:14 UTC (rev 15080)
@@ -549,9 +549,9 @@
}
tech_pvt->interface_state = GSMOPEN_STATE_IDLE;
- if (tech_pvt->phone_callflow == CALLFLOW_STATUS_FINISHED) {
+ //FIXME if (tech_pvt->phone_callflow == CALLFLOW_STATUS_FINISHED) {
tech_pvt->phone_callflow = CALLFLOW_CALL_IDLE;
- }
+ //FIXME }
switch_mutex_unlock(globals.mutex);
return SWITCH_STATUS_SUCCESS;
@@ -1003,9 +1003,10 @@
/* Find the first idle interface using Round Robin */
DEBUGA_GSMOPEN("Finding one available gsmopen interface RR\n", GSMOPEN_P_LOG);
tech_pvt = find_available_gsmopen_interface_rr(NULL);
- if (tech_pvt)
+ if (tech_pvt){
found = 1;
- DEBUGA_GSMOPEN("FOUND one available gsmopen interface RR\n", GSMOPEN_P_LOG);
+ DEBUGA_GSMOPEN("FOUND one available gsmopen interface RR\n", GSMOPEN_P_LOG);
+ }
}
for (i = 0; !found && i < GSMOPEN_MAX_INTERFACES; i++) {
@@ -2040,10 +2041,8 @@
tech_pvt = &globals.GSMOPEN_INTERFACES[interface_id];
gsmopen_state = tech_pvt->interface_state;
- //DEBUGA_GSMOPEN("gsmopen interface: %d, name: %s, state: %d\n", GSMOPEN_P_LOG, interface_id, globals.GSMOPEN_INTERFACES[interface_id].name, gsmopen_state);
- if ((tech_pvt_calling ? strcmp(tech_pvt->gsmopen_user, tech_pvt_calling->gsmopen_user) : 1)
- && (GSMOPEN_STATE_DOWN == gsmopen_state || 0 == gsmopen_state) && (tech_pvt->phone_callflow == CALLFLOW_STATUS_FINISHED
- || 0 == tech_pvt->phone_callflow)) {
+ DEBUGA_GSMOPEN("gsmopen interface: %d, name: %s, state: %d\n", GSMOPEN_P_LOG, interface_id, globals.GSMOPEN_INTERFACES[interface_id].name, gsmopen_state);
+ if ((tech_pvt_calling ? strcmp(tech_pvt->gsmopen_user, tech_pvt_calling->gsmopen_user) : 1) && (GSMOPEN_STATE_DOWN == gsmopen_state || 0 == gsmopen_state) && (tech_pvt->phone_callflow == CALLFLOW_STATUS_FINISHED || 0 == tech_pvt->phone_callflow)) {
DEBUGA_GSMOPEN("returning as available gsmopen interface name: %s, state: %d callflow: %d\n", GSMOPEN_P_LOG, tech_pvt->name, gsmopen_state,
tech_pvt->phone_callflow);
/*set to Dialing state to avoid other thread fint it, don't know if it is safe */