]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
skypiax: added FS timers, allow for better Virtual Machine (xen, ec2) conference...
authorGiovanni Maruzzelli <gmaruzz@gmail.com>
Wed, 27 Jan 2010 13:30:07 +0000 (13:30 +0000)
committerGiovanni Maruzzelli <gmaruzz@gmail.com>
Wed, 27 Jan 2010 13:30:07 +0000 (13:30 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16521 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_skypiax/mod_skypiax.c
src/mod/endpoints/mod_skypiax/skypiax.h
src/mod/endpoints/mod_skypiax/skypiax_protocol.c

index 5983f5d04645e439bb2d164c8d76a668e8324ee9..dbc2341ef843d519a4a6648d4b1fb220948b3551 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "skypiax.h"
 #define MDL_CHAT_PROTO "skype"
+#define TIMER_WRITE
 
 #ifdef WIN32
 /***************/
@@ -193,7 +194,8 @@ static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
                                                                                                        switch_event_t *var_event,
                                                                                                        switch_caller_profile_t *outbound_profile,
-                                                                                                       switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags, switch_call_cause_t *cancel_cause);
+                                                                                                       switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags,
+                                                                                                       switch_call_cause_t *cancel_cause);
 static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
@@ -255,7 +257,26 @@ switch_status_t skypiax_tech_init(private_t * tech_pvt, switch_core_session_t *s
                ERRORA("skypiax_codec FAILED\n", SKYPIAX_P_LOG);
                return SWITCH_STATUS_FALSE;
        }
-       DEBUGA_SKYPE("skypiax_codec SUCCESS\n", SKYPIAX_P_LOG);
+
+       if (switch_core_timer_init(&tech_pvt->timer_read, "soft", 20, tech_pvt->read_codec.implementation->samples_per_packet, skypiax_module_pool) !=
+               SWITCH_STATUS_SUCCESS) {
+               ERRORA("setup timer failed\n", SKYPIAX_P_LOG);
+               return SWITCH_STATUS_FALSE;
+       }
+
+       switch_core_timer_sync(&tech_pvt->timer_read);
+
+#ifdef TIMER_WRITE
+       if (switch_core_timer_init(&tech_pvt->timer_write, "soft", 20, tech_pvt->write_codec.implementation->samples_per_packet, skypiax_module_pool) !=
+               SWITCH_STATUS_SUCCESS) {
+               ERRORA("setup timer failed\n", SKYPIAX_P_LOG);
+               return SWITCH_STATUS_FALSE;
+       }
+
+       switch_core_timer_sync(&tech_pvt->timer_write);
+#endif// TIMER_WRITE
+
+       DEBUGA_SKYPE("skypiax_tech_init SUCCESS\n", SKYPIAX_P_LOG);
        return SWITCH_STATUS_SUCCESS;
 }
 
@@ -362,7 +383,7 @@ static switch_status_t remove_interface(char *the_interface)
                        globals.SKYPIAX_INTERFACES[interface_id].skypiax_api_thread = NULL;
                }
 #else
