Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_ipc


Modified Files:
        Ecore_Ipc.h ecore_ipc.c ecore_ipc_private.h 


Log Message:


add max data payload settings to ipc

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/Ecore_Ipc.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- Ecore_Ipc.h 11 Jan 2006 05:13:23 -0000      1.14
+++ Ecore_Ipc.h 13 Mar 2006 08:50:26 -0000      1.15
@@ -297,6 +297,8 @@
    /* FIXME: this needs to become an ipc message */
    EAPI int               ecore_ipc_server_send(Ecore_Ipc_Server *svr, int 
major, int minor, int ref, int ref_to, int response, void *data, int size);
    EAPI void              ecore_ipc_server_client_limit_set(Ecore_Ipc_Server 
*svr, int client_limit, char reject_excess_clients);
+   EAPI void              ecore_ipc_server_data_size_max_set(Ecore_Ipc_Server 
*srv, int size);
+   EAPI int               ecore_ipc_server_data_size_max_get(Ecore_Ipc_Server 
*srv);
    
    /* FIXME: this needs to become an ipc message */
    EAPI int               ecore_ipc_client_send(Ecore_Ipc_Client *cl, int 
major, int minor, int ref, int ref_to, int response, void *data, int size);
@@ -304,6 +306,8 @@
    EAPI void             *ecore_ipc_client_del(Ecore_Ipc_Client *cl);
    EAPI void              ecore_ipc_client_data_set(Ecore_Ipc_Client *cl, 
const void *data);
    EAPI void             *ecore_ipc_client_data_get(Ecore_Ipc_Client *cl);
+   EAPI void              ecore_ipc_client_data_size_max_set(Ecore_Ipc_Client 
*cl, int size);
+   EAPI int               ecore_ipc_client_data_size_max_get(Ecore_Ipc_Client 
*cl);
    
    EAPI int               ecore_ipc_ssl_available_get(void);
    /* FIXME: need to add a callback to "ok" large ipc messages greater than */
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/ecore_ipc.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- ecore_ipc.c 11 Jan 2006 05:13:23 -0000      1.26
+++ ecore_ipc.c 13 Mar 2006 08:50:26 -0000      1.27
@@ -349,6 +349,7 @@
        free(svr);
        return NULL;
      }
+   svr->max_buf_size = 32 * 1024;
    svr->data = (void *)data;
    servers = _ecore_list2_append(servers, svr);
    ECORE_MAGIC_SET(svr, ECORE_MAGIC_IPC_SERVER);
@@ -404,6 +405,7 @@
        free(svr);
        return NULL;
      }
+   svr->max_buf_size = -1;
    svr->data = (void *)data;
    servers = _ecore_list2_append(servers, svr);
    ECORE_MAGIC_SET(svr, ECORE_MAGIC_IPC_SERVER);
@@ -600,6 +602,31 @@
    ecore_con_server_client_limit_set(svr->server, client_limit, 
reject_excess_clients);
 }
 
+EAPI void
+ecore_ipc_server_data_size_max_set(Ecore_Ipc_Server *svr, int size)
+{
+   if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER))
+     {
+       ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_IPC_SERVER,
+                        "ecore_ipc_server_data_size_max_set");
+       return;
+     }
+   svr->max_buf_size = size;
+}
+
+EAPI int
+ecore_ipc_server_data_size_max_get(Ecore_Ipc_Server *svr)
+{
+   if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER))
+     {
+       ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_IPC_SERVER,
+                        "ecore_ipc_server_data_size_max_get");
+       return -1;
+     }
+   return svr->max_buf_size;
+}
+
+
 #define CLENC(_member) \
    d = _ecore_ipc_dlt_int(msg._member, cl->prev.o._member, &md); \
    if (md >= DLT_SET) \
@@ -779,6 +806,30 @@
    return cl->data;
 }
 
