[Freeswitch-svn] [commit] r12831 - freeswitch/trunk/src/mod/endpoints/mod_skypiax

FreeSWITCH SVN gmaruzz at freeswitch.org
Sun Mar 29 02:17:59 PDT 2009


Author: gmaruzz
Date: Sun Mar 29 04:17:58 2009
New Revision: 12831

Log:
skypiax: FARMING modifications

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_skypiax/skypiax_protocol.c

Modified: freeswitch/trunk/src/mod/endpoints/mod_skypiax/skypiax_protocol.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_skypiax/skypiax_protocol.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_skypiax/skypiax_protocol.c	Sun Mar 29 04:17:58 2009
@@ -1,5 +1,7 @@
 #include "skypiax.h"
 
+#define FARMING
+
 #ifdef ASTERISK
 #define skypiax_sleep usleep
 #define skypiax_strncpy strncpy
@@ -216,6 +218,7 @@
                 tech_pvt->skype_callflow = CALLFLOW_STATUS_RINGING;
                 tech_pvt->interface_state = SKYPIAX_STATE_RING;
                 /* no owner, no active call, let's answer */
+#ifndef FARMING
                 skypiax_signaling_write(tech_pvt, "SET AGC OFF");
                 skypiax_sleep(10000);
                 skypiax_signaling_write(tech_pvt, "SET AEC OFF");
@@ -226,6 +229,7 @@
                 sprintf(msg_to_skype, "GET CALL %s PARTNER_HANDLE", id);
                 skypiax_signaling_write(tech_pvt, msg_to_skype);
                 skypiax_sleep(10000);
+#endif //FARMING
                 sprintf(msg_to_skype, "ALTER CALL %s ANSWER", id);
                 skypiax_signaling_write(tech_pvt, msg_to_skype);
                 DEBUGA_SKYPE("We answered a Skype RING on skype_call %s\n", SKYPIAX_P_LOG,
@@ -278,11 +282,12 @@
             tech_pvt->interface_state = SKYPIAX_STATE_DIALING;
             NOTICA("Our remote party in skype_call %s is EARLYMEDIA\n", SKYPIAX_P_LOG,
                    id);
+                start_audio_threads(tech_pvt);
+          	skypiax_sleep(1000);
             sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"%d\"", id,
                     tech_pvt->tcp_cli_port);
             skypiax_signaling_write(tech_pvt, msg_to_skype);
-            start_audio_threads(tech_pvt);
-            sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id,
+                sprintf(msg_to_skype, "#output ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id,
                     tech_pvt->tcp_srv_port);
             skypiax_signaling_write(tech_pvt, msg_to_skype);
 
@@ -365,11 +370,12 @@
               if (tech_pvt->skype_callflow != CALLFLOW_STATUS_EARLYMEDIA) {
                 tech_pvt->skype_callflow = CALLFLOW_STATUS_INPROGRESS;
                 tech_pvt->interface_state = SKYPIAX_STATE_UP;
+                start_audio_threads(tech_pvt);
+          	skypiax_sleep(1000);
                 sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"%d\"", id,
                         tech_pvt->tcp_cli_port);
                 skypiax_signaling_write(tech_pvt, msg_to_skype);
-                start_audio_threads(tech_pvt);
-                sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id,
+                sprintf(msg_to_skype, "#output ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id,
                         tech_pvt->tcp_srv_port);
                 skypiax_signaling_write(tech_pvt, msg_to_skype);
               }
@@ -440,7 +446,11 @@
 
   memset(&my_addr, 0, sizeof(my_addr));
   my_addr.sin_family = AF_INET;
+#ifdef FARMING
+  //my_addr.sin_addr.s_addr = htonl(0x7f000001);  /* default on all addresses  */
+#else // FARMING
   my_addr.sin_addr.s_addr = htonl(0x7f000001);  /* use the localhost */
+#endif // FARMING
   my_addr.sin_port = htons(tech_pvt->tcp_srv_port);
 
   if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
