Module: kamailio Branch: master Commit: dfbd4e12d6c4b3c9664d58ffbc479de9ea68f03e URL: https://github.com/kamailio/kamailio/commit/dfbd4e12d6c4b3c9664d58ffbc479de9...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@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/dfbd4e12d6c4b3c9664d58ffbc479de9... Patch: https://github.com/kamailio/kamailio/commit/dfbd4e12d6c4b3c9664d58ffbc479de9...
---
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; +} + /** * */