[Freeswitch-branches] [commit] r11578 - freeswitch/branches/gmaruzz/mod_skypiax/asterisk
Author: gmaruzz Date: Sat Jan 31 10:07:53 2009 New Revision: 11578 Log: skypiax: has answered first call on asterisk, DTMF incoming works (eg. IVR), outbound audio works, incoming audio not yet Modified: freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax.h freeswitch/branches/gmaruzz/mod_skypiax/asterisk/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 Sat Jan 31 10:07:53 2009 @@ -107,7 +107,7 @@ /*! \brief Default skypiax_pvt structure values, * used by skypiax_mkif to initialize the interfaces */ struct skypiax_pvt skypiax_default = { - .interface_state = AST_STATE_DOWN, + .interface_state = SKYPIAX_STATE_DOWN, .skype_callflow = 0, .context = "default", .language = "en", @@ -341,7 +341,7 @@ DEBUGA_PBX("Requesting: %s, name: %s, format: %d\n", SKYPIAX_P_LOG, type, name, format); /* create a new channel owning this interface */ - tmp = skypiax_new(p, AST_STATE_DOWN, p->context); + tmp = skypiax_new(p, SKYPIAX_STATE_DOWN, p->context); if (!tmp) { /* the channel was not created, probable memory allocation error */ *cause = AST_CAUSE_SWITCH_CONGESTION; @@ -398,16 +398,16 @@ if (option_debug > 10) { DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG); } - if (p->skype && p->interface_state != AST_STATE_DOWN) { + if (p->skype && p->interface_state != SKYPIAX_STATE_DOWN) { char msg_to_skype[1024]; - p->interface_state = AST_STATE_HANGUP_REQUESTED; + p->interface_state = SKYPIAX_STATE_HANGUP_REQUESTED; DEBUGA_SKYPE("hanging up skype call: %s\n", SKYPIAX_P_LOG, p->skype_call_id); //sprintf(msg_to_skype, "SET CALL %s STATUS FINISHED", p->skype_call_id); sprintf(msg_to_skype, "ALTER CALL %s HANGUP", p->skype_call_id); skypiax_skype_write(p, msg_to_skype); } - while (p->interface_state != AST_STATE_DOWN) { + while (p->interface_state != SKYPIAX_STATE_DOWN) { usleep(10000); } DEBUGA_SKYPE("Now is really DOWN\n", SKYPIAX_P_LOG); @@ -434,7 +434,7 @@ } p->controldev_thread = AST_PTHREADT_NULL; - p->interface_state = AST_STATE_DOWN; + p->interface_state = SKYPIAX_STATE_DOWN; p->skype_callflow = CALLFLOW_CALL_IDLE; DEBUGA_PBX("I'll send AST_CONTROL_HANGUP\n", SKYPIAX_P_LOG); @@ -454,7 +454,7 @@ /* our channel has no more this skypiax pvt interface to manage */ c->tech_pvt = NULL; /* set the channel state to DOWN, eg. available, not in active use */ - if (ast_setstate(c, AST_STATE_DOWN)) { + if (ast_setstate(c, SKYPIAX_STATE_DOWN)) { ERRORA("ast_setstate failed, BAD\n", SKYPIAX_P_LOG); if (option_debug > 10) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG); @@ -490,11 +490,11 @@ DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG); } /* whle ringing, we just wait, the skype thread will answer */ - while (p->interface_state == AST_STATE_RING) { + while (p->interface_state == SKYPIAX_STATE_RING) { usleep(10000); //10msec } - if (p->interface_state != AST_STATE_UP) { - ERRORA("call answering failed\n", SKYPIAX_P_LOG); + 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); res = -1; } else { if (option_debug) @@ -603,7 +603,7 @@ f.delivery.tv_usec = 0; /* if the call is not active (ie: answered), do not send audio frames, they would pile up in a lag queue */ - if (p->owner && p->owner->_state != AST_STATE_UP) { + if (p->owner && p->owner->_state != SKYPIAX_STATE_UP) { if (option_debug > 100) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG); } @@ -652,8 +652,8 @@ if (option_debug > 10) { DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG); } - if ((c->_state != AST_STATE_DOWN) - && (c->_state != AST_STATE_RESERVED)) { + if ((c->_state != SKYPIAX_STATE_DOWN) + && (c->_state != SKYPIAX_STATE_RESERVED)) { ERRORA("skypiax_call called on %s, neither down nor reserved\n", SKYPIAX_P_LOG, c->name); if (option_debug > 10) { @@ -697,7 +697,7 @@ DEBUGA_PBX("skypiax_call dialed idest: %s, timeout: %d, dstr: %s!\n", SKYPIAX_P_LOG, idest, timeout, dstr); - ast_setstate(p->owner, AST_STATE_DIALING); + ast_setstate(p->owner, SKYPIAX_STATE_DIALING); if (option_debug > 10) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG); } @@ -732,7 +732,7 @@ if (option_debug > 100) { DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG); } - if (p->owner && p->owner->_state != AST_STATE_UP) { + if (p->owner && p->owner->_state != SKYPIAX_STATE_UP) { if (option_debug > 100) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG); } @@ -862,7 +862,7 @@ return NULL; } /* if the requested state is different from DOWN, let the pbx manage this interface (now part of the newly created channel) */ - if (state != AST_STATE_DOWN) { + if (state != SKYPIAX_STATE_DOWN) { DEBUGA_PBX("Try to start PBX on %s, state=%d\n", SKYPIAX_P_LOG, tmp->name, state); if (ast_pbx_start(tmp)) { ERRORA("Unable to start PBX on %s\n", SKYPIAX_P_LOG, tmp->name); @@ -1422,7 +1422,7 @@ free(tmp); return NULL; } - res = pipe(tmp->AsteriskHandlesAst.fdesc); + res = pipe(tmp->SkypiaxHandles.fdesc); if (res) { ast_log(LOG_ERROR, "Unable to create skype pipe\n"); if (option_debug > 10) { @@ -1431,9 +1431,10 @@ free(tmp); return NULL; } - fcntl(tmp->AsteriskHandlesAst.fdesc[0], F_SETFL, O_NONBLOCK); - fcntl(tmp->AsteriskHandlesAst.fdesc[1], F_SETFL, O_NONBLOCK); + 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) { if (option_debug > 1) ast_log(LOG_DEBUG, "TO BE started skype_thread=%lu STOP=%lu NULL=%lu\n", @@ -1441,7 +1442,7 @@ (unsigned long) AST_PTHREADT_NULL); #ifdef __CYGWIN__ if (ast_pthread_create - (&tmp->skype_thread, NULL, do_skypeapi_thread, &tmp->AsteriskHandlesAst) < 0) { + (&tmp->skype_thread, NULL, do_skypeapi_thread, &tmp->SkypiaxHandles) < 0) { ast_log(LOG_ERROR, "Unable to start skype_main thread.\n"); if (option_debug > 10) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_TMP_LOG); @@ -1452,7 +1453,7 @@ #else /* __CYGWIN__ */ #ifdef WANT_SKYPE_X11 if (option_debug > 1) - ast_log(LOG_DEBUG, "AsteriskHandlesfd: %d\n", tmp->AsteriskHandlesAst.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"); if (option_debug > 10) { @@ -1478,6 +1479,57 @@ (unsigned long) AST_PTHREADT_NULL); } + +#if 0 + if (tmp->skype) { +#if 0 + if (option_debug > 1) + 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); +#endif +#ifdef __CYGWIN__ + if (ast_pthread_create + (&tmp->skype_thread, NULL, do_skypeapi_thread, &tmp->SkypiaxHandles) < 0) { + ast_log(LOG_ERROR, "Unable to start skype_main thread.\n"); + if (option_debug > 10) { + DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_TMP_LOG); + } + free(tmp); + return NULL; + } +#else /* __CYGWIN__ */ +#ifdef WANT_SKYPE_X11 + 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); + } + free(tmp); + return NULL; + } +#endif /* WANT_SKYPE_X11 */ +#endif /* __CYGWIN__ */ + 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); + } + free(tmp); + return NULL; + } + if (option_debug > 1) + ast_log(LOG_DEBUG, "STARTED signaling_thread=%lu STOP=%lu NULL=%lu\n", + (unsigned long) tmp->signaling_thread, (unsigned long) AST_PTHREADT_STOP, + (unsigned long) AST_PTHREADT_NULL); + } + +#endif + + + + /* return the newly created skypiax_pvt */ if (option_debug > 10) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_TMP_LOG); @@ -1577,14 +1629,14 @@ /* This interface needs to be watched, as it lacks an owner */ if (p->skype) { - if (FD_ISSET(p->AsteriskHandlesAst.fdesc[0], &rfds)) - ERRORA("Descriptor %d (AsteriskHandlesAst.fdesc[0]) appears twice ?\n", - SKYPIAX_P_LOG, p->AsteriskHandlesAst.fdesc[0]); - - if (p->AsteriskHandlesAst.fdesc[0] > 0) { - FD_SET(p->AsteriskHandlesAst.fdesc[0], &rfds); - if (p->AsteriskHandlesAst.fdesc[0] > max) - max = p->AsteriskHandlesAst.fdesc[0]; + if (FD_ISSET(p->SkypiaxHandles.fdesc[0], &rfds)) + ERRORA("Descriptor %d (SkypiaxHandles.fdesc[0]) appears twice ?\n", + SKYPIAX_P_LOG, p->SkypiaxHandles.fdesc[0]); + + if (p->SkypiaxHandles.fdesc[0] > 0) { + FD_SET(p->SkypiaxHandles.fdesc[0], &rfds); + if (p->SkypiaxHandles.fdesc[0] > max) + max = p->SkypiaxHandles.fdesc[0]; } } @@ -1639,12 +1691,12 @@ for (; p; p = p->next) { if (p->skype) { - if (FD_ISSET(p->AsteriskHandlesAst.fdesc[0], &rfds)) { + if (FD_ISSET(p->SkypiaxHandles.fdesc[0], &rfds)) { res = skypiax_skype_read(p); if (res == CALLFLOW_INCOMING_CALLID || res == CALLFLOW_INCOMING_RING) { //ast_log(LOG_NOTICE, "CALLFLOW_INCOMING_RING SKYPE\n"); DEBUGA_SKYPE("CALLFLOW_INCOMING_RING\n", SKYPIAX_P_LOG); - skypiax_new(p, AST_STATE_RING, p->context /* p->context */ ); + skypiax_new(p, SKYPIAX_STATE_RING, p->context /* p->context */ ); } } } @@ -2051,7 +2103,33 @@ return 0; } -int start_audio_threads(private_t *tech_pvt) { +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); + if (option_debug > 100) { + DEBUGA_PBX("EXITING FUNC\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); + if (option_debug > 100) { + DEBUGA_PBX("EXITING FUNC\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; @@ -2077,7 +2155,8 @@ return 0; } -int new_inbound_channel(private_t *tech_pvt) { +int new_inbound_channel(private_t *p) { + #ifdef NOTDEF switch_core_session_t *session = NULL; switch_channel_t *channel = NULL; @@ -2113,12 +2192,12 @@ } switch_channel_mark_answered(channel); - DEBUGA_SKYPE("Here\n", SKYPIAX_P_LOG); #endif + NOTICA("Here\n", SKYPIAX_P_LOG); return 0; } -int outbound_channel_answered(private_t *tech_pvt) { +int outbound_channel_answered(private_t *p) { #ifdef NOTDEF switch_core_session_t *session = NULL; switch_channel_t *channel = NULL; @@ -2142,12 +2221,20 @@ } switch_core_session_rwunlock(session); - DEBUGA_SKYPE("HERE!\n", SKYPIAX_P_LOG); #endif + NOTICA("HERE!\n", SKYPIAX_P_LOG); return 0; } +void * skypiax_do_tcp_srv_thread(void *obj) +{ + return skypiax_do_tcp_srv_thread_func(obj); +} +void * skypiax_do_tcp_cli_thread(void *obj) +{ + return skypiax_do_tcp_cli_thread_func(obj); +} /************************************************/ #ifdef ASTERISK_VERSION_1_4 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 Sat Jan 31 10:07:53 2009 @@ -297,6 +297,7 @@ char skype_password[256]; char destination[256]; char session_uuid_str[512 + 1]; + pthread_t signaling_thread; }; typedef struct skypiax_pvt private_t; @@ -401,12 +402,13 @@ 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); -#define SKYPIAX_STATE_DOWN 1 -#define SKYPIAX_STATE_RING 2 -#define SKYPIAX_STATE_DIALING 3 -#define SKYPIAX_STATE_BUSY 4 -#define SKYPIAX_STATE_UP 5 -#define SKYPIAX_STATE_RINGING 6 -#define SKYPIAX_STATE_PRERING 7 +#define SKYPIAX_STATE_DOWN AST_STATE_DOWN +#define SKYPIAX_STATE_RING AST_STATE_RING +#define SKYPIAX_STATE_DIALING AST_STATE_DIALING +#define SKYPIAX_STATE_BUSY AST_STATE_BUSY +#define SKYPIAX_STATE_UP AST_STATE_UP +#define SKYPIAX_STATE_RINGING AST_STATE_RINGING +#define SKYPIAX_STATE_PRERING AST_STATE_PRERING +#define SKYPIAX_STATE_RESERVED AST_STATE_RESERVED #define SKYPIAX_STATE_HANGUP_REQUESTED 200 #endif /* _SKYPIAX_H_ */ Modified: freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax_protocol.c ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax_protocol.c (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/asterisk/skypiax_protocol.c Sat Jan 31 10:07:53 2009 @@ -126,8 +126,8 @@ if ((SAMPLERATE_SKYPIAX - 8000) == 0) { - ERRORA("tech_pvt->audiopipe[0] = %d\n", SKYPIAX_P_LOG, tech_pvt->audiopipe[0]); - ERRORA("tech_pvt->audiopipe[1] = %d\n", SKYPIAX_P_LOG, tech_pvt->audiopipe[1]); + //ERRORA("tech_pvt->audiopipe[0] = %d\n", SKYPIAX_P_LOG, tech_pvt->audiopipe[0]); + //ERRORA("tech_pvt->audiopipe[1] = %d\n", SKYPIAX_P_LOG, tech_pvt->audiopipe[1]); if (len > 0) { a = 0; for (i = 0; i < len / sizeof(short); i++) { @@ -933,6 +933,15 @@ DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG); + if(!strlen(tech_pvt->X11_display)) + strcpy(tech_pvt->X11_display, getenv("DISPLAY")); + + if(!tech_pvt->tcp_srv_port) + tech_pvt->tcp_srv_port = 10160; + + if(!tech_pvt->tcp_cli_port) + tech_pvt->tcp_cli_port = 10161; + if (pipe(tech_pvt->SkypiaxHandles.fdesc)) { fcntl(tech_pvt->SkypiaxHandles.fdesc[0], F_SETFL, O_NONBLOCK); fcntl(tech_pvt->SkypiaxHandles.fdesc[1], F_SETFL, O_NONBLOCK); @@ -1019,6 +1028,7 @@ howmany = strlen(b) + 1; howmany = write(SkypiaxHandles->fdesc[1], b, howmany); + //DEBUGA_PBX("HERE: %s\n", SKYPIAX_P_LOG, b); memset(buffer, '\0', 17000); }
participants (1)
-
FreeSWITCH SVN