Module: sip-router Branch: master Commit: 91c1f6c8b9731d0c6d760e93cd5477f7b4cf938a URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=91c1f6c8...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@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 );