[Freeswitch-branches] [commit] r11041 - freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax

FreeSWITCH SVN gmaruzz at freeswitch.org
Thu Jan 1 04:10:04 PST 2009


Author: gmaruzz
Date: Thu Jan  1 07:10:03 2009
New Revision: 11041

Log:
skypiax: let's switch_channel_mark_answered the channel when it's actually answered, and *NOT* after having been pre_answered. Also, indent all

Modified:
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h
   freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c	Thu Jan  1 07:10:03 2009
@@ -393,15 +393,15 @@
 
   sent = frame->datalen;
   //DEBUGA_SKYPE("CLI PIPE to write %d\n", SKYPIAX_P_LOG, sent);
-#ifdef WIN32 
+#ifdef WIN32
   switch_file_write(p->audioskypepipe[1], frame->data, &sent);
 #else /* WIN32 */
   sent = write(p->audioskypepipe[1], frame->data, sent);
 #endif /* WIN32 */
-  if(sent != frame->datalen){
-	ERRORA("CLI PIPE write %d\n", SKYPIAX_P_LOG, sent);
-  }else{
-	//NOTICA("CLI PIPE write %d\n", SKYPIAX_P_LOG, sent);
+  if (sent != frame->datalen && sent != -1) {
+    DEBUGA_SKYPE("CLI PIPE write %d\n", SKYPIAX_P_LOG, sent);
+  } else {
+    //NOTICA("CLI PIPE write %d\n", SKYPIAX_P_LOG, sent);
   }
 
   return SWITCH_STATUS_SUCCESS;
@@ -511,8 +511,8 @@
     switch_core_session_add_stream(*new_session, NULL);
     if ((tech_pvt =
          (private_t *) switch_core_session_alloc(*new_session, sizeof(private_t))) != 0) {
-      tech_pvt->p = &globals.SKYPIAX_INTERFACES[19]; //FIXME
-      globals.SKYPIAX_INTERFACES[19].tech_pvt = tech_pvt; //FIXME
+      tech_pvt->p = &globals.SKYPIAX_INTERFACES[19];    //FIXME
+      globals.SKYPIAX_INTERFACES[19].tech_pvt = tech_pvt;   //FIXME
       channel = switch_core_session_get_channel(*new_session);
       skypiax_tech_init(tech_pvt, *new_session, NULL);
     } else {
@@ -542,7 +542,7 @@
     switch_channel_set_flag(channel, CF_OUTBOUND);
     switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND);
     switch_channel_set_state(channel, CS_INIT);
-                switch_channel_mark_pre_answered(channel);
+    //switch_channel_mark_pre_answered(channel);
     return SWITCH_CAUSE_SUCCESS;
   }
 
@@ -590,20 +590,20 @@
           if (channel) {
             switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
             //DEBUGA_SKYPE("after channel_on_hangup\n", SKYPIAX_P_LOG);
-          
-      } else {
-      ERRORA("no channel?\n", SKYPIAX_P_LOG);
-      }
+
+          } else {
+            ERRORA("no channel?\n", SKYPIAX_P_LOG);
+          }
+
+        } else {
+          ERRORA("no session?\n", SKYPIAX_P_LOG);
+        }
 
       } else {
-      ERRORA("no session?\n", SKYPIAX_P_LOG);
-      }
-        
-      } else {
-      ERRORA("no tech_pvt?\n", SKYPIAX_P_LOG);
+        ERRORA("no tech_pvt?\n", SKYPIAX_P_LOG);
       }
-    p->interface_state = SKYPIAX_STATE_DOWN;
-    global_session = NULL;    //FIXME
+      p->interface_state = SKYPIAX_STATE_DOWN;
+      global_session = NULL;    //FIXME
     }
   }
 
@@ -802,14 +802,13 @@
       if (name) {
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "name=%s\n", name);
       }
-
 #ifndef WIN32
-  if (!XInitThreads()) {
-    ERRORA("Not initialized XInitThreads!\n", SKYPIAX_P_LOG);
-  } else {
-    DEBUGA_SKYPE("Initialized XInitThreads!\n", SKYPIAX_P_LOG);
-  }
-  switch_sleep(100);
+      if (!XInitThreads()) {
+        ERRORA("Not initialized XInitThreads!\n", SKYPIAX_P_LOG);
+      } else {
+        DEBUGA_SKYPE("Initialized XInitThreads!\n", SKYPIAX_P_LOG);
+      }
+      switch_sleep(100);
 #endif /* WIN32 */
 
       if (interface_id && interface_id < SKYPIAX_MAX_INTERFACES) {
@@ -828,36 +827,45 @@
           switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].name, "N/A");
         }
 #ifdef WIN32
-		globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port = (unsigned short)atoi(tcp_cli_port);
-		globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port = (unsigned short)atoi(tcp_srv_port);
+        globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port =
+          (unsigned short) atoi(tcp_cli_port);
+        globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port =
+          (unsigned short) atoi(tcp_srv_port);
 #else /* WIN32 */
-		globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port = atoi(tcp_cli_port);
-		globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port = atoi(tcp_srv_port);
+        globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port = atoi(tcp_cli_port);
+        globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port = atoi(tcp_srv_port);
 #endif /* WIN32 */
         //switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port, tcp_cli_port);
         //switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port, tcp_srv_port);
-        switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].X11_display, X11_display);
-        switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].skype_user, skype_user);
-        switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].skype_password, skype_password);
+        switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].X11_display,
+                          X11_display);
+        switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].skype_user,
+                          skype_user);
+        switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].skype_password,
+                          skype_password);
         switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].context, context);
         switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].dialplan, dialplan);
 
-
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                           "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].X11_display=%s\n",
-                          interface_id, globals.SKYPIAX_INTERFACES[interface_id].X11_display);
+                          interface_id,
+                          globals.SKYPIAX_INTERFACES[interface_id].X11_display);
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                           "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].skype_user=%s\n",
-                          interface_id, globals.SKYPIAX_INTERFACES[interface_id].skype_user);
+                          interface_id,
+                          globals.SKYPIAX_INTERFACES[interface_id].skype_user);
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                           "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].skype_password=%s\n",
-                          interface_id, globals.SKYPIAX_INTERFACES[interface_id].skype_password);
+                          interface_id,
+                          globals.SKYPIAX_INTERFACES[interface_id].skype_password);
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                           "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port=%d\n",
-                          interface_id, globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port);
+                          interface_id,
+                          globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port);
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                           "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port=%d\n",
-                          interface_id, globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port);
+                          interface_id,
+                          globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port);
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                           "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].name=%s\n",
                           interface_id, globals.SKYPIAX_INTERFACES[interface_id].name);
@@ -866,15 +874,18 @@
                           interface_id, globals.SKYPIAX_INTERFACES[interface_id].context);
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                           "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].dialplan=%s\n",
-                          interface_id, globals.SKYPIAX_INTERFACES[interface_id].dialplan);
+                          interface_id,
+                          globals.SKYPIAX_INTERFACES[interface_id].dialplan);
         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO,
                           "STARTING interface_id=%d\n", interface_id);
 
         switch_threadattr_create(&do_skype_thd_attr, skypiax_module_pool);
         //switch_threadattr_detach_set(do_skype_thd_attr, 1);
         switch_threadattr_stacksize_set(do_skype_thd_attr, SWITCH_THREAD_STACKSIZE);
-        switch_thread_create(&globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_skype_thread_thread, do_skype_thd_attr, do_skype_thread,
-                             &globals.SKYPIAX_INTERFACES[interface_id], skypiax_module_pool);
+        switch_thread_create(&globals.SKYPIAX_INTERFACES[interface_id].
+                             skypiax_do_skype_thread_thread, do_skype_thd_attr,
+                             do_skype_thread, &globals.SKYPIAX_INTERFACES[interface_id],
+                             skypiax_module_pool);
 
         switch_sleep(100000);
 
@@ -883,10 +894,12 @@
         //switch_threadattr_detach_set(skypiax_do_controldev_thread_thd_attr, 1);
         switch_threadattr_stacksize_set(skypiax_do_controldev_thread_thd_attr,
                                         SWITCH_THREAD_STACKSIZE);
-        switch_thread_create(&globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_controldev_thread_thread,
+        switch_thread_create(&globals.SKYPIAX_INTERFACES[interface_id].
+                             skypiax_do_controldev_thread_thread,
                              skypiax_do_controldev_thread_thd_attr,
                              skypiax_do_controldev_thread,
-                             &globals.SKYPIAX_INTERFACES[interface_id], skypiax_module_pool);
+                             &globals.SKYPIAX_INTERFACES[interface_id],
+                             skypiax_module_pool);
 
         switch_sleep(1000000);
 
@@ -932,7 +945,7 @@
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_skypiax_load)
 {
-  struct skypiax_interface *p = NULL; //for logging
+  struct skypiax_interface *p = NULL;   //for logging
 
   skypiax_module_pool = pool;
 
@@ -966,58 +979,61 @@
   struct skypiax_interface *p = NULL;
   switch_status_t status;
   unsigned int howmany = 8;
-int interface_id;
+  int interface_id;
 
   //p = &globals.SKYPIAX_INTERFACES[2];
 
   running = 0;
 
-for(interface_id=0; interface_id < SKYPIAX_MAX_INTERFACES; interface_id++){
-  p = &globals.SKYPIAX_INTERFACES[interface_id];
+  for (interface_id = 0; interface_id < SKYPIAX_MAX_INTERFACES; interface_id++) {
+    p = &globals.SKYPIAX_INTERFACES[interface_id];
 
-if(globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_controldev_thread_thread){
+    if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_controldev_thread_thread) {
 #ifdef WIN32
-  switch_file_write(p->AsteriskHandlesAst.fdesc[1], "sciutati", &howmany);  // let's the controldev_thread die
+      switch_file_write(p->AsteriskHandlesAst.fdesc[1], "sciutati", &howmany);  // let's the controldev_thread die
 #else /* WIN32 */
-          write(p->AsteriskHandlesAst.fdesc[1], "sciutati", howmany);
+      write(p->AsteriskHandlesAst.fdesc[1], "sciutati", howmany);
 #endif /* WIN32 */
-  }
+    }
 
-if(globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_skype_thread_thread){
+    if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_skype_thread_thread) {
 #ifdef WIN32
-  if (SendMessage(p->AsteriskHandlesAst.win32_hInit_MainWindowHandle, WM_DESTROY, 0, 0) == FALSE) {   // let's the do_skype_thread die
-    ERRORA("WHY FALSE HERE? %d\n", SKYPIAX_P_LOG, GetLastError());
-  }
+      if (SendMessage(p->AsteriskHandlesAst.win32_hInit_MainWindowHandle, WM_DESTROY, 0, 0) == FALSE) { // let's the do_skype_thread die
+        ERRORA("WHY FALSE HERE? %d\n", SKYPIAX_P_LOG, GetLastError());
+      }
 #else
-  XEvent e;
-  Atom atom1 =
-    XInternAtom(p->AsteriskHandlesAst.disp, "SKYPECONTROLAPI_MESSAGE_BEGIN", False);
-  memset(&e, 0, sizeof(e));
-  e.xclient.type = ClientMessage;
-  e.xclient.message_type = atom1;   /*  leading message */
-  e.xclient.display = p->AsteriskHandlesAst.disp;
-  e.xclient.window = p->AsteriskHandlesAst.skype_win;
-  e.xclient.format = 8;
+      XEvent e;
+      Atom atom1 =
+        XInternAtom(p->AsteriskHandlesAst.disp, "SKYPECONTROLAPI_MESSAGE_BEGIN", False);
+      memset(&e, 0, sizeof(e));
+      e.xclient.type = ClientMessage;
+      e.xclient.message_type = atom1;   /*  leading message */
+      e.xclient.display = p->AsteriskHandlesAst.disp;
+      e.xclient.window = p->AsteriskHandlesAst.skype_win;
+      e.xclient.format = 8;
 
-  XSendEvent(p->AsteriskHandlesAst.disp, p->AsteriskHandlesAst.win, False, 0, &e);
-  XSync(p->AsteriskHandlesAst.disp, False);
+      XSendEvent(p->AsteriskHandlesAst.disp, p->AsteriskHandlesAst.win, False, 0, &e);
+      XSync(p->AsteriskHandlesAst.disp, False);
 #endif
-  }
-  while (x) {
-    x--;
-    switch_yield(20000);
-  }
-if(globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_controldev_thread_thread){
-  switch_thread_join(&status, globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_controldev_thread_thread);
-  }
-if(globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_skype_thread_thread){
-  switch_thread_join(&status, globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_skype_thread_thread);
-  }
+    }
+    while (x) {
+      x--;
+      switch_yield(20000);
+    }
+    if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_controldev_thread_thread) {
+      switch_thread_join(&status,
+                         globals.SKYPIAX_INTERFACES[interface_id].
+                         skypiax_do_controldev_thread_thread);
+    }
+    if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_do_skype_thread_thread) {
+      switch_thread_join(&status,
+                         globals.SKYPIAX_INTERFACES[interface_id].
+                         skypiax_do_skype_thread_thread);
+    }
   }
   return SWITCH_STATUS_SUCCESS;
 }
 
