ソースを参照

rls: exported functions to kemi framework

Daniel-Constantin Mierla 7 年 前
コミット
90bd1b06f9

+ 6 - 1
src/modules/rls/resource_notify.c

@@ -524,7 +524,7 @@ error:
 	return -1;
 }
 
-int rls_handle_notify(struct sip_msg* msg, char* c1, char* c2)
+int ki_rls_handle_notify(sip_msg_t* msg)
 {
 	struct to_body *pto, TO = {0}, *pfrom = NULL;
 	str body= {0, 0};
@@ -883,6 +883,11 @@ error:
 	return -1;
 }
 
+int w_rls_handle_notify(struct sip_msg* msg, char* c1, char* c2)
+{
+	return ki_rls_handle_notify(msg);
+}
+
 #define EXTRACT_STRING(strng, chars)\
 	do {\
 		strng.s = (char *) chars;\

+ 3 - 1
src/modules/rls/resource_notify.h

@@ -26,8 +26,10 @@
 
 #include "../../core/parser/msg_parser.h"
 
-int rls_handle_notify(struct sip_msg* msg, char* c1, char* c2);
+int w_rls_handle_notify(struct sip_msg* msg, char* c1, char* c2);
 void timer_send_notify(unsigned int ticks,void *param);
 void rls_presentity_clean(unsigned int ticks,void *param);
 
+int ki_rls_handle_notify(sip_msg_t* msg);
+
 #endif

+ 43 - 6
src/modules/rls/rls.c

@@ -42,6 +42,7 @@
 #include "../../core/mem/shm_mem.h"
 #include "../../core/rpc.h"
 #include "../../core/rpc_lookup.h"
+#include "../../core/kemi.h"
 #include "../../modules/tm/tm_load.h"
 #include "../../modules/sl/sl.h"
 #include "../presence/bind_presence.h"
@@ -208,13 +209,13 @@ int fixup_update_subs(void** param, int param_no);
 
 static cmd_export_t cmds[]=
 {
-	{"rls_handle_subscribe",  (cmd_function)rls_handle_subscribe0,  0,
+	{"rls_handle_subscribe",  (cmd_function)w_rls_handle_subscribe0,  0,
 		0, 0, REQUEST_ROUTE},
-	{"rls_handle_subscribe",  (cmd_function)w_rls_handle_subscribe, 1,
+	{"rls_handle_subscribe",  (cmd_function)w_rls_handle_subscribe1, 1,
 		fixup_spve_null, 0, REQUEST_ROUTE},
-	{"rls_handle_notify",     (cmd_function)rls_handle_notify,      0,
+	{"rls_handle_notify",     (cmd_function)w_rls_handle_notify,      0,
 		0, 0, REQUEST_ROUTE},
-	{"rls_update_subs",       (cmd_function)rls_update_subs,	2,
+	{"rls_update_subs",       (cmd_function)w_rls_update_subs,	2,
 		fixup_update_subs, 0, ANY_ROUTE},
 	{"bind_rls",              (cmd_function)bind_rls,		1,
 		0, 0, 0},
@@ -1059,8 +1060,8 @@ int bind_rls(struct rls_binds *pxb)
 	}
 
 	pxb->rls_handle_subscribe = rls_handle_subscribe;
-	pxb->rls_handle_subscribe0 = rls_handle_subscribe0;
-	pxb->rls_handle_notify = rls_handle_notify;
+	pxb->rls_handle_subscribe0 = ki_rls_handle_subscribe;
+	pxb->rls_handle_notify = w_rls_handle_notify;
 	return 0;
 }
 
@@ -1091,3 +1092,39 @@ static int rls_rpc_init(void)
 	}
 	return 0;
 }
+
+/**
+ *
+ */
+/* clang-format off */
+static sr_kemi_t sr_kemi_rls_exports[] = {
+	{ str_init("rls"), str_init("handle_subscribe"),
+		SR_KEMIP_INT, ki_rls_handle_subscribe,
+		{ SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("rls"), str_init("handle_subscribe_uri"),
+		SR_KEMIP_INT, ki_rls_handle_subscribe_uri,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("rls"), str_init("handle_notify"),
+		SR_KEMIP_INT, ki_rls_handle_notify,
+		{ SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("rls"), str_init("update_subs"),
+		SR_KEMIP_INT, ki_rls_update_subs,
+		{ SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+
+	{ {0, 0}, {0, 0}, 0, NULL, { 0, 0, 0, 0, 0, 0 } }
+};
+/* clang-format on */
+
+int mod_register(char *path, int *dlflags, void *p1, void *p2)
+{
+	sr_kemi_modules_add(sr_kemi_rls_exports);
+	return 0;
+}

+ 51 - 32
src/modules/rls/subscribe.c

@@ -424,7 +424,7 @@ int reply_489(struct sip_msg * msg)
 /**
  * handle RLS subscription
  */
-int rls_handle_subscribe0(struct sip_msg* msg)
+int ki_rls_handle_subscribe(struct sip_msg* msg)
 {
 	struct to_body *pfrom;
 
@@ -444,24 +444,37 @@ int rls_handle_subscribe0(struct sip_msg* msg)
 			pfrom->parsed_uri.host);
 }
 
-int w_rls_handle_subscribe(struct sip_msg* msg, char* watcher_uri)
+/**
+ * handle RLS subscription
+ */
+int w_rls_handle_subscribe0(struct sip_msg* msg, char *p1, char *p2)
+{
+	return ki_rls_handle_subscribe(msg);
+}
+
+int ki_rls_handle_subscribe_uri(sip_msg_t* msg, str *wuri)
 {
-	str wuri;
 	struct sip_uri parsed_wuri;
 
-	if (fixup_get_svalue(msg, (gparam_p)watcher_uri, &wuri) != 0)
+	if (parse_uri(wuri->s, wuri->len, &parsed_wuri) < 0)
 	{
-		LM_ERR("invalid uri parameter\n");
+		LM_ERR("failed to parse watcher URI\n");
 		return -1;
 	}
 
-	if (parse_uri(wuri.s, wuri.len, &parsed_wuri) < 0)
+	return rls_handle_subscribe(msg, parsed_wuri.user, parsed_wuri.host);
+}
+
+int w_rls_handle_subscribe(struct sip_msg* msg, char* watcher_uri)
+{
+	str wuri;
+
+	if (fixup_get_svalue(msg, (gparam_p)watcher_uri, &wuri) != 0)
 	{
-		LM_ERR("failed to parse watcher URI\n");
+		LM_ERR("invalid uri parameter\n");
 		return -1;
 	}
-
-	return rls_handle_subscribe(msg, parsed_wuri.user, parsed_wuri.host);
+	return ki_rls_handle_subscribe_uri(msg, &wuri);
 }
 
 int rls_handle_subscribe(struct sip_msg* msg, str watcher_user, str watcher_domain)
@@ -1201,48 +1214,34 @@ done:
 	pkg_free(subs_copy);
 }
 
-int rls_update_subs(struct sip_msg *msg, char *puri, char *pevent)
+int ki_rls_update_subs(struct sip_msg *msg, str *uri, str *event)
 {
-	str uri;
-	str event;
 	struct sip_uri parsed_uri;
 	event_t e;
 	int i;
 
-	if (fixup_get_svalue(msg, (gparam_p)puri, &uri) != 0)
-	{
-		LM_ERR("invalid uri parameter\n");
-		return -1;
-	}
-
-	if (fixup_get_svalue(msg, (gparam_p)pevent, &event) != 0)
-	{
-		LM_ERR("invalid event parameter\n");
-		return -1;
-	}
-
-	if (event_parser(event.s, event.len, &e) < 0)
+	if (event_parser(event->s, event->len, &e) < 0)
 	{
-		LM_ERR("while parsing event: %.*s\n", event.len, event.s);
+		LM_ERR("while parsing event: %.*s\n", event->len, event->s);
 		return -1;
 	}
 
 	if (e.type & EVENT_OTHER)
 	{
-		LM_ERR("unrecognised event: %.*s\n", event.len, event.s);
+		LM_ERR("unrecognised event: %.*s\n", event->len, event->s);
 		return -1;
 	}
 
 	if (!(e.type & rls_events))
 	{
-		LM_ERR("event not supported by RLS: %.*s\n", event.len,
-				event.s);
+		LM_ERR("event not supported by RLS: %.*s\n", event->len,
+				event->s);
 		return -1;
 	}
 
-	if (parse_uri(uri.s, uri.len, &parsed_uri) < 0)
+	if (parse_uri(uri->s, uri->len, &parsed_uri) < 0)
 	{
-		LM_ERR("bad uri: %.*s\n", uri.len, uri.s);
+		LM_ERR("bad uri: %.*s\n", uri->len, uri->s);
 		return -1;
 	}
 
@@ -1254,7 +1253,7 @@ int rls_update_subs(struct sip_msg *msg, char *puri, char *pevent)
 	{
 		int ret;
 		lock_get(rls_update_subs_lock);
-		ret = (update_all_subs_rlsdb(&parsed_uri.user, &parsed_uri.host, &event));
+		ret = (update_all_subs_rlsdb(&parsed_uri.user, &parsed_uri.host, event));
 		lock_release(rls_update_subs_lock);
 		return ret;
 	}
@@ -1304,3 +1303,23 @@ int rls_update_subs(struct sip_msg *msg, char *puri, char *pevent)
 
 	return 1;
 }
+
+int w_rls_update_subs(struct sip_msg *msg, char *puri, char *pevent)
+{
+	str uri;
+	str event;
+
+	if (fixup_get_svalue(msg, (gparam_p)puri, &uri) != 0)
+	{
+		LM_ERR("invalid uri parameter\n");
+		return -1;
+	}
+
+	if (fixup_get_svalue(msg, (gparam_p)pevent, &event) != 0)
+	{
+		LM_ERR("invalid event parameter\n");
+		return -1;
+	}
+
+	return ki_rls_update_subs(msg, &uri, &event);
+}

+ 7 - 2
src/modules/rls/subscribe.h

@@ -27,9 +27,14 @@
 #include <libxml/parser.h>
 #include "../../core/parser/msg_parser.h"
 
-int rls_handle_subscribe0(struct sip_msg* msg);
-int w_rls_handle_subscribe(struct sip_msg* msg, char* watcher_uri);
+int w_rls_handle_subscribe0(sip_msg_t* msg, char *p1, char *p2);
+int w_rls_handle_subscribe1(sip_msg_t* msg, char* watcher_uri, char *p2);
 int rls_handle_subscribe(struct sip_msg* msg, str watcher_user,
 		str watcher_domain);
+int w_rls_update_subs(struct sip_msg *msg, char *puri, char *pevent);
+
+int ki_rls_handle_subscribe(struct sip_msg* msg);
+int ki_rls_handle_subscribe_uri(sip_msg_t* msg, str *wuri);
+int ki_rls_update_subs(struct sip_msg *msg, str *uri, str *event);
 
 #endif