channel = switch_core_session_get_channel(session);
switch_assert(channel != NULL);
switch_channel_set_variable(channel, "skype_user", tech_pvt->skype_user);
+ 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
if (tech_pvt) {
DEBUGA_SKYPE("%s CHANNEL DESTROY %s\n", SKYPOPEN_P_LOG, tech_pvt->name, switch_core_session_get_uuid(session));
+
+ switch_mutex_lock(tech_pvt->flag_mutex);
+#if 1
+ switch_clear_flag(tech_pvt, TFLAG_IO);
+ switch_clear_flag(tech_pvt, TFLAG_VOICE);
+#endif//0
+ if (switch_test_flag(tech_pvt, TFLAG_PROGRESS)) {
+ switch_clear_flag(tech_pvt, TFLAG_PROGRESS);
+ }
+ switch_mutex_unlock(tech_pvt->flag_mutex);
+
if (switch_core_codec_ready(&tech_pvt->read_codec)) {
switch_core_codec_destroy(&tech_pvt->read_codec);
}
}
}
+ switch_mutex_lock(tech_pvt->flag_mutex);
+#if 1
switch_clear_flag(tech_pvt, TFLAG_IO);
switch_clear_flag(tech_pvt, TFLAG_VOICE);
+#endif//0
+ if (switch_test_flag(tech_pvt, TFLAG_PROGRESS)) {
+ switch_clear_flag(tech_pvt, TFLAG_PROGRESS);
+ }
+ switch_mutex_unlock(tech_pvt->flag_mutex);
+
//DEBUGA_SKYPE("debugging_hangup 2\n", SKYPOPEN_P_LOG);
tech_pvt->interface_state = SKYPOPEN_STATE_HANGUP_REQUESTED;
}
switch_mutex_lock(tech_pvt->flag_mutex);
-#if 0
+#if 1
switch_clear_flag(tech_pvt, TFLAG_IO);
switch_clear_flag(tech_pvt, TFLAG_VOICE);
- //switch_set_flag(tech_pvt, TFLAG_HANGUP);
+ switch_set_flag(tech_pvt, TFLAG_HANGUP);
#endif//0
if (switch_test_flag(tech_pvt, TFLAG_PROGRESS)) {
switch_clear_flag(tech_pvt, TFLAG_PROGRESS);
tech_pvt->read_frame.datalen = 640;
}
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_set_flag(tech_pvt, TFLAG_VOICE);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
+
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);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
DEBUGA_SKYPE("CHANNEL READ FRAME goto CNG\n", SKYPOPEN_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_SKYPE("CHANNEL READ CONTINUE\n", SKYPOPEN_P_LOG);
continue;
tech_pvt = switch_core_session_get_private(session);
switch_assert(tech_pvt != NULL);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_IO);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
skypopen_answer(tech_pvt);
while (!switch_test_flag(tech_pvt, TFLAG_IO)) { //FIXME that would be better with a timeout
case SWITCH_MESSAGE_INDICATE_PROGRESS:
{
DEBUGA_SKYPE("%s CHANNEL got SWITCH_MESSAGE_INDICATE_PROGRESS\n", SKYPOPEN_P_LOG, switch_channel_get_name(channel));
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_set_flag(tech_pvt, TFLAG_PROGRESS);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
}
break;
case SWITCH_MESSAGE_INDICATE_CLEAR_PROGRESS:
{
DEBUGA_SKYPE("%s CHANNEL got SWITCH_MESSAGE_INDICATE_CLEAR_PROGRESS\n", SKYPOPEN_P_LOG, switch_channel_get_name(channel));
- if (switch_set_flag(tech_pvt, TFLAG_PROGRESS)) {
+ if (switch_test_flag(tech_pvt, TFLAG_PROGRESS)) {
sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", tech_pvt->ring_id);
skypopen_signaling_write(tech_pvt, msg_to_skype);
sprintf(msg_to_skype, "ALTER CALL %s HANGUP", tech_pvt->ring_id);
skypopen_signaling_write(tech_pvt, msg_to_skype);
sprintf(msg_to_skype, "ALTER CALL %s HANGUP", tech_pvt->skype_call_id);
skypopen_signaling_write(tech_pvt, msg_to_skype);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_PROGRESS);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
}
}
break;
//switch_set_flag(tech_pvt, TFLAG_IO);
channel_answer_channel(session);
+ switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_PROGRESS);
+ switch_mutex_unlock(tech_pvt->flag_mutex);
if (tech_pvt->read_buffer) {
switch_mutex_lock(tech_pvt->mutex_audio_srv);
caller_profile->destination_number = rdest;
switch_channel_set_flag(channel, CF_OUTBOUND);
+ 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);
skypopen_call(tech_pvt, rdest, 30);
switch_mutex_unlock(globals.mutex);