[sr-dev] git:master: modules_k/presence Change delete sql query to use key

Anca Vamanu anca.vamanu at 1and1.ro
Thu Mar 15 17:40:33 CET 2012


Module: sip-router
Branch: master
Commit: 5ccf1eedb4e38d85d7cd29ea5d69f29b40289755
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=5ccf1eedb4e38d85d7cd29ea5d69f29b40289755

Author: Anca Vamanu <anca.vamanu at 1and1.ro>
Committer: Anca Vamanu <anca.vamanu at 1and1.ro>
Date:   Thu Mar 15 18:38:43 2012 +0200

modules_k/presence Change delete sql query to use key

The delete operation in active_watchers is now performed on
callid, to_tag, from_tag.

---

 modules_k/presence/notify.c    |   22 ++++++++++++++++------
 modules_k/presence/notify.h    |    3 ++-
 modules_k/presence/subscribe.c |   28 +++++++++++++++-------------
 modules_k/presence/subscribe.h |    2 +-
 4 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/modules_k/presence/notify.c b/modules_k/presence/notify.c
index 52cb958..6ebf9fe 100644
--- a/modules_k/presence/notify.c
+++ b/modules_k/presence/notify.c
@@ -1591,9 +1591,9 @@ void p_tm_callback( struct cell *t, int type, struct tmcb_params *ps)
 	c_back_param*  cb;
 
 	if(ps->param==NULL || *ps->param==NULL ||
-			((c_back_param*)(*ps->param))->pres_uri.s == NULL ||
-			((c_back_param*)(*ps->param))->ev_name.s== NULL ||
-			((c_back_param*)(*ps->param))->to_tag.s== NULL)
+			((c_back_param*)(*ps->param))->callid.s == NULL ||
+			((c_back_param*)(*ps->param))->to_tag.s== NULL ||
+			((c_back_param*)(*ps->param))->from_tag.s== NULL)
 	{
 		LM_DBG("message id not received, probably a timeout notify\n");
 		if(ps->param != NULL && *ps->param !=NULL)
@@ -1606,7 +1606,8 @@ void p_tm_callback( struct cell *t, int type, struct tmcb_params *ps)
 			ps->code, cb->to_tag.len, cb->to_tag.s);
 
 	if(ps->code == 481 || (ps->code == 408 && timeout_rm_subs))
-		delete_subs(&cb->pres_uri, &cb->ev_name, &cb->to_tag);
+		delete_subs(&cb->pres_uri, &cb->ev_name,
+				&cb->to_tag, &cb->from_tag, &cb->callid);
 
 	free_cbparam(cb);
 }
@@ -1622,8 +1623,9 @@ c_back_param* shm_dup_cbparam(subs_t* subs)
 	int size;
 	c_back_param* cb_param = NULL;
 	
-	size = sizeof(c_back_param) + subs->pres_uri.len+
-			subs->event->name.len + subs->to_tag.len;
+	size = sizeof(c_back_param) + subs->pres_uri.len +
+			subs->event->name.len + subs->to_tag.len +
+			subs->from_tag.len + subs->callid.len;
 
 	cb_param= (c_back_param*)shm_malloc(size);
 	LM_DBG("=== %d/%d/%d\n", subs->pres_uri.len,
@@ -1645,6 +1647,14 @@ c_back_param* shm_dup_cbparam(subs_t* subs)
 	memcpy(cb_param->to_tag.s, subs->to_tag.s, subs->to_tag.len);
 	cb_param->to_tag.len = subs->to_tag.len;
 
+	cb_param->from_tag.s = (char*)(cb_param->to_tag.s) + cb_param->to_tag.len;
+	memcpy(cb_param->from_tag.s, subs->from_tag.s, subs->from_tag.len);
+	cb_param->from_tag.len = subs->from_tag.len;
+
+	cb_param->callid.s = (char*)(cb_param->from_tag.s) + cb_param->from_tag.len;
+	memcpy(cb_param->callid.s, subs->callid.s, subs->callid.len);
+	cb_param->callid.len = subs->callid.len;
+
 	return cb_param;
 }
 
diff --git a/modules_k/presence/notify.h b/modules_k/presence/notify.h
index 9a03f56..8af54a0 100644
--- a/modules_k/presence/notify.h
+++ b/modules_k/presence/notify.h
@@ -65,7 +65,8 @@ typedef struct wid_cback
 	str pres_uri;
 	str ev_name;
 	str to_tag;   /* to identify the exact record */
