summaryrefslogtreecommitdiff
path: root/protocols/Skype/msgq.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Skype/msgq.h')
-rw-r--r--protocols/Skype/msgq.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/protocols/Skype/msgq.h b/protocols/Skype/msgq.h
new file mode 100644
index 0000000000..4eb666944b
--- /dev/null
+++ b/protocols/Skype/msgq.h
@@ -0,0 +1,64 @@
+#include <time.h>
+
+// ----------------------------------------------------------------------
+// Stolen from *nix sys/queue.h
+// ----------------------------------------------------------------------
+/*
+ * Tail queue definitions.
+ */
+#define TAILQ_HEAD(name, type) \
+struct name { \
+ struct type *tqh_first; /* first element */ \
+ struct type **tqh_last; /* addr of last next element */ \
+}
+
+#define TAILQ_ENTRY(type) \
+struct { \
+ struct type *tqe_next; /* next element */ \
+ struct type **tqe_prev; /* address of previous next element */ \
+}
+
+
+/*
+ * Tail queue functions.
+ */
+#define TAILQ_INIT(head) { \
+ (head)->tqh_first = NULL; \
+ (head)->tqh_last = &(head)->tqh_first; \
+}
+
+#define TAILQ_INSERT_TAIL(head, elm, field) { \
+ (elm)->field.tqe_next = NULL; \
+ (elm)->field.tqe_prev = (head)->tqh_last; \
+ *(head)->tqh_last = (elm); \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+}
+
+#define TAILQ_REMOVE(head, elm, field) { \
+ if (((elm)->field.tqe_next) != NULL) \
+ (elm)->field.tqe_next->field.tqe_prev = \
+ (elm)->field.tqe_prev; \
+ else \
+ (head)->tqh_last = (elm)->field.tqe_prev; \
+ *(elm)->field.tqe_prev = (elm)->field.tqe_next; \
+}
+// ----------------------------------------------------------------------
+
+struct MsgQueue {
+ TAILQ_ENTRY(MsgQueue) l;
+ char *message;
+ time_t tAdded;
+ time_t tReceived;
+};
+typedef struct
+{
+ TAILQ_HEAD(tag_msgq, MsgQueue) l;
+ CRITICAL_SECTION cs;
+} TYP_MSGQ;
+
+void MsgQ_Init(TYP_MSGQ *q);
+void MsgQ_Exit(TYP_MSGQ *q);
+BOOL MsgQ_Add(TYP_MSGQ *q, char *msg);
+char *MsgQ_RemoveMsg(TYP_MSGQ *q, struct MsgQueue *ptr);
+char *MsgQ_Get(TYP_MSGQ *q);
+int MsgQ_CollectGarbage(TYP_MSGQ *q, time_t age);