]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
skypiax: when repeatedly you try to connect to non-existing Skype account in a short...
authorGiovanni Maruzzelli <gmaruzz@gmail.com>
Sat, 6 Jun 2009 16:36:26 +0000 (16:36 +0000)
committerGiovanni Maruzzelli <gmaruzz@gmail.com>
Sat, 6 Jun 2009 16:36:26 +0000 (16:36 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13663 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_skypiax/skypiax_protocol.c

index 55dd5afeb0b1e1a85a15779cbb0914508c54ea7c..ee0285f033c6de6afb27ff9abd556fc64cff724b 100644 (file)
@@ -1448,6 +1448,9 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
     char buffer[17000];
     char *b;
     int i;
+    int continue_is_broken=0;
+    Atom atom_begin = XInternAtom(disp, "SKYPECONTROLAPI_MESSAGE_BEGIN", False);
+    Atom atom_continue = XInternAtom(disp, "SKYPECONTROLAPI_MESSAGE", False);
 
     b = buffer;
 
@@ -1466,15 +1469,38 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
 
         buf[i] = '\0';
 
+       if(an_event.xclient.message_type == atom_begin){
+
+               if(strlen(buffer)){
+                       unsigned int howmany;
+                       howmany = strlen(b) + 1;
+                       howmany = write(SkypiaxHandles->fdesc[1], b, howmany);
+                       DEBUGA_SKYPE ("RECEIVED2=|||%s|||\n", SKYPIAX_P_LOG, buffer);
+                       memset(buffer, '\0', 17000);
+               }
+       }
+       if(an_event.xclient.message_type == atom_continue){
+
+               if(!strlen(buffer)){
+                       WARNINGA("Got a 'continue' XAtom without a previous 'begin'. It's value (between vertical bars) is=|||%s|||. Let's introduce a 1 second delay.\n", SKYPIAX_P_LOG, buf);
+                       continue_is_broken=1;
+                       skypiax_sleep(1000000); //1 sec
+                       break;
+               }
+       }
+        
         strcat(buffer, buf);
 
-        if (i < 20) {           /* last fragment */
+        if (i < 20 || continue_is_broken) {           /* last fragment */
           unsigned int howmany;
 
           howmany = strlen(b) + 1;
 
           howmany = write(SkypiaxHandles->fdesc[1], b, howmany);
+          DEBUGA_SKYPE ("RECEIVED=|||%s|||\n", SKYPIAX_P_LOG, buffer);
           memset(buffer, '\0', 17000);
+          XFlush(disp);
+          continue_is_broken=0;
         }
 
         break;