Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_con


Modified Files:
        ecore_con.c 


Log Message:


fix a bug in ecore_ipc - damn.. how could that stay there? :)

and err - clean up some indenting etc...

trill - going to put n SSL server support too (ie ecore can act as SSL server
too) ?

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_con/ecore_con.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- ecore_con.c 12 Apr 2004 19:29:37 -0000      1.18
+++ ecore_con.c 14 Apr 2004 08:51:19 -0000      1.19
@@ -96,12 +96,13 @@
  * FIXME: To be fixed.
  */
 Ecore_Con_Server *
-ecore_con_server_add(Ecore_Con_Type type,
+ecore_con_server_add(Ecore_Con_Type compl_type,
                     char *name,
                     int port,
                     const void *data)
 {
    Ecore_Con_Server   *svr;
+   Ecore_Con_Type      type;
    struct sockaddr_in  socket_addr;
    struct sockaddr_un  socket_unix;
    struct linger       lin;
@@ -114,6 +115,12 @@
    svr = calloc(1, sizeof(Ecore_Con_Server));
    if (!svr) return NULL;
 
+   type = compl_type;
+#if USE_OPENSSL
+   /* unset the SSL flag for the following checks */
+   type &= ~ECORE_CON_USE_SSL;
+#endif
+   
    if ((type == ECORE_CON_LOCAL_USER) ||
        (type == ECORE_CON_LOCAL_SYSTEM))
      {
@@ -241,6 +248,20 @@
                                                    NULL, NULL);
        if (!svr->fd_handler) goto error;
      }
+
+#if USE_OPENSSL
+   if (compl_type & ECORE_CON_USE_SSL)
+     {
+       /* SSLv3 gives *weird* results on my box, don't use it yet */
+       if (!(svr->ssl_ctx = SSL_CTX_new(SSLv2_client_method())))
+         goto error;
+       
+       if (!(svr->ssl = SSL_new(svr->ssl_ctx)))
+         goto error;
+       
+       SSL_set_fd(svr->ssl, svr->fd);
+     }
+#endif
    
    svr->name = strdup(name);
    if (!svr->name) goto error;
@@ -258,6 +279,10 @@
    if (svr->fd >= 0) close(svr->fd);
    if (svr->fd_handler) ecore_main_fd_handler_del(svr->fd_handler);
    if (svr->write_buf) free(svr->write_buf);
+#if USE_OPENSSL
+   if (svr->ssl) SSL_free(svr->ssl);
+   if (svr->ssl_ctx) SSL_CTX_free(svr->ssl_ctx);
+#endif
    free(svr);
    return NULL;
 }
@@ -274,7 +299,7 @@
                         const void *data)
 {
    Ecore_Con_Server   *svr;
-   Ecore_Con_Type      type = compl_type;
+   Ecore_Con_Type      type;
    struct sockaddr_un  socket_unix;
    struct sockaddr_in  socket_addr;
    int                 curstate = 0;
@@ -287,7 +312,8 @@
    /* remote system socket: TCP/IP: [name]:[port] */
    svr = calloc(1, sizeof(Ecore_Con_Server));
    if (!svr) return NULL;
-
+   
+   type = compl_type;
 #if USE_OPENSSL
    /* unset the SSL flag for the following checks */
    type &= ~ECORE_CON_USE_SSL;
@@ -306,12 +332,12 @@
             snprintf(buf, sizeof(buf), "%s/.ecore/%s/%i", homedir, name, port);
          }
        else if (type == ECORE_CON_LOCAL_SYSTEM)
-     {
-        if (name[0] == '/')
-          snprintf(buf, sizeof(buf), "%s|%i", name, port);
-        else
+         {
+            if (name[0] == '/')
+              snprintf(buf, sizeof(buf), "%s|%i", name, port);
+            else
               snprintf(buf, sizeof(buf), "/tmp/.ecore_service|%s|%i", name, port);
-     }
+         }
        svr->fd = socket(AF_UNIX, SOCK_STREAM, 0);
        if (svr->fd < 0) goto error;
        if (fcntl(svr->fd, F_SETFL, O_NONBLOCK) < 0) goto error;
@@ -375,19 +401,19 @@
      }
 
 #if USE_OPENSSL
