switch_core_timer_sync(&tech_pvt->timer_write);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_HANGUP);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
DEBUGA_GSMOPEN("gsmopen_codec SUCCESS\n", GSMOPEN_P_LOG);
return SWITCH_STATUS_SUCCESS;
}
channel = switch_core_session_get_channel(session);
switch_assert(channel != NULL);
//ERRORA("%s CHANNEL INIT\n", GSMOPEN_P_LOG, tech_pvt->name);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_set_flag(tech_pvt, TFLAG_IO);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
/* Move channel's state machine to ROUTING. This means the call is trying
to get from the initial start where the call because, to the point
}
DEBUGA_GSMOPEN("%s CHANNEL HANGUP\n", GSMOPEN_P_LOG, tech_pvt->name);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_IO);
switch_clear_flag(tech_pvt, TFLAG_VOICE);
switch_set_flag(tech_pvt, TFLAG_HANGUP);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
gsmopen_hangup(tech_pvt);
switch (sig) {
case SWITCH_SIG_KILL:
DEBUGA_GSMOPEN("%s CHANNEL got SWITCH_SIG_KILL\n", GSMOPEN_P_LOG, switch_channel_get_name(channel));
- //switch_mutex_lock(tech_pvt->flag_mutex);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_IO);
switch_clear_flag(tech_pvt, TFLAG_VOICE);
switch_set_flag(tech_pvt, TFLAG_HANGUP);
- //switch_mutex_unlock(tech_pvt->flag_mutex);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
break;
case SWITCH_SIG_BREAK:
DEBUGA_GSMOPEN("%s CHANNEL got SWITCH_SIG_BREAK\n", GSMOPEN_P_LOG, switch_channel_get_name(channel));
//switch_set_flag(tech_pvt, TFLAG_BREAK);
- //switch_mutex_lock(tech_pvt->flag_mutex);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_set_flag(tech_pvt, TFLAG_BREAK);
- //switch_mutex_unlock(tech_pvt->flag_mutex);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
break;
default:
break;
samples = 320;
memcpy(tech_pvt->read_frame.data, buffer2, 320);
} else {
- DEBUGA_GSMOPEN("read less than 320, samples=%d\n", GSMOPEN_P_LOG, samples);
+ if (samples != 0) {
+ DEBUGA_GSMOPEN("read less than 320, samples=%d\n", GSMOPEN_P_LOG, samples);
+ }
if (tech_pvt->buffer2_full) {
memcpy(tech_pvt->read_frame.data, tech_pvt->buffer2, 320);
tech_pvt->buffer2_full = 0;
*frame = &tech_pvt->read_frame;
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_set_flag(tech_pvt, TFLAG_VOICE);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
if (samples != 320) {
- DEBUGA_GSMOPEN("samples=%d, goto cng\n", GSMOPEN_P_LOG, samples);
+ if (samples != 0) {
+ DEBUGA_GSMOPEN("samples=%d, goto cng\n", GSMOPEN_P_LOG, samples);
+ }
goto cng;
}
switch_channel_queue_dtmf(channel, &dtmf);
p++;
}
- NOTICA("DTMF DETECTED: [%s] new_dtmf_timestamp: %u, delta_t: %u\n", GSMOPEN_P_LOG, digit_str, (unsigned int) new_dtmf_timestamp,
+ DEBUGA_GSMOPEN("DTMF DETECTED: [%s] new_dtmf_timestamp: %u, delta_t: %u\n", GSMOPEN_P_LOG, digit_str, (unsigned int) new_dtmf_timestamp,
(unsigned int) (new_dtmf_timestamp - tech_pvt->old_dtmf_timestamp));
tech_pvt->old_dtmf_timestamp = new_dtmf_timestamp;
}
}
while (switch_test_flag(tech_pvt, TFLAG_IO)) {
if (switch_test_flag(tech_pvt, TFLAG_BREAK)) {
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_BREAK);
- DEBUGA_GSMOPEN("CHANNEL READ FRAME goto CNG\n", GSMOPEN_P_LOG);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
+ DEBUGA_GSMOPEN("BREAK: CHANNEL READ FRAME goto CNG\n", GSMOPEN_P_LOG);
goto cng;
}
}
if (switch_test_flag(tech_pvt, TFLAG_IO) && switch_test_flag(tech_pvt, TFLAG_VOICE)) {
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_VOICE);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
if (!tech_pvt->read_frame.datalen) {
DEBUGA_GSMOPEN("CHANNEL READ CONTINUE\n", GSMOPEN_P_LOG);
continue;
switch_swap_linear((int16_t *) (*frame)->data, (int) (*frame)->datalen / 2);
}
#endif
- //WARNINGA("HERE\n", GSMOPEN_P_LOG);
+ //DEBUGA_GSMOPEN("HERE\n", GSMOPEN_P_LOG);
return SWITCH_STATUS_SUCCESS;
}
- WARNINGA("HERE\n", GSMOPEN_P_LOG);
DEBUGA_GSMOPEN("CHANNEL READ no TFLAG_VOICE\n", GSMOPEN_P_LOG);
return SWITCH_STATUS_FALSE;
switch_assert(tech_pvt != NULL);
//ERRORA("%s CHANNEL INIT\n", GSMOPEN_P_LOG, tech_pvt->name);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_set_flag(tech_pvt, TFLAG_IO);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
+
gsmopen_serial_answer(tech_pvt);
- /* Move channel's state machine to ROUTING. This means the call is trying
- to get from the initial start where the call because, to the point
- where a destination has been identified. If the channel is simply
- left in the initial state, nothing will happen. */
- switch_channel_set_state(channel, CS_ROUTING);
switch_mutex_lock(globals.mutex);
globals.calls++;
switch_mutex_unlock(globals.mutex);
DEBUGA_GSMOPEN("%s CHANNEL ANSWER %s\n", GSMOPEN_P_LOG, tech_pvt->name, switch_core_session_get_uuid(session));
+
+ if (channel) {
+ switch_channel_mark_answered(channel);
+ }
+
DEBUGA_GSMOPEN("ANSWERED! \n", GSMOPEN_P_LOG);
return SWITCH_STATUS_SUCCESS;
switch (msg->message_id) {
case SWITCH_MESSAGE_INDICATE_ANSWER:
{
- DEBUGA_GSMOPEN("MSG_ID=%d, TO BE ANSWERED!\n", GSMOPEN_P_LOG, msg->message_id);
- channel_answer_channel(session);
+ DEBUGA_GSMOPEN("%s CHANNEL got SWITCH_MESSAGE_INDICATE_ANSWER\n", GSMOPEN_P_LOG, switch_channel_get_name(channel));
+ if(tech_pvt->interface_state != GSMOPEN_STATE_UP && tech_pvt->phone_callflow != CALLFLOW_CALL_ACTIVE){
+ DEBUGA_GSMOPEN("MSG_ID=%d, TO BE ANSWERED!\n", GSMOPEN_P_LOG, msg->message_id);
+ channel_answer_channel(session);
+ }
+ }
+ break;
+
+ case SWITCH_MESSAGE_INDICATE_PROGRESS:
+ {
+ DEBUGA_GSMOPEN("%s CHANNEL got SWITCH_MESSAGE_INDICATE_PROGRESS\n", GSMOPEN_P_LOG, switch_channel_get_name(channel));
+ if(tech_pvt->interface_state != GSMOPEN_STATE_UP && tech_pvt->phone_callflow != CALLFLOW_CALL_ACTIVE){
+ DEBUGA_GSMOPEN("MSG_ID=%d, TO BE ANSWERED!\n", GSMOPEN_P_LOG, msg->message_id);
+ channel_answer_channel(session);
+ }
}
break;
case SWITCH_MESSAGE_INDICATE_AUDIO_SYNC:
break;
+ case SWITCH_MESSAGE_INDICATE_TRANSFER:
+ DEBUGA_GSMOPEN("%s CHANNEL got SWITCH_MESSAGE_INDICATE_TRANSFER\n", GSMOPEN_P_LOG, switch_channel_get_name(channel));
+ break;
+ case SWITCH_MESSAGE_INDICATE_BRIDGE:
+ DEBUGA_GSMOPEN("%s CHANNEL got SWITCH_MESSAGE_INDICATE_BRIDGE\n", GSMOPEN_P_LOG, switch_channel_get_name(channel));
+ break;
+ case SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY:
+ DEBUGA_GSMOPEN("%s CHANNEL got SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY\n", GSMOPEN_P_LOG, switch_channel_get_name(channel));
+ break;
default:
{
- DEBUGA_GSMOPEN("MSG_ID=%d\n", GSMOPEN_P_LOG, msg->message_id);
+ if(msg->message_id != SWITCH_MESSAGE_INDICATE_APPLICATION_EXEC && msg->message_id != SWITCH_MESSAGE_INDICATE_APPLICATION_EXEC_COMPLETE){
+ DEBUGA_GSMOPEN("MSG_ID=%d\n", GSMOPEN_P_LOG, msg->message_id);
+ }
}
break;
}
caller_profile = tech_pvt->caller_profile;
caller_profile->destination_number = rdest;
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_set_flag(tech_pvt, TFLAG_OUTBOUND);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
switch_channel_set_state(channel, CS_INIT);
gsmopen_call(tech_pvt, rdest, 30);
switch_mutex_unlock(globals.mutex);
return 0;
}
}
- if (channel) {
- //switch_channel_mark_answered(channel);
- }
- DEBUGA_GSMOPEN("new_inbound_channel\n", GSMOPEN_P_LOG);
+ DEBUGA_GSMOPEN("EXITING new_inbound_channel\n", GSMOPEN_P_LOG);
return 0;
}
//FIXME }
} else if (tech_pvt->controldevprotocol != PROTOCOL_NO_SERIAL && tech_pvt->interface_state == GSMOPEN_STATE_DIALING) {
- WARNINGA("WE'RE DIALING, let's take the earlymedia\n", GSMOPEN_P_LOG);
+ DEBUGA_GSMOPEN("WE'RE DIALING, let's take the earlymedia\n", GSMOPEN_P_LOG);
tech_pvt->interface_state = CALLFLOW_STATUS_EARLYMEDIA;
remote_party_is_early_media(tech_pvt);
//new_inbound_channel(tech_pvt);
//FIXME }
} else if (tech_pvt->interface_state == CALLFLOW_CALL_REMOTEANSWER) {
- WARNINGA("REMOTE PARTY ANSWERED\n", GSMOPEN_P_LOG);
+ DEBUGA_GSMOPEN("REMOTE PARTY ANSWERED\n", GSMOPEN_P_LOG);
outbound_channel_answered(tech_pvt);
//new_inbound_channel(tech_pvt);
//FIXME if (!gsmopen_new(p, AST_STATE_RING, tech_pvt->context)) {