Remove unused g_info definitions
[lttv.git] / lttv / lttv / sync / data_structures.c
index 6206969875cb900b99568900cd172e8a3d5f766f..6bdf0b257a697aea73b2b9536d4e09df895f91ad 100644 (file)
 #include "data_structures.h"
 
 
-#ifndef g_info
-#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format)
-#endif
-
 // TCP sequence numbers use clock arithmetic, these comparison functions take
 // that into account
 #define SEQ_LT(a,b)     ((int32_t)((a)-(b)) < 0)
@@ -99,15 +95,12 @@ bool isAcking(const Message* const ackSegment, const Message* const
  * Convert an IP address from 32 bit form to dotted quad
  *
  * Args:
- *   str:          A preallocated string of length >= 17
+ *   str:          A preallocated string of length >= 16
  *   addr:         Address
  */
 void convertIP(char* const str, const uint32_t addr)
 {
-       struct in_addr iaddr;
-
-       iaddr.s_addr= htonl(addr);
-       strcpy(str, inet_ntoa(iaddr));
+       strcpy(str, inet_ntoa((struct in_addr) {.s_addr= addr}));
 }
 
 
@@ -116,7 +109,7 @@ void convertIP(char* const str, const uint32_t addr)
  */
 void printTCPSegment(const Message* const segment)
 {
-       char saddr[17], daddr[17];
+       char saddr[16], daddr[16];
        SegmentKey* segmentKey;
 
        g_assert(segment->inE->type == TCP);
@@ -329,6 +322,7 @@ void destroyTCPEvent(Event* const event)
        destroyEvent(event);
 }
 
+
 /*
  * Free the memory used by a base Event
  */
@@ -453,3 +447,205 @@ void gdnConnectionKeyDestroy(gpointer data)
 {
        free((ConnectionKey*) data);
 }
+
+
+/*
+ * A GHashFunc for g_hash_table_new()
+ *
+ * Args:
+ *    key        DatagramKey*
+ */
+guint ghfDatagramKeyHash(gconstpointer key)
+{
+       DatagramKey* datagramKey;
+       uint32_t a, b, c;
+
+       datagramKey= (DatagramKey*) key;
+
+       a= datagramKey->saddr;
+       b= datagramKey->daddr;
+       c= datagramKey->source + (datagramKey->dest << 16);
+       mix(a, b, c);
+
+       a+= datagramKey->ulen; // 16 bits left here
+       b+= *((uint32_t*) datagramKey->dataKey);
+       c+= *((uint32_t*) ((void*) datagramKey->dataKey + 4));
+       final(a, b, c);
+
+       return c;
+}
+
+
+/*
+ * A GEqualFunc for g_hash_table_new()
+ *
+ * Args:
+ *   a, b          DatagramKey*
+ *
+ * Returns:
+ *   TRUE if both values are equal
+ */
+gboolean gefDatagramKeyEqual(gconstpointer a, gconstpointer b)
+{
+       const DatagramKey* dA, * dB;
+
+       dA= (DatagramKey*) a;
+       dB= (DatagramKey*) b;
+
+       if (dA->saddr == dB->saddr && dA->daddr == dB->daddr &&
+               dA->source == dB->source && dA->dest == dB->dest &&
+               dA->ulen == dB->ulen &&
+               memcmp(dA->dataKey, dB->dataKey, sizeof(dA->dataKey)) == 0)
+       {
+               return TRUE;
+       }
+       else
+       {
+               return FALSE;
+       }
+}
+
+
+/*
+ * A GDestroyNotify function for g_hash_table_new_full()
+ *
+ * Args:
+ *   data:         DatagramKey*
+ */
+void gdnDestroyDatagramKey(gpointer data)
+{
+       free((DatagramKey*) data);
+}
+
+
+/*
+ * A GDestroyNotify function for g_hash_table_new_full()
+ *
+ * Args:
+ *   data:         Broadcast*
+ */
+void gdnDestroyBroadcast(gpointer data)
+{
+       destroyBroadcast((Broadcast*) data);
+}
+
+
+/*
+ * Free a Broadcast struct and its associated ressources
+ *
+ * Args:
+ *   broadcast:    Broadcast*
+ */
+void destroyBroadcast(Broadcast* const broadcast)
+{
+       g_queue_foreach(broadcast->events, &gfDestroyEvent, NULL);
+       g_queue_free(broadcast->events);
+       free(broadcast);
+}
+
+
+/*
+ * A GFunc for g_queue_foreach()
+ *
+ * Args:
+ *   data          Event*
+ *   user_data     NULL
+ */
+void gfDestroyEvent(gpointer data, gpointer user_data)
+{
+       Event* event= data;
+
+       event->destroy(event);
+}
+
+
+/* Subtract two WallTime structs
+ *
+ * Args:
+ *   tA, tB:       WallTime
+ *
+ * Returns:
+ *   The result of tA - tB, as a double. This may incur a loss of
+ *   precision.
+ */
+double wallTimeSub(const WallTime const* tA, const WallTime const* tB)
+{
+       return (double) tA->seconds - tB->seconds + ((double) tA->nanosec - tB->nanosec) / 1e9;
+}
+
+
+/*
+ * Allocate and copy a base event
+ *
+ * Args:
+ *   newEvent:     new event, pointer will be updated
+ *   event:        event to copy
+ */
+void copyEvent(const Event* const event, Event** const newEvent)
+{
+       g_assert(event->event.tcpEvent == NULL);
+
+       *newEvent= malloc(sizeof(Event));
+       memcpy(*newEvent, event, sizeof(Event));
+}
+
+
+/*
+ * Allocate and copy a TCP event
+ *
+ * Args:
+ *   newEvent:     new event, pointer will be updated
+ *   event:        event to copy
+ */
+void copyTCPEvent(const Event* const event, Event** const newEvent)
+{
+       g_assert(event->type == TCP);
+
+       *newEvent= malloc(sizeof(Event));
+       memcpy(*newEvent, event, sizeof(Event));
+
+       (*newEvent)->event.tcpEvent= malloc(sizeof(TCPEvent));
+       memcpy((*newEvent)->event.tcpEvent, event->event.tcpEvent,
+               sizeof(TCPEvent));
+
+       (*newEvent)->event.tcpEvent->segmentKey= malloc(sizeof(SegmentKey));
+       memcpy((*newEvent)->event.tcpEvent->segmentKey,
+               event->event.tcpEvent->segmentKey, sizeof(SegmentKey));
+}
+
+
+/*
+ * Allocate and copy a UDP event
+ *
+ * Args:
+ *   newEvent:     new event, pointer will be updated
+ *   event:        event to copy
+ */
+void copyUDPEvent(const Event* const event, Event** const newEvent)
+{
+       g_assert(event->type == UDP);
+
+       *newEvent= malloc(sizeof(Event));
+       memcpy(*newEvent, event, sizeof(Event));
+
+       (*newEvent)->event.udpEvent= malloc(sizeof(UDPEvent));
+       memcpy((*newEvent)->event.udpEvent, event->event.udpEvent,
+               sizeof(UDPEvent));
+
+       (*newEvent)->event.udpEvent->datagramKey= malloc(sizeof(DatagramKey));
+       memcpy((*newEvent)->event.udpEvent->datagramKey,
+               event->event.udpEvent->datagramKey, sizeof(DatagramKey));
+}
+
+
+/*
+ * A GFunc for g_queue_foreach()
+ *
+ * Args:
+ *   data          Event*, event to add
+ *   user_data     GArray*, array to add to
+ */
+void gfAddEventToArray(gpointer data, gpointer user_data)
+{
+       g_array_append_val((GArray*) user_data, data);
+}
This page took 0.038749 seconds and 4 git commands to generate.