tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=bba7ac87f15be9bc86be0baee6e2942ea4047230

commit bba7ac87f15be9bc86be0baee6e2942ea4047230
Author: Tom Hacohen <[email protected]>
Date:   Thu Aug 28 14:17:16 2014 +0100

    Ecore con: Add Connector class (the connecting variant of server).
    
    This change also consists of cleaning up the server class and adding a
    constructor and a finalizer to it.
---
 src/Makefile_Ecore_Con.am                |   4 +
 src/lib/ecore_con/Ecore_Con.h            |   2 +
 src/lib/ecore_con/Ecore_Con_Eo.h         |   1 +
 src/lib/ecore_con/Ecore_Con_Legacy.h     |   1 +
 src/lib/ecore_con/ecore_con.c            | 122 +++++++++++++++++++++----------
 src/lib/ecore_con/ecore_con_base.eo      |   8 +-
 src/lib/ecore_con/ecore_con_connector.eo |   8 ++
 src/lib/ecore_con/ecore_con_server.eo    |  18 ++++-
 8 files changed, 124 insertions(+), 40 deletions(-)

diff --git a/src/Makefile_Ecore_Con.am b/src/Makefile_Ecore_Con.am
index 8eb5d47..3fecaa2 100644
--- a/src/Makefile_Ecore_Con.am
+++ b/src/Makefile_Ecore_Con.am
@@ -8,6 +8,8 @@ ecorecon_eobuiltheaders = \
                  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 \
+                 lib/ecore_con/ecore_con_connector.eo.h \
+                 lib/ecore_con/ecore_con_connector.eo.legacy.h \
                  lib/ecore_con/ecore_con_url.eo.h \
                  lib/ecore_con/ecore_con_url.eo.legacy.h
 
@@ -16,6 +18,7 @@ BUILT_SOURCES += \
                  lib/ecore_con/ecore_con_base.eo.c \
                  lib/ecore_con/ecore_con_client.eo.c \
                  lib/ecore_con/ecore_con_server.eo.c \
+                 lib/ecore_con/ecore_con_connector.eo.c \
                  lib/ecore_con/ecore_con_url.eo.c
 
 ecoreconeolianfilesdir = $(datadir)/eolian/include/ecore-@VMAJ@
@@ -23,6 +26,7 @@ ecoreconeolianfiles_DATA = \
               lib/ecore_con/ecore_con_base.eo \
               lib/ecore_con/ecore_con_client.eo \
               lib/ecore_con/ecore_con_server.eo \
+              lib/ecore_con/ecore_con_connector.eo \
               lib/ecore_con/ecore_con_url.eo
 
 EXTRA_DIST += \
diff --git a/src/lib/ecore_con/Ecore_Con.h b/src/lib/ecore_con/Ecore_Con.h
index 06f7bfd..4e012c5 100644
--- a/src/lib/ecore_con/Ecore_Con.h
+++ b/src/lib/ecore_con/Ecore_Con.h
@@ -232,6 +232,8 @@ typedef Eo Ecore_Con;
  */
 typedef struct Ecore_Con_Socks Ecore_Con_Socks;
 
+typedef enum _Ecore_Con_Type Ecore_Con_Type;
+
 #ifndef EFL_NOLEGACY_API_SUPPORT
 #include "Ecore_Con_Legacy.h"
 #endif
diff --git a/src/lib/ecore_con/Ecore_Con_Eo.h b/src/lib/ecore_con/Ecore_Con_Eo.h
index f6cbcb8..aa3719a 100644
--- a/src/lib/ecore_con/Ecore_Con_Eo.h
+++ b/src/lib/ecore_con/Ecore_Con_Eo.h
@@ -1,4 +1,5 @@
 #include "ecore_con_base.eo.h"
 #include "ecore_con_server.eo.h"
+#include "ecore_con_connector.eo.h"
 #include "ecore_con_client.eo.h"
 #include "ecore_con_url.eo.h"
diff --git a/src/lib/ecore_con/Ecore_Con_Legacy.h 
b/src/lib/ecore_con/Ecore_Con_Legacy.h
index 150e4df..11fa2d1 100644
--- a/src/lib/ecore_con/Ecore_Con_Legacy.h
+++ b/src/lib/ecore_con/Ecore_Con_Legacy.h
@@ -1,4 +1,5 @@
 #include "ecore_con_base.eo.legacy.h"
 #include "ecore_con_server.eo.legacy.h"