-
 /* For Emacs:
  * Local Variables:
  * mode:c

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h	Thu Jan  1 07:10:03 2009
@@ -136,7 +136,7 @@
   Window skype_win;
   Display *disp;
   Window win;
-int api_connected;
+  int api_connected;
   int fdesc[2];
 };
 #else //WIN32
@@ -144,11 +144,11 @@
 struct AsteriskHandles {
   HWND win32_hInit_MainWindowHandle;
   HWND win32_hGlobal_SkypeAPIWindowHandle;
-HINSTANCE win32_hInit_ProcessHandle;
-char win32_acInit_WindowClassName[128];
-UINT win32_uiGlobal_MsgID_SkypeControlAPIAttach;
-UINT win32_uiGlobal_MsgID_SkypeControlAPIDiscover;
-int api_connected;
+  HINSTANCE win32_hInit_ProcessHandle;
+  char win32_acInit_WindowClassName[128];
+  UINT win32_uiGlobal_MsgID_SkypeControlAPIAttach;
+  UINT win32_uiGlobal_MsgID_SkypeControlAPIDiscover;
+  int api_connected;
   switch_file_t *fdesc[2];
 };
 
@@ -195,10 +195,10 @@
 #ifdef WIN32
   switch_file_t *audiopipe[2];
   switch_file_t *audioskypepipe[2];
-#else /* WIN32 */
+#else                           /* WIN32 */
   int audiopipe[2];
   int audioskypepipe[2];
-#endif /* WIN32 */
+#endif                          /* WIN32 */
   switch_thread_t *tcp_srv_thread;
   switch_thread_t *tcp_cli_thread;
   switch_thread_t *skypiax_do_controldev_thread_thread;
@@ -247,4 +247,5 @@
 int skypiax_skype_write(struct skypiax_interface *p, char *msg_to_skype);
 int skypiax_skype_read(struct skypiax_interface *p);
 
-int skypiax_skype_call(struct skypiax_interface *p, char *idest, int timeout, switch_core_session_t * session);
+int skypiax_skype_call(struct skypiax_interface *p, char *idest, int timeout,
+                       switch_core_session_t * session);

Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c
==============================================================================
--- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c	(original)
+++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c	Thu Jan  1 07:10:03 2009
@@ -6,23 +6,17 @@
 extern switch_endpoint_interface_t *skypiax_endpoint_interface;
 extern int running;
 
-
-
 /**********************************************************/
 /**********************************************************/
 /**********************************************************/
 
-
 extern switch_core_session_t *global_session;
 
-
 #ifdef WIN32
 #else /* NOT WIN32 */
 #define SKYPE_X11_BUF_SIZE 512
 #endif /* WIN32 */
 
-
-
 /**********************************************************/
 /**********************************************************/
 /**********************************************************/
@@ -57,27 +51,26 @@
   short totalbuf[SAMPLES_PER_FRAME];
   //int one = 1;
 
-  if (option_debug > 10) {
-    WARNINGA("ENTERING FUNC\n", SKYPIAX_P_LOG);
+  if (option_debug > 100) {
+    DEBUGA_SKYPE("ENTERING FUNC\n", SKYPIAX_P_LOG);
   }
   memset(&my_addr, 0, sizeof(my_addr));
   my_addr.sin_family = AF_INET;
   my_addr.sin_addr.s_addr = htonl(0x7f000001);  /* use the localhost */
-  my_addr.sin_port = htons(p->tcp_srv_port);   
+  my_addr.sin_port = htons(p->tcp_srv_port);
 
   if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
     ERRORA("socket Error\n", SKYPIAX_P_LOG);
-    if (option_debug > 10) {
+    if (option_debug > 100) {
       DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
     }
     return NULL;
   }
-
   //setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
 
   if (bind(s, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) < 0) {
     ERRORA("bind Error\n", SKYPIAX_P_LOG);
-    if (option_debug > 10) {
+    if (option_debug > 100) {
       DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
     }
     return NULL;
@@ -111,152 +104,147 @@
       fdselect = fd;
       FD_ZERO(&fs);
       FD_SET(fdselect, &fs);
-      to.tv_usec = 2000000; //20 msec
+      to.tv_usec = 2000000;     //20 msec
       to.tv_sec = 0;
 
       rt = select(fdselect + 1, &fs, NULL, NULL, &to);
-	  //rt=0;
+      //rt=0;
       if (rt > 0) {
 
 #ifdef WIN32
-	      len = recv(fd, (char *)srv_in, 320, 0); //seems that Skype only sends 320 bytes at time
+        len = recv(fd, (char *) srv_in, 320, 0);    //seems that Skype only sends 320 bytes at time
 #else /* WIN32 */
-	      len = recv(fd, (char *)srv_in, 320, 0); //seems that Skype only sends 320 bytes at time
+        len = recv(fd, (char *) srv_in, 320, 0);    //seems that Skype only sends 320 bytes at time
 #endif /* WIN32 */
 
-		  if ((SAMPLERATE_SKYPIAX - 8000) == 0) {
+        if ((SAMPLERATE_SKYPIAX - 8000) == 0) {
 
-		      /****************************************************************/
-		      if (len > 0) {
-			      a = 0;
-			      for (i = 0; i < len / sizeof(short); i++) {
-				      srv_out[a] = srv_in[i];
-				      i++;
-				      a++;
-			      }
-
-			      if (!p->audiobuf_is_loaded) {
-				      for (i = 0; i < (len / sizeof(short)) / 2; i++) {
-					      p->audiobuf[i] = srv_out[i];
-				      }
-				      p->audiobuf_is_loaded = 1;
-			      } else {
-				      unsigned int howmany;
-
-				      howmany = len / 2 / 2;
-				      for (i = 0; i < howmany; i++)
-					      totalbuf[i] = p->audiobuf[i];
-
-				      howmany = len / 2 / 2;
-				      for (a = 0; a < howmany; a++) {
-					      totalbuf[i] = srv_out[a];
-					      i++;
-				      }
+              /****************************************************************/
+          if (len > 0) {
+            a = 0;
+            for (i = 0; i < len / sizeof(short); i++) {
+              srv_out[a] = srv_in[i];
+              i++;
+              a++;
+            }
 
-				      howmany = len;
+            if (!p->audiobuf_is_loaded) {
+              for (i = 0; i < (len / sizeof(short)) / 2; i++) {
+                p->audiobuf[i] = srv_out[i];
+              }
+              p->audiobuf_is_loaded = 1;
+            } else {
+              unsigned int howmany;
 
-#ifdef WIN32 
-				      switch_file_write(p->audiopipe[1], totalbuf, &howmany);
-#else /* WIN32 */
-				      howmany = write(p->audiopipe[1], totalbuf, howmany);
-#endif /* WIN32 */
-				      p->audiobuf_is_loaded = 0;
-				      //DEBUGA_SKYPE("read=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, sizeof(short)*SAMPLES_PER_FRAME, len, (len*sizeof(short))/2, howmany);
-			      }
-
-		      } else if (len == 0) {
-			      DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG);
-				  switch_sleep(1000);
-		      } else {
-			      ERRORA("len=%d\n", SKYPIAX_P_LOG, len);
-			      exit = 1;
-			      break;
-		      }
-		      /****************************************************************/
-	      } else if (SAMPLERATE_SKYPIAX == 16000) {
-
-
-		      /****************************************************************/
-		      if (len > 0) {
-			      if (len == SAMPLES_PER_FRAME * sizeof(short)) {
-				      unsigned int howmany;
-				      howmany = len;
+              howmany = len / 2 / 2;
+              for (i = 0; i < howmany; i++)
+                totalbuf[i] = p->audiobuf[i];
+
+              howmany = len / 2 / 2;
+              for (a = 0; a < howmany; a++) {
+                totalbuf[i] = srv_out[a];
+                i++;
+              }
 
-						WARNINGA("SRV recv %d\n", SKYPIAX_P_LOG, len);
+              howmany = len;
 
-#ifdef WIN32 
-				      switch_file_write(p->audiopipe[1], srv_in, &howmany);
+#ifdef WIN32
+              switch_file_write(p->audiopipe[1], totalbuf, &howmany);
 #else /* WIN32 */
-				      howmany = write(p->audiopipe[1], srv_in, howmany);
+              howmany = write(p->audiopipe[1], totalbuf, howmany);
 #endif /* WIN32 */
-				      p->audiobuf_is_loaded = 0;
-				      WARNINGA("SRV PIPE WRITE=====> req=%lu recv=%d to sent=%d sent=%u\n", SKYPIAX_P_LOG, sizeof(short)*SAMPLES_PER_FRAME, len, len, howmany);
-			      }else if (len == SAMPLES_PER_FRAME * sizeof(short) / 2) {
+              p->audiobuf_is_loaded = 0;
+              //DEBUGA_SKYPE("read=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, sizeof(short)*SAMPLES_PER_FRAME, len, (len*sizeof(short))/2, howmany);
+            }
 
-#if 1
+          } else if (len == 0) {
+            DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG);
+            switch_sleep(1000);
+          } else {
+            ERRORA("len=%d\n", SKYPIAX_P_LOG, len);
+            exit = 1;
+            break;
+          }
+              /****************************************************************/
+        } else if (SAMPLERATE_SKYPIAX == 16000) {
 
+              /****************************************************************/
+          if (len > 0) {
+            if (len == SAMPLES_PER_FRAME * sizeof(short)) {
+              unsigned int howmany;
+              howmany = len;
 
-				      if (!p->audiobuf_is_loaded) {
-					      for (i = 0; i < (len / sizeof(short)); i++) {
-						      p->audiobuf[i] = srv_in[i];
-					      }
-					      p->audiobuf_is_loaded = 1;
-				      } else {
-					      unsigned int howmany = SAMPLES_PER_FRAME * sizeof(short);
-					      //short totalbuf[SAMPLES_PER_FRAME];
-
-					      for (i = 0; i < (len / sizeof(short)); i++)
-						      totalbuf[i] = p->audiobuf[i];
-					      for (a = 0; a < (len / sizeof(short)); a++) {
-						      totalbuf[i] = srv_in[a];
-						      i++;
-					      }
+              WARNINGA("SRV recv %d\n", SKYPIAX_P_LOG, len);
 
-#ifdef WIN32 
-					      switch_file_write(p->audiopipe[1], totalbuf, &howmany);
+#ifdef WIN32
+              switch_file_write(p->audiopipe[1], srv_in, &howmany);
 #else /* WIN32 */
-					      howmany = write(p->audiopipe[1], totalbuf, howmany);
+              howmany = write(p->audiopipe[1], srv_in, howmany);
 #endif /* WIN32 */
-					      p->audiobuf_is_loaded = 0;
-					      //NOTICA("SRV PIPE WRITE=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, SAMPLES_PER_FRAME * sizeof(short), len, SAMPLES_PER_FRAME * sizeof(short), howmany);
-				      }
-#endif
-
+              p->audiobuf_is_loaded = 0;
+              WARNINGA("SRV PIPE WRITE=====> req=%lu recv=%d to sent=%d sent=%u\n",
+                       SKYPIAX_P_LOG, sizeof(short) * SAMPLES_PER_FRAME, len, len,
+                       howmany);
+            } else if (len == SAMPLES_PER_FRAME * sizeof(short) / 2) {
 
+#if 1
 
+              if (!p->audiobuf_is_loaded) {
+                for (i = 0; i < (len / sizeof(short)); i++) {
+                  p->audiobuf[i] = srv_in[i];
+                }
+                p->audiobuf_is_loaded = 1;
+              } else {
+                unsigned int howmany = SAMPLES_PER_FRAME * sizeof(short);
+                //short totalbuf[SAMPLES_PER_FRAME];
 
-			      } else {
+                for (i = 0; i < (len / sizeof(short)); i++)
+                  totalbuf[i] = p->audiobuf[i];
+                for (a = 0; a < (len / sizeof(short)); a++) {
+                  totalbuf[i] = srv_in[a];
+                  i++;
+                }
 
-			      ERRORA("SRV len=%d\n", SKYPIAX_P_LOG, len);
+#ifdef WIN32
+                switch_file_write(p->audiopipe[1], totalbuf, &howmany);
+#else /* WIN32 */
+                howmany = write(p->audiopipe[1], totalbuf, howmany);
+#endif /* WIN32 */
+                p->audiobuf_is_loaded = 0;
+                //NOTICA("SRV PIPE WRITE=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, SAMPLES_PER_FRAME * sizeof(short), len, SAMPLES_PER_FRAME * sizeof(short), howmany);
+              }
+#endif
 
-				}
+            } else {
 
-		      } else if (len == 0) {
-			      DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG);
-				  switch_sleep(1000);
-			      //break;
-		      } else {
-			      ERRORA("SRV len=%d\n", SKYPIAX_P_LOG, len);
-			      exit = 1;
-			      break;
-		      }
-		      /****************************************************************/
+              ERRORA("SRV len=%d\n", SKYPIAX_P_LOG, len);
 
+            }
 
+          } else if (len == 0) {
+            DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG);
+            switch_sleep(1000);
+            //break;
+          } else {
+            ERRORA("SRV len=%d\n", SKYPIAX_P_LOG, len);
+            exit = 1;
+            break;
+          }
+              /****************************************************************/
 
-	      } else {
+        } else {
 
-		      ERRORA("SAMPLERATE_SKYPIAX can only be 8000 or 16000\n", SKYPIAX_P_LOG);
-	      }
+          ERRORA("SAMPLERATE_SKYPIAX can only be 8000 or 16000\n", SKYPIAX_P_LOG);
+        }
       } else {
 
-		  if(rt)
-			ERRORA("SRV rt=%d\n", SKYPIAX_P_LOG, rt);
-		  switch_sleep(10000);
-	  }
+        if (rt)
+          ERRORA("SRV rt=%d\n", SKYPIAX_P_LOG, rt);
+        switch_sleep(10000);
+      }
     }
 
