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

Author: Stefan Mititelu <stefan-cristian.mitit...@1and1.ro>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2023-05-09T20:24:13+02:00

tls: Add rpc function to kill session by id

Note that it may take few seconds for session to be killed.

---

Modified: src/modules/tls/doc/rpc.xml
Modified: src/modules/tls/tls_rpc.c

---

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

---

diff --git a/src/modules/tls/doc/rpc.xml b/src/modules/tls/doc/rpc.xml
index 30c67d5c8fe..495fc7b31c2 100644
--- a/src/modules/tls/doc/rpc.xml
+++ b/src/modules/tls/doc/rpc.xml
@@ -50,6 +50,18 @@
                         </para></listitem>
                 </itemizedlist>
        </section>
+       <section id="tls.r.tls.kill">
+               <title><function>tls.kill</function></title>
+               <para>
+                       Kill a TLS session by id.
+               </para>
+               <para>Parameters: </para>
+                <itemizedlist>
+                        <listitem><para>
+                                None.
+                        </para></listitem>
+                </itemizedlist>
+       </section>
        <section id="tls.r.tls.reload">
                <title><function>tls.reload</function></title>
                <para>
diff --git a/src/modules/tls/tls_rpc.c b/src/modules/tls/tls_rpc.c
index 566191a8760..c55f45b72d7 100644
--- a/src/modules/tls/tls_rpc.c
+++ b/src/modules/tls/tls_rpc.c
@@ -275,7 +275,41 @@ static void tls_options(rpc_t* rpc, void* c)
                );
 }
 
+static const char* tls_kill_doc[2] = {
+       "Kills a tls session, identified via id.",
+       0 };
+
+static void tls_kill(rpc_t* rpc, void* c)
+{
+       struct tcp_connection* con;
+       int i, kill_id = 0;
+
+       if (rpc->scan(c, "d", &kill_id) < 0) {
+               /* Reply is set automatically by scan upon failure,
+               * no need to do anything here
+               */
+               return;
+       }
 
+       TCPCONN_LOCK;
+       for(i = 0; i < TCP_ID_HASH_SIZE; i++) {
+               for (con = tcpconn_id_hash[i]; con; con = con->id_next) {
+                       if (con->rcv.proto != PROTO_TLS) continue;
+                       if (con->id == kill_id) {
+                               con->state = -2;
+                               con->timeout = get_ticks_raw();
+
+                               TCPCONN_UNLOCK;
+
+                               rpc->add(c, "s", "OK");
+                               return;
+                       }
+               }
+       }
+       TCPCONN_UNLOCK;
+
+       rpc->add(c, "s", "TLS connection id not found");
+}
 
 
 rpc_export_t tls_rpc[] = {
@@ -283,5 +317,6 @@ rpc_export_t tls_rpc[] = {
        {"tls.list",   tls_list,   tls_list_doc,   RET_ARRAY},
        {"tls.info",   tls_info,   tls_info_doc, 0},
        {"tls.options",tls_options, tls_options_doc, 0},
+       {"tls.kill",   tls_kill, tls_kill_doc, 0},
        {0, 0, 0, 0}
 };

_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to