+EAPI void
+ecore_ipc_client_data_size_max_set(Ecore_Ipc_Client *cl, int size)
+{
+   if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_IPC_CLIENT))
+     {
+       ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_IPC_CLIENT,
+                        "ecore_ipc_client_data_size_max_set");
+       return;
+     }
+   cl->max_buf_size = size;
+}
+
+EAPI int
+ecore_ipc_client_data_size_max_get(Ecore_Ipc_Client *cl)
+{
+   if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_IPC_CLIENT))
+     {
+       ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_IPC_CLIENT,
+                        "ecore_ipc_client_data_size_max_get");
+       return -1;
+     }
+   return cl->max_buf_size;
+}
+
 /**
  * Returns if SSL support is available
  * @return  1 if SSL is available, 0 if it is not.
@@ -808,6 +859,7 @@
        svr = ecore_con_server_data_get(ecore_con_client_server_get(e->client));
        ECORE_MAGIC_SET(cl, ECORE_MAGIC_IPC_CLIENT);
        cl->client = e->client;
+       cl->max_buf_size = 32 * 1024;
        ecore_con_client_data_set(cl->client, (void *)cl);
        svr->clients = _ecore_list2_append(svr->clients, cl);
          {
@@ -1020,27 +1072,43 @@
             if ((cl->buf_size - offset) >= (s + msg.size))
               {
                  Ecore_Ipc_Event_Client_Data *e2;
+                 Ecore_Ipc_Server *svr;
+                 int max, max2;
                  
                  buf = NULL;
-                 if (msg.size > 0)
+                 svr = 
ecore_con_server_data_get(ecore_con_client_server_get(cl->client));
+                 max = svr->max_buf_size;
+                 max2 = cl->max_buf_size;
+                 if ((max >= 0) && (max2 >= 0))
                    {
-                      buf = malloc(msg.size);
-                      if (!buf) return 0;
-                      memcpy(buf, cl->buf + offset + s, msg.size);
+                      if (max2 < max) max = max2;
                    }
-                 e2 = calloc(1, sizeof(Ecore_Ipc_Event_Client_Data));
-                 if (e2)
+                 else
                    {
-                      e2->client   = cl;
-                      e2->major    = msg.major;
-                      e2->minor    = msg.minor;
-                      e2->ref      = msg.ref;
-                      e2->ref_to   = msg.ref_to;
-                      e2->response = msg.response;
-                      e2->size     = msg.size;
-                      e2->data     = buf;
-                      ecore_event_add(ECORE_IPC_EVENT_CLIENT_DATA, e2,
-                                      _ecore_ipc_event_client_data_free, NULL);
+                      if (max < 0) max = max2;
+                   }
+                 if ((max < 0) || (msg.size <= max))
+                   {
+                      if (msg.size > 0)
+                        {
+                           buf = malloc(msg.size);
+                           if (!buf) return 0;
+                           memcpy(buf, cl->buf + offset + s, msg.size);
+                        }
+                      e2 = calloc(1, sizeof(Ecore_Ipc_Event_Client_Data));
+                      if (e2)
+                        {
+                           e2->client   = cl;
+                           e2->major    = msg.major;
+                           e2->minor    = msg.minor;
+                           e2->ref      = msg.ref;
+                           e2->ref_to   = msg.ref_to;
+                           e2->response = msg.response;
+                           e2->size     = msg.size;
+                           e2->data     = buf;
+                           ecore_event_add(ECORE_IPC_EVENT_CLIENT_DATA, e2,
+                                           _ecore_ipc_event_client_data_free, 
NULL);
+                        }
                    }
                  cl->prev.i = msg;
                  offset += (s + msg.size);
@@ -1193,27 +1261,32 @@
             if ((svr->buf_size - offset) >= (s + msg.size))
               {
                  Ecore_Ipc_Event_Server_Data *e2;
+                 int max;
                  
                  buf = NULL;
-                 if (msg.size > 0)
-                   {
-                      buf = malloc(msg.size);
-                      if (!buf) return 0;
-                      memcpy(buf, svr->buf + offset + s, msg.size);
-                   }
-                 e2 = calloc(1, sizeof(Ecore_Ipc_Event_Server_Data));
-                 if (e2)
+                 max = svr->max_buf_size;
+                 if ((max < 0) || (msg.size <= max))
                    {
-                      e2->server   = svr;
-                      e2->major    = msg.major;
-                      e2->minor    = msg.minor;
-                      e2->ref      = msg.ref;
-                      e2->ref_to   = msg.ref_to;
-                      e2->response = msg.response;
-                      e2->size     = msg.size;
-                      e2->data     = buf;
-                      ecore_event_add(ECORE_IPC_EVENT_SERVER_DATA, e2,
-                                      _ecore_ipc_event_server_data_free, NULL);
+                      if (msg.size > 0)
+                        {
+                           buf = malloc(msg.size);
+                           if (!buf) return 0;
+                           memcpy(buf, svr->buf + offset + s, msg.size);
+                        }
+                      e2 = calloc(1, sizeof(Ecore_Ipc_Event_Server_Data));
+                      if (e2)
+                        {
+                           e2->server   = svr;
+                           e2->major    = msg.major;
+                           e2->minor    = msg.minor;
+                           e2->ref      = msg.ref;
+                           e2->ref_to   = msg.ref_to;
+                           e2->response = msg.response;
+                           e2->size     = msg.size;
+                           e2->data     = buf;
+                           ecore_event_add(ECORE_IPC_EVENT_SERVER_DATA, e2,
+                                           _ecore_ipc_event_server_data_free, 
NULL);
+                        }
                    }
                  svr->prev.i = msg;
                  offset += (s + msg.size);
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/ecore_ipc_private.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- ecore_ipc_private.h 23 Sep 2005 06:28:05 -0000      1.7
+++ ecore_ipc_private.h 13 Mar 2006 08:50:26 -0000      1.8
@@ -43,6 +43,7 @@
    void              *data;
    unsigned char     *buf;
    int                buf_size;
+   int                max_buf_size;
    
    struct {
       Ecore_Ipc_Msg_Head i, o;
@@ -58,6 +59,7 @@
    void              *data;
    unsigned char     *buf;
    int                buf_size;
+   int                max_buf_size;
 
    struct {
       Ecore_Ipc_Msg_Head i, o;




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to