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

FreeSWITCH SVN gmaruzz at freeswitch.org
Sat Jun 6 09:36:27 PDT 2009


Author: gmaruzz
Date: Sat Jun  6 11:36:26 2009
New Revision: 13663

Log:
skypiax: when repeatedly you try to connect to non-existing Skype account in a short period, the Skype client send you back the two halves of the message 'ERROR 92 CALL: Unrecognised identity' inverted in a way that breaks the flux of the API messages. Maybe an anti-spam feature? Anyway, let's try to work around it and restore sanity with a 1 second delay

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	Sat Jun  6 11:36:26 2009
@@ -1448,6 +1448,9 @@
     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 @@
 
         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;



More information about the Freeswitch-svn mailing list