@@ -458,7 +468,7 @@
 
   sin_size = sizeof(remote_addr);
   while ((fd = accept(s, (struct sockaddr *) &remote_addr, &sin_size)) > 0) {
-    DEBUGA_SKYPE("ACCEPTED\n", SKYPIAX_P_LOG);
+    DEBUGA_SKYPE("ACCEPTED here I send you %d\n", SKYPIAX_P_LOG, tech_pvt->tcp_srv_port);
     if (!running)
       break;
     while (tech_pvt->interface_state != SKYPIAX_STATE_DOWN
@@ -484,6 +494,9 @@
       rt = select(fdselect + 1, &fs, NULL, NULL, &to);
       if (rt > 0) {
 
+#ifdef FARMING
+	switch_sleep(500); //seems that reconnecting through a proxy leads to half the packet size, bizarrely, 158-162, never 160 :-)
+#endif // FARMING
         len = recv(fd, (char *) srv_in, 320, 0);    //seems that Skype only sends 320 bytes at time
 
         if (len == 320) {
@@ -535,9 +548,7 @@
         } else if (len == 0) {
           skypiax_sleep(1000);
         } else {
-          ERRORA("len=%d\n", SKYPIAX_P_LOG, len);
-          exit = 1;
-          break;
+          ERRORA("len=%d, expected 320\n", SKYPIAX_P_LOG, len);
         }
 
       } else {
@@ -591,7 +602,11 @@
 
   memset(&my_addr, 0, sizeof(my_addr));
   my_addr.sin_family = AF_INET;
+#ifdef FARMING
+  //my_addr.sin_addr.s_addr = htonl(0x7f000001);  /* default on all addresses */
+#else // FARMING
   my_addr.sin_addr.s_addr = htonl(0x7f000001);  /* use the localhost */
+#endif // FARMING
   my_addr.sin_port = htons(tech_pvt->tcp_cli_port);
 
   if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
@@ -610,7 +625,7 @@
 
   sin_size = sizeof(remote_addr);
   while ((fd = accept(s, (struct sockaddr *) &remote_addr, &sin_size)) > 0) {
-    DEBUGA_SKYPE("ACCEPTED\n", SKYPIAX_P_LOG);
+    DEBUGA_SKYPE("ACCEPTED here you send me %d\n", SKYPIAX_P_LOG, tech_pvt->tcp_cli_port);
     if (!running)
       break;
     while (tech_pvt->interface_state != SKYPIAX_STATE_DOWN
@@ -1165,6 +1180,14 @@
   return (xerror != BadValue) && (xerror != BadWindow);
 }
 
+#ifdef FARMING
+int skypiax_send_message(struct SkypiaxHandles *SkypiaxHandles, const char *message_P)
+{
+        printf("%s\n", message_P);
+        fflush(stdout);
+  return 1;
+}
+#else// FARMING
 int skypiax_send_message(struct SkypiaxHandles *SkypiaxHandles, const char *message_P)
 {
 
@@ -1212,6 +1235,8 @@
 
   return 1;
 }
+
+#endif// FARMING
 int skypiax_signaling_write(private_t * tech_pvt, char *msg_to_skype)
 {
   struct SkypiaxHandles *SkypiaxHandles;
@@ -1289,6 +1314,48 @@
   skypiax_sleep(1000);
 }
 
+#ifdef FARMING
+void *skypiax_do_skypeapi_thread_func(void *obj)
+{
+
+  private_t *tech_pvt = obj;
+  struct SkypiaxHandles *SkypiaxHandles;
+
+  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);
+  }
+  SkypiaxHandles = &tech_pvt->SkypiaxHandles;
+
+
+  SkypiaxHandles->api_connected = 1;
+
+    char *b;
+          unsigned int howmany;
+
+    while (1) {
+      char s[17000];
+
+      memset(s, '\0', 17000);
+      b=fgets(s, sizeof(s) - 1, stdin);
+      s[strlen(s) - 1] = '\0';
+          howmany = strlen(s) + 1;
+
+          howmany = write(SkypiaxHandles->fdesc[1], &s, howmany);
+
+    }
+}
+
+#else //FARMING
 void *skypiax_do_skypeapi_thread_func(void *obj)
 {
 
@@ -1409,4 +1476,5 @@
   return NULL;
 
 }
+#endif //FARMING
 #endif // WIN32



More information about the Freeswitch-svn mailing list