[Freeswitch-branches] [commit] r10311 - freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax
FreeSWITCH SVN
gmaruzz at freeswitch.org
Mon Nov 10 01:56:40 PST 2008
Author: gmaruzz
Date: Mon Nov 10 04:56:40 2008
New Revision: 10311
Log:
skypiax: added audio thread, but cannot activate incoming call. Need to move things from skypiax_config to tech_pvt
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 04:56:40 2008
@@ -270,6 +270,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);
if (len > 0) {
a = 0;
for (i = 0; i < len / sizeof(short); i++) {
@@ -312,9 +313,10 @@
}
return NULL;
}
-void *skypiax_do_tcp_cli_thread(void *data)
+static void *SWITCH_THREAD_FUNC skypiax_do_tcp_cli_thread(switch_thread_t *thread, void *obj)
+//void *skypiax_do_tcp_cli_thread(void *data)
{
- struct skypiax_config *p = data;
+ struct skypiax_config *p = obj;
int s, fd, len;
short in[NN / 2];
short out[NN];
@@ -355,11 +357,12 @@
sin_size = sizeof(remote_addr);
while ((fd = accept(s, (struct sockaddr *) &remote_addr, &sin_size)) > 0) {
- DEBUGA_SKYPE("ACCEPTED\n", SKYPIAX_P_LOG);
+ ERRORA("ACCEPTED\n", SKYPIAX_P_LOG);
//while (1 && p->owner && p->owner->_state == AST_STATE_UP) FIXME FIXME FIXME
while (1) {
got = read(p->audioskypepipe[0], in, (NN / 2) * sizeof(short));
+ ERRORA("got %d\n", SKYPIAX_P_LOG, got);
if (got > 0) {
a = 0;
@@ -377,7 +380,7 @@
break;
}
} else {
- usleep(100);
+ usleep(1000);
}
}
@@ -498,31 +501,21 @@
}
return &f;
}
-int skypiax_skypeaudio_write(struct skypiax_config *p, struct ast_frame *f)
-{
- int sent;
-
- if (option_debug > 100) {
- DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG);
- }
- sent = write(p->audioskypepipe[1], (short *) f->data, f->datalen);
-
- if (option_debug > 100) {
- DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
- }
- return 0;
-}
#endif //NOTDEF
#endif /* SKYPE_AUDIO */
static void tech_init(private_t *tech_pvt, switch_core_session_t *session)
{
+ struct skypiax_config *p = NULL;
+
+ DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG);
tech_pvt->read_frame.data = tech_pvt->databuf;
tech_pvt->read_frame.buflen = sizeof(tech_pvt->databuf);
switch_mutex_init(&tech_pvt->mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
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;
+ DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
}
/*
@@ -734,6 +727,7 @@
switch_channel_t *channel = NULL;
private_t *tech_pvt = NULL;
//switch_frame_t *pframe;
+ //FIXME int sent;
channel = switch_core_session_get_channel(session);
assert(channel != NULL);
@@ -750,6 +744,9 @@
}
#endif
+ //FIXME sent = write(p->audioskypepipe[1], (short *) frame->data, frame->datalen);
+ //FIXME ERRORA("sent %d\n", SKYPIAX_P_LOG, sent);
+
return SWITCH_STATUS_SUCCESS;
@@ -1581,6 +1578,19 @@
if (1) {
char msg_to_skype[1024];
if (!p->tcp_cli_thread) {
+if(1)
+{
+ switch_thread_t *thread;
+ switch_threadattr_t *thd_attr = NULL;
+
+ switch_threadattr_create(&thd_attr, module_pool);
+ switch_threadattr_detach_set(thd_attr, 1);
+ switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
+ switch_thread_create(&thread, thd_attr, skypiax_do_tcp_cli_thread, p, module_pool);
+ DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG);
+}
+
+
#ifdef NOTDEF
if (ast_pthread_create
(&p->tcp_cli_thread, NULL, skypiax_do_tcp_cli_thread, p) < 0) {
@@ -1605,6 +1615,72 @@
}
p->skype_callflow = AST_STATE_UP;
+
+ /**************************/
+
+ //FIXME switch_core_session_t **new_session;
+
+ //FIXME *new_session=switch_loadable_module_create_interface(skypiax_endpoint_interface, pool);
+
+#ifdef NOTDEF
+ if (1) {
+ switch_core_session_t *session;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "New Inbound Channel!\n");
+
+ if ((session = switch_core_session_request(iax_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);
+ } 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),
+ iaxevent->ies.username,
+ globals.dialplan,
+ iaxevent->ies.calling_name,
+ iaxevent->ies.calling_number,
+ iax_get_peer_ip(iaxevent->session),
+ iaxevent->ies.calling_ani,
+ NULL,
+ NULL,
+ modname,
+ iaxevent->ies.called_context, iaxevent->ies.called_number)) != 0) {
+ char name[128];
+ switch_snprintf(name, sizeof(name), "IAX/%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);
+ }
+
+ 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!");
+ switch_core_session_destroy(&session);
+ } else {
+ tech_pvt->iax_session = iaxevent->session;
+ tech_pvt->session = session;
+ iax_accept(tech_pvt->iax_session, tech_pvt->codec);
+ iax_ring_announce(tech_pvt->iax_session);
+ switch_channel_set_state(channel, CS_INIT);
+ if (switch_core_session_thread_launch(session) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error spawning thread\n");
+ switch_core_session_destroy(&session);
+ }
+ }
+ }
+ }
+#endif //NOTDEF
+ /**************************/
+
+
+
+
+
+
} else {
WARNINGA("skype_call: %s, STATUS: %s is not recognized\n", SKYPIAX_P_LOG,
id, value);
More information about the Freeswitch-branches
mailing list