Module: kamailio
Branch: master
Commit: 1dceaa24ded727aba5870f28fb63e26ed98464f3
URL: 
https://github.com/kamailio/kamailio/commit/1dceaa24ded727aba5870f28fb63e26ed98464f3

Author: Chocolatbuddha <chocolatbud...@gmail.com>
Committer: Chocolatbuddha <chocolatbud...@gmail.com>
Date: 2016-10-17T11:13:22+02:00

Presence: Fix startup inconsistency in presentity hash table

pres_htable_restore(): Remove check of expired presentity entries when
initially filling the hash table to represent the number of expired +
valid entries. Because hash.c::delete_phtable() decrements publ_count on
removal of _every_ expired DB entry.
get_p_notify_body(): Compensate the fix on hash table restore by
checking for the expires time on building the NOTIFY. This also fixes a
problem when a SUBSCRIBE is received for an expired entry before the
cleaner can remove the entry from the DB.

---

Modified: modules/presence/notify.c
Modified: modules/presence/presentity.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/1dceaa24ded727aba5870f28fb63e26ed98464f3.diff
Patch: 
https://github.com/kamailio/kamailio/commit/1dceaa24ded727aba5870f28fb63e26ed98464f3.patch

---

diff --git a/modules/presence/notify.c b/modules/presence/notify.c
index 82ebf6b..acb052d 100644
--- a/modules/presence/notify.c
+++ b/modules/presence/notify.c
@@ -584,8 +584,9 @@ str* build_empty_bla_body(str pres_uri)
 str* get_p_notify_body(str pres_uri, pres_ev_t* event, str* etag,
                str* contact)
 {
-       db_key_t query_cols[3];
-       db_val_t query_vals[3];
+       db_key_t query_cols[4];
+       db_val_t query_vals[4];
+       db_op_t query_ops[4];
        db_key_t result_cols[3];
        db1_res_t *result = NULL;
        int body_col, etag_col= 0, sender_col;
@@ -635,18 +636,28 @@ str* get_p_notify_body(str pres_uri, pres_ev_t* event, 
str* etag,
        query_vals[n_query_cols].type = DB1_STR;
        query_vals[n_query_cols].nul = 0;
        query_vals[n_query_cols].val.str_val = uri.host;
+       query_ops[n_query_cols] = OP_EQ;
        n_query_cols++;
 
        query_cols[n_query_cols] = &str_username_col;
        query_vals[n_query_cols].type = DB1_STR;
        query_vals[n_query_cols].nul = 0;
        query_vals[n_query_cols].val.str_val = uri.user;
+       query_ops[n_query_cols] = OP_EQ;
        n_query_cols++;
 
        query_cols[n_query_cols] = &str_event_col;
        query_vals[n_query_cols].type = DB1_STR;
        query_vals[n_query_cols].nul = 0;
        query_vals[n_query_cols].val.str_val= event->name;
+       query_ops[n_query_cols] = OP_EQ;
+       n_query_cols++;
+
+       query_cols[n_query_cols] = &str_expires_col;
+       query_vals[n_query_cols].type = DB1_INT;
+       query_vals[n_query_cols].nul = 0;
+       query_vals[n_query_cols].val.int_val= (int)time(NULL);
+       query_ops[n_query_cols] = OP_GT;
        n_query_cols++;
 
        result_cols[body_col=n_result_cols++] = &str_body_col;
@@ -664,7 +675,7 @@ str* get_p_notify_body(str pres_uri, pres_ev_t* event, str* 
etag,
        } else {
                query_str = str_received_time_col;
        }
-       if (pa_dbf.query (pa_db, query_cols, 0, query_vals,
+       if (pa_dbf.query (pa_db, query_cols, query_ops, query_vals,
                 result_cols, n_query_cols, n_result_cols, &query_str ,  
&result) < 0) 
        {
                LM_ERR("failed to query %.*s table\n", presentity_table.len, 
presentity_table.s);
diff --git a/modules/presence/presentity.c b/modules/presence/presentity.c
index 00fdbfd..3a72cff 100644
--- a/modules/presence/presentity.c
+++ b/modules/presence/presentity.c
@@ -1231,9 +1231,6 @@ int pres_htable_restore(void)
                        row = &result->rows[i];
                        row_vals = ROW_VALUES(row);
 
-                       if(row_vals[expires_col].val.int_val< (int)time(NULL))
-                               continue;
-
                        sphere= NULL;
                        user.s= (char*)row_vals[user_col].val.string_val;
                        user.len= strlen(user.s);


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to