Module: kamailio Branch: master Commit: 79eb690e4838aa270983e3326779068ee8bbda80 URL: https://github.com/kamailio/kamailio/commit/79eb690e4838aa270983e3326779068ee8bbda80
Author: Daniel-Constantin Mierla <mico...@gmail.com> Committer: Daniel-Constantin Mierla <mico...@gmail.com> Date: 2025-03-19T06:55:20+01:00 tcpops: function to check if a connection is alive by remote addr:port --- Modified: src/modules/tcpops/tcpops_mod.c --- Diff: https://github.com/kamailio/kamailio/commit/79eb690e4838aa270983e3326779068ee8bbda80.diff Patch: https://github.com/kamailio/kamailio/commit/79eb690e4838aa270983e3326779068ee8bbda80.patch --- diff --git a/src/modules/tcpops/tcpops_mod.c b/src/modules/tcpops/tcpops_mod.c index a89a18992aa..a8c9e940d85 100644 --- a/src/modules/tcpops/tcpops_mod.c +++ b/src/modules/tcpops/tcpops_mod.c @@ -61,6 +61,7 @@ static int w_tcpops_enable_closed_event1(sip_msg_t *msg, char *con, char *p2); static int w_tcpops_enable_closed_event0(sip_msg_t *msg, char *p1, char *p2); static int w_tcp_conid_state(sip_msg_t *msg, char *con, char *p2); static int w_tcp_conid_alive(sip_msg_t *msg, char *con, char *p2); +static int w_tcp_con_alive(sip_msg_t *msg, char *paddr, char *p2); static int w_tcp_get_conid(sip_msg_t *msg, char *paddr, char *pvn); static int w_tcp_set_otcpid(sip_msg_t *msg, char *conid, char *p2); static int w_tcp_set_otcpid_flag(sip_msg_t *msg, char *mode, char *p2); @@ -106,6 +107,8 @@ static cmd_export_t cmds[] = { fixup_free_spve_pvar, ANY_ROUTE}, {"tcp_conid_alive", (cmd_function)w_tcp_conid_alive, 1, fixup_igp_all, fixup_free_igp_all, ANY_ROUTE}, + {"tcp_con_alive", (cmd_function)w_tcp_con_alive, 1, fixup_spve_null, + fixup_free_spve_null, ANY_ROUTE}, {"tcp_set_otcpid", (cmd_function)w_tcp_set_otcpid, 1, fixup_igp_all, fixup_free_igp_all, ANY_ROUTE}, {"tcp_set_otcpid_flag", (cmd_function)w_tcp_set_otcpid_flag, 1, @@ -546,7 +549,7 @@ static int ki_tcp_get_conid_helper(sip_msg_t *msg, str *saddr, pv_spec_t *pvs) int port; pv_value_t val; - if(pvs->setf == NULL) { + if(pvs != NULL && pvs->setf == NULL) { LM_ERR("output variable is read only\n"); return -1; } @@ -583,21 +586,23 @@ static int ki_tcp_get_conid_helper(sip_msg_t *msg, str *saddr, pv_spec_t *pvs) port = su_getport(&dst.to); c = tcpconn_get(dst.id, &ip, port, NULL, clifetime); - if(unlikely(c == 0)) { + if(unlikely(c <= 0)) { goto setvalue; } conid = c->id; tcpconn_put(c); setvalue: - memset(&val, 0, sizeof(pv_value_t)); - val.ri = conid; - val.flags = PV_VAL_INT | PV_TYPE_INT; - if(pvs->setf(msg, &pvs->pvp, (int)EQ_T, &val) < 0) { - LM_ERR("failed to set the output var\n"); - return -1; + if(pvs != NULL) { + memset(&val, 0, sizeof(pv_value_t)); + val.ri = conid; + val.flags = PV_VAL_INT | PV_TYPE_INT; + if(pvs->setf(msg, &pvs->pvp, (int)EQ_T, &val) < 0) { + LM_ERR("failed to set the output var\n"); + return -1; + } } - if(conid == 0) { + if(conid <= 0) { return -1; } return 1; @@ -638,6 +643,29 @@ static int w_tcp_get_conid(sip_msg_t *msg, char *paddr, char *pvn) return ki_tcp_get_conid_helper(msg, &saddr, (pv_spec_t *)pvn); } +/** + * + */ +static int ki_tcp_con_alive(sip_msg_t *msg, str *saddr) +{ + return ki_tcp_get_conid_helper(msg, saddr, NULL); +} + +/** + * + */ +static int w_tcp_con_alive(sip_msg_t *msg, char *paddr, char *p2) +{ + str saddr; + + if(fixup_get_svalue(msg, (gparam_t *)paddr, &saddr) < 0) { + LM_ERR("failed to get address parameter\n"); + return -1; + } + + return ki_tcp_get_conid_helper(msg, &saddr, NULL); +} + /** * */ @@ -923,6 +951,11 @@ static sr_kemi_t sr_kemi_tcpops_exports[] = { { SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE } }, + { str_init("tcpops"), str_init("tcp_con_alive"), + SR_KEMIP_INT, ki_tcp_con_alive, + { SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE, + SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE } + }, { str_init("tcpops"), str_init("tcp_get_conid"), SR_KEMIP_INT, ki_tcp_get_conid, { SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE, _______________________________________________ Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org To unsubscribe send an email to sr-dev-le...@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender!