[Freeswitch-svn] [commit] r11578 - freeswitch/branches/gmaruzz/mod_skypiax/asterisk

FreeSWITCH SVN gmaruzz at freeswitch.org
Sat Jan 31 08:07:53 PST 2009


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);
         }
 



More information about the Freeswitch-svn mailing list