-#ifdef WIN32 
+#ifdef WIN32
     kill_cli_size = SAMPLES_PER_FRAME * sizeof(short);
     switch_file_write(p->audiopipe[1], kill_cli_buff, &kill_cli_size);
     kill_cli_size = SAMPLES_PER_FRAME * sizeof(short);
@@ -295,7 +283,7 @@
 #else
   closesocket(s);
 #endif
-  if (option_debug > 10) {
+  if (option_debug > 100) {
     DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
   }
   return NULL;
@@ -328,27 +316,26 @@
 #endif /* WIN32 */
   //int one = 1;
 
-  if (option_debug > 10) {
-    WARNINGA("ENTERING FUNC\n", SKYPIAX_P_LOG);
+  if (option_debug > 100) {
+    DEBUGA_SKYPE("ENTERING FUNC\n", SKYPIAX_P_LOG);
   }
   memset(&my_addr, 0, sizeof(my_addr));
   my_addr.sin_family = AF_INET;
   my_addr.sin_addr.s_addr = htonl(0x7f000001);  /* use the localhost */
-  my_addr.sin_port = htons(p->tcp_cli_port);   //FIXME configurable!
+  my_addr.sin_port = htons(p->tcp_cli_port);    //FIXME configurable!
 
   if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
     ERRORA("socket Error\n", SKYPIAX_P_LOG);
-    if (option_debug > 10) {
+    if (option_debug > 100) {
       DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
     }
     return NULL;
   }
-
   //setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
 
   if (bind(s, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) < 0) {
     ERRORA("bind Error\n", SKYPIAX_P_LOG);
-    if (option_debug > 10) {
+    if (option_debug > 100) {
       DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
     }
 #ifndef WIN32
@@ -382,99 +369,99 @@
       if (!running)
         break;
 #ifdef WIN32
-      fdselect = fd; //cannot select on audioskypepipe, let's select on socket write
+      fdselect = fd;            //cannot select on audioskypepipe, let's select on socket write
 #else /* WIN32 */
       fdselect = p->audioskypepipe[0];
 #endif /* WIN32 */
       FD_ZERO(&fs);
       FD_SET(fdselect, &fs);
-      to.tv_usec = 2000000; //20 msec
+      to.tv_usec = 2000000;     //20 msec
       to.tv_sec = 0;
 
 #ifdef WIN32
-      rt = select(fdselect + 1, NULL, &fs, NULL, &to);//cannot select on audioskypepipe, let's select on socket write
+      rt = select(fdselect + 1, NULL, &fs, NULL, &to);  //cannot select on audioskypepipe, let's select on socket write
 #else /* WIN32 */
       rt = select(fdselect + 1, &fs, NULL, NULL, &to);
 #endif /* WIN32 */
-	  //switch_sleep(1000);//FIXME
-	  //memset(cli_in, '\0', sizeof(cli_in));
+      //switch_sleep(1000);//FIXME
+      //memset(cli_in, '\0', sizeof(cli_in));
       //rt = 0;
-	  if (rt > 0) {
-			  /*********************************************/
-		  if ((SAMPLERATE_SKYPIAX - 8000) == 0) {
-			  got = SAMPLES_PER_FRAME * sizeof(short);
-#ifdef WIN32 
-			  switch_file_read(p->audioskypepipe[0], cli_in, &got);
+      if (rt > 0) {
+              /*********************************************/
+        if ((SAMPLERATE_SKYPIAX - 8000) == 0) {
+          got = SAMPLES_PER_FRAME * sizeof(short);
+#ifdef WIN32
+          switch_file_read(p->audioskypepipe[0], cli_in, &got);
 #else /* WIN32 */
-			  got = read(p->audioskypepipe[0], cli_in, got);
+          got = read(p->audioskypepipe[0], cli_in, got);
 #endif /* WIN32 */
 
-			  if (got > 0) {
-				  //DEBUGA_SKYPE("CLI PIPE read %d\n", SKYPIAX_P_LOG, got);
-				  a = 0;
-				  for (i = 0; i < got / sizeof(short); i++) {
-					  cli_out[a] = cli_in[i];
-					  a++;
-					  cli_out[a] = cli_in[i];
-					  a++;
-				  }
+          if (got > 0) {
+            //DEBUGA_SKYPE("CLI PIPE read %d\n", SKYPIAX_P_LOG, got);
+            a = 0;
+            for (i = 0; i < got / sizeof(short); i++) {
+              cli_out[a] = cli_in[i];
+              a++;
+              cli_out[a] = cli_in[i];
+              a++;
+            }
 
 #ifdef WIN32
-				  len = send(fd, (char *)cli_out, got * 2, 0);
+            len = send(fd, (char *) cli_out, got * 2, 0);
 #else /* WIN32 */
-				  len = send(fd, cli_out, got * 2, 0);
+            len = send(fd, cli_out, got * 2, 0);
 #endif /* WIN32 */
-				  //DEBUGA_SKYPE("CLI PIPE send %d\n", SKYPIAX_P_LOG, len);
+            //DEBUGA_SKYPE("CLI PIPE send %d\n", SKYPIAX_P_LOG, len);
 
-				  if (len == 0) {
-					  ERRORA("Skype server GONE\n", SKYPIAX_P_LOG);
-					  break;
-				  }
-			  } else {
-				  switch_sleep(1000);
-				  ERRORA("CLI PIPE give us: %u\n", SKYPIAX_P_LOG, got);
-				  //break;
-			  }
-		  }
-		  /*********************************************/
-			  /*********************************************/
-		  else if (SAMPLERATE_SKYPIAX == 16000) {
-			  got = SAMPLES_PER_FRAME * sizeof(short);
-#ifdef WIN32 
-			  switch_file_read(p->audioskypepipe[0], cli_in, &got);
+            if (len == 0) {
+              ERRORA("Skype server GONE\n", SKYPIAX_P_LOG);
+              break;
+            }
+          } else {
+            switch_sleep(1000);
+            ERRORA("CLI PIPE give us: %u\n", SKYPIAX_P_LOG, got);
+            //break;
+          }
+        }
+          /*********************************************/
+              /*********************************************/
+        else if (SAMPLERATE_SKYPIAX == 16000) {
+          got = SAMPLES_PER_FRAME * sizeof(short);
+#ifdef WIN32
+          switch_file_read(p->audioskypepipe[0], cli_in, &got);
 #else /* WIN32 */
-			  got = read(p->audioskypepipe[0], cli_in, got);
+          got = read(p->audioskypepipe[0], cli_in, got);
 #endif /* WIN32 */
 
-			  if (got > 0) {
-				  if(got != SAMPLES_PER_FRAME * sizeof(short) )
-					ERRORA("CLI PIPE read %d\n", SKYPIAX_P_LOG, got);
+          if (got > 0) {
+            if (got != SAMPLES_PER_FRAME * sizeof(short))
+              ERRORA("CLI PIPE read %d\n", SKYPIAX_P_LOG, got);
 
 #ifdef WIN32
-				  len = send(fd, (char *)cli_in, got, 0);
+            len = send(fd, (char *) cli_in, got, 0);
 #else /* WIN32 */
-				  len = send(fd, cli_in, got, 0);
+            len = send(fd, cli_in, got, 0);
 #endif /* WIN32 */
 
-				  if(len != got )
-					ERRORA("CLI PIPE send %d\n", SKYPIAX_P_LOG, len);
+            if (len != got && len != -1)
+              DEBUGA_SKYPE("CLI PIPE send %d\n", SKYPIAX_P_LOG, len);
 
-				  if (len == 0) {
-					  ERRORA("Skype server GONE\n", SKYPIAX_P_LOG);
-					  break;
-				  }
-			  } else {
-				  switch_sleep(1000);
-				  ERRORA("CLI PIPE give us: %u\n", SKYPIAX_P_LOG, got);
-			  }
-		  }
-		  /*********************************************/
-
-	  } else {
-				  switch_sleep(1000);
-				  if(rt)
-					ERRORA("select give us: %u\n", SKYPIAX_P_LOG, rt);
-			  }
+            if (len == 0) {
+              ERRORA("Skype server GONE\n", SKYPIAX_P_LOG);
+              break;
+            }
+          } else {
+            switch_sleep(1000);
+            ERRORA("CLI PIPE give us: %u\n", SKYPIAX_P_LOG, got);
+          }
+        }
+          /*********************************************/
+
+      } else {
+        switch_sleep(1000);
+        if (rt)
+          ERRORA("select give us: %u\n", SKYPIAX_P_LOG, rt);
+      }
 
     }
     DEBUGA_SKYPE("Skype server GONE\n", SKYPIAX_P_LOG);
@@ -492,7 +479,7 @@
 #else
   closesocket(s);
 #endif
-  if (option_debug > 10) {
+  if (option_debug > 100) {
     DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
   }
   return NULL;
@@ -501,13 +488,12 @@
 int skypiax_skypeaudio_init(struct skypiax_interface *p)
 {
 
-
 #ifdef WIN32
   switch_status_t rv;
+  rv = switch_file_pipe_create(&p->audiopipe[0], &p->audiopipe[1], skypiax_module_pool);
   rv =
-    switch_file_pipe_create(&p->audiopipe[0], &p->audiopipe[1], skypiax_module_pool);
-  rv =
-    switch_file_pipe_create(&p->audioskypepipe[0], &p->audioskypepipe[1], skypiax_module_pool);
+    switch_file_pipe_create(&p->audioskypepipe[0], &p->audioskypepipe[1],
+                            skypiax_module_pool);
 #else /* WIN32 */
   pipe(p->audiopipe);
   fcntl(p->audiopipe[0], F_SETFL, O_NONBLOCK);
@@ -539,7 +525,6 @@
   struct timeval to;
 #endif /* WIN32 */
 
-
   p = tech_pvt->p;
 
   //DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG);
@@ -551,7 +536,7 @@
   fdselect = p->audiopipe[0];
   FD_ZERO(&fs);
   FD_SET(fdselect, &fs);
-  to.tv_usec = 2000000; //20 msec
+  to.tv_usec = 2000000;         //20 msec
   to.tv_sec = 0;
   rt = select(fdselect + 1, &fs, NULL, NULL, &to);
 #endif /* WIN32 */
@@ -564,14 +549,14 @@
     switch_file_read(p->audiopipe[0], tech_pvt->read_frame.data, &samples);
 #else /* WIN32 */
 
-	//samples = read(p->audiopipe[0], buf, SAMPLES_PER_FRAME * sizeof(short));
+    //samples = read(p->audiopipe[0], buf, SAMPLES_PER_FRAME * sizeof(short));
     samples = read(p->audiopipe[0], tech_pvt->read_frame.data, samples);
 #endif /* WIN32 */
 
     if (samples != SAMPLES_PER_FRAME * sizeof(short)) {
       if (samples)
         ERRORA("SRV PIPE READ=====> NOT GOOD samples=%u expected=%lu\n", SKYPIAX_P_LOG,
-                     samples, SAMPLES_PER_FRAME * sizeof(short));
+               samples, SAMPLES_PER_FRAME * sizeof(short));
       //do nothing
     } else {
       tech_pvt->read_frame.datalen = samples;
@@ -579,8 +564,8 @@
       /* A real frame */
     }
   } else {
-	  if(rt)
-		DEBUGA_SKYPE("select returned %d\n", SKYPIAX_P_LOG, rt);
+    if (rt)
+      DEBUGA_SKYPE("select returned %d\n", SKYPIAX_P_LOG, rt);
 
   }
 
@@ -589,38 +574,32 @@
   return SWITCH_STATUS_SUCCESS;
 }
 
-
 #ifdef WIN32
 int LaunchSkype(struct skypiax_interface *p)
 {
-	LPTSTR pszMessage;
-	DWORD dwLastError; 
-	char skypelogin[256];
-
-	memset(skypelogin, '\0', sizeof(skypelogin));
-	sprintf(skypelogin, "/secondary /username:%s /password:%s", p->skype_user, p->skype_password);
-
-
-	ShellExecute(NULL, "open", "C:\\Program Files\\Skype\\Phone\\Skype.exe", skypelogin, ".", SW_SHOWNORMAL);
-
-	dwLastError = GetLastError();
-
-	FormatMessage(
-			FORMAT_MESSAGE_ALLOCATE_BUFFER | 
-			FORMAT_MESSAGE_FROM_SYSTEM |
-			FORMAT_MESSAGE_IGNORE_INSERTS,
-			NULL,
-			dwLastError,
-			MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-			(LPTSTR)&pszMessage,
-			0, NULL );
-
-	NOTICA("ShellExecute gave: %s\n", SKYPIAX_P_LOG,pszMessage);
-	LocalFree(pszMessage);
-	return 1;
+  LPTSTR pszMessage;
+  DWORD dwLastError;
+  char skypelogin[256];
+
+  memset(skypelogin, '\0', sizeof(skypelogin));
+  sprintf(skypelogin, "/secondary /username:%s /password:%s", p->skype_user,
+          p->skype_password);
+
+  ShellExecute(NULL, "open", "C:\\Program Files\\Skype\\Phone\\Skype.exe", skypelogin,
+               ".", SW_SHOWNORMAL);
+
+  dwLastError = GetLastError();
+
+  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
+                FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwLastError, MAKELANGID(LANG_NEUTRAL,
+                                                                             SUBLANG_DEFAULT),
+                (LPTSTR) & pszMessage, 0, NULL);
 
-}
+  NOTICA("ShellExecute gave: %s\n", SKYPIAX_P_LOG, pszMessage);
+  LocalFree(pszMessage);
+  return 1;
 
+}
 
 enum {
   SKYPECONTROLAPI_ATTACH_SUCCESS = 0,   /*  Client is successfully 
@@ -673,11 +652,11 @@
 
   lReturnCode = 0;
   fIssueDefProc = 0;
-	  p = ( struct skypiax_interface *)GetWindowLong(hWindow, GWL_USERDATA);
+  p = (struct skypiax_interface *) GetWindowLong(hWindow, GWL_USERDATA);
   switch (uiMessage) {
   case WM_CREATE:
-	  p=( struct skypiax_interface *)((LPCREATESTRUCT)ulParam)->lpCreateParams;
-	  SetWindowLong(hWindow, GWL_USERDATA, (LONG)p);
+    p = (struct skypiax_interface *) ((LPCREATESTRUCT) ulParam)->lpCreateParams;
+    SetWindowLong(hWindow, GWL_USERDATA, (LONG) p);
     DEBUGA_SKYPE("got CREATE\n", SKYPIAX_P_LOG);
     break;
   case WM_DESTROY:
@@ -703,50 +682,52 @@
     }
     break;
   default:
-    if(p && p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIAttach) {
-    if (uiMessage == p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIAttach) {
-      switch (ulParam) {
-      case SKYPECONTROLAPI_ATTACH_SUCCESS:
-	if(!p->AsteriskHandlesAst.api_connected){
-        NOTICA("\n\n\tConnected to Skype API!\n", SKYPIAX_P_LOG);
-        p->AsteriskHandlesAst.win32_hGlobal_SkypeAPIWindowHandle = (HWND) uiParam;
-        //switch_sleep(5000);
-        p->AsteriskHandlesAst.win32_hGlobal_SkypeAPIWindowHandle =
-          p->AsteriskHandlesAst.win32_hGlobal_SkypeAPIWindowHandle;
-	}
-        break;
-      case SKYPECONTROLAPI_ATTACH_PENDING_AUTHORIZATION:
-        WARNINGA
-          ("\n\n\tIf I do not (almost) immediately connect to Skype API,\n\tplease give the Skype client authorization to be connected \n\tby Asterisk and to not ask you again.\n\n",
-           SKYPIAX_P_LOG);
-        switch_sleep(5000);
-	if(!p->AsteriskHandlesAst.api_connected){
-        SendMessage
-            (HWND_BROADCAST, p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
-             (WPARAM) p->AsteriskHandlesAst.win32_hInit_MainWindowHandle, 0);
-	}
-        break;
-      case SKYPECONTROLAPI_ATTACH_REFUSED:
-        ERRORA("Skype client refused to be connected by Skypiax!\n", SKYPIAX_P_LOG);
-        break;
-      case SKYPECONTROLAPI_ATTACH_NOT_AVAILABLE:
-        ERRORA("Skype API not (yet?) available\n", SKYPIAX_P_LOG);
-        break;
-      case SKYPECONTROLAPI_ATTACH_API_AVAILABLE:
-        DEBUGA_SKYPE("Skype API available\n", SKYPIAX_P_LOG);
-        switch_sleep(5000);
-	if(!p->AsteriskHandlesAst.api_connected){
-        SendMessage
-            (HWND_BROADCAST, p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
-             (WPARAM) p->AsteriskHandlesAst.win32_hInit_MainWindowHandle, 0);
-	}
+    if (p && p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIAttach) {
+      if (uiMessage == p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIAttach) {
+        switch (ulParam) {
+        case SKYPECONTROLAPI_ATTACH_SUCCESS:
+          if (!p->AsteriskHandlesAst.api_connected) {
+            NOTICA("\n\n\tConnected to Skype API!\n", SKYPIAX_P_LOG);
+            p->AsteriskHandlesAst.win32_hGlobal_SkypeAPIWindowHandle = (HWND) uiParam;
+            //switch_sleep(5000);
+            p->AsteriskHandlesAst.win32_hGlobal_SkypeAPIWindowHandle =
+              p->AsteriskHandlesAst.win32_hGlobal_SkypeAPIWindowHandle;
+          }
+          break;
+        case SKYPECONTROLAPI_ATTACH_PENDING_AUTHORIZATION:
+          WARNINGA
+            ("\n\n\tIf I do not (almost) immediately connect to Skype API,\n\tplease give the Skype client authorization to be connected \n\tby Asterisk and to not ask you again.\n\n",
+             SKYPIAX_P_LOG);
+          switch_sleep(5000);
+          if (!p->AsteriskHandlesAst.api_connected) {
+            SendMessage(HWND_BROADCAST,
+                        p->AsteriskHandlesAst.
+                        win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
+                        (WPARAM) p->AsteriskHandlesAst.win32_hInit_MainWindowHandle, 0);
+          }
+          break;
+        case SKYPECONTROLAPI_ATTACH_REFUSED:
+          ERRORA("Skype client refused to be connected by Skypiax!\n", SKYPIAX_P_LOG);
+          break;
+        case SKYPECONTROLAPI_ATTACH_NOT_AVAILABLE:
+          ERRORA("Skype API not (yet?) available\n", SKYPIAX_P_LOG);
+          break;
+        case SKYPECONTROLAPI_ATTACH_API_AVAILABLE:
+          DEBUGA_SKYPE("Skype API available\n", SKYPIAX_P_LOG);
+          switch_sleep(5000);
+          if (!p->AsteriskHandlesAst.api_connected) {
+            SendMessage(HWND_BROADCAST,
+                        p->AsteriskHandlesAst.
+                        win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
+                        (WPARAM) p->AsteriskHandlesAst.win32_hInit_MainWindowHandle, 0);
+          }
+          break;
+        default:
+          WARNINGA("GOT AN UNKNOWN SKYPE WINDOWS MSG\n", SKYPIAX_P_LOG);
+        }
+        lReturnCode = 1;
         break;
-      default:
-        WARNINGA("GOT AN UNKNOWN SKYPE WINDOWS MSG\n", SKYPIAX_P_LOG);
       }
-      lReturnCode = 1;
-      break;
-    }
     }
     fIssueDefProc = 1;
     break;
@@ -793,20 +774,24 @@
     }
   }
   if (fReturnStatus == 0)
-    CloseHandle(p->AsteriskHandlesAst.win32_hInit_ProcessHandle), p->AsteriskHandlesAst.win32_hInit_ProcessHandle = NULL;
+    CloseHandle(p->AsteriskHandlesAst.win32_hInit_ProcessHandle),
+      p->AsteriskHandlesAst.win32_hInit_ProcessHandle = NULL;
   return (fReturnStatus);
 }
 
 void win32_DeInitialize_DestroyWindowClass(struct skypiax_interface *p)
 {
-  UnregisterClass(p->AsteriskHandlesAst.win32_acInit_WindowClassName, p->AsteriskHandlesAst.win32_hInit_ProcessHandle);
-  CloseHandle(p->AsteriskHandlesAst.win32_hInit_ProcessHandle), p->AsteriskHandlesAst.win32_hInit_ProcessHandle = NULL;
+  UnregisterClass(p->AsteriskHandlesAst.win32_acInit_WindowClassName,
+                  p->AsteriskHandlesAst.win32_hInit_ProcessHandle);
+  CloseHandle(p->AsteriskHandlesAst.win32_hInit_ProcessHandle),
+    p->AsteriskHandlesAst.win32_hInit_ProcessHandle = NULL;
 }
 
 int win32_Initialize_CreateMainWindow(struct skypiax_interface *p)
 {
   p->AsteriskHandlesAst.win32_hInit_MainWindowHandle =
-    CreateWindowEx(WS_EX_APPWINDOW | WS_EX_WINDOWEDGE, p->AsteriskHandlesAst.win32_acInit_WindowClassName, "",
+    CreateWindowEx(WS_EX_APPWINDOW | WS_EX_WINDOWEDGE,
+                   p->AsteriskHandlesAst.win32_acInit_WindowClassName, "",
                    WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT,
                    128, 128, NULL, 0, p->AsteriskHandlesAst.win32_hInit_ProcessHandle, p);
   return (p->AsteriskHandlesAst.win32_hInit_MainWindowHandle != NULL ? 1 : 0);
@@ -815,7 +800,8 @@
 void win32_DeInitialize_DestroyMainWindow(struct skypiax_interface *p)
 {
   if (p->AsteriskHandlesAst.win32_hInit_MainWindowHandle != NULL)
-    DestroyWindow(p->AsteriskHandlesAst.win32_hInit_MainWindowHandle), p->AsteriskHandlesAst.win32_hInit_MainWindowHandle = NULL;
+    DestroyWindow(p->AsteriskHandlesAst.win32_hInit_MainWindowHandle),
+      p->AsteriskHandlesAst.win32_hInit_MainWindowHandle = NULL;
 }
 
 DWORD win32_dwThreadId;
@@ -835,19 +821,17 @@
   //DWORD MsgWaitResult;
   p = obj;
 
-
-
-  switch_file_pipe_create(&p->AsteriskHandlesAst.fdesc[0], &p->AsteriskHandlesAst.fdesc[1], skypiax_module_pool);
+  switch_file_pipe_create(&p->AsteriskHandlesAst.fdesc[0],
+                          &p->AsteriskHandlesAst.fdesc[1], skypiax_module_pool);
   //switch_file_pipe_timeout_set(p->AsteriskHandlesAst.fdesc[0], 100);
 
-
   p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIAttach =
     RegisterWindowMessage("SkypeControlAPIAttach");
   p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIDiscover =
     RegisterWindowMessage("SkypeControlAPIDiscover");
 
   LaunchSkype(p);
-	switch_sleep(2000000);
+  switch_sleep(2000000);
 
   if (p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIAttach != 0
       && p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIDiscover != 0) {
@@ -855,7 +839,8 @@
       if (win32_Initialize_CreateMainWindow(p)) {
 #if 1
         if (SendMessage
-            (HWND_BROADCAST, p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
+            (HWND_BROADCAST,
+             p->AsteriskHandlesAst.win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
              (WPARAM) p->AsteriskHandlesAst.win32_hInit_MainWindowHandle, 0) != 0) {
 #else
 
@@ -974,8 +959,10 @@
   //X11_errors_trap();
   //XLockDisplay(disp);
   status =
-    XGetWindowProperty(AsteriskHandlesAst->disp, DefaultRootWindow(AsteriskHandlesAst->disp), skype_inst, 0, 1, False, XA_WINDOW,
-                       &type_ret, &format_ret, &nitems_ret, &bytes_after_ret, &prop);
+    XGetWindowProperty(AsteriskHandlesAst->disp,
+                       DefaultRootWindow(AsteriskHandlesAst->disp), skype_inst, 0, 1,
+                       False, XA_WINDOW, &type_ret, &format_ret, &nitems_ret,
+                       &bytes_after_ret, &prop);
   //XUnlockDisplay(disp);
   //X11_errors_untrap();
 
@@ -1053,7 +1040,7 @@
   //FIXME pthread_cleanup_push(skypiax_skype_clean_disp, &xfd);
   DEBUGA_SKYPE("PUSH disp %d\n", SKYPIAX_P_LOG, xfd);
 
-    AsteriskHandlesAst->disp = disp;
+  AsteriskHandlesAst->disp = disp;
 
   if (skypiax_skype_present(AsteriskHandlesAst)) {
     root = DefaultRootWindow(disp);
@@ -1098,7 +1085,7 @@
     b = buffer;
 
     while (1) {
-		//switch_sleep(10000);
+      //switch_sleep(10000);
       XNextEvent(disp, &an_event);
       if (!running)
         break;
@@ -1158,7 +1145,7 @@
   struct AsteriskHandles *AsteriskHandlesAst;
 #endif /* WIN32 */
 
-    DEBUGA_SKYPE("SENDING: |||%s||||\n", SKYPIAX_P_LOG, msg_to_skype);
+  DEBUGA_SKYPE("SENDING: |||%s||||\n", SKYPIAX_P_LOG, msg_to_skype);
 
 #ifdef WIN32
 
@@ -1196,7 +1183,6 @@
   }
   AsteriskHandlesAst = &p->AsteriskHandlesAst;
 