-       if (compl_type & ECORE_CON_USE_SSL)
-         {
-           /* SSLv3 gives *weird* results on my box, don't use it yet */
-           if (!(svr->ssl_ctx = SSL_CTX_new(SSLv2_client_method())))
-              goto error;
-
-           if (!(svr->ssl = SSL_new(svr->ssl_ctx)))
-              goto error;
-
-           SSL_set_fd(svr->ssl, svr->fd);
-         }
+   if (compl_type & ECORE_CON_USE_SSL)
+     {
+       /* SSLv3 gives *weird* results on my box, don't use it yet */
+       if (!(svr->ssl_ctx = SSL_CTX_new(SSLv2_client_method())))
+         goto error;
+       
+       if (!(svr->ssl = SSL_new(svr->ssl_ctx)))
+         goto error;
+       
+       SSL_set_fd(svr->ssl, svr->fd);
+     }
 #endif
-
+   
    svr->name = strdup(name);
    if (!svr->name) goto error;
    svr->type = type;
@@ -629,11 +655,11 @@
    if ((svr->created) && (svr->path)) unlink(svr->path);
    if (svr->fd >= 0) close(svr->fd);
 #if USE_OPENSSL
-   if (svr->ssl) {
-      SSL_shutdown(svr->ssl);
-      SSL_free(svr->ssl);
-   }
-
+   if (svr->ssl)
+     {
+       SSL_shutdown(svr->ssl);
+       SSL_free(svr->ssl);
+     }
    if (svr->ssl_ctx) SSL_CTX_free(svr->ssl_ctx);
 #endif
    if (svr->name) free(svr->name);
@@ -683,8 +709,8 @@
        cl->server = svr;
        cl->fd_handler = ecore_main_fd_handler_add(cl->fd,
                                                   ECORE_FD_READ,
-                                                  _ecore_con_svr_cl_handler, cl,
-                                                  NULL, NULL);
+                                                  _ecore_con_svr_cl_handler, 
+                                                  cl, NULL, NULL);
        ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT);
        svr->clients = _ecore_list_append(svr->clients, cl);
          {
@@ -703,76 +729,63 @@
 }
 
 #if USE_OPENSSL
-/**
- * Tries to connect a Ecore_Con_Server using a SSL connection.
- *
- * @param svr
- * @return Boolean success or failure.
- */
-static int svr_try_connect_ssl(Ecore_Con_Server *svr)
+static int
+svr_try_connect_ssl(Ecore_Con_Server *svr)
 {
    int res, ssl_err, flag = 0;
-
-   assert(svr);
-   assert(svr->connecting);
-   assert(svr->ssl);
-
-   if ((res = SSL_connect(svr->ssl)) == 1)
-      return 1;
-
+   
+   res = SSL_connect(svr->ssl);
+   if ((res = SSL_connect(svr->ssl)) == 1) return 1;
    ssl_err = SSL_get_error(svr->ssl, res);
-   assert (ssl_err != SSL_ERROR_NONE);
-
-   if (ssl_err == SSL_ERROR_WANT_READ)
-      flag = ECORE_FD_READ;
-   else if (ssl_err == SSL_ERROR_WANT_WRITE)
-      flag = ECORE_FD_WRITE;
-
-   if (flag)
-      ecore_main_fd_handler_active_set(svr->fd_handler, flag);
-
+   
+   if (ssl_err == SSL_ERROR_NONE) return 1;
+   if (ssl_err == SSL_ERROR_WANT_READ)       flag = ECORE_FD_READ;
+   else if (ssl_err == SSL_ERROR_WANT_WRITE) flag = ECORE_FD_WRITE;
+   if (flag) ecore_main_fd_handler_active_set(svr->fd_handler, flag);
    return 0;
 }
 #endif
 
