[Freeswitch-branches] [commit] r11917 - in freeswitch/branches/gmaruzz/mod_skypiax: . asterisk
Author: gmaruzz Date: Thu Feb 12 03:04:35 2009 New Revision: 11917 Log: skypiax: indent -gnu -ts4 -br -brs -cdw -lp -ce -nbfda -npcs -nprs -npsl -nbbo -saf -sai -saw -cs -bbo -nhnl -nut -sob -l90 Modified: freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax.h freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c freeswitch/branches/gmaruzz/mod_skypiax/skypiax.h freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c Modified: freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c Thu Feb 12 03:04:35 2009 @@ -12,7 +12,7 @@ /* GLOBAL VARIABLES */ int running = 1; -int skypiax_dir_entry_extension=1; //FIXME one var for each interface! +int skypiax_dir_entry_extension = 1; //FIXME one var for each interface! char skypiax_console_active_array[50] = ""; char *skypiax_console_active = skypiax_console_active_array; /*! \brief Count of active channels for this module */ @@ -286,7 +286,6 @@ struct ast_channel *tmp = NULL; char *name = data; - DEBUGA_PBX("Try to request type: %s, name: %s, cause: %d," " format: %d\n", SKYPIAX_P_LOG, type, name, *cause, format); @@ -442,10 +441,11 @@ usleep(10000); //10msec } if (p->interface_state != SKYPIAX_STATE_UP) { - ERRORA("call answering failed, we want it to be into interface_state=%d, got %d\n", SKYPIAX_P_LOG, SKYPIAX_STATE_UP, p->interface_state); + ERRORA("call answering failed, we want it to be into interface_state=%d, got %d\n", + SKYPIAX_P_LOG, SKYPIAX_STATE_UP, p->interface_state); res = -1; } else { - DEBUGA_PBX("call answered\n", SKYPIAX_P_LOG); + DEBUGA_PBX("call answered\n", SKYPIAX_P_LOG); res = 0; } return res; @@ -501,7 +501,6 @@ short *buf; int samples; - /* if there are control frames queued to be sent by skypiax_queue_control, send it the first */ //TODO maybe better a real queue? if (p && p->owner && p->control_to_send) { @@ -572,8 +571,8 @@ return -1; } - DEBUGA_PBX("skypiax_call to call idest: %s, timeout: %d!\n", SKYPIAX_P_LOG, idest, - timeout); + DEBUGA_PBX("skypiax_call to call idest: %s, timeout: %d!\n", SKYPIAX_P_LOG, idest, + timeout); strncpy(rdest, idest, sizeof(rdest) - 1); stringp = rdest; @@ -586,8 +585,8 @@ } strncpy(dstr, where + p->stripmsd, sizeof(dstr) - 1); - DEBUGA_PBX("skypiax_call dialing idest: %s, timeout: %d, dstr: %s!\n", SKYPIAX_P_LOG, - idest, timeout, dstr); + DEBUGA_PBX("skypiax_call dialing idest: %s, timeout: %d, dstr: %s!\n", SKYPIAX_P_LOG, + idest, timeout, dstr); strcpy(p->session_uuid_str, "dialing"); status = skypiax_skype_call(p, dstr, timeout); @@ -596,8 +595,8 @@ return -1; } - DEBUGA_PBX("skypiax_call dialed idest: %s, timeout: %d, dstr: %s!\n", SKYPIAX_P_LOG, - idest, timeout, dstr); + DEBUGA_PBX("skypiax_call dialed idest: %s, timeout: %d, dstr: %s!\n", SKYPIAX_P_LOG, + idest, timeout, dstr); ast_setstate(p->owner, SKYPIAX_STATE_DIALING); return 0; @@ -861,24 +860,24 @@ /* go through the interfaces list (skypiax_iflist) WITHOUT locking */ p = skypiax_iflist; while (p) { - int i; - /* for each interface in list */ - p2 = p->next; - NOTICA("STARTING interface %s, please be patient\n", SKYPIAX_P_LOG, p->name); - i=0; - while (p->SkypiaxHandles.api_connected == 0 && running && i < 60000) { // 60sec FIXME - usleep(1000); - i++; - } - if (p->SkypiaxHandles.api_connected){ - NOTICA("Interface %s is now STARTED\n", SKYPIAX_P_LOG, p->name); - } else { - ERRORA("Interface %s FAILED to start\n", SKYPIAX_P_LOG, p->name); - running = 0; - return -1; - } - /* next one, please */ - p = p2; + int i; + /* for each interface in list */ + p2 = p->next; + NOTICA("STARTING interface %s, please be patient\n", SKYPIAX_P_LOG, p->name); + i = 0; + while (p->SkypiaxHandles.api_connected == 0 && running && i < 60000) { // 60sec FIXME + usleep(1000); + i++; + } + if (p->SkypiaxHandles.api_connected) { + NOTICA("Interface %s is now STARTED\n", SKYPIAX_P_LOG, p->name); + } else { + ERRORA("Interface %s FAILED to start\n", SKYPIAX_P_LOG, p->name); + running = 0; + return -1; + } + /* next one, please */ + p = p2; } return 0; } @@ -898,7 +897,6 @@ struct skypiax_pvt *p = NULL, *p2 = NULL; int res; - /* unregister our channel type with Asterisk */ ast_channel_unregister(&skypiax_tech); ast_cli_unregister_multiple(myclis, sizeof(myclis) / sizeof(struct ast_cli_entry)); @@ -1024,7 +1022,7 @@ { struct skypiax_pvt *p = NULL; - NOTICA("Returning Key\n", SKYPIAX_P_LOG); + NOTICA("Returning Key\n", SKYPIAX_P_LOG); return ASTERISK_GPL_KEY; } @@ -1080,7 +1078,8 @@ skypiax_store_boost(v->value, &skypiax_default.capture_boost)) M_UINT("skypiax_dir_entry_extension_prefix", skypiax_default.skypiax_dir_entry_extension_prefix) - M_END(;); + M_END(; + ); } } @@ -1116,7 +1115,8 @@ M_STR("skype_user", tmp->skype_user) M_UINT("skypiax_dir_entry_extension_prefix", tmp->skypiax_dir_entry_extension_prefix) - M_END(;); + M_END(; + ); } if (debug_all) { @@ -1231,34 +1231,33 @@ return NULL; } /* - res = pipe(tmp->SkypiaxHandles.fdesc); - if (res) { - ast_log(LOG_ERROR, "Unable to create skype pipe\n"); - if (option_debug > 10) { - DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_TMP_LOG); - } - free(tmp); - return NULL; - } - fcntl(tmp->SkypiaxHandles.fdesc[0], F_SETFL, O_NONBLOCK); - fcntl(tmp->SkypiaxHandles.fdesc[1], F_SETFL, O_NONBLOCK); - */ + res = pipe(tmp->SkypiaxHandles.fdesc); + if (res) { + ast_log(LOG_ERROR, "Unable to create skype pipe\n"); + if (option_debug > 10) { + DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_TMP_LOG); + } + free(tmp); + return NULL; + } + fcntl(tmp->SkypiaxHandles.fdesc[0], F_SETFL, O_NONBLOCK); + fcntl(tmp->SkypiaxHandles.fdesc[1], F_SETFL, O_NONBLOCK); + */ tmp->skype_thread = AST_PTHREADT_NULL; if (tmp->skype) { - ast_log(LOG_DEBUG, "TO BE started skype_thread=%lu STOP=%lu NULL=%lu\n", - (unsigned long) tmp->skype_thread, (unsigned long) AST_PTHREADT_STOP, - (unsigned long) AST_PTHREADT_NULL); + ast_log(LOG_DEBUG, "TO BE started skype_thread=%lu STOP=%lu NULL=%lu\n", + (unsigned long) tmp->skype_thread, (unsigned long) AST_PTHREADT_STOP, + (unsigned long) AST_PTHREADT_NULL); #ifdef __CYGWIN__ - if (ast_pthread_create - (&tmp->skype_thread, NULL, do_skypeapi_thread, tmp) < 0) { + if (ast_pthread_create(&tmp->skype_thread, NULL, do_skypeapi_thread, tmp) < 0) { ast_log(LOG_ERROR, "Unable to start skype_main thread.\n"); free(tmp); return NULL; } #else /* __CYGWIN__ */ #ifdef WANT_SKYPE_X11 - ast_log(LOG_DEBUG, "AsteriskHandlesfd: %d\n", tmp->SkypiaxHandles.fdesc[1]); + ast_log(LOG_DEBUG, "AsteriskHandlesfd: %d\n", tmp->SkypiaxHandles.fdesc[1]); if (ast_pthread_create(&tmp->skype_thread, NULL, do_skypeapi_thread, tmp) < 0) { ast_log(LOG_ERROR, "Unable to start skype_main thread.\n"); free(tmp); @@ -1266,18 +1265,16 @@ } #endif /* WANT_SKYPE_X11 */ #endif /* __CYGWIN__ */ - usleep(100000); //0.1 sec - if( tmp->skype_thread == AST_PTHREADT_NULL){ + usleep(100000); //0.1 sec + if (tmp->skype_thread == AST_PTHREADT_NULL) { ast_log(LOG_ERROR, "Unable to start skype_main thread.\n"); free(tmp); return NULL; } - ast_log(LOG_DEBUG, "STARTED skype_thread=%lu STOP=%lu NULL=%lu\n", - (unsigned long) tmp->skype_thread, (unsigned long) AST_PTHREADT_STOP, - (unsigned long) AST_PTHREADT_NULL); + ast_log(LOG_DEBUG, "STARTED skype_thread=%lu STOP=%lu NULL=%lu\n", + (unsigned long) tmp->skype_thread, (unsigned long) AST_PTHREADT_STOP, + (unsigned long) AST_PTHREADT_NULL); } - - #if 0 if (tmp->skype) { #if 0 @@ -1298,7 +1295,8 @@ } #else /* __CYGWIN__ */ #ifdef WANT_SKYPE_X11 - if (ast_pthread_create(&tmp->signaling_thread, NULL, do_signaling_thread_fnc, tmp) < 0) { + if (ast_pthread_create(&tmp->signaling_thread, NULL, do_signaling_thread_fnc, tmp) < + 0) { ast_log(LOG_ERROR, "Unable to start skype_main thread.\n"); if (option_debug > 10) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_TMP_LOG); @@ -1308,8 +1306,8 @@ } #endif /* WANT_SKYPE_X11 */ #endif /* __CYGWIN__ */ - usleep(100000); //0.1 sec - if( tmp->skype_thread == AST_PTHREADT_NULL){ + usleep(100000); //0.1 sec + if (tmp->skype_thread == AST_PTHREADT_NULL) { ast_log(LOG_ERROR, "Unable to start skype_main thread.\n"); if (option_debug > 10) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_TMP_LOG); @@ -1322,12 +1320,8 @@ (unsigned long) tmp->signaling_thread, (unsigned long) AST_PTHREADT_STOP, (unsigned long) AST_PTHREADT_NULL); } - #endif - - - /* return the newly created skypiax_pvt */ return tmp; } @@ -1522,7 +1516,7 @@ int res; res = skypiax_skypeaudio_read(p); - f = &p->read_frame; + f = &p->read_frame; return f; } @@ -1557,7 +1551,7 @@ if (p->skype) { res = skypiax_skype_read(p); if (res == CALLFLOW_INCOMING_HANGUP) { - DEBUGA_SKYPE("skype call ended\n", SKYPIAX_P_LOG); + DEBUGA_SKYPE("skype call ended\n", SKYPIAX_P_LOG); if (p->owner) { pthread_testcancel(); ast_queue_control(p->owner, AST_CONTROL_HANGUP); @@ -1596,7 +1590,7 @@ *boost = BOOST_MAX; } *boost = exp(log(10) * *boost / 20) * BOOST_SCALE; - DEBUGA_SOUND("setting boost %s to %f\n", SKYPIAX_P_LOG, s, *boost); + DEBUGA_SOUND("setting boost %s to %f\n", SKYPIAX_P_LOG, s, *boost); } /* @@ -1758,147 +1752,140 @@ void *do_skypeapi_thread(void *obj) { - return skypiax_do_skypeapi_thread_func(obj); + return skypiax_do_skypeapi_thread_func(obj); } -int dtmf_received(private_t *p, char *value){ +int dtmf_received(private_t * p, char *value) +{ - struct ast_frame f2 = { AST_FRAME_DTMF, value[0], }; - DEBUGA_SKYPE("Received DTMF: %s\n", SKYPIAX_P_LOG, value); - ast_queue_frame(p->owner, &f2); + struct ast_frame f2 = { AST_FRAME_DTMF, value[0], }; + DEBUGA_SKYPE("Received DTMF: %s\n", SKYPIAX_P_LOG, value); + ast_queue_frame(p->owner, &f2); - return 0; + return 0; } -int start_audio_threads(private_t *p) { - //if (!p->tcp_srv_thread) { - if (ast_pthread_create - (&p->tcp_srv_thread, NULL, skypiax_do_tcp_srv_thread, p) < 0) { - ERRORA("Unable to start tcp_srv_thread thread.\n", SKYPIAX_P_LOG); - return -1; - } else { - DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG); - } - //} - //if (!p->tcp_cli_thread) { - if (ast_pthread_create - (&p->tcp_cli_thread, NULL, skypiax_do_tcp_cli_thread, p) < 0) { - ERRORA("Unable to start tcp_cli_thread thread.\n", SKYPIAX_P_LOG); - return -1; - } else { - DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG); - } - //} +int start_audio_threads(private_t * p) +{ + //if (!p->tcp_srv_thread) { + if (ast_pthread_create(&p->tcp_srv_thread, NULL, skypiax_do_tcp_srv_thread, p) < 0) { + ERRORA("Unable to start tcp_srv_thread thread.\n", SKYPIAX_P_LOG); + return -1; + } else { + DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG); + } + //} + //if (!p->tcp_cli_thread) { + if (ast_pthread_create(&p->tcp_cli_thread, NULL, skypiax_do_tcp_cli_thread, p) < 0) { + ERRORA("Unable to start tcp_cli_thread thread.\n", SKYPIAX_P_LOG); + return -1; + } else { + DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG); + } + //} #ifdef NOTDEF - switch_threadattr_t *thd_attr = NULL; + switch_threadattr_t *thd_attr = NULL; + + switch_threadattr_create(&thd_attr, skypiax_module_pool); + switch_threadattr_detach_set(thd_attr, 1); + switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); + switch_thread_create(&tech_pvt->tcp_srv_thread, thd_attr, skypiax_do_tcp_srv_thread, + tech_pvt, skypiax_module_pool); + DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG); + + switch_threadattr_create(&thd_attr, skypiax_module_pool); + switch_threadattr_detach_set(thd_attr, 1); + switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); + switch_thread_create(&tech_pvt->tcp_cli_thread, thd_attr, skypiax_do_tcp_cli_thread, + tech_pvt, skypiax_module_pool); + DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG); + switch_sleep(100000); - switch_threadattr_create(&thd_attr, skypiax_module_pool); - switch_threadattr_detach_set(thd_attr, 1); - switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); - switch_thread_create(&tech_pvt->tcp_srv_thread, thd_attr, - skypiax_do_tcp_srv_thread, tech_pvt, - skypiax_module_pool); - DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG); - - switch_threadattr_create(&thd_attr, skypiax_module_pool); - switch_threadattr_detach_set(thd_attr, 1); - switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); - switch_thread_create(&tech_pvt->tcp_cli_thread, thd_attr, - skypiax_do_tcp_cli_thread, tech_pvt, - skypiax_module_pool); - DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG); - switch_sleep(100000); - #endif - return 0; + return 0; } -int new_inbound_channel(private_t *p) { +int new_inbound_channel(private_t * p) +{ #ifdef NOTDEF - switch_core_session_t *session = NULL; - switch_channel_t *channel = NULL; - - if ((session = - switch_core_session_request(skypiax_endpoint_interface, - NULL)) != 0) { - switch_core_session_add_stream(session, NULL); - channel = switch_core_session_get_channel(session); - skypiax_tech_init(tech_pvt, session); - - if ((tech_pvt->caller_profile = - switch_caller_profile_new(switch_core_session_get_pool(session), - "skypiax", tech_pvt->dialplan, - tech_pvt->callid_name, - tech_pvt->callid_number, NULL, NULL, - NULL, NULL, "mod_skypiax", - tech_pvt->context, - tech_pvt->destination)) != 0) { - char name[128]; - //switch_snprintf(name, sizeof(name), "skypiax/%s/%s", tech_pvt->name, tech_pvt->caller_profile->destination_number); - switch_snprintf(name, sizeof(name), "skypiax/%s", tech_pvt->name); - switch_channel_set_name(channel, name); - switch_channel_set_caller_profile(channel, - tech_pvt->caller_profile); - } - switch_channel_set_state(channel, CS_INIT); - if (switch_core_session_thread_launch(session) != - SWITCH_STATUS_SUCCESS) { - ERRORA("Error spawning thread\n", SKYPIAX_P_LOG); - switch_core_session_destroy(&session); - } - } - switch_channel_mark_answered(channel); + switch_core_session_t *session = NULL; + switch_channel_t *channel = NULL; + if ((session = switch_core_session_request(skypiax_endpoint_interface, NULL)) != 0) { + switch_core_session_add_stream(session, NULL); + channel = switch_core_session_get_channel(session); + skypiax_tech_init(tech_pvt, session); + + if ((tech_pvt->caller_profile = + switch_caller_profile_new(switch_core_session_get_pool(session), "skypiax", + tech_pvt->dialplan, tech_pvt->callid_name, + tech_pvt->callid_number, NULL, NULL, NULL, NULL, + "mod_skypiax", tech_pvt->context, + tech_pvt->destination)) != 0) { + char name[128]; + //switch_snprintf(name, sizeof(name), "skypiax/%s/%s", tech_pvt->name, tech_pvt->caller_profile->destination_number); + switch_snprintf(name, sizeof(name), "skypiax/%s", tech_pvt->name); + switch_channel_set_name(channel, name); + switch_channel_set_caller_profile(channel, tech_pvt->caller_profile); + } + switch_channel_set_state(channel, CS_INIT); + if (switch_core_session_thread_launch(session) != SWITCH_STATUS_SUCCESS) { + ERRORA("Error spawning thread\n", SKYPIAX_P_LOG); + switch_core_session_destroy(&session); + } + } + switch_channel_mark_answered(channel); #endif - return 0; + return 0; } -int outbound_channel_answered(private_t *p) { -#ifdef NOTDEF - switch_core_session_t *session = NULL; - switch_channel_t *channel = NULL; +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); - } + 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); + switch_core_session_rwunlock(session); #endif - if (p->owner) { - ast_queue_control(p->owner, AST_CONTROL_ANSWER); - } + if (p->owner) { + ast_queue_control(p->owner, AST_CONTROL_ANSWER); + } - NOTICA("HERE!\n", SKYPIAX_P_LOG); + NOTICA("HERE!\n", SKYPIAX_P_LOG); - return 0; + return 0; } -void * skypiax_do_tcp_srv_thread(void *obj) +void *skypiax_do_tcp_srv_thread(void *obj) { - return skypiax_do_tcp_srv_thread_func(obj); + return skypiax_do_tcp_srv_thread_func(obj); } -void * skypiax_do_tcp_cli_thread(void *obj) +void *skypiax_do_tcp_cli_thread(void *obj) { - return skypiax_do_tcp_cli_thread_func(obj); + return skypiax_do_tcp_cli_thread_func(obj); } int skypiax_skypeaudio_write(struct skypiax_pvt *p, struct ast_frame *f) @@ -1962,10 +1949,11 @@ //int fromcell = 0; #if 0 - if(directoriax_entry_extension){ - skypiax_dir_entry_extension=directoriax_entry_extension; - }else{ - ast_cli(fd, "No 'directoriax_entry_extension', you MUST have loaded directoriax.so\n"); + if (directoriax_entry_extension) { + skypiax_dir_entry_extension = directoriax_entry_extension; + } else { + ast_cli(fd, + "No 'directoriax_entry_extension', you MUST have loaded directoriax.so\n"); return RESULT_SUCCESS; } #endif @@ -2027,7 +2015,7 @@ } else { snprintf(fn, sizeof(fn), "%s/%s", ast_config_AST_CONFIG_DIR, configfile); } - NOTICA("Opening '%s'\n", SKYPIAX_P_LOG, fn); + NOTICA("Opening '%s'\n", SKYPIAX_P_LOG, fn); time(&t); ast_copy_string(date, ctime(&t), sizeof(date)); @@ -2038,13 +2026,13 @@ if (p->phonebook_writing_fp) { if (add_to_skypiax_dir_conf) { - NOTICA("Opened '%s' for appending \n", SKYPIAX_P_LOG, fn); + NOTICA("Opened '%s' for appending \n", SKYPIAX_P_LOG, fn); fprintf(p->phonebook_writing_fp, ";!\n"); fprintf(p->phonebook_writing_fp, ";! Update Date: %s", date); fprintf(p->phonebook_writing_fp, ";! Updated by: %s, %d\n", __FILE__, __LINE__); fprintf(p->phonebook_writing_fp, ";!\n"); } else { - NOTICA("Opened '%s' for writing \n", SKYPIAX_P_LOG, fn); + NOTICA("Opened '%s' for writing \n", SKYPIAX_P_LOG, fn); fprintf(p->phonebook_writing_fp, ";!\n"); fprintf(p->phonebook_writing_fp, ";! Automatically generated configuration file\n"); fprintf(p->phonebook_writing_fp, ";! Filename: %s (%s)\n", configfile, fn); @@ -2057,117 +2045,198 @@ /*******************************************************************************************/ //if (fromskype) { - if (p->skype) { - WARNINGA - ("About to querying the Skype client 'Contacts', it may take some moments... Don't worry.\n", - SKYPIAX_P_LOG); - if (p->skype_thread != AST_PTHREADT_NULL) { - char msg_to_skype[1024]; + if (p->skype) { + WARNINGA + ("About to querying the Skype client 'Contacts', it may take some moments... Don't worry.\n", + SKYPIAX_P_LOG); + if (p->skype_thread != AST_PTHREADT_NULL) { + char msg_to_skype[1024]; + + p->skype_friends[0] = '\0'; + sprintf(msg_to_skype, "#333 SEARCH FRIENDS"); + if (skypiax_skype_write(p, msg_to_skype) < 0) { + return -1; + } - p->skype_friends[0] = '\0'; - sprintf(msg_to_skype, "#333 SEARCH FRIENDS"); - if (skypiax_skype_write(p, msg_to_skype) < 0) { - return -1; + int friends_count = 0; + while (p->skype_friends[0] == '\0') { + /* FIXME needs a timeout, can't wait forever! + * eg. when skype is running but not connected! */ + usleep(100); + friends_count++; + if (friends_count > 20000) { + return -1; /* FIXME */ } + } - int friends_count = 0; - while (p->skype_friends[0] == '\0') { - /* FIXME needs a timeout, can't wait forever! - * eg. when skype is running but not connected! */ - usleep(100); - friends_count++; - if (friends_count > 20000) { - return -1; /* FIXME */ - } - } + } - } + if (p->skype_thread != AST_PTHREADT_NULL) { + char msg_to_skype[1024]; - if (p->skype_thread != AST_PTHREADT_NULL) { - char msg_to_skype[1024]; + if (p->skype_friends[0] != '\0') { + char *buf, *where; + char **stringp; + int skype_dir_file_written = 0; + + buf = p->skype_friends; + stringp = &buf; + where = strsep(stringp, ", "); + while (where) { + if (where[0] != '\0') { + /* + * So, we have the Skype username (the HANDLE, I think is called). + * But we want to call the names we see in the Skype contact list + * So, let's check the DISPLAYNAME (the end user modified contact name) + * Then, we check the FULLNAME (that appears as it was the DISPLAYNAME + * if the end user has not modify it) + * If we still have neither DISPLAYNAME nor FULLNAME, we'll use the + * Skipe username (the HANDLE) + */ + + p->skype_displayname[0] = '\0'; + sprintf(msg_to_skype, "#765 GET USER %s DISPLAYNAME", where); + skypiax_skype_write(p, msg_to_skype); + int displayname_count = 0; + while (p->skype_displayname[0] == '\0') { + /* FIXME needs a timeout, can't wait forever! + * eg. when skype is running but not connected! */ + usleep(100); + displayname_count++; + if (displayname_count > 20000) + return -1; /* FIXME */ + } + if (p->skype_displayname[0] != '\0') { + char *where2; + char sanitized[300]; + + sanitized[0] = '\0'; + + where2 = strstr(p->skype_displayname, "DISPLAYNAME "); + if (where2) { + + /* there can be some *smart* that makes a displayname + * that is different than first<space>last, */ + /* maybe initials, simbols, slashes, + * something smartish... let's check */ + + if (where2[12] != '\0') { + int i = 12; + int x = 0; + int spaces = 0; + int last_char_was_space = 0; + + for (i = 12; i < strlen(where2) && x < 299; i++) { + if (!isalnum(where2[i])) { + if (!isblank(where2[i])) { + /* bad char */ + continue; + } + /* is a space */ + if (last_char_was_space == 1) /* do not write 2 consecutive spaces */ + continue; + last_char_was_space = 1; + sanitized[x] = ' '; + x++; + continue; + } + /* is alphanum */ + last_char_was_space = 0; + sanitized[x] = where2[i]; + x++; + continue; + } - if (p->skype_friends[0] != '\0') { - char *buf, *where; - char **stringp; - int skype_dir_file_written = 0; + sanitized[x] = '\0'; + if (spaces == 0) { + } + DEBUGA_SKYPE("sanitized=|%s|, where=|%s|, where2=|%s|\n", + SKYPIAX_P_LOG, sanitized, where, &where2[12]); + } - buf = p->skype_friends; - stringp = &buf; - where = strsep(stringp, ", "); - while (where) { - if (where[0] != '\0') { - /* - * So, we have the Skype username (the HANDLE, I think is called). - * But we want to call the names we see in the Skype contact list - * So, let's check the DISPLAYNAME (the end user modified contact name) - * Then, we check the FULLNAME (that appears as it was the DISPLAYNAME - * if the end user has not modify it) - * If we still have neither DISPLAYNAME nor FULLNAME, we'll use the - * Skipe username (the HANDLE) - */ - - p->skype_displayname[0] = '\0'; - sprintf(msg_to_skype, "#765 GET USER %s DISPLAYNAME", where); - skypiax_skype_write(p, msg_to_skype); - int displayname_count = 0; - while (p->skype_displayname[0] == '\0') { - /* FIXME needs a timeout, can't wait forever! - * eg. when skype is running but not connected! */ - usleep(100); - displayname_count++; - if (displayname_count > 20000) - return -1; /* FIXME */ + if (where2[12] != '\0') { + skypiax_dir_entry_extension++; + if (where[0] == '+' || isdigit(where[0])) { /* is a skypeout number */ + fprintf(p->phonebook_writing_fp, + "%s => ,%sSKO,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", + where, sanitized, "no", + p->skypiax_dir_entry_extension_prefix, "2", + skypiax_dir_entry_extension, "yes", "not_specified"); + } else { /* is a skype name */ + fprintf(p->phonebook_writing_fp, + "%s => ,%sSKY,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", + where, sanitized, "no", + p->skypiax_dir_entry_extension_prefix, "1", + skypiax_dir_entry_extension, "yes", "not_specified"); + } + skype_dir_file_written = 1; + + } } - if (p->skype_displayname[0] != '\0') { - char *where2; - char sanitized[300]; - - sanitized[0] = '\0'; - - where2 = strstr(p->skype_displayname, "DISPLAYNAME "); - if (where2) { - - /* there can be some *smart* that makes a displayname - * that is different than first<space>last, */ - /* maybe initials, simbols, slashes, - * something smartish... let's check */ - - if (where2[12] != '\0') { - int i = 12; - int x = 0; - int spaces = 0; - int last_char_was_space = 0; - - for (i = 12; i < strlen(where2) && x < 299; i++) { - if (!isalnum(where2[i])) { - if (!isblank(where2[i])) { - /* bad char */ - continue; - } - /* is a space */ - if (last_char_was_space == 1) /* do not write 2 consecutive spaces */ - continue; - last_char_was_space = 1; - sanitized[x] = ' '; - x++; + } + p->skype_displayname[0] = '\0'; + + p->skype_fullname[0] = '\0'; + sprintf(msg_to_skype, "#222 GET USER %s FULLNAME", where); + skypiax_skype_write(p, msg_to_skype); + int fullname_count = 0; + while (p->skype_fullname[0] == '\0') { + /* FIXME needs a timeout, can't wait forever! + * eg. when skype is running but not connected! */ + usleep(100); + fullname_count++; + if (fullname_count > 20000) + return -1; /* FIXME */ + } + if (p->skype_fullname[0] != '\0') { + char *where2; + char sanitized[300]; + + where2 = strstr(p->skype_fullname, "FULLNAME "); + if (where2) { + + /* there can be some *smart* that makes a fullname + * that is different than first<space>last, */ + /* maybe initials, simbols, slashes, + * something smartish... let's check */ + + if (where2[9] != '\0') { + int i = 9; + int x = 0; + int spaces = 0; + int last_char_was_space = 0; + + for (i = 9; i < strlen(where2) && x < 299; i++) { + if (!isalnum(where2[i])) { + if (!isblank(where2[i])) { + /* bad char */ continue; } - /* is alphanum */ - last_char_was_space = 0; - sanitized[x] = where2[i]; + /* is a space */ + if (last_char_was_space == 1) /* do not write 2 consecutive spaces */ + continue; + last_char_was_space = 1; + sanitized[x] = ' '; x++; continue; } + /* alphanum */ + last_char_was_space = 0; + sanitized[x] = where2[i]; + x++; + continue; + } - sanitized[x] = '\0'; - if (spaces == 0) { - } - DEBUGA_SKYPE("sanitized=|%s|, where=|%s|, where2=|%s|\n", - SKYPIAX_P_LOG, sanitized, where, &where2[12]); + sanitized[x] = '\0'; + if (spaces == 0) { } + DEBUGA_SKYPE("sanitized=|%s|, where=|%s|, where2=|%s|\n", + SKYPIAX_P_LOG, sanitized, where, &where2[9]); + } - if (where2[12] != '\0') { - skypiax_dir_entry_extension++; + if (skype_dir_file_written == 0) { + skypiax_dir_entry_extension++; + if (where2[9] != '\0') { if (where[0] == '+' || isdigit(where[0])) { /* is a skypeout number */ fprintf(p->phonebook_writing_fp, "%s => ,%sSKO,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", @@ -2180,127 +2249,44 @@ where, sanitized, "no", p->skypiax_dir_entry_extension_prefix, "1", skypiax_dir_entry_extension, "yes", "not_specified"); - } - skype_dir_file_written = 1; - - } - } - } - p->skype_displayname[0] = '\0'; - - p->skype_fullname[0] = '\0'; - sprintf(msg_to_skype, "#222 GET USER %s FULLNAME", where); - skypiax_skype_write(p, msg_to_skype); - int fullname_count = 0; - while (p->skype_fullname[0] == '\0') { - /* FIXME needs a timeout, can't wait forever! - * eg. when skype is running but not connected! */ - usleep(100); - fullname_count++; - if (fullname_count > 20000) - return -1; /* FIXME */ - } - if (p->skype_fullname[0] != '\0') { - char *where2; - char sanitized[300]; - - where2 = strstr(p->skype_fullname, "FULLNAME "); - if (where2) { - - /* there can be some *smart* that makes a fullname - * that is different than first<space>last, */ - /* maybe initials, simbols, slashes, - * something smartish... let's check */ - - if (where2[9] != '\0') { - int i = 9; - int x = 0; - int spaces = 0; - int last_char_was_space = 0; - - for (i = 9; i < strlen(where2) && x < 299; i++) { - if (!isalnum(where2[i])) { - if (!isblank(where2[i])) { - /* bad char */ - continue; - } - /* is a space */ - if (last_char_was_space == 1) /* do not write 2 consecutive spaces */ - continue; - last_char_was_space = 1; - sanitized[x] = ' '; - x++; - continue; - } - /* alphanum */ - last_char_was_space = 0; - sanitized[x] = where2[i]; - x++; - continue; - } - sanitized[x] = '\0'; - if (spaces == 0) { } - DEBUGA_SKYPE("sanitized=|%s|, where=|%s|, where2=|%s|\n", - SKYPIAX_P_LOG, sanitized, where, &where2[9]); - } - - if (skype_dir_file_written == 0) { - skypiax_dir_entry_extension++; - if (where2[9] != '\0') { - if (where[0] == '+' || isdigit(where[0])) { /* is a skypeout number */ - fprintf(p->phonebook_writing_fp, - "%s => ,%sSKO,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", - where, sanitized, "no", - p->skypiax_dir_entry_extension_prefix, "2", - skypiax_dir_entry_extension, "yes", "not_specified"); - } else { /* is a skype name */ - fprintf(p->phonebook_writing_fp, - "%s => ,%sSKY,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", - where, sanitized, "no", - p->skypiax_dir_entry_extension_prefix, "1", - skypiax_dir_entry_extension, "yes", "not_specified"); - } - - } else { - if (where[0] == '+' || isdigit(where[0])) { /* is a skypeout number */ - fprintf(p->phonebook_writing_fp, - "%s => ,%sSKO,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", - where, where, "no", - p->skypiax_dir_entry_extension_prefix, "2", - skypiax_dir_entry_extension, "yes", "not_specified"); - } else { /* is a skype name */ - fprintf(p->phonebook_writing_fp, - "%s => ,%sSKY,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", - where, where, "no", - p->skypiax_dir_entry_extension_prefix, "1", - skypiax_dir_entry_extension, "yes", "not_specified"); + } else { + if (where[0] == '+' || isdigit(where[0])) { /* is a skypeout number */ + fprintf(p->phonebook_writing_fp, + "%s => ,%sSKO,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", + where, where, "no", p->skypiax_dir_entry_extension_prefix, + "2", skypiax_dir_entry_extension, "yes", "not_specified"); + } else { /* is a skype name */ + fprintf(p->phonebook_writing_fp, + "%s => ,%sSKY,,,hidefromdir=%s|phonebook_direct_calling_ext=%d%s%.4d|phonebook_entry_fromskype=%s|phonebook_entry_owner=%s\n", + where, where, "no", p->skypiax_dir_entry_extension_prefix, + "1", skypiax_dir_entry_extension, "yes", "not_specified"); - } } } - - skype_dir_file_written = 0; - } + skype_dir_file_written = 0; + } - p->skype_fullname[0] = '\0'; } - where = strsep(stringp, ", "); - } + p->skype_fullname[0] = '\0'; - p->skype_friends[0] = '\0'; + } + where = strsep(stringp, ", "); } - } - } else { - ast_cli(fd, - "Skype not configured on the 'current' console, not importing from Skype client!\n"); + p->skype_friends[0] = '\0'; + } } + } else { + + ast_cli(fd, + "Skype not configured on the 'current' console, not importing from Skype client!\n"); + } //} /*******************************************************************************************/ /*******************************************************************************************/ @@ -2317,9 +2303,10 @@ return RESULT_SUCCESS; } -private_t *find_available_skypiax_interface(void) { - private_t *p; - int found = 0; +private_t *find_available_skypiax_interface(void) +{ + private_t *p; + int found = 0; /* lock the interfaces' list */ LOKKA(&skypiax_iflock); @@ -2327,15 +2314,15 @@ p = skypiax_iflist; /* Search for the requested interface and verify if is unowned */ while (p) { - if (!p->owner) { - DEBUGA_PBX("Interface is NOT OWNED by a channel\n", SKYPIAX_P_LOG); - found = 1; + if (!p->owner) { + DEBUGA_PBX("Interface is NOT OWNED by a channel\n", SKYPIAX_P_LOG); + found = 1; /* we found the requested interface, bail out from the while loop */ - break; - } else { - /* interface owned by a channel */ - DEBUGA_PBX("Interface is OWNED by a channel\n", SKYPIAX_P_LOG); - } + break; + } else { + /* interface owned by a channel */ + DEBUGA_PBX("Interface is OWNED by a channel\n", SKYPIAX_P_LOG); + } /* not yet found, next please */ p = p->next; } @@ -2343,14 +2330,12 @@ /* lock the interfaces' list */ UNLOCKA(&skypiax_iflock); - - if(found) - return p; + if (found) + return p; else - return NULL; + return NULL; } - /************************************************/ #ifdef ASTERISK_VERSION_1_4 #ifndef AST_MODULE Modified: freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax.h ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax.h (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax.h Thu Feb 12 03:04:35 2009 @@ -235,7 +235,6 @@ #endif //WIN32 - /*! * \brief PVT structure for a skypiax interface (channel), created by skypiax_mkif */ @@ -396,13 +395,13 @@ int skypiax_skype_call(struct skypiax_pvt *p, char *idest, int timeout); int skypiax_console_skypiax_dir_import(int fd, int argc, char *argv[]); -void * skypiax_do_tcp_srv_thread_func(void *obj); -void * skypiax_do_tcp_cli_thread_func(void *obj); -void * skypiax_do_skypeapi_thread_func(void *obj); -int dtmf_received(private_t *tech_pvt, char *value); -int start_audio_threads(private_t *tech_pvt); -int new_inbound_channel(private_t *tech_pvt); -int outbound_channel_answered(private_t *tech_pvt); +void *skypiax_do_tcp_srv_thread_func(void *obj); +void *skypiax_do_tcp_cli_thread_func(void *obj); +void *skypiax_do_skypeapi_thread_func(void *obj); +int dtmf_received(private_t * tech_pvt, char *value); +int start_audio_threads(private_t * tech_pvt); +int new_inbound_channel(private_t * tech_pvt); +int outbound_channel_answered(private_t * tech_pvt); int skypiax_skype_senddigit(struct skypiax_pvt *p, char digit); int skypiax_skype_write(private_t * tech_pvt, char *msg_to_skype); #if defined(WIN32) && !defined(__CYGWIN__) Modified: freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c Thu Feb 12 03:04:35 2009 @@ -474,7 +474,7 @@ private_t *tech_pvt; switch_channel_t *channel; switch_caller_profile_t *caller_profile; - char *rdest; + char *rdest; switch_core_session_add_stream(*new_session, NULL); @@ -491,30 +491,32 @@ slash = strrchr(interface_name, '/'); *slash = '\0'; - if (strncmp("ANY", interface_name, strlen(interface_name)) == 0) { - /* we've been asked for the "ANY" interface, let's find the first idle interface */ - DEBUGA_SKYPE("Finding one available skype interface\n", - SKYPIAX_P_LOG); - tech_pvt = find_available_skypiax_interface(); - if(tech_pvt) - found=1; - } + if (strncmp("ANY", interface_name, strlen(interface_name)) == 0) { + /* we've been asked for the "ANY" interface, let's find the first idle interface */ + DEBUGA_SKYPE("Finding one available skype interface\n", SKYPIAX_P_LOG); + tech_pvt = find_available_skypiax_interface(); + if (tech_pvt) + found = 1; + } for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) { - /* we've been asked for a normal interface name, or we have not found idle interfaces to serve as the "ANY" interface */ + /* we've been asked for a normal interface name, or we have not found idle interfaces to serve as the "ANY" interface */ if (strlen(globals.SKYPIAX_INTERFACES[i].name) && (strncmp (globals.SKYPIAX_INTERFACES[i].name, interface_name, strlen(interface_name)) == 0)) { - if (strlen(globals.SKYPIAX_INTERFACES[i].session_uuid_str)){ - DEBUGA_SKYPE("globals.SKYPIAX_INTERFACES[%d].name=|||%s||| session_uuid_str=|||%s||| is BUSY\n", SKYPIAX_P_LOG, i, globals.SKYPIAX_INTERFACES[i].name, globals.SKYPIAX_INTERFACES[i].session_uuid_str); - switch_core_session_destroy(new_session); - return SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE ; - } + if (strlen(globals.SKYPIAX_INTERFACES[i].session_uuid_str)) { + DEBUGA_SKYPE + ("globals.SKYPIAX_INTERFACES[%d].name=|||%s||| session_uuid_str=|||%s||| is BUSY\n", + SKYPIAX_P_LOG, i, globals.SKYPIAX_INTERFACES[i].name, + globals.SKYPIAX_INTERFACES[i].session_uuid_str); + switch_core_session_destroy(new_session); + return SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE; + } DEBUGA_SKYPE("globals.SKYPIAX_INTERFACES[%d].name=|||%s|||?\n", SKYPIAX_P_LOG, i, globals.SKYPIAX_INTERFACES[i].name); - tech_pvt = &globals.SKYPIAX_INTERFACES[i]; + tech_pvt = &globals.SKYPIAX_INTERFACES[i]; found = 1; break; } @@ -557,18 +559,16 @@ return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; } - - rdest = strchr(caller_profile->destination_number, '/'); - *rdest++ = '\0'; - + rdest = strchr(caller_profile->destination_number, '/'); + *rdest++ = '\0'; skypiax_skype_call(tech_pvt, rdest, 30); - switch_copy_string(tech_pvt->session_uuid_str, switch_core_session_get_uuid(*new_session), - sizeof(tech_pvt->session_uuid_str)); - caller_profile = tech_pvt->caller_profile; - caller_profile->destination_number = rdest; - + switch_copy_string(tech_pvt->session_uuid_str, + switch_core_session_get_uuid(*new_session), + sizeof(tech_pvt->session_uuid_str)); + caller_profile = tech_pvt->caller_profile; + caller_profile->destination_number = rdest; switch_channel_set_flag(channel, CF_OUTBOUND); switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND); @@ -590,7 +590,6 @@ int res; int forever = 1; - DEBUGA_SKYPE("In skypiax_signaling_thread_func: started, p=%p\n", SKYPIAX_P_LOG, (void *) tech_pvt); @@ -639,7 +638,7 @@ switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, skypiax_module_pool); if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { ERRORA("open of %s failed\n", SKYPIAX_P_LOG, cf); - running=0; + running = 0; return SWITCH_STATUS_TERM; } @@ -820,7 +819,7 @@ memset(&newconf, '\0', sizeof(newconf)); globals.SKYPIAX_INTERFACES[interface_id] = newconf; - tech_pvt=&globals.SKYPIAX_INTERFACES[interface_id]; + tech_pvt = &globals.SKYPIAX_INTERFACES[interface_id]; switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].interface_id, id); if (name) { @@ -907,17 +906,17 @@ skypiax_skypeaudio_init(&globals.SKYPIAX_INTERFACES[interface_id]); - i=0; - while (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected == 0 && running && i < 60000) { // 60sec FIXME + i = 0; + while (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected == 0 && running && i < 60000) { // 60sec FIXME switch_sleep(1000); - i++; + i++; + } + if (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected) { + NOTICA("STARTED interface_id=%d\n", SKYPIAX_P_LOG, interface_id); + } else { + ERRORA("FAILED to start interface_id=%d\n", SKYPIAX_P_LOG, interface_id); + return SWITCH_STATUS_FALSE; } - if(globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected){ - NOTICA("STARTED interface_id=%d\n", SKYPIAX_P_LOG, interface_id); - } else { - ERRORA("FAILED to start interface_id=%d\n", SKYPIAX_P_LOG, interface_id); - return SWITCH_STATUS_FALSE; - } } else { ERRORA("interface id %d is higher than SKYPIAX_MAX_INTERFACES (%d)\n", @@ -929,7 +928,7 @@ for (i = 0; i < SKYPIAX_MAX_INTERFACES; i++) { if (strlen(globals.SKYPIAX_INTERFACES[i].name)) { - tech_pvt = &globals.SKYPIAX_INTERFACES[i]; + tech_pvt = &globals.SKYPIAX_INTERFACES[i]; DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].interface_id=%s\n", SKYPIAX_P_LOG, i, i, globals.SKYPIAX_INTERFACES[i].interface_id); @@ -963,7 +962,7 @@ running = 1; if (load_config() != SWITCH_STATUS_SUCCESS) - return SWITCH_STATUS_FALSE; + return SWITCH_STATUS_FALSE; *module_interface = switch_loadable_module_create_module_interface(pool, modname); skypiax_endpoint_interface = @@ -972,11 +971,11 @@ skypiax_endpoint_interface->io_routines = &skypiax_io_routines; skypiax_endpoint_interface->state_handler = &skypiax_state_handlers; - if(running) - /* indicate that the module should continue to be loaded */ - return SWITCH_STATUS_SUCCESS; + if (running) + /* indicate that the module should continue to be loaded */ + return SWITCH_STATUS_SUCCESS; else - return SWITCH_STATUS_FALSE; + return SWITCH_STATUS_FALSE; } SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown) @@ -1040,165 +1039,156 @@ return SWITCH_STATUS_SUCCESS; } -void *SWITCH_THREAD_FUNC skypiax_do_tcp_srv_thread(switch_thread_t * thread, - void *obj) +void *SWITCH_THREAD_FUNC skypiax_do_tcp_srv_thread(switch_thread_t * thread, void *obj) +{ + return skypiax_do_tcp_srv_thread_func(obj); +} +void *SWITCH_THREAD_FUNC skypiax_do_tcp_cli_thread(switch_thread_t * thread, void *obj) { - return skypiax_do_tcp_srv_thread_func(obj); + return skypiax_do_tcp_cli_thread_func(obj); } -void *SWITCH_THREAD_FUNC skypiax_do_tcp_cli_thread(switch_thread_t * thread, - void *obj) +void *SWITCH_THREAD_FUNC skypiax_do_skypeapi_thread(switch_thread_t * thread, void *obj) { - return skypiax_do_tcp_cli_thread_func(obj); -} -void *SWITCH_THREAD_FUNC skypiax_do_skypeapi_thread(switch_thread_t * thread, - void *obj) -{ - return skypiax_do_skypeapi_thread_func(obj); -} - -int dtmf_received(private_t *tech_pvt, char *value){ - switch_core_session_t *session = NULL; - switch_channel_t *channel = NULL; - - session = switch_core_session_locate(tech_pvt->session_uuid_str); - channel = switch_core_session_get_channel(session); - - if (channel) { - switch_dtmf_t dtmf = - { (char) value[0], switch_core_default_dtmf_duration(0) }; - DEBUGA_SKYPE("received DTMF %c on channel %s\n", SKYPIAX_P_LOG, dtmf.digit, - switch_channel_get_name(channel)); - switch_mutex_lock(tech_pvt->flag_mutex); - //FIXME: why sometimes DTMFs from here do not seems to be get by FS? - switch_channel_queue_dtmf(channel, &dtmf); - switch_set_flag(tech_pvt, TFLAG_DTMF); - switch_mutex_unlock(tech_pvt->flag_mutex); - } else { - WARNINGA("received %c DTMF, but no channel?\n", SKYPIAX_P_LOG, value[0]); - } - switch_core_session_rwunlock(session); - - return 0; -} - -int start_audio_threads(private_t *tech_pvt) { - switch_threadattr_t *thd_attr = NULL; - - switch_threadattr_create(&thd_attr, skypiax_module_pool); - switch_threadattr_detach_set(thd_attr, 1); - switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); - switch_thread_create(&tech_pvt->tcp_srv_thread, thd_attr, - skypiax_do_tcp_srv_thread, tech_pvt, - skypiax_module_pool); - DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG); - - switch_threadattr_create(&thd_attr, skypiax_module_pool); - switch_threadattr_detach_set(thd_attr, 1); - switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); - switch_thread_create(&tech_pvt->tcp_cli_thread, thd_attr, - skypiax_do_tcp_cli_thread, tech_pvt, - skypiax_module_pool); - DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG); - switch_sleep(100000); - - - return 0; -} - -int new_inbound_channel(private_t *tech_pvt) { - switch_core_session_t *session = NULL; - switch_channel_t *channel = NULL; - - if ((session = - switch_core_session_request(skypiax_endpoint_interface, - NULL)) != 0) { - switch_core_session_add_stream(session, NULL); - channel = switch_core_session_get_channel(session); - skypiax_tech_init(tech_pvt, session); - - if ((tech_pvt->caller_profile = - switch_caller_profile_new(switch_core_session_get_pool(session), - "skypiax", tech_pvt->dialplan, - tech_pvt->callid_name, - tech_pvt->callid_number, NULL, NULL, - NULL, NULL, "mod_skypiax", - tech_pvt->context, - tech_pvt->destination)) != 0) { - char name[128]; - //switch_snprintf(name, sizeof(name), "skypiax/%s/%s", tech_pvt->name, tech_pvt->caller_profile->destination_number); - switch_snprintf(name, sizeof(name), "skypiax/%s", tech_pvt->name); - switch_channel_set_name(channel, name); - switch_channel_set_caller_profile(channel, - tech_pvt->caller_profile); - } - switch_channel_set_state(channel, CS_INIT); - if (switch_core_session_thread_launch(session) != - SWITCH_STATUS_SUCCESS) { - ERRORA("Error spawning thread\n", SKYPIAX_P_LOG); - switch_core_session_destroy(&session); - } - } - switch_channel_mark_answered(channel); - - DEBUGA_SKYPE("Here\n", SKYPIAX_P_LOG); - - return 0; -} -int outbound_channel_answered(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_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); - DEBUGA_SKYPE("HERE!\n", SKYPIAX_P_LOG); - - - return 0; -} - -private_t *find_available_skypiax_interface(void) { - private_t *tech_pvt; - int found = 0; - int i; - - for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) { - if (strlen(globals.SKYPIAX_INTERFACES[i].name)) { - int skype_state = 0; - - tech_pvt = &globals.SKYPIAX_INTERFACES[i]; - skype_state = tech_pvt->interface_state; - DEBUGA_SKYPE("skype interface: %d, name: %s, state: %d\n", - SKYPIAX_P_LOG, - i, globals.SKYPIAX_INTERFACES[i].name, skype_state); - if (SKYPIAX_STATE_DOWN == skype_state || 0 == skype_state) { - found=1; - break; - } - } - } - - if(found) - return tech_pvt; - else - return NULL; + return skypiax_do_skypeapi_thread_func(obj); } + +int dtmf_received(private_t * tech_pvt, char *value) +{ + switch_core_session_t *session = NULL; + switch_channel_t *channel = NULL; + + session = switch_core_session_locate(tech_pvt->session_uuid_str); + channel = switch_core_session_get_channel(session); + + if (channel) { + switch_dtmf_t dtmf = { (char) value[0], switch_core_default_dtmf_duration(0) }; + DEBUGA_SKYPE("received DTMF %c on channel %s\n", SKYPIAX_P_LOG, dtmf.digit, + switch_channel_get_name(channel)); + switch_mutex_lock(tech_pvt->flag_mutex); + //FIXME: why sometimes DTMFs from here do not seems to be get by FS? + switch_channel_queue_dtmf(channel, &dtmf); + switch_set_flag(tech_pvt, TFLAG_DTMF); + switch_mutex_unlock(tech_pvt->flag_mutex); + } else { + WARNINGA("received %c DTMF, but no channel?\n", SKYPIAX_P_LOG, value[0]); + } + switch_core_session_rwunlock(session); + + return 0; +} + +int start_audio_threads(private_t * tech_pvt) +{ + switch_threadattr_t *thd_attr = NULL; + + switch_threadattr_create(&thd_attr, skypiax_module_pool); + switch_threadattr_detach_set(thd_attr, 1); + switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); + switch_thread_create(&tech_pvt->tcp_srv_thread, thd_attr, skypiax_do_tcp_srv_thread, + tech_pvt, skypiax_module_pool); + DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG); + + switch_threadattr_create(&thd_attr, skypiax_module_pool); + switch_threadattr_detach_set(thd_attr, 1); + switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); + switch_thread_create(&tech_pvt->tcp_cli_thread, thd_attr, skypiax_do_tcp_cli_thread, + tech_pvt, skypiax_module_pool); + DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG); + switch_sleep(100000); + + return 0; +} + +int new_inbound_channel(private_t * tech_pvt) +{ + switch_core_session_t *session = NULL; + switch_channel_t *channel = NULL; + + if ((session = switch_core_session_request(skypiax_endpoint_interface, NULL)) != 0) { + switch_core_session_add_stream(session, NULL); + channel = switch_core_session_get_channel(session); + skypiax_tech_init(tech_pvt, session); + + if ((tech_pvt->caller_profile = + switch_caller_profile_new(switch_core_session_get_pool(session), "skypiax", + tech_pvt->dialplan, tech_pvt->callid_name, + tech_pvt->callid_number, NULL, NULL, NULL, NULL, + "mod_skypiax", tech_pvt->context, + tech_pvt->destination)) != 0) { + char name[128]; + //switch_snprintf(name, sizeof(name), "skypiax/%s/%s", tech_pvt->name, tech_pvt->caller_profile->destination_number); + switch_snprintf(name, sizeof(name), "skypiax/%s", tech_pvt->name); + switch_channel_set_name(channel, name); + switch_channel_set_caller_profile(channel, tech_pvt->caller_profile); + } + switch_channel_set_state(channel, CS_INIT); + if (switch_core_session_thread_launch(session) != SWITCH_STATUS_SUCCESS) { + ERRORA("Error spawning thread\n", SKYPIAX_P_LOG); + switch_core_session_destroy(&session); + } + } + switch_channel_mark_answered(channel); + + DEBUGA_SKYPE("Here\n", SKYPIAX_P_LOG); + + return 0; +} + +int outbound_channel_answered(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_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); + DEBUGA_SKYPE("HERE!\n", SKYPIAX_P_LOG); + + return 0; +} + +private_t *find_available_skypiax_interface(void) +{ + private_t *tech_pvt; + int found = 0; + int i; + + for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) { + if (strlen(globals.SKYPIAX_INTERFACES[i].name)) { + int skype_state = 0; + + tech_pvt = &globals.SKYPIAX_INTERFACES[i]; + skype_state = tech_pvt->interface_state; + DEBUGA_SKYPE("skype interface: %d, name: %s, state: %d\n", SKYPIAX_P_LOG, i, + globals.SKYPIAX_INTERFACES[i].name, skype_state); + if (SKYPIAX_STATE_DOWN == skype_state || 0 == skype_state) { + found = 1; + break; + } + } + } + + if (found) + return tech_pvt; + else + return NULL; +} + /* For Emacs: * Local Variables: * mode:c Modified: freeswitch/branches/gmaruzz/mod_skypiax/skypiax.h ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/skypiax.h (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/skypiax.h Thu Feb 12 03:04:35 2009 @@ -208,7 +208,7 @@ #else /* WIN32 */ int audiopipe[2]; int audioskypepipe[2]; - int skypiax_sound_capt_fd; /*!< \brief file descriptor for sound capture dev */ + int skypiax_sound_capt_fd; /*!< \brief file descriptor for sound capture dev */ #endif /* WIN32 */ switch_thread_t *tcp_srv_thread; switch_thread_t *tcp_cli_thread; @@ -246,18 +246,18 @@ int skypiax_skype_call(private_t * tech_pvt, char *idest, int timeout); int skypiax_skype_senddigit(private_t * tech_pvt, char digit); -void * skypiax_do_tcp_srv_thread_func(void *obj); +void *skypiax_do_tcp_srv_thread_func(void *obj); void *SWITCH_THREAD_FUNC skypiax_do_tcp_srv_thread(switch_thread_t * thread, void *obj); -void * skypiax_do_tcp_cli_thread_func(void *obj); +void *skypiax_do_tcp_cli_thread_func(void *obj); void *SWITCH_THREAD_FUNC skypiax_do_tcp_cli_thread(switch_thread_t * thread, void *obj); -void * skypiax_do_skypeapi_thread_func(void *obj); +void *skypiax_do_skypeapi_thread_func(void *obj); void *SWITCH_THREAD_FUNC skypiax_do_skypeapi_thread(switch_thread_t * thread, void *obj); -int dtmf_received(private_t *tech_pvt, char *value); -int start_audio_threads(private_t *tech_pvt); -int new_inbound_channel(private_t *tech_pvt); -int outbound_channel_answered(private_t *tech_pvt); +int dtmf_received(private_t * tech_pvt, char *value); +int start_audio_threads(private_t * tech_pvt); +int new_inbound_channel(private_t * tech_pvt); +int outbound_channel_answered(private_t * tech_pvt); int skypiax_skype_write(private_t * tech_pvt, char *msg_to_skype); #if defined(WIN32) && !defined(__CYGWIN__) int skypiax_pipe_read(switch_file_t * pipe, short *buf, int howmany); Modified: freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c Thu Feb 12 03:04:35 2009 @@ -61,8 +61,9 @@ return 0; } if (!strncasecmp(message, "ERROR 92 CALL", 12)) { - ERRORA("Skype got ERROR: |||%s|||, the (skypeout) number we called was not recognized as valid\n", - SKYPIAX_P_LOG, message); + ERRORA + ("Skype got ERROR: |||%s|||, the (skypeout) number we called was not recognized as valid\n", + SKYPIAX_P_LOG, message); tech_pvt->skype_callflow = CALLFLOW_STATUS_FINISHED; DEBUGA_SKYPE("skype_call now is DOWN\n", SKYPIAX_P_LOG); tech_pvt->skype_call_id[0] = '\0'; @@ -141,7 +142,7 @@ char msg_to_skype[256]; DEBUGA_SKYPE("Skype MSG: message: %s, obj: %s, id: %s, prop: %s!\n", SKYPIAX_P_LOG, message, obj, id, prop); - //TODO: authomatically flag messages as read based on config param + //TODO: authomatically flag messages as read based on config param sprintf(msg_to_skype, "SET MESSAGE %s SEEN", id); skypiax_skype_write(tech_pvt, msg_to_skype); } @@ -207,7 +208,7 @@ char msg_to_skype[1024]; if (tech_pvt->interface_state != SKYPIAX_STATE_DIALING) { /* we are not calling out */ - if (!strlen(tech_pvt->skype_call_id)) { + if (!strlen(tech_pvt->skype_call_id)) { /* we are not inside an active call */ tech_pvt->skype_callflow = CALLFLOW_STATUS_RINGING; tech_pvt->interface_state = SKYPIAX_STATE_RING; @@ -229,24 +230,30 @@ strncpy(tech_pvt->skype_call_id, id, sizeof(tech_pvt->skype_call_id) - 1); } else { /* we're owned, we're in a call, let's try to transfer */ - /************************** TODO + /************************** TODO Checking here if it is possible to transfer this call to Test2 -> GET CALL 288 CAN_TRANSFER Test2 <- CALL 288 CAN_TRANSFER test2 TRUE **********************************/ - private_t *available_skypiax_interface; + private_t *available_skypiax_interface; - available_skypiax_interface = find_available_skypiax_interface(); - if(available_skypiax_interface){ - /* there is a skypiax interface idle, let's transfer the call to it */ - DEBUGA_SKYPE ("Let's transfer the skype_call %s to %s interface, because we are already in a skypiax call(%s)\n", SKYPIAX_P_LOG, tech_pvt->skype_call_id, available_skypiax_interface->name, id); - sprintf(msg_to_skype, "ALTER CALL %s TRANSFER %s", id, available_skypiax_interface->name); - } else{ - /* no skypiax interfaces idle, let's refuse the call */ - DEBUGA_SKYPE ("Let's refuse the skype_call %s, because we are already in a skypiax call(%s) and no other skypiax interfaces are available\n", SKYPIAX_P_LOG, tech_pvt->skype_call_id, id); - sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", id); - } + available_skypiax_interface = find_available_skypiax_interface(); + if (available_skypiax_interface) { + /* there is a skypiax interface idle, let's transfer the call to it */ + DEBUGA_SKYPE + ("Let's transfer the skype_call %s to %s interface, because we are already in a skypiax call(%s)\n", + SKYPIAX_P_LOG, tech_pvt->skype_call_id, + available_skypiax_interface->name, id); + sprintf(msg_to_skype, "ALTER CALL %s TRANSFER %s", id, + available_skypiax_interface->name); + } else { + /* no skypiax interfaces idle, let's refuse the call */ + DEBUGA_SKYPE + ("Let's refuse the skype_call %s, because we are already in a skypiax call(%s) and no other skypiax interfaces are available\n", + SKYPIAX_P_LOG, tech_pvt->skype_call_id, id); + sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", id); + } skypiax_skype_write(tech_pvt, msg_to_skype); skypiax_sleep(10000); DEBUGA_SKYPE @@ -268,22 +275,23 @@ SKYPIAX_P_LOG, id); } else if (!strcasecmp(value, "MISSED")) { DEBUGA_SKYPE("We missed skype_call %s\n", SKYPIAX_P_LOG, id); - } else if (!strcasecmp(value, "FINISHED")) { - DEBUGA_SKYPE("skype_call %s now is DOWN\n", SKYPIAX_P_LOG, id); - if(!strcasecmp(tech_pvt->skype_call_id, id)){ - DEBUGA_SKYPE("skype_call %s is MY call, now I'm going DOWN\n", SKYPIAX_P_LOG, id); - tech_pvt->skype_call_id[0] = '\0'; - if (tech_pvt->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) { - //tech_pvt->interface_state = SKYPIAX_STATE_DOWN; - return CALLFLOW_INCOMING_HANGUP; - } else { - tech_pvt->interface_state = SKYPIAX_STATE_DOWN; - } - }else { - DEBUGA_SKYPE("skype_call %s is NOT MY call, ignoring\n", SKYPIAX_P_LOG, id); - } + } else if (!strcasecmp(value, "FINISHED")) { + DEBUGA_SKYPE("skype_call %s now is DOWN\n", SKYPIAX_P_LOG, id); + if (!strcasecmp(tech_pvt->skype_call_id, id)) { + DEBUGA_SKYPE("skype_call %s is MY call, now I'm going DOWN\n", + SKYPIAX_P_LOG, id); + tech_pvt->skype_call_id[0] = '\0'; + if (tech_pvt->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) { + //tech_pvt->interface_state = SKYPIAX_STATE_DOWN; + return CALLFLOW_INCOMING_HANGUP; + } else { + tech_pvt->interface_state = SKYPIAX_STATE_DOWN; + } + } else { + DEBUGA_SKYPE("skype_call %s is NOT MY call, ignoring\n", SKYPIAX_P_LOG, id); + } - } else if (!strcasecmp(value, "CANCELLED")) { + } else if (!strcasecmp(value, "CANCELLED")) { tech_pvt->skype_callflow = CALLFLOW_STATUS_CANCELLED; DEBUGA_SKYPE ("we tried to call Skype on skype_call %s and Skype has now CANCELLED\n", @@ -329,33 +337,35 @@ tech_pvt->interface_state = SKYPIAX_STATE_DIALING; strncpy(tech_pvt->skype_call_id, id, sizeof(tech_pvt->skype_call_id) - 1); DEBUGA_SKYPE("skype_call: %s is now UNPLACED\n", SKYPIAX_P_LOG, id); - } else if (!strcasecmp(value, "INPROGRESS")) { - char msg_to_skype[1024]; + } else if (!strcasecmp(value, "INPROGRESS")) { + char msg_to_skype[1024]; - if(!strlen(tech_pvt->session_uuid_str) || !strlen(tech_pvt->skype_call_id) || !strcasecmp(tech_pvt->skype_call_id, id)){ - tech_pvt->skype_callflow = CALLFLOW_STATUS_INPROGRESS; - strncpy(tech_pvt->skype_call_id, id, sizeof(tech_pvt->skype_call_id) - 1); - tech_pvt->interface_state = SKYPIAX_STATE_UP; - DEBUGA_SKYPE("skype_call: %s is now active\n", SKYPIAX_P_LOG, id); - sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"%d\"", id, - tech_pvt->tcp_cli_port); - skypiax_skype_write(tech_pvt, msg_to_skype); - start_audio_threads(tech_pvt); - sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id, - tech_pvt->tcp_srv_port); - skypiax_skype_write(tech_pvt, msg_to_skype); - tech_pvt->skype_callflow = SKYPIAX_STATE_UP; - if (!strlen(tech_pvt->session_uuid_str)) { - DEBUGA_SKYPE("New Inbound Channel!\n", SKYPIAX_P_LOG); - new_inbound_channel(tech_pvt); - } else { - DEBUGA_SKYPE("Outbound Channel Answered!\n", SKYPIAX_P_LOG); - outbound_channel_answered(tech_pvt); - } - }else { - DEBUGA_SKYPE("I'm on %s, skype_call %s is NOT MY call, ignoring\n", SKYPIAX_P_LOG, tech_pvt->skype_call_id, id); - } - } else { + if (!strlen(tech_pvt->session_uuid_str) || !strlen(tech_pvt->skype_call_id) + || !strcasecmp(tech_pvt->skype_call_id, id)) { + tech_pvt->skype_callflow = CALLFLOW_STATUS_INPROGRESS; + strncpy(tech_pvt->skype_call_id, id, sizeof(tech_pvt->skype_call_id) - 1); + tech_pvt->interface_state = SKYPIAX_STATE_UP; + DEBUGA_SKYPE("skype_call: %s is now active\n", SKYPIAX_P_LOG, id); + sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"%d\"", id, + tech_pvt->tcp_cli_port); + skypiax_skype_write(tech_pvt, msg_to_skype); + start_audio_threads(tech_pvt); + sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id, + tech_pvt->tcp_srv_port); + skypiax_skype_write(tech_pvt, msg_to_skype); + tech_pvt->skype_callflow = SKYPIAX_STATE_UP; + if (!strlen(tech_pvt->session_uuid_str)) { + DEBUGA_SKYPE("New Inbound Channel!\n", SKYPIAX_P_LOG); + new_inbound_channel(tech_pvt); + } else { + DEBUGA_SKYPE("Outbound Channel Answered!\n", SKYPIAX_P_LOG); + outbound_channel_answered(tech_pvt); + } + } else { + DEBUGA_SKYPE("I'm on %s, skype_call %s is NOT MY call, ignoring\n", + SKYPIAX_P_LOG, tech_pvt->skype_call_id, id); + } + } else { WARNINGA("skype_call: %s, STATUS: %s is not recognized\n", SKYPIAX_P_LOG, id, value); } @@ -495,7 +505,7 @@ SAMPLES_PER_FRAME * sizeof(short)); if (howmany != SAMPLES_PER_FRAME * sizeof(short)) { ERRORA("howmany is %d, but was expected to be %d\n", SKYPIAX_P_LOG, howmany, - (int)(SAMPLES_PER_FRAME * sizeof(short))); + (int) (SAMPLES_PER_FRAME * sizeof(short))); } /* done with the stored half frame */ tech_pvt->audiobuf_is_loaded = 0; @@ -593,7 +603,7 @@ if (!running) break; FD_ZERO(&fs); - to.tv_usec = 60000; //60msec + to.tv_usec = 60000; //60msec to.tv_sec = 0; #if defined(WIN32) && !defined(__CYGWIN__) /* on win32 we cannot select from the apr "pipe", so we select on socket writability */ @@ -609,7 +619,6 @@ rt = select(fdselect + 1, &fs, NULL, NULL, &to); #endif - if (rt > 0) { /* read from the pipe the audio frame we are supposed to send out */ got = @@ -617,7 +626,7 @@ SAMPLES_PER_FRAME * sizeof(short)); if (got != SAMPLES_PER_FRAME * sizeof(short)) { WARNINGA("got is %d, but was expected to be %d\n", SKYPIAX_P_LOG, got, - (int)(SAMPLES_PER_FRAME * sizeof(short))); + (int) (SAMPLES_PER_FRAME * sizeof(short))); } if (got == SAMPLES_PER_FRAME * sizeof(short)) { @@ -641,9 +650,9 @@ ERRORA("SAMPLERATE_SKYPIAX can only be 8000 or 16000\n", SKYPIAX_P_LOG); } - /* send the 16khz frame to the Skype client waiting for incoming audio to be sent to the remote party*/ + /* send the 16khz frame to the Skype client waiting for incoming audio to be sent to the remote party */ len = send(fd, (char *) cli_out, got, 0); - skypiax_sleep(5000); //5 msec + skypiax_sleep(5000); //5 msec if (len == -1) { break; @@ -656,15 +665,15 @@ } else { WARNINGA("got is %d, but was expected to be %d\n", SKYPIAX_P_LOG, got, - (int)(SAMPLES_PER_FRAME * sizeof(short))); + (int) (SAMPLES_PER_FRAME * sizeof(short))); } } else { if (rt) ERRORA("CLI rt=%d\n", SKYPIAX_P_LOG, rt); - memset(cli_out, 0, sizeof(cli_out)); - len = send(fd, (char *) cli_out, sizeof(cli_out), 0); - len = send(fd, (char *) cli_out, sizeof(cli_out)/2, 0); - //DEBUGA_SKYPE("sent %d of zeros to keep the Skype client socket busy\n", SKYPIAX_P_LOG, sizeof(cli_out) + sizeof(cli_out)/2); + memset(cli_out, 0, sizeof(cli_out)); + len = send(fd, (char *) cli_out, sizeof(cli_out), 0); + len = send(fd, (char *) cli_out, sizeof(cli_out) / 2, 0); + //DEBUGA_SKYPE("sent %d of zeros to keep the Skype client socket busy\n", SKYPIAX_P_LOG, sizeof(cli_out) + sizeof(cli_out)/2); } } @@ -689,7 +698,7 @@ if (samples != SAMPLES_PER_FRAME * sizeof(short)) { if (samples) WARNINGA("read samples=%u expected=%u\n", SKYPIAX_P_LOG, samples, - (int)(SAMPLES_PER_FRAME * sizeof(short))); + (int) (SAMPLES_PER_FRAME * sizeof(short))); return 0; } else { /* A real frame */
participants (1)
-
FreeSWITCH SVN