[sr-dev] git:master: dispatcher(k): exported inter-module API

Daniel-Constantin Mierla miconda at gmail.com
Sat Nov 27 00:05:01 CET 2010


Module: sip-router
Branch: master
Commit: 86e03df9b1dbac5be70747bcd9f57a97fe5256c7
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=86e03df9b1dbac5be70747bcd9f57a97fe5256c7

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Sat Nov 27 00:04:17 2010 +0100

dispatcher(k): exported inter-module API

---

 modules_k/dispatcher/api.h        |   75 +++++++++++++++++++++++++++++++++++++
 modules_k/dispatcher/dispatch.c   |   13 ++++++
 modules_k/dispatcher/dispatcher.c |    3 +
 3 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/modules_k/dispatcher/api.h b/modules_k/dispatcher/api.h
new file mode 100644
index 0000000..7171b0c
--- /dev/null
+++ b/modules_k/dispatcher/api.h
@@ -0,0 +1,75 @@
+/**
+ * $Id$
+ *
+ * dispatcher module
+ * 
+ * Copyright (C) 2004-2006 FhG Fokus
+ *
+ * This file is part of Kamailio, a free SIP server.
+ *
+ * Kamailio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version
+ *
+ * Kamailio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License 
+ * along with this program; if not, write to the Free Software 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+/*! \file
+ * \ingroup dispatcher
+ * \brief Dispatcher :: API
+ */
+
+#ifndef _DISPATCHER_API_H_
+#define _DISPATCHER_API_H_
+
+#include "../../sr_module.h"
+
+typedef int (*ds_select_dst_f)(struct sip_msg *msg, int set,
+			int alg, int mode);
+typedef int (*ds_next_dst_f)(struct sip_msg *msg, int mode);
+typedef int (*ds_mark_dst_f)(struct sip_msg *msg, int mode);
+
+typedef int (*ds_is_from_list_f)(struct sip_msg *_m, int group);
+
+typedef struct dispatcher_api {
+	ds_select_dst_f   select;
+	ds_next_dst_f     next;
+	ds_mark_dst_f     mark;
+	ds_is_from_list_f is_from;
+} dispatcher_api_t;
+
+typedef int (*bind_dispatcher_f)(dispatcher_api_t* api);
+int bind_dispatcher(dispatcher_api_t* api);
+
+/**
+ * @brief Load the dispatcher API
+ */
+static inline int dispatcher_load_api(dispatcher_api_t *api)
+{
+	bind_dispatcher_f binddispatcher;
+
+	binddispatcher = (bind_dispatcher_f)find_export("bind_dispatcher", 0, 0);
+	if(binddispatcher == 0) {
+		LM_ERR("cannot find bind_dispatcher\n");
+		return -1;
+	}
+	if(binddispatcher(api)<0)
+	{
+		LM_ERR("cannot bind dispatcher api\n");
+		return -1;
+	}
+	return 0;
+}
+
+
+#endif
+
diff --git a/modules_k/dispatcher/dispatch.c b/modules_k/dispatcher/dispatch.c
index 46b7b03..bcd7f7c 100644
--- a/modules_k/dispatcher/dispatch.c
+++ b/modules_k/dispatcher/dispatch.c
@@ -71,6 +71,7 @@
 #include "../../str.h"
 
 #include "ds_ht.h"
+#include "api.h"
 #include "dispatch.h"
 
 #define DS_TABLE_VERSION	1
@@ -2374,3 +2375,15 @@ void ds_ht_timer(unsigned int ticks, void *param)
 	return;
 }
 
+int bind_dispatcher(dispatcher_api_t* api)
+{
+	if (!api) {
+		ERR("Invalid parameter value\n");
+		return -1;
+	}
+	api->select  = ds_select_dst;
+	api->next    = ds_next_dst;
+	api->mark    = ds_mark_dst;
+	api->is_from = ds_is_from_list;
+	return 0;
+}
diff --git a/modules_k/dispatcher/dispatcher.c b/modules_k/dispatcher/dispatcher.c
index 59fe0bb..ab412a6 100644
--- a/modules_k/dispatcher/dispatcher.c
+++ b/modules_k/dispatcher/dispatcher.c
@@ -66,6 +66,7 @@
 #include "ds_ht.h"
 #include "dispatch.h"
 #include "config.h"
+#include "api.h"
 
 MODULE_VERSION
 
@@ -180,6 +181,8 @@ static cmd_export_t cmds[]={
 		0, 0, ANY_ROUTE},
 	{"ds_load_update",   (cmd_function)w_ds_load_update,  0,
 		0, 0, ANY_ROUTE},
+	{"bind_dispatcher",   (cmd_function)bind_dispatcher,  0,
+		0, 0, 0},
 	{0,0,0,0,0,0}
 };
 




More information about the sr-dev mailing list