-               if(tech_pvt->running && tech_pvt->SkypiaxHandles.disp){
+               if (tech_pvt->running && tech_pvt->SkypiaxHandles.disp) {
                        XEvent e;
                        Atom atom1 = XInternAtom(tech_pvt->SkypiaxHandles.disp, "SKYPECONTROLAPI_MESSAGE_BEGIN", False);
                        memset(&e, 0, sizeof(e));
@@ -460,6 +481,14 @@ static switch_status_t channel_on_destroy(switch_core_session_t *session)
                if (switch_core_codec_ready(&tech_pvt->write_codec)) {
                        switch_core_codec_destroy(&tech_pvt->write_codec);
                }
+
+               switch_core_timer_destroy(&tech_pvt->timer_read);
+#ifdef TIMER_WRITE
+
+               switch_core_timer_destroy(&tech_pvt->timer_write);
+#endif// TIMER_WRITE
+
+
                *tech_pvt->session_uuid_str = '\0';
                tech_pvt->interface_state = SKYPIAX_STATE_IDLE;
                if (tech_pvt->skype_callflow == CALLFLOW_STATUS_FINISHED) {
@@ -582,7 +611,7 @@ static switch_status_t channel_kill_channel(switch_core_session_t *session, int
                        ERRORA("FYI %s CHANNEL in CS_NEW state got SWITCH_SIG_KILL\n", SKYPIAX_P_LOG, switch_channel_get_name(channel));
                        channel_on_hangup(session);
                }
-               if ( switch_channel_get_state(channel) != CS_NEW && switch_channel_get_state(channel) < CS_EXECUTE) {
+               if (switch_channel_get_state(channel) != CS_NEW && switch_channel_get_state(channel) < CS_EXECUTE) {
                        ERRORA("FYI %s CHANNEL in %d state got SWITCH_SIG_KILL\n", SKYPIAX_P_LOG, switch_channel_get_name(channel), switch_channel_get_state(channel));
                        channel_on_hangup(session);
                }
@@ -662,6 +691,8 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
        tech_pvt->read_frame.flags = SFF_NONE;
        *frame = NULL;
 
+       switch_core_timer_next(&tech_pvt->timer_read);
+
        if (!skypiax_audio_read(tech_pvt)) {
 
                ERRORA("skypiax_audio_read ERROR\n", SKYPIAX_P_LOG);
@@ -745,21 +776,20 @@ static switch_status_t channel_write_frame(switch_core_session_t *session, switc
 #else /* WIN32 */
        //sent = write(tech_pvt->audiopipe_cli[1], frame->data, sent);
 #endif /* WIN32 */
-                                       //FIXME while(tech_pvt->flag_audio_cli == 1){
-                                               //FIXME switch_sleep(100); //1 millisec
-                                               //NOTICA("write now is 1\n", SKYPIAX_P_LOG);
-                                               //FIXME }
-                                               //WARNINGA("write is now 0\n", SKYPIAX_P_LOG);
-
 
        //memcpy(tech_pvt->audiobuf_cli, frame->data, frame->datalen);
-                                                               if(tech_pvt->flag_audio_cli == 1){
-                                                                       switch_sleep(1000); //1 millisec
-                                                               }
-                                                               if(tech_pvt->flag_audio_cli == 0){
-       memcpy(tech_pvt->audiobuf_cli, frame->data, frame->datalen);
-       tech_pvt->flag_audio_cli = 1;
-                                                               }
+       if (tech_pvt->flag_audio_cli == 1) {
+               switch_sleep(1000);             //1 millisec
+       }
+       if (tech_pvt->flag_audio_cli == 0) {
+#ifdef TIMER_WRITE
+
+               switch_core_timer_next(&tech_pvt->timer_write);
+#endif// TIMER_WRITE
+
+               memcpy(tech_pvt->audiobuf_cli, frame->data, frame->datalen);
+               tech_pvt->flag_audio_cli = 1;
+       }
        //NOTICA("write \n", SKYPIAX_P_LOG);
 
        if (sent != frame->datalen && sent != -1) {
@@ -798,29 +828,38 @@ static switch_status_t channel_receive_message(switch_core_session_t *session, s
        switch_assert(tech_pvt != NULL);
 
        switch (msg->message_id) {
-               case SWITCH_MESSAGE_INDICATE_ANSWER:
-                       {
-                               DEBUGA_SKYPE("MSG_ID=%d, TO BE ANSWERED!\n", SKYPIAX_P_LOG, msg->message_id);
-                               channel_answer_channel(session);
-                       }
-                       break;
-               case SWITCH_MESSAGE_INDICATE_AUDIO_SYNC:
+       case SWITCH_MESSAGE_INDICATE_ANSWER:
+               {
+                       DEBUGA_SKYPE("MSG_ID=%d, TO BE ANSWERED!\n", SKYPIAX_P_LOG, msg->message_id);
+       
+               switch_core_timer_sync(&tech_pvt->timer_read);
+#ifdef TIMER_WRITE
+               switch_core_timer_sync(&tech_pvt->timer_write);
+#endif// TIMER_WRITE
+               channel_answer_channel(session);
+               }
+               break;
+       case SWITCH_MESSAGE_INDICATE_AUDIO_SYNC:
 
-                       DEBUGA_SKYPE("%s CHANNEL got SWITCH_MESSAGE_INDICATE_AUDIO_SYNC\n", SKYPIAX_P_LOG, switch_channel_get_name(channel));
+               DEBUGA_SKYPE("%s CHANNEL got SWITCH_MESSAGE_INDICATE_AUDIO_SYNC\n", SKYPIAX_P_LOG, switch_channel_get_name(channel));
 
-                       //for (i=0; i<50; i++) {
-                       //skypiax_audio_read(tech_pvt);
-                       //WARNINGA("read samples\n", SKYPIAX_P_LOG);
-                       //}
-                       //switch_core_timer_sync(&tech_pvt->timer_read);
-                       //switch_core_timer_sync(&tech_pvt->timer_write);
+               switch_core_timer_sync(&tech_pvt->timer_read);
+#ifdef TIMER_WRITE
+               switch_core_timer_sync(&tech_pvt->timer_write);
+#endif// TIMER_WRITE
+               break;
+       default:
+               {
+       
+               switch_core_timer_sync(&tech_pvt->timer_read);
+#ifdef TIMER_WRITE
 
-                       break;
-               default:
-                       {
-                               DEBUGA_SKYPE("MSG_ID=%d\n", SKYPIAX_P_LOG, msg->message_id);
-                       }
-                       break;
+               switch_core_timer_sync(&tech_pvt->timer_write);
+#endif// TIMER_WRITE
+
+               DEBUGA_SKYPE("MSG_ID=%d\n", SKYPIAX_P_LOG, msg->message_id);
+               }
+               break;
        }
 
        return SWITCH_STATUS_SUCCESS;
@@ -869,7 +908,8 @@ switch_io_routines_t skypiax_io_routines = {
 static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
                                                                                                        switch_event_t *var_event,
                                                                                                        switch_caller_profile_t *outbound_profile,
-                                                                                                       switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags, switch_call_cause_t *cancel_cause)
+                                                                                                       switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags,
+                                                                                                       switch_call_cause_t *cancel_cause)
 {
        private_t *tech_pvt = NULL;
        if ((*new_session = switch_core_session_request(skypiax_endpoint_interface, SWITCH_CALL_DIRECTION_OUTBOUND, pool)) != 0) {
@@ -961,10 +1001,10 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
                if (outbound_profile) {
                        char name[128];
 
-                       if (strncmp("ANY", outbound_profile->destination_number, 3 ) == 0) {
-                               snprintf(name, sizeof(name), "skypiax/ANY/%s%s", tech_pvt->name, outbound_profile->destination_number+3);
+                       if (strncmp("ANY", outbound_profile->destination_number, 3) == 0) {
+                               snprintf(name, sizeof(name), "skypiax/ANY/%s%s", tech_pvt->name, outbound_profile->destination_number + 3);
                        } else if (strncmp("RR", outbound_profile->destination_number, 2) == 0) {
-                               snprintf(name, sizeof(name), "skypiax/RR/%s%s", tech_pvt->name, outbound_profile->destination_number+2);
+                               snprintf(name, sizeof(name), "skypiax/RR/%s%s", tech_pvt->name, outbound_profile->destination_number + 2);
                        } else {
                                snprintf(name, sizeof(name), "skypiax/%s", outbound_profile->destination_number);
                        }
@@ -1261,7 +1301,7 @@ static switch_status_t load_config(int reload_type)
                        } else {
                                DEBUGA_SKYPE("Initialized XInitThreads!\n", SKYPIAX_P_LOG);
                        }
-                       switch_sleep(100);
+                       switch_sleep(1000);
 #endif /* WIN32 */
 
                        if (interface_id && interface_id < SKYPIAX_MAX_INTERFACES) {
@@ -1297,10 +1337,10 @@ static switch_status_t load_config(int reload_type)
                                switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].destination, destination);
                                switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].context, context);
 
-                               if(!strcmp(report_incoming_chatmessages, "true") || !strcmp(report_incoming_chatmessages, "1")){
+                               if (!strcmp(report_incoming_chatmessages, "true") || !strcmp(report_incoming_chatmessages, "1")) {
                                        globals.SKYPIAX_INTERFACES[interface_id].report_incoming_chatmessages = 1;
-                               }else {
-                                       globals.SKYPIAX_INTERFACES[interface_id].report_incoming_chatmessages = 0; //redundant, just in case
+                               } else {
+                                       globals.SKYPIAX_INTERFACES[interface_id].report_incoming_chatmessages = 0;      //redundant, just in case
 
                                }
 
@@ -1424,7 +1464,8 @@ static switch_status_t load_config(int reload_type)
                                DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].dialplan=%s\n", SKYPIAX_P_LOG, i, i, globals.SKYPIAX_INTERFACES[i].dialplan);
                                DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].destination=%s\n", SKYPIAX_P_LOG, i, i, globals.SKYPIAX_INTERFACES[i].destination);
                                DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].context=%s\n", SKYPIAX_P_LOG, i, i, globals.SKYPIAX_INTERFACES[i].context);
-                               DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].report_incoming_chatmessages=%d\n", SKYPIAX_P_LOG, i, i, globals.SKYPIAX_INTERFACES[i].report_incoming_chatmessages);
+                               DEBUGA_SKYPE("i=%d globals.SKYPIAX_INTERFACES[%d].report_incoming_chatmessages=%d\n", SKYPIAX_P_LOG, i, i,
+                                                        globals.SKYPIAX_INTERFACES[i].report_incoming_chatmessages);
                        }
                }
        }
@@ -1434,25 +1475,27 @@ static switch_status_t load_config(int reload_type)
 
        return SWITCH_STATUS_SUCCESS;
 }
