[Freeswitch-branches] [commit] r10312 - freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax
Author: gmaruzz Date: Mon Nov 10 07:43:38 2008 New Revision: 10312 Log: skypiax: answers an incoming call, goes to the dialplan extension, but do not read or write audio frames Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c Mon Nov 10 07:43:38 2008 @@ -125,21 +125,6 @@ switch_mutex_t *mutex; } globals; -struct private_object { - unsigned int flags; - switch_codec_t read_codec; - switch_codec_t write_codec; - switch_frame_t read_frame; - unsigned char databuf[SWITCH_RECOMMENDED_BUFFER_SIZE]; - switch_core_session_t *session; - switch_caller_profile_t *caller_profile; - switch_mutex_t *mutex; - switch_mutex_t *flag_mutex; - //switch_thread_cond_t *cond; -}; - -typedef struct private_object private_t; - struct skypiax_config { char span_id[80]; char name[80]; @@ -195,6 +180,23 @@ static skypiax_config_t SKYPIAX_CONFIGS[SKYPIAX_MAX_INTERFACES]; +struct private_object { + unsigned int flags; + switch_codec_t read_codec; + switch_codec_t write_codec; + switch_frame_t read_frame; + unsigned char databuf[SWITCH_RECOMMENDED_BUFFER_SIZE]; + switch_core_session_t *session; + switch_caller_profile_t *caller_profile; + switch_mutex_t *mutex; + switch_mutex_t *flag_mutex; + skypiax_config_t *p; + //switch_thread_cond_t *cond; +}; + +typedef struct private_object private_t; + + SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_dialplan, globals.dialplan); @@ -270,7 +272,7 @@ DEBUGA_SKYPE("ACCEPTED\n", SKYPIAX_P_LOG); while (1) { len = recv(fd, in, sizeof(short) * GG, 0); - DEBUGA_SKYPE("recv %d\n", SKYPIAX_P_LOG, len); + //DEBUGA_SKYPE("recv %d\n", SKYPIAX_P_LOG, len); if (len > 0) { a = 0; for (i = 0; i < len / sizeof(short); i++) { @@ -362,7 +364,7 @@ while (1) { got = read(p->audioskypepipe[0], in, (NN / 2) * sizeof(short)); - ERRORA("got %d\n", SKYPIAX_P_LOG, got); + //ERRORA("got %d\n", SKYPIAX_P_LOG, got); if (got > 0) { a = 0; @@ -504,9 +506,9 @@ #endif //NOTDEF #endif /* SKYPE_AUDIO */ -static void tech_init(private_t *tech_pvt, switch_core_session_t *session) +static void tech_init(private_t *tech_pvt, switch_core_session_t *session, skypiax_config_t *p) { - struct skypiax_config *p = NULL; + //struct skypiax_config *p = NULL; DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG); tech_pvt->read_frame.data = tech_pvt->databuf; @@ -515,6 +517,8 @@ switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session)); switch_core_session_set_private(session, tech_pvt); tech_pvt->session = session; + if(p) + tech_pvt->p=p; DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG); } @@ -575,7 +579,7 @@ tech_pvt = switch_core_session_get_private(session); assert(tech_pvt != NULL); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL EXECUTE\n", switch_channel_get_name(channel)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s CHANNEL EXECUTE\n", switch_channel_get_name(channel)); return SWITCH_STATUS_SUCCESS; @@ -727,7 +731,8 @@ switch_channel_t *channel = NULL; private_t *tech_pvt = NULL; //switch_frame_t *pframe; - //FIXME int sent; + int sent; + struct skypiax_config *p=NULL; channel = switch_core_session_get_channel(session); assert(channel != NULL); @@ -735,7 +740,11 @@ tech_pvt = switch_core_session_get_private(session); assert(tech_pvt != NULL); + p=tech_pvt->p; + assert(p != NULL); + if (!switch_test_flag(tech_pvt, TFLAG_IO)) { + ERRORA("CIAPA \n", SKYPIAX_P_LOG); return SWITCH_STATUS_FALSE; } #ifdef BIGENDIAN @@ -744,8 +753,8 @@ } #endif - //FIXME sent = write(p->audioskypepipe[1], (short *) frame->data, frame->datalen); - //FIXME ERRORA("sent %d\n", SKYPIAX_P_LOG, sent); + sent = write(p->audioskypepipe[1], (short *) frame->data, frame->datalen); + ERRORA("sent %d\n", SKYPIAX_P_LOG, sent); return SWITCH_STATUS_SUCCESS; @@ -756,6 +765,7 @@ { private_t *tech_pvt; switch_channel_t *channel = NULL; + struct skypiax_config *p; channel = switch_core_session_get_channel(session); assert(channel != NULL); @@ -763,6 +773,9 @@ tech_pvt = switch_core_session_get_private(session); assert(tech_pvt != NULL); + p=tech_pvt->p; + + ERRORA("ANSWERED! \n", SKYPIAX_P_LOG); return SWITCH_STATUS_SUCCESS; } @@ -772,6 +785,7 @@ { switch_channel_t *channel; private_t *tech_pvt; + struct skypiax_config *p; channel = switch_core_session_get_channel(session); assert(channel != NULL); @@ -779,9 +793,12 @@ tech_pvt = (private_t *) switch_core_session_get_private(session); assert(tech_pvt != NULL); + p=tech_pvt->p; + switch (msg->message_id) { case SWITCH_MESSAGE_INDICATE_ANSWER: { + ERRORA("TO BE ANSWERED! \n", SKYPIAX_P_LOG); channel_answer_channel(session); } break; @@ -807,7 +824,7 @@ switch_core_session_add_stream(*new_session, NULL); if ((tech_pvt = (private_t *) switch_core_session_alloc(*new_session, sizeof(private_t))) != 0) { channel = switch_core_session_get_channel(*new_session); - tech_init(tech_pvt, *new_session); + tech_init(tech_pvt, *new_session, NULL); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Hey where is my memory pool?\n"); switch_core_session_destroy(new_session); @@ -1266,7 +1283,7 @@ if (read_from_pipe[i] == '\0') { - if (option_debug > 1) + if (option_debug > 101) DEBUGA_SKYPE("read_skype: howmany=%d, i=%d, a=%d, |||%s||| \n", SKYPIAX_P_LOG, howmany, i, a, messaggio); @@ -1371,7 +1388,7 @@ where = strsep(stringp, " "); - if (option_debug > 1) + if (option_debug > 101) DEBUGA_SKYPE ("Skype MSG: messaggio: %s, obj: %s, id: %s, prop: %s, value: %s,where: %s!\n", SKYPIAX_P_LOG, messaggio, obj, id, prop, value, where ? where : "NULL"); @@ -1622,40 +1639,59 @@ //FIXME *new_session=switch_loadable_module_create_interface(skypiax_endpoint_interface, pool); -#ifdef NOTDEF +#ifndef NOTDEF if (1) { - switch_core_session_t *session; + switch_core_session_t *session = NULL; + private_t *tech_pvt = NULL; + switch_channel_t *channel = NULL; + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "New Inbound Channel!\n"); - if ((session = switch_core_session_request(iax_endpoint_interface, NULL)) != 0) { + if ((session = switch_core_session_request(skypiax_endpoint_interface, NULL)) != 0) { switch_core_session_add_stream(session, NULL); if ((tech_pvt = (private_t *) switch_core_session_alloc(session, sizeof(private_t))) != 0) { channel = switch_core_session_get_channel(session); - tech_init(tech_pvt, session); + tech_init(tech_pvt, session, p); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Hey where is my memory pool?\n"); switch_core_session_destroy(&session); break; } + // if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), NULL, dialplan, cid_name, cid_num, ip, NULL, NULL, NULL, modname, NULL, dest)) != 0) + +#if 1 if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), - iaxevent->ies.username, - globals.dialplan, - iaxevent->ies.calling_name, - iaxevent->ies.calling_number, - iax_get_peer_ip(iaxevent->session), - iaxevent->ies.calling_ani, + "SKYPIAX", + "XML", + "calling_name", + "calling_number", NULL, + "calling_ani", NULL, - modname, - iaxevent->ies.called_context, iaxevent->ies.called_number)) != 0) { + NULL, + (char *) modname, + "default", + "5000")) != 0) { char name[128]; - switch_snprintf(name, sizeof(name), "IAX/%s-%04x", tech_pvt->caller_profile->destination_number, rand() & 0xffff); + switch_snprintf(name, sizeof(name), "Skypiax/%s-%04x", tech_pvt->caller_profile->destination_number, rand() & 0xffff); switch_channel_set_name(channel, name); switch_channel_set_caller_profile(channel, tech_pvt->caller_profile); } + WARNINGA("skype_call: HERE\n", SKYPIAX_P_LOG); + switch_channel_set_state(channel, CS_INIT); + WARNINGA("skype_call: HERE\n", SKYPIAX_P_LOG); + if (switch_core_session_thread_launch(session) != SWITCH_STATUS_SUCCESS) { + WARNINGA("skype_call: HERE\n", SKYPIAX_P_LOG); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error spawning thread\n"); + switch_core_session_destroy(&session); + } + WARNINGA("skype_call: HERE\n", SKYPIAX_P_LOG); +#endif //0 +#if 0 if (iax_set_codec(tech_pvt, iaxevent->session, &iaxevent->ies.format, &iaxevent->ies.capability, &iaxevent->ies.samprate, IAX_SET) != SWITCH_STATUS_SUCCESS) { iax_reject(iaxevent->session, "Codec Error!"); @@ -1671,6 +1707,7 @@ switch_core_session_destroy(&session); } } +#endif //0 } } #endif //NOTDEF
participants (1)
-
FreeSWITCH SVN