提交 99b14db4 authored 作者: Giovanni Maruzzelli's avatar Giovanni Maruzzelli

skypopen: manage ERROR 36 Not online, cosmetics, put the interface DOWN when no…

skypopen: manage ERROR 36 Not online, cosmetics, put the interface DOWN when no session and when beginning to destroy
上级 145a7a4b
...@@ -471,6 +471,7 @@ static switch_status_t channel_on_destroy(switch_core_session_t *session) ...@@ -471,6 +471,7 @@ static switch_status_t channel_on_destroy(switch_core_session_t *session)
if (tech_pvt) { if (tech_pvt) {
DEBUGA_SKYPE("%s CHANNEL DESTROY %s\n", SKYPOPEN_P_LOG, tech_pvt->name, switch_core_session_get_uuid(session)); DEBUGA_SKYPE("%s CHANNEL DESTROY %s\n", SKYPOPEN_P_LOG, tech_pvt->name, switch_core_session_get_uuid(session));
tech_pvt->interface_state = SKYPOPEN_STATE_DOWN;
switch_mutex_lock(tech_pvt->flag_mutex); switch_mutex_lock(tech_pvt->flag_mutex);
#if 1 #if 1
...@@ -510,8 +511,8 @@ static switch_status_t channel_on_destroy(switch_core_session_t *session) ...@@ -510,8 +511,8 @@ static switch_status_t channel_on_destroy(switch_core_session_t *session)
while(tech_pvt->tcp_srv_thread){ while(tech_pvt->tcp_srv_thread){
switch_sleep(5000); switch_sleep(5000);
conta++; conta++;
if(conta==100){ if(conta==200){
ERRORA("tcp_srv_thread is NOT dead\n", SKYPOPEN_P_LOG); ERRORA("tcp_srv_thread is NOT dead, this can LEAK MEMORY\n", SKYPOPEN_P_LOG);
break; break;
} }
} }
...@@ -520,8 +521,8 @@ static switch_status_t channel_on_destroy(switch_core_session_t *session) ...@@ -520,8 +521,8 @@ static switch_status_t channel_on_destroy(switch_core_session_t *session)
while(tech_pvt->tcp_cli_thread){ while(tech_pvt->tcp_cli_thread){
switch_sleep(5000); switch_sleep(5000);
conta++; conta++;
if(conta==100){ if(conta==200){
ERRORA("tcp_cli_thread is NOT dead\n", SKYPOPEN_P_LOG); ERRORA("tcp_cli_thread is NOT dead, this can LEAK MEMORY\n", SKYPOPEN_P_LOG);
break; break;
} }
} }
...@@ -1450,13 +1451,14 @@ static void *SWITCH_THREAD_FUNC skypopen_signaling_thread_func(switch_thread_t * ...@@ -1450,13 +1451,14 @@ static void *SWITCH_THREAD_FUNC skypopen_signaling_thread_func(switch_thread_t *
} else { } else {
DEBUGA_SKYPE("no session\n", SKYPOPEN_P_LOG); DEBUGA_SKYPE("no session\n", SKYPOPEN_P_LOG);
tech_pvt->interface_state = SKYPOPEN_STATE_DOWN;
DEBUGA_SKYPE("audio tcp threads to DIE\n", SKYPOPEN_P_LOG); DEBUGA_SKYPE("audio tcp threads to DIE\n", SKYPOPEN_P_LOG);
conta=0; conta=0;
while(tech_pvt->tcp_srv_thread){ while(tech_pvt->tcp_srv_thread){
switch_sleep(5000); switch_sleep(5000);
conta++; conta++;
if(conta==100){ if(conta==200){
ERRORA("tcp_srv_thread is NOT dead\n", SKYPOPEN_P_LOG); ERRORA("tcp_srv_thread is NOT dead, this can LEAK MEMORY\n", SKYPOPEN_P_LOG);
break; break;
} }
} }
...@@ -1465,8 +1467,8 @@ static void *SWITCH_THREAD_FUNC skypopen_signaling_thread_func(switch_thread_t * ...@@ -1465,8 +1467,8 @@ static void *SWITCH_THREAD_FUNC skypopen_signaling_thread_func(switch_thread_t *
while(tech_pvt->tcp_cli_thread){ while(tech_pvt->tcp_cli_thread){
switch_sleep(5000); switch_sleep(5000);
conta++; conta++;
if(conta==100){ if(conta==200){
ERRORA("tcp_cli_thread is NOT dead\n", SKYPOPEN_P_LOG); ERRORA("tcp_cli_thread is NOT dead, this can LEAK MEMORY\n", SKYPOPEN_P_LOG);
break; break;
} }
} }
...@@ -2312,13 +2314,13 @@ int remote_party_is_ringing(private_t *tech_pvt) ...@@ -2312,13 +2314,13 @@ int remote_party_is_ringing(private_t *tech_pvt)
session = switch_core_session_locate(tech_pvt->session_uuid_str); session = switch_core_session_locate(tech_pvt->session_uuid_str);
} else { } else {
ERRORA("No session_uuid_str???\n", SKYPOPEN_P_LOG); ERRORA("No session_uuid_str???\n", SKYPOPEN_P_LOG);
goto bad; return SWITCH_STATUS_FALSE;
} }
if (session) { if (session) {
channel = switch_core_session_get_channel(session); channel = switch_core_session_get_channel(session);
} else { } else {
ERRORA("No session???\n", SKYPOPEN_P_LOG); ERRORA("No session???\n", SKYPOPEN_P_LOG);
goto bad; return SWITCH_STATUS_FALSE;
} }
if (channel) { if (channel) {
switch_channel_mark_ring_ready(channel); switch_channel_mark_ring_ready(channel);
...@@ -2329,9 +2331,7 @@ int remote_party_is_ringing(private_t *tech_pvt) ...@@ -2329,9 +2331,7 @@ int remote_party_is_ringing(private_t *tech_pvt)
switch_core_session_rwunlock(session); switch_core_session_rwunlock(session);
return 1; return SWITCH_STATUS_SUCCESS;
bad:
return 0;
} }
int remote_party_is_early_media(private_t *tech_pvt) int remote_party_is_early_media(private_t *tech_pvt)
......
...@@ -235,9 +235,22 @@ int skypopen_signaling_read(private_t *tech_pvt) ...@@ -235,9 +235,22 @@ int skypopen_signaling_read(private_t *tech_pvt)
DEBUGA_SKYPE("Skype got ERROR about a failed action (probably TRYING to HANGUP A CALL), no problem: |||%s|||\n", SKYPOPEN_P_LOG, DEBUGA_SKYPE("Skype got ERROR about a failed action (probably TRYING to HANGUP A CALL), no problem: |||%s|||\n", SKYPOPEN_P_LOG,
message); message);
} }
} else if (!strncasecmp(message, "ERROR 36 Not online", 18)) {
char msg_to_skype[256];
ERRORA("Skype client is not online, eg: not connected to Skype network, probably got a temporary net outage: |||%s|||\n", SKYPOPEN_P_LOG, message);
if(strlen(tech_pvt->skype_call_id)){
sprintf(msg_to_skype, "ALTER CALL %s HANGUP", tech_pvt->skype_call_id);
skypopen_signaling_write(tech_pvt, msg_to_skype);
}
if(strlen(tech_pvt->ring_id)){
sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", tech_pvt->ring_id);
skypopen_signaling_write(tech_pvt, msg_to_skype);
}
tech_pvt->interface_state = SKYPOPEN_STATE_DOWN;
return CALLFLOW_INCOMING_HANGUP;
} else if (!strncasecmp(message, "ERROR 589 ALTER CALL", 19)) { } else if (!strncasecmp(message, "ERROR 589 ALTER CALL", 19)) {
char msg_to_skype[256]; char msg_to_skype[256];
ERRORA("Skype client was not able to correctly manage tcp audio sockets: |||%s|||\n", SKYPOPEN_P_LOG, message); ERRORA("Skype client was not able to correctly manage tcp audio sockets, probably got a local or remote hangup: |||%s|||\n", SKYPOPEN_P_LOG, message);
if(strlen(tech_pvt->skype_call_id)){ if(strlen(tech_pvt->skype_call_id)){
sprintf(msg_to_skype, "ALTER CALL %s HANGUP", tech_pvt->skype_call_id); sprintf(msg_to_skype, "ALTER CALL %s HANGUP", tech_pvt->skype_call_id);
skypopen_signaling_write(tech_pvt, msg_to_skype); skypopen_signaling_write(tech_pvt, msg_to_skype);
...@@ -605,9 +618,8 @@ int skypopen_signaling_read(private_t *tech_pvt) ...@@ -605,9 +618,8 @@ int skypopen_signaling_read(private_t *tech_pvt)
tech_pvt->interface_state = SKYPOPEN_STATE_RINGING; tech_pvt->interface_state = SKYPOPEN_STATE_RINGING;
skypopen_strncpy(tech_pvt->skype_call_id, id, sizeof(tech_pvt->skype_call_id) - 1); skypopen_strncpy(tech_pvt->skype_call_id, id, sizeof(tech_pvt->skype_call_id) - 1);
DEBUGA_SKYPE("Our remote party in skype_call %s is RINGING\n", SKYPOPEN_P_LOG, id); DEBUGA_SKYPE("Our remote party in skype_call %s is RINGING\n", SKYPOPEN_P_LOG, id);
if (!remote_party_is_ringing(tech_pvt)) { if (remote_party_is_ringing(tech_pvt) != SWITCH_STATUS_SUCCESS) {
WARNINGA("We are getting the RINGING from a call we probably canceled, trying to get out hanging up call id: %s.\n",
WARNINGA("We are getting the RINGING from a call we canceled, trying to get out hanging up call id: %s.\n",
SKYPOPEN_P_LOG, id); SKYPOPEN_P_LOG, id);
sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", id); sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", id);
skypopen_signaling_write(tech_pvt, msg_to_skype); skypopen_signaling_write(tech_pvt, msg_to_skype);
...@@ -757,7 +769,7 @@ int skypopen_signaling_read(private_t *tech_pvt) ...@@ -757,7 +769,7 @@ int skypopen_signaling_read(private_t *tech_pvt)
} else if (!strcasecmp(value, "LOCALHOLD")) { } else if (!strcasecmp(value, "LOCALHOLD")) {
char msg_to_skype[256]; char msg_to_skype[256];
WARNINGA("skype_call: %s is now LOCALHOLD\n", SKYPOPEN_P_LOG, id); WARNINGA("skype_call: %s is now LOCALHOLD, let's hangup\n", SKYPOPEN_P_LOG, id);
sprintf(msg_to_skype, "ALTER CALL %s HANGUP", id); sprintf(msg_to_skype, "ALTER CALL %s HANGUP", id);
skypopen_signaling_write(tech_pvt, msg_to_skype); skypopen_signaling_write(tech_pvt, msg_to_skype);
} else if (!strcasecmp(value, "REMOTEHOLD")) { } else if (!strcasecmp(value, "REMOTEHOLD")) {
...@@ -1972,11 +1984,11 @@ int skypopen_answered(private_t *tech_pvt) ...@@ -1972,11 +1984,11 @@ int skypopen_answered(private_t *tech_pvt)
} }
switch_core_session_rwunlock(session); switch_core_session_rwunlock(session);
} else { } else {
ERRORA("no session\n", SKYPOPEN_P_LOG); ERRORA("no session after INPROGRESS, let's hangup\n", SKYPOPEN_P_LOG);
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
} else { } else {
ERRORA("no tech_pvt->session_uuid_str\n", SKYPOPEN_P_LOG); ERRORA("no tech_pvt->session_uuid_str after INPROGRESS, let's hangup\n", SKYPOPEN_P_LOG);
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
return res; return res;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论