diff --git a/src/mod/endpoints/mod_skypiax/asterisk/chan_skypiax.c b/src/mod/endpoints/mod_skypiax/asterisk/chan_skypiax.c index 954fea5cb4..f385e9ca16 100644 --- a/src/mod/endpoints/mod_skypiax/asterisk/chan_skypiax.c +++ b/src/mod/endpoints/mod_skypiax/asterisk/chan_skypiax.c @@ -1880,40 +1880,31 @@ int new_inbound_channel(private_t * p) #endif return 0; } +int remote_party_is_ringing(private_t * p) +{ + if (p->owner) { + ast_queue_control(p->owner, AST_CONTROL_RINGING); + } + + return 0; +} +int remote_party_is_early_media(private_t * p) +{ + if (p->owner) { + ast_queue_control(p->owner, AST_CONTROL_RINGING); + } + + return 0; +} + int outbound_channel_answered(private_t * p) { -#ifdef NOTDEF - switch_core_session_t *session = NULL; - switch_channel_t *channel = NULL; - - if (strlen(tech_pvt->session_uuid_str)) { - session = switch_core_session_locate(tech_pvt->session_uuid_str); - } else { - ERRORA("No session???\n", SKYPIAX_P_LOG); - } - if (session) { - channel = switch_core_session_get_channel(session); - } else { - ERRORA("No session???\n", SKYPIAX_P_LOG); - } - if (channel) { - switch_channel_mark_answered(channel); - //DEBUGA_SKYPE("skype_call: %s, answered\n", SKYPIAX_P_LOG, id); - } else { - ERRORA("No channel???\n", SKYPIAX_P_LOG); - } - - switch_core_session_rwunlock(session); - -#endif if (p->owner) { ast_queue_control(p->owner, AST_CONTROL_ANSWER); } - NOTICA("HERE!\n", SKYPIAX_P_LOG); - return 0; } void *skypiax_do_tcp_srv_thread(void *obj) diff --git a/src/mod/endpoints/mod_skypiax/asterisk/skypiax.h b/src/mod/endpoints/mod_skypiax/asterisk/skypiax.h index f23774b9b0..9ae73954b2 100644 --- a/src/mod/endpoints/mod_skypiax/asterisk/skypiax.h +++ b/src/mod/endpoints/mod_skypiax/asterisk/skypiax.h @@ -414,6 +414,8 @@ int skypiax_pipe_write(int pipe, short *buf, int howmany); #endif /* WIN32 */ int skypiax_close_socket(unsigned int fd); private_t *find_available_skypiax_interface(void); +int remote_party_is_ringing(private_t * tech_pvt); +int remote_party_is_early_media(private_t * tech_pvt); #define SKYPIAX_STATE_DOWN AST_STATE_DOWN #define SKYPIAX_STATE_RING AST_STATE_RING #define SKYPIAX_STATE_DIALING AST_STATE_DIALING diff --git a/src/mod/endpoints/mod_skypiax/mod_skypiax.c b/src/mod/endpoints/mod_skypiax/mod_skypiax.c index c3e08301a1..a2bc942ca4 100644 --- a/src/mod/endpoints/mod_skypiax/mod_skypiax.c +++ b/src/mod/endpoints/mod_skypiax/mod_skypiax.c @@ -1169,6 +1169,62 @@ int new_inbound_channel(private_t * tech_pvt) return 0; } +int remote_party_is_ringing(private_t * tech_pvt) +{ + switch_core_session_t *session = NULL; + switch_channel_t *channel = NULL; + + if (strlen(tech_pvt->session_uuid_str)) { + session = switch_core_session_locate(tech_pvt->session_uuid_str); + } else { + ERRORA("No session???\n", SKYPIAX_P_LOG); + } + if (session) { + channel = switch_core_session_get_channel(session); + } else { + ERRORA("No session???\n", SKYPIAX_P_LOG); + } + if (channel) { + switch_channel_mark_ring_ready(channel); + DEBUGA_SKYPE("skype_call: REMOTE PARTY RINGING\n", SKYPIAX_P_LOG); + } else { + ERRORA("No channel???\n", SKYPIAX_P_LOG); + } + + switch_core_session_rwunlock(session); + + return 0; +} + + +int remote_party_is_early_media(private_t * tech_pvt) +{ + switch_core_session_t *session = NULL; + switch_channel_t *channel = NULL; + + if (strlen(tech_pvt->session_uuid_str)) { + session = switch_core_session_locate(tech_pvt->session_uuid_str); + } else { + ERRORA("No session???\n", SKYPIAX_P_LOG); + } + if (session) { + channel = switch_core_session_get_channel(session); + switch_core_session_add_stream(session, NULL); + } else { + ERRORA("No session???\n", SKYPIAX_P_LOG); + } + if (channel) { + //switch_channel_mark_pre_answered(channel); + NOTICA("skype_call: REMOTE PARTY EARLY MEDIA, we will pass you the audio, just the code is not yet written :-)\n", SKYPIAX_P_LOG); + } else { + ERRORA("No channel???\n", SKYPIAX_P_LOG); + } + + switch_core_session_rwunlock(session); + + return 0; +} + int outbound_channel_answered(private_t * tech_pvt) { switch_core_session_t *session = NULL; diff --git a/src/mod/endpoints/mod_skypiax/skypiax.h b/src/mod/endpoints/mod_skypiax/skypiax.h index 849382c344..5fee026a6a 100644 --- a/src/mod/endpoints/mod_skypiax/skypiax.h +++ b/src/mod/endpoints/mod_skypiax/skypiax.h @@ -268,3 +268,5 @@ int skypiax_pipe_write(int pipe, short *buf, int howmany); #endif /* WIN32 */ int skypiax_close_socket(unsigned int fd); private_t *find_available_skypiax_interface(void); +int remote_party_is_ringing(private_t * tech_pvt); +int remote_party_is_early_media(private_t * tech_pvt); diff --git a/src/mod/endpoints/mod_skypiax/skypiax_protocol.c b/src/mod/endpoints/mod_skypiax/skypiax_protocol.c index 2aff9d1ccf..dc9868581a 100644 --- a/src/mod/endpoints/mod_skypiax/skypiax_protocol.c +++ b/src/mod/endpoints/mod_skypiax/skypiax_protocol.c @@ -267,12 +267,14 @@ int skypiax_signaling_read(private_t * tech_pvt) 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", SKYPIAX_P_LOG, id); + remote_party_is_ringing(tech_pvt); } } else if (!strcasecmp(value, "EARLYMEDIA")) { tech_pvt->skype_callflow = CALLFLOW_STATUS_EARLYMEDIA; tech_pvt->interface_state = SKYPIAX_STATE_DIALING; - DEBUGA_SKYPE("Our remote party in skype_call %s is EARLYMEDIA\n", + NOTICA("Our remote party in skype_call %s is EARLYMEDIA\n", SKYPIAX_P_LOG, id); + remote_party_is_early_media(tech_pvt); } else if (!strcasecmp(value, "MISSED")) { DEBUGA_SKYPE("We missed skype_call %s\n", SKYPIAX_P_LOG, id); } else if (!strcasecmp(value, "FINISHED")) {