[sr-dev] git:carstenbock/ims: - added more implementation of storage into usrloc.

Carsten Bock carsten at bock.info
Wed Apr 6 22:11:56 CEST 2011


Module: sip-router
Branch: carstenbock/ims
Commit: f13b980f0234359cd7421b3037edd521685e3b34
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f13b980f0234359cd7421b3037edd521685e3b34

Author: Carsten Bock <carsten at bock.info>
Committer: Carsten Bock <carsten at bock.info>
Date:   Wed Apr  6 19:24:55 2011 +0200

- added more implementation of storage into usrloc.

---

 modules_k/pua_reginfo/notify.c |   41 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/modules_k/pua_reginfo/notify.c b/modules_k/pua_reginfo/notify.c
index eeb9450..aca9134 100644
--- a/modules_k/pua_reginfo/notify.c
+++ b/modules_k/pua_reginfo/notify.c
@@ -63,6 +63,11 @@
 #define RESULT_NO_CONTACTS 2
 
 int process_contact(udomain_t * domain, urecord_t ** ul_record, str aor, str callid, int cseq, int expires, int event, str contact_uri) {
+	str no_str = {0, 0};
+	static str no_ua = str_init("n/a");
+	static ucontact_info_t ci;
+	ucontact_t * ul_contact;
+
 	if (*ul_record == NULL) {
 		switch(event) {
 			case EVENT_REGISTERED:
@@ -72,7 +77,7 @@ 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_NO_CONTACTS;
+					return RESULT_ERROR;
 				}
 				break;
 			default:
@@ -82,6 +87,40 @@ int process_contact(udomain_t * domain, urecord_t ** ul_record, str aor, str cal
 				break;
 		}
 	}
+	
+	/* Make sure, no crap is in the structure: */
+	memset( &ci, 0, sizeof(ucontact_info_t));	
+	/* Get callid of the message */
+	ci.callid = &callid;
+	/* Get CSeq number of the message */
+	ci.cseq = cseq;
+	ci.sock = NULL;
+	/* additional info from message */
+	ci.user_agent = &no_ua;
+	ci.last_modified = time(0);
+
+	/* set expire time */
+	ci.expires = time(0) + expires;
+
+	/* Now we start looking for the contact: */
+	if (((*ul_record)->contacts == 0)
+		|| (ul.get_ucontact(*ul_record, &aor, &callid, &no_str, cseq, &ul_contact) != 0)) {
+		if (ul.insert_ucontact(*ul_record, &aor, &ci, &ul_contact) < 0) {
+			LM_ERR("failed to insert new contact\n");
+			return RESULT_ERROR;
+		}
+	} else {
+		if (ul.update_ucontact(*ul_record, ul_contact, &ci) < 0) {
+			LM_ERR("failed to update contact\n");
+			return RESULT_ERROR;
+		}
+	}
+	ul_contact = (*ul_record)->contacts;
+	while (ul_contact) {
+		if (VALID_CONTACT(ul_contact, time(0))) return RESULT_CONTACTS_FOUND;
+		ul_contact = ul_contact->next;
+	}
+
 	return RESULT_NO_CONTACTS;
 }
 




More information about the sr-dev mailing list