Module: kamailio Branch: master Commit: 708dd1753483240c82c5796e11686db40544d145 URL: https://github.com/kamailio/kamailio/commit/708dd1753483240c82c5796e11686db4...
Author: Matteo Brancaleoni matteo.brancaleoni@voismart.it Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2025-06-06T15:14:48+02:00
pua_reginfo: add helper to disable publishing for current message
---
Modified: src/modules/pua_reginfo/doc/pua_reginfo_admin.xml Modified: src/modules/pua_reginfo/pua_reginfo.c Modified: src/modules/pua_reginfo/pua_reginfo.h Modified: src/modules/pua_reginfo/usrloc_cb.c
---
Diff: https://github.com/kamailio/kamailio/commit/708dd1753483240c82c5796e11686db4... Patch: https://github.com/kamailio/kamailio/commit/708dd1753483240c82c5796e11686db4...
---
diff --git a/src/modules/pua_reginfo/doc/pua_reginfo_admin.xml b/src/modules/pua_reginfo/doc/pua_reginfo_admin.xml index 9e2da526c8e..8229377adb4 100644 --- a/src/modules/pua_reginfo/doc/pua_reginfo_admin.xml +++ b/src/modules/pua_reginfo/doc/pua_reginfo_admin.xml @@ -234,6 +234,33 @@ reply_route[1] { if (t_check_status("200")) reginfo_subscribe("$ru"); } +... + </programlisting> + </example> + </section> + <section id="pua_reginfo.f.reginfo_disable_publish"> + <title> + <function moreinfo="none">reginfo_disable_publish()</function> + </title> + <para> + This function disables sending the PUBLISH request in the registrar + callback invocation, for the current message only. + </para> + + <example> + <title><function>reginfo_disable_publish</function> usage</title> + <programlisting format="linespecific"> +... +if(is_method("REGISTER")) { + if (dmq_is_from_node()) + # coming from a DMQ node, just save without triggering PUBLISH + # which may be replicated differently, like with presence DMQ support + reginfo_disable_publish(); + save("location"); + } else { + # coming from end point - authenticate, save contact, etc... + } +} ... </programlisting> </example> diff --git a/src/modules/pua_reginfo/pua_reginfo.c b/src/modules/pua_reginfo/pua_reginfo.c index 6a0b91170ea..573b6efc15d 100644 --- a/src/modules/pua_reginfo/pua_reginfo.c +++ b/src/modules/pua_reginfo/pua_reginfo.c @@ -46,6 +46,8 @@ str server_address = {NULL, 0};
int publish_reginfo = 1;
+int reginfo_disable_publish = 0; /* Disables publish for current message */ + sruid_t _reginfo_sruid;
int reginfo_use_domain = 0; @@ -65,6 +67,8 @@ static cmd_export_t cmds[] = { fixup_subscribe, 0, REQUEST_ROUTE | ONREPLY_ROUTE}, {"reginfo_handle_notify", (cmd_function)reginfo_handle_notify, 1, domain_fixup, 0, REQUEST_ROUTE}, + {"reginfo_disable_publish", (cmd_function)w_reginfo_disable_publish, 0, + 0, 0, REQUEST_ROUTE}, {0, 0, 0, 0, 0, 0} };
diff --git a/src/modules/pua_reginfo/pua_reginfo.h b/src/modules/pua_reginfo/pua_reginfo.h index 6ffaa6ba516..70fd42a1cb5 100644 --- a/src/modules/pua_reginfo/pua_reginfo.h +++ b/src/modules/pua_reginfo/pua_reginfo.h @@ -37,5 +37,9 @@ extern usrloc_api_t ul; /*!< Structure containing pointers to usrloc functions*/ extern pua_api_t pua; /*!< Structure containing pointers to PUA functions*/
extern int reginfo_use_domain; +extern int reginfo_disable_publish; + +int w_reginfo_disable_publish(sip_msg_t *, char *, char *); +int ki_reginfo_disable_publish(sip_msg_t *);
#endif diff --git a/src/modules/pua_reginfo/usrloc_cb.c b/src/modules/pua_reginfo/usrloc_cb.c index 5cc1377b9de..8bc5a7884bd 100644 --- a/src/modules/pua_reginfo/usrloc_cb.c +++ b/src/modules/pua_reginfo/usrloc_cb.c @@ -53,6 +53,18 @@ Call-ID: 9ad9f89f-164d-bb86-1072-52e7e9eb5025.
static int _pua_reginfo_self_op = 0;
+#define BUF_LEN 256 +int ki_reginfo_disable_publish(sip_msg_t *msg) +{ + reginfo_disable_publish = 1; + return 1; +} + +int w_reginfo_disable_publish(struct sip_msg *msg, char *s1, char *s2) +{ + return ki_reginfo_disable_publish(msg); +} + void pua_reginfo_update_self_op(int v) { _pua_reginfo_self_op = v; @@ -266,6 +278,15 @@ void reginfo_usrloc_cb(ucontact_t *c, int type, void *param) return; }
+ if(reginfo_disable_publish == 1) { + LM_DBG("Not publishing due to reginfo_disable_publish for aor: %.*s " + "(%d)\n", + c->aor->len, c->aor->s, type); + + reginfo_disable_publish = 0; + return; + } + content_type.s = "application/reginfo+xml"; content_type.len = 23;