|
|
|
|
@ -6,11 +6,11 @@ previously if an error was found we were bailing out and the value
|
|
|
|
|
was kept so at next round the value will be there and no more values
|
|
|
|
|
where removed
|
|
|
|
|
---
|
|
|
|
|
src/modules/presence/publish.c | 59 ++++++++++++++++++++++++++----------------
|
|
|
|
|
1 file changed, 37 insertions(+), 22 deletions(-)
|
|
|
|
|
src/modules/presence/publish.c | 97 +++++++++++++++++++++++++-----------------
|
|
|
|
|
1 file changed, 58 insertions(+), 39 deletions(-)
|
|
|
|
|
|
|
|
|
|
diff --git a/src/modules/presence/publish.c b/src/modules/presence/publish.c
|
|
|
|
|
index 8889a2e..9bd334f 100644
|
|
|
|
|
index 8889a2e..480ac7b 100644
|
|
|
|
|
--- a/src/modules/presence/publish.c
|
|
|
|
|
+++ b/src/modules/presence/publish.c
|
|
|
|
|
@@ -69,6 +69,7 @@ void ps_presentity_db_timer_clean(unsigned int ticks, void *param)
|
|
|
|
|
@ -137,3 +137,73 @@ index 8889a2e..9bd334f 100644
|
|
|
|
|
}
|
|
|
|
|
} while(db_fetch_next(&pa_dbf, pres_fetch_rows, pa_db, &result) == 1
|
|
|
|
|
&& RES_ROW_N(result) > 0);
|
|
|
|
|
@@ -277,22 +292,23 @@ void ps_ptable_timer_clean(unsigned int ticks, void *param)
|
|
|
|
|
pres.etag = ptn->etag;
|
|
|
|
|
pres.event = contains_event(&ptn->event, NULL);
|
|
|
|
|
if(pres.event == NULL || pres.event->evp == NULL) {
|
|
|
|
|
- LM_ERR("event not found\n");
|
|
|
|
|
- goto error;
|
|
|
|
|
+ LM_ERR("event[%.*s] not found\n", STR_FMT(&ptn->event));
|
|
|
|
|
+ goto next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(uandd_to_uri(pres.user, pres.domain, &uri) < 0) {
|
|
|
|
|
- LM_ERR("constructing uri\n");
|
|
|
|
|
- goto error;
|
|
|
|
|
+ LM_ERR("constructing uri from [user]=%.*s [domain]=%.*s\n",
|
|
|
|
|
+ STR_FMT(&pres.user), STR_FMT(&pres.domain));
|
|
|
|
|
+ goto next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- LM_DBG("found expired publish for [user]=%.*s [domanin]=%.*s\n",
|
|
|
|
|
+ LM_DBG("found expired publish for [user]=%.*s [domain]=%.*s\n",
|
|
|
|
|
pres.user.len, pres.user.s, pres.domain.len, pres.domain.s);
|
|
|
|
|
|
|
|
|
|
if(pres_force_delete == 1) {
|
|
|
|
|
if(ps_ptable_remove(ptn) <0) {
|
|
|
|
|
LM_ERR("Deleting presentity\n");
|
|
|
|
|
- goto error;
|
|
|
|
|
+ goto next;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if(pres.event->get_rules_doc
|
|
|
|
|
@@ -300,25 +316,28 @@ void ps_ptable_timer_clean(unsigned int ticks, void *param)
|
|
|
|
|
&pres.user, &pres.domain, &rules_doc)
|
|
|
|
|
< 0) {
|
|
|
|
|
LM_ERR("getting rules doc\n");
|
|
|
|
|
- goto error;
|
|
|
|
|
+ goto next;
|
|
|
|
|
}
|
|
|
|
|
if(publ_notify(&pres, uri, NULL, &pres.etag, rules_doc) < 0) {
|
|
|
|
|
LM_ERR("sending Notify request\n");
|
|
|
|
|
- goto error;
|
|
|
|
|
- }
|
|
|
|
|
- if(rules_doc) {
|
|
|
|
|
- if(rules_doc->s)
|
|
|
|
|
- pkg_free(rules_doc->s);
|
|
|
|
|
- pkg_free(rules_doc);
|
|
|
|
|
- rules_doc = NULL;
|
|
|
|
|
+ goto next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- pkg_free(uri.s);
|
|
|
|
|
- uri.s = NULL;
|
|
|
|
|
+next:
|
|
|
|
|
+ if(uri.s) {
|
|
|
|
|
+ pkg_free(uri.s);
|
|
|
|
|
+ uri.s = NULL;
|
|
|
|
|
+ }
|
|
|
|
|
+ if(rules_doc) {
|
|
|
|
|
+ if(rules_doc->s) {
|
|
|
|
|
+ pkg_free(rules_doc->s);
|
|
|
|
|
+ }
|
|
|
|
|
+ pkg_free(rules_doc);
|
|
|
|
|
+ rules_doc = NULL;
|
|
|
|
|
+ }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-error:
|
|
|
|
|
for(ptn = ptlist; ptn != NULL; ptn = ptn->next) {
|
|
|
|
|
if(ps_ptable_remove(ptn) <0) {
|
|
|
|
|
LM_ERR("failed deleting presentity item\n");
|
|
|
|
|
|