[sr-dev] git:master: sl(k): implement ser-like SL api

Daniel-Constantin Mierla miconda at gmail.com
Fri Aug 28 10:51:13 CEST 2009


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Fri Aug 28 11:40:35 2009 +0300

sl(k): implement ser-like SL api

- SER modules dependent of sl module can work now with k-sl
- exported sl_send_reply() ser function takes the reason as charz while k version is str
- conflict was resolved since SER does the export via sl_api_t structure
  and bind_sl() function, kamailio does via sl_binds structure and
  load_sl() function - both are now included in k-sl module

---

 modules_k/sl/sl.c       |   24 ++++++++++++++++++++++--
 modules_k/sl/sl.h       |   21 +++------------------
 modules_k/sl/sl_api.h   |    4 ++--
 modules_k/sl/sl_funcs.c |   26 ++++++++++++++++++++++++++
 modules_k/sl/sl_funcs.h |    1 +
 5 files changed, 54 insertions(+), 22 deletions(-)

diff --git a/modules_k/sl/sl.c b/modules_k/sl/sl.c
index 2c863a3..6fbf7b6 100644
--- a/modules_k/sl/sl.c
+++ b/modules_k/sl/sl.c
@@ -62,6 +62,7 @@
 
 #include "sl_funcs.h"
 #include "sl_api.h"
+#include "sl.h"
 #include "sl_cb.h"
 
 MODULE_VERSION
@@ -70,6 +71,7 @@ MODULE_VERSION
 static int w_sl_send_reply(struct sip_msg* msg, char* str1, char* str2);
 static int w_send_reply(struct sip_msg* msg, char* str1, char* str2);
 static int w_sl_reply_error(struct sip_msg* msg, char* str1, char* str2);
+static int bind_sl(sl_api_t* api);
 static int fixup_sl_send_reply(void** param, int param_no);
 static int mod_init(void);
 static void mod_destroy(void);
@@ -105,6 +107,8 @@ static cmd_export_t cmds[]={
 	{"load_sl",        (cmd_function)load_sl,
 		0,  0, 0,
 		0},
+	{"bind_sl",        (cmd_function)bind_sl,          0, 0, 0, 0},
+	{"api_sl_reply",   (cmd_function)sl_send_reply_sz, 2, 0, 0, 0},
 	{0,0,0,0,0,0}
 };
 
@@ -378,9 +382,25 @@ int load_sl( struct sl_binds *slb)
 	slb->reply      = sl_send_reply;
 	slb->reply_dlg  = sl_send_reply_dlg;
 	slb->sl_get_reply_totag = sl_get_reply_totag;
-	slb->send_reply = send_reply;
-	slb->get_reply_totag = get_reply_totag;
+	slb->send_reply         = send_reply;
+	slb->get_reply_totag    = get_reply_totag;
 
 
 	return 1;
 }
+
+static int bind_sl(sl_api_t* api)
+{
+	if (!api) {
+		ERR("Invalid parameter value\n");
+		return -1;
+	}
+
+	api->reply = (sl_send_reply_f)find_export("api_sl_reply", 2, 0);
+	if (api->reply == 0) {
+		ERR("Can't bind sl_reply functionn");
+		return -1;
+	}
+
+	return 0;
+}
diff --git a/modules_k/sl/sl.h b/modules_k/sl/sl.h
index 3cb70d0..90c5cee 100644
--- a/modules_k/sl/sl.h
+++ b/modules_k/sl/sl.h
@@ -31,24 +31,9 @@
  * - Module: \ref sl
  */
 
-#ifndef _SL_H_
-#define _SL_H_
-
-#include "../../lib/kcore/statistics.h"
-
-/* module parameter */
-extern int sl_enable_stats;
-
-/* statistic variables */
-extern stat_var *tx_1xx_rpls;
-extern stat_var *tx_2xx_rpls;
-extern stat_var *tx_3xx_rpls;
-extern stat_var *tx_4xx_rpls;
-extern stat_var *tx_5xx_rpls;
-extern stat_var *tx_6xx_rpls;
-extern stat_var *sent_rpls;
-extern stat_var *sent_err_rpls;
-extern stat_var *rcv_acks;
+#ifndef _SL_K_H_
+#define _SL_K_H_
 
