diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog index 34f6e589c3..6ceb0544e1 100644 --- a/legacy/ecore/ChangeLog +++ b/legacy/ecore/ChangeLog @@ -390,7 +390,3 @@ * 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 diff --git a/legacy/ecore/configure.ac b/legacy/ecore/configure.ac index 461e089dd4..60c7636fe2 100644 --- a/legacy/ecore/configure.ac +++ b/legacy/ecore/configure.ac @@ -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], diff --git a/legacy/ecore/src/lib/ecore_con/ecore_con.c b/legacy/ecore/src/lib/ecore_con/ecore_con.c index b49ae8dd13..afd31a5f78 100644 --- a/legacy/ecore/src/lib/ecore_con/ecore_con.c +++ b/legacy/ecore/src/lib/ecore_con/ecore_con.c @@ -38,14 +38,6 @@ # include #endif -#ifdef HAVE_SYS_IOCTL_H -# include -#endif - -#ifdef HAVE_WINSOCK2_H -# include -#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 diff --git a/legacy/ecore/src/lib/ecore_con/ecore_con_private.h b/legacy/ecore/src/lib/ecore_con/ecore_con_private.h index c68b559f25..2aef9027b9 100644 --- a/legacy/ecore/src/lib/ecore_con/ecore_con_private.h +++ b/legacy/ecore/src/lib/ecore_con/ecore_con_private.h @@ -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; diff --git a/legacy/ecore/src/lib/ecore_con/ecore_con_socks.c b/legacy/ecore/src/lib/ecore_con/ecore_con_socks.c index c78759d8f2..d44c1f517f 100644 --- a/legacy/ecore/src/lib/ecore_con/ecore_con_socks.c +++ b/legacy/ecore/src/lib/ecore_con/ecore_con_socks.c @@ -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); }