Quellcode durchsuchen

evapi: added evapi_close() function

- close client connection from cfg file
Daniel-Constantin Mierla vor 11 Jahren
Ursprung
Commit
5ef20abd1f
3 geänderte Dateien mit 39 neuen und 4 gelöschten Zeilen
  1. 18 1
      modules/evapi/evapi_dispatch.c
  2. 1 1
      modules/evapi/evapi_dispatch.h
  3. 20 2
      modules/evapi/evapi_mod.c

+ 18 - 1
modules/evapi/evapi_dispatch.c

@@ -129,7 +129,7 @@ int evapi_run_cfg_route(evapi_env_t *evenv, int rt)
 /**
  *
  */
-int evapi_cfg_close_connection(int cidx)
+int evapi_close_connection(int cidx)
 {
 	if(cidx<0 || cidx>=EVAPI_MAX_CLIENTS)
 		return -1;
@@ -143,6 +143,23 @@ int evapi_cfg_close_connection(int cidx)
 	return -2;
 }
 
+/**
+ *
+ */
+int evapi_cfg_close(sip_msg_t *msg)
+{
+	evapi_env_t *evenv;
+
+	if(msg==NULL)
+		return -1;
+
+	evenv = (evapi_env_t*)msg->date;
+
+	if(evenv==NULL || evenv->conidx<0 || evenv->conidx>=EVAPI_MAX_CLIENTS)
+		return -1;
+	return evapi_close_connection(evenv->conidx);
+}
+
 /**
  *
  */

+ 1 - 1
modules/evapi/evapi_dispatch.h

@@ -48,6 +48,6 @@ int pv_set_evapi(sip_msg_t *msg, pv_param_t *param, int op,
 #define evapi_set_msg_env(_msg, _evenv) do { _msg->date=(hdr_field_t*)_evenv; } while(0)
 #define evapi_get_msg_env(_msg) ((evapi_env_t*)_msg->date)
 
-int evapi_cfg_close_connection(int cidx);
+int evapi_cfg_close(sip_msg_t *msg);
 
 #endif

+ 20 - 2
modules/evapi/evapi_mod.c

@@ -55,8 +55,9 @@ static int  mod_init(void);
 static int  child_init(int);
 static void mod_destroy(void);
 
-static int w_evapi_relay(struct sip_msg* msg, char* evdata, char* p2);
-static int w_evapi_async_relay(struct sip_msg* msg, char* evdata, char* p2);
+static int w_evapi_relay(sip_msg_t* msg, char* evdata, char* p2);
+static int w_evapi_async_relay(sip_msg_t* msg, char* evdata, char* p2);
+static int w_evapi_close(sip_msg_t* msg, char* p1, char* p2);
 static int fixup_evapi_relay(void** param, int param_no);
 
 static cmd_export_t cmds[]={
@@ -64,6 +65,8 @@ static cmd_export_t cmds[]={
 		0, ANY_ROUTE},
 	{"evapi_async_relay", (cmd_function)w_evapi_async_relay, 1, fixup_evapi_relay,
 		0, REQUEST_ROUTE},
+	{"evapi_close",       (cmd_function)w_evapi_close,       1, NULL,
+		0, ANY_ROUTE},
 	{0, 0, 0, 0, 0, 0}
 };
 
@@ -291,7 +294,22 @@ static int w_evapi_async_relay(sip_msg_t *msg, char *evdata, char *p2)
 	return 1;
 }
 
+/**
+ *
+ */
 static int fixup_evapi_relay(void** param, int param_no)
 {
 	return fixup_spve_null(param, param_no);
 }
+
+/**
+ *
+ */
+static int w_evapi_close(sip_msg_t* msg, char* p1, char* p2)
+{
+	int ret;
+	ret = evapi_cfg_close(msg);
+	if(ret>=0)
+		return ret+1;
+	return ret;
+}