-	subs_t* wi_subs;
+	str from_tag;
+	str callid;
 }c_back_param;
 
 extern str str_to_user_col;
diff --git a/modules_k/presence/subscribe.c b/modules_k/presence/subscribe.c
index 7e45a9b..0c914c7 100644
--- a/modules_k/presence/subscribe.c
+++ b/modules_k/presence/subscribe.c
@@ -138,30 +138,30 @@ error:
 }
 
 
-int delete_db_subs(str* pres_uri, str* ev_stored_name, str* to_tag)
+int delete_db_subs(str* to_tag, str* from_tag, str* callid)
 {
-	db_key_t query_cols[5];
-	db_val_t query_vals[5];
+	db_key_t query_cols[3];
+	db_val_t query_vals[3];
 	int n_query_cols= 0;
 
-	query_cols[n_query_cols] = &str_presentity_uri_col;
+	query_cols[n_query_cols] = &str_callid_col;
 	query_vals[n_query_cols].type = DB1_STR;
 	query_vals[n_query_cols].nul = 0;
-	query_vals[n_query_cols].val.str_val = *pres_uri;
+	query_vals[n_query_cols].val.str_val = *callid;
 	n_query_cols++;
 
-	query_cols[n_query_cols] = &str_event_col;
+	query_cols[n_query_cols] = &str_to_tag_col;
 	query_vals[n_query_cols].type = DB1_STR;
 	query_vals[n_query_cols].nul = 0;
-	query_vals[n_query_cols].val.str_val = *ev_stored_name;
+	query_vals[n_query_cols].val.str_val = *to_tag;
 	n_query_cols++;
 
-	query_cols[n_query_cols] = &str_to_tag_col;
+	query_cols[n_query_cols] = &str_from_tag_col;
 	query_vals[n_query_cols].type = DB1_STR;
 	query_vals[n_query_cols].nul = 0;
-	query_vals[n_query_cols].val.str_val = *to_tag;
+	query_vals[n_query_cols].val.str_val = *from_tag;
 	n_query_cols++;
-	
+
 	if (pa_dbf.use_table(pa_db, &active_watchers_table) < 0) 
 	{
 		LM_ERR("in use table sql operation\n");
@@ -405,7 +405,8 @@ int update_subs_db(subs_t* subs, int type)
 	return 0;
 }
 
-void delete_subs(str* pres_uri, str* ev_name, str* to_tag)
+void delete_subs(str* pres_uri, str* ev_name, str* to_tag,
+		str* from_tag, str* callid)
 {
 	/* delete record from hash table also if not in dbonly mode */
 	if(subs_dbmode != DB_ONLY)
@@ -415,7 +416,7 @@ void delete_subs(str* pres_uri, str* ev_name, str* to_tag)
 			LM_ERR("Failed to delete subscription from memory\n");
 	}
 
-	if(subs_dbmode != NO_DB && delete_db_subs(pres_uri, ev_name, to_tag)< 0)
+	if(subs_dbmode != NO_DB && delete_db_subs(to_tag, from_tag, callid)< 0)
 		LM_ERR("Failed to delete subscription from database\n");
 }
 
@@ -436,7 +437,8 @@ int update_subscription(struct sip_msg* msg, subs_t* subs, int to_tag_gen,
 		{
 			LM_DBG("expires =0 -> deleting record\n");
 
-			delete_subs(&subs->pres_uri, &subs->event->name, &subs->to_tag);
+			delete_subs(&subs->pres_uri, &subs->event->name, &subs->to_tag,
+					&subs->from_tag, &subs->callid);
 
 			if(subs->event->type & PUBL_TYPE)
 			{
diff --git a/modules_k/presence/subscribe.h b/modules_k/presence/subscribe.h
index bf7d189..8ba3893 100644
--- a/modules_k/presence/subscribe.h
+++ b/modules_k/presence/subscribe.h
@@ -116,6 +116,6 @@ int extract_sdialog_info(subs_t* subs,struct sip_msg* msg, int max_expire,
 		int* to_tag_gen, str scontact);
 typedef int (*extract_sdialog_info_t)(subs_t* subs, struct sip_msg* msg,
 		int max_expire, int* to_tag_gen, str scontact);
-void delete_subs(str* pres_uri, str* ev_name, str* to_tag);
+void delete_subs(str* pres_uri, str* ev_name, str* to_tag, str* from_tag, str* callid);
 
 #endif




More information about the sr-dev mailing list