revert 66063 + related commits: my dreams of zero-copy ecore-con transfers were shatt...
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 10 Dec 2011 07:34:45 +0000 (07:34 +0000)
committerdiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 10 Dec 2011 07:34:45 +0000 (07:34 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@66078 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
configure.ac
src/lib/ecore_con/ecore_con.c
src/lib/ecore_con/ecore_con_private.h
src/lib/ecore_con/ecore_con_socks.c

index 34f6e58..6ceb054 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
         * Allow SSL certificates to be loaded for STARTTLS
         * Added functions to set/get the hostname used for SSL certificate verification
         * ecore_con_ssl_server_cafile_add() now accepts directories
-
-2011-12-09 Mike Blumenkrantz
-
-        * Created optimized reading mechanism for remote server connections
index 461e089..60c7636 100644 (file)
@@ -1415,7 +1415,6 @@ AC_ARG_ENABLE([ipv6],
 
 if test "x${have_ecore_con}" = "xyes" ; then
 
-   AC_CHECK_HEADERS([sys/ioctl.h winsock2.h])
    # Verify IPV6 availability in headers
    if test "x${want_ipv6}" != "xno" ; then
       AC_CHECK_TYPES([struct ipv6_mreq],
index b49ae8d..afd31a5 100644 (file)
 # include <Evil.h>
 #endif
 
-#ifdef HAVE_SYS_IOCTL_H
-# include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_WINSOCK2_H
-# include <winsock2.h>
-#endif
-
 #include "Ecore.h"
 #include "ecore_private.h"
 #include "Ecore_Con.h"
@@ -1012,11 +1004,7 @@ ecore_con_event_server_data(Ecore_Con_Server *svr, unsigned char *buf, int num,
    Ecore_Con_Event_Server_Data *e;
 
    e = ecore_con_event_server_data_alloc();
-   if (!e)
-     {
-        if (!duplicate) free(buf);
-        return;
-     }
+   EINA_SAFETY_ON_NULL_RETURN(e);
 
    svr->event_count = eina_list_append(svr->event_count, e);
    _ecore_con_server_timer_update(svr);
@@ -1890,14 +1878,9 @@ error:
 static void
 _ecore_con_cl_read(Ecore_Con_Server *svr)
 {
-   int num2 = 0, num = 0;
-#ifdef FIONREAD
-   double lr;
-   unsigned char *buf = NULL;
-#else
-   unsigned char buf[READBUFSIZ];
-#endif
+   int num = 0;
    Eina_Bool lost_server = EINA_TRUE;
+   unsigned char buf[READBUFSIZ];
 
    DBG("svr=%p", svr);
 
@@ -1912,50 +1895,23 @@ _ecore_con_cl_read(Ecore_Con_Server *svr)
            lost_server = EINA_FALSE;
         _ecore_con_server_timer_update(svr);
      }
-#ifdef FIONREAD
-# ifdef _WIN32
-   if (ioctlsocket(svr->fd, FIONREAD, &num)) goto error;
-# else
-   errno = 0;
-   if (ioctl(svr->fd, FIONREAD, &num)) goto error;
-# endif
-   if (!num)
-     {
-        int flags;
-        /* FIXME: this shouldn't happen */
-        ERR("EEK! read of 0 bytes! your app has broken ecore-con!");
-        flags = ECORE_FD_WRITE * ecore_main_fd_handler_active_get(svr->fd_handler, ECORE_FD_WRITE);
-        ecore_main_fd_handler_active_set(svr->fd_handler, flags);
-        return;
-     }
-   lr = ecore_time_get();
-   if ((num < 100) && (lr - svr->last_read < 0.01)) num2 = READBUFSIZ / 8;
-   else if (num > READBUFSIZ) num2 = READBUFSIZ;
-   if (num2)
-     {
-        DBG("%d bytes available for read from ioctl(), trying size (%d) to avoid congestion", num, num2);
-        num = num2;
-     }
-   else
-     DBG("%d bytes available for read", num);
-   svr->last_read = lr;
-   buf = malloc(num);
-   if (!buf) goto error;
-#else
-   num = sizeof(buf);
-   (void)num2;
-#endif
+
    if (svr->ecs_state || !(svr->type & ECORE_CON_SSL))
      {
-        num = read(svr->fd, buf, num);
+        errno = 0;
+        num = read(svr->fd, buf, sizeof(buf));
         /* 0 is not a valid return value for a tcp socket */
-        if ((num < 0) || (errno && (errno != EAGAIN))) goto error;
+        if ((num > 0) || ((num < 0) && (errno == EAGAIN)))
+           lost_server = EINA_FALSE;
+        else if (num < 0)
+          ecore_con_event_server_error(svr, strerror(errno));
      }
    else
      {
-        num = ecore_con_ssl_server_read(svr, buf, num);
+        num = ecore_con_ssl_server_read(svr, buf, sizeof(buf));
         /* this is not an actual 0 return, 0 here just means non-fatal error such as EAGAIN */
-        if (num < 0) goto error;
+        if (num >= 0)
+           lost_server = EINA_FALSE;
      }
 
    if ((!svr->delete_me) && (num > 0))
@@ -1963,31 +1919,11 @@ _ecore_con_cl_read(Ecore_Con_Server *svr)
         if (svr->ecs_state)
           ecore_con_socks_read(svr, buf, num);
         else
-          ecore_con_event_server_data(svr, buf, num,
-#ifdef FIONREAD
-          EINA_FALSE
-#else
-          EINA_TRUE
-#endif
-          );
+          ecore_con_event_server_data(svr, buf, num, EINA_TRUE);
      }
 
-   return;
-error:
-   {
-      char *err;
-#ifdef _WIN32
-      err = evil_format_message(WSAGetLastError());
-      _ecore_con_event_server_error(svr, err, EINA_FALSE);
-#else
-      err = strerror(errno);
-      ecore_con_event_server_error(svr, err);
-#endif
-   }
-#ifdef FIONREAD
-   free(buf);
-#endif
-   _ecore_con_server_kill(svr);
+   if (lost_server)
+      _ecore_con_server_kill(svr);
 }
 
 static Eina_Bool
index c68b559..2aef902 100644 (file)
@@ -150,7 +150,6 @@ struct _Ecore_Con_Server
    const char *proxyip;
    int proxyport;
    /* endsocks */
-   /* SSL */
    const char *verify_name;
 #if USE_GNUTLS
    gnutls_session_t session;
@@ -166,9 +165,7 @@ struct _Ecore_Con_Server
    SSL *ssl;
    int ssl_err;
 #endif
-   /* ENDSSL */
    double start_time;
-   double last_read;
    Ecore_Timer *until_deletion;
    double disconnect_time;
    double client_disconnect_time;
index c78759d..d44c1f5 100644 (file)
@@ -103,25 +103,11 @@ ecore_con_socks_read(Ecore_Con_Server *svr, unsigned char *buf, int num)
         DBG("SOCKS: %d bytes", num);
         if (num < 8)
           {
-#ifdef FIONREAD
-             if (!svr->ecs_recvbuf)
-               svr->ecs_recvbuf = eina_binbuf_manage_new_length(buf, num);
-             else
-               eina_binbuf_append_length(svr->ecs_recvbuf, buf, num);
-             if (!svr->ecs_recvbuf) goto error;
-#else
              if (!svr->ecs_recvbuf) svr->ecs_recvbuf = eina_binbuf_new();
              if (!svr->ecs_recvbuf) goto error;
              eina_binbuf_append_length(svr->ecs_recvbuf, buf, num);
-#endif
              /* the slowest connection on earth */
-             if (eina_binbuf_length_get(svr->ecs_recvbuf) != 8)
-               {
-#ifdef FIONREAD
-                  free(buf);
-#endif
-                  return;
-               }
+             if (eina_binbuf_length_get(svr->ecs_recvbuf) != 8) return;
              data = eina_binbuf_string_get(svr->ecs_recvbuf);
           }
         else if (num > 8) goto error;
@@ -163,9 +149,6 @@ ecore_con_socks_read(Ecore_Con_Server *svr, unsigned char *buf, int num)
         svr->ecs_state = ECORE_CON_SOCKS_STATE_DONE;
         INF("PROXY CONNECTED");
         if (svr->ecs_recvbuf) eina_binbuf_free(svr->ecs_recvbuf);
-#ifdef FIONREAD
-        else free(buf);
-#endif
         svr->ecs_recvbuf = NULL;
         svr->ecs_buf_offset = svr->ecs_addrlen = 0;
         memset(svr->ecs_addr, 0, sizeof(svr->ecs_addr));
@@ -176,9 +159,6 @@ ecore_con_socks_read(Ecore_Con_Server *svr, unsigned char *buf, int num)
      }
    return;
 error:
-#ifdef FIONREAD
-   free(buf);
-#endif
    _ecore_con_server_kill(svr);
 }