diff options
author | Tom Hacohen <tom@stosb.com> | 2014-08-22 16:06:27 +0100 |
---|---|---|
committer | Tom Hacohen <tom@stosb.com> | 2014-08-22 17:00:49 +0100 |
commit | 78df17e8a0e4fb78aefa2ff4bf5740c8dbc1b3ed (patch) | |
tree | 8cf03305371ef6af8964ade863305adfb7506f4f | |
parent | e51639a117f762ca9d0e86ed841a9b6fadbcf6da (diff) | |
download | efl-78df17e8a0e4fb78aefa2ff4bf5740c8dbc1b3ed.tar.gz |
Ecore con server: Migrate to eo.
-rw-r--r-- | src/Makefile_Ecore_Con.am | 10 | ||||
-rw-r--r-- | src/lib/ecore_con/Ecore_Con.h | 20 | ||||
-rw-r--r-- | src/lib/ecore_con/Ecore_Con_Eo.h | 1 | ||||
-rw-r--r-- | src/lib/ecore_con/Ecore_Con_Legacy.h | 1 | ||||
-rw-r--r-- | src/lib/ecore_con/ecore_con.c | 605 | ||||
-rw-r--r-- | src/lib/ecore_con/ecore_con_dns.c | 12 | ||||
-rw-r--r-- | src/lib/ecore_con/ecore_con_local.c | 10 | ||||
-rw-r--r-- | src/lib/ecore_con/ecore_con_private.h | 4 | ||||
-rw-r--r-- | src/lib/ecore_con/ecore_con_server.eo | 16 | ||||
-rw-r--r-- | src/lib/ecore_con/ecore_con_socks.c | 94 | ||||
-rw-r--r-- | src/lib/ecore_con/ecore_con_ssl.c | 166 |
11 files changed, 493 insertions, 446 deletions
diff --git a/src/Makefile_Ecore_Con.am b/src/Makefile_Ecore_Con.am index 699a64cb28..a659162ba1 100644 --- a/src/Makefile_Ecore_Con.am +++ b/src/Makefile_Ecore_Con.am @@ -5,17 +5,21 @@ ecorecon_eobuiltheaders = \ lib/ecore_con/ecore_con.eo.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 + lib/ecore_con/ecore_con_client.eo.legacy.h \ + lib/ecore_con/ecore_con_server.eo.h \ + lib/ecore_con/ecore_con_server.eo.legacy.h BUILT_SOURCES += \ ${ecorecon_eobuiltheaders} \ lib/ecore_con/ecore_con.eo.c \ - lib/ecore_con/ecore_con_client.eo.c + lib/ecore_con/ecore_con_client.eo.c \ + lib/ecore_con/ecore_con_server.eo.c ecoreconeolianfilesdir = $(datadir)/eolian/include/ecore-@VMAJ@ ecoreconeolianfiles_DATA = \ lib/ecore_con/ecore_con.eo \ - lib/ecore_con/ecore_con_client.eo + lib/ecore_con/ecore_con_client.eo \ + lib/ecore_con/ecore_con_server.eo EXTRA_DIST += \ ${ecoreconeolianfiles_DATA} diff --git a/src/lib/ecore_con/Ecore_Con.h b/src/lib/ecore_con/Ecore_Con.h index c96cc00ae5..cd6616824d 100644 --- a/src/lib/ecore_con/Ecore_Con.h +++ b/src/lib/ecore_con/Ecore_Con.h @@ -222,14 +222,6 @@ extern "C" { #define ECORE_CON_USE_SSL ECORE_CON_USE_SSL2 #define ECORE_CON_REMOTE_SYSTEM ECORE_CON_REMOTE_TCP - -/** - * @typedef Ecore_Con_Server - * A connection handle to a server - * @ingroup Ecore_Con_Server_Group - */ -typedef struct _Ecore_Con_Server Ecore_Con_Server; - /** * @typedef Ecore_Con_Socks * An object representing a SOCKS proxy @@ -897,7 +889,7 @@ EAPI void * ecore_con_server_data_set(Ecore_Con_Server *svr, * @param svr The given server. * @return @c EINA_TRUE if the server is connected, @c EINA_FALSE otherwise. */ -EAPI Eina_Bool ecore_con_server_connected_get(Ecore_Con_Server *svr); +EAPI Eina_Bool ecore_con_server_connected_get(const Ecore_Con_Server *svr); /** * Retrieves the current list of clients. * @@ -928,7 +920,7 @@ EAPI const char * ecore_con_server_name_get(Ecore_Con_Server *svr); * * The port where the server is listening for connections. */ -EAPI int ecore_con_server_port_get(Ecore_Con_Server *svr); +EAPI int ecore_con_server_port_get(const Ecore_Con_Server *svr); /** * @brief Check how long a server has been connected * @@ -939,7 +931,7 @@ EAPI int ecore_con_server_port_get(Ecore_Con_Server *svr); * This function is used to find out the time that has been elapsed since * ecore_con_server_add() succeeded. */ -EAPI double ecore_con_server_uptime_get(Ecore_Con_Server *svr); +EAPI double ecore_con_server_uptime_get(const Ecore_Con_Server *svr); /** * Sends the given data to the given server. * @@ -996,7 +988,7 @@ EAPI void ecore_con_server_client_limit_set(Ecore_Con_Server *svr, * deletion for the @p svr object. If no IP is known @c NULL is * returned. */ -EAPI const char * ecore_con_server_ip_get(Ecore_Con_Server *svr); +EAPI const char * ecore_con_server_ip_get(const Ecore_Con_Server *svr); /** * Flushes all pending data to the given server. * @@ -1039,7 +1031,7 @@ EAPI void ecore_con_server_timeout_set(Ecore_Con_Server *svr, doubl * @see ecore_con_server_timeout_set() * @see ecore_con_client_timeout_get() */ -EAPI double ecore_con_server_timeout_get(Ecore_Con_Server *svr); +EAPI double ecore_con_server_timeout_get(const Ecore_Con_Server *svr); /** * Get the fd that the server is connected to @@ -1053,7 +1045,7 @@ EAPI double ecore_con_server_timeout_get(Ecore_Con_Server *svr); * @warning Seriously. Don't use this unless you know what you are doing. * @since 1.1 */ -EAPI int ecore_con_server_fd_get(Ecore_Con_Server *svr); +EAPI int ecore_con_server_fd_get(const Ecore_Con_Server *svr); /** * Get the fd that the client is connected to diff --git a/src/lib/ecore_con/Ecore_Con_Eo.h b/src/lib/ecore_con/Ecore_Con_Eo.h index bbc28227a6..eed562a125 100644 --- a/src/lib/ecore_con/Ecore_Con_Eo.h +++ b/src/lib/ecore_con/Ecore_Con_Eo.h @@ -1,2 +1,3 @@ #include "ecore_con.eo.h" +#include "ecore_con_server.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 e65ae8ab56..0f66ff8f46 100644 --- a/src/lib/ecore_con/Ecore_Con_Legacy.h +++ b/src/lib/ecore_con/Ecore_Con_Legacy.h @@ -1,2 +1,3 @@ #include "ecore_con.eo.legacy.h" +#include "ecore_con_server.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 77b6cd91a0..72fca0cc74 100644 --- a/src/lib/ecore_con/ecore_con.c +++ b/src/lib/ecore_con/ecore_con.c @@ -131,12 +131,13 @@ _ecore_con_client_kill(Ecore_Con_Client *obj) } void -_ecore_con_server_kill(Ecore_Con_Server *svr) +_ecore_con_server_kill(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (svr->delete_me) DBG("Multi kill request for svr %p", svr); else - ecore_con_event_server_del(svr); + ecore_con_event_server_del(obj); if (svr->fd_handler) ecore_main_fd_handler_del(svr->fd_handler); @@ -234,7 +235,7 @@ EAPI int ecore_con_shutdown(void) { Eina_List *l, *l2; - Ecore_Con_Server *svr; + Ecore_Con_Server *obj; if (--_ecore_con_init_count != 0) return _ecore_con_init_count; @@ -243,8 +244,9 @@ ecore_con_shutdown(void) EINA_LOG_STATE_START, EINA_LOG_STATE_SHUTDOWN); - EINA_LIST_FOREACH_SAFE(servers, l, l2, svr) + EINA_LIST_FOREACH_SAFE(servers, l, l2, obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Server_Add *ev; svr->delete_me = EINA_TRUE; @@ -252,7 +254,7 @@ ecore_con_shutdown(void) /* some pointer hacks here to prevent double frees if people are being stupid */ EINA_LIST_FREE(svr->event_count, ev) ev->server = NULL; - _ecore_con_server_free(svr); + _ecore_con_server_free(obj); } ecore_con_socks_shutdown(); @@ -271,16 +273,17 @@ ecore_con_shutdown(void) } EOLIAN static Eina_Bool -_ecore_con_lookup(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, const char *name, Ecore_Con_Dns_Cb done_cb, const void *data) +_ecore_con_lookup(Eo *kls_obj EINA_UNUSED, void *pd EINA_UNUSED, const char *name, Ecore_Con_Dns_Cb done_cb, const void *data) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj; Ecore_Con_Lookup *lk; struct addrinfo hints; if (!name || !done_cb) return EINA_FALSE; - svr = calloc(1, sizeof(Ecore_Con_Server)); + obj = eo_add(ECORE_CON_SERVER_CLASS, NULL); + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (!svr) return EINA_FALSE; @@ -316,14 +319,14 @@ _ecore_con_lookup(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, const char *name, E hints.ai_next = NULL; hints.ai_addr = NULL; - if (ecore_con_info_get(svr, _ecore_con_lookup_done, svr, + if (ecore_con_info_get(obj, _ecore_con_lookup_done, svr, &hints)) return EINA_TRUE; free(svr->name); on_error: free(lk); - free(svr); + eo_del(obj); return EINA_FALSE; } @@ -346,7 +349,7 @@ ecore_con_server_add(Ecore_Con_Type compl_type, int port, const void *data) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj; Ecore_Con_Type type; if (port < 0 || !name) @@ -354,9 +357,8 @@ ecore_con_server_add(Ecore_Con_Type compl_type, /* local system socket: FILE: /tmp/.ecore_service|[name]|[port] */ /* remote system socket: TCP/IP: [name]:[port] */ - svr = calloc(1, sizeof(Ecore_Con_Server)); - if (!svr) - return NULL; + obj = eo_add(ECORE_CON_SERVER_CLASS, NULL); + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); ECORE_MAGIC_SET(svr, ECORE_MAGIC_CON_SERVER); svr->fd = -1; @@ -371,13 +373,13 @@ ecore_con_server_add(Ecore_Con_Type compl_type, svr->clients = NULL; svr->ppid = getpid(); - servers = eina_list_append(servers, svr); + servers = eina_list_append(servers, obj); svr->name = strdup(name); if (!svr->name) goto error; - if (ecore_con_ssl_server_prepare(svr, compl_type & ECORE_CON_SSL)) + if (ecore_con_ssl_server_prepare(obj, compl_type & ECORE_CON_SSL)) goto error; type = compl_type & ECORE_CON_TYPE; @@ -387,10 +389,10 @@ ecore_con_server_add(Ecore_Con_Type compl_type, (type == ECORE_CON_LOCAL_ABSTRACT)) /* Local */ #ifdef _WIN32 - if (!ecore_con_local_listen(svr)) + if (!ecore_con_local_listen(obj)) goto error; #else - if (!ecore_con_local_listen(svr, _ecore_con_svr_tcp_handler, svr)) + if (!ecore_con_local_listen(obj, _ecore_con_svr_tcp_handler, obj)) goto error; #endif @@ -399,22 +401,22 @@ ecore_con_server_add(Ecore_Con_Type compl_type, (type == ECORE_CON_REMOTE_CORK)) { /* TCP */ - if (!ecore_con_info_tcp_listen(svr, _ecore_con_cb_tcp_listen, - svr)) + if (!ecore_con_info_tcp_listen(obj, _ecore_con_cb_tcp_listen, + obj)) goto error; } else if ((type == ECORE_CON_REMOTE_MCAST) || (type == ECORE_CON_REMOTE_UDP)) /* UDP and MCAST */ - if (!ecore_con_info_udp_listen(svr, _ecore_con_cb_udp_listen, - svr)) + if (!ecore_con_info_udp_listen(obj, _ecore_con_cb_udp_listen, + obj)) goto error; - return svr; + return obj; error: if (svr->delete_me) return NULL; - _ecore_con_server_kill(svr); + _ecore_con_server_kill(obj); return NULL; } @@ -424,7 +426,7 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, int port, const void *data) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj; Ecore_Con_Type type; if ((!name) || (!name[0])) @@ -432,9 +434,8 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, /* local user socket: FILE: ~/.ecore/[name]/[port] */ /* local system socket: FILE: /tmp/.ecore_service|[name]|[port] */ /* remote system socket: TCP/IP: [name]:[port] */ - svr = calloc(1, sizeof(Ecore_Con_Server)); - if (!svr) - return NULL; + obj = eo_add(ECORE_CON_SERVER_CLASS, NULL); + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); ECORE_MAGIC_SET(svr, ECORE_MAGIC_CON_SERVER); svr->fd = -1; @@ -448,7 +449,7 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, svr->clients = NULL; svr->client_limit = -1; - servers = eina_list_append(servers, svr); + servers = eina_list_append(servers, obj); svr->name = strdup(name); if (!svr->name) @@ -473,7 +474,7 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, svr->ecs_state = ECORE_CON_PROXY_STATE_RESOLVED; } } - EINA_SAFETY_ON_TRUE_GOTO(ecore_con_ssl_server_prepare(svr, compl_type & ECORE_CON_SSL), error); + EINA_SAFETY_ON_TRUE_GOTO(ecore_con_ssl_server_prepare(obj, compl_type & ECORE_CON_SSL), error); EINA_SAFETY_ON_TRUE_GOTO(((type == ECORE_CON_REMOTE_TCP) || (type == ECORE_CON_REMOTE_NODELAY) || @@ -487,9 +488,9 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, (type == ECORE_CON_LOCAL_ABSTRACT)) /* Local */ #ifdef _WIN32 - if (!ecore_con_local_connect(svr, _ecore_con_cl_handler)) goto error; + if (!ecore_con_local_connect(obj, _ecore_con_cl_handler)) goto error; #else - if (!ecore_con_local_connect(svr, _ecore_con_cl_handler, svr)) goto error; + if (!ecore_con_local_connect(obj, _ecore_con_cl_handler, obj)) goto error; #endif if ((type == ECORE_CON_REMOTE_TCP) || @@ -497,160 +498,133 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, (type == ECORE_CON_REMOTE_CORK)) { /* TCP */ - EINA_SAFETY_ON_FALSE_GOTO(ecore_con_info_tcp_connect(svr, _ecore_con_cb_tcp_connect, svr), error); + EINA_SAFETY_ON_FALSE_GOTO(ecore_con_info_tcp_connect(obj, _ecore_con_cb_tcp_connect, obj), error); } else if ((type == ECORE_CON_REMOTE_UDP) || (type == ECORE_CON_REMOTE_BROADCAST)) /* UDP and MCAST */ - EINA_SAFETY_ON_FALSE_GOTO(ecore_con_info_udp_connect(svr, _ecore_con_cb_udp_connect, svr), error); + EINA_SAFETY_ON_FALSE_GOTO(ecore_con_info_udp_connect(obj, _ecore_con_cb_udp_connect, obj), error); - return svr; + return obj; error: if (svr->delete_me) return NULL; - _ecore_con_server_kill(svr); + _ecore_con_server_kill(obj); return NULL; } EAPI void -ecore_con_server_timeout_set(Ecore_Con_Server *svr, - double timeout) +ecore_con_server_timeout_set(Ecore_Con *obj, double timeout) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_timeout_set"); - return; - } + eo_do((Ecore_Con *)obj, ecore_con_obj_timeout_set(timeout)); +} +EOLIAN static void +_ecore_con_server_ecore_con_timeout_set(Eo *obj, Ecore_Con_Server_Data *svr, double timeout) +{ if (svr->created) svr->client_disconnect_time = timeout; else svr->disconnect_time = timeout; - _ecore_con_server_timer_update(svr); + _ecore_con_server_timer_update(obj); } EAPI double -ecore_con_server_timeout_get(Ecore_Con_Server *svr) +ecore_con_server_timeout_get(const Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_timeout_get"); - return 0; - } + return eo_do((Ecore_Con *)obj, ecore_con_obj_timeout_get()); +} +EOLIAN static double +_ecore_con_server_ecore_con_timeout_get(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr) +{ return svr->created ? svr->client_disconnect_time : svr->disconnect_time; } EAPI void * -ecore_con_server_del(Ecore_Con_Server *svr) +ecore_con_server_del(Ecore_Con_Server *obj) { - if (!svr) return NULL; - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_del"); - return NULL; - } + if (!obj) return NULL; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (svr->delete_me) return NULL; - _ecore_con_server_kill(svr); + _ecore_con_server_kill(obj); return svr->data; } EAPI void * -ecore_con_server_data_get(Ecore_Con_Server *svr) +ecore_con_server_data_get(Ecore_Con_Server *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_data_get"); - return NULL; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) + return NULL; return svr->data; } EAPI void * -ecore_con_server_data_set(Ecore_Con_Server *svr, +ecore_con_server_data_set(Ecore_Con_Server *obj, void *data) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); void *ret = NULL; - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_data_get"); - return NULL; - } - ret = svr->data; svr->data = data; return ret; } EAPI Eina_Bool -ecore_con_server_connected_get(Ecore_Con_Server *svr) +ecore_con_server_connected_get(const Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_connected_get"); - return EINA_FALSE; - } - - if (svr->connecting) - return EINA_FALSE; + return eo_do((Ecore_Con *)obj, ecore_con_obj_connected_get()); +} - return EINA_TRUE; +EOLIAN static Eina_Bool +_ecore_con_server_ecore_con_connected_get(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr) +{ + return !svr->connecting; } EAPI const Eina_List * -ecore_con_server_clients_get(Ecore_Con_Server *svr) +ecore_con_server_clients_get(Ecore_Con_Server *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, - "ecore_con_server_clients_get"); - return NULL; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); return svr->clients; } EAPI const char * -ecore_con_server_name_get(Ecore_Con_Server *svr) +ecore_con_server_name_get(Ecore_Con_Server *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, - "ecore_con_server_name_get"); - return NULL; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); return svr->name; } EAPI int -ecore_con_server_port_get(Ecore_Con_Server *svr) +ecore_con_server_port_get(const Ecore_Con *obj) +{ + return eo_do((Ecore_Con *)obj, ecore_con_obj_port_get()); +} + +EOLIAN static int +_ecore_con_server_ecore_con_port_get(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, - "ecore_con_server_port_get"); - return -1; - } return svr->port; } EAPI int -ecore_con_server_send(Ecore_Con_Server *svr, - const void *data, - int size) +ecore_con_server_send(Ecore_Con *obj, const void *data, int size) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_send"); - return 0; - } + return eo_do((Ecore_Con *)obj, ecore_con_obj_send(data, size)); +} +EOLIAN static int +_ecore_con_server_ecore_con_send(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr, const void *data, int size) +{ EINA_SAFETY_ON_TRUE_RETURN_VAL(svr->delete_me, 0); EINA_SAFETY_ON_NULL_RETURN_VAL(data, 0); @@ -681,55 +655,50 @@ ecore_con_server_send(Ecore_Con_Server *svr, } EAPI void -ecore_con_server_client_limit_set(Ecore_Con_Server *svr, +ecore_con_server_client_limit_set(Ecore_Con_Server *obj, int client_limit, char reject_excess_clients) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, - "ecore_con_server_client_limit_set"); - return; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); svr->client_limit = client_limit; svr->reject_excess_clients = reject_excess_clients; } EAPI const char * -ecore_con_server_ip_get(Ecore_Con_Server *svr) +ecore_con_server_ip_get(const Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_ip_get"); - return NULL; - } + return eo_do(obj, ecore_con_obj_ip_get()); +} +EOLIAN static const char * +_ecore_con_server_ecore_con_ip_get(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr) +{ return svr->ip; } EAPI double -ecore_con_server_uptime_get(Ecore_Con_Server *svr) +ecore_con_server_uptime_get(const Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_uptime_get"); - return -1; - } + return eo_do(obj, ecore_con_obj_uptime_get()); +} +EOLIAN static double +_ecore_con_server_ecore_con_uptime_get(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr) +{ return ecore_time_get() - svr->start_time; } EAPI void -ecore_con_server_flush(Ecore_Con_Server *svr) +ecore_con_server_flush(Ecore_Con *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_server_flush"); - return; - } + eo_do((Ecore_Con *)obj, ecore_con_obj_flush()); +} - _ecore_con_server_flush(svr); +EOLIAN static void +_ecore_con_server_ecore_con_flush(Eo *obj, Ecore_Con_Server_Data *svr EINA_UNUSED) +{ + _ecore_con_server_flush(obj); } /** @@ -752,6 +721,7 @@ ecore_con_server_flush(Ecore_Con_Server *svr) EOLIAN static int _ecore_con_client_ecore_con_send(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl, const void *data, int size) { + Ecore_Con_Server_Data *host_server = NULL; EINA_SAFETY_ON_TRUE_RETURN_VAL(cl->delete_me, 0); EINA_SAFETY_ON_NULL_RETURN_VAL(data, 0); @@ -761,8 +731,12 @@ _ecore_con_client_ecore_con_send(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl, if (cl->fd_handler) ecore_main_fd_handler_active_set(cl->fd_handler, ECORE_FD_READ | ECORE_FD_WRITE); - if (cl->host_server && ((cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP)) - sendto(cl->host_server->fd, data, size, 0, (struct sockaddr *)cl->client_addr, + if (cl->host_server) + host_server = eo_data_scope_get(cl->host_server, ECORE_CON_CLIENT_CLASS); + + + if (cl->host_server && ((host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP)) + sendto(host_server->fd, data, size, 0, (struct sockaddr *)cl->client_addr, cl->client_addr_len); else { @@ -771,7 +745,7 @@ _ecore_con_client_ecore_con_send(Eo *obj EINA_UNUSED, Ecore_Con_Client_Data *cl, cl->buf = eina_binbuf_new(); EINA_SAFETY_ON_NULL_RETURN_VAL(cl->buf, 0); #ifdef TCP_CORK - if ((cl->fd >= 0) && ((cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_CORK)) + if ((cl->fd >= 0) && ((host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_CORK)) { int state = 1; if (setsockopt(cl->fd, IPPROTO_TCP, TCP_CORK, (char *)&state, sizeof(int)) < 0) @@ -922,13 +896,14 @@ ecore_con_client_flush(Ecore_Con *obj) } EAPI int -ecore_con_server_fd_get(Ecore_Con_Server *svr) +ecore_con_server_fd_get(const Ecore_Con *obj) +{ + return eo_do((Ecore_Con *)obj, ecore_con_obj_fd_get()); +} + +EOLIAN static int +_ecore_con_server_ecore_con_fd_get(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__); - return -1; - } if (svr->created) return -1; if (svr->delete_me) return -1; return ecore_main_fd_handler_fd_get(svr->fd_handler); @@ -951,8 +926,9 @@ ecore_con_client_fd_get(const Ecore_Con *obj) */ void -ecore_con_event_proxy_bind(Ecore_Con_Server *svr) +ecore_con_event_proxy_bind(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Proxy_Bind *e; int ev = ECORE_CON_EVENT_PROXY_BIND; @@ -960,8 +936,8 @@ ecore_con_event_proxy_bind(Ecore_Con_Server *svr) EINA_SAFETY_ON_NULL_RETURN(e); svr->event_count = eina_list_append(svr->event_count, e); - _ecore_con_server_timer_update(svr); - e->server = svr; + _ecore_con_server_timer_update(obj); + e->server = obj; e->ip = svr->proxyip; e->port = svr->proxyport; ecore_event_add(ev, e, @@ -970,8 +946,9 @@ ecore_con_event_proxy_bind(Ecore_Con_Server *svr) } void -ecore_con_event_server_add(Ecore_Con_Server *svr) +ecore_con_event_server_add(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); /* we got our server! */ Ecore_Con_Event_Server_Add *e; int ev = ECORE_CON_EVENT_SERVER_ADD; @@ -982,8 +959,8 @@ ecore_con_event_server_add(Ecore_Con_Server *svr) svr->connecting = EINA_FALSE; svr->start_time = ecore_time_get(); svr->event_count = eina_list_append(svr->event_count, e); - _ecore_con_server_timer_update(svr); - e->server = svr; + _ecore_con_server_timer_update(obj); + e->server = obj; if (svr->upgrade) ev = ECORE_CON_EVENT_SERVER_UPGRADE; ecore_event_add(ev, e, _ecore_con_event_server_add_free, NULL); @@ -991,8 +968,9 @@ ecore_con_event_server_add(Ecore_Con_Server *svr) } void -ecore_con_event_server_del(Ecore_Con_Server *svr) +ecore_con_event_server_del(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Server_Del *e; svr->delete_me = EINA_TRUE; @@ -1001,8 +979,8 @@ ecore_con_event_server_del(Ecore_Con_Server *svr) EINA_SAFETY_ON_NULL_RETURN(e); svr->event_count = eina_list_append(svr->event_count, e); - _ecore_con_server_timer_update(svr); - e->server = svr; + _ecore_con_server_timer_update(obj); + e->server = obj; if (svr->ecs) { svr->ecs_state = svr->ecs->lookup ? ECORE_CON_PROXY_STATE_RESOLVED : ECORE_CON_PROXY_STATE_DONE; @@ -1015,8 +993,9 @@ ecore_con_event_server_del(Ecore_Con_Server *svr) } void -ecore_con_event_server_write(Ecore_Con_Server *svr, int num) +ecore_con_event_server_write(Ecore_Con_Server *obj, int num) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Server_Write *e; e = ecore_con_event_server_write_alloc(); @@ -1024,7 +1003,7 @@ ecore_con_event_server_write(Ecore_Con_Server *svr, int num) INF("Wrote %d bytes", num); svr->event_count = eina_list_append(svr->event_count, e); - e->server = svr; + e->server = obj; e->size = num; ecore_event_add(ECORE_CON_EVENT_SERVER_WRITE, e, (Ecore_End_Cb)_ecore_con_event_server_write_free, NULL); @@ -1032,16 +1011,17 @@ ecore_con_event_server_write(Ecore_Con_Server *svr, int num) } void -ecore_con_event_server_data(Ecore_Con_Server *svr, unsigned char *buf, int num, Eina_Bool duplicate) +ecore_con_event_server_data(Ecore_Con_Server *obj, unsigned char *buf, int num, Eina_Bool duplicate) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Server_Data *e; e = ecore_con_event_server_data_alloc(); EINA_SAFETY_ON_NULL_RETURN(e); svr->event_count = eina_list_append(svr->event_count, e); - _ecore_con_server_timer_update(svr); - e->server = svr; + _ecore_con_server_timer_update(obj); + e->server = obj; if (duplicate) { e->data = malloc(num); @@ -1071,8 +1051,10 @@ ecore_con_event_client_add(Ecore_Con_Client *obj) e = ecore_con_event_client_add_alloc(); EINA_SAFETY_ON_NULL_RETURN(e); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + cl->event_count = eina_list_append(cl->event_count, e); - cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); + host_server->event_count = eina_list_append(host_server->event_count, e); _ecore_con_cl_timer_update(obj); cl->start_time = ecore_time_get(); e->client = obj; @@ -1096,7 +1078,9 @@ ecore_con_event_client_del(Ecore_Con_Client *obj) EINA_SAFETY_ON_NULL_RETURN(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_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + + host_server->event_count = eina_list_append(host_server->event_count, e); _ecore_con_cl_timer_update(obj); e->client = obj; ecore_event_add(ECORE_CON_EVENT_CLIENT_DEL, e, @@ -1113,8 +1097,10 @@ ecore_con_event_client_write(Ecore_Con_Client *obj, int num) e = ecore_con_event_client_write_alloc(); EINA_SAFETY_ON_NULL_RETURN(e); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + cl->event_count = eina_list_append(cl->event_count, e); - cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); + host_server->event_count = eina_list_append(host_server->event_count, e); e->client = obj; e->size = num; ecore_event_add(ECORE_CON_EVENT_CLIENT_WRITE, e, @@ -1131,8 +1117,10 @@ ecore_con_event_client_data(Ecore_Con_Client *obj, unsigned char *buf, int num, e = ecore_con_event_client_data_alloc(); EINA_SAFETY_ON_NULL_RETURN(e); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + cl->event_count = eina_list_append(cl->event_count, e); - cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); + host_server->event_count = eina_list_append(host_server->event_count, e); _ecore_con_cl_timer_update(obj); e->client = obj; if ((duplicate) && (num > 0)) @@ -1161,20 +1149,22 @@ ecore_con_event_client_data(Ecore_Con_Client *obj, unsigned char *buf, int num, } void -ecore_con_server_infos_del(Ecore_Con_Server *svr, void *info) +ecore_con_server_infos_del(Ecore_Con_Server *obj, void *info) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); svr->infos = eina_list_remove(svr->infos, info); } void -_ecore_con_event_server_error(Ecore_Con_Server *svr, char *error, Eina_Bool duplicate) +_ecore_con_event_server_error(Ecore_Con_Server *obj, char *error, Eina_Bool duplicate) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Server_Error *e; e = ecore_con_event_server_error_alloc(); EINA_SAFETY_ON_NULL_RETURN(e); - e->server = svr; + e->server = obj; e->error = duplicate ? strdup(error) : error; DBG("%s", error); svr->event_count = eina_list_append(svr->event_count, e); @@ -1191,18 +1181,26 @@ ecore_con_event_client_error(Ecore_Con_Client *obj, const char *error) e = ecore_con_event_client_error_alloc(); EINA_SAFETY_ON_NULL_RETURN(e); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + e->client = obj; e->error = strdup(error); DBG("%s", error); cl->event_count = eina_list_append(cl->event_count, e); - cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e); + host_server->event_count = eina_list_append(host_server->event_count, e); ecore_event_add(ECORE_CON_EVENT_CLIENT_ERROR, e, (Ecore_End_Cb)_ecore_con_event_client_error_free, cl->host_server); eo_do(obj, eo_event_callback_call(ECORE_CON_EVENT_CONNECTION_ERROR, e->error)); _ecore_con_event_count++; } static void -_ecore_con_server_free(Ecore_Con_Server *svr) +_ecore_con_server_free(Ecore_Con_Server *obj) +{ + eo_del(obj); +} + +EOLIAN static void +_ecore_con_server_eo_base_destructor(Eo *obj, Ecore_Con_Server_Data *svr) { Ecore_Con_Client *cl_obj; double t_start, t; @@ -1218,7 +1216,7 @@ _ecore_con_server_free(Ecore_Con_Server *svr) t_start = ecore_time_get(); while (svr->buf && (!svr->delete_me)) { - _ecore_con_server_flush(svr); + _ecore_con_server_flush(obj); t = ecore_time_get(); if ((t - t_start) > 0.5) { @@ -1254,7 +1252,7 @@ _ecore_con_server_free(Ecore_Con_Server *svr) if ((svr->created) && (svr->path) && (svr->ppid == getpid())) unlink(svr->path); - ecore_con_ssl_server_shutdown(svr); + ecore_con_ssl_server_shutdown(obj); free(svr->name); free(svr->path); @@ -1274,9 +1272,10 @@ _ecore_con_server_free(Ecore_Con_Server *svr) if (svr->until_deletion) ecore_timer_del(svr->until_deletion); - servers = eina_list_remove(servers, svr); + servers = eina_list_remove(servers, obj); svr->data = NULL; - free(svr); + + eo_do_super(obj, ECORE_CON_SERVER_CLASS, eo_destructor()); } static void @@ -1306,8 +1305,10 @@ _ecore_con_client_eo_base_destructor(Eo *obj, Ecore_Con_Client_Data *cl) break; } } - cl->host_server->clients = eina_list_remove(cl->host_server->clients, obj); - --cl->host_server->client_count; + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + + host_server->clients = eina_list_remove(host_server->clients, obj); + --host_server->client_count; #ifdef _WIN32 ecore_con_local_win32_client_del(cl); @@ -1317,7 +1318,7 @@ _ecore_con_client_eo_base_destructor(Eo *obj, Ecore_Con_Client_Data *cl) if (cl->buf) eina_binbuf_free(cl->buf); - if (cl->host_server->type & ECORE_CON_SSL) + if (host_server->type & ECORE_CON_SSL) ecore_con_ssl_client_shutdown(obj); if (cl->fd_handler) @@ -1339,17 +1340,19 @@ _ecore_con_client_eo_base_destructor(Eo *obj, Ecore_Con_Client_Data *cl) } static Eina_Bool -_ecore_con_server_timer(Ecore_Con_Server *svr) +_ecore_con_server_timer(Ecore_Con_Server *obj) { - ecore_con_server_del(svr); + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + ecore_con_server_del(obj); svr->until_deletion = NULL; return ECORE_CALLBACK_CANCEL; } static void -_ecore_con_server_timer_update(Ecore_Con_Server *svr) +_ecore_con_server_timer_update(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (svr->disconnect_time) { if (svr->disconnect_time > 0) @@ -1360,7 +1363,7 @@ _ecore_con_server_timer_update(Ecore_Con_Server *svr) ecore_timer_reset(svr->until_deletion); } else - svr->until_deletion = ecore_timer_add(svr->disconnect_time, (Ecore_Task_Cb)_ecore_con_server_timer, svr); + svr->until_deletion = ecore_timer_add(svr->disconnect_time, (Ecore_Task_Cb)_ecore_con_server_timer, obj); } else if (svr->until_deletion) { @@ -1412,15 +1415,17 @@ _ecore_con_cl_timer_update(Ecore_Con_Client *obj) } else { - if (cl->host_server->client_disconnect_time > 0) + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + + if (host_server->client_disconnect_time > 0) { if (cl->until_deletion) { - ecore_timer_interval_set(cl->until_deletion, cl->host_server->client_disconnect_time); + ecore_timer_interval_set(cl->until_deletion, host_server->client_disconnect_time); ecore_timer_reset(cl->until_deletion); } else - cl->until_deletion = ecore_timer_add(cl->host_server->client_disconnect_time, (Ecore_Task_Cb)_ecore_con_client_timer, cl); + cl->until_deletion = ecore_timer_add(host_server->client_disconnect_time, (Ecore_Task_Cb)_ecore_con_client_timer, cl); } else if (cl->until_deletion) { @@ -1434,12 +1439,11 @@ static void _ecore_con_cb_tcp_listen(void *data, Ecore_Con_Info *net_info) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj = data; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); struct linger lin; const char *memerr = NULL; - svr = data; - errno = 0; if (!net_info) /* error message has already been handled */ { @@ -1518,7 +1522,7 @@ _ecore_con_cb_tcp_listen(void *data, fd_ready: #endif svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ, - _ecore_con_svr_tcp_handler, svr, NULL, NULL); + _ecore_con_svr_tcp_handler, obj, NULL, NULL); if (!svr->fd_handler) { memerr = "Memory allocation failure"; @@ -1528,16 +1532,17 @@ fd_ready: return; error: - if (errno || memerr) ecore_con_event_server_error(svr, memerr ? : strerror(errno)); - ecore_con_ssl_server_shutdown(svr); - _ecore_con_server_kill(svr); + if (errno || memerr) ecore_con_event_server_error(obj, memerr ? : strerror(errno)); + ecore_con_ssl_server_shutdown(obj); + _ecore_con_server_kill(obj); } static void _ecore_con_cb_udp_listen(void *data, Ecore_Con_Info *net_info) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj = data; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Type type; struct ip_mreq mreq; #ifdef HAVE_IPV6 @@ -1546,7 +1551,6 @@ _ecore_con_cb_udp_listen(void *data, const int on = 1; const char *memerr = NULL; - svr = data; type = svr->type; type &= ECORE_CON_TYPE; @@ -1621,7 +1625,7 @@ fd_ready: #endif svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ, - _ecore_con_svr_udp_handler, svr, NULL, NULL); + _ecore_con_svr_udp_handler, obj, NULL, NULL); if (!svr->fd_handler) { memerr = "Memory allocation failure"; @@ -1633,22 +1637,21 @@ fd_ready: return; error: - if (errno || memerr) ecore_con_event_server_error(svr, memerr ? : strerror(errno)); - ecore_con_ssl_server_shutdown(svr); - _ecore_con_server_kill(svr); + if (errno || memerr) ecore_con_event_server_error(obj, memerr ? : strerror(errno)); + ecore_con_ssl_server_shutdown(obj); + _ecore_con_server_kill(obj); } static void _ecore_con_cb_tcp_connect(void *data, Ecore_Con_Info *net_info) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj = data; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); int res; int curstate = 0; const char *memerr = NULL; - svr = data; - errno = 0; if (!net_info) /* error message has already been handled */ { @@ -1698,18 +1701,18 @@ _ecore_con_cb_tcp_connect(void *data, svr->connecting = EINA_TRUE; svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ | ECORE_FD_WRITE, - _ecore_con_cl_handler, svr, NULL, NULL); + _ecore_con_cl_handler, obj, NULL, NULL); } else svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ, - _ecore_con_cl_handler, svr, NULL, NULL); + _ecore_con_cl_handler, obj, NULL, NULL); if (svr->type & ECORE_CON_SSL) { svr->handshaking = EINA_TRUE; svr->ssl_state = ECORE_CON_SSL_STATE_INIT; DBG("%s ssl handshake", svr->ecs_state ? "Queuing" : "Beginning"); - if ((!svr->ecs_state) && ecore_con_ssl_server_init(svr)) + if ((!svr->ecs_state) && ecore_con_ssl_server_init(obj)) goto error; } @@ -1725,21 +1728,21 @@ _ecore_con_cb_tcp_connect(void *data, return; error: - ecore_con_event_server_error(svr, + ecore_con_event_server_error(obj, memerr ? : errno ? strerror(errno) : "DNS error"); - ecore_con_ssl_server_shutdown(svr); - _ecore_con_server_kill(svr); + ecore_con_ssl_server_shutdown(obj); + _ecore_con_server_kill(obj); } static void _ecore_con_cb_udp_connect(void *data, Ecore_Con_Info *net_info) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj = data; int curstate = 0; int broadcast = 1; const char *memerr = NULL; - svr = data; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); errno = 0; if (!net_info) /* error message has already been handled */ @@ -1770,7 +1773,7 @@ _ecore_con_cb_udp_connect(void *data, goto error; svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ | ECORE_FD_WRITE, - _ecore_con_cl_udp_handler, svr, NULL, NULL); + _ecore_con_cl_udp_handler, obj, NULL, NULL); if (!svr->fd_handler) { @@ -1784,14 +1787,15 @@ _ecore_con_cb_udp_connect(void *data, return; error: - if (errno || memerr) ecore_con_event_server_error(svr, memerr ? : strerror(errno)); - ecore_con_ssl_server_shutdown(svr); - _ecore_con_server_kill(svr); + if (errno || memerr) ecore_con_event_server_error(obj, memerr ? : strerror(errno)); + ecore_con_ssl_server_shutdown(obj); + _ecore_con_server_kill(obj); } static Ecore_Con_State -svr_try_connect_plain(Ecore_Con_Server *svr) +svr_try_connect_plain(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); int res; int so_err = 0; socklen_t size = sizeof(int); @@ -1816,9 +1820,9 @@ svr_try_connect_plain(Ecore_Con_Server *svr) if (so_err) { /* we lost our server! */ - ecore_con_event_server_error(svr, strerror(so_err)); + ecore_con_event_server_error(obj, strerror(so_err)); ERR("Connection lost: %s", strerror(so_err)); - _ecore_con_server_kill(svr); + _ecore_con_server_kill(obj); return ECORE_CON_DISCONNECTED; } @@ -1826,11 +1830,11 @@ svr_try_connect_plain(Ecore_Con_Server *svr) { if (svr->ecs) { - if (ecore_con_socks_svr_init(svr)) + if (ecore_con_socks_svr_init(obj)) return ECORE_CON_INPROGRESS; } else - ecore_con_event_server_add(svr); + ecore_con_event_server_add(obj); } if (svr->fd_handler) @@ -1891,13 +1895,13 @@ static Eina_Bool _ecore_con_svr_tcp_handler(void *data, Ecore_Fd_Handler *fd_handler EINA_UNUSED) { - Ecore_Con_Server *svr; + Ecore_Con_Server *svr_obj = data; Ecore_Con_Client *obj = NULL; unsigned char client_addr[256]; unsigned int client_addr_len; const char *clerr = NULL; + Ecore_Con_Server_Data *svr = eo_data_scope_get(svr_obj, ECORE_CON_SERVER_CLASS); - svr = data; if (svr->delete_me) return ECORE_CALLBACK_RENEW; @@ -1911,10 +1915,10 @@ _ecore_con_svr_tcp_handler(void *data, 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"); + ecore_con_event_server_error(svr_obj, "Memory allocation failure when attempting to add a new client"); return ECORE_CALLBACK_RENEW; } - cl->host_server = svr; + cl->host_server = svr_obj; client_addr_len = sizeof(client_addr); memset(&client_addr, 0, client_addr_len); @@ -1971,13 +1975,14 @@ error: } } free(cl); - if (clerr || errno) ecore_con_event_server_error(svr, clerr ? : strerror(errno)); + if (clerr || errno) ecore_con_event_server_error(svr_obj, clerr ? : strerror(errno)); return ECORE_CALLBACK_RENEW; } static void -_ecore_con_cl_read(Ecore_Con_Server *svr) +_ecore_con_cl_read(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); int num = 0; Eina_Bool lost_server = EINA_TRUE; unsigned char buf[READBUFSIZ]; @@ -1985,15 +1990,15 @@ _ecore_con_cl_read(Ecore_Con_Server *svr) DBG("svr=%p", svr); /* only possible with non-ssl connections */ - if (svr->connecting && (svr_try_connect_plain(svr) != ECORE_CON_CONNECTED)) + if (svr->connecting && (svr_try_connect_plain(obj) != ECORE_CON_CONNECTED)) return; if (svr->handshaking && (!svr->ecs_state)) { DBG("Continuing ssl handshake"); - if (!ecore_con_ssl_server_init(svr)) + if (!ecore_con_ssl_server_init(obj)) lost_server = EINA_FALSE; - _ecore_con_server_timer_update(svr); + _ecore_con_server_timer_update(obj); } if (svr->ecs_state || !(svr->type & ECORE_CON_SSL)) @@ -2004,11 +2009,11 @@ _ecore_con_cl_read(Ecore_Con_Server *svr) if ((num > 0) || ((num < 0) && (errno == EAGAIN))) lost_server = EINA_FALSE; else if (num < 0) - ecore_con_event_server_error(svr, strerror(errno)); + ecore_con_event_server_error(obj, strerror(errno)); } else { - num = ecore_con_ssl_server_read(svr, buf, sizeof(buf)); + num = ecore_con_ssl_server_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_server = EINA_FALSE; @@ -2017,23 +2022,23 @@ _ecore_con_cl_read(Ecore_Con_Server *svr) if ((!svr->delete_me) && (num > 0)) { if (svr->ecs_state) - ecore_con_socks_read(svr, buf, num); + ecore_con_socks_read(obj, buf, num); else - ecore_con_event_server_data(svr, buf, num, EINA_TRUE); + ecore_con_event_server_data(obj, buf, num, EINA_TRUE); } if (lost_server) - _ecore_con_server_kill(svr); + _ecore_con_server_kill(obj); } static Eina_Bool _ecore_con_cl_handler(void *data, Ecore_Fd_Handler *fd_handler) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj = data; Eina_Bool want_read, want_write; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); - svr = data; if (svr->delete_me) return ECORE_CALLBACK_RENEW; @@ -2055,13 +2060,13 @@ _ecore_con_cl_handler(void *data, DBG("%zu bytes in buffer", len); } #endif - if (ecore_con_ssl_server_init(svr)) + if (ecore_con_ssl_server_init(obj)) { ERR("ssl handshaking failed!"); svr->handshaking = EINA_FALSE; } else if (!svr->ssl_state) - ecore_con_event_server_add(svr); + ecore_con_event_server_add(obj); return ECORE_CALLBACK_RENEW; } if (svr->ecs && svr->ecs_state && (svr->ecs_state < ECORE_CON_PROXY_STATE_READ) && (!svr->ecs_buf)) @@ -2071,16 +2076,16 @@ _ecore_con_cl_handler(void *data, INF("PROXY STATE++"); svr->ecs_state++; } - if (ecore_con_socks_svr_init(svr)) return ECORE_CALLBACK_RENEW; + if (ecore_con_socks_svr_init(obj)) return ECORE_CALLBACK_RENEW; } if (want_read) - _ecore_con_cl_read(svr); + _ecore_con_cl_read(obj); else if (want_write) /* only possible with non-ssl connections */ { - if (svr->connecting && (!svr_try_connect_plain(svr)) && (!svr->ecs_state)) + if (svr->connecting && (!svr_try_connect_plain(obj)) && (!svr->ecs_state)) return ECORE_CALLBACK_RENEW; - _ecore_con_server_flush(svr); + _ecore_con_server_flush(obj); } return ECORE_CALLBACK_RENEW; @@ -2092,31 +2097,31 @@ _ecore_con_cl_udp_handler(void *data, { unsigned char buf[READBUFSIZ]; int num; - Ecore_Con_Server *svr; + Ecore_Con_Server *obj = data; Eina_Bool want_read, want_write; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); want_read = ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ); want_write = ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_WRITE); - svr = data; if (svr->delete_me || ((!want_read) && (!want_write))) return ECORE_CALLBACK_RENEW; if (want_write) { - _ecore_con_server_flush(svr); + _ecore_con_server_flush(obj); return ECORE_CALLBACK_RENEW; } num = read(svr->fd, buf, READBUFSIZ); if ((!svr->delete_me) && (num > 0)) - ecore_con_event_server_data(svr, buf, num, EINA_TRUE); + ecore_con_event_server_data(obj, buf, num, EINA_TRUE); if (num < 0 && (errno != EAGAIN) && (errno != EINTR)) { - ecore_con_event_server_error(svr, strerror(errno)); - _ecore_con_server_kill(svr); + ecore_con_event_server_error(obj, strerror(errno)); + _ecore_con_server_kill(obj); } return ECORE_CALLBACK_RENEW; @@ -2130,11 +2135,10 @@ _ecore_con_svr_udp_handler(void *data, unsigned char client_addr[256]; socklen_t client_addr_len = sizeof(client_addr); int num; - Ecore_Con_Server *svr; + Ecore_Con_Server *svr_obj = data; Ecore_Con_Client *obj = NULL; - svr = data; - + Ecore_Con_Server_Data *svr = eo_data_scope_get(svr_obj, ECORE_CON_SERVER_CLASS); if (svr->delete_me) return ECORE_CALLBACK_RENEW; @@ -2159,10 +2163,10 @@ _ecore_con_svr_udp_handler(void *data, if (num < 0 && (errno != EAGAIN) && (errno != EINTR)) { - ecore_con_event_server_error(svr, strerror(errno)); + ecore_con_event_server_error(svr_obj, strerror(errno)); if (!svr->delete_me) ecore_con_event_client_del(NULL); - _ecore_con_server_kill(svr); + _ecore_con_server_kill(svr_obj); return ECORE_CALLBACK_CANCEL; } @@ -2171,7 +2175,7 @@ _ecore_con_svr_udp_handler(void *data, 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; + cl->host_server = svr_obj; cl->client_addr = malloc(client_addr_len); if (!cl->client_addr) { @@ -2211,7 +2215,8 @@ _ecore_con_svr_cl_read(Ecore_Con_Client *obj) _ecore_con_cl_timer_update(obj); } - if (!(cl->host_server->type & ECORE_CON_SSL) && (!cl->upgrade)) + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + if (!(host_server->type & ECORE_CON_SSL) && (!cl->upgrade)) { num = read(cl->fd, buf, sizeof(buf)); /* 0 is not a valid return value for a tcp socket */ @@ -2265,8 +2270,9 @@ _ecore_con_svr_cl_handler(void *data, } static void -_ecore_con_server_flush(Ecore_Con_Server *svr) +_ecore_con_server_flush(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); int count; size_t num; size_t buf_len; @@ -2313,28 +2319,28 @@ _ecore_con_server_flush(Ecore_Con_Server *svr) if ((!svr->ecs_state) && svr->handshaking) { DBG("Continuing ssl handshake"); - if (ecore_con_ssl_server_init(svr)) - _ecore_con_server_kill(svr); - _ecore_con_server_timer_update(svr); + if (ecore_con_ssl_server_init(obj)) + _ecore_con_server_kill(obj); + _ecore_con_server_timer_update(obj); return; } if (svr->ecs_state || (!(svr->type & ECORE_CON_SSL))) count = write(svr->fd, buf + *buf_offset, num); else - count = ecore_con_ssl_server_write(svr, buf + *buf_offset, num); + count = ecore_con_ssl_server_write(obj, buf + *buf_offset, num); if (count < 0) { if ((errno != EAGAIN) && (errno != EINTR)) { - ecore_con_event_server_error(svr, strerror(errno)); - _ecore_con_server_kill(svr); + ecore_con_event_server_error(obj, strerror(errno)); + _ecore_con_server_kill(obj); } return; } - if (count && (!svr->ecs_state)) ecore_con_event_server_write(svr, count); + if (count && (!svr->ecs_state)) ecore_con_event_server_write(obj, count); if (!eina_binbuf_remove(buf_p, 0, count)) *buf_offset += count; @@ -2406,7 +2412,8 @@ _ecore_con_client_flush(Ecore_Con_Client *obj) if (!cl->buf) return; num = eina_binbuf_length_get(cl->buf) - cl->buf_offset; if (num <= 0) return; - if (!(cl->host_server->type & ECORE_CON_SSL) && (!cl->upgrade)) + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + if (!(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(obj, eina_binbuf_string_get(cl->buf) + cl->buf_offset, num); @@ -2431,7 +2438,8 @@ _ecore_con_client_flush(Ecore_Con_Client *obj) eina_binbuf_free(cl->buf); cl->buf = NULL; #ifdef TCP_CORK - if ((cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_CORK) + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + if ((host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_CORK) { int state = 0; if (setsockopt(cl->fd, IPPROTO_TCP, TCP_CORK, (char *)&state, sizeof(int)) < 0) @@ -2447,9 +2455,10 @@ _ecore_con_client_flush(Ecore_Con_Client *obj) } static void -_ecore_con_event_client_add_free(Ecore_Con_Server *svr, +_ecore_con_event_client_add_free(Ecore_Con_Server *obj, void *ev) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Client_Add *e; e = ev; @@ -2461,10 +2470,11 @@ _ecore_con_event_client_add_free(Ecore_Con_Server *svr, cl->event_count = eina_list_remove(cl->event_count, e); if (cl->host_server) { - cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, ev); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + host_server->event_count = eina_list_remove(host_server->event_count, ev); if ((!svr->event_count) && (svr->delete_me)) { - _ecore_con_server_free(svr); + _ecore_con_server_free(obj); svrfreed = EINA_TRUE; } } @@ -2482,9 +2492,10 @@ _ecore_con_event_client_add_free(Ecore_Con_Server *svr, } static void -_ecore_con_event_client_del_free(Ecore_Con_Server *svr, +_ecore_con_event_client_del_free(Ecore_Con_Server *obj, void *ev) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Client_Del *e; e = ev; @@ -2496,10 +2507,11 @@ _ecore_con_event_client_del_free(Ecore_Con_Server *svr, cl->event_count = eina_list_remove(cl->event_count, e); if (cl->host_server) { - cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, ev); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + host_server->event_count = eina_list_remove(host_server->event_count, ev); if ((!svr->event_count) && (svr->delete_me)) { - _ecore_con_server_free(svr); + _ecore_con_server_free(obj); svrfreed = EINA_TRUE; } } @@ -2516,9 +2528,10 @@ _ecore_con_event_client_del_free(Ecore_Con_Server *svr, } static void -_ecore_con_event_client_write_free(Ecore_Con_Server *svr, +_ecore_con_event_client_write_free(Ecore_Con_Server *obj, Ecore_Con_Event_Client_Write *e) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (e->client) { Ecore_Con_Client_Data *cl = eo_data_scope_get(e->client, ECORE_CON_CLIENT_CLASS); @@ -2527,19 +2540,21 @@ _ecore_con_event_client_write_free(Ecore_Con_Server *svr, cl->event_count = eina_list_remove(cl->event_count, e); if (cl->host_server) { - cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, e); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + host_server->event_count = eina_list_remove(host_server->event_count, e); if ((!svr->event_count) && (svr->delete_me)) { - _ecore_con_server_free(svr); + _ecore_con_server_free(obj); svrfreed = EINA_TRUE; } } if (!svrfreed) { + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); 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)))) + ((host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP || + (host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST)))) ecore_con_client_del(e->client); } } @@ -2550,9 +2565,10 @@ _ecore_con_event_client_write_free(Ecore_Con_Server *svr, } static void -_ecore_con_event_client_data_free(Ecore_Con_Server *svr, +_ecore_con_event_client_data_free(Ecore_Con_Server *obj, void *ev) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_Event_Client_Data *e; e = ev; @@ -2564,19 +2580,21 @@ _ecore_con_event_client_data_free(Ecore_Con_Server *svr, cl->event_count = eina_list_remove(cl->event_count, e); if (cl->host_server) { - cl->host_server->event_count = eina_list_remove(cl->host_server->event_count, ev); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + host_server->event_count = eina_list_remove(host_server->event_count, ev); } if ((!svr->event_count) && (svr->delete_me)) { - _ecore_con_server_free(svr); + _ecore_con_server_free(obj); svrfreed = EINA_TRUE; } if (!svrfreed) { + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); 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)))) + ((host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP || + (host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST)))) ecore_con_client_del(e->client); } } @@ -2596,8 +2614,9 @@ _ecore_con_event_server_add_free(void *data EINA_UNUSED, e = ev; if (e->server) { - e->server->event_count = eina_list_remove(e->server->event_count, ev); - if ((!e->server->event_count) && (e->server->delete_me)) + Ecore_Con_Server_Data *svr = eo_data_scope_get(e->server, ECORE_CON_SERVER_CLASS); + svr->event_count = eina_list_remove(svr->event_count, ev); + if ((!svr->event_count) && (svr->delete_me)) _ecore_con_server_free(e->server); } ecore_con_event_server_add_free(e); @@ -2615,8 +2634,9 @@ _ecore_con_event_server_del_free(void *data EINA_UNUSED, e = ev; if (e->server) { - e->server->event_count = eina_list_remove(e->server->event_count, ev); - if (!e->server->event_count) + Ecore_Con_Server_Data *svr = eo_data_scope_get(e->server, ECORE_CON_SERVER_CLASS); + svr->event_count = eina_list_remove(svr->event_count, ev); + if (!svr->event_count) _ecore_con_server_free(e->server); } ecore_con_event_server_del_free(e); @@ -2631,8 +2651,9 @@ _ecore_con_event_server_write_free(void *data EINA_UNUSED, { if (e->server) { - e->server->event_count = eina_list_remove(e->server->event_count, e); - if ((!e->server->event_count) && (e->server->delete_me)) + Ecore_Con_Server_Data *svr = eo_data_scope_get(e->server, ECORE_CON_SERVER_CLASS); + svr->event_count = eina_list_remove(svr->event_count, e); + if ((!svr->event_count) && (svr->delete_me)) _ecore_con_server_free(e->server); } @@ -2651,8 +2672,9 @@ _ecore_con_event_server_data_free(void *data EINA_UNUSED, e = ev; if (e->server) { - e->server->event_count = eina_list_remove(e->server->event_count, ev); - if ((!e->server->event_count) && (e->server->delete_me)) + Ecore_Con_Server_Data *svr = eo_data_scope_get(e->server, ECORE_CON_SERVER_CLASS); + svr->event_count = eina_list_remove(svr->event_count, ev); + if ((!svr->event_count) && (svr->delete_me)) _ecore_con_server_free(e->server); } @@ -2668,8 +2690,9 @@ _ecore_con_event_server_error_free(void *data EINA_UNUSED, Ecore_Con_Event_Serve { if (e->server) { - e->server->event_count = eina_list_remove(e->server->event_count, e); - if ((!e->server->event_count) && (e->server->delete_me)) + Ecore_Con_Server_Data *svr = eo_data_scope_get(e->server, ECORE_CON_SERVER_CLASS); + svr->event_count = eina_list_remove(svr->event_count, e); + if ((!svr->event_count) && (svr->delete_me)) _ecore_con_server_free(e->server); } free(e->error); @@ -2680,8 +2703,9 @@ _ecore_con_event_server_error_free(void *data EINA_UNUSED, Ecore_Con_Event_Serve } static void -_ecore_con_event_client_error_free(Ecore_Con_Server *svr, Ecore_Con_Event_Client_Error *e) +_ecore_con_event_client_error_free(Ecore_Con_Server *obj, Ecore_Con_Event_Client_Error *e) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (e->client) { Ecore_Con_Client_Data *cl = eo_data_scope_get(e->client, ECORE_CON_CLIENT_CLASS); @@ -2700,7 +2724,7 @@ _ecore_con_event_client_error_free(Ecore_Con_Server *svr, Ecore_Con_Event_Client if (!svrfreed) { if ((!svr->event_count) && (svr->delete_me)) - _ecore_con_server_free(svr); + _ecore_con_server_free(obj); } } free(e->error); @@ -2714,10 +2738,10 @@ static void _ecore_con_lookup_done(void *data, Ecore_Con_Info *infos) { - Ecore_Con_Server *svr; + Ecore_Con_Server *obj = data; Ecore_Con_Lookup *lk; - svr = data; + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); lk = svr->data; if (infos) @@ -2734,3 +2758,4 @@ _ecore_con_lookup_done(void *data, #include "ecore_con.eo.c" #include "ecore_con_client.eo.c" +#include "ecore_con_server.eo.c" diff --git a/src/lib/ecore_con/ecore_con_dns.c b/src/lib/ecore_con/ecore_con_dns.c index 986c3a49ac..4cf3665a69 100644 --- a/src/lib/ecore_con/ecore_con_dns.c +++ b/src/lib/ecore_con/ecore_con_dns.c @@ -57,7 +57,10 @@ _ecore_con_dns_free(Ecore_Con_DNS *dns) static void _ecore_con_dns_del(Ecore_Con_DNS *dns) { - if (dns->svr && dns->svr->infos) dns->svr->infos = eina_list_remove(dns->svr->infos, dns); + Ecore_Con_Server_Data *svr = NULL; + if (dns->svr) + svr = eo_data_scope_get(dns->svr, ECORE_CON_CLIENT_CLASS); + if (svr->infos) svr->infos = eina_list_remove(svr->infos, dns); _ecore_con_dns_free(dns); } @@ -284,18 +287,19 @@ ecore_con_info_mcast_listen(Ecore_Con_Server *svr, } EAPI int -ecore_con_info_get(Ecore_Con_Server *svr, +ecore_con_info_get(Ecore_Con_Server *obj, Ecore_Con_Info_Cb done_cb, void *data, struct addrinfo *hints) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); Ecore_Con_DNS *dns; int error = 0; dns = calloc(1, sizeof(Ecore_Con_DNS)); if (!dns) return 0; - dns->svr = svr; + dns->svr = obj; dns->done_cb = done_cb; dns->data = data; @@ -308,7 +312,7 @@ ecore_con_info_get(Ecore_Con_Server *svr, goto reserr; } - error = _dns_addrinfo_get(dns, svr->ecs ? svr->ecs->ip : svr->name, dns->svr->ecs ? dns->svr->ecs->port : dns->svr->port); + error = _dns_addrinfo_get(dns, svr->ecs ? svr->ecs->ip : svr->name, svr->ecs ? svr->ecs->port : svr->port); if (error && (error != EAGAIN)) { ERR("resolver: %s", dns_strerror(error)); diff --git a/src/lib/ecore_con/ecore_con_local.c b/src/lib/ecore_con/ecore_con_local.c index bb54b52e9e..e928f0c339 100644 --- a/src/lib/ecore_con/ecore_con_local.c +++ b/src/lib/ecore_con/ecore_con_local.c @@ -56,13 +56,14 @@ ecore_con_local_shutdown(void) } int -ecore_con_local_connect(Ecore_Con_Server *svr, +ecore_con_local_connect(Ecore_Con_Server *obj, Eina_Bool (*cb_done)(void *data, Ecore_Fd_Handler *fd_handler), void *data EINA_UNUSED) { #ifndef HAVE_LOCAL_SOCKETS return 0; #else + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); char buf[4096]; struct sockaddr_un socket_unix; int curstate = 0; @@ -182,7 +183,7 @@ ecore_con_local_connect(Ecore_Con_Server *svr, return 0; if (svr->type & ECORE_CON_SSL) - ecore_con_ssl_server_init(svr); + ecore_con_ssl_server_init(obj); svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ, @@ -190,7 +191,7 @@ ecore_con_local_connect(Ecore_Con_Server *svr, if (!svr->fd_handler) return 0; - if (!svr->delete_me) ecore_con_event_server_add(svr); + if (!svr->delete_me) ecore_con_event_server_add(obj); return 1; #endif @@ -198,7 +199,7 @@ ecore_con_local_connect(Ecore_Con_Server *svr, int ecore_con_local_listen( - Ecore_Con_Server *svr, + Ecore_Con_Server *obj, Eina_Bool (* cb_listen)(void *data, Ecore_Fd_Handler * @@ -207,6 +208,7 @@ ecore_con_local_listen( EINA_UNUSED) { #ifdef HAVE_LOCAL_SOCKETS + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); char buf[4096]; struct sockaddr_un socket_unix; struct linger lin; diff --git a/src/lib/ecore_con/ecore_con_private.h b/src/lib/ecore_con/ecore_con_private.h index bd5d35f7fb..08d47f3f08 100644 --- a/src/lib/ecore_con/ecore_con_private.h +++ b/src/lib/ecore_con/ecore_con_private.h @@ -124,7 +124,7 @@ struct _Ecore_Con_Client_Data typedef struct _Ecore_Con_Client_Data Ecore_Con_Client_Data; -struct _Ecore_Con_Server +struct _Ecore_Con_Server_Data { ECORE_MAGIC; int fd; @@ -197,6 +197,8 @@ struct _Ecore_Con_Server #endif }; +typedef struct _Ecore_Con_Server_Data Ecore_Con_Server_Data; + struct _Ecore_Con_Url { ECORE_MAGIC; diff --git a/src/lib/ecore_con/ecore_con_server.eo b/src/lib/ecore_con/ecore_con_server.eo new file mode 100644 index 0000000000..842324ec17 --- /dev/null +++ b/src/lib/ecore_con/ecore_con_server.eo @@ -0,0 +1,16 @@ +/* FIXME: make abstract. */ +class Ecore.Con.Server (Ecore.Con) { + eo_prefix: ecore_con_server_obj; + 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; + } +} diff --git a/src/lib/ecore_con/ecore_con_socks.c b/src/lib/ecore_con/ecore_con_socks.c index 5ff74b477e..a3ba58cbaf 100644 --- a/src/lib/ecore_con/ecore_con_socks.c +++ b/src/lib/ecore_con/ecore_con_socks.c @@ -134,8 +134,9 @@ _ecore_con_socks_free(Ecore_Con_Socks *ecs) } static Eina_Bool -_ecore_con_socks_svr_init_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4) +_ecore_con_socks_svr_init_v4(Ecore_Con_Server *obj, Ecore_Con_Socks_v4 *v4) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); size_t addrlen, buflen, ulen = 1; unsigned char *sbuf; @@ -145,8 +146,8 @@ _ecore_con_socks_svr_init_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4) sbuf = malloc(buflen); if (!sbuf) { - ecore_con_event_server_error(svr, "Memory allocation failure!"); - _ecore_con_server_kill(svr); + ecore_con_event_server_error(obj, "Memory allocation failure!"); + _ecore_con_server_kill(obj); return EINA_FALSE; } /* http://en.wikipedia.org/wiki/SOCKS */ @@ -173,8 +174,9 @@ _ecore_con_socks_svr_init_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4) } static Eina_Bool -_ecore_con_socks_svr_init_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5) +_ecore_con_socks_svr_init_v5(Ecore_Con_Server *obj, Ecore_Con_Socks_v5 *v5) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); size_t buflen; unsigned int x; unsigned char *sbuf; @@ -186,8 +188,8 @@ _ecore_con_socks_svr_init_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5) sbuf = malloc(buflen); if (!sbuf) { - ecore_con_event_server_error(svr, "Memory allocation failure!"); - _ecore_con_server_kill(svr); + ecore_con_event_server_error(obj, "Memory allocation failure!"); + _ecore_con_server_kill(obj); return EINA_FALSE; } /* http://en.wikipedia.org/wiki/SOCKS @@ -226,8 +228,9 @@ _ecore_con_socks_svr_init_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5) data = buf static void -_ecore_con_socks_read_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4 EINA_UNUSED, const unsigned char *buf, unsigned int num) +_ecore_con_socks_read_v4(Ecore_Con_Server *obj, Ecore_Con_Socks_v4 *v4 EINA_UNUSED, const unsigned char *buf, unsigned int num) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); const unsigned char *data; DBG("SOCKS: %d bytes", num); ECORE_CON_SOCKS_READ(8); @@ -241,19 +244,19 @@ _ecore_con_socks_read_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4 EINA_UNUS break; case 91: - ecore_con_event_server_error(svr, "proxy request rejected or failed"); + ecore_con_event_server_error(obj, "proxy request rejected or failed"); goto error; case 92: - ecore_con_event_server_error(svr, "proxying SOCKS server could not perform authentication"); + ecore_con_event_server_error(obj, "proxying SOCKS server could not perform authentication"); goto error; case 93: - ecore_con_event_server_error(svr, "proxy request authentication rejected"); + ecore_con_event_server_error(obj, "proxy request authentication rejected"); goto error; default: - ecore_con_event_server_error(svr, "garbage data from proxy"); + ecore_con_event_server_error(obj, "garbage data from proxy"); goto error; } if (svr->ecs->bind) @@ -266,7 +269,7 @@ _ecore_con_socks_read_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4 EINA_UNUS if (!inet_ntop(AF_INET, &data[4], naddr, sizeof(naddr))) goto error; svr->proxyip = eina_stringshare_add(naddr); - ecore_con_event_proxy_bind(svr); + ecore_con_event_proxy_bind(obj); } svr->ecs_state = ECORE_CON_PROXY_STATE_DONE; INF("PROXY CONNECTED"); @@ -275,17 +278,18 @@ _ecore_con_socks_read_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4 EINA_UNUS svr->ecs_buf_offset = svr->ecs_addrlen = 0; memset(svr->ecs_addr, 0, sizeof(svr->ecs_addr)); if (!svr->ssl_state) - ecore_con_event_server_add(svr); + ecore_con_event_server_add(obj); if (svr->ssl_state || (svr->buf && eina_binbuf_length_get(svr->buf))) ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ | ECORE_FD_WRITE); return; error: - _ecore_con_server_kill(svr); + _ecore_con_server_kill(obj); } static Eina_Bool -_ecore_con_socks_auth_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5) +_ecore_con_socks_auth_v5(Ecore_Con_Server *obj, Ecore_Con_Socks_v5 *v5) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); size_t size; unsigned char *data; switch (v5->method) @@ -322,8 +326,9 @@ _ecore_con_socks_auth_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5) } static void -_ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const unsigned char *buf, unsigned int num) +_ecore_con_socks_read_v5(Ecore_Con_Server *obj, Ecore_Con_Socks_v5 *v5, const unsigned char *buf, unsigned int num) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); const unsigned char *data; DBG("SOCKS: %d bytes", num); @@ -335,15 +340,15 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un if (data[0] != 5) goto error; if (data[1] == 0xFF) { - ecore_con_event_server_error(svr, "proxy authentication methods rejected"); + ecore_con_event_server_error(obj, "proxy authentication methods rejected"); goto error; } v5->method = data[1]; - if (!_ecore_con_socks_auth_v5(svr, v5)) goto error; + if (!_ecore_con_socks_auth_v5(obj, v5)) goto error; if (svr->ecs_state == ECORE_CON_PROXY_STATE_REQUEST) { /* run again to skip auth reading */ - _ecore_con_socks_read_v5(svr, v5, NULL, 0); + _ecore_con_socks_read_v5(obj, v5, NULL, 0); return; } ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE); @@ -365,12 +370,12 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un case ECORE_CON_SOCKS_V5_METHOD_USERPASS: if (data[0] != 1) { - ecore_con_event_server_error(svr, "protocol error"); + ecore_con_event_server_error(obj, "protocol error"); goto error; /* wrong version */ } if (data[1]) { - ecore_con_event_server_error(svr, "proxy request authentication rejected"); + ecore_con_event_server_error(obj, "proxy request authentication rejected"); goto error; } @@ -387,7 +392,7 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un sbuf = malloc(buflen); if (!sbuf) { - ecore_con_event_server_error(svr, "Memory allocation failure!"); + ecore_con_event_server_error(obj, "Memory allocation failure!"); goto error; } sbuf[0] = 5; @@ -448,7 +453,7 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un break; default: - ecore_con_event_server_error(svr, "protocol error"); + ecore_con_event_server_error(obj, "protocol error"); goto error; } /* at this point, we finally know exactly how much we need to read */ @@ -456,7 +461,7 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un if (data[0] != 5) { - ecore_con_event_server_error(svr, "protocol error"); + ecore_con_event_server_error(obj, "protocol error"); goto error; /* wrong version */ } switch (data[1]) @@ -465,47 +470,47 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un break; case 1: - ecore_con_event_server_error(svr, "general proxy failure"); + ecore_con_event_server_error(obj, "general proxy failure"); goto error; case 2: - ecore_con_event_server_error(svr, "connection not allowed by ruleset"); + ecore_con_event_server_error(obj, "connection not allowed by ruleset"); goto error; case 3: - ecore_con_event_server_error(svr, "network unreachable"); + ecore_con_event_server_error(obj, "network unreachable"); goto error; case 4: - ecore_con_event_server_error(svr, "host unreachable"); + ecore_con_event_server_error(obj, "host unreachable"); goto error; case 5: - ecore_con_event_server_error(svr, "connection refused by destination host"); + ecore_con_event_server_error(obj, "connection refused by destination host"); goto error; case 6: - ecore_con_event_server_error(svr, "TTL expired"); + ecore_con_event_server_error(obj, "TTL expired"); goto error; case 7: - ecore_con_event_server_error(svr, "command not supported / protocol error"); + ecore_con_event_server_error(obj, "command not supported / protocol error"); goto error; case 8: - ecore_con_event_server_error(svr, "address type not supported"); + ecore_con_event_server_error(obj, "address type not supported"); default: goto error; } if (data[2]) { - ecore_con_event_server_error(svr, "protocol error"); + ecore_con_event_server_error(obj, "protocol error"); goto error; } memset(svr->ecs_addr, 0, sizeof(svr->ecs_addr)); if (!svr->ssl_state) - ecore_con_event_server_add(svr); + ecore_con_event_server_add(obj); if (svr->ssl_state || (svr->buf && eina_binbuf_length_get(svr->buf))) ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ | ECORE_FD_WRITE); svr->ecs_buf_offset = svr->ecs_addrlen = 0; @@ -522,7 +527,7 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un return; error: - _ecore_con_server_kill(svr); + _ecore_con_server_kill(obj); } ///////////////////////////////////////////////////////////////////////////////////// @@ -537,20 +542,22 @@ ecore_con_socks_shutdown(void) } void -ecore_con_socks_read(Ecore_Con_Server *svr, unsigned char *buf, int num) +ecore_con_socks_read(Ecore_Con_Server *obj, unsigned char *buf, int num) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); ECORE_CON_SOCKS_VERSION_CHECK(svr->ecs); ECORE_CON_SOCKS_CAST(svr->ecs); if (svr->ecs_state < ECORE_CON_PROXY_STATE_READ) return; - if (v4) _ecore_con_socks_read_v4(svr, v4, buf, (unsigned int)num); - else _ecore_con_socks_read_v5(svr, v5, buf, (unsigned int)num); + if (v4) _ecore_con_socks_read_v4(obj, v4, buf, (unsigned int)num); + else _ecore_con_socks_read_v5(obj, v5, buf, (unsigned int)num); } Eina_Bool -ecore_con_socks_svr_init(Ecore_Con_Server *svr) +ecore_con_socks_svr_init(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); ECORE_CON_SOCKS_VERSION_CHECK_RETURN(svr->ecs, EINA_FALSE); ECORE_CON_SOCKS_CAST(svr->ecs); @@ -558,13 +565,14 @@ ecore_con_socks_svr_init(Ecore_Con_Server *svr) if (svr->ecs_buf) return EINA_FALSE; if (svr->ecs_state != ECORE_CON_PROXY_STATE_INIT) return EINA_FALSE; ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE); - if (v4) return _ecore_con_socks_svr_init_v4(svr, v4); - return _ecore_con_socks_svr_init_v5(svr, v5); + if (v4) return _ecore_con_socks_svr_init_v4(obj, v4); + return _ecore_con_socks_svr_init_v5(obj, v5); } void -ecore_con_socks_dns_cb(const char *canonname EINA_UNUSED, const char *ip, struct sockaddr *addr, int addrlen EINA_UNUSED, Ecore_Con_Server *svr) +ecore_con_socks_dns_cb(const char *canonname EINA_UNUSED, const char *ip, struct sockaddr *addr, int addrlen EINA_UNUSED, Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); svr->ip = eina_stringshare_add(ip); svr->ecs_state++; if (addr->sa_family == AF_INET) @@ -579,7 +587,7 @@ ecore_con_socks_dns_cb(const char *canonname EINA_UNUSED, const char *ip, struct svr->ecs_addrlen = 16; } #endif - ecore_con_socks_svr_init(svr); + ecore_con_socks_svr_init(obj); } void diff --git a/src/lib/ecore_con/ecore_con_ssl.c b/src/lib/ecore_con/ecore_con_ssl.c index 7decaf4734..2ed732355b 100644 --- a/src/lib/ecore_con/ecore_con_ssl.c +++ b/src/lib/ecore_con/ecore_con_ssl.c @@ -486,19 +486,21 @@ ecore_con_ssl_server_prepare(Ecore_Con_Server *svr, } Ecore_Con_Ssl_Error -ecore_con_ssl_server_init(Ecore_Con_Server *svr) +ecore_con_ssl_server_init(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (!(svr->type & ECORE_CON_SSL)) return ECORE_CON_SSL_ERROR_NONE; - return SSL_SUFFIX(_ecore_con_ssl_server_init) (svr); + return SSL_SUFFIX(_ecore_con_ssl_server_init) (obj); } Ecore_Con_Ssl_Error -ecore_con_ssl_server_shutdown(Ecore_Con_Server *svr) +ecore_con_ssl_server_shutdown(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (!(svr->type & ECORE_CON_SSL)) return ECORE_CON_SSL_ERROR_NONE; - return SSL_SUFFIX(_ecore_con_ssl_server_shutdown) (svr); + return SSL_SUFFIX(_ecore_con_ssl_server_shutdown) (obj); } int @@ -521,7 +523,8 @@ Ecore_Con_Ssl_Error 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)) + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + if (!(host_server->type & ECORE_CON_SSL)) return ECORE_CON_SSL_ERROR_NONE; return SSL_SUFFIX(_ecore_con_ssl_client_init) (obj); } @@ -530,7 +533,8 @@ Ecore_Con_Ssl_Error 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)) + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + if (!(host_server->type & ECORE_CON_SSL)) return ECORE_CON_SSL_ERROR_NONE; return SSL_SUFFIX(_ecore_con_ssl_client_shutdown) (obj); } @@ -579,13 +583,11 @@ ecore_con_ssl_available_get(void) * @param svr The server object */ EAPI void -ecore_con_ssl_server_verify(Ecore_Con_Server *svr) +ecore_con_ssl_server_verify(Ecore_Con_Server *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_ssl_server_verify"); - return; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return; + svr->verify = EINA_TRUE; } @@ -600,13 +602,11 @@ ecore_con_ssl_server_verify(Ecore_Con_Server *svr) * @since 1.1 */ EAPI void -ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr) +ecore_con_ssl_server_verify_basic(Ecore_Con_Server *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__); - return; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return; + svr->verify_basic = EINA_TRUE; } @@ -624,13 +624,11 @@ ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr) * @since 1.2 */ EAPI void -ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *svr, const char *name) +ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *obj, const char *name) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__); - return; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return; + eina_stringshare_replace(&svr->verify_name, name); } @@ -645,13 +643,11 @@ ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *svr, const char *name) * @since 1.2 */ EAPI const char * -ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *svr) +ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *obj) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__); - return NULL; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return NULL; + return svr->verify_name ? : svr->name; } @@ -667,24 +663,21 @@ ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *svr) */ EAPI Eina_Bool -ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, +ecore_con_ssl_server_cert_add(Ecore_Con_Server *obj, const char *cert) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_ssl_server_cert_add"); - return EINA_FALSE; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return EINA_FALSE; if (!svr->ssl_prepared) { svr->use_cert = EINA_TRUE; svr->type |= ECORE_CON_USE_MIXED | ECORE_CON_LOAD_CERT; - if (ecore_con_ssl_server_prepare(svr, svr->type & ECORE_CON_SSL)) + if (ecore_con_ssl_server_prepare(obj, svr->type & ECORE_CON_SSL)) return EINA_FALSE; } - return SSL_SUFFIX(_ecore_con_ssl_server_cert_add) (svr, cert); + return SSL_SUFFIX(_ecore_con_ssl_server_cert_add) (obj, cert); } /** @@ -700,24 +693,21 @@ ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, */ EAPI Eina_Bool -ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, +ecore_con_ssl_server_cafile_add(Ecore_Con_Server *obj, const char *ca_file) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_ssl_server_cafile_add"); - return EINA_FALSE; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return EINA_FALSE; if (!svr->ssl_prepared) { svr->use_cert = EINA_TRUE; svr->type |= ECORE_CON_USE_MIXED | ECORE_CON_LOAD_CERT; - if (ecore_con_ssl_server_prepare(svr, svr->type & ECORE_CON_SSL)) + if (ecore_con_ssl_server_prepare(obj, svr->type & ECORE_CON_SSL)) return EINA_FALSE; } - return SSL_SUFFIX(_ecore_con_ssl_server_cafile_add) (svr, ca_file); + return SSL_SUFFIX(_ecore_con_ssl_server_cafile_add) (obj, ca_file); } /** @@ -732,24 +722,21 @@ ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, */ EAPI Eina_Bool -ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, +ecore_con_ssl_server_privkey_add(Ecore_Con_Server *obj, const char *key_file) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_ssl_server_privkey_add"); - return EINA_FALSE; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return EINA_FALSE; if (!svr->ssl_prepared) { svr->use_cert = EINA_TRUE; svr->type |= ECORE_CON_USE_MIXED | ECORE_CON_LOAD_CERT; - if (ecore_con_ssl_server_prepare(svr, svr->type & ECORE_CON_SSL)) + if (ecore_con_ssl_server_prepare(obj, svr->type & ECORE_CON_SSL)) return EINA_FALSE; } - return SSL_SUFFIX(_ecore_con_ssl_server_privkey_add) (svr, key_file); + return SSL_SUFFIX(_ecore_con_ssl_server_privkey_add) (obj, key_file); } /** @@ -764,24 +751,21 @@ ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, */ EAPI Eina_Bool -ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, +ecore_con_ssl_server_crl_add(Ecore_Con_Server *obj, const char *crl_file) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, "ecore_con_ssl_server_crl_add"); - return EINA_FALSE; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return EINA_FALSE; if (!svr->ssl_prepared) { svr->use_cert = EINA_TRUE; svr->type |= ECORE_CON_USE_MIXED | ECORE_CON_LOAD_CERT; - if (ecore_con_ssl_server_prepare(svr, svr->type & ECORE_CON_SSL)) + if (ecore_con_ssl_server_prepare(obj, svr->type & ECORE_CON_SSL)) return EINA_FALSE; } - return SSL_SUFFIX(_ecore_con_ssl_server_crl_add) (svr, crl_file); + return SSL_SUFFIX(_ecore_con_ssl_server_crl_add) (obj, crl_file); } /** @@ -799,20 +783,17 @@ ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, */ EAPI Eina_Bool -ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type ssl_type) +ecore_con_ssl_server_upgrade(Ecore_Con_Server *obj, Ecore_Con_Type ssl_type) { - if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) - { - ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__); - return EINA_FALSE; - } + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); + if (!svr) return EINA_FALSE; #if _ECORE_CON_SSL_AVAILABLE == 0 return EINA_FALSE; #endif if (!svr->ssl_prepared) { - if (ecore_con_ssl_server_prepare(svr, ssl_type)) + if (ecore_con_ssl_server_prepare(obj, ssl_type)) return EINA_FALSE; } if (!svr->use_cert) @@ -820,7 +801,7 @@ ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type ssl_type) svr->upgrade = EINA_TRUE; svr->handshaking = EINA_TRUE; svr->ssl_state = ECORE_CON_SSL_STATE_INIT; - return !SSL_SUFFIX(_ecore_con_ssl_server_init) (svr); + return !SSL_SUFFIX(_ecore_con_ssl_server_init) (obj); } /** @@ -848,15 +829,16 @@ ecore_con_ssl_client_upgrade(Ecore_Con_Client *obj, Ecore_Con_Type ssl_type) return EINA_FALSE; #endif - if (!cl->host_server->ssl_prepared) + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); + if (!host_server->ssl_prepared) { if (ecore_con_ssl_server_prepare(cl->host_server, ssl_type)) return EINA_FALSE; } - if (!cl->host_server->use_cert) - cl->host_server->type |= ssl_type; + if (!host_server->use_cert) + host_server->type |= ssl_type; cl->upgrade = EINA_TRUE; - cl->host_server->upgrade = EINA_TRUE; + 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) (obj); @@ -1527,9 +1509,10 @@ _ecore_con_ssl_shutdown_openssl(void) } static Ecore_Con_Ssl_Error -_ecore_con_ssl_server_prepare_openssl(Ecore_Con_Server *svr, +_ecore_con_ssl_server_prepare_openssl(Ecore_Con_Server *obj, int ssl_type) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); long options; int dh = 0; @@ -1599,13 +1582,14 @@ error: } else _openssl_print_errors(svr, ECORE_CON_EVENT_SERVER_ERROR); - _ecore_con_ssl_server_shutdown_openssl(svr); + _ecore_con_ssl_server_shutdown_openssl(obj); return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED; } static Ecore_Con_Ssl_Error -_ecore_con_ssl_server_init_openssl(Ecore_Con_Server *svr) +_ecore_con_ssl_server_init_openssl(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); int ret = -1; switch (svr->ssl_state) @@ -1692,14 +1676,15 @@ _ecore_con_ssl_server_init_openssl(Ecore_Con_Server *svr) error: _openssl_print_errors(svr, ECORE_CON_EVENT_SERVER_ERROR); - _ecore_con_ssl_server_shutdown_openssl(svr); + _ecore_con_ssl_server_shutdown_openssl(obj); return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED; } static Eina_Bool -_ecore_con_ssl_server_cafile_add_openssl(Ecore_Con_Server *svr, +_ecore_con_ssl_server_cafile_add_openssl(Ecore_Con_Server *obj, const char *ca_file) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); struct stat st; if (stat(ca_file, &st)) return EINA_FALSE; @@ -1715,9 +1700,10 @@ error: } static Eina_Bool -_ecore_con_ssl_server_crl_add_openssl(Ecore_Con_Server *svr, +_ecore_con_ssl_server_crl_add_openssl(Ecore_Con_Server *obj, const char *crl_file) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); X509_STORE *st; X509_LOOKUP *lu; static Eina_Bool flag = EINA_FALSE; @@ -1739,9 +1725,10 @@ error: } static Eina_Bool -_ecore_con_ssl_server_privkey_add_openssl(Ecore_Con_Server *svr, +_ecore_con_ssl_server_privkey_add_openssl(Ecore_Con_Server *obj, const char *key_file) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); FILE *fp = NULL; EVP_PKEY *privkey = NULL; @@ -1765,9 +1752,10 @@ error: } static Eina_Bool -_ecore_con_ssl_server_cert_add_openssl(Ecore_Con_Server *svr, +_ecore_con_ssl_server_cert_add_openssl(Ecore_Con_Server *obj, const char *cert_file) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); FILE *fp = NULL; X509 *cert = NULL; @@ -1790,8 +1778,9 @@ error: } static Ecore_Con_Ssl_Error -_ecore_con_ssl_server_shutdown_openssl(Ecore_Con_Server *svr) +_ecore_con_ssl_server_shutdown_openssl(Ecore_Con_Server *obj) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); if (svr->ssl) { if (!SSL_shutdown(svr->ssl)) @@ -1811,10 +1800,11 @@ _ecore_con_ssl_server_shutdown_openssl(Ecore_Con_Server *svr) } static int -_ecore_con_ssl_server_read_openssl(Ecore_Con_Server *svr, +_ecore_con_ssl_server_read_openssl(Ecore_Con_Server *obj, unsigned char *buf, int size) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); int num; if (!svr->ssl) return -1; @@ -1841,10 +1831,11 @@ _ecore_con_ssl_server_read_openssl(Ecore_Con_Server *svr, } static int -_ecore_con_ssl_server_write_openssl(Ecore_Con_Server *svr, +_ecore_con_ssl_server_write_openssl(Ecore_Con_Server *obj, const unsigned char *buf, int size) { + Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS); int num; num = SSL_write(svr->ssl, buf, size); @@ -1873,6 +1864,7 @@ static Ecore_Con_Ssl_Error _ecore_con_ssl_client_init_openssl(Ecore_Con_Client *obj) { Ecore_Con_Client_Data *cl = eo_data_scope_get(obj, ECORE_CON_CLIENT_CLASS); + Ecore_Con_Server_Data *host_server = eo_data_scope_get(cl->host_server, ECORE_CON_SERVER_CLASS); int ret = -1; switch (cl->ssl_state) { @@ -1880,7 +1872,7 @@ _ecore_con_ssl_client_init_openssl(Ecore_Con_Client *obj) return ECORE_CON_SSL_ERROR_NONE; case ECORE_CON_SSL_STATE_INIT: - SSL_ERROR_CHECK_GOTO_ERROR(!(cl->ssl = SSL_new(cl->host_server->ssl_ctx))); + SSL_ERROR_CHECK_GOTO_ERROR(!(cl->ssl = SSL_new(host_server->ssl_ctx))); SSL_ERROR_CHECK_GOTO_ERROR(!SSL_set_fd(cl->ssl, cl->fd)); SSL_set_accept_state(cl->ssl); @@ -1914,7 +1906,7 @@ _ecore_con_ssl_client_init_openssl(Ecore_Con_Client *obj) } _openssl_print_session(cl->ssl); - if (!cl->host_server->verify) + if (!host_server->verify) /* not verifying certificates, so we're done! */ return ECORE_CON_SSL_ERROR_NONE; SSL_set_verify(cl->ssl, SSL_VERIFY_PEER, NULL); |