diff --git a/debian/patches/series b/debian/patches/series index 8792ddec7..026e91b5d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -54,6 +54,7 @@ sipwise/lcr_read_id.patch sipwise/dialog-support-profile_get_size-for-all-profiles.patch sipwise/rtpengine-set-mime-content-length.patch sipwise/pv_headers-pvh_xavi_get_child-fix-fallback-logic.patch +sipwise/presence_vqr.patch ### active development # ### Don't just put stuff in any order diff --git a/debian/patches/sipwise/presence_vqr.patch b/debian/patches/sipwise/presence_vqr.patch new file mode 100644 index 000000000..87127a4fb --- /dev/null +++ b/debian/patches/sipwise/presence_vqr.patch @@ -0,0 +1,458 @@ +From: Victor Seva +Date: Mon, 30 Oct 2023 17:29:00 +0100 +Subject: presence_vqr + +--- + src/Makefile.groups | 2 +- + src/modules/presence_vqr/Makefile | 11 +++ + src/modules/presence_vqr/README | 1 + + src/modules/presence_vqr/add_events.c | 86 +++++++++++++++++ + src/modules/presence_vqr/add_events.h | 30 ++++++ + src/modules/presence_vqr/doc/Makefile | 4 + + src/modules/presence_vqr/doc/presence_vqr.xml | 39 ++++++++ + .../presence_vqr/doc/presence_vqr_admin.xml | 61 ++++++++++++ + src/modules/presence_vqr/presence_vqr.c | 103 +++++++++++++++++++++ + src/modules/presence_vqr/presence_vqr.h | 30 ++++++ + 10 files changed, 366 insertions(+), 1 deletion(-) + create mode 100644 src/modules/presence_vqr/Makefile + create mode 100644 src/modules/presence_vqr/README + create mode 100644 src/modules/presence_vqr/add_events.c + create mode 100644 src/modules/presence_vqr/add_events.h + create mode 100644 src/modules/presence_vqr/doc/Makefile + create mode 100644 src/modules/presence_vqr/doc/presence_vqr.xml + create mode 100644 src/modules/presence_vqr/doc/presence_vqr_admin.xml + create mode 100644 src/modules/presence_vqr/presence_vqr.c + create mode 100644 src/modules/presence_vqr/presence_vqr.h + +diff --git a/src/Makefile.groups b/src/Makefile.groups +index ec0d8ac..df52698 100644 +--- a/src/Makefile.groups ++++ b/src/Makefile.groups +@@ -121,7 +121,7 @@ mod_list_presence=presence presence_conference presence_dialoginfo \ + presence_xml \ + pua pua_bla pua_dialoginfo pua_reginfo \ + pua_rpc pua_usrloc pua_xmpp \ +- rls xcap_client xcap_server presence_dfks ++ rls xcap_client xcap_server presence_dfks presence_vqr + + + # - modules depending on lua library +diff --git a/src/modules/presence_vqr/Makefile b/src/modules/presence_vqr/Makefile +new file mode 100644 +index 0000000..02957e5 +--- /dev/null ++++ b/src/modules/presence_vqr/Makefile +@@ -0,0 +1,11 @@ ++# ++# Presence_vqr Makefile ++# ++# ++# WARNING: do not run this directly, it should be run by the main Makefile ++ ++include ../../Makefile.defs ++auto_gen= ++NAME=presence_vqr.so ++ ++include ../../Makefile.modules +diff --git a/src/modules/presence_vqr/README b/src/modules/presence_vqr/README +new file mode 100644 +index 0000000..8b13789 +--- /dev/null ++++ b/src/modules/presence_vqr/README +@@ -0,0 +1 @@ ++ +diff --git a/src/modules/presence_vqr/add_events.c b/src/modules/presence_vqr/add_events.c +new file mode 100644 +index 0000000..d956a63 +--- /dev/null ++++ b/src/modules/presence_vqr/add_events.c +@@ -0,0 +1,86 @@ ++/* ++ * presence_vqr module - Presence Handling of vq-rtcpxr events ++ * ++ * Copyright (C) 2023 Victor Seva, vseva@sipwise.com ++ * https://www.sipwise.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 ++ */ ++ ++#include ++#include ++#include ++#include "../../core/parser/parse_content.h" ++#include "../presence/event_list.h" ++#include "presence_vqr.h" ++ ++/*! \brief ++ * event specific publish handling - check if body format is ok ++ */ ++int vqr_publ_handl(struct sip_msg *msg) ++{ ++ str body; ++ ++ if(get_content_length(msg) == 0) ++ return 1; ++ ++ body.s = get_body(msg); ++ if(body.s == NULL) { ++ LM_ERR("cannot extract body from msg\n"); ++ return -1; ++ } ++ /* content-length (if present) must be already parsed */ ++ body.len = get_content_length(msg); ++ ++ /* check VQReportEvent */ ++ if(body.len <= 14) ++ return -1; ++ if(strncmp(body.s, "VQSessionReport:", 16) != 0 ++ && strncmp(body.s, "VQAlertReport:", 14) != 0 ++ && strncmp(body.s, "VQIntervalReport:", 17) != 0) { ++ LM_ERR("No valid SessionReport detected\n"); ++ return -1; ++ } ++ if(str_casesearch_strz(&body, "LocalMetrics:") == NULL) { ++ LM_ERR("No LocalMetrics detected\n"); ++ return -1; ++ } ++ return 1; ++} ++ ++int vqr_add_events(void) ++{ ++ pres_ev_t event; ++ ++ /* constructing message-summary event */ ++ memset(&event, 0, sizeof(pres_ev_t)); ++ event.name.s = "vq-rtcpxr"; ++ event.name.len = 9; ++ ++ event.content_type.s = "application/vq-rtcpxr"; ++ event.content_type.len = 21; ++ event.default_expires = pres_vqr_default_expires; ++ event.type = PUBL_TYPE; ++ event.req_auth = 0; ++ event.evs_publ_handl = vqr_publ_handl; ++ ++ if(pres_add_event(&event) < 0) { ++ LM_ERR("failed to add event \"vq-rtcpxr\"\n"); ++ return -1; ++ } ++ return 0; ++} +diff --git a/src/modules/presence_vqr/add_events.h b/src/modules/presence_vqr/add_events.h +new file mode 100644 +index 0000000..45fe8b6 +--- /dev/null ++++ b/src/modules/presence_vqr/add_events.h +@@ -0,0 +1,30 @@ ++/* ++ * presence_vqr module - Presence Handling of vq-rtcpxr events ++ * ++ * Copyright (C) 2023 Victor Seva, vseva@sipwise.com ++ * https://www.sipwise.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 ++ */ ++ ++ ++#ifndef _VQR_ADD_EV_H_ ++#define _VQR_ADD_EV_H_ ++ ++int vqr_add_events(void); ++ ++#endif +diff --git a/src/modules/presence_vqr/doc/Makefile b/src/modules/presence_vqr/doc/Makefile +new file mode 100644 +index 0000000..b8abbc8 +--- /dev/null ++++ b/src/modules/presence_vqr/doc/Makefile +@@ -0,0 +1,4 @@ ++docs = presence_vqr.xml ++ ++docbook_dir = ../../../../doc/docbook ++include $(docbook_dir)/Makefile.module +diff --git a/src/modules/presence_vqr/doc/presence_vqr.xml b/src/modules/presence_vqr/doc/presence_vqr.xml +new file mode 100644 +index 0000000..9ea4e6a +--- /dev/null ++++ b/src/modules/presence_vqr/doc/presence_vqr.xml +@@ -0,0 +1,39 @@ ++ ++ ++ ++%docentities; ++ ++]> ++ ++ ++ ++ presence_vqr Module ++ &kamailioname; ++ ++ ++ Victor ++ Seva ++ vseva@sipwise.com ++ ++ ++ Victor ++ Seva ++ vseva@sipwise.com ++ ++ ++ ++ 2023 ++ sipwise.com ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/src/modules/presence_vqr/doc/presence_vqr_admin.xml b/src/modules/presence_vqr/doc/presence_vqr_admin.xml +new file mode 100644 +index 0000000..604cac9 +--- /dev/null ++++ b/src/modules/presence_vqr/doc/presence_vqr_admin.xml +@@ -0,0 +1,61 @@ ++ ++ ++ ++%docentities; ++ ++]> ++ ++ ++ ++ ++ &adminguide; ++ ++
++ Overview ++ ++ The module enables the handling of "Event: vq-rtcpxr" (as defined ++ in RFC 6035) inside of the presence module. Enables the collection ++ and reporting of metrics that measure the quality for Voice over ++ Internet Protocol (VoIP) sessions. ++ ++
++ ++
++ Dependencies ++
++ &kamailio; Modules ++ ++ The following modules must be loaded before this module: ++ ++ ++ ++ presence. ++ ++ ++ ++ ++
++ ++
++ External Libraries or Applications ++ ++ None. ++ ++
++ ++
++ Exported Parameters ++ None ++
++ ++
++ Exported Functions ++ ++ None to be used in configuration file. ++ ++
++
++
+diff --git a/src/modules/presence_vqr/presence_vqr.c b/src/modules/presence_vqr/presence_vqr.c +new file mode 100644 +index 0000000..ba6f0fe +--- /dev/null ++++ b/src/modules/presence_vqr/presence_vqr.c +@@ -0,0 +1,103 @@ ++/* ++ * presence_vqr module - Presence Handling of vq-rtcpxr events ++ * ++ * Copyright (C) 2023 Victor Seva, vseva@sipwise.com ++ * https://www.sipwise.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 ++ */ ++ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "../../core/sr_module.h" ++#include "../../core/dprint.h" ++#include "../../core/str.h" ++#include "../../core/parser/msg_parser.h" ++#include "../../core/mem/mem.h" ++#include "../presence/bind_presence.h" ++#include "add_events.h" ++#include "presence_vqr.h" ++ ++MODULE_VERSION ++ ++/* module functions */ ++static int mod_init(void); ++ ++/* module variables */ ++add_event_t pres_add_event; ++ ++/* module parameters */ ++unsigned int pres_vqr_default_expires = 3600; ++ ++/* module exported parameters */ ++/* clang-format off */ ++static param_export_t params[] = { ++ {"default_expires", PARAM_INT, &pres_vqr_default_expires}, ++ {0, 0, 0} ++}; ++ ++/* module exports */ ++struct module_exports exports= { ++ "presence_vqr", /* module name */ ++ DEFAULT_DLFLAGS, /* dlopen flags */ ++ 0, /* exported functions */ ++ params, /* exported parameters */ ++ 0, /* RPC method exports */ ++ 0, /* exported pseudo-variables */ ++ 0, /* response handling function */ ++ mod_init, /* module initialization function */ ++ 0, /* per-child init function */ ++ 0 /* module destroy function */ ++}; ++/* clang-format on */ ++ ++/* ++ * init module function ++ */ ++static int mod_init(void) ++{ ++ presence_api_t pres; ++ bind_presence_t bind_presence; ++ ++ bind_presence = (bind_presence_t)find_export("bind_presence", 1, 0); ++ if(!bind_presence) { ++ LM_ERR("can't bind presence\n"); ++ return -1; ++ } ++ if(bind_presence(&pres) < 0) { ++ LM_ERR("can't bind presence\n"); ++ return -1; ++ } ++ ++ pres_add_event = pres.add_event; ++ if(pres_add_event == NULL) { ++ LM_ERR("could not import add_event\n"); ++ return -1; ++ } ++ if(vqr_add_events() < 0) { ++ LM_ERR("failed to add vq-rtcpxr events\n"); ++ return -1; ++ } ++ ++ return 0; ++} +diff --git a/src/modules/presence_vqr/presence_vqr.h b/src/modules/presence_vqr/presence_vqr.h +new file mode 100644 +index 0000000..18b961c +--- /dev/null ++++ b/src/modules/presence_vqr/presence_vqr.h +@@ -0,0 +1,30 @@ ++/* ++ * presence_vqr module - Presence Handling of vq-rtcpxr events ++ * ++ * Copyright (C) 2023 Victor Seva, vseva@sipwise.com ++ * https://www.sipwise.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 ++ */ ++ ++#ifndef _PRES_VQR_H_ ++#define _PRES_VQR_H_ ++ ++extern add_event_t pres_add_event; ++extern unsigned int pres_vqr_default_expires; ++ ++#endif