Module: sip-router
Branch: mariusbucur/dmq
Commit: 8620313f057e7e9b7744c356e954daaf213d12b2
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=8620313…
Author: Marius Bucur <marius(a)marius-bucur.ro>
Committer: Marius Bucur <marius(a)marius-bucur.ro>
Date: Fri Apr 15 09:11:24 2011 +0300
added support for maintaining the dmq serverlist, and updating in accordingly.
currently, some of the functions are stubs
---
modules_k/dmq/dmq.c | 6 ++++++
modules_k/dmq/dmq.h | 3 +++
modules_k/dmq/dmqnode.c | 9 +++++++++
modules_k/dmq/dmqnode.h | 28 ++++++++++++++++++++++++++++
modules_k/dmq/notification_peer.c | 11 +++++++++++
modules_k/dmq/notification_peer.h | 4 +++-
modules_k/dmq/peer.c | 1 +
modules_k/dmq/peer.h | 1 +
8 files changed, 62 insertions(+), 1 deletions(-)
diff --git a/modules_k/dmq/dmq.c b/modules_k/dmq/dmq.c
index 7920361..b07d176 100644
--- a/modules_k/dmq/dmq.c
+++ b/modules_k/dmq/dmq.c
@@ -51,6 +51,7 @@
#include "bind_dmq.h"
#include "worker.h"
#include "notification_peer.h"
+#include "dmqnode.h"
#include "../../mod_fix.h"
static int mod_init(void);
@@ -76,6 +77,8 @@ sl_api_t slb;
/** module variables */
dmq_worker_t* workers;
dmq_peer_list_t* peer_list;
+/* the list of dmq servers */
+dmq_node_list_t* node_list;
// the dmq module is a peer itself for receiving notifications regarding nodes
dmq_peer_t dmq_notification_peer;
@@ -147,6 +150,9 @@ static int mod_init(void) {
/* load peer list - the list containing the module callbacks for dmq */
peer_list = init_peer_list();
+ /* load the dmq node list - the list containing the dmq servers */
+ node_list = init_dmq_node_list();
+
/* register worker processes - add one because of the ping process */
register_procs(num_workers);
diff --git a/modules_k/dmq/dmq.h b/modules_k/dmq/dmq.h
index 6d0aac9..800ecbd 100644
--- a/modules_k/dmq/dmq.h
+++ b/modules_k/dmq/dmq.h
@@ -7,12 +7,15 @@
#include "bind_dmq.h"
#include "peer.h"
#include "worker.h"
+#include "dmqnode.h"
#define DEFAULT_NUM_WORKERS 2
extern int num_workers;
extern dmq_worker_t* workers;
extern dmq_peer_t dmq_notification_peer;
+extern dmq_peer_list_t* peer_list;
+extern dmq_node_list_t* node_list;
static inline int dmq_load_api(dmq_api_t* api) {
bind_dmq_f binddmq;
diff --git a/modules_k/dmq/dmqnode.c b/modules_k/dmq/dmqnode.c
new file mode 100644
index 0000000..4d57fe0
--- /dev/null
+++ b/modules_k/dmq/dmqnode.c
@@ -0,0 +1,9 @@
+#include "dmqnode.h"
+#include "dmq.h"
+
+dmq_node_list_t* init_dmq_node_list() {
+ dmq_node_list_t* node_list = shm_malloc(sizeof(dmq_node_list_t));
+ memset(node_list, 0, sizeof(dmq_node_list_t));
+ lock_init(&node_list->lock);
+ return node_list;
+}
\ No newline at end of file
diff --git a/modules_k/dmq/dmqnode.h b/modules_k/dmq/dmqnode.h
new file mode 100644
index 0000000..d62395b
--- /dev/null
+++ b/modules_k/dmq/dmqnode.h
@@ -0,0 +1,28 @@
+#ifndef DMQNODE_H
+#define DMQNODE_H
+
+#include <string.h>
+#include <stdlib.h>
+#include "../../lock_ops.h"
+#include "../../str.h"
+#include "../../mem/mem.h"
+#include "../../mem/shm_mem.h"
+#include "../../parser/parse_uri.h"
+
+typedef struct dmq_node {
+ struct sip_uri* uri;
+ int status;
+ int last_notification;
+ struct dmqnode* next;
+} dmq_node_t;
+
+typedef struct dmq_node_list {
+ gen_lock_t lock;
+ struct dmq_node* nodes;
+ int count;
+} dmq_node_list_t;
+
+dmq_node_list_t* init_dmq_node_list();
+int update_node_list(dmq_node_list_t* remote_list);
+
+#endif
\ No newline at end of file
diff --git a/modules_k/dmq/notification_peer.c b/modules_k/dmq/notification_peer.c
index 28fba07..8256142 100644
--- a/modules_k/dmq/notification_peer.c
+++ b/modules_k/dmq/notification_peer.c
@@ -12,6 +12,17 @@ int add_notification_peer() {
}
int dmq_notification_callback(struct sip_msg* msg) {
+ /* received dmqnode list */
+ dmq_node_list_t* rlist;
LM_ERR("dmq triggered from dmq_notification_callback\n");
+ rlist = extract_node_list(msg);
+ if(!rlist) {
+ LM_ERR("extract_node_list failed\n");
+ return -1;
+ }
+ if(update_node_list(rlist) < 0) {
+ LM_ERR("cannot update node_list\n");
+ return -1;
+ }
return 0;
}
\ No newline at end of file
diff --git a/modules_k/dmq/notification_peer.h b/modules_k/dmq/notification_peer.h
index 0e6121a..e1e7963 100644
--- a/modules_k/dmq/notification_peer.h
+++ b/modules_k/dmq/notification_peer.h
@@ -1,4 +1,6 @@
#include "dmq.h"
+#include "dmqnode.h"
int add_notification_peer();
-int dmq_notification_callback(struct sip_msg* msg);
\ No newline at end of file
+int dmq_notification_callback(struct sip_msg* msg);
+dmq_node_list_t* extract_node_list(struct sip_msg* msg);
\ No newline at end of file
diff --git a/modules_k/dmq/peer.c b/modules_k/dmq/peer.c
index 4215289..85e5c70 100644
--- a/modules_k/dmq/peer.c
+++ b/modules_k/dmq/peer.c
@@ -1,4 +1,5 @@
#include "peer.h"
+#include "dmq.h"
dmq_peer_list_t* init_peer_list() {
dmq_peer_list_t* peer_list = shm_malloc(sizeof(dmq_peer_list_t));
diff --git a/modules_k/dmq/peer.h b/modules_k/dmq/peer.h
index b9a09ee..702ae34 100644
--- a/modules_k/dmq/peer.h
+++ b/modules_k/dmq/peer.h
@@ -3,6 +3,7 @@
#include <string.h>
#include <stdlib.h>
+#include "../../lock_ops.h"
#include "../../str.h"
#include "../../mem/mem.h"
#include "../../mem/shm_mem.h"