-static switch_status_t chat_send(const char *proto, const char *from, const char *to, const char *subject, const char *body, const char *type, const char *hint)
+static switch_status_t chat_send(const char *proto, const char *from, const char *to, const char *subject, const char *body, const char *type,
+                                                                const char *hint)
 {
        //char *user, *host, *f_user = NULL, *ffrom = NULL, *f_host = NULL, *f_resource = NULL;
-       char *user=NULL, *host, *f_user = NULL, *f_host = NULL, *f_resource = NULL;
+       char *user = NULL, *host, *f_user = NULL, *f_host = NULL, *f_resource = NULL;
        //mdl_profile_t *profile = NULL;
-       private_t * tech_pvt=NULL;
-       int i=0, found=0, tried=0;
+       private_t *tech_pvt = NULL;
+       int i = 0, found = 0, tried = 0;
        char skype_msg[1024];
 
        switch_assert(proto != NULL);
 
-       DEBUGA_SKYPE("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=%s, hint=%s)\n", SKYPIAX_P_LOG, proto, from, to, subject, body, type, hint?hint:"NULL");
+       DEBUGA_SKYPE("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=%s, hint=%s)\n", SKYPIAX_P_LOG, proto, from, to, subject, body, type,
+                                hint ? hint : "NULL");
 
        if (!to || !strlen(to)) {
                ERRORA("Missing To: header.\n", SKYPIAX_P_LOG);
                return SWITCH_STATUS_SUCCESS;
        }
 
-       if ((!from && !hint) || (!strlen(from) && !strlen(hint)) ) {
+       if ((!from && !hint) || (!strlen(from) && !strlen(hint))) {
                ERRORA("Missing From: AND Hint: headers.\n", SKYPIAX_P_LOG);
                return SWITCH_STATUS_SUCCESS;
        }
@@ -1470,70 +1513,71 @@ static switch_status_t chat_send(const char *proto, const char *from, const char
                if ((host = strchr(user, '@'))) {
                        *host++ = '\0';
                }
-
                //if (!strcmp(proto, MDL_CHAT_PROTO)) {
 
-       DEBUGA_SKYPE("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=%s, hint=%s)\n", SKYPIAX_P_LOG, proto, from, to, subject, body, type, hint?hint:"NULL");
-                       if (hint && strlen(hint)) {
-                               //in hint we receive the interface name to use
-                               for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) {
-                                       if (strlen(globals.SKYPIAX_INTERFACES[i].name)
-                                                       && (strncmp(globals.SKYPIAX_INTERFACES[i].name, hint, strlen(hint)) == 0)) {
-                                               tech_pvt = &globals.SKYPIAX_INTERFACES[i];
-                                               DEBUGA_SKYPE("Using interface: globals.SKYPIAX_INTERFACES[%d].name=|||%s|||\n", SKYPIAX_P_LOG, i, globals.SKYPIAX_INTERFACES[i].name);
-                                               found = 1;
-                                               break;
-                                       }
+               DEBUGA_SKYPE("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=%s, hint=%s)\n", SKYPIAX_P_LOG, proto, from, to, subject, body, type,
+                                        hint ? hint : "NULL");
+               if (hint && strlen(hint)) {
+                       //in hint we receive the interface name to use
+                       for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) {
+                               if (strlen(globals.SKYPIAX_INTERFACES[i].name)
+                                       && (strncmp(globals.SKYPIAX_INTERFACES[i].name, hint, strlen(hint)) == 0)) {
+                                       tech_pvt = &globals.SKYPIAX_INTERFACES[i];
+                                       DEBUGA_SKYPE("Using interface: globals.SKYPIAX_INTERFACES[%d].name=|||%s|||\n", SKYPIAX_P_LOG, i, globals.SKYPIAX_INTERFACES[i].name);
+                                       found = 1;
+                                       break;
                                }
-                       } else {
-                               //we have no a predefined interface name to use (hint is NULL), so let's choose an interface from the username (from)
-                               for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) {
-                                       if (strlen(globals.SKYPIAX_INTERFACES[i].name)
-                                                       && (strncmp(globals.SKYPIAX_INTERFACES[i].skype_user, from, strlen(from)) == 0)) {
-                                               tech_pvt = &globals.SKYPIAX_INTERFACES[i];
-                                               DEBUGA_SKYPE("Using interface: globals.SKYPIAX_INTERFACES[%d].name=|||%s|||\n", SKYPIAX_P_LOG, i, globals.SKYPIAX_INTERFACES[i].name);
-                                               found = 1;
-                                               break;
-                                       }
+                       }
+               } else {
+                       //we have no a predefined interface name to use (hint is NULL), so let's choose an interface from the username (from)
+                       for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) {
+                               if (strlen(globals.SKYPIAX_INTERFACES[i].name)
+                                       && (strncmp(globals.SKYPIAX_INTERFACES[i].skype_user, from, strlen(from)) == 0)) {
+                                       tech_pvt = &globals.SKYPIAX_INTERFACES[i];
+                                       DEBUGA_SKYPE("Using interface: globals.SKYPIAX_INTERFACES[%d].name=|||%s|||\n", SKYPIAX_P_LOG, i, globals.SKYPIAX_INTERFACES[i].name);
+                                       found = 1;
+                                       break;
                                }
                        }
-                       if (!found) {
-                               ERRORA("ERROR: A Skypiax interface with name='%s' or one with skypeuser='%s' was not found\n", SKYPIAX_P_LOG, hint?hint:"NULL", from?from:"NULL");
-                               goto end;
-                       } else {
+               }
+               if (!found) {
+                       ERRORA("ERROR: A Skypiax interface with name='%s' or one with skypeuser='%s' was not found\n", SKYPIAX_P_LOG, hint ? hint : "NULL",
+                                  from ? from : "NULL");
+                       goto end;
+               } else {
 
-                               snprintf(skype_msg, sizeof(skype_msg), "CHAT CREATE %s", to);
-                               skypiax_signaling_write(tech_pvt, skype_msg);
-                               switch_sleep(100);
-                       }
+                       snprintf(skype_msg, sizeof(skype_msg), "CHAT CREATE %s", to);
+                       skypiax_signaling_write(tech_pvt, skype_msg);
+                       switch_sleep(1000);
+               }
                //} else {
-                       //FIXME don't know how to do here, let's hope this is correct
-                       //char *p;
-                       //ffrom = switch_mprintf("%s+%s", proto, from);
-                       //from = ffrom;
-                       //if ((p = strchr(from, '/'))) {
-                               //*p = '\0';
-                       //}
-       //NOTICA("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=%s, hint=%s)\n", SKYPIAX_P_LOG, proto, from, to, subject, body, type, hint?hint:"NULL");
-                       //switch_core_chat_send(proto, proto, from, to, subject, body, type, hint);
-                       //return SWITCH_STATUS_SUCCESS;
+               //FIXME don't know how to do here, let's hope this is correct
+               //char *p;
+               //ffrom = switch_mprintf("%s+%s", proto, from);
+               //from = ffrom;
+               //if ((p = strchr(from, '/'))) {
+               //*p = '\0';
+               //}
+               //NOTICA("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=%s, hint=%s)\n", SKYPIAX_P_LOG, proto, from, to, subject, body, type, hint?hint:"NULL");
+               //switch_core_chat_send(proto, proto, from, to, subject, body, type, hint);
+               //return SWITCH_STATUS_SUCCESS;
                //}
 
-               found=0;
+               found = 0;
 
-               while(!found){
-                       for(i=0; i<MAX_CHATS; i++){
-                               if(!strcmp(tech_pvt->chats[i].dialog_partner, to) ){
+               while (!found) {
+                       for (i = 0; i < MAX_CHATS; i++) {
+                               if (!strcmp(tech_pvt->chats[i].dialog_partner, to)) {
                                        snprintf(skype_msg, sizeof(skype_msg), "CHATMESSAGE %s %s", tech_pvt->chats[i].chatname, body);
                                        skypiax_signaling_write(tech_pvt, skype_msg);
-                                       found=1;
+                                       found = 1;
                                        break;
                                }
                        }
-                       if(found){
+                       if (found) {
                                break;
                        }
-                       if(tried > 1000){
+                       if (tried > 1000) {
                                ERRORA("No chat with dialog_partner='%s' was found\n", SKYPIAX_P_LOG, to);
                                break;
                        }
@@ -1541,7 +1585,7 @@ static switch_status_t chat_send(const char *proto, const char *from, const char
                }
 
        }
-end:
+  end:
        switch_safe_free(user);
        switch_safe_free(f_user);
        return SWITCH_STATUS_SUCCESS;
@@ -1563,10 +1607,10 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_skypiax_load)
                return SWITCH_STATUS_FALSE;
        }
 
-        if (switch_event_reserve_subclass(MY_EVENT_INCOMING_CHATMESSAGE) != SWITCH_STATUS_SUCCESS) {
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n");
-                return SWITCH_STATUS_GENERR;
-        }
+       if (switch_event_reserve_subclass(MY_EVENT_INCOMING_CHATMESSAGE) != SWITCH_STATUS_SUCCESS) {
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n");
+               return SWITCH_STATUS_GENERR;
+       }
 
        *module_interface = switch_loadable_module_create_module_interface(pool, modname);
        skypiax_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
@@ -1617,10 +1661,10 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
                                        globals.SKYPIAX_INTERFACES[interface_id].skypiax_api_thread = NULL;
                                }
 #else
-                               if(tech_pvt->SkypiaxHandles.disp){
+                               if (tech_pvt->SkypiaxHandles.disp) {
                                        XEvent e;
                                        Atom atom1 = XInternAtom(tech_pvt->SkypiaxHandles.disp, "SKYPECONTROLAPI_MESSAGE_BEGIN",
-                                                       False);
+                                                                                        False);
                                        memset(&e, 0, sizeof(e));
                                        e.xclient.type = ClientMessage;
                                        e.xclient.message_type = atom1; /*  leading message */
@@ -1662,7 +1706,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
                }
 
        }
-        switch_event_free_subclass(MY_EVENT_INCOMING_CHATMESSAGE);
+       switch_event_free_subclass(MY_EVENT_INCOMING_CHATMESSAGE);
 
        switch_safe_free(globals.dialplan);
        switch_safe_free(globals.context);
@@ -1997,7 +2041,7 @@ SWITCH_STANDARD_API(sk_function)
 
                }
                stream->write_function(stream, "\nTotal Interfaces: %d  IB Calls(Failed/Total): %ld/%ld  OB Calls(Failed/Total): %ld/%ld\n",
-                      globals.real_interfaces > 0 ? globals.real_interfaces - 1 : 0, ib_failed, ib, ob_failed, ob);
+                                                          globals.real_interfaces > 0 ? globals.real_interfaces - 1 : 0, ib_failed, ib, ob_failed, ob);
 
        } else if (!strcasecmp(argv[0], "console")) {
                int i;
@@ -2316,7 +2360,7 @@ int incoming_chatmessage(private_t * tech_pvt, int which)
 
        DEBUGA_SKYPE("received CHATMESSAGE on interface %s\n", SKYPIAX_P_LOG, tech_pvt->name);
 
-       if(!tech_pvt->report_incoming_chatmessages){
+       if (!tech_pvt->report_incoming_chatmessages) {
                DEBUGA_SKYPE("I will not generate an Event, report_incoming_chatmessages is %d\n", SKYPIAX_P_LOG, tech_pvt->report_incoming_chatmessages);
                return 0;
        }
@@ -2333,23 +2377,23 @@ int incoming_chatmessage(private_t * tech_pvt, int which)
                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "chatname", tech_pvt->chatmessages[which].chatname);
                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "id", tech_pvt->chatmessages[which].id);
                switch_event_add_body(event, "%s", tech_pvt->chatmessages[which].body);
