summaryrefslogtreecommitdiff
path: root/src/lib/eet_connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/eet_connection.c')
-rw-r--r--src/lib/eet_connection.c232
1 files changed, 0 insertions, 232 deletions
diff --git a/src/lib/eet_connection.c b/src/lib/eet_connection.c
deleted file mode 100644
index a192d4e..0000000
--- a/src/lib/eet_connection.c
+++ /dev/null
@@ -1,232 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif /* ifdef HAVE_CONFIG_H */
-
-#ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-#elif defined __GNUC__
-# define alloca __builtin_alloca
-#elif defined _AIX
-# define alloca __alloca
-#elif defined _MSC_VER
-# include <malloc.h>
-# define alloca _alloca
-#else /* ifdef HAVE_ALLOCA_H */
-# include <stddef.h>
-# ifdef __cplusplus
-extern "C"
-# endif /* ifdef __cplusplus */
-void *alloca(size_t);
-#endif /* ifdef HAVE_ALLOCA_H */
-
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif /* ifdef HAVE_NETINET_IN_H */
-
-#ifdef _WIN32
-# include <winsock2.h>
-#endif /* ifdef _WIN32 */
-
-#include <Eina.h>
-
-#include "Eet.h"
-#include "Eet_private.h"
-
-/* max message size: 1Mb - raised from original 64Kb */
-#define MAX_MSG_SIZE (1024 * 1024)
-#define MAGIC_EET_DATA_PACKET 0x4270ACE1
-
-struct _Eet_Connection
-{
- Eet_Read_Cb *eet_read_cb;
- Eet_Write_Cb *eet_write_cb;
- void *user_data;
-
- size_t allocated;
- size_t size;
- size_t received;
-
- void *buffer;
-};
-
-EAPI Eet_Connection *
-eet_connection_new(Eet_Read_Cb *eet_read_cb,
- Eet_Write_Cb *eet_write_cb,
- const void *user_data)
-{
- Eet_Connection *conn;
-
- if ((!eet_read_cb) || (!eet_write_cb)) return NULL;
-
- conn = calloc(1, sizeof (Eet_Connection));
- if (!conn) return NULL;
- conn->eet_read_cb = eet_read_cb;
- conn->eet_write_cb = eet_write_cb;
- conn->user_data = (void *)user_data;
- return conn;
-}
-
-EAPI int
-eet_connection_received(Eet_Connection *conn,
- const void *data,
- size_t size)
-{
- if ((!conn) || (!data) || (!size)) return size;
- do
- {
- size_t copy_size;
-
- if (conn->size == 0)
- {
- const int *msg;
- size_t packet_size;
-
- if (size < (sizeof(int) * 2)) break;
-
- msg = data;
- /* Check the magic */
- if (ntohl(msg[0]) != MAGIC_EET_DATA_PACKET) break;
-
- packet_size = ntohl(msg[1]);
- /* Message should always be under MAX_MSG_SIZE */
- if (packet_size > MAX_MSG_SIZE) break;
-
- data = (void *)(msg + 2);
- size -= sizeof(int) * 2;
- if ((size_t)packet_size <= size)
- {
- /* Not a partial receive, go the quick way. */
- if (!conn->eet_read_cb(data, packet_size, conn->user_data))
- break;
-
- data = (void *)((char *)data + packet_size);
- size -= packet_size;
- conn->received = 0;
- continue;
- }
- conn->size = packet_size;
- if (conn->allocated < conn->size)
- {
- void *tmp;
-
- tmp = realloc(conn->buffer, conn->size);
- if (!tmp) break;
- conn->buffer = tmp;
- conn->allocated = conn->size;
- }
- }
-
- /* Partial receive */
- copy_size =
- (conn->size - conn->received >=
- size) ? size : conn->size - conn->received;
- memcpy((char *)conn->buffer + conn->received, data, copy_size);
-
- conn->received += copy_size;
- data = (void *)((char *)data + copy_size);
- size -= copy_size;
-
- if (conn->received == conn->size)
- {
- size_t data_size;
-
- data_size = conn->size;
- conn->size = 0;
- conn->received = 0;
- /* Completed a packet. */
- if (!conn->eet_read_cb(conn->buffer, data_size, conn->user_data))
- {
- /* Something goes wrong. Stop now. */
- size += data_size;
- break;
- }
- }
- }
- while (size > 0);
-
- return size;
-}
-
-static Eina_Bool
-_eet_connection_raw_send(Eet_Connection *conn,
- void *data,
- int data_size)
-{
- int *message;
-
- /* Message should always be under MAX_MSG_SIZE */
- if (data_size > MAX_MSG_SIZE) return EINA_FALSE;
- message = alloca(data_size + (sizeof(int) * 2));
- message[0] = htonl(MAGIC_EET_DATA_PACKET);
- message[1] = htonl(data_size);
- memcpy(message + 2, data, data_size);
- conn->eet_write_cb(message,
- data_size + (sizeof(int) * 2),
- conn->user_data);
- return EINA_TRUE;
-}
-
-EAPI Eina_Bool
-eet_connection_empty(Eet_Connection *conn)
-{
- return conn->size ? EINA_FALSE : EINA_TRUE;
-}
-
-EAPI Eina_Bool
-eet_connection_send(Eet_Connection *conn,
- Eet_Data_Descriptor *edd,
- const void *data_in,
- const char *cipher_key)
-{
- void *flat_data;
- int data_size;
- Eina_Bool ret = EINA_FALSE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(conn, EINA_FALSE);
-
- flat_data = eet_data_descriptor_encode_cipher(edd,
- data_in,
- cipher_key,
- &data_size);
- if (!flat_data) return EINA_FALSE;
- if (_eet_connection_raw_send(conn, flat_data, data_size)) ret = EINA_TRUE;
- free(flat_data);
- return ret;
-}
-
-EAPI Eina_Bool
-eet_connection_node_send(Eet_Connection *conn,
- Eet_Node *node,
- const char *cipher_key)
-{
- void *data;
- int data_size;
- Eina_Bool ret = EINA_FALSE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(conn, EINA_FALSE);
-
- data = eet_data_node_encode_cipher(node, cipher_key, &data_size);
- if (!data) return EINA_FALSE;
- if (_eet_connection_raw_send(conn, data, data_size))
- ret = EINA_TRUE;
- free(data);
- return ret;
-}
-
-EAPI void *
-eet_connection_close(Eet_Connection *conn,
- Eina_Bool *on_going)
-{
- void *user_data;
-
- if (!conn) return NULL;
- if (on_going) *on_going = conn->received == 0 ? EINA_FALSE : EINA_TRUE;
- user_data = conn->user_data;
- free(conn->buffer);
- free(conn);
- return user_data;
-}
-