+#include "ecore_con_connector.eo.legacy.h"
 #include "ecore_con_client.eo.legacy.h"
 #include "ecore_con_url.eo.legacy.h"
diff --git a/src/lib/ecore_con/ecore_con.c b/src/lib/ecore_con/ecore_con.c
index 14db253..8de82cb 100644
--- a/src/lib/ecore_con/ecore_con.c
+++ b/src/lib/ecore_con/ecore_con.c
@@ -282,7 +282,10 @@ _ecore_con_base_lookup(Eo *kls_obj EINA_UNUSED, void *pd 
EINA_UNUSED, const char
    if (!name || !done_cb)
      return EINA_FALSE;
 
-   obj = eo_add(ECORE_CON_SERVER_CLASS, NULL);
+   obj = eo_add(ECORE_CON_SERVER_CLASS, NULL,
+         ecore_con_server_obj_connection_type_set(ECORE_CON_REMOTE_TCP),
+         ecore_con_server_obj_name_set(name),
+         ecore_con_obj_port_set(1025));
    Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS);
    if (!svr)
      return EINA_FALSE;
@@ -301,14 +304,7 @@ _ecore_con_base_lookup(Eo *kls_obj EINA_UNUSED, void *pd 
EINA_UNUSED, const char
    if (!svr->name)
      goto on_error;
 
-   svr->type = ECORE_CON_REMOTE_TCP;
-   svr->port = 1025;
    svr->data = lk;
-   svr->created = EINA_TRUE;
-   svr->reject_excess_clients = EINA_FALSE;
-   svr->client_limit = -1;
-   svr->clients = NULL;
-   svr->ppid = getpid();
 
    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_family = AF_UNSPEC;
@@ -350,39 +346,53 @@ ecore_con_server_add(Ecore_Con_Type compl_type,
                      const void *data)
 {
    Ecore_Con_Server *obj;
-   Ecore_Con_Type type;
-
-   if (port < 0 || !name)
-     return NULL;  /* local  user   socket: FILE:   ~/.ecore/[name]/[port] */
 
    /* local  system socket: FILE:   /tmp/.ecore_service|[name]|[port] */
    /* remote system socket: TCP/IP: [name]:[port] */
-   obj = eo_add(ECORE_CON_SERVER_CLASS, NULL);
-   Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS);
+   obj = eo_add(ECORE_CON_SERVER_CLASS, NULL,
+         ecore_con_server_obj_connection_type_set(compl_type),
+         ecore_con_server_obj_name_set(name),
+         ecore_con_obj_port_set(port));
+
+   ecore_con_server_data_set(obj, (void *) data);
+
+   return obj;
+}
+
+EOLIAN static void
+_ecore_con_server_eo_base_constructor(Ecore_Con_Server *obj, 
Ecore_Con_Server_Data *svr)
+{
+   eo_do_super(obj, ECORE_CON_SERVER_CLASS, eo_constructor());
 
    svr->fd = -1;
    svr->start_time = ecore_time_get();
-   svr->type = compl_type;
-   svr->port = port;
-   svr->data = (void *)data;
    svr->created = EINA_TRUE;
-   svr->use_cert = (compl_type & ECORE_CON_SSL & ECORE_CON_LOAD_CERT) == 
ECORE_CON_LOAD_CERT;
    svr->reject_excess_clients = EINA_FALSE;
    svr->client_limit = -1;
    svr->clients = NULL;
    svr->ppid = getpid();
+}
+
+EOLIAN static Eo *
+_ecore_con_server_eo_base_finalize(Ecore_Con_Server *obj, 
Ecore_Con_Server_Data *svr)
+{
+   Ecore_Con_Type compl_type = svr->type;
+   Ecore_Con_Type type;
+
+   eo_do_super(obj, ECORE_CON_SERVER_CLASS, eo_finalize());
+
+   svr->use_cert = (svr->type & ECORE_CON_SSL & ECORE_CON_LOAD_CERT) == 
ECORE_CON_LOAD_CERT;
 
    servers = eina_list_append(servers, obj);
 
-   svr->name = strdup(name);
+   type = compl_type & ECORE_CON_TYPE;
+
    if (!svr->name)
      goto error;
 
    if (ecore_con_ssl_server_prepare(obj, compl_type & ECORE_CON_SSL))
      goto error;
 
-   type = compl_type & ECORE_CON_TYPE;
-
    if ((type == ECORE_CON_LOCAL_USER) ||
        (type == ECORE_CON_LOCAL_SYSTEM) ||
        (type == ECORE_CON_LOCAL_ABSTRACT))
@@ -426,31 +436,36 @@ ecore_con_server_connect(Ecore_Con_Type compl_type,
                          const void *data)
 {
    Ecore_Con_Server *obj;
-   Ecore_Con_Type type;
-
-   if ((!name) || (!name[0]))
-     return NULL;
    /* local  user   socket: FILE:   ~/.ecore/[name]/[port] */
    /* local  system socket: FILE:   /tmp/.ecore_service|[name]|[port] */
    /* remote system socket: TCP/IP: [name]:[port] */
-   obj = eo_add(ECORE_CON_SERVER_CLASS, NULL);
+   obj = eo_add(ECORE_CON_CONNECTOR_CLASS, NULL,
+         ecore_con_server_obj_connection_type_set(compl_type),
+         ecore_con_server_obj_name_set(name),
+         ecore_con_obj_port_set(port));
+
+   ecore_con_server_data_set(obj, (void *) data);
+
+   return obj;
+}
+
+EOLIAN static Eo *
+_ecore_con_connector_eo_base_finalize(Ecore_Con_Server *obj, void *pd 
EINA_UNUSED)
+{
    Ecore_Con_Server_Data *svr = eo_data_scope_get(obj, ECORE_CON_SERVER_CLASS);
+   Ecore_Con_Type compl_type = svr->type;
+   Ecore_Con_Type type;
+
+   /* XXX: We intentionally put SERVER class here and not connector, as we'd
+    * like to skip that one. */
+   eo_do_super(obj, ECORE_CON_SERVER_CLASS, eo_finalize());
+
 
-   svr->fd = -1;
-   svr->type = compl_type;
-   svr->port = port;
-   svr->data = (void *)data;
-   svr->created = EINA_FALSE;
    svr->use_cert = (compl_type & ECORE_CON_SSL & ECORE_CON_LOAD_CERT) == 
ECORE_CON_LOAD_CERT;
    svr->disable_proxy = (compl_type & ECORE_CON_SUPER_SSL & 
ECORE_CON_NO_PROXY) == ECORE_CON_NO_PROXY;
-   svr->reject_excess_clients = EINA_FALSE;
-   svr->clients = NULL;
-   svr->client_limit = -1;
-
    servers = eina_list_append(servers, obj);
 
-   svr->name = strdup(name);
-   if (!svr->name)
+   if (!svr->name || (svr->port < 0))
      goto error;
 
    type = compl_type & ECORE_CON_TYPE;
@@ -479,7 +494,7 @@ ecore_con_server_connect(Ecore_Con_Type compl_type,
                              (type == ECORE_CON_REMOTE_CORK) ||
                              (type == ECORE_CON_REMOTE_UDP) ||
                              (type == ECORE_CON_REMOTE_BROADCAST)) &&
-                            (port < 0), error);
+                            (svr->port < 0), error);
 
    if ((type == ECORE_CON_LOCAL_USER) ||
        (type == ECORE_CON_LOCAL_SYSTEM) ||
@@ -594,6 +609,29 @@ _ecore_con_server_clients_get(Eo *obj EINA_UNUSED, 
Ecore_Con_Server_Data *svr)
    return svr->clients;
 }
 
+EOLIAN static void
+_ecore_con_server_connection_type_set(Eo *obj EINA_UNUSED, 
Ecore_Con_Server_Data *svr, Ecore_Con_Type type)
+{
+   /* FIXME: Add a check that only allows this during construction. */
+   svr->type = type;
+}
+
+EOLIAN static Ecore_Con_Type
+_ecore_con_server_connection_type_get(Eo *obj EINA_UNUSED, 
Ecore_Con_Server_Data *svr)
+{
+   return svr->type;
+}
+
+EOLIAN static void
+_ecore_con_server_name_set(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr, 
const char *name)
+{
+   /* FIXME: Add a check that only allows this during construction. */
+   if (svr->name)
+      free(svr->name);
+
+   svr->name = strdup(name);
+}
+
 EOLIAN static const char *
 _ecore_con_server_name_get(Eo *obj EINA_UNUSED, Ecore_Con_Server_Data *svr)
 {
@@ -606,6 +644,13 @@ ecore_con_server_port_get(const Ecore_Con *obj)
    return eo_do((Ecore_Con *)obj, ecore_con_obj_port_get());
 }
 
+EOLIAN static void
+_ecore_con_server_ecore_con_base_port_set(Eo *obj EINA_UNUSED, 
Ecore_Con_Server_Data *svr, int port)
+{
+   /* FIXME: Add a check that only allows this during construction. */
+   svr->port = port;
+}
+
 EOLIAN static int
 _ecore_con_server_ecore_con_base_port_get(Eo *obj EINA_UNUSED, 
Ecore_Con_Server_Data *svr)
 {
@@ -2780,3 +2825,4 @@ _ecore_con_lookup_done(void *data,
 #include "ecore_con_base.eo.c"
 #include "ecore_con_client.eo.c"
 #include "ecore_con_server.eo.c"
+#include "ecore_con_connector.eo.c"
diff --git a/src/lib/ecore_con/ecore_con_base.eo 
b/src/lib/ecore_con/ecore_con_base.eo
index b8a3db3..7c75bff 100644
--- a/src/lib/ecore_con/ecore_con_base.eo
+++ b/src/lib/ecore_con/ecore_con_base.eo
@@ -38,6 +38,9 @@ abstract Ecore.Con.Base (Eo.Base) {
           * @brief Return the port that the obj is connected to
           *
           */
+         set {
+             legacy: null;
+         }
          get {
              legacy: null;
          }
@@ -156,6 +159,7 @@ abstract Ecore.Con.Base (Eo.Base) {
    implements {
       virtual.ip.get;
       virtual.uptime.get;
+      virtual.port.set;
       virtual.port.get;
       virtual.fd.get;
       virtual.connected.get;
@@ -194,7 +198,9 @@ type Ecore_Con_Dns_Cb: func void (const(char) *canonname,
 * Add events (to all of the ecore con stuff, e.g url).
 * Make server the father of the client - make sure I don't leak references.
 *
-* Still need to add constructors to server/client, and most likely migrate 
ecore_con_eet.
+* Still need to add constructor client, and most likely migrate ecore_con_eet.
 *
 * Split server to two classes, listener and connector (or w/e).
+*
+* Mark the constructing properties all around.
 */
diff --git a/src/lib/ecore_con/ecore_con_connector.eo 
b/src/lib/ecore_con/ecore_con_connector.eo
new file mode 100644
index 0000000..9952637
--- /dev/null
+++ b/src/lib/ecore_con/ecore_con_connector.eo
@@ -0,0 +1,8 @@
+class Ecore.Con.Connector (Ecore.Con.Server) {
+   legacy_prefix: null;
+   eo_prefix: ecore_con_connector_obj;
+   data: null;
+   implements {
+      Eo.Base.finalize;
+   }
+}
diff --git a/src/lib/ecore_con/ecore_con_server.eo 
b/src/lib/ecore_con/ecore_con_server.eo
index 8fbd016..83151cc 100644
--- a/src/lib/ecore_con/ecore_con_server.eo
+++ b/src/lib/ecore_con/ecore_con_server.eo
@@ -1,4 +1,3 @@
-/* FIXME: make abstract. */
 class Ecore.Con.Server (Ecore.Con.Base) {
    eo_prefix: ecore_con_server_obj;
    properties {
@@ -8,6 +7,9 @@ class Ecore.Con.Server (Ecore.Con.Base) {
           *
           * The name returned is the name used to connect on this server.
           */
+         set {
+            legacy: null;
+         }
          get {
          }
          values {
@@ -52,11 +54,25 @@ class Ecore.Con.Server (Ecore.Con.Base) {
             const(Eina_List <const(Ecore.Con.Client) *>) *clients; /*@ The 
list of clients on this server. */
          }
       }
+      connection_type {
+        get {
+            legacy: null;
+        }
+        set {
+            legacy: null;
+        }
+        values {
+            Ecore_Con_Type conn_type;
+        }
+      }
    }
    implements {
+      Eo.Base.constructor;
       Eo.Base.destructor;
+      Eo.Base.finalize;
       Ecore.Con.Base.ip.get;
       Ecore.Con.Base.uptime.get;
+      Ecore.Con.Base.port.set;
       Ecore.Con.Base.port.get;
       Ecore.Con.Base.fd.get;
       Ecore.Con.Base.connected.get;

-- 


Reply via email to