Module: sip-router
Branch: 4.2
Commit: 39d6a77084f6c32af1f0de646410a247e55355c3
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=39d6a77…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Tue Nov 4 16:32:13 2014 +0100
pua_reginfo: avoid sending notify when processing location record action triggered by
itself
(cherry picked from commit e070257321853d799a6325ac5e94f69b4ccb85e7)
---
modules/pua_reginfo/notify.c | 21 +++++++++++++++------
modules/pua_reginfo/usrloc_cb.c | 12 ++++++++++++
modules/pua_reginfo/usrloc_cb.h | 6 ++++++
3 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/modules/pua_reginfo/notify.c b/modules/pua_reginfo/notify.c
index 6cc1e67..b209577 100644
--- a/modules/pua_reginfo/notify.c
+++ b/modules/pua_reginfo/notify.c
@@ -28,6 +28,7 @@
#include "../../modules/usrloc/usrloc.h"
#include "../../lib/srutils/sruid.h"
#include <libxml/parser.h>
+#include "usrloc_cb.h"
#include "pua_reginfo.h"
/*<?xml version="1.0"?>
@@ -71,7 +72,9 @@ int process_contact(udomain_t * domain, urecord_t ** ul_record, str aor,
str cal
static str no_ua = str_init("n/a");
static ucontact_info_t ci;
ucontact_t * ul_contact;
+ int ret;
+ pua_reginfo_update_self_op(1);
if (*ul_record == NULL) {
switch(event) {
case EVENT_REGISTERED:
@@ -81,14 +84,15 @@ int process_contact(udomain_t * domain, urecord_t ** ul_record, str
aor, str cal
create a new entry for this user in the usrloc-DB */
if (ul.insert_urecord(domain, &aor, ul_record) < 0) {
LM_ERR("failed to insert new user-record\n");
- return RESULT_ERROR;
+ ret = RESULT_ERROR;
+ goto done;
}
break;
default:
/* No entry in usrloc and the contact is expired, deleted, unregistered, whatever:
We do not need to do anything. */
- return RESULT_NO_CONTACTS;
- break;
+ ret = RESULT_NO_CONTACTS;
+ goto done;
}
}
@@ -118,12 +122,14 @@ int process_contact(udomain_t * domain, urecord_t ** ul_record, str
aor, str cal
|| (ul.get_ucontact(*ul_record, &contact_uri, &callid, &no_str, cseq+1,
&ul_contact) != 0)) {
if (ul.insert_ucontact(*ul_record, &contact_uri, &ci, &ul_contact) < 0)
{
LM_ERR("failed to insert new contact\n");
- return RESULT_ERROR;
+ ret = RESULT_ERROR;
+ goto done;
}
} else {
if (ul.update_ucontact(*ul_record, ul_contact, &ci) < 0) {
LM_ERR("failed to update contact\n");
- return RESULT_ERROR;
+ ret = RESULT_ERROR;
+ goto done;
}
}
ul_contact = (*ul_record)->contacts;
@@ -132,7 +138,10 @@ int process_contact(udomain_t * domain, urecord_t ** ul_record, str
aor, str cal
ul_contact = ul_contact->next;
}
- return RESULT_NO_CONTACTS;
+ ret = RESULT_NO_CONTACTS;
+done:
+ pua_reginfo_update_self_op(0);
+ return ret;
}
xmlNodePtr xmlGetNodeByName(xmlNodePtr parent, const char *name) {
diff --git a/modules/pua_reginfo/usrloc_cb.c b/modules/pua_reginfo/usrloc_cb.c
index 2360a70..0164a67 100644
--- a/modules/pua_reginfo/usrloc_cb.c
+++ b/modules/pua_reginfo/usrloc_cb.c
@@ -49,6 +49,12 @@ Call-ID: 9ad9f89f-164d-bb86-1072-52e7e9eb5025.
.</registration>
</reginfo> */
+static int _pua_reginfo_self_op = 0;
+
+void pua_reginfo_update_self_op(int v)
+{
+ _pua_reginfo_self_op = v;
+}
str* build_reginfo_full(urecord_t * record, str uri, ucontact_t* c, int type) {
xmlDocPtr doc = NULL;
@@ -221,6 +227,12 @@ void reginfo_usrloc_cb(ucontact_t* c, int type, void* param) {
char id_buf[512];
int id_buf_len;
+ if(_pua_reginfo_self_op == 1) {
+ LM_DBG("operation triggered by own action for aor: %.*s (%d)\n",
+ c->aor->len, c->aor->s, type);
+ return;
+ }
+
content_type.s = "application/reginfo+xml";
content_type.len = 23;
diff --git a/modules/pua_reginfo/usrloc_cb.h b/modules/pua_reginfo/usrloc_cb.h
index 0bdd1ca..f0e565e 100644
--- a/modules/pua_reginfo/usrloc_cb.h
+++ b/modules/pua_reginfo/usrloc_cb.h
@@ -21,6 +21,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifndef __PUA_REGINFO_USRLOC_CB__
+#define __PUA_REGINFO_USRLOC_CB__
+
#include "../usrloc/usrloc.h"
void reginfo_usrloc_cb(ucontact_t* c, int type, void* param);
+void pua_reginfo_update_self_op(int v);
+
+#endif