From d9b5f192d4883193f79cd3e43ed1da52521825dc Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Fri, 22 Aug 2014 13:14:59 +0100 Subject: [PATCH] Ecore con client: Migrate to eo. --- src/Makefile_Ecore_Con.am | 17 +- src/lib/ecore_con/Ecore_Con.h | 50 +--- src/lib/ecore_con/Ecore_Con_Eo.h | 1 + src/lib/ecore_con/Ecore_Con_Legacy.h | 1 + src/lib/ecore_con/ecore_con.c | 386 +++++++++++++------------- src/lib/ecore_con/ecore_con.eo | 17 ++ src/lib/ecore_con/ecore_con_client.eo | 33 +++ src/lib/ecore_con/ecore_con_private.h | 5 +- src/lib/ecore_con/ecore_con_ssl.c | 32 ++- 9 files changed, 294 insertions(+), 248 deletions(-) create mode 100644 src/lib/ecore_con/ecore_con_client.eo diff --git a/src/Makefile_Ecore_Con.am b/src/Makefile_Ecore_Con.am index 5fa1d7ba90..699a64cb28 100644 --- a/src/Makefile_Ecore_Con.am +++ b/src/Makefile_Ecore_Con.am @@ -1,14 +1,21 @@ ### Library -BUILT_SOURCES += \ - lib/ecore_con/ecore_con.eo.c \ +ecorecon_eobuiltheaders = \ lib/ecore_con/ecore_con.eo.h \ - lib/ecore_con/ecore_con.eo.legacy.h + lib/ecore_con/ecore_con.eo.legacy.h \ + lib/ecore_con/ecore_con_client.eo.h \ + lib/ecore_con/ecore_con_client.eo.legacy.h + +BUILT_SOURCES += \ + ${ecorecon_eobuiltheaders} \ + lib/ecore_con/ecore_con.eo.c \ + lib/ecore_con/ecore_con_client.eo.c ecoreconeolianfilesdir = $(datadir)/eolian/include/ecore-@VMAJ@ ecoreconeolianfiles_DATA = \ - lib/ecore_con/ecore_con.eo + lib/ecore_con/ecore_con.eo \ + lib/ecore_con/ecore_con_client.eo EXTRA_DIST += \ ${ecoreconeolianfiles_DATA} @@ -23,7 +30,7 @@ lib/ecore_con/Ecore_Con_Eo.h \ lib/ecore_con/Ecore_Con_Eet.h nodist_installed_ecoreconmainheaders_DATA = \ - lib/ecore_con/ecore_con.eo.h + ${ecorecon_eobuiltheaders} lib_ecore_con_libecore_con_la_SOURCES = \ lib/ecore_con/ecore_con_alloc.c \ diff --git a/src/lib/ecore_con/Ecore_Con.h b/src/lib/ecore_con/Ecore_Con.h index cea43437e4..c96cc00ae5 100644 --- a/src/lib/ecore_con/Ecore_Con.h +++ b/src/lib/ecore_con/Ecore_Con.h @@ -230,13 +230,6 @@ extern "C" { */ typedef struct _Ecore_Con_Server Ecore_Con_Server; -/** - * @typedef Ecore_Con_Client - * A connection handle to a client - * @ingroup Ecore_Con_Client_Group - */ -typedef struct _Ecore_Con_Client Ecore_Con_Client; - /** * @typedef Ecore_Con_Socks * An object representing a SOCKS proxy @@ -252,6 +245,12 @@ typedef struct Ecore_Con_Socks Ecore_Con_Socks; */ typedef struct _Ecore_Con_Url Ecore_Con_Url; +#ifndef EFL_NOLEGACY_API_SUPPORT +#include "Ecore_Con_Legacy.h" +#endif +#ifdef EFL_EO_API_SUPPORT +#include "Ecore_Con_Eo.h" +#endif /** * @addtogroup Ecore_Con_Events_Group @@ -605,16 +604,6 @@ EAPI extern int ECORE_CON_EVENT_URL_PROGRESS; * @{ */ -/** - * @typedef Ecore_Con_Dns_Cb - * A callback type for use with @ref ecore_con_lookup. - */ -typedef void (*Ecore_Con_Dns_Cb)(const char *canonname, - const char *ip, - struct sockaddr *addr, - int addrlen, - void *data); - /** * @typedef Ecore_Con_Type * @enum _Ecore_Con_Type @@ -1076,7 +1065,7 @@ EAPI int ecore_con_server_fd_get(Ecore_Con_Server *svr); * It should not be tampered with unless you REALLY know what you are doing. * @since 1.1 */ -EAPI int ecore_con_client_fd_get(Ecore_Con_Client *cl); +EAPI int ecore_con_client_fd_get(const Ecore_Con_Client *cl); /** * @} */ @@ -1121,14 +1110,6 @@ EAPI int ecore_con_client_fd_get(Ecore_Con_Client *cl); EAPI int ecore_con_client_send(Ecore_Con_Client *cl, const void *data, int size); -/** - * Retrieves the server representing the socket the client has - * connected to. - * - * @param cl The given client. - * @return The server that the client connected to. - */ -EAPI Ecore_Con_Server *ecore_con_client_server_get(Ecore_Con_Client *cl); /** * Closes the connection and frees memory allocated to the given client. * @@ -1162,7 +1143,7 @@ EAPI void * ecore_con_client_data_get(Ecore_Con_Client *cl); * The returned string should not be modified, freed or trusted to stay valid * after deletion for the @p cl object. If no IP is known @c NULL is returned. */ -EAPI const char * ecore_con_client_ip_get(Ecore_Con_Client *cl); +EAPI const char * ecore_con_client_ip_get(const Ecore_Con_Client *cl); /** * Flushes all pending data to the given client. * @@ -1183,7 +1164,7 @@ EAPI void ecore_con_client_flush(Ecore_Con_Client *cl); * * This function is used to find out how long a client has been connected for. */ -EAPI double ecore_con_client_uptime_get(Ecore_Con_Client *cl); +EAPI double ecore_con_client_uptime_get(const Ecore_Con_Client *cl); /** * Get the default time after which the client will be disconnected when * inactive @@ -1196,7 +1177,7 @@ EAPI double ecore_con_client_uptime_get(Ecore_Con_Client *cl); * * @see ecore_con_client_timeout_set() */ -EAPI double ecore_con_client_timeout_get(Ecore_Con_Client *cl); +EAPI double ecore_con_client_timeout_get(const Ecore_Con_Client *cl); /** * Set the time after which the client will be disconnected when inactive * @@ -1223,7 +1204,7 @@ EAPI void ecore_con_client_timeout_set(Ecore_Con_Client *cl, double * @param cl The given client. * @return @c EINA_TRUE if connected, @c EINA_FALSE otherwise. */ -EAPI Eina_Bool ecore_con_client_connected_get(Ecore_Con_Client *cl); +EAPI Eina_Bool ecore_con_client_connected_get(const Ecore_Con_Client *cl); /** * @brief Return the port that the client has connected to * @@ -1231,7 +1212,7 @@ EAPI Eina_Bool ecore_con_client_connected_get(Ecore_Con_Client *cl); * @return The port that @p cl has connected to, or -1 on error * Use this function to return the port on which a given client has connected. */ -EAPI int ecore_con_client_port_get(Ecore_Con_Client *cl); +EAPI int ecore_con_client_port_get(const Ecore_Con_Client *cl); @@ -1929,13 +1910,6 @@ EAPI int ecore_con_url_status_code_get(Ecore_Con_Url *url_con); * @} */ -#ifndef EFL_NOLEGACY_API_SUPPORT -#include "Ecore_Con_Legacy.h" -#endif -#ifdef EFL_EO_API_SUPPORT -#include "Ecore_Con_Eo.h" -#endif - #ifdef __cplusplus } #endif diff --git a/src/lib/ecore_con/Ecore_Con_Eo.h b/src/lib/ecore_con/Ecore_Con_Eo.h index b5d6095777..bbc28227a6 100644 --- a/src/lib/ecore_con/Ecore_Con_Eo.h +++ b/src/lib/ecore_con/Ecore_Con_Eo.h @@ -1 +1,2 @@ #include "ecore_con.eo.h" +#include "ecore_con_client.eo.h" diff --git a/src/lib/ecore_con/Ecore_Con_Legacy.h b/src/lib/ecore_con/Ecore_Con_Legacy.h index 378bbba1dd..e65ae8ab56 100644 --- a/src/lib/ecore_con/Ecore_Con_Legacy.h +++ b/src/lib/ecore_con/Ecore_Con_Legacy.h @@ -1 +1,2 @@ #include "ecore_con.eo.legacy.h" +#include "ecore_con_client.eo.legacy.h" diff --git a/src/lib/ecore_con/ecore_con.c b/src/lib/ecore_con/ecore_con.c index a30267299d..aa52712c89 100644 --- a/src/lib/ecore_con/ecore_con.c +++ b/src/lib/ecore_con/ecore_con.c @@ -79,7 +79,7 @@ static Eina_Bool _ecore_con_svr_cl_handler(void *data, Ecore_Fd_Handler *fd_handler); static void _ecore_con_server_flush(Ecore_Con_Server *svr); -static void _ecore_con_client_flush(Ecore_Con_Client *cl); +static void _ecore_con_client_flush(Ecore_Con_Client *obj); static void _ecore_con_event_client_add_free(Ecore_Con_Server *svr, void *ev); @@ -113,13 +113,14 @@ int sd_fd_max = 0; #endif void -_ecore_con_client_kill(Ecore_Con_Client *cl) +_ecore_con_client_kill(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); if (cl->delete_me) DBG("Multi kill request for client %p", cl); else { - ecore_con_event_client_del(cl); + ecore_con_event_client_del(obj); if (cl->buf) return; } INF("Lost client %s", (cl->ip) ? cl->ip : ""); @@ -749,16 +750,14 @@ ecore_con_server_flush(Ecore_Con_Server *svr) */ EAPI int -ecore_con_client_send(Ecore_Con_Client *cl, - const void *data, - int size) +ecore_con_client_send(Ecore_Con *obj, const void *data, int size) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_send"); - return 0; - } + return eo_do((Ecore_Con *)obj, ecore_con_obj_send(data, size)); +} +EOLIAN static int +_ecore_con_client_ecore_con_send(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl, const void *data, int size) +{ EINA_SAFETY_ON_TRUE_RETURN_VAL(cl->delete_me, 0); EINA_SAFETY_ON_NULL_RETURN_VAL(data, 0); @@ -793,121 +792,100 @@ ecore_con_client_send(Ecore_Con_Client *cl, return size; } -EAPI Ecore_Con_Server * -ecore_con_client_server_get(Ecore_Con_Client *cl) +EOLIAN static Ecore_Con_Server * +_ecore_con_client_server_get(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, - "ecore_con_client_server_get"); - return NULL; - } - return cl->host_server; } -EAPI Eina_Bool -ecore_con_client_connected_get(Ecore_Con_Client *cl) +EOLIAN static Eina_Bool +_ecore_con_client_ecore_con_connected_get(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, - "ecore_con_client_connected_get"); - return EINA_FALSE; - } - return !cl->delete_me; } -EAPI void -ecore_con_client_timeout_set(Ecore_Con_Client *cl, - double timeout) +EAPI Eina_Bool +ecore_con_client_connected_get(const Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, - "ecore_con_client_timeout_set"); - return; - } - - cl->disconnect_time = timeout; - - _ecore_con_cl_timer_update(cl); + return eo_do((Ecore_Con *)obj, ecore_con_obj_connected_get()); } -EAPI double -ecore_con_client_timeout_get(Ecore_Con_Client *cl) +EOLIAN static void +_ecore_con_client_ecore_con_timeout_set(Eo *obj, Ecore_Con_Client_Data *cl, double timeout) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_timeout_get"); - return 0; - } + cl->disconnect_time = timeout; + _ecore_con_cl_timer_update(obj); +} + +EAPI void +ecore_con_client_timeout_set(Ecore_Con *obj, double timeout) +{ + eo_do((Ecore_Con *)obj, ecore_con_obj_timeout_set(timeout)); +} + +EOLIAN static double +_ecore_con_client_ecore_con_timeout_get(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl) +{ return cl->disconnect_time; } -EAPI void * -ecore_con_client_del(Ecore_Con_Client *cl) +EAPI double +ecore_con_client_timeout_get(const Ecore_Con *obj) { - if (!cl) return NULL; - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_del"); - return NULL; - } + return eo_do((Ecore_Con *)obj, ecore_con_obj_timeout_get()); +} - _ecore_con_client_kill(cl); +EAPI void * +ecore_con_client_del(Ecore_Con_Client *obj) +{ + if (!obj) return NULL; + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); + if (!cl) return NULL; + + _ecore_con_client_kill(obj); return cl->data; } EAPI void -ecore_con_client_data_set(Ecore_Con_Client *cl, +ecore_con_client_data_set(Ecore_Con_Client *obj, const void *data) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_data_set"); - return; - } + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); + if (!cl) + return; cl->data = (void *)data; } EAPI void * -ecore_con_client_data_get(Ecore_Con_Client *cl) +ecore_con_client_data_get(Ecore_Con_Client *obj) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_data_get"); - return NULL; - } + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); + if (!cl) + return NULL; return cl->data; } -EAPI const char * -ecore_con_client_ip_get(Ecore_Con_Client *cl) +EOLIAN static const char * +_ecore_con_client_ecore_con_ip_get(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_ip_get"); - return NULL; - } if (!cl->ip) cl->ip = _ecore_con_pretty_ip(cl->client_addr); return cl->ip; } -EAPI int -ecore_con_client_port_get(Ecore_Con_Client *cl) +EAPI const char * +ecore_con_client_ip_get(const Ecore_Con *obj) +{ + return eo_do(obj, ecore_con_obj_ip_get()); +} + +EOLIAN static int +_ecore_con_client_ecore_con_port_get(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_port_get"); - return -1; - } if (cl->client_addr->sa_family == AF_INET) return ((struct sockaddr_in *)cl->client_addr)->sin_port; #ifdef HAVE_IPV6 @@ -917,28 +895,34 @@ ecore_con_client_port_get(Ecore_Con_Client *cl) #endif } -EAPI double -ecore_con_client_uptime_get(Ecore_Con_Client *cl) +EAPI int +ecore_con_client_port_get(const Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_uptime_get"); - return -1; - } + return eo_do((Ecore_Con *)obj, ecore_con_obj_port_get()); +} +EOLIAN static double +_ecore_con_client_ecore_con_uptime_get(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl) +{ return ecore_time_get() - cl->start_time; } -EAPI void -ecore_con_client_flush(Ecore_Con_Client *cl) +EAPI double +ecore_con_client_uptime_get(const Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, "ecore_con_client_flush"); - return; - } + return eo_do(obj, ecore_con_obj_uptime_get()); +} - _ecore_con_client_flush(cl); +EOLIAN static void +_ecore_con_client_ecore_con_flush(Eo *obj, Ecore_Con_Client_Data *cl EINA_UNUSED) +{ + _ecore_con_client_flush(obj); +} + +EAPI void +ecore_con_client_flush(Ecore_Con *obj) +{ + eo_do((Ecore_Con *)obj, ecore_con_obj_flush()); } EAPI int @@ -954,17 +938,18 @@ ecore_con_server_fd_get(Ecore_Con_Server *svr) return ecore_main_fd_handler_fd_get(svr->fd_handler); } -EAPI int -ecore_con_client_fd_get(Ecore_Con_Client *cl) +EOLIAN static int +_ecore_con_client_ecore_con_fd_get(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) - { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, __func__); - return -1; - } return ecore_main_fd_handler_fd_get(cl->fd_handler); } +EAPI int +ecore_con_client_fd_get(const Ecore_Con *obj) +{ + return eo_do((Ecore_Con *)obj, ecore_con_obj_fd_get()); +} + /** * @} */ @@ -1081,8 +1066,9 @@ ecore_con_event_server_data(Ecore_Con_Server *svr, unsigned char *buf, int num, } void -ecore_con_event_client_add(Ecore_Con_Client *cl) +ecore_con_event_client_add(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); Ecore_Con_Event_Client_Add *e; int ev = ECORE_CON_EVENT_CLIENT_ADD; @@ -1091,9 +1077,9 @@ ecore_con_event_client_add(Ecore_Con_Client *cl) cl->event_count = eina_list_append(cl->event_count, e); cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); - _ecore_con_cl_timer_update(cl); + _ecore_con_cl_timer_update(obj); cl->start_time = ecore_time_get(); - e->client = cl; + e->client = obj; if (cl->upgrade) ev = ECORE_CON_EVENT_CLIENT_UPGRADE; ecore_event_add(ev, e, (Ecore_End_Cb)_ecore_con_event_client_add_free, cl->host_server); @@ -1101,8 +1087,9 @@ ecore_con_event_client_add(Ecore_Con_Client *cl) } void -ecore_con_event_client_del(Ecore_Con_Client *cl) +ecore_con_event_client_del(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); Ecore_Con_Event_Client_Del *e; if (!cl) return; @@ -1113,16 +1100,17 @@ ecore_con_event_client_del(Ecore_Con_Client *cl) cl->event_count = eina_list_append(cl->event_count, e); cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); - _ecore_con_cl_timer_update(cl); - e->client = cl; + _ecore_con_cl_timer_update(obj); + e->client = obj; ecore_event_add(ECORE_CON_EVENT_CLIENT_DEL, e, (Ecore_End_Cb)_ecore_con_event_client_del_free, cl->host_server); _ecore_con_event_count++; } void -ecore_con_event_client_write(Ecore_Con_Client *cl, int num) +ecore_con_event_client_write(Ecore_Con_Client *obj, int num) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); Ecore_Con_Event_Client_Write *e; e = ecore_con_event_client_write_alloc(); @@ -1130,7 +1118,7 @@ ecore_con_event_client_write(Ecore_Con_Client *cl, int num) cl->event_count = eina_list_append(cl->event_count, e); cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); - e->client = cl; + e->client = obj; e->size = num; ecore_event_add(ECORE_CON_EVENT_CLIENT_WRITE, e, (Ecore_End_Cb)_ecore_con_event_client_write_free, cl->host_server); @@ -1138,8 +1126,9 @@ ecore_con_event_client_write(Ecore_Con_Client *cl, int num) } void -ecore_con_event_client_data(Ecore_Con_Client *cl, unsigned char *buf, int num, Eina_Bool duplicate) +ecore_con_event_client_data(Ecore_Con_Client *obj, unsigned char *buf, int num, Eina_Bool duplicate) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); Ecore_Con_Event_Client_Data *e; e = ecore_con_event_client_data_alloc(); @@ -1147,8 +1136,8 @@ ecore_con_event_client_data(Ecore_Con_Client *cl, unsigned char *buf, int num, E cl->event_count = eina_list_append(cl->event_count, e); cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); - _ecore_con_cl_timer_update(cl); - e->client = cl; + _ecore_con_cl_timer_update(obj); + e->client = obj; if ((duplicate) && (num > 0)) { e->data = malloc(num); @@ -1191,14 +1180,15 @@ _ecore_con_event_server_error(Ecore_Con_Server *svr, char *error, Eina_Bool dupl } void -ecore_con_event_client_error(Ecore_Con_Client *cl, const char *error) +ecore_con_event_client_error(Ecore_Con_Client *obj, const char *error) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); Ecore_Con_Event_Client_Error *e; e = ecore_con_event_client_error_alloc(); EINA_SAFETY_ON_NULL_RETURN(e); - e->client = cl; + e->client = obj; e->error = strdup(error); DBG("%s", error); cl->event_count = eina_list_append(cl->event_count, e); @@ -1210,7 +1200,7 @@ ecore_con_event_client_error(Ecore_Con_Client *cl, const char *error) static void _ecore_con_server_free(Ecore_Con_Server *svr) { - Ecore_Con_Client *cl; + Ecore_Con_Client *cl_obj; double t_start, t; if (svr->event_count) return; @@ -1245,8 +1235,9 @@ _ecore_con_server_free(Ecore_Con_Server *svr) if (svr->buf) eina_binbuf_free(svr->buf); - EINA_LIST_FREE(svr->clients, cl) + EINA_LIST_FREE(svr->clients, cl_obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(cl_obj, ECORE_CON_CLIENT_CLASS); Ecore_Con_Event_Server_Add *ev; /* some pointer hacks here to prevent double frees if people are being stupid */ @@ -1254,7 +1245,7 @@ _ecore_con_server_free(Ecore_Con_Server *svr) ev->server = NULL; cl->delete_me = EINA_TRUE; INF("cl %p is dead", cl); - _ecore_con_client_free(cl); + _ecore_con_client_free(cl_obj); } if ((svr->created) && (svr->path) && (svr->ppid == getpid())) unlink(svr->path); @@ -1285,7 +1276,13 @@ _ecore_con_server_free(Ecore_Con_Server *svr) } static void -_ecore_con_client_free(Ecore_Con_Client *cl) +_ecore_con_client_free(Ecore_Con_Client *obj) +{ + eo_del(obj); +} + +EOLIAN static void +_ecore_con_client_eo_base_destructor(Eo *obj, Ecore_Con_Client_Data *cl) { double t_start, t; @@ -1294,7 +1291,7 @@ _ecore_con_client_free(Ecore_Con_Client *cl) t_start = ecore_time_get(); while ((cl->buf) && (!cl->delete_me)) { - _ecore_con_client_flush(cl); + _ecore_con_client_flush(obj); t = ecore_time_get(); if ((t - t_start) > 0.5) { @@ -1305,7 +1302,7 @@ _ecore_con_client_free(Ecore_Con_Client *cl) break; } } - cl->host_server->clients = eina_list_remove(cl->host_server->clients, cl); + cl->host_server->clients = eina_list_remove(cl->host_server->clients, obj); --cl->host_server->client_count; #ifdef _WIN32 @@ -1313,12 +1310,11 @@ _ecore_con_client_free(Ecore_Con_Client *cl) #endif if (cl->event_count) return; - ECORE_MAGIC_SET(cl, ECORE_MAGIC_NONE); if (cl->buf) eina_binbuf_free(cl->buf); if (cl->host_server->type & ECORE_CON_SSL) - ecore_con_ssl_client_shutdown(cl); + ecore_con_ssl_client_shutdown(obj); if (cl->fd_handler) ecore_main_fd_handler_del(cl->fd_handler); @@ -1334,8 +1330,8 @@ _ecore_con_client_free(Ecore_Con_Client *cl) eina_stringshare_del(cl->ip); cl->data = NULL; - free(cl); - return; + + eo_do_super(obj, ECORE_CON_CLIENT_CLASS, eo_destructor()); } static Eina_Bool @@ -1379,17 +1375,19 @@ _ecore_con_server_timer_update(Ecore_Con_Server *svr) } static Eina_Bool -_ecore_con_client_timer(Ecore_Con_Client *cl) +_ecore_con_client_timer(Ecore_Con_Client *obj) { - ecore_con_client_del(cl); + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); + ecore_con_client_del(obj); cl->until_deletion = NULL; return ECORE_CALLBACK_CANCEL; } static void -_ecore_con_cl_timer_update(Ecore_Con_Client *cl) +_ecore_con_cl_timer_update(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); if (cl->disconnect_time) { if (cl->disconnect_time > 0) @@ -1890,7 +1888,7 @@ _ecore_con_svr_tcp_handler(void *data, Ecore_Fd_Handler *fd_handler EINA_UNUSED) { Ecore_Con_Server *svr; - Ecore_Con_Client *cl = NULL; + Ecore_Con_Client *obj = NULL; unsigned char client_addr[256]; unsigned int client_addr_len; const char *clerr = NULL; @@ -1905,7 +1903,8 @@ _ecore_con_svr_tcp_handler(void *data, /* a new client */ - cl = calloc(1, sizeof(Ecore_Con_Client)); + obj = eo_add(ECORE_CON_CLIENT_CLASS, NULL); + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); if (!cl) { ecore_con_event_server_error(svr, "Memory allocation failure when attempting to add a new client"); @@ -1927,15 +1926,14 @@ _ecore_con_svr_tcp_handler(void *data, if (fcntl(cl->fd, F_SETFL, O_NONBLOCK) < 0) goto error; if (fcntl(cl->fd, F_SETFD, FD_CLOEXEC) < 0) goto error; 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, obj, NULL, NULL); if (!cl->fd_handler) goto error; - ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT); if ((!svr->upgrade) && (svr->type & ECORE_CON_SSL)) { cl->handshaking = EINA_TRUE; cl->ssl_state = ECORE_CON_SSL_STATE_INIT; - if (ecore_con_ssl_client_init(cl)) + if (ecore_con_ssl_client_init(obj)) goto error; } @@ -1948,11 +1946,11 @@ _ecore_con_svr_tcp_handler(void *data, cl->client_addr_len = client_addr_len; memcpy(cl->client_addr, &client_addr, client_addr_len); - svr->clients = eina_list_append(svr->clients, cl); + svr->clients = eina_list_append(svr->clients, obj); svr->client_count++; if ((!cl->delete_me) && (!cl->handshaking)) - ecore_con_event_client_add(cl); + ecore_con_event_client_add(obj); return ECORE_CALLBACK_RENEW; @@ -2129,7 +2127,7 @@ _ecore_con_svr_udp_handler(void *data, socklen_t client_addr_len = sizeof(client_addr); int num; Ecore_Con_Server *svr; - Ecore_Con_Client *cl = NULL; + Ecore_Con_Client *obj = NULL; svr = data; @@ -2165,7 +2163,8 @@ _ecore_con_svr_udp_handler(void *data, } /* Create a new client for use in the client data event */ - cl = calloc(1, sizeof(Ecore_Con_Client)); + obj = eo_add(ECORE_CON_CLIENT_CLASS, NULL); + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); EINA_SAFETY_ON_NULL_RETURN_VAL(cl, ECORE_CALLBACK_RENEW); cl->host_server = svr; @@ -2178,19 +2177,19 @@ _ecore_con_svr_udp_handler(void *data, cl->client_addr_len = client_addr_len; memcpy(cl->client_addr, &client_addr, client_addr_len); - ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT); - svr->clients = eina_list_append(svr->clients, cl); + svr->clients = eina_list_append(svr->clients, obj); svr->client_count++; - ecore_con_event_client_add(cl); - ecore_con_event_client_data(cl, buf, num, EINA_TRUE); + ecore_con_event_client_add(obj); + ecore_con_event_client_data(obj, buf, num, EINA_TRUE); return ECORE_CALLBACK_RENEW; } static void -_ecore_con_svr_cl_read(Ecore_Con_Client *cl) +_ecore_con_svr_cl_read(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); int num = 0; Eina_Bool lost_client = EINA_TRUE; unsigned char buf[READBUFSIZ]; @@ -2202,10 +2201,10 @@ _ecore_con_svr_cl_read(Ecore_Con_Client *cl) /* add an extra handshake attempt just before read, even though * read also attempts to handshake, to try to finish sooner */ - if (ecore_con_ssl_client_init(cl)) + if (ecore_con_ssl_client_init(obj)) lost_client = EINA_FALSE; - _ecore_con_cl_timer_update(cl); + _ecore_con_cl_timer_update(obj); } if (!(cl->host_server->type & ECORE_CON_SSL) && (!cl->upgrade)) @@ -2215,48 +2214,48 @@ _ecore_con_svr_cl_read(Ecore_Con_Client *cl) if ((num > 0) || ((num < 0) && ((errno == EAGAIN) || (errno == EINTR)))) lost_client = EINA_FALSE; else if (num < 0) - ecore_con_event_client_error(cl, strerror(errno)); + ecore_con_event_client_error(obj, strerror(errno)); } else { - num = ecore_con_ssl_client_read(cl, buf, sizeof(buf)); + num = ecore_con_ssl_client_read(obj, buf, sizeof(buf)); /* this is not an actual 0 return, 0 here just means non-fatal error such as EAGAIN */ if (num >= 0) lost_client = EINA_FALSE; } if ((!cl->delete_me) && (num > 0)) - ecore_con_event_client_data(cl, buf, num, EINA_TRUE); + ecore_con_event_client_data(obj, buf, num, EINA_TRUE); - if (lost_client) _ecore_con_client_kill(cl); + if (lost_client) _ecore_con_client_kill(obj); } static Eina_Bool _ecore_con_svr_cl_handler(void *data, Ecore_Fd_Handler *fd_handler) { - Ecore_Con_Client *cl; + Ecore_Con_Client *obj = data; + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); - cl = data; if (cl->delete_me) return ECORE_CALLBACK_RENEW; if (cl->handshaking && ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ | ECORE_FD_WRITE)) { - if (ecore_con_ssl_client_init(cl)) + if (ecore_con_ssl_client_init(obj)) { ERR("ssl handshaking failed!"); - _ecore_con_client_kill(cl); + _ecore_con_client_kill(obj); return ECORE_CALLBACK_RENEW; } else if (!cl->ssl_state) - ecore_con_event_client_add(cl); + ecore_con_event_client_add(obj); } else if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ)) - _ecore_con_svr_cl_read(cl); + _ecore_con_svr_cl_read(obj); else if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_WRITE)) - _ecore_con_client_flush(cl); + _ecore_con_client_flush(obj); return ECORE_CALLBACK_RENEW; } @@ -2372,8 +2371,9 @@ _ecore_con_server_flush(Ecore_Con_Server *svr) } static void -_ecore_con_client_flush(Ecore_Con_Client *cl) +_ecore_con_client_flush(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); int count = 0; size_t num = 0; @@ -2391,10 +2391,10 @@ _ecore_con_client_flush(Ecore_Con_Client *cl) if (cl->handshaking) { - if (ecore_con_ssl_client_init(cl)) + if (ecore_con_ssl_client_init(obj)) count = -1; - _ecore_con_cl_timer_update(cl); + _ecore_con_cl_timer_update(obj); } if (!count) @@ -2405,21 +2405,21 @@ _ecore_con_client_flush(Ecore_Con_Client *cl) if (!(cl->host_server->type & ECORE_CON_SSL) && (!cl->upgrade)) count = write(cl->fd, eina_binbuf_string_get(cl->buf) + cl->buf_offset, num); else - count = ecore_con_ssl_client_write(cl, eina_binbuf_string_get(cl->buf) + cl->buf_offset, num); + count = ecore_con_ssl_client_write(obj, eina_binbuf_string_get(cl->buf) + cl->buf_offset, num); } if (count < 0) { if ((errno != EAGAIN) && (errno != EINTR) && (!cl->delete_me)) { - ecore_con_event_client_error(cl, strerror(errno)); - _ecore_con_client_kill(cl); + ecore_con_event_client_error(obj, strerror(errno)); + _ecore_con_client_kill(obj); } return; } - if (count) ecore_con_event_client_write(cl, count); + if (count) ecore_con_event_client_write(obj, count); cl->buf_offset += count, num -= count; if (cl->buf_offset >= eina_binbuf_length_get(cl->buf)) { @@ -2451,12 +2451,13 @@ _ecore_con_event_client_add_free(Ecore_Con_Server *svr, e = ev; if (e->client) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(e->client, ECORE_CON_CLIENT_CLASS); Eina_Bool svrfreed = EINA_FALSE; - e->client->event_count = eina_list_remove(e->client->event_count, e); - if (e->client->host_server) + cl->event_count = eina_list_remove(cl->event_count, e); + if (cl->host_server) { - e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev); + cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, ev); if ((!svr->event_count) && (svr->delete_me)) { _ecore_con_server_free(svr); @@ -2465,7 +2466,7 @@ _ecore_con_event_client_add_free(Ecore_Con_Server *svr, } if (!svrfreed) { - if ((!e->client->event_count) && (e->client->delete_me)) + if ((!cl->event_count) && (cl->delete_me)) ecore_con_client_del(e->client); } } @@ -2485,12 +2486,13 @@ _ecore_con_event_client_del_free(Ecore_Con_Server *svr, e = ev; if (e->client) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(e->client, ECORE_CON_CLIENT_CLASS); Eina_Bool svrfreed = EINA_FALSE; - e->client->event_count = eina_list_remove(e->client->event_count, e); - if (e->client->host_server) + cl->event_count = eina_list_remove(cl->event_count, e); + if (cl->host_server) { - e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev); + cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, ev); if ((!svr->event_count) && (svr->delete_me)) { _ecore_con_server_free(svr); @@ -2499,7 +2501,7 @@ _ecore_con_event_client_del_free(Ecore_Con_Server *svr, } if (!svrfreed) { - if (!e->client->event_count) + if (!cl->event_count) _ecore_con_client_free(e->client); } } @@ -2515,12 +2517,13 @@ _ecore_con_event_client_write_free(Ecore_Con_Server *svr, { if (e->client) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(e->client, ECORE_CON_CLIENT_CLASS); Eina_Bool svrfreed = EINA_FALSE; - e->client->event_count = eina_list_remove(e->client->event_count, e); - if (e->client->host_server) + cl->event_count = eina_list_remove(cl->event_count, e); + if (cl->host_server) { - e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e); + cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, e); if ((!svr->event_count) && (svr->delete_me)) { _ecore_con_server_free(svr); @@ -2529,10 +2532,10 @@ _ecore_con_event_client_write_free(Ecore_Con_Server *svr, } if (!svrfreed) { - if (((!e->client->event_count) && (e->client->delete_me)) || - ((e->client->host_server && - ((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP || - (e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST)))) + if (((!cl->event_count) && (cl->delete_me)) || + ((cl->host_server && + ((cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP || + (cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST)))) ecore_con_client_del(e->client); } } @@ -2551,12 +2554,13 @@ _ecore_con_event_client_data_free(Ecore_Con_Server *svr, e = ev; if (e->client) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(e->client, ECORE_CON_CLIENT_CLASS); Eina_Bool svrfreed = EINA_FALSE; - e->client->event_count = eina_list_remove(e->client->event_count, e); - if (e->client->host_server) + cl->event_count = eina_list_remove(cl->event_count, e); + if (cl->host_server) { - e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev); + cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, ev); } if ((!svr->event_count) && (svr->delete_me)) { @@ -2565,10 +2569,10 @@ _ecore_con_event_client_data_free(Ecore_Con_Server *svr, } if (!svrfreed) { - if (((!e->client->event_count) && (e->client->delete_me)) || - ((e->client->host_server && - ((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP || - (e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST)))) + if (((!cl->event_count) && (cl->delete_me)) || + ((cl->host_server && + ((cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP || + (cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST)))) ecore_con_client_del(e->client); } } @@ -2676,12 +2680,13 @@ _ecore_con_event_client_error_free(Ecore_Con_Server *svr, Ecore_Con_Event_Client { if (e->client) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(e->client, ECORE_CON_CLIENT_CLASS); Eina_Bool svrfreed = EINA_FALSE; if (eina_list_data_find(svr->clients, e->client)) { - e->client->event_count = eina_list_remove(e->client->event_count, e); - if ((!e->client->event_count) && (e->client->delete_me)) + cl->event_count = eina_list_remove(cl->event_count, e); + if ((!cl->event_count) && (cl->delete_me)) { _ecore_con_client_free(e->client); svrfreed = EINA_TRUE; @@ -2724,3 +2729,4 @@ _ecore_con_lookup_done(void *data, } #include "ecore_con.eo.c" +#include "ecore_con_client.eo.c" diff --git a/src/lib/ecore_con/ecore_con.eo b/src/lib/ecore_con/ecore_con.eo index 8a685dee6a..8fe53c3580 100644 --- a/src/lib/ecore_con/ecore_con.eo +++ b/src/lib/ecore_con/ecore_con.eo @@ -164,3 +164,20 @@ abstract Ecore.Con (Eo.Base) { virtual.send; } } + +type Ecore_Con_Dns_Cb: func void (const(char) *, + const(char) *, + struct sockaddr *, + int, + void *); + +/* FIXME: Ecore_Con_Dns_Cb should be like this: +type Ecore_Con_Dns_Cb: func void (const(char) *canonname, + const(char) *ip, + struct sockaddr *addr, + int addrlen, + void *data); + + +* Add events +*/ diff --git a/src/lib/ecore_con/ecore_con_client.eo b/src/lib/ecore_con/ecore_con_client.eo new file mode 100644 index 0000000000..c360a2252a --- /dev/null +++ b/src/lib/ecore_con/ecore_con_client.eo @@ -0,0 +1,33 @@ +class Ecore.Con.Client (Ecore.Con) { + eo_prefix: ecore_con_client_obj; + properties { + server { + /** + * Controls the server representing the socket the client has + * connected to. + * + */ + get { + } + values { + /* FIXME: Should be Ecore.Con.Server. */ + Ecore_Con_Server *svr; /*@ The server the client is connected to. */ + } + } + } + implements { + Eo.Base.destructor; + Ecore.Con.ip.get; + Ecore.Con.uptime.get; + Ecore.Con.port.get; + Ecore.Con.fd.get; + Ecore.Con.connected.get; + Ecore.Con.timeout.set; + Ecore.Con.timeout.get; + Ecore.Con.flush; + Ecore.Con.send; + } +} + +/* FIXME: Should SSL inherit from client? What's exactly the interaction here? + Fix clients to be children of server when created .*/ diff --git a/src/lib/ecore_con/ecore_con_private.h b/src/lib/ecore_con/ecore_con_private.h index d224e2a385..bd5d35f7fb 100644 --- a/src/lib/ecore_con/ecore_con_private.h +++ b/src/lib/ecore_con/ecore_con_private.h @@ -94,9 +94,8 @@ typedef enum Ecore_Con_Proxy_State ECORE_CON_PROXY_STATE_CONFIRM, } Ecore_Con_Proxy_State; -struct _Ecore_Con_Client +struct _Ecore_Con_Client_Data { - ECORE_MAGIC; int fd; Ecore_Con_Server *host_server; void *data; @@ -123,6 +122,8 @@ struct _Ecore_Con_Client Eina_Bool delete_me : 1; /* del event has been queued */ }; +typedef struct _Ecore_Con_Client_Data Ecore_Con_Client_Data; + struct _Ecore_Con_Server { ECORE_MAGIC; diff --git a/src/lib/ecore_con/ecore_con_ssl.c b/src/lib/ecore_con/ecore_con_ssl.c index d10d4fa75b..7decaf4734 100644 --- a/src/lib/ecore_con/ecore_con_ssl.c +++ b/src/lib/ecore_con/ecore_con_ssl.c @@ -518,19 +518,21 @@ ecore_con_ssl_server_write(Ecore_Con_Server *svr, } Ecore_Con_Ssl_Error -ecore_con_ssl_client_init(Ecore_Con_Client *cl) +ecore_con_ssl_client_init(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); if (!(cl->host_server->type & ECORE_CON_SSL)) return ECORE_CON_SSL_ERROR_NONE; - return SSL_SUFFIX(_ecore_con_ssl_client_init) (cl); + return SSL_SUFFIX(_ecore_con_ssl_client_init) (obj); } Ecore_Con_Ssl_Error -ecore_con_ssl_client_shutdown(Ecore_Con_Client *cl) +ecore_con_ssl_client_shutdown(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); if (!(cl->host_server->type & ECORE_CON_SSL)) return ECORE_CON_SSL_ERROR_NONE; - return SSL_SUFFIX(_ecore_con_ssl_client_shutdown) (cl); + return SSL_SUFFIX(_ecore_con_ssl_client_shutdown) (obj); } int @@ -835,11 +837,11 @@ ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type ssl_type) */ EAPI Eina_Bool -ecore_con_ssl_client_upgrade(Ecore_Con_Client *cl, Ecore_Con_Type ssl_type) +ecore_con_ssl_client_upgrade(Ecore_Con_Client *obj, Ecore_Con_Type ssl_type) { - if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); + if (!cl) { - ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, __func__); return EINA_FALSE; } #if _ECORE_CON_SSL_AVAILABLE == 0 @@ -857,7 +859,7 @@ ecore_con_ssl_client_upgrade(Ecore_Con_Client *cl, Ecore_Con_Type ssl_type) cl->host_server->upgrade = EINA_TRUE; cl->handshaking = EINA_TRUE; cl->ssl_state = ECORE_CON_SSL_STATE_INIT; - return SSL_SUFFIX(_ecore_con_ssl_client_init) (cl); + return SSL_SUFFIX(_ecore_con_ssl_client_init) (obj); } /** @@ -1868,8 +1870,9 @@ _ecore_con_ssl_server_write_openssl(Ecore_Con_Server *svr, } static Ecore_Con_Ssl_Error -_ecore_con_ssl_client_init_openssl(Ecore_Con_Client *cl) +_ecore_con_ssl_client_init_openssl(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); int ret = -1; switch (cl->ssl_state) { @@ -1929,13 +1932,14 @@ _ecore_con_ssl_client_init_openssl(Ecore_Con_Client *cl) error: _openssl_print_errors(cl, ECORE_CON_EVENT_CLIENT_ERROR); - _ecore_con_ssl_client_shutdown_openssl(cl); + _ecore_con_ssl_client_shutdown_openssl(obj); return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED; } static Ecore_Con_Ssl_Error -_ecore_con_ssl_client_shutdown_openssl(Ecore_Con_Client *cl) +_ecore_con_ssl_client_shutdown_openssl(Ecore_Con_Client *obj) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); if (cl->ssl) { if (!SSL_shutdown(cl->ssl)) @@ -1951,10 +1955,11 @@ _ecore_con_ssl_client_shutdown_openssl(Ecore_Con_Client *cl) } static int -_ecore_con_ssl_client_read_openssl(Ecore_Con_Client *cl, +_ecore_con_ssl_client_read_openssl(Ecore_Con_Client *obj, unsigned char *buf, int size) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); int num; if (!cl->ssl) return -1; @@ -1981,10 +1986,11 @@ _ecore_con_ssl_client_read_openssl(Ecore_Con_Client *cl, } static int -_ecore_con_ssl_client_write_openssl(Ecore_Con_Client *cl, +_ecore_con_ssl_client_write_openssl(Ecore_Con_Client *obj, const unsigned char *buf, int size) { + Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); int num; num = SSL_write(cl->ssl, buf, size);