-
   if (!skypiax_skype_send_message(AsteriskHandlesAst, msg_to_skype)) {
     ERRORA
       ("Sending message failed - probably Skype crashed.\n\nPlease shutdown Skypiax (Asterisk), then restart Skype from the menu, then launch Skypiax and try again.\n",
@@ -1248,459 +1234,464 @@
   fdselect = p->AsteriskHandlesAst.fdesc[0];
   FD_ZERO(&fs);
   FD_SET(fdselect, &fs);
-  to.tv_usec = 2000000; //500 msec
+  to.tv_usec = 2000000;         //500 msec
   to.tv_sec = 0;
   rt = select(fdselect + 1, &fs, NULL, NULL, &to);
 #endif /* WIN32 */
 
   if (rt > 0) {
-  if (p->AsteriskHandlesAst.fdesc[0]) {
-    howmany = sizeof(read_from_pipe);
+    if (p->AsteriskHandlesAst.fdesc[0]) {
+      howmany = sizeof(read_from_pipe);
 #ifdef WIN32
-    switch_file_read(p->AsteriskHandlesAst.fdesc[0], read_from_pipe, &howmany);
+      switch_file_read(p->AsteriskHandlesAst.fdesc[0], read_from_pipe, &howmany);
 #else /* WIN32 */
-    howmany =
-      read(p->AsteriskHandlesAst.fdesc[0], read_from_pipe, sizeof(read_from_pipe));
+      howmany =
+        read(p->AsteriskHandlesAst.fdesc[0], read_from_pipe, sizeof(read_from_pipe));
 #endif /* WIN32 */
 
-    a = 0;
-    for (i = 0; i < howmany; i++) {
-      messaggio[a] = read_from_pipe[i];
-      a++;
-
-      if (read_from_pipe[i] == '\0') {
-
-        //if (option_debug > 101)
-        DEBUGA_SKYPE("read_skype: howmany=%d, i=%d, a=%d, |||%s||| \n", SKYPIAX_P_LOG,
-                     howmany, i, a, messaggio);
-
-        if (!strncasecmp(messaggio, "ERROR 92 CALL", 12)) {
-          ERRORA("Skype got ERROR: |||%s|||, the number we called was not recognized\n",
-                 SKYPIAX_P_LOG, messaggio);
-          p->skype_callflow = CALLFLOW_STATUS_FINISHED;
-          if (option_debug)
-            DEBUGA_SKYPE("skype_call now is DOWN\n", SKYPIAX_P_LOG);
-          p->skype_call_id[0] = '\0';
-
-          if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
-            if (option_debug > 100) {
-              DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+      a = 0;
+      for (i = 0; i < howmany; i++) {
+        messaggio[a] = read_from_pipe[i];
+        a++;
+
+        if (read_from_pipe[i] == '\0') {
+
+          //if (option_debug > 101)
+          DEBUGA_SKYPE("read_skype: howmany=%d, i=%d, a=%d, |||%s||| \n", SKYPIAX_P_LOG,
+                       howmany, i, a, messaggio);
+
+          if (!strncasecmp(messaggio, "ERROR 92 CALL", 12)) {
+            ERRORA("Skype got ERROR: |||%s|||, the number we called was not recognized\n",
+                   SKYPIAX_P_LOG, messaggio);
+            p->skype_callflow = CALLFLOW_STATUS_FINISHED;
+            if (option_debug)
+              DEBUGA_SKYPE("skype_call now is DOWN\n", SKYPIAX_P_LOG);
+            p->skype_call_id[0] = '\0';
+
+            if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
+              if (option_debug > 100) {
+                DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+              }
+              p->interface_state = SKYPIAX_STATE_DOWN;
+              return CALLFLOW_INCOMING_HANGUP;
+            } else {
+              p->interface_state = SKYPIAX_STATE_DOWN;
             }
-            p->interface_state = SKYPIAX_STATE_DOWN;
-            return CALLFLOW_INCOMING_HANGUP;
-          } else {
-            p->interface_state = SKYPIAX_STATE_DOWN;
           }
-        }
 
-        strncpy(messaggio_2, messaggio, sizeof(messaggio) - 1);
+          strncpy(messaggio_2, messaggio, sizeof(messaggio) - 1);
 
-        buf = messaggio;
-        stringp = &buf;
-        where = strsep(stringp, " ");
-        if (!where) {
-          WARNINGA("Skype MSG without spaces: %s\n", SKYPIAX_P_LOG, messaggio);
-        }
+          buf = messaggio;
+          stringp = &buf;
+          where = strsep(stringp, " ");
+          if (!where) {
+            WARNINGA("Skype MSG without spaces: %s\n", SKYPIAX_P_LOG, messaggio);
+          }
 
-        if (!strcasecmp(messaggio, "#333")) {
-          /* DEBUGA_SKYPE("Skype MSG: messaggio_2: %s, messaggio2[11]: %s\n", SKYPIAX_P_LOG,
-           * messaggio_2, &messaggio_2[11]); */
-          memset(p->skype_friends, 0, 4096);
-          strncpy(p->skype_friends, &messaggio_2[11], 4095);
-        }
-        if (!strcasecmp(messaggio, "#222")) {
-          /* DEBUGA_SKYPE("Skype MSG: messaggio_2: %s, messaggio2[10]: %s\n", SKYPIAX_P_LOG,
-           * messaggio_2, &messaggio_2[10]); */
-          memset(p->skype_fullname, 0, 512);
-          strncpy(p->skype_fullname, &messaggio_2[10], 511);
-        }
-        if (!strcasecmp(messaggio, "#765")) {
-          /* DEBUGA_SKYPE("Skype MSG: messaggio_2: %s, messaggio2[10]: %s\n", SKYPIAX_P_LOG,
-           * messaggio_2, &messaggio_2[10]); */
-          memset(p->skype_displayname, 0, 512);
-          strncpy(p->skype_displayname, &messaggio_2[10], 511);
-        }
-        if (!strcasecmp(messaggio, "ERROR")) {
-          ERRORA("Skype got ERROR: |||%s|||\n", SKYPIAX_P_LOG, messaggio);
-          p->skype_callflow = CALLFLOW_STATUS_FINISHED;
-          if (option_debug)
-            DEBUGA_SKYPE("skype_call now is DOWN\n", SKYPIAX_P_LOG);
-          p->skype_call_id[0] = '\0';
-
-          if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
-            if (option_debug > 100) {
-              DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
-            }
-            p->interface_state = SKYPIAX_STATE_DOWN;
-            return CALLFLOW_INCOMING_HANGUP;
-          } else {
-            p->interface_state = SKYPIAX_STATE_DOWN;
+          if (!strcasecmp(messaggio, "#333")) {
+            /* DEBUGA_SKYPE("Skype MSG: messaggio_2: %s, messaggio2[11]: %s\n", SKYPIAX_P_LOG,
+             * messaggio_2, &messaggio_2[11]); */
+            memset(p->skype_friends, 0, 4096);
+            strncpy(p->skype_friends, &messaggio_2[11], 4095);
           }
-        }
-          if (!strcasecmp(messaggio, "CURRENTUSERHANDLE") ) {
-          strncpy(obj, where, sizeof(obj) - 1);
+          if (!strcasecmp(messaggio, "#222")) {
+            /* DEBUGA_SKYPE("Skype MSG: messaggio_2: %s, messaggio2[10]: %s\n", SKYPIAX_P_LOG,
+             * messaggio_2, &messaggio_2[10]); */
+            memset(p->skype_fullname, 0, 512);
+            strncpy(p->skype_fullname, &messaggio_2[10], 511);
+          }
+          if (!strcasecmp(messaggio, "#765")) {
+            /* DEBUGA_SKYPE("Skype MSG: messaggio_2: %s, messaggio2[10]: %s\n", SKYPIAX_P_LOG,
+             * messaggio_2, &messaggio_2[10]); */
+            memset(p->skype_displayname, 0, 512);
+            strncpy(p->skype_displayname, &messaggio_2[10], 511);
+          }
+          if (!strcasecmp(messaggio, "ERROR")) {
+            ERRORA("Skype got ERROR: |||%s|||\n", SKYPIAX_P_LOG, messaggio);
+            p->skype_callflow = CALLFLOW_STATUS_FINISHED;
+            if (option_debug)
+              DEBUGA_SKYPE("skype_call now is DOWN\n", SKYPIAX_P_LOG);
+            p->skype_call_id[0] = '\0';
 
-          where = strsep(stringp, " ");
+            if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
+              if (option_debug > 100) {
+                DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+              }
+              p->interface_state = SKYPIAX_STATE_DOWN;
+              return CALLFLOW_INCOMING_HANGUP;
+            } else {
+              p->interface_state = SKYPIAX_STATE_DOWN;
+            }
+          }
+          if (!strcasecmp(messaggio, "CURRENTUSERHANDLE")) {
+            strncpy(obj, where, sizeof(obj) - 1);
 
-          strncpy(id, where, sizeof(id) - 1);
+            where = strsep(stringp, " ");
 
+            strncpy(id, where, sizeof(id) - 1);
 
-          if (!strcasecmp(id, p->skype_user)) {
-		  p->AsteriskHandlesAst.api_connected = 1;
-            //DEBUGA_SKYPE ("Skype MSG: messaggio: %s, currentuserhandle: %s, cuh: %s, skype_user: %s!\n", SKYPIAX_P_LOG, messaggio, obj, id, p->skype_user);
-          }
+            if (!strcasecmp(id, p->skype_user)) {
+              p->AsteriskHandlesAst.api_connected = 1;
+              //DEBUGA_SKYPE ("Skype MSG: messaggio: %s, currentuserhandle: %s, cuh: %s, skype_user: %s!\n", SKYPIAX_P_LOG, messaggio, obj, id, p->skype_user);
+            }
           }
 
-        if (!strcasecmp(messaggio, "CALL")) {
-
-          strncpy(obj, where, sizeof(obj) - 1);
+          if (!strcasecmp(messaggio, "CALL")) {
 
-          where = strsep(stringp, " ");
+            strncpy(obj, where, sizeof(obj) - 1);
 
-          strncpy(id, where, sizeof(id) - 1);
+            where = strsep(stringp, " ");
 
-          where = strsep(stringp, " ");
+            strncpy(id, where, sizeof(id) - 1);
 
-          strncpy(prop, where, sizeof(prop) - 1);
+            where = strsep(stringp, " ");
 
-          where = strsep(stringp, " ");
+            strncpy(prop, where, sizeof(prop) - 1);
 
-          strncpy(value, where, sizeof(value) - 1);
+            where = strsep(stringp, " ");
 
-          where = strsep(stringp, " ");
+            strncpy(value, where, sizeof(value) - 1);
 
-          if (option_debug > 101)
-            DEBUGA_SKYPE
-              ("Skype MSG: messaggio: %s, obj: %s, id: %s, prop: %s, value: %s,where: %s!\n",
-               SKYPIAX_P_LOG, messaggio, obj, id, prop, value, where ? where : "NULL");
+            where = strsep(stringp, " ");
 
+            if (option_debug > 101)
+              DEBUGA_SKYPE
+                ("Skype MSG: messaggio: %s, obj: %s, id: %s, prop: %s, value: %s,where: %s!\n",
+                 SKYPIAX_P_LOG, messaggio, obj, id, prop, value, where ? where : "NULL");
 
-          if (!strcasecmp(prop, "PARTNER_HANDLE")) {
-            strncpy(p->callid_number, value, sizeof(p->callid_number) - 1);
-            WARNINGA
-              ("the skype_call %s caller PARTNER_HANDLE (p->callid_number) is: %s\n",
-               SKYPIAX_P_LOG, id, p->callid_number);
-            return CALLFLOW_INCOMING_RING;
-          }
-          if (!strcasecmp(prop, "PARTNER_DISPNAME")) {
-            snprintf(p->callid_name, sizeof(p->callid_name) - 1, "%s%s%s", value,
-                     where ? " " : "", where ? where : "");
-            WARNINGA
-              ("the skype_call %s caller PARTNER_DISPNAME (p->callid_name) is: %s\n",
-               SKYPIAX_P_LOG, id, p->callid_name);
-          }
-          if (!strcasecmp(prop, "CONF_ID") && !strcasecmp(value, "0")) {
-            DEBUGA_SKYPE("the skype_call %s is NOT a conference call\n", SKYPIAX_P_LOG,
-                         id);
-            if (p->interface_state == SKYPIAX_STATE_DOWN)
-              p->interface_state = SKYPIAX_STATE_PRERING;
-          }
-          if (!strcasecmp(prop, "CONF_ID") && strcasecmp(value, "0")) {
-            DEBUGA_SKYPE("the skype_call %s is a conference call\n", SKYPIAX_P_LOG, id);
-            if (p->interface_state == SKYPIAX_STATE_DOWN)
-              p->interface_state = SKYPIAX_STATE_PRERING;
-          }
+            if (!strcasecmp(prop, "PARTNER_HANDLE")) {
+              strncpy(p->callid_number, value, sizeof(p->callid_number) - 1);
+              WARNINGA
+                ("the skype_call %s caller PARTNER_HANDLE (p->callid_number) is: %s\n",
+                 SKYPIAX_P_LOG, id, p->callid_number);
+              return CALLFLOW_INCOMING_RING;
+            }
+            if (!strcasecmp(prop, "PARTNER_DISPNAME")) {
+              snprintf(p->callid_name, sizeof(p->callid_name) - 1, "%s%s%s", value,
+                       where ? " " : "", where ? where : "");
+              WARNINGA
+                ("the skype_call %s caller PARTNER_DISPNAME (p->callid_name) is: %s\n",
+                 SKYPIAX_P_LOG, id, p->callid_name);
+            }
+            if (!strcasecmp(prop, "CONF_ID") && !strcasecmp(value, "0")) {
+              DEBUGA_SKYPE("the skype_call %s is NOT a conference call\n", SKYPIAX_P_LOG,
+                           id);
+              if (p->interface_state == SKYPIAX_STATE_DOWN)
+                p->interface_state = SKYPIAX_STATE_PRERING;
+            }
+            if (!strcasecmp(prop, "CONF_ID") && strcasecmp(value, "0")) {
+              DEBUGA_SKYPE("the skype_call %s is a conference call\n", SKYPIAX_P_LOG, id);
+              if (p->interface_state == SKYPIAX_STATE_DOWN)
+                p->interface_state = SKYPIAX_STATE_PRERING;
+            }
 
-          if (!strcasecmp(prop, "DTMF")) {
-            switch_core_session_t *session = NULL;
-            private_t *tech_pvt = NULL;
-            switch_channel_t *channel = NULL;
-
-            DEBUGA_SKYPE("Call %s received a DTMF: %s\n", SKYPIAX_P_LOG, id, value);
-
-            tech_pvt = p->tech_pvt;
-			//if(tech_pvt)
-				session = tech_pvt->session;
-			//if(session)
-            channel = switch_core_session_get_channel(session);
-
-            if (channel) {
-              switch_dtmf_t dtmf =
-                { (char) value[0], switch_core_default_dtmf_duration(0) };
-              switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%c DTMF %s\n",
-                                dtmf.digit, switch_channel_get_name(channel));
-              switch_mutex_lock(tech_pvt->flag_mutex);
-              switch_channel_queue_dtmf(channel, &dtmf);
-              switch_set_flag(tech_pvt, TFLAG_DTMF);
-              switch_mutex_unlock(tech_pvt->flag_mutex);
+            if (!strcasecmp(prop, "DTMF")) {
+              switch_core_session_t *session = NULL;
+              private_t *tech_pvt = NULL;
+              switch_channel_t *channel = NULL;
+
+              DEBUGA_SKYPE("Call %s received a DTMF: %s\n", SKYPIAX_P_LOG, id, value);
+
+              tech_pvt = p->tech_pvt;
+              //if(tech_pvt)
+              session = tech_pvt->session;
+              //if(session)
+              channel = switch_core_session_get_channel(session);
+
+              if (channel) {
+                switch_dtmf_t dtmf =
+                  { (char) value[0], switch_core_default_dtmf_duration(0) };
+                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%c DTMF %s\n",
+                                  dtmf.digit, switch_channel_get_name(channel));
+                switch_mutex_lock(tech_pvt->flag_mutex);
+                switch_channel_queue_dtmf(channel, &dtmf);
+                switch_set_flag(tech_pvt, TFLAG_DTMF);
+                switch_mutex_unlock(tech_pvt->flag_mutex);
+              }
             }
-          }
 
-          if (!strcasecmp(prop, "FAILUREREASON")) {
-            DEBUGA_SKYPE
-              ("Skype has FAILED on skype_call %s. Let's wait for the FAILED message.\n",
-               SKYPIAX_P_LOG, id);
-          }
-          if (!strcasecmp(prop, "DURATION") && (!strcasecmp(value, "1"))) {
-            if (strcasecmp(id, p->skype_call_id)) {
-              strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
-              if (option_debug > 1)
-                DEBUGA_SKYPE
-                  ("We called a Skype contact and he answered us on skype_call: %s.\n",
-                   SKYPIAX_P_LOG, id);
+            if (!strcasecmp(prop, "FAILUREREASON")) {
+              DEBUGA_SKYPE
+                ("Skype has FAILED on skype_call %s. Let's wait for the FAILED message.\n",
+                 SKYPIAX_P_LOG, id);
             }
-          }
+            if (!strcasecmp(prop, "DURATION") && (!strcasecmp(value, "1"))) {
+              if (strcasecmp(id, p->skype_call_id)) {
+                strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
+                if (option_debug > 1)
+                  DEBUGA_SKYPE
+                    ("We called a Skype contact and he answered us on skype_call: %s.\n",
+                     SKYPIAX_P_LOG, id);
+              }
+            }
+
+            if (!strcasecmp(prop, "STATUS")) {
 
-          if (!strcasecmp(prop, "STATUS")) {
+              if (!strcasecmp(value, "RINGING")) {
+                char msg_to_skype[1024];
+                if (p->interface_state != SKYPIAX_STATE_DIALING) {
+                  /* we are not calling out */
 
-            if (!strcasecmp(value, "RINGING")) {
-              char msg_to_skype[1024];
-              if (p->interface_state != SKYPIAX_STATE_DIALING) {
-                /* we are not calling out */
+                  if (!strlen(p->skype_call_id)) {  //FIXME
+                    /* we are not inside an active call */
+                    p->skype_callflow = CALLFLOW_STATUS_RINGING;
+                    p->interface_state = SKYPIAX_STATE_RING;
+                    /* no owner, no active call, let's answer */
+                    skypiax_skype_write(p, "SET AGC OFF");
+                    switch_sleep(10000);
+                    skypiax_skype_write(p, "SET AEC OFF");
+                    switch_sleep(10000);
+                    sprintf(msg_to_skype, "GET CALL %s PARTNER_DISPNAME", id);
+                    skypiax_skype_write(p, msg_to_skype);
+                    switch_sleep(10000);
+                    sprintf(msg_to_skype, "GET CALL %s PARTNER_HANDLE", id);
+                    skypiax_skype_write(p, msg_to_skype);
+                    switch_sleep(10000);
+                    sprintf(msg_to_skype, "ALTER CALL %s ANSWER", id);
+                    skypiax_skype_write(p, msg_to_skype);
+                    if (option_debug)
+                      DEBUGA_SKYPE("We answered a Skype RING on skype_call %s\n",
+                                   SKYPIAX_P_LOG, id);
+                    strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
+                  } else {
+                    /* we're owned, we're in a call, let's refuse */
+                    //sprintf(msg_to_skype, "SET CALL %s STATUS REFUSED", id);
+                    sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", id);
+                    skypiax_skype_write(p, msg_to_skype);
+                    switch_sleep(10000);
+                    DEBUGA_SKYPE
+                      ("We have NOT answered a Skype RING on skype_call %s, because we are already in a skypiax call\n",
+                       SKYPIAX_P_LOG, id);
 
-                if (!strlen(p->skype_call_id)) {        //FIXME
-                  /* we are not inside an active call */
+                  }
+                } else {
+                  /* we are calling out */
                   p->skype_callflow = CALLFLOW_STATUS_RINGING;
-                  p->interface_state = SKYPIAX_STATE_RING;
-                  /* no owner, no active call, let's answer */
-                  skypiax_skype_write(p, "SET AGC OFF");
-                  switch_sleep(10000);
-                  skypiax_skype_write(p, "SET AEC OFF");
-                  switch_sleep(10000);
-                  sprintf(msg_to_skype, "GET CALL %s PARTNER_DISPNAME", id);
-                  skypiax_skype_write(p, msg_to_skype);
-                  switch_sleep(10000);
-                  sprintf(msg_to_skype, "GET CALL %s PARTNER_HANDLE", id);
-                  skypiax_skype_write(p, msg_to_skype);
-                  switch_sleep(10000);
-                  sprintf(msg_to_skype, "ALTER CALL %s ANSWER", id);
-                  skypiax_skype_write(p, msg_to_skype);
-                  if (option_debug)
-                    DEBUGA_SKYPE("We answered a Skype RING on skype_call %s\n",
-                                 SKYPIAX_P_LOG, id);
+                  p->interface_state = SKYPIAX_STATE_RINGING;
+                  //FIXME ast_queue_control(p->owner, SKYPIAX_CONTROL_RINGING);
                   strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
-                } else {
-                  /* we're owned, we're in a call, let's refuse */
-                  //sprintf(msg_to_skype, "SET CALL %s STATUS REFUSED", id);
-                  sprintf(msg_to_skype, "ALTER CALL %s END HANGUP", id);
-                  skypiax_skype_write(p, msg_to_skype);
-                  switch_sleep(10000);
-                  DEBUGA_SKYPE
-                    ("We have NOT answered a Skype RING on skype_call %s, because we are already in a skypiax call\n",
-                     SKYPIAX_P_LOG, id);
-
+                  DEBUGA_SKYPE("Our remote party in skype_call %s is RINGING\n",
+                               SKYPIAX_P_LOG, id);
                 }
-              } else {
-                /* we are calling out */
-                p->skype_callflow = CALLFLOW_STATUS_RINGING;
-                p->interface_state = SKYPIAX_STATE_RINGING;
+              } else if (!strcasecmp(value, "EARLYMEDIA")) {
+                p->skype_callflow = CALLFLOW_STATUS_EARLYMEDIA;
+                p->interface_state = SKYPIAX_STATE_DIALING;
                 //FIXME ast_queue_control(p->owner, SKYPIAX_CONTROL_RINGING);
-                strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
-                DEBUGA_SKYPE("Our remote party in skype_call %s is RINGING\n",
+                DEBUGA_SKYPE("Our remote party in skype_call %s is EARLYMEDIA\n",
                              SKYPIAX_P_LOG, id);
-              }
-            } else if (!strcasecmp(value, "EARLYMEDIA")) {
-              p->skype_callflow = CALLFLOW_STATUS_EARLYMEDIA;
-              p->interface_state = SKYPIAX_STATE_DIALING;
-              //FIXME ast_queue_control(p->owner, SKYPIAX_CONTROL_RINGING);
-              DEBUGA_SKYPE("Our remote party in skype_call %s is EARLYMEDIA\n",
-                           SKYPIAX_P_LOG, id);
-            } else if (!strcasecmp(value, "MISSED")) {
-              DEBUGA_SKYPE("We missed skype_call %s\n", SKYPIAX_P_LOG, id);
-
-            } else if (!strcasecmp(value, "FINISHED")) {
-              //p->skype_callflow = CALLFLOW_STATUS_FINISHED;
-              if (option_debug)
-                DEBUGA_SKYPE("skype_call %s now is DOWN\n", SKYPIAX_P_LOG, id);
-              p->skype_call_id[0] = '\0';
+              } else if (!strcasecmp(value, "MISSED")) {
+                DEBUGA_SKYPE("We missed skype_call %s\n", SKYPIAX_P_LOG, id);
 
-              if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
-                if (option_debug > 100) {
-                  DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+              } else if (!strcasecmp(value, "FINISHED")) {
+                //p->skype_callflow = CALLFLOW_STATUS_FINISHED;
+                if (option_debug)
+                  DEBUGA_SKYPE("skype_call %s now is DOWN\n", SKYPIAX_P_LOG, id);
+                p->skype_call_id[0] = '\0';
+
+                if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
+                  if (option_debug > 100) {
+                    DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+                  }
+                  //p->interface_state = SKYPIAX_STATE_DOWN;
+                  return CALLFLOW_INCOMING_HANGUP;
+                } else {
+                  p->interface_state = SKYPIAX_STATE_DOWN;
                 }
-                //p->interface_state = SKYPIAX_STATE_DOWN;
-                return CALLFLOW_INCOMING_HANGUP;
-              } else {
-                p->interface_state = SKYPIAX_STATE_DOWN;
-              }
 
-            } else if (!strcasecmp(value, "CANCELLED")) {
-              p->skype_callflow = CALLFLOW_STATUS_CANCELLED;
-              if (option_debug)
-                DEBUGA_SKYPE
-                  ("we tried to call Skype on skype_call %s and Skype has now CANCELLED\n",
-                   SKYPIAX_P_LOG, id);
-              p->skype_call_id[0] = '\0';
+              } else if (!strcasecmp(value, "CANCELLED")) {
+                p->skype_callflow = CALLFLOW_STATUS_CANCELLED;
+                if (option_debug)
+                  DEBUGA_SKYPE
+                    ("we tried to call Skype on skype_call %s and Skype has now CANCELLED\n",
+                     SKYPIAX_P_LOG, id);
+                p->skype_call_id[0] = '\0';
 
-              if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
-                if (option_debug > 100) {
-                  DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+                if (p->interface_state != SKYPIAX_STATE_HANGUP_REQUESTED) {
+                  if (option_debug > 100) {
+                    DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+                  }
+                  p->interface_state = SKYPIAX_STATE_DOWN;
+                  return CALLFLOW_INCOMING_HANGUP;
+                } else {
+                  p->interface_state = SKYPIAX_STATE_DOWN;
                 }
-                p->interface_state = SKYPIAX_STATE_DOWN;
-                return CALLFLOW_INCOMING_HANGUP;
-              } else {
-                p->interface_state = SKYPIAX_STATE_DOWN;
-              }
-            } else if (!strcasecmp(value, "FAILED")) {
-              p->skype_callflow = CALLFLOW_STATUS_FAILED;
-              if (option_debug)
-                DEBUGA_SKYPE
-                  ("we tried to call Skype on skype_call %s and Skype has now FAILED\n",
-                   SKYPIAX_P_LOG, id);
-              p->skype_call_id[0] = '\0';
-              strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
-              p->interface_state = SKYPIAX_STATE_DOWN;
-              if (option_debug > 100) {
-                DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
-              }
-              return CALLFLOW_INCOMING_HANGUP;
-            } else if (!strcasecmp(value, "REFUSED")) {
-              if (!strcasecmp(id, p->skype_call_id)) {
-                /* this is the id of the call we are in, probably we generated it */
-                p->skype_callflow = CALLFLOW_STATUS_REFUSED;
+              } else if (!strcasecmp(value, "FAILED")) {
+                p->skype_callflow = CALLFLOW_STATUS_FAILED;
                 if (option_debug)
                   DEBUGA_SKYPE
-                    ("we tried to call Skype on skype_call %s and Skype has now REFUSED\n",
+                    ("we tried to call Skype on skype_call %s and Skype has now FAILED\n",
                      SKYPIAX_P_LOG, id);
+                p->skype_call_id[0] = '\0';
                 strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
                 p->interface_state = SKYPIAX_STATE_DOWN;
-                p->skype_call_id[0] = '\0';
                 if (option_debug > 100) {
                   DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
                 }
                 return CALLFLOW_INCOMING_HANGUP;
-              } else {
-                /* we're here because were us that refused an incoming call */
-                DEBUGA_SKYPE("we REFUSED skype_call %s\n", SKYPIAX_P_LOG, id);
-
-              }
-            } else if (!strcasecmp(value, "ROUTING")) {
-              p->skype_callflow = CALLFLOW_STATUS_ROUTING;
-              p->interface_state = SKYPIAX_STATE_DIALING;
-              strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
-              DEBUGA_SKYPE("skype_call: %s is now ROUTING\n", SKYPIAX_P_LOG, id);
-            } else if (!strcasecmp(value, "UNPLACED")) {
-              p->skype_callflow = CALLFLOW_STATUS_UNPLACED;
-              p->interface_state = SKYPIAX_STATE_DIALING;
-              strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
-              DEBUGA_SKYPE("skype_call: %s is now UNPLACED\n", SKYPIAX_P_LOG, id);
-            } else if (!strcasecmp(value, "INPROGRESS")) {
-              p->skype_callflow = CALLFLOW_STATUS_INPROGRESS;
-              strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
-              p->interface_state = SKYPIAX_STATE_UP;
-              if (option_debug > 1)
-                DEBUGA_SKYPE("skype_call: %s is now active\n", SKYPIAX_P_LOG, id);
-
-              if (option_debug > 1)
-                DEBUGA_SKYPE("skype_call: %s SKYPIAX_CONTROL_ANSWER sent\n",
-                             SKYPIAX_P_LOG, id);
+              } else if (!strcasecmp(value, "REFUSED")) {
+                if (!strcasecmp(id, p->skype_call_id)) {
+                  /* this is the id of the call we are in, probably we generated it */
+                  p->skype_callflow = CALLFLOW_STATUS_REFUSED;
+                  if (option_debug)
+                    DEBUGA_SKYPE
+                      ("we tried to call Skype on skype_call %s and Skype has now REFUSED\n",
+                       SKYPIAX_P_LOG, id);
+                  strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
+                  p->interface_state = SKYPIAX_STATE_DOWN;
+                  p->skype_call_id[0] = '\0';
+                  if (option_debug > 100) {
+                    DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+                  }
+                  return CALLFLOW_INCOMING_HANGUP;
+                } else {
+                  /* we're here because were us that refused an incoming call */
+                  DEBUGA_SKYPE("we REFUSED skype_call %s\n", SKYPIAX_P_LOG, id);
 
-              if (1) {          //FIXME
-                char msg_to_skype[1024];
+                }
+              } else if (!strcasecmp(value, "ROUTING")) {
+                p->skype_callflow = CALLFLOW_STATUS_ROUTING;
+                p->interface_state = SKYPIAX_STATE_DIALING;
+                strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
+                DEBUGA_SKYPE("skype_call: %s is now ROUTING\n", SKYPIAX_P_LOG, id);
+              } else if (!strcasecmp(value, "UNPLACED")) {
+                p->skype_callflow = CALLFLOW_STATUS_UNPLACED;
+                p->interface_state = SKYPIAX_STATE_DIALING;
+                strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
+                DEBUGA_SKYPE("skype_call: %s is now UNPLACED\n", SKYPIAX_P_LOG, id);
+              } else if (!strcasecmp(value, "INPROGRESS")) {
+                p->skype_callflow = CALLFLOW_STATUS_INPROGRESS;
+                strncpy(p->skype_call_id, id, sizeof(p->skype_call_id) - 1);
+                p->interface_state = SKYPIAX_STATE_UP;
+                if (option_debug > 1)
+                  DEBUGA_SKYPE("skype_call: %s is now active\n", SKYPIAX_P_LOG, id);
+
+                if (option_debug > 1)
+                  DEBUGA_SKYPE("skype_call: %s SKYPIAX_CONTROL_ANSWER sent\n",
+                               SKYPIAX_P_LOG, id);
 
                 if (1) {        //FIXME
-                  switch_threadattr_t *thd_attr = NULL;
+                  char msg_to_skype[1024];
 
-                  switch_threadattr_create(&thd_attr, skypiax_module_pool);
-                  switch_threadattr_detach_set(thd_attr, 1);
-                  switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
-                  switch_thread_create(&p->tcp_srv_thread, thd_attr,
-                                       skypiax_do_tcp_srv_thread, p, skypiax_module_pool);
-                  DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG);
-
-                  switch_threadattr_create(&thd_attr, skypiax_module_pool);
-                  switch_threadattr_detach_set(thd_attr, 1);
-                  switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
-                  switch_thread_create(&p->tcp_cli_thread, thd_attr,
-                                       skypiax_do_tcp_cli_thread, p, skypiax_module_pool);
-                  DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG);
+                  if (1) {      //FIXME
+                    switch_threadattr_t *thd_attr = NULL;
+
+                    switch_threadattr_create(&thd_attr, skypiax_module_pool);
+                    switch_threadattr_detach_set(thd_attr, 1);
+                    switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
+                    switch_thread_create(&p->tcp_srv_thread, thd_attr,
+                                         skypiax_do_tcp_srv_thread, p,
+                                         skypiax_module_pool);
+                    DEBUGA_SKYPE("started tcp_srv_thread thread.\n", SKYPIAX_P_LOG);
+
+                    switch_threadattr_create(&thd_attr, skypiax_module_pool);
+                    switch_threadattr_detach_set(thd_attr, 1);
+                    switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
+                    switch_thread_create(&p->tcp_cli_thread, thd_attr,
+                                         skypiax_do_tcp_cli_thread, p,
+                                         skypiax_module_pool);
+                    DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG);
+                  }
+                  switch_sleep(100000);
+                  sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id,
+                          p->tcp_srv_port);
+                  skypiax_skype_write(p, msg_to_skype);
+                  switch_sleep(100000);
+                  sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"%d\"", id,
+                          p->tcp_cli_port);
+                  skypiax_skype_write(p, msg_to_skype);
+                  switch_sleep(100000);
                 }
-                switch_sleep(100000);
-                sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id, p->tcp_srv_port);
-                skypiax_skype_write(p, msg_to_skype);
-                switch_sleep(100000);
-                sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"%d\"", id, p->tcp_cli_port);
-                skypiax_skype_write(p, msg_to_skype);
-                switch_sleep(100000);
-              }
 
-              p->skype_callflow = SKYPIAX_STATE_UP;
+                p->skype_callflow = SKYPIAX_STATE_UP;
 
               /**************************/
 
-              //FIXME switch_core_session_t **new_session;
+                //FIXME switch_core_session_t **new_session;
 
-              //FIXME *new_session=switch_loadable_module_create_interface(skypiax_endpoint_interface, pool);
+                //FIXME *new_session=switch_loadable_module_create_interface(skypiax_endpoint_interface, pool);
 
-              if (!global_session) {    //FIXME FIXME FIXME 
-                switch_core_session_t *session = NULL;
-                private_t *tech_pvt = NULL;
-                switch_channel_t *channel = NULL;
-
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,
-                                  "New Inbound Channel!\n");
-
-                if ((session =
-                     switch_core_session_request(skypiax_endpoint_interface,
-                                                 NULL)) != 0) {
-                  switch_core_session_add_stream(session, NULL);
-                  if ((tech_pvt =
-                       (private_t *) switch_core_session_alloc(session,
-                                                               sizeof(private_t))) != 0) {
-                    channel = switch_core_session_get_channel(session);
-                    skypiax_tech_init(tech_pvt, session, p);
-                  } else {
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
-                                      "Hey where is my memory pool?\n");
-                    switch_core_session_destroy(&session);
-                    break;
+                if (!global_session) {  //FIXME FIXME FIXME 
+                  switch_core_session_t *session = NULL;
+                  private_t *tech_pvt = NULL;
+                  switch_channel_t *channel = NULL;
+
+                  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,
+                                    "New Inbound Channel!\n");
+
+                  if ((session =
+                       switch_core_session_request(skypiax_endpoint_interface,
+                                                   NULL)) != 0) {
+                    switch_core_session_add_stream(session, NULL);
+                    if ((tech_pvt =
+                         (private_t *) switch_core_session_alloc(session,
+                                                                 sizeof(private_t))) !=
+                        0) {
+                      channel = switch_core_session_get_channel(session);
+                      skypiax_tech_init(tech_pvt, session, p);
+                    } else {
+                      switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
+                                        "Hey where is my memory pool?\n");
+                      switch_core_session_destroy(&session);
+                      break;
+                    }
+
+                    // if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), NULL, dialplan, cid_name, cid_num, ip, NULL, NULL, NULL, modname, NULL, dest)) != 0) 
+
+                    if ((tech_pvt->caller_profile =
+                         switch_caller_profile_new(switch_core_session_get_pool(session),
+                                                   "skypiax", "XML", p->callid_name,
+                                                   p->callid_number, NULL, "calling_ani",
+                                                   NULL, NULL, "mod_skypiax", "public",
+                                                   "5000")) != 0) {
+                      char name[128];
+                      switch_snprintf(name, sizeof(name), "skypiax/%s-%04x",
+                                      tech_pvt->caller_profile->destination_number,
+                                      rand() & 0xffff);
+                      switch_channel_set_name(channel, name);
+                      switch_channel_set_caller_profile(channel,
+                                                        tech_pvt->caller_profile);
+                    }
+                    switch_channel_set_state(channel, CS_INIT);
+                    if (switch_core_session_thread_launch(session) !=
+                        SWITCH_STATUS_SUCCESS) {
+                      switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
+                                        "Error spawning thread\n");
+                      switch_core_session_destroy(&session);
+                    }
                   }
+                  //DEBUGA_SKYPE("skype_call: %s, answered\n", SKYPIAX_P_LOG, id);
+                  switch_channel_mark_answered(channel);
+                } else {
+                  switch_core_session_t *session = NULL;
+                  private_t *tech_pvt = NULL;
+                  switch_channel_t *channel = NULL;
+
+                  tech_pvt = p->tech_pvt;
+                  //session = tech_pvt->session;
+                  session = global_session;
+                  channel = switch_core_session_get_channel(session);
+                  //DEBUGA_SKYPE("skype_call: %s, answered\n", SKYPIAX_P_LOG, id);
+                  switch_channel_mark_answered(channel);
 
-                  // if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), NULL, dialplan, cid_name, cid_num, ip, NULL, NULL, NULL, modname, NULL, dest)) != 0) 
+                  //switch_channel_set_state(channel, CS_EXECUTE);
 
-                  if ((tech_pvt->caller_profile =
-                       switch_caller_profile_new(switch_core_session_get_pool(session),
-                                                 "skypiax", "XML", p->callid_name,
-                                                 p->callid_number, NULL, "calling_ani",
-                                                 NULL, NULL, "mod_skypiax", "public",
-                                                 "5000")) != 0) {
-                    char name[128];
-                    switch_snprintf(name, sizeof(name), "skypiax/%s-%04x",
-                                    tech_pvt->caller_profile->destination_number,
-                                    rand() & 0xffff);
-                    switch_channel_set_name(channel, name);
-                    switch_channel_set_caller_profile(channel, tech_pvt->caller_profile);
-                  }
-                  switch_channel_set_state(channel, CS_INIT);
-                  if (switch_core_session_thread_launch(session) != SWITCH_STATUS_SUCCESS) {
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
-                                      "Error spawning thread\n");
-                    switch_core_session_destroy(&session);
-                  }
                 }
-              WARNINGA("skype_call: %s, answered\n", SKYPIAX_P_LOG, id);
-                switch_channel_mark_answered(channel);
-              } else {
-                switch_core_session_t *session = NULL;
-                private_t *tech_pvt = NULL;
-                switch_channel_t *channel = NULL;
-
-                tech_pvt = p->tech_pvt;
-                //session = tech_pvt->session;
-                session = global_session;
-                channel = switch_core_session_get_channel(session);
-              WARNINGA("skype_call: %s, answered\n", SKYPIAX_P_LOG, id);
-                switch_channel_mark_answered(channel);
-
-                //switch_channel_set_state(channel, CS_EXECUTE);
-
-              }
               /**************************/
 
-            } else {
-              WARNINGA("skype_call: %s, STATUS: %s is not recognized\n", SKYPIAX_P_LOG,
-                       id, value);
+              } else {
+                WARNINGA("skype_call: %s, STATUS: %s is not recognized\n", SKYPIAX_P_LOG,
+                         id, value);
 
-            }
-          }                     //STATUS
+              }
+            }                   //STATUS
 
-        }                       //CALL
+          }                     //CALL
 
-        a = 0;
-      }                         //message end
-    }                           //read_from_pipe
+          a = 0;
+        }                       //message end
+      }                         //read_from_pipe
 
-  }
+    }
   }
 
   if (option_debug > 100) {
@@ -1710,7 +1701,8 @@
   return 0;
 }
 
-int skypiax_skype_call(struct skypiax_interface *p, char *idest, int timeout, switch_core_session_t * session)
+int skypiax_skype_call(struct skypiax_interface *p, char *idest, int timeout,
+                       switch_core_session_t * session)
 {
   char *rdest;
   char msg_to_skype[1024];
@@ -1745,5 +1737,3 @@
   //FIXME ast_queue_control(p->owner, SKYPIAX_CONTROL_RINGING);
   return 0;
 }
-
-



More information about the Freeswitch-branches mailing list