Module: sip-router
Branch: alexh/dialog-sync-wip
Commit: 6ceddd9bf832220b05684ff439eb085b8daff240
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=6ceddd9bf832220b05684ff439eb085b8daff240

Author: Alex Hermann <[email protected]>
Committer: Alex Hermann <[email protected]>
Date:   Tue Aug 26 16:23:21 2014 +0200

dmq: Add init_callback() to API

The init_callback is called after DMQ has synced with the notification_peer.
This callback can thus be used to send/broadcast messages as early as
possible.

---

 modules/dialog/dlg_dmq.c        |    1 +
 modules/dmq/notification_peer.c |   21 +++++++++++++++++++++
 modules/dmq/peer.h              |    2 ++
 modules/htable/ht_dmq.c         |    1 +
 4 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/modules/dialog/dlg_dmq.c b/modules/dialog/dlg_dmq.c
index 2b11453..f659a70 100644
--- a/modules/dialog/dlg_dmq.c
+++ b/modules/dialog/dlg_dmq.c
@@ -51,6 +51,7 @@ int dlg_dmq_initialize()
        }
 
        not_peer.callback = dlg_dmq_handle_msg;
+       not_peer.init_callback = NULL;
        not_peer.description.s = "dialog";
        not_peer.description.len = 6;
        not_peer.peer_id.s = "dialog";
diff --git a/modules/dmq/notification_peer.c b/modules/dmq/notification_peer.c
index 2f459e1..e7704f0 100644
--- a/modules/dmq/notification_peer.c
+++ b/modules/dmq/notification_peer.c
@@ -36,6 +36,7 @@ int add_notification_peer()
 {
        dmq_peer_t not_peer;
        not_peer.callback = dmq_notification_callback;
+       not_peer.init_callback = NULL;
        not_peer.description.s = "notification_peer";
        not_peer.description.len = 17;
        not_peer.peer_id.s = "notification_peer";
@@ -165,11 +166,27 @@ error:
        return -1;
 }
 
+
+int run_init_callbacks() {
+       dmq_peer_t* crt;
+
+       crt = peer_list->peers;
+       while(crt) {
+               if (crt->init_callback) {
+                       crt->init_callback();
+               }
+               crt = crt->next;
+       }
+       return 0;
+}
+
+
 /**
  * @brief dmq notification callback
  */
 int dmq_notification_callback(struct sip_msg* msg, peer_reponse_t* resp)
 {
+       static int firstrun = 1;
        int nodes_recv;
        str* response_body = NULL;
        int maxforwards = 0;
@@ -206,6 +223,10 @@ int dmq_notification_callback(struct sip_msg* msg, 
peer_reponse_t* resp)
                                &notification_callback, maxforwards, 
&notification_content_type);
        }
        pkg_free(response_body);
+       if (firstrun) {
+               run_init_callbacks();
+               firstrun = 0;
+       }
        return 0;
 error:
        return -1;
diff --git a/modules/dmq/peer.h b/modules/dmq/peer.h
index 7ce4434..bd1a15d 100644
--- a/modules/dmq/peer.h
+++ b/modules/dmq/peer.h
@@ -42,11 +42,13 @@ typedef struct peer_response {
 } peer_reponse_t;
 
 typedef int(*peer_callback_t)(struct sip_msg*, peer_reponse_t* resp);
+typedef int(*init_callback_t)();
 
 typedef struct dmq_peer {
        str peer_id;
        str description;
        peer_callback_t callback;
+       init_callback_t init_callback;
        struct dmq_peer* next;
 } dmq_peer_t;
 
diff --git a/modules/htable/ht_dmq.c b/modules/htable/ht_dmq.c
index 284c3dc..21755a7 100644
--- a/modules/htable/ht_dmq.c
+++ b/modules/htable/ht_dmq.c
@@ -59,6 +59,7 @@ int ht_dmq_initialize()
         }
 
        not_peer.callback = ht_dmq_handle_msg;
+       not_peer.init_callback = NULL;
        not_peer.description.s = "htable";
        not_peer.description.len = 6;
        not_peer.peer_id.s = "htable";


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to