summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Hacohen <tom@stosb.com>2014-08-22 16:06:27 +0100
committerTom Hacohen <tom@stosb.com>2014-08-22 17:00:49 +0100
commit78df17e8a0e4fb78aefa2ff4bf5740c8dbc1b3ed (patch)
tree8cf03305371ef6af8964ade863305adfb7506f4f
parente51639a117f762ca9d0e86ed841a9b6fadbcf6da (diff)
downloadefl-78df17e8a0e4fb78aefa2ff4bf5740c8dbc1b3ed.tar.gz
Ecore con server: Migrate to eo.
-rw-r--r--src/Makefile_Ecore_Con.am10
-rw-r--r--src/lib/ecore_con/Ecore_Con.h20
-rw-r--r--src/lib/ecore_con/Ecore_Con_Eo.h1
-rw-r--r--src/lib/ecore_con/Ecore_Con_Legacy.h1
-rw-r--r--src/lib/ecore_con/ecore_con.c605
-rw-r--r--src/lib/ecore_con/ecore_con_dns.c12
-rw-r--r--src/lib/ecore_con/ecore_con_local.c10
-rw-r--r--src/lib/ecore_con/ecore_con_private.h4
-rw-r--r--src/lib/ecore_con/ecore_con_server.eo16
-rw-r--r--src/lib/ecore_con/ecore_con_socks.c94
-rw-r--r--src/lib/ecore_con/ecore_con_ssl.c166
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);