-               if(session){
+               if (session) {
                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "true");
                        if (switch_core_session_queue_event(session, &event) != SWITCH_STATUS_SUCCESS) {
                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
                                switch_event_fire(&event);
                        }
-               } else { //no session
+               } else {                                //no session
                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "false");
                        switch_event_fire(&event);
-                       event_sent_to_esl=1;
+                       event_sent_to_esl = 1;
                }
 
-       }else{
+       } else {
                ERRORA("cannot create event on interface %s. WHY?????\n", SKYPIAX_P_LOG, tech_pvt->name);
        }
 
-       if(!event_sent_to_esl){
+       if (!event_sent_to_esl) {
 
                if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", MDL_CHAT_PROTO);
@@ -2360,21 +2404,21 @@ int incoming_chatmessage(private_t * tech_pvt, int which)
                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "chatname", tech_pvt->chatmessages[which].chatname);
                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "id", tech_pvt->chatmessages[which].id);
                        switch_event_add_body(event, "%s", tech_pvt->chatmessages[which].body);
-                       if(session){
+                       if (session) {
                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "true");
-                       } else { //no session
+                       } else {                        //no session
                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "false");
                        }
                        switch_event_fire(&event);
-               } else{
+               } else {
                        ERRORA("cannot create event on interface %s. WHY?????\n", SKYPIAX_P_LOG, tech_pvt->name);
                }
        }
 
-       if(session){
+       if (session) {
                switch_core_session_rwunlock(session);
        }
-       memset(&tech_pvt->chatmessages[which], '\0', sizeof(&tech_pvt->chatmessages[which]) );
+       memset(&tech_pvt->chatmessages[which], '\0', sizeof(&tech_pvt->chatmessages[which]));
        return 0;
 }
 
@@ -2407,7 +2451,7 @@ SWITCH_STANDARD_API(skypiax_chat_function)
                for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) {
                        /* we've been asked for a normal interface name, or we have not found idle interfaces to serve as the "ANY" interface */
                        if (strlen(globals.SKYPIAX_INTERFACES[i].name)
-                                       && (strncmp(globals.SKYPIAX_INTERFACES[i].name, argv[0], strlen(argv[0])) == 0)) {
+                               && (strncmp(globals.SKYPIAX_INTERFACES[i].name, argv[0], strlen(argv[0])) == 0)) {
                                tech_pvt = &globals.SKYPIAX_INTERFACES[i];
                                stream->write_function(stream, "Using interface: globals.SKYPIAX_INTERFACES[%d].name=|||%s|||\n", i, globals.SKYPIAX_INTERFACES[i].name);
                                found = 1;
@@ -2424,9 +2468,11 @@ SWITCH_STANDARD_API(skypiax_chat_function)
                        //chat_send(p*roto, const char *from, const char *to, const char *subject, const char *body, const char *type, const char *hint);
                        //chat_send(MDL_CHAT_PROTO, tech_pvt->skype_user, argv[1], "SIMPLE MESSAGE", switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), NULL, hint);
 
-                       NOTICA("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=NULL, hint=%s)\n", SKYPIAX_P_LOG, MDL_CHAT_PROTO, tech_pvt->skype_user, argv[1], "SIMPLE MESSAGE", switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), tech_pvt->name);
+                       NOTICA("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=NULL, hint=%s)\n", SKYPIAX_P_LOG, MDL_CHAT_PROTO, tech_pvt->skype_user,
+                                  argv[1], "SIMPLE MESSAGE", switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), tech_pvt->name);
 
-                       chat_send(MDL_CHAT_PROTO, tech_pvt->skype_user, argv[1], "SIMPLE MESSAGE", switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), NULL, tech_pvt->name);
+                       chat_send(MDL_CHAT_PROTO, tech_pvt->skype_user, argv[1], "SIMPLE MESSAGE",
+                                         switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), NULL, tech_pvt->name);
 
                        //NOTICA("TEXT is: %s\n", SKYPIAX_P_LOG, (char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1] );
                        //snprintf(skype_msg, sizeof(skype_msg), "CHAT CREATE %s", argv[1]);
@@ -2440,21 +2486,22 @@ SWITCH_STANDARD_API(skypiax_chat_function)
 
 #ifdef NOTDEF
 
-       found=0;
+       found = 0;
 
