svn update: 51457 (latest:51480)
[framework/uifw/eet.git] / src / lib / eet_connection.c
index 99d1ff1..026f4f4 100644 (file)
@@ -1,10 +1,6 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #ifdef HAVE_ALLOCA_H
 # include <alloca.h>
 #elif defined _MSC_VER
 # include <malloc.h>
 # define alloca _alloca
-#else
+#else /* ifdef HAVE_ALLOCA_H */
 # include <stddef.h>
 # ifdef  __cplusplus
 extern "C"
-# endif
-void *alloca (size_t);
-#endif
+# 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
+#endif /* ifdef HAVE_NETINET_IN_H */
 
 #ifdef _WIN32
 # include <winsock2.h>
-#endif
+#endif /* ifdef _WIN32 */
 
 #include <Eina.h>
 
@@ -41,170 +37,180 @@ void *alloca (size_t);
 
 #define MAGIC_EET_DATA_PACKET 0x4270ACE1
 
-typedef struct _Eet_Message Eet_Message;
-struct _Eet_Message {
-   int magic;
-   int size;
-};
-
 struct _Eet_Connection
 {
-   Eet_Read_Cb *eet_read_cb;
+   Eet_Read_Cb  *eet_read_cb;
    Eet_Write_Cb *eet_write_cb;
-   void *user_data;
+   void         *user_data;
 
-   size_t allocated;
-   size_t size;
-   size_t received;
+   size_t        allocated;
+   size_t        size;
+   size_t        received;
 
-   void *buffer;
+   void         *buffer;
 };
 
-Eet_Connection *
-eet_connection_new(Eet_Read_Cb *eet_read_cb,
-                  Eet_Write_Cb *eet_write_cb,
-                  const void *user_data)
+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;
+      return NULL;
 
    conn = calloc(1, sizeof (Eet_Connection));
    if (!conn)
-     return NULL;
+      return NULL;
 
    conn->eet_read_cb = eet_read_cb;
    conn->eet_write_cb = eet_write_cb;
-   conn->user_data = (void*) user_data;
+   conn->user_data = (void *)user_data;
 
    return conn;
-}
+} /* eet_connection_new */
 
-int
-eet_connection_received(Eet_Connection *conn, const void *data, size_t size)
+EAPI int
+eet_connection_received(Eet_Connection *conn,
+                        const void     *data,
+                        size_t          size)
 {
-   if (!conn || !data || !size)
-     return size;
+   if ((!conn) || (!data) || (!size))
+      return size;
 
    do {
-      size_t copy_size;
-
-      if (conn->size == 0)
-       {
-          const Eet_Message *msg;
-          size_t packet_size;
-
-          if (size < sizeof (Eet_Message))
-            break;
-
-          msg = data;
-          /* Check the magic */
-          if (ntohl(msg->magic) != MAGIC_EET_DATA_PACKET)
-            break;
-
-          packet_size = ntohl(msg->size);
-          /* Message should always be under 64K */
-          if (packet_size > 64 * 1024)
-            break;
-
-          data = (void*) (msg + 1);
-          size -= sizeof (msg);
-          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);
+        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 64K */
+             if (packet_size > 64 * 1024)
+                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;
-}
+} /* eet_connection_received */
 
 static Eina_Bool
-_eet_connection_raw_send(Eet_Connection *conn, void *data, int data_size)
+_eet_connection_raw_send(Eet_Connection *conn,
+                         void           *data,
+                         int             data_size)
 {
-   Eet_Message *message;
+   int *message;
 
    /* Message should never be above 64K */
    if (data_size > 64 * 1024)
-     return EINA_FALSE;
+      return EINA_FALSE;
 
-   message = alloca(data_size + sizeof (Eet_Message));
-   message->magic = htonl(MAGIC_EET_DATA_PACKET);
-   message->size = htonl(data_size);
+   message = alloca(data_size + sizeof (int) * 2);
+   message[0] = htonl(MAGIC_EET_DATA_PACKET);
+   message[1] = htonl(data_size);
 
-   memcpy(message + 1, data, data_size);
+   memcpy(message + 2, data, data_size);
 
-   conn->eet_write_cb(message, data_size + sizeof (Eet_Message), conn->user_data);
+   conn->eet_write_cb(message,
+                      data_size + sizeof (int) * 2,
+                      conn->user_data);
    return EINA_TRUE;
-}
+} /* _eet_connection_raw_send */
 
-Eina_Bool
-eet_connection_send(Eet_Connection *conn, Eet_Data_Descriptor *edd, const void *data_in, const char *cipher_key)
+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;
 
-   flat_data = eet_data_descriptor_encode_cipher(edd, data_in, cipher_key, &data_size);
+   flat_data = eet_data_descriptor_encode_cipher(edd,
+                                                 data_in,
+                                                 cipher_key,
+                                                 &data_size);
    if (!flat_data)
-     return EINA_FALSE;
+      return EINA_FALSE;
 
    if (_eet_connection_raw_send(conn, flat_data, data_size))
-     ret = EINA_TRUE;
+      ret = EINA_TRUE;
 
    free(flat_data);
    return ret;
-}
+} /* eet_connection_send */
 
-Eina_Bool
-eet_connection_node_send(Eet_Connection *conn, Eet_Node *node, const char *cipher_key)
+EAPI Eina_Bool
+eet_connection_node_send(Eet_Connection *conn,
+                         Eet_Node       *node,
+                         const char     *cipher_key)
 {
    void *data;
    int data_size;
@@ -212,25 +218,26 @@ eet_connection_node_send(Eet_Connection *conn, Eet_Node *node, const char *ciphe
 
    data = eet_data_node_encode_cipher(node, cipher_key, &data_size);
    if (!data)
-     return EINA_FALSE;
+      return EINA_FALSE;
 
    if (_eet_connection_raw_send(conn, data, data_size))
-     ret = EINA_TRUE;
+      ret = EINA_TRUE;
 
    free(data);
    return ret;
-}
+} /* eet_connection_node_send */
 
-void *
-eet_connection_close(Eet_Connection *conn, Eina_Bool *on_going)
+EAPI void *
+eet_connection_close(Eet_Connection *conn,
+                     Eina_Bool      *on_going)
 {
    void *user_data;
 
    if (!conn)
-     return NULL;
+      return NULL;
 
    if (on_going)
-     *on_going = conn->received == 0 ? EINA_FALSE : EINA_TRUE;
+      *on_going = conn->received == 0 ? EINA_FALSE : EINA_TRUE;
 
    user_data = conn->user_data;
 
@@ -238,4 +245,5 @@ eet_connection_close(Eet_Connection *conn, Eina_Bool *on_going)
    free(conn);
 
    return user_data;
-}
+} /* eet_connection_close */
+