-static int svr_try_connect(Ecore_Con_Server *svr)
+static int
+svr_try_connect(Ecore_Con_Server *svr)
 {
    int so_err = 0, size = sizeof(int);
 
-   assert(svr);
-   assert(svr->connecting);
-
    if (getsockopt(svr->fd, SOL_SOCKET, SO_ERROR, &so_err, &size) < 0)
-      so_err = -1;
-
-   if (so_err != 0) { /* we lost our server! */
-      Ecore_Con_Event_Server_Del *e;
-                 
-      e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
-      if (e) {
-         e->server = svr;
-         ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
-                         _ecore_con_event_server_del_free, NULL);
-      }
-
-      svr->dead = 1;
-      ecore_main_fd_handler_del(svr->fd_handler);
-      svr->fd_handler = NULL;
-   } else { /* we got our server! */
-      Ecore_Con_Event_Server_Add *e;
-
-      svr->connecting = 0;
-      e = calloc(1, sizeof(Ecore_Con_Event_Server_Add));
-      if (e) {
-         e->server = svr;
-         ecore_event_add(ECORE_CON_EVENT_SERVER_ADD, e,
-                         _ecore_con_event_server_add_free, NULL);
-      }
-
-      if (!svr->write_buf)
-         ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ);
-   }
-
+     so_err = -1;
+   
+   if (so_err != 0)
+     {
+       /* we lost our server! */
+       Ecore_Con_Event_Server_Del *e;
+       
+       e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
+       if (e)
+         {
+            e->server = svr;
+            ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
+                            _ecore_con_event_server_del_free, NULL);
+         }
+       svr->dead = 1;
+       ecore_main_fd_handler_del(svr->fd_handler);
+       svr->fd_handler = NULL;
+     }
+   else
+     {
+       /* we got our server! */
+       Ecore_Con_Event_Server_Add *e;
+       
+       svr->connecting = 0;
+       e = calloc(1, sizeof(Ecore_Con_Event_Server_Add));
+       if (e)
+         {
+            e->server = svr;
+            ecore_event_add(ECORE_CON_EVENT_SERVER_ADD, e,
+                            _ecore_con_event_server_add_free, NULL);
+         }
+       if (!svr->write_buf)
+         ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ);
+     }
    return (!svr->dead);
 }
 
@@ -782,7 +795,7 @@
 {
    Ecore_Con_Server   *svr;
 #if USE_OPENSSL
-       int ssl_err = SSL_ERROR_NONE;
+   int ssl_err = SSL_ERROR_NONE;
 #endif
    
    svr = data;
@@ -793,9 +806,11 @@
        int            inbuf_num = 0;
 
 #if USE_OPENSSL
-    if (svr->ssl && svr->connecting && svr_try_connect_ssl(svr) &&
-        !svr_try_connect(svr))
-       return 1;
+       if ((svr->ssl) && 
+           (svr->connecting) && 
+           (svr_try_connect_ssl(svr)) &&
+           (!svr_try_connect(svr)))
+         return 1;
 #endif
        
        for (;;)
@@ -803,22 +818,26 @@
             int num, lost_server = 0;
 
 #if USE_OPENSSL
-            if (!svr->ssl) {
+            if (!svr->ssl)
+              {
 #endif
-            if ((num = read(svr->fd, svr->read_buf, READBUFSIZ)) < 1)
-               lost_server = (errno == EIO || errno == EBADF ||
-                              errno == EPIPE || errno == EINVAL ||
-                              errno == ENOSPC || num == 0); /* is num == 0 right? */
+                 if ((num = read(svr->fd, svr->read_buf, READBUFSIZ)) < 1)
+                   lost_server = (errno == EIO || errno == EBADF ||
+                                  errno == EPIPE || errno == EINVAL ||
+                                  errno == ENOSPC || num == 0); /* is num == 0 right? 
*/
 #if USE_OPENSSL
-                } else {
-            num = SSL_read(svr->ssl, svr->read_buf, READBUFSIZ);
-
-            if (num < 1) {
-               ssl_err = SSL_get_error(svr->ssl, num);
-               lost_server = (ssl_err == SSL_ERROR_ZERO_RETURN);
-            } else
-               ssl_err = SSL_ERROR_NONE;
-         }
+              }
+            else
+              {
+                 num = SSL_read(svr->ssl, svr->read_buf, READBUFSIZ);
+                 if (num < 1)
+                   {
+                      ssl_err = SSL_get_error(svr->ssl, num);
+                      lost_server = (ssl_err == SSL_ERROR_ZERO_RETURN);
+                   }
+                 else
+                   ssl_err = SSL_ERROR_NONE;
+              }
 #endif
             if (num < 1)
               {
@@ -864,27 +883,30 @@
          }
 
 #if USE_OPENSSL
-      if (svr->ssl && ssl_err == SSL_ERROR_WANT_READ)
-         ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ);
-      else if (svr->ssl && ssl_err == SSL_ERROR_WANT_WRITE)
-         ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE);
+       if (svr->ssl && ssl_err == SSL_ERROR_WANT_READ)
+         ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ);
+       else if (svr->ssl && ssl_err == SSL_ERROR_WANT_WRITE)
+         ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE);
 #endif
      }