+#include "../../modules_s/sl/sl.h"
 
 #endif
diff --git a/modules_k/sl/sl_api.h b/modules_k/sl/sl_api.h
index a7b8ebe..fc34e46 100644
--- a/modules_k/sl/sl_api.h
+++ b/modules_k/sl/sl_api.h
@@ -36,13 +36,13 @@
 typedef int (*get_reply_totag_f)(struct sip_msg *msg, str *tag);
 typedef int (*send_reply_f)(struct sip_msg *msg, int code, str *reason);
 typedef int (*sl_get_reply_totag_f)(struct sip_msg *msg, str *tag);
-typedef int (*sl_send_reply_f)(struct sip_msg *msg, int code, str *reason);
+typedef int (*sl_send_reply_str_f)(struct sip_msg *msg, int code, str *reason);
 typedef int (*sl_send_reply_dlg_f)(struct sip_msg *msg, int code, str *reason,
 		str *tag);
 
 /*! SL API bindings */
 struct sl_binds {
-	sl_send_reply_f reply;
+	sl_send_reply_str_f reply;
 	sl_send_reply_dlg_f reply_dlg;
 	sl_get_reply_totag_f sl_get_reply_totag;
 	send_reply_f send_reply;
diff --git a/modules_k/sl/sl_funcs.c b/modules_k/sl/sl_funcs.c
index 9a1df21..f93e059 100644
--- a/modules_k/sl/sl_funcs.c
+++ b/modules_k/sl/sl_funcs.c
@@ -67,6 +67,23 @@
 #include "sl_cb.h"
 #include "../../usr_avp.h"
 #include <string.h>
+#include "../../lib/kcore/statistics.h"
+
+/* module parameter */
+extern int sl_enable_stats;
+
+/* statistic variables */
+extern stat_var *tx_1xx_rpls;
+extern stat_var *tx_2xx_rpls;
+extern stat_var *tx_3xx_rpls;
+extern stat_var *tx_4xx_rpls;
+extern stat_var *tx_5xx_rpls;
+extern stat_var *tx_6xx_rpls;
+extern stat_var *sent_rpls;
+extern stat_var *sent_err_rpls;
+extern stat_var *rcv_acks;
+
+
 /* to-tag including pre-calculated and fixed part */
 static char           sl_tag_buf[TOTAG_VALUE_LEN];
 static str            sl_tag = {sl_tag_buf,TOTAG_VALUE_LEN};
@@ -256,6 +273,15 @@ int sl_send_reply(struct sip_msg *msg ,int code, str *text)
 	return sl_send_reply_helper(msg, code, text, 0);
 }
 
+/*! small wrapper around sl_send_reply_helper */
+int sl_send_reply_sz(struct sip_msg *msg ,int code, char *text)
+{
+	str r;
+	r.s = text;
+	r.len = strlen(text);
+	return sl_send_reply_helper(msg, code, &r, 0);
+}
+
 
 /*! small wrapper around sl_send_reply_helper */
 int sl_send_reply_dlg(struct sip_msg *msg ,int code, str *text, str *tag)
diff --git a/modules_k/sl/sl_funcs.h b/modules_k/sl/sl_funcs.h
index 3f5f13f..f6124a7 100644
--- a/modules_k/sl/sl_funcs.h
+++ b/modules_k/sl/sl_funcs.h
@@ -39,6 +39,7 @@
 int sl_startup(void);
 int sl_shutdown(void);
 int sl_send_reply( struct sip_msg *msg, int code, str *reason);
+int sl_send_reply_sz( struct sip_msg *msg, int code, char *reason);
 int sl_send_reply_dlg( struct sip_msg *msg, int code, str *reason, str *tag);
 int sl_filter_ACK( struct sip_msg *msg, unsigned int flags, void *foo );
 int sl_reply_error( struct sip_msg *msg );




More information about the sr-dev mailing list