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