-   else if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_WRITE)) {
-      if (svr->connecting) {
+   else if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_WRITE))
+     {
+       if (svr->connecting)
+         {
 #if USE_OPENSSL
-         if (!svr->ssl) {
+            if (!svr->ssl)
+              {
 #endif
-            if (!svr_try_connect(svr))
-               return 1;
+                 if (!svr_try_connect(svr))
+                   return 1;
 #if USE_OPENSSL
-                } else if (svr_try_connect_ssl(svr) && !svr_try_connect(svr))
-            return 1;
+              }
+            else if ((svr_try_connect_ssl(svr)) && (!svr_try_connect(svr)))
+              return 1;
 #endif
-       }
-
-      _ecore_con_server_flush(svr);
-   }
+         }
+       _ecore_con_server_flush(svr);
+     }
 
    return 1;
 }
@@ -931,6 +953,7 @@
                       /* we lost our client! */
                       Ecore_Con_Event_Client_Del *e;
                       
+                      printf("read ERR\n", num);
                       e = calloc(1, sizeof(Ecore_Con_Event_Client_Del));
                       if (e)
                         {
@@ -975,57 +998,61 @@
       return;
    
    num = svr->write_buf_size - svr->write_buf_offset;
-
 #if USE_OPENSSL
-   if (!svr->ssl) {
+   if (!svr->ssl)
+     {
 #endif
-      count = write(svr->fd, svr->write_buf + svr->write_buf_offset, num);
-
-      if (count < 1)
-         lost_server = (errno == EIO || errno == EBADF ||
-                        errno == EPIPE || errno == EINVAL ||
-                        errno == ENOSPC);
+       count = write(svr->fd, svr->write_buf + svr->write_buf_offset, num);
+       if (count < 1)
+         lost_server = (errno == EIO || errno == EBADF ||
+                        errno == EPIPE || errno == EINVAL ||
+                        errno == ENOSPC);
 #if USE_OPENSSL
-   } else {
-      count = SSL_write(svr->ssl, svr->write_buf + svr->write_buf_offset, num);
-
-      if (count < 1) {
-         ssl_err = SSL_get_error(svr->ssl, count);
-         lost_server = (ssl_err == SSL_ERROR_ZERO_RETURN);
-      }
-   }
+     }
+   else 
+     {
+       count = SSL_write(svr->ssl, svr->write_buf + svr->write_buf_offset, num);
+       
+       if (count < 1)
+         {
+            ssl_err = SSL_get_error(svr->ssl, count);
+            lost_server = (ssl_err == SSL_ERROR_ZERO_RETURN);
+         }
+     }
 #endif
 
-   if (lost_server) {
-      /* we lost our server! */
-         Ecore_Con_Event_Server_Del *e;
-            
-      e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
-         if (e)
-      {
-         e->server = svr;
-         ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
-                         _ecore_con_event_server_del_free, NULL);
-      }
-
-      svr->dead = 1;
-      ecore_main_fd_handler_del(svr->fd_handler);
-      svr->fd_handler = NULL;
-         return;
-   }
+   if (lost_server)
+     {
+       /* we lost our server! */
+       Ecore_Con_Event_Server_Del *e;
+       
+       e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
+       if (e)
+         {
+            e->server = svr;
+            ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
+                            _ecore_con_event_server_del_free, NULL);
+         }
+       
+       svr->dead = 1;
+       ecore_main_fd_handler_del(svr->fd_handler);
+       svr->fd_handler = NULL;
+       return;
+     }
 
-   if (count < 1) {
+   if (count < 1)
+     {
 #if USE_OPENSSL
-      if (svr->ssl && ssl_err == SSL_ERROR_WANT_READ)
-         ecore_main_fd_handler_active_set(svr->fd_handler,
-                                          ECORE_FD_READ);
-      else if (svr->ssl && ssl_err == SSL_ERROR_WANT_WRITE)
-         ecore_main_fd_handler_active_set(svr->fd_handler,
-                                          ECORE_FD_WRITE);
+       if (svr->ssl && ssl_err == SSL_ERROR_WANT_READ)
+         ecore_main_fd_handler_active_set(svr->fd_handler,
+                                          ECORE_FD_READ);
+       else if (svr->ssl && ssl_err == SSL_ERROR_WANT_WRITE)
+         ecore_main_fd_handler_active_set(svr->fd_handler,
+                                          ECORE_FD_WRITE);
 #endif
-      return;
-   }
-
+       return;
+     }
+   
    svr->write_buf_offset += count;
    if (svr->write_buf_offset >= svr->write_buf_size)
      {




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to