[sr-dev] git:master:dfbd4e12: lwsc: added inter-module api

Daniel-Constantin Mierla miconda at gmail.com
Wed Mar 24 17:42:37 CET 2021


Module: kamailio
Branch: master
Commit: dfbd4e12d6c4b3c9664d58ffbc479de9ea68f03e
URL: https://github.com/kamailio/kamailio/commit/dfbd4e12d6c4b3c9664d58ffbc479de9ea68f03e

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2021-03-24T17:42:26+01:00

lwsc: added inter-module api

- exported lwsc request function to send data to a ws target and proto,
then wait for response data for a specific time interval

---

Added: src/modules/lwsc/api.h
Modified: src/modules/lwsc/lwsc_mod.c

---

Diff:  https://github.com/kamailio/kamailio/commit/dfbd4e12d6c4b3c9664d58ffbc479de9ea68f03e.diff
Patch: https://github.com/kamailio/kamailio/commit/dfbd4e12d6c4b3c9664d58ffbc479de9ea68f03e.patch

---

diff --git a/src/modules/lwsc/api.h b/src/modules/lwsc/api.h
new file mode 100644
index 0000000000..c76fb8c6b1
--- /dev/null
+++ b/src/modules/lwsc/api.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2021 Daniel-Constantin Mierla (asipto.com)
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/**
+ * @file
+ * @brief LWSC - API definitions
+ * @ingroup lwsc
+ * Module: @ref lwsc
+ */
+
+#ifndef _LWSC_API_H_
+#define _LWSC_API_H_
+
+#include "../../core/str.h"
+
+typedef int (*lwsc_api_request_f)(str *wsurl, str *wsproto, str *sdata,
+		str *rdata, int rtimeout);
+
+/**
+ * @brief Stateless (sl) API structure
+ */
+typedef struct lwsc_api {
+	lwsc_api_request_f  request; /* send and receice data */
+} lwsc_api_t;
+
+typedef int (*bind_lwsc_f)(lwsc_api_t* api);
+
+/**
+ * @brief Load the LWSX API
+ */
+static inline int lwsc_load_api(lwsc_api_t *lwscb)
+{
+	bind_lwsc_f bindlwsc;
+
+	bindlwsc = (bind_lwsc_f)find_export("bind_lwsc", 0, 0);
+	if ( bindlwsc == 0) {
+		LM_ERR("cannot find bind_lwsc exported function\n");
+		return -1;
+	}
+	if (bindlwsc(lwscb)==-1)
+	{
+		LM_ERR("cannot bind lwsc api\n");
+		return -1;
+	}
+	return 0;
+}
+
+#endif
diff --git a/src/modules/lwsc/lwsc_mod.c b/src/modules/lwsc/lwsc_mod.c
index 8e5e068bdd..ada873f215 100644
--- a/src/modules/lwsc/lwsc_mod.c
+++ b/src/modules/lwsc/lwsc_mod.c
@@ -36,12 +36,15 @@
 #include "../../core/kemi.h"
 #include "../../core/parser/parse_param.h"
 
+#include "api.h"
+
 
 MODULE_VERSION
 
 static int  mod_init(void);
 static int  child_init(int);
 static void mod_destroy(void);
+static int bind_lwsc(lwsc_api_t* api);
 
 static int w_lwsc_request(sip_msg_t* msg, char* pwsurl, char* pdata);
 static int w_lwsc_notify(sip_msg_t* msg, char* pwsurl, char* pdata);
@@ -57,6 +60,8 @@ static cmd_export_t cmds[]={
 		fixup_spve_all, 0, ANY_ROUTE},
 	{"lwsc_notify", (cmd_function)w_lwsc_notify, 2,
 		fixup_spve_all, 0, ANY_ROUTE},
+	{"bind_lwsc",   (cmd_function)bind_lwsc, 0,
+		0, 0, 0},
 	{0, 0, 0, 0, 0, 0}
 };
 
@@ -759,6 +764,20 @@ static int lwsc_pv_parse_name(pv_spec_t *sp, str *in)
 	return 0;
 }
 
+/**
+ * @brief bind functions to LWSC API structure
+ */
+static int bind_lwsc(lwsc_api_t* api)
+{
+	if (!api) {
+		LM_ERR("invalid parameter value\n");
+		return -1;
+	}
+	api->request = lwsc_api_request;
+
+	return 0;
+}
+
 /**
  *
  */




More information about the sr-dev mailing list