<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[Freeswitch-trunk][14730] </title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<div id="header">FreeSWITCH Subversion</div>
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://fisheye.freeswitch.org/changelog/FreeSWITCH?cs=14730">14730</a></dd>
<dt>Author</dt> <dd>seven</dd>
<dt>Date</dt> <dd>2009-09-02 08:22:44 -0500 (Wed, 02 Sep 2009)</dd>
</dl>

<h3>Log Message</h3>
<pre>ugly MACOSX support</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxMakefile">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/Makefile</a></li>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxmac_clientc">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mac_client.c</a></li>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxmod_skypiaxc">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mod_skypiax.c</a></li>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxskypiaxh">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax.h</a></li>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxskypiax_protocolc">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_protocol.c</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxskypiax_proxyc">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_proxy.c</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxmac_client2c">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mac_client2.c</a></li>
<li><a href="#freeswitchbranchessevensrcmodendpointsmod_skypiaxmfile">freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mfile</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxMakefile"></a>
<div class="modfile"><h4>Modified: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/Makefile (14729 => 14730)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/Makefile        2009-09-02 00:52:35 UTC (rev 14729)
+++ freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/Makefile        2009-09-02 13:22:44 UTC (rev 14730)
</span><span class="lines">@@ -5,11 +5,19 @@
</span><span class="cx"> # LOCAL_LDFLAGS=-framework Skype -framework Cocoa -framework Foundation  -framework CoreFoundation
</span><span class="cx"> 
</span><span class="cx"> LOCAL_INSERT_LDFLAGS=\
</span><del>-    if test $$osarch = &quot;Darwin&quot; ; then echo &quot;-framework Carbon -framework Skype -framework Foundation&quot; ; \
</del><ins>+    if test $$osarch = &quot;Darwin&quot; ; then echo &quot;&quot; ; \
</ins><span class="cx">     else echo &quot;-lX11&quot; ; \
</span><span class="cx">     fi;
</span><span class="cx"> 
</span><ins>+LOCAL_OBJS=skypiax_protocol.o
+include ../../../../build/modmake.rules   
</ins><span class="cx"> 
</span><del>-# LOCAL_LDFLAGS=-ObjC
-LOCAL_OBJS=AutoreleasePool.o skypiax_protocol.o
-include ../../../../build/modmake.rules
</del><ins>+libs: AutoreleasePool.m
+        gcc -c -o AutoreleasePool.o AutoreleasePool.m
+        
+skypiax_proxy: libs skypiax_proxy.c
+        gcc -g -fPIC -Wall -o skypiax_proxy -ObjC -framework Skype skypiax_proxy.c  -framework Carbon -framework Foundation -lpthread AutoreleasePool.o
+
+mac_client: libs
+        gcc -g -fPIC -Wall -o mac_client -ObjC -framework Skype mac_client.c  -framework Carbon -framework Foundation -lpthread AutoreleasePool.o
+        
</ins></span></pre></div>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxmac_clientc"></a>
<div class="modfile"><h4>Modified: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mac_client.c (14729 => 14730)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mac_client.c        2009-09-02 00:52:35 UTC (rev 14729)
+++ freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mac_client.c        2009-09-02 13:22:44 UTC (rev 14730)
</span><span class="lines">@@ -3,11 +3,9 @@
</span><span class="cx"> #include &lt;pthread.h&gt;
</span><span class="cx"> #import &lt;Skype/Skype.h&gt;                  
</span><span class="cx"> // #import &lt;CoreFoundation/CoreFoundation.h&gt;
</span><del>-// #import &lt;Cocoa/Cocoa.h&gt;  
-// #include &lt;Foundation/NSAutoreleasePool.h&gt;
</del><ins>+// #import &lt;Foundation/NSAutoreleasePool.h&gt;
</ins><span class="cx"> #include &quot;AutoreleasePool.h&quot;
</span><span class="cx">         
</span><del>-// #include &lt;glibc.h&gt;
</del><span class="cx"> typedef struct SkypeDelegate SkypeDelegate;
</span><span class="cx">                                     
</span><span class="cx"> int r = 0;
</span><span class="lines">@@ -24,7 +22,7 @@
</span><span class="cx">                 CFStringGetCString(input, output, strlen+1, kCFStringEncodingUTF8);
</span><span class="cx">         }
</span><span class="cx">         printf(&quot;Message received  %s\n&quot;, output);
</span><del>-        
</del><ins>+
</ins><span class="cx"> }
</span><span class="cx"> void SkypeAttachResponse(unsigned int aAttachResponseCode){
</span><span class="cx">         r = aAttachResponseCode;
</span><span class="lines">@@ -33,12 +31,12 @@
</span><span class="cx"> void SkypeBecameAvailable(CFPropertyListRef aNotification){}
</span><span class="cx"> void SkypeBecameUnavailable(CFPropertyListRef aNotification){}
</span><span class="cx"> 
</span><del>-void
-RunThread()
</del><ins>+void RunThread()
</ins><span class="cx"> {
</span><span class="cx">     RunApplicationEventLoop(); 
</span><span class="cx"> }
</span><del>-int main(int arcg, char **argv)
</del><ins>+
+void skype_thread()
</ins><span class="cx"> {
</span><span class="cx">         SkypeDelegate skype_delegate;
</span><span class="cx">         skype_delegate.clientApplicationName = CFSTR(&quot;skypiax&quot;);
</span><span class="lines">@@ -46,17 +44,8 @@
</span><span class="cx">            skype_delegate.SkypeAttachResponse = SkypeAttachResponse;
</span><span class="cx">         skype_delegate.SkypeBecameAvailable = SkypeBecameAvailable;
</span><span class="cx">         skype_delegate.SkypeBecameUnavailable = SkypeBecameUnavailable; 
</span><del>-        
-        pthread_t tid;
-    CFStringRef cmd, resp;
-    char c;    
-        char *tmp = (char *)malloc(sizeof(char) * 1024);
-
-
-    tmp[0] = '\0';
-    
-                                        
-        
</del><ins>+            
+        OSStatus status;
</ins><span class="cx">         // NSAutoreleasePool * pool = 
</span><span class="cx">         InitAutoreleasePool();
</span><span class="cx">     
</span><span class="lines">@@ -64,22 +53,55 @@
</span><span class="cx"> 
</span><span class="cx">         SetSkypeDelegate(&amp;skype_delegate); 
</span><span class="cx">         
</span><del>-        printf(&quot;is: %d\n&quot;, IsSkypeRunning());
-        RunCurrentEventLoop(1);
</del><ins>+        printf(&quot;IsSkypeRunning: %d\n&quot;, IsSkypeRunning());
+        // RunCurrentEventLoop(1);
</ins><span class="cx"> 
</span><span class="cx">         ConnectToSkype();
</span><span class="cx">         
</span><span class="cx">         
</span><del>-        
</del><span class="cx">         while(r == 0) {
</span><span class="cx">                 printf(&quot;sleep 1\n&quot;);
</span><del>-                RunCurrentEventLoop(1);
</del><ins>+                // status = RunCurrentEventLoop(1);
+                // printf(&quot;Event loop status: %d\n&quot;, (int)status);
+                sleep(1);
</ins><span class="cx">         }               
</span><span class="cx">         
</span><del>-        // SendSkypeCommand(CFSTR(&quot;CALL echo123&quot;));
</del><ins>+        // RunApplicationEventLoop();
+                        
+        while(r) {
+                status = RunCurrentEventLoop(1);
+                printf(&quot;Event loop status: %d\n&quot;, (int)status);
+                sleep(1);
+        }
</ins><span class="cx">         
</span><del>-        pthread_create(&amp;tid, NULL, (void *) RunThread, NULL);
</del><ins>+        DisconnectFromSkype();     
+        RemoveSkypeDelegate();
+        
+        ReleaseAutoreleasePool();
+        // [pool release];
+        
+}
+int main(int arcg, char **argv)
+{
+        pthread_t tid;                               
+        // pthread_t tid2;
+    CFStringRef cmd, resp;
+    char c;    
+        char *tmp = (char *)malloc(sizeof(char) * 1024);
+
+
+    tmp[0] = '\0';
+    
+                                
+        // pthread_create(&amp;tid2, NULL, (void *) RunThread, NULL);
+        pthread_create(&amp;tid, NULL, (void *) skype_thread, NULL);
+        
+        
+        RunApplicationEventLoop();
+        
</ins><span class="cx">     while(c != EOF) {
</span><ins>+                // RunCurrentEventLoop(1);
+        
</ins><span class="cx">         c = getchar();
</span><span class="cx">         switch(c) {
</span><span class="cx">             case '\n': /* parse and execute. */
</span><span class="lines">@@ -87,7 +109,7 @@
</span><span class="cx">                     //cmd = CFStringCreateWithCString(kCFAllocatorDefault, tmp, kCFStringEncodingMacRoman);
</span><span class="cx">                     cmd = CFStringCreateWithCString(kCFAllocatorDefault, tmp, kCFStringEncodingASCII);
</span><span class="cx">                                         if (!strcmp(&quot;exit&quot;, tmp)) {
</span><del>-                                                goto end;
</del><ins>+                                                exit(0);
</ins><span class="cx">                                         }
</span><span class="cx">                     fprintf(stdout, &quot;=&gt;%s\n&quot;, CFStringGetCStringPtr(cmd, 0));
</span><span class="cx">                     resp = SendSkypeCommand(cmd);
</span><span class="lines">@@ -102,15 +124,5 @@
</span><span class="cx">                 break;
</span><span class="cx">         }
</span><span class="cx">     }
</span><del>-                           
-        
-end:                                       
-        RunCurrentEventLoop(1);
-        DisconnectFromSkype();     
-        RemoveSkypeDelegate();
-        // release_pool();
-        
-        ReleaseAutoreleasePool();
-        // [pool release];
-        return 0;
</del><ins>+        return 0;                               
</ins><span class="cx"> }
</span><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxmac_client2c"></a>
<div class="delfile"><h4>Deleted: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mac_client2.c</h4></div>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxmfile"></a>
<div class="delfile"><h4>Deleted: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mfile</h4></div>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxmod_skypiaxc"></a>
<div class="modfile"><h4>Modified: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mod_skypiax.c (14729 => 14730)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mod_skypiax.c        2009-09-02 00:52:35 UTC (rev 14729)
+++ freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/mod_skypiax.c        2009-09-02 13:22:44 UTC (rev 14730)
</span><span class="lines">@@ -1291,7 +1291,8 @@
</span><span class="cx">                                         DEBUGA_SKYPE(&quot;got FALSE here, thread probably was already dead. GetLastError returned: %d\n&quot;, SKYPIAX_P_LOG, GetLastError());
</span><span class="cx">                                         globals.SKYPIAX_INTERFACES[interface_id].skypiax_api_thread = NULL;
</span><span class="cx">                                 }    
</span><del>-#elif MACOSX
</del><ins>+#elif __APPLE__
+                                proxy_socket_disconnect();
</ins><span class="cx"> #else
</span><span class="cx">                                 XEvent e;
</span><span class="cx">                                 Atom atom1 = XInternAtom(tech_pvt-&gt;SkypiaxHandles.disp, &quot;SKYPECONTROLAPI_MESSAGE_BEGIN&quot;,
</span></span></pre></div>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxskypiaxh"></a>
<div class="modfile"><h4>Modified: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax.h (14729 => 14730)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax.h        2009-09-02 00:52:35 UTC (rev 14729)
+++ freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax.h        2009-09-02 13:22:44 UTC (rev 14730)
</span><span class="lines">@@ -154,7 +154,9 @@
</span><span class="cx">         int currentuserhandle;
</span><span class="cx">         int api_connected;
</span><span class="cx">         int fdesc[2];
</span><del>-};            
</del><ins>+};
+int proxy_socket;
+void proxy_socket_disconnect(void);           
</ins><span class="cx"> #else
</span><span class="cx"> struct SkypiaxHandles {
</span><span class="cx">         Window skype_win;
</span></span></pre></div>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxskypiax_protocolc"></a>
<div class="modfile"><h4>Modified: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_protocol.c (14729 => 14730)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_protocol.c        2009-09-02 00:52:35 UTC (rev 14729)
+++ freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_protocol.c        2009-09-02 13:22:44 UTC (rev 14730)
</span><span class="lines">@@ -27,16 +27,6 @@
</span><span class="cx"> int xerror = 0;
</span><span class="cx"> #endif /* WIN32 */     
</span><span class="cx"> 
</span><del>-#ifdef __APPLE__
-// #import &lt;Cocoa/Cocoa.h&gt;
-#include &lt;Skype/Skype.h&gt; 
-// #import &lt;CoreFoundation/CoreFoundation.h&gt;
-// #import &lt;Foundation/NSAutoreleasePool.h&gt;
-#include &quot;AutoreleasePool.h&quot;  
-typedef struct SkypeDelegate SkypeDelegate; 
-int skype_attach_response = 0;                             
-
-#endif
</del><span class="cx"> /*************************************/
</span><span class="cx"> int skypiax_signaling_read(private_t * tech_pvt)
</span><span class="cx"> {
</span><span class="lines">@@ -1188,179 +1178,9 @@
</span><span class="cx">         return NULL;
</span><span class="cx"> }
</span><span class="cx"> #elif defined(__APPLE__)
</span><del>-void SkypeAttachResponse(unsigned int aAttachResponseCode){
-        skype_attach_response = aAttachResponseCode;
-        D7(&quot;--------------Response %d--------\n&quot;, aAttachResponseCode);
-}  
</del><ins>+     
+#include &quot;skypiax_protocol_mac.c&quot;
</ins><span class="cx"> 
</span><del>-void SkypeNotificationReceived(CFStringRef aNotificationString){
-        CFStringRef input = aNotificationString;
-        char *output = NULL;
-
-        struct SkypiaxHandles *SkypiaxHandles = global_skypiax_handles;
-        
-        if (!SkypiaxHandles) {
-                D7(&quot;No skypiax handles!&quot;);
-                return;
-        }
-        int strlen = CFStringGetMaximumSizeForEncoding(CFStringGetLength(input), kCFStringEncodingUTF8);
-        
-        output = (char *)CFStringGetCStringPtr(input, kCFStringEncodingUTF8);
-        if (!output)
-        {
-                output = NewPtr(strlen+1);
-                CFStringGetCString(input, output, strlen+1, kCFStringEncodingUTF8);
-        }
-        D7(&quot;Message received  %s\n&quot;, output);
-        write(SkypiaxHandles-&gt;fdesc[1], output, strlen+1); 
-        
-}
-void SkypeBecameAvailable(CFPropertyListRef aNotification){
-        D7(&quot;---Skype Avalible\n&quot;);
-}
-void SkypeBecameUnavailable(CFPropertyListRef aNotification){
-        D7(&quot;---Skype Unavailable\n&quot;);
-}
-
-int skypiax_send_message(struct SkypiaxHandles *SkypiaxHandles, const char *message_P)
-{
-
-        CFStringRef messageString = CFStringCreateWithCString(NULL, message_P, kCFStringEncodingUTF8);
-#if SENDSKYPERETURNS
-        CFStringRef returnString = NULL;
-           returnString = SendSkypeCommand(messageString);
-           if (returnString)
-                        SkypeNotificationReceived(returnString);
-#else
-                SendSkypeCommand(messageString);
-#endif
-                //printf(&quot;Skype send message %s\n&quot;, message);
-           CFRelease(messageString);
-
-        return 1;
-}
-    
-int skypiax_signaling_write(private_t * tech_pvt, char *msg_to_skype)
-{
-        struct SkypiaxHandles *SkypiaxHandles;
-
-        DEBUGA_SKYPE(&quot;SENDING: |||%s||||\n&quot;, SKYPIAX_P_LOG, msg_to_skype);
-
-        SkypiaxHandles = &amp;tech_pvt-&gt;SkypiaxHandles;
-
-        if (!skypiax_send_message(SkypiaxHandles, msg_to_skype)) {
-                ERRORA
-                        (&quot;Sending message failed - probably Skype crashed.\n\nPlease shutdown Skypiax, then restart Skype, then launch Skypiax and try again.\n&quot;,
-                         SKYPIAX_P_LOG);
-                return -1;
-        }
-
-        return 0;
-
-}
-
-void RunThread()
-{
-    RunApplicationEventLoop(); 
-}    
-
-void *skypiax_do_skypeapi_thread_func(void *obj)
-{
-
-        private_t *tech_pvt = obj;
-        struct SkypiaxHandles *SkypiaxHandles;
-        char buf[512];                     
-        SkypeDelegate skype_delegate;
-        skype_delegate.clientApplicationName = CFSTR(&quot;skypiax&quot;);
-        skype_delegate.SkypeNotificationReceived = SkypeNotificationReceived;
-           skype_delegate.SkypeAttachResponse = SkypeAttachResponse;
-        skype_delegate.SkypeBecameAvailable = SkypeBecameAvailable;
-        skype_delegate.SkypeBecameUnavailable = SkypeBecameUnavailable;
-        int c = 0; //sleep
-        // pthread_t tid;
-        // 
-        // pthread_create(&amp;tid, NULL, (void *)RunThread, NULL);
-                                        
-        
-        // NSAutoreleasePool *pool = NewAutoreleasePool();
-        InitAutoreleasePool();
-        // NSAutoreleasePool *pool        = [[NSAutoreleasePool alloc] init];
-
-        SetSkypeDelegate(&amp;skype_delegate); 
-        
-        if (!IsSkypeRunning()) { 
-                D7(&quot;-------skype not running?\n&quot;);
-                goto end;
-        }            
-        
-        RunCurrentEventLoop(1);
-        D7(&quot;------connecting-----------?\n&quot;);
-        
-        ConnectToSkype();
-        D7(&quot;------connecting---2--------?\n&quot;);
-        
-        while(skype_attach_response == 0 &amp;&amp; c++ &lt; 10) {
-                // sleep(1) ;                                
-                D7(&quot;--------------sleep---------\n&quot;)
-                RunCurrentEventLoop(0.5);
-        }          
-        
-        //let's assume it returned 1 for debug purpose
-        //skype_attach_response = 1;
-        
-        if (!skype_attach_response) {
-                D7(&quot;------------No response-----------\n&quot;);
-                goto end;
-        }
-        
-        if (!tech_pvt-&gt;tcp_srv_port)
-                tech_pvt-&gt;tcp_srv_port = 10160;
-
-        if (!tech_pvt-&gt;tcp_cli_port)
-                tech_pvt-&gt;tcp_cli_port = 10161;
-
-        if (pipe(tech_pvt-&gt;SkypiaxHandles.fdesc)) {
-                fcntl(tech_pvt-&gt;SkypiaxHandles.fdesc[0], F_SETFL, O_NONBLOCK);
-                fcntl(tech_pvt-&gt;SkypiaxHandles.fdesc[1], F_SETFL, O_NONBLOCK);
-        }
-        SkypiaxHandles = &amp;tech_pvt-&gt;SkypiaxHandles;
-        SkypiaxHandles-&gt;api_connected = skype_attach_response; 
-        D7(&quot;--api_connected: %d\n&quot;, SkypiaxHandles-&gt;api_connected);
-
-        if (SkypiaxHandles-&gt;api_connected) {
-
-                snprintf(buf, 512, &quot;NAME skypiax&quot;);
-
-                if (!skypiax_send_message(SkypiaxHandles, buf)) {
-                        ERRORA(&quot;Sending message failed - probably Skype crashed. Please run/restart Skype manually and launch Skypiax again\n&quot;, SKYPIAX_P_LOG);
-                        running = 0;
-                        return NULL;
-                }
-
-                snprintf(buf, 512, &quot;PROTOCOL 7&quot;);
-                if (!skypiax_send_message(SkypiaxHandles, buf)) {
-                        ERRORA(&quot;Sending message failed - probably Skype crashed. Please run/restart Skype manually and launch Skypiax again\n&quot;, SKYPIAX_P_LOG);
-                        running = 0;
-                        return NULL;
-                }
-               
-        }
-        running = 1;  
-        
-        while (running) {
-                RunCurrentEventLoop(0.1);
-        }
-
-end:
-        DisconnectFromSkype();     
-        RemoveSkypeDelegate();
-        ReleaseAutoreleasePool();
-        //DestroyAutoreleasePool(pool);
-        //[pool release];
-        return NULL;
-
-}
-
</del><span class="cx"> #else /* NOT WIN32 AND MAC*/          
</span><span class="cx"> int X11_errors_handler(Display * dpy, XErrorEvent * err)
</span><span class="cx"> {
</span></span></pre></div>
<a id="freeswitchbranchessevensrcmodendpointsmod_skypiaxskypiax_proxyc"></a>
<div class="addfile"><h4>Added: freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_proxy.c (0 => 14730)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_proxy.c                                (rev 0)
+++ freeswitch/branches/seven/src/mod/endpoints/mod_skypiax/skypiax_proxy.c        2009-09-02 13:22:44 UTC (rev 14730)
</span><span class="lines">@@ -0,0 +1,303 @@
</span><ins>+/* a mac proxy bridge FreeSWITCH to skype, must run before load mod_skypiax */
+
+#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;  
+#include &lt;pthread.h&gt;
+#include &lt;sys/socket.h&gt;
+#include &lt;unistd.h&gt;
+#include &lt;sys/types.h&gt;
+#include &lt;netinet/in.h&gt;
+#include &lt;time.h&gt;
+
+// You must have Skype.framework inplace like /Library/Frameworks/Skype.framework
+#import &lt;Skype/Skype.h&gt;
+
+// #import &lt;CoreFoundation/CoreFoundation.h&gt;
+// #import &lt;Cocoa/Cocoa.h&gt;  
+// #include &lt;Foundation/NSAutoreleasePool.h&gt;
+#include &quot;AutoreleasePool.h&quot;       
+#define INVALID_SOCKET -1
+#define MAX_MESSAGE_LEN 512
+
+
+
+typedef struct SkypeDelegate SkypeDelegate;
+
+int attached = 0;
+int client_socket = INVALID_SOCKET; 
+int server_socket = INVALID_SOCKET;
+
+char current_user_handle[MAX_MESSAGE_LEN];
+
+void close_socket(int *sock) {
+        if (*sock != INVALID_SOCKET) {
+                close(*sock);
+                *sock = INVALID_SOCKET;
+        }
+}                   
+
+void SkypeNotificationReceived(CFStringRef n_string){
+        char *c_string = NULL;
+
+        int length = CFStringGetMaximumSizeForEncoding(CFStringGetLength(n_string), kCFStringEncodingUTF8);
+
+        c_string = (char *)CFStringGetCStringPtr(n_string, kCFStringEncodingUTF8);
+        if (!c_string)
+        {
+                c_string = NewPtr(length + 1);
+                CFStringGetCString(n_string, c_string, length + 1, kCFStringEncodingUTF8);
+        }
+        printf(&quot;Message received  %s\n&quot;, c_string);
+
+        if (!strncmp(c_string, &quot;CURRENTUSERHANDLE&quot;, 17)) {
+                strncpy(current_user_handle, c_string, strlen(c_string));
+        }                                 
+
+        if (client_socket != INVALID_SOCKET) {
+                int len = 0; 
+                int sent = 0;
+                while(*(c_string + len)) len++;
+
+                len = len &gt; MAX_MESSAGE_LEN ? MAX_MESSAGE_LEN : len;
+
+                sent = send(client_socket, c_string, strlen(c_string), 0);     
+                printf(&quot;Sent %d bytes to FreeSWITCH\n&quot;, sent);
+        }
+
+}       
+
+void SkypeAttachResponse(unsigned int aAttachResponseCode){
+        attached = aAttachResponseCode;
+        printf(&quot;Got %d, Skype instance Attached\n&quot;, attached);
+}                                          
+
+void SkypeBecameAvailable(CFPropertyListRef aNotification){}
+void SkypeBecameUnavailable(CFPropertyListRef aNotification){}
+
+#define SERVER_PORT 23456 // Waiting for FreeSWITCH to connect
+#define LENGTH_OF_LISTEN_QUEUE 10 //length of listen queue in server
+#define BUFFER_SIZE 255
+#define WELCOME_MESSAGE &quot;SKYPIAX PROXY 0.1 &quot;
+
+int server_port = 0;                   
+
+
+void send_skype_command(char *command) {
+        CFStringRef cmd, resp;  
+
+        InitAutoreleasePool();
+
+        cmd = CFStringCreateWithCString(kCFAllocatorDefault, command, kCFStringEncodingASCII);
+        printf(&quot;Send to skype: %s\n&quot;, CFStringGetCStringPtr(cmd, 0));
+        resp = SendSkypeCommand(cmd);
+        CFRelease(cmd);
+        if (resp != NULL) {
+                printf(&quot;Respond: %s\n&quot;, CFStringGetCStringPtr(resp, 0));
+        }                     
+
+        ReleaseAutoreleasePool();
+
+}
+
+void socket_thread() {
+
+        struct sockaddr_in server_addr,client_addr;
+
+        if ((server_socket = socket(AF_INET,SOCK_STREAM,0)) &lt; 0)
+        {
+                printf(&quot;SOCKET error!\n&quot;);
+                exit(1);
+        }
+
+        bzero(&amp;server_addr,sizeof(server_addr));
+        server_addr.sin_family = AF_INET;
+
+        if (server_port &gt; 0) {
+                server_addr.sin_port = htons(server_port);
+        } else {
+                server_addr.sin_port = htons(SERVER_PORT);
+        }                                   
+
+        server_addr.sin_addr.s_addr = htons(INADDR_ANY);
+
+        if (bind(server_socket, (struct sockaddr*)&amp;server_addr,sizeof(server_addr))&lt;0)
+        {
+                printf(&quot;Bind port %d failure!\n&quot;,SERVER_PORT);
+                exit(1);
+        }
+
+        if (listen(server_socket, LENGTH_OF_LISTEN_QUEUE) &lt; 0)
+        {
+                printf(&quot;Listen failure!\n&quot;);
+                exit(1);
+        }
+
+        printf(&quot;Socket server started. Socket %d waiting for connect\n&quot;, server_socket) ;
+
+        while (1)
+        {
+
+                char buf[BUFFER_SIZE];
+                long timestamp;
+                socklen_t length = sizeof(client_addr);
+
+                client_socket = accept(server_socket, (struct sockaddr*)&amp;client_addr, &amp;length);
+
+                if (client_socket &lt; 0)
+                {
+                        printf(&quot;ACCEPT error!\n&quot;);
+                        break;
+                }
+
+                strcpy(buf,WELCOME_MESSAGE);
+
+                //inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);
+
+                printf(&quot;New connection from %s:%d\n&quot;, 
+                        (char *)inet_ntoa(client_addr.sin_addr), (int)ntohs(client_addr.sin_port) );
+
+                timestamp = time(NULL);
+                strcat(buf,ctime(&amp;timestamp));
+                send(client_socket, buf, BUFFER_SIZE, 0);      
+
+                fd_set sockset;
+                FD_ZERO(&amp;sockset);
+                FD_SET(client_socket, &amp;sockset);           
+
+                while(1) {
+
+                        if (select(client_socket + 1, &amp;sockset, &amp;sockset, NULL, NULL) &gt; 0) {
+                                length = recv(client_socket, buf, BUFFER_SIZE, 0);          
+                                
+                                if (length &lt;= 0 ) {
+                                        break;
+                                }         
+                                
+                                length = length &gt;= BUFFER_SIZE ? BUFFER_SIZE - 1 : length;
+                                buf[length] = '\0';       
+                                printf(&quot;Sending to skype: %s\n&quot;, buf);
+                                send_skype_command(buf);
+
+                                if (!strncmp(buf, &quot;NAME skypiax&quot;, 5)) { 
+                                        printf(&quot;current_user_handle: %s\n&quot;, current_user_handle);
+                                        send(client_socket, current_user_handle, strlen(current_user_handle), 0);
+                                }                           
+
+                                if (!strncmp(buf, &quot;/close&quot;, 6)) { 
+
+                                        close_socket(&amp;client_socket);
+                                        printf(&quot;client disconnected\n&quot;);
+                                        break;
+                                }    
+                        }
+
+                }
+
+                send(client_socket, &quot;ERR&quot;, 3, 0);
+                close_socket(&amp;client_socket);  
+
+        }//exit
+
+        close_socket(&amp;server_socket);
+        attached = 0;
+
+}
+
+void console_thread() {
+        char c = 'A';
+        char buffer[1024];                                 
+        char *tmp = buffer;
+
+        bzero(tmp, 1024);
+
+        InitAutoreleasePool();
+        printf(&quot;Console started:\n&quot;);
+        while(c != EOF) {       
+                c = getchar();
+                switch(c) {
+                        case '\n': /* parse and execute. */
+                        if (tmp[0] != '\0') {
+                                if (!strcmp(&quot;exit&quot;, tmp)) {
+                                        close_socket(&amp;client_socket);
+                                        close_socket(&amp;server_socket);
+                                        goto end;
+                                }
+
+                                if (*tmp == '/') {
+                                        tmp++;                
+                                        send(client_socket, tmp, strlen(tmp), 0);
+                                        bzero(tmp, strlen(tmp));
+                                        continue;
+                                }
+
+                                send_skype_command(tmp);
+                                bzero(tmp, sizeof(tmp));
+                        } 
+                        printf(&quot;&gt;&gt;&gt; \n&quot;);      
+                        break;
+                        default: strncat(tmp, &amp;c, 1);
+                        break;
+                }
+        }
+        end:                                                               
+        DisconnectFromSkype();     
+        RemoveSkypeDelegate();
+        ReleaseAutoreleasePool();
+        attached = 0;
+
+}                          
+
+int main(int argc, char **argv)
+{
+
+        SkypeDelegate skype_delegate;
+        skype_delegate.clientApplicationName = CFSTR(&quot;skypiax&quot;);
+        skype_delegate.SkypeNotificationReceived = SkypeNotificationReceived;
+        skype_delegate.SkypeAttachResponse = SkypeAttachResponse;
+        skype_delegate.SkypeBecameAvailable = SkypeBecameAvailable;
+        skype_delegate.SkypeBecameUnavailable = SkypeBecameUnavailable; 
+
+        pthread_t console_tid, socket_tid;
+
+        if (argc &gt; 1 &amp;&amp; atoi(argv[1]) &gt; 1024) {
+                server_port = atoi(argv[1]);
+        }               
+
+        // InitAutoreleasePool();
+
+        NSAutoreleasePool* pool        = [[NSAutoreleasePool alloc] init];
+
+        SetSkypeDelegate(&amp;skype_delegate); 
+
+        if (! IsSkypeRunning()) {
+                printf(&quot;Please start skype first\n&quot;);
+                exit(1);
+        };
+
+        ConnectToSkype();
+
+        while(!attached) {
+                printf(&quot;Waiting for skype response...&quot;);
+                RunCurrentEventLoop(1);
+
+        }               
+
+        pthread_create(&amp;console_tid, NULL, (void *) console_thread, NULL);
+        pthread_create(&amp;socket_tid, NULL, (void *) socket_thread, NULL);
+
+        printf(&quot;Run application event loop\n&quot;);
+        while (attached) {
+                RunCurrentEventLoop(0.5);
+                // printf(&quot;sleep 0.5\n&quot;);
+        }
+
+        // DisconnectFromSkype();     
+        // RemoveSkypeDelegate();
+        // ReleaseAutoreleasePool();
+        [pool release]; 
+
+        close_socket(&amp;server_socket);
+        // pthread_join(console_tid, NULL);
+        // pthread_join(socket_tid, NULL);     
+        return 0;
+}
</ins><span class="cx">\ No newline at end of file
</span></span></pre>
</div>
</div>
<div id="footer">See you at ClueCon</div>

</body>
</html>