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

Author: Matteo Brancaleoni <matteo.brancale...@voismart.it>
Committer: Daniel-Constantin Mierla <mico...@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/708dd1753483240c82c5796e11686db40544d145.diff
Patch: 
https://github.com/kamailio/kamailio/commit/708dd1753483240c82c5796e11686db40544d145.patch

---

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;
 

_______________________________________________
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!

Reply via email to