-       while(!found){
-               for(i=0; i<MAX_CHATS; i++){
-                       if(!strcmp(tech_pvt->chats[i].dialog_partner, argv[1]) ){
-                               snprintf(skype_msg, sizeof(skype_msg), "CHATMESSAGE %s %s", tech_pvt->chats[i].chatname, (char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]);
+       while (!found) {
+               for (i = 0; i < MAX_CHATS; i++) {
+                       if (!strcmp(tech_pvt->chats[i].dialog_partner, argv[1])) {
+                               snprintf(skype_msg, sizeof(skype_msg), "CHATMESSAGE %s %s", tech_pvt->chats[i].chatname,
+                                                (char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]);
                                skypiax_signaling_write(tech_pvt, skype_msg);
-                               found=1;
+                               found = 1;
                                break;
                        }
                }
-               if(found){
+               if (found) {
                        break;
                }
-               if(tried > 1000){
+               if (tried > 1000) {
                        stream->write_function(stream, "ERROR: no chat with dialog_partner='%s' was found\n", argv[1]);
                        break;
                }
@@ -2462,7 +2509,7 @@ SWITCH_STANDARD_API(skypiax_chat_function)
        }
 #endif //NOTDEF
 
-end:
+  end:
        switch_safe_free(mycmd);
 
        return SWITCH_STATUS_SUCCESS;
index 495b0eda9e479a0a304fcc5b4f5dd677035cbbc4..97762ea5affefea1f98b320700439f3871bb7a44 100644 (file)
@@ -277,6 +277,8 @@ struct private_object {
        chatmessage_t chatmessages[MAX_CHATMESSAGES];
        chat_t chats[MAX_CHATS];
        uint32_t report_incoming_chatmessages;
+       switch_timer_t timer_read;
+       switch_timer_t timer_write;
 };
 
 typedef struct private_object private_t;
index 9d7fe714f433628d3abb09d5d0ec05105fd386df..52ede88af670d501c92ff8a6179df744c889e174 100644 (file)
@@ -29,16 +29,16 @@ int xerror = 0;
 int skypiax_socket_create_and_bind(private_t * tech_pvt, int *which_port)
 #else
 int skypiax_socket_create_and_bind(private_t * tech_pvt, unsigned short *which_port)
-#endif //WIN32
+#endif                                                 //WIN32
 {
        int s = -1;
        struct sockaddr_in my_addr;
 #ifndef WIN32
        int start_port = 6001;
 #else
-unsigned short start_port = 6001;
+       unsigned short start_port = 6001;
 #endif //WIN32
-       int sockbufsize=0;
+       int sockbufsize = 0;
        unsigned int size = sizeof(int);
 
 
@@ -78,13 +78,13 @@ unsigned short start_port = 6001;
        DEBUGA_SKYPE("SUCCESS! *which_port=%d, tech_pvt->tcp_cli_port=%d, tech_pvt->tcp_srv_port=%d\n", SKYPIAX_P_LOG, *which_port, tech_pvt->tcp_cli_port,
                                 tech_pvt->tcp_srv_port);
 
-       sockbufsize=0;
+       sockbufsize = 0;
        size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&sockbufsize, &size);
+       getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *) &sockbufsize, &size);
        DEBUGA_SKYPE("1 SO_RCVBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
-       sockbufsize=0;
+       sockbufsize = 0;
        size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&sockbufsize, &size);
+       getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) &sockbufsize, &size);
        DEBUGA_SKYPE("1 SO_SNDBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
 
 
@@ -94,16 +94,16 @@ unsigned short start_port = 6001;
  * sockbufsize=SAMPLES_PER_FRAME * 8;
  */
 #ifdef WIN32
-       sockbufsize=SAMPLES_PER_FRAME * 8 * 3;
+       sockbufsize = SAMPLES_PER_FRAME * 8 * 3;
 #else
-       sockbufsize=SAMPLES_PER_FRAME * 8;
+       sockbufsize = SAMPLES_PER_FRAME * 8;
 #endif //WIN32
        size = sizeof(int);
-       setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&sockbufsize, size);
+       setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *) &sockbufsize, size);
 
-       sockbufsize=0;
+       sockbufsize = 0;
        size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&sockbufsize, &size);
+       getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *) &sockbufsize, &size);
        DEBUGA_SKYPE("2 SO_RCVBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
 
 /* for virtual machines, eg: Linux domU-12-31-39-02-68-28 2.6.18-xenU-ec2-v1.0 #2 SMP Tue Feb 19 10:51:53 EST 2008 i686 athlon i386 GNU/Linux
@@ -111,17 +111,17 @@ unsigned short start_port = 6001;
  * sockbufsize=SAMPLES_PER_FRAME * 8;
  */
 #ifdef WIN32
-       sockbufsize=SAMPLES_PER_FRAME * 8 * 3;
+       sockbufsize = SAMPLES_PER_FRAME * 8 * 3;
 #else
-       sockbufsize=SAMPLES_PER_FRAME * 8;
+       sockbufsize = SAMPLES_PER_FRAME * 8;
 #endif //WIN32
        size = sizeof(int);
-       setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&sockbufsize, size);
+       setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) &sockbufsize, size);
 
 
-       sockbufsize=0;
+       sockbufsize = 0;
        size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&sockbufsize, &size);
+       getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) &sockbufsize, &size);
        DEBUGA_SKYPE("2 SO_SNDBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
 
 
@@ -295,20 +295,21 @@ int skypiax_signaling_read(private_t * tech_pvt)
 
                                if (!strcasecmp(prop, "DIALOG_PARTNER")) {
                                        DEBUGA_SKYPE("CHAT %s has DIALOG_PARTNER %s\n", SKYPIAX_P_LOG, id, value);
-                                       found=0;
-                                       for(i=0; i<MAX_CHATS; i++){
-                                               if(strlen(tech_pvt->chats[i].chatname) == 0 || !strcmp(tech_pvt->chats[i].chatname, id) ){
+                                       found = 0;
+                                       for (i = 0; i < MAX_CHATS; i++) {
+                                               if (strlen(tech_pvt->chats[i].chatname) == 0 || !strcmp(tech_pvt->chats[i].chatname, id)) {
                                                        strncpy(tech_pvt->chats[i].chatname, id, sizeof(tech_pvt->chats[i].chatname));
                                                        strncpy(tech_pvt->chats[i].dialog_partner, value, sizeof(tech_pvt->chats[i].dialog_partner));
-                                                       found=1;
+                                                       found = 1;
                                                        break;
                                                }
                                        }
-                                       if(!found){
+                                       if (!found) {
                                                DEBUGA_SKYPE("why we do not have a chats slot free? we have more than %d chats in parallel?\n", SKYPIAX_P_LOG, MAX_CHATS);
-                                       } 
+                                       }
 
-                                       DEBUGA_SKYPE("CHAT %s is in position %d in the chats array, chatname=%s, dialog_partner=%s\n", SKYPIAX_P_LOG, id, i, tech_pvt->chats[i].chatname, tech_pvt->chats[i].dialog_partner);
+                                       DEBUGA_SKYPE("CHAT %s is in position %d in the chats array, chatname=%s, dialog_partner=%s\n", SKYPIAX_P_LOG, id, i,
+                                                                tech_pvt->chats[i].chatname, tech_pvt->chats[i].dialog_partner);
                                }
 
                        }
@@ -334,28 +335,30 @@ int skypiax_signaling_read(private_t * tech_pvt)
 
                                if (!strcasecmp(prop, "TYPE") && !strcasecmp(value, "SAID")) {
                                        DEBUGA_SKYPE("CHATMESSAGE %s is of type SAID, let's get the other infos\n", SKYPIAX_P_LOG, id);
-                                       found=0;
-                                       for(i=0; i<MAX_CHATMESSAGES; i++){
-                                               if(strlen(tech_pvt->chatmessages[i].id) == 0){
+                                       found = 0;
+                                       for (i = 0; i < MAX_CHATMESSAGES; i++) {
+                                               if (strlen(tech_pvt->chatmessages[i].id) == 0) {
                                                        strncpy(tech_pvt->chatmessages[i].id, id, sizeof(tech_pvt->chatmessages[i].id));
                                                        strncpy(tech_pvt->chatmessages[i].type, value, sizeof(tech_pvt->chatmessages[i].type));
-                                                       found=1;
+                                                       found = 1;
                                                        break;
                                                }
                                        }
-                                       if(!found){
-                                               DEBUGA_SKYPE("why we do not have a chatmessages slot free? we have more than %d chatmessages in parallel?\n", SKYPIAX_P_LOG, MAX_CHATMESSAGES);
+                                       if (!found) {
+                                               DEBUGA_SKYPE("why we do not have a chatmessages slot free? we have more than %d chatmessages in parallel?\n", SKYPIAX_P_LOG,
+                                                                        MAX_CHATMESSAGES);
                                        } else {
-                                               DEBUGA_SKYPE("CHATMESSAGE %s is in position %d in the chatmessages array, type=%s, id=%s\n", SKYPIAX_P_LOG, id, i, tech_pvt->chatmessages[i].type, tech_pvt->chatmessages[i].id);
+                                               DEBUGA_SKYPE("CHATMESSAGE %s is in position %d in the chatmessages array, type=%s, id=%s\n", SKYPIAX_P_LOG, id, i,
+                                                                        tech_pvt->chatmessages[i].type, tech_pvt->chatmessages[i].id);
                                                sprintf(msg_to_skype, "GET CHATMESSAGE %s CHATNAME", id);
                                                skypiax_signaling_write(tech_pvt, msg_to_skype);
-                                               skypiax_sleep(100);
+                                               skypiax_sleep(1000);
                                                sprintf(msg_to_skype, "GET CHATMESSAGE %s FROM_HANDLE", id);
                                                skypiax_signaling_write(tech_pvt, msg_to_skype);
-                                               skypiax_sleep(100);
+                                               skypiax_sleep(1000);
                                                sprintf(msg_to_skype, "GET CHATMESSAGE %s FROM_DISPNAME", id);
                                                skypiax_signaling_write(tech_pvt, msg_to_skype);
-                                               skypiax_sleep(100);
+                                               skypiax_sleep(1000);
                                                sprintf(msg_to_skype, "GET CHATMESSAGE %s BODY", id);
                                                skypiax_signaling_write(tech_pvt, msg_to_skype);
                                        }
@@ -363,63 +366,66 @@ int skypiax_signaling_read(private_t * tech_pvt)
 
                                if (!strcasecmp(prop, "CHATNAME")) {
                                        DEBUGA_SKYPE("CHATMESSAGE %s belongs to the CHAT %s\n", SKYPIAX_P_LOG, id, value);
-                                       found=0;
-                                       for(i=0; i<MAX_CHATMESSAGES; i++){
-                                               if(!strcmp(tech_pvt->chatmessages[i].id, id)){
+                                       found = 0;
+                                       for (i = 0; i < MAX_CHATMESSAGES; i++) {
+                                               if (!strcmp(tech_pvt->chatmessages[i].id, id)) {
                                                        strncpy(tech_pvt->chatmessages[i].chatname, value, sizeof(tech_pvt->chatmessages[i].chatname));
-                                                       found=1;
+                                                       found = 1;
                                                        break;
                                                }
                                        }
-                                       if(!found){
+                                       if (!found) {
                                                DEBUGA_SKYPE("why chatmessage %s was not found in the chatmessages array??\n", SKYPIAX_P_LOG, id);
-                                       } 
+                                       }
                                }
                                if (!strcasecmp(prop, "FROM_HANDLE")) {
                                        DEBUGA_SKYPE("CHATMESSAGE %s was sent by FROM_HANDLE %s\n", SKYPIAX_P_LOG, id, value);
-                                       found=0;
-                                       for(i=0; i<MAX_CHATMESSAGES; i++){
-                                               if(!strcmp(tech_pvt->chatmessages[i].id, id)){
+                                       found = 0;
+                                       for (i = 0; i < MAX_CHATMESSAGES; i++) {
+                                               if (!strcmp(tech_pvt->chatmessages[i].id, id)) {
                                                        strncpy(tech_pvt->chatmessages[i].from_handle, value, sizeof(tech_pvt->chatmessages[i].from_handle));
-                                                       found=1;
+                                                       found = 1;
                                                        break;
                                                }
                                        }
-                                       if(!found){
+                                       if (!found) {
                                                DEBUGA_SKYPE("why chatmessage %s was not found in the chatmessages array??\n", SKYPIAX_P_LOG, id);
-                                       } 
+                                       }
 
                                }
                                if (!strcasecmp(prop, "FROM_DISPNAME")) {
                                        DEBUGA_SKYPE("CHATMESSAGE %s was sent by FROM_DISPNAME %s\n", SKYPIAX_P_LOG, id, value);
-                                       found=0;
-                                       for(i=0; i<MAX_CHATMESSAGES; i++){
-                                               if(!strcmp(tech_pvt->chatmessages[i].id, id)){
+                                       found = 0;
+                                       for (i = 0; i < MAX_CHATMESSAGES; i++) {
+                                               if (!strcmp(tech_pvt->chatmessages[i].id, id)) {
                                                        strncpy(tech_pvt->chatmessages[i].from_dispname, value, sizeof(tech_pvt->chatmessages[i].from_dispname));
-                                                       found=1;
+                                                       found = 1;
                                                        break;
                                                }
                                        }
-                                       if(!found){
+                                       if (!found) {
                                                DEBUGA_SKYPE("why chatmessage %s was not found in the chatmessages array??\n", SKYPIAX_P_LOG, id);
-                                       } 
+                                       }
 
                                }
                                if (!strcasecmp(prop, "BODY")) {
                                        DEBUGA_SKYPE("CHATMESSAGE %s has BODY %s\n", SKYPIAX_P_LOG, id, value);
-                                       found=0;
-                                       for(i=0; i<MAX_CHATMESSAGES; i++){
-                                               if(!strcmp(tech_pvt->chatmessages[i].id, id)){
+                                       found = 0;
+                                       for (i = 0; i < MAX_CHATMESSAGES; i++) {
+                                               if (!strcmp(tech_pvt->chatmessages[i].id, id)) {
                                                        strncpy(tech_pvt->chatmessages[i].body, value, sizeof(tech_pvt->chatmessages[i].body));
-                                                       found=1;
+                                                       found = 1;
                                                        break;
                                                }
                                        }
-                                       if(!found){
+                                       if (!found) {
                                                DEBUGA_SKYPE("why chatmessage %s was not found in the chatmessages array??\n", SKYPIAX_P_LOG, id);
-                                       }else {
-                                               DEBUGA_SKYPE("CHATMESSAGE %s is in position %d in the chatmessages array, type=%s, id=%s, chatname=%s, from_handle=%s, from_dispname=%s, body=%s\n", SKYPIAX_P_LOG, id, i, tech_pvt->chatmessages[i].type, tech_pvt->chatmessages[i].id, tech_pvt->chatmessages[i].chatname, tech_pvt->chatmessages[i].from_handle, tech_pvt->chatmessages[i].from_dispname, tech_pvt->chatmessages[i].body);
-                                               if(strcmp(tech_pvt->chatmessages[i].from_handle, tech_pvt->skype_user)){ //if the message was not sent by myself
+                                       } else {
+                                               DEBUGA_SKYPE
+                                                       ("CHATMESSAGE %s is in position %d in the chatmessages array, type=%s, id=%s, chatname=%s, from_handle=%s, from_dispname=%s, body=%s\n",
+                                                        SKYPIAX_P_LOG, id, i, tech_pvt->chatmessages[i].type, tech_pvt->chatmessages[i].id, tech_pvt->chatmessages[i].chatname,
+                                                        tech_pvt->chatmessages[i].from_handle, tech_pvt->chatmessages[i].from_dispname, tech_pvt->chatmessages[i].body);
+                                               if (strcmp(tech_pvt->chatmessages[i].from_handle, tech_pvt->skype_user)) {      //if the message was not sent by myself
                                                        incoming_chatmessage(tech_pvt, i);
                                                }
                                        }
@@ -535,7 +541,7 @@ int skypiax_signaling_read(private_t * tech_pvt)
                                                tech_pvt->skype_callflow = CALLFLOW_STATUS_EARLYMEDIA;
                                                tech_pvt->interface_state = SKYPIAX_STATE_DIALING;
                                                DEBUGA_SKYPE("Our remote party in skype_call %s is EARLYMEDIA\n", SKYPIAX_P_LOG, id);
-                                               if(tech_pvt->tcp_cli_thread == NULL){
+                                               if (tech_pvt->tcp_cli_thread == NULL) {
                                                        DEBUGA_SKYPE("START start_audio_threads\n", SKYPIAX_P_LOG);
                                                        if (start_audio_threads(tech_pvt)) {
                                                                ERRORA("start_audio_threads FAILED\n", SKYPIAX_P_LOG);
@@ -627,7 +633,7 @@ int skypiax_signaling_read(private_t * tech_pvt)
                                                                        tech_pvt->skype_callflow = CALLFLOW_STATUS_INPROGRESS;
                                                                        tech_pvt->interface_state = SKYPIAX_STATE_UP;
 
-                                                                       if(tech_pvt->tcp_cli_thread == NULL){
+                                                                       if (tech_pvt->tcp_cli_thread == NULL) {
                                                                                DEBUGA_SKYPE("START start_audio_threads\n", SKYPIAX_P_LOG);
                                                                                if (start_audio_threads(tech_pvt)) {
                                                                                        ERRORA("start_audio_threads FAILED\n", SKYPIAX_P_LOG);
@@ -733,7 +739,7 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
        unsigned int kill_cli_size;
        short kill_cli_buff[SAMPLES_PER_FRAME];
        short totalbuf[SAMPLES_PER_FRAME];
-       int sockbufsize=0;
+       int sockbufsize = 0;
        unsigned int size = sizeof(int);
 
        s = skypiax_socket_create_and_bind(tech_pvt, &tech_pvt->tcp_srv_port);
@@ -775,14 +781,14 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
                        while (s > 0 && (fd = accept(s, (struct sockaddr *) &remote_addr, &sin_size)) > 0) {
                                DEBUGA_SKYPE("ACCEPTED here I send you %d\n", SKYPIAX_P_LOG, tech_pvt->tcp_srv_port);
 
-       sockbufsize=0;
-       size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&sockbufsize, &size);
-       DEBUGA_SKYPE("3 SO_RCVBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
-       sockbufsize=0;
-       size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&sockbufsize, &size);
-       DEBUGA_SKYPE("3 SO_SNDBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
+                               sockbufsize = 0;
+                               size = sizeof(int);
+                               getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *) &sockbufsize, &size);
+                               DEBUGA_SKYPE("3 SO_RCVBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
+                               sockbufsize = 0;
+                               size = sizeof(int);
+                               getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) &sockbufsize, &size);
+                               DEBUGA_SKYPE("3 SO_SNDBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
 
 
                                if (!(running && tech_pvt->running))
@@ -853,20 +859,20 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
                                                                }
                                                                /* send the complete frame through the pipe to our code waiting for incoming audio */
                                                                //howmany = skypiax_pipe_write(tech_pvt->audiopipe_srv[1], totalbuf, SAMPLES_PER_FRAME * sizeof(short));
-                                       //FIXME while(tech_pvt->flag_audio_srv == 1){
-                                               //FIXME switch_sleep(100); //1 millisec
-                                               //NOTICA("read now is 1\n", SKYPIAX_P_LOG);
-                                               //FIXME }
-                                               //WARNINGA("read is now 0\n", SKYPIAX_P_LOG);
+                                                               //FIXME while(tech_pvt->flag_audio_srv == 1){
+                                                               //FIXME switch_sleep(100); //1 millisec
+                                                               //NOTICA("read now is 1\n", SKYPIAX_P_LOG);
+                                                               //FIXME }
+                                                               //WARNINGA("read is now 0\n", SKYPIAX_P_LOG);
 
 
                                                                howmany = SAMPLES_PER_FRAME * sizeof(short);
-                                                               if(tech_pvt->flag_audio_srv == 1){
-                                                                       switch_sleep(1000); //1 millisec
+                                                               if (tech_pvt->flag_audio_srv == 1) {
+                                                                       switch_sleep(1000);     //1 millisec
                                                                }
-                                                               if(tech_pvt->flag_audio_srv == 0){
-                                                               memcpy(tech_pvt->audiobuf_srv, totalbuf, SAMPLES_PER_FRAME * sizeof(short));
-                                                               tech_pvt->flag_audio_srv = 1;
+                                                               if (tech_pvt->flag_audio_srv == 0) {
+                                                                       memcpy(tech_pvt->audiobuf_srv, totalbuf, SAMPLES_PER_FRAME * sizeof(short));
+                                                                       tech_pvt->flag_audio_srv = 1;
                                                                }
                                                                //NOTICA("read \n", SKYPIAX_P_LOG);
                                                                if (howmany != SAMPLES_PER_FRAME * sizeof(short)) {
@@ -902,14 +908,14 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
                                kill_cli_size = SAMPLES_PER_FRAME * sizeof(short);
                                len = skypiax_pipe_write(tech_pvt->audiopipe_cli[1], kill_cli_buff, kill_cli_size);
 
-                               tech_pvt->flag_audio_cli = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+                               tech_pvt->flag_audio_cli = 1;   //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
                                skypiax_sleep(200);
-                               tech_pvt->flag_audio_srv = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+                               tech_pvt->flag_audio_srv = 1;   //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
                                skypiax_sleep(200);
                                tech_pvt->interface_state = SKYPIAX_STATE_DOWN;
-                               tech_pvt->flag_audio_cli = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+                               tech_pvt->flag_audio_cli = 1;   //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
                                skypiax_sleep(200);
-                               tech_pvt->flag_audio_srv = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+                               tech_pvt->flag_audio_srv = 1;   //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
                                skypiax_sleep(200);
                                DEBUGA_SKYPE("Skype incoming audio GONE\n", SKYPIAX_P_LOG);
                                skypiax_close_socket(fd);
@@ -919,7 +925,7 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
 
        DEBUGA_SKYPE("incoming audio server (I am it) EXITING\n", SKYPIAX_P_LOG);
        skypiax_close_socket(s);
-       s=-1;
+       s = -1;
        return NULL;
 }
 
@@ -941,7 +947,7 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
 #else
        unsigned int sin_size;
 #endif /* WIN32 */
-       int sockbufsize=0;
+       int sockbufsize = 0;
        unsigned int size = sizeof(int);
 
        s = skypiax_socket_create_and_bind(tech_pvt, &tech_pvt->tcp_cli_port);
@@ -986,14 +992,14 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
                        while (s > 0 && (fd = accept(s, (struct sockaddr *) &remote_addr, &sin_size)) > 0) {
                                DEBUGA_SKYPE("ACCEPTED here you send me %d\n", SKYPIAX_P_LOG, tech_pvt->tcp_cli_port);
 
-       sockbufsize=0;
-       size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&sockbufsize, &size);
-       DEBUGA_SKYPE("4 SO_RCVBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
-       sockbufsize=0;
-       size = sizeof(int);
-       getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&sockbufsize, &size);
-       DEBUGA_SKYPE("4 SO_SNDBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
+                               sockbufsize = 0;
+                               size = sizeof(int);
+                               getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *) &sockbufsize, &size);
+                               DEBUGA_SKYPE("4 SO_RCVBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
+                               sockbufsize = 0;
+                               size = sizeof(int);
+                               getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) &sockbufsize, &size);
+                               DEBUGA_SKYPE("4 SO_SNDBUF is %d, size is %d\n", SKYPIAX_P_LOG, sockbufsize, size);
 
 
 
@@ -1035,15 +1041,15 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
                                        FD_SET(fdselect, &fs);
 
                                        //FIXME rt = select(fdselect + 1, NULL, &fs, NULL, &to);
-                                       while(tech_pvt->flag_audio_cli == 0){
+                                       while (tech_pvt->flag_audio_cli == 0) {
 #ifdef WIN32
-                                               skypiax_sleep(100); //0.1 millisec
+                                               skypiax_sleep(100);     //0.1 millisec
 #else
-                                               skypiax_sleep(1000); //1 millisec
+                                               skypiax_sleep(1000);    //1 millisec
 #endif //WIN32
                                                //WARNINGA("write now is 0\n", SKYPIAX_P_LOG);
-                                                }
-                                               //ERRORA("write is now 1\n", SKYPIAX_P_LOG);
+                                       }
+                                       //ERRORA("write is now 1\n", SKYPIAX_P_LOG);
 
                                        rt = 1;
 
@@ -1137,7 +1143,7 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
 
        DEBUGA_SKYPE("outbound audio server (I am it) EXITING\n", SKYPIAX_P_LOG);
        skypiax_close_socket(s);
-       s=-1;
+       s = -1;
        return NULL;
 }
 
@@ -1145,16 +1151,16 @@ int skypiax_audio_read(private_t * tech_pvt)
 {
        unsigned int samples;
 
-       while(tech_pvt->flag_audio_srv == 0){
+       while (tech_pvt->flag_audio_srv == 0) {
 #ifdef WIN32
-               skypiax_sleep(100); //0.1 millisec
+               skypiax_sleep(100);             //0.1 millisec
 #else
-               skypiax_sleep(1000); //1 millisec
+               skypiax_sleep(1000);    //1 millisec
 #endif //WIN32
 
                //WARNINGA("read now is 0\n", SKYPIAX_P_LOG);
        }
-               //ERRORA("read is now 1\n", SKYPIAX_P_LOG);
+       //ERRORA("read is now 1\n", SKYPIAX_P_LOG);
        //samples = skypiax_pipe_read(tech_pvt->audiopipe_srv[0], tech_pvt->read_frame.data, SAMPLES_PER_FRAME * sizeof(short));
        samples = SAMPLES_PER_FRAME * sizeof(short);
        memcpy(tech_pvt->read_frame.data, tech_pvt->audiobuf_srv, SAMPLES_PER_FRAME * sizeof(short));
@@ -1256,7 +1262,7 @@ int skypiax_pipe_read(int pipe, short *buf, int howmany)
 
 int skypiax_pipe_write(int pipe, short *buf, int howmany)
 {
-       if(buf){
+       if (buf) {
                howmany = write(pipe, buf, howmany);
                return howmany;
        } else {
@@ -1628,7 +1634,7 @@ int skypiax_send_message(private_t * tech_pvt, const char *message_P)
        XSync(disp, False);
        ok = X11_errors_untrap();
 
-       if (!ok){
+       if (!ok) {
                ERRORA("Sending message failed with status %d\n", SKYPIAX_P_LOG, xerror);
                tech_pvt->running = 0;
                return 0;
@@ -1754,7 +1760,7 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                root = DefaultRootWindow(disp);
                win = XCreateSimpleWindow(disp, root, 0, 0, 1, 1, 0, BlackPixel(disp, DefaultScreen(disp)), BlackPixel(disp, DefaultScreen(disp)));
 
-               SkypiaxHandles->win = win;      
+               SkypiaxHandles->win = win;
 
                snprintf(buf, 512, "NAME skypiax");
 
@@ -1762,7 +1768,7 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                        ERRORA("Sending message failed - probably Skype crashed. Please run/restart Skype manually and launch Skypiax again\n", SKYPIAX_P_LOG);
                        running = 0;
                        //if(disp)
-                               //XCloseDisplay(disp);
+                       //XCloseDisplay(disp);
                        return NULL;
                }
 
@@ -1771,14 +1777,14 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                        ERRORA("Sending message failed - probably Skype crashed. Please run/restart Skype manually and launch Skypiax again\n", SKYPIAX_P_LOG);
                        running = 0;
                        //if(disp)
-                               //XCloseDisplay(disp);
+                       //XCloseDisplay(disp);
                        return NULL;
                }
 
                {
                        /* perform an events loop */
                        XEvent an_event;
-                       char buf[21];                   /*  can't be longer */
+                       char buf[21];           /*  can't be longer */
                        char buffer[17000];
                        char continuebuffer[17000];
                        char *b;
@@ -1799,8 +1805,8 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                                switch (an_event.type) {
                                case ClientMessage:
 
-                                       if (an_event.xclient.format != 8){
-                                               skypiax_sleep(100);     //0.1 msec
+                                       if (an_event.xclient.format != 8) {
+                                               skypiax_sleep(1000);    //0.1 msec
                                                break;
                                        }
 
@@ -1818,11 +1824,13 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                                                        unsigned int howmany;
                                                        howmany = strlen(b) + 1;
                                                        howmany = write(SkypiaxHandles->fdesc[1], b, howmany);
-                                                       WARNINGA("A begin atom while the previous message is not closed???? value of previous message (between vertical bars) is=|||%s|||, will be lost\n", SKYPIAX_P_LOG, buffer);
+                                                       WARNINGA
+                                                               ("A begin atom while the previous message is not closed???? value of previous message (between vertical bars) is=|||%s|||, will be lost\n",
+                                                                SKYPIAX_P_LOG, buffer);
                                                        memset(buffer, '\0', 17000);
                                                }
-                                               if(continue_is_broken){
-                                                       continue_is_broken=0;
+                                               if (continue_is_broken) {
+                                                       continue_is_broken = 0;
                                                        there_were_continues = 1;
                                                }
                                        }
@@ -1831,7 +1839,8 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
 
                                                if (!strlen(buffer)) {
                                                        DEBUGA_SKYPE
-                                                               ("Got a 'continue' XAtom without a previous 'begin'. It's value (between vertical bars) is=|||%s|||, let's store it and hope next 'begin' will be the good one\n", SKYPIAX_P_LOG, buf);
+                                                               ("Got a 'continue' XAtom without a previous 'begin'. It's value (between vertical bars) is=|||%s|||, let's store it and hope next 'begin' will be the good one\n",
+                                                                SKYPIAX_P_LOG, buf);
                                                        strcat(continuebuffer, buf);
                                                        continue_is_broken = 1;
                                                        if (!strncmp(buf, "ognised identity", 15)) {
@@ -1840,16 +1849,15 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                                                                         SKYPIAX_P_LOG, buf);
                                                                skypiax_sleep(1000000); //1 sec
                                                        }
-                                                       skypiax_sleep(100);     //0.1 msec
+                                                       skypiax_sleep(1000);    //0.1 msec
                                                        break;
                                                }
                                        }
-                                       if(continue_is_broken){
+                                       if (continue_is_broken) {
                                                XFlush(disp);
-                                               skypiax_sleep(100);     //0.1 msec
+                                               skypiax_sleep(1000);    //0.1 msec
                                                continue;
                                        }
-
                                        //DEBUGA_SKYPE ("i=%d, buffer=|||%s|||\n", SKYPIAX_P_LOG, i, buffer);
                                        strcat(buffer, buf);
                                        //DEBUGA_SKYPE ("i=%d, buffer=|||%s|||\n", SKYPIAX_P_LOG, i, buffer);
@@ -1869,10 +1877,10 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                                                there_were_continues = 0;
                                        }
 
-                                       skypiax_sleep(100);     //0.1 msec
+                                       skypiax_sleep(1000);    //0.1 msec
                                        break;
                                default:
-                                       skypiax_sleep(100);     //0.1 msec
+                                       skypiax_sleep(1000);    //0.1 msec
                                        break;
                                }
                        }
@@ -1881,12 +1889,12 @@ void *skypiax_do_skypeapi_thread_func(void *obj)
                ERRORA("Skype is not running, maybe crashed. Please run/restart Skype and relaunch Skypiax\n", SKYPIAX_P_LOG);
                running = 0;
                //if(disp)
-                       //XCloseDisplay(disp);
+               //XCloseDisplay(disp);
                return NULL;
        }
        //running = 0;
        //if(disp)
-               //XCloseDisplay(disp);
+       //XCloseDisplay(disp);
        return NULL;
 
 }