Pārlūkot izejas kodu

usrloc(k): on ul update, re-clone uri and callid if instance is set

- changes can happen when gruu/ob is enabled as the UA can get different
  address for same instance
Daniel-Constantin Mierla 13 gadi atpakaļ
vecāks
revīzija
a7cad776a5
2 mainītis faili ar 9 papildinājumiem un 3 dzēšanām
  1. 8 3
      modules_k/usrloc/ucontact.c
  2. 1 0
      modules_k/usrloc/usrloc.h

+ 8 - 3
modules_k/usrloc/ucontact.c

@@ -218,9 +218,14 @@ int mem_update_ucontact(ucontact_t* _c, ucontact_info_t* _ci)
 
 	char* ptr;
 
-	/* No need to update Callid as it is constant 
-	 * per ucontact (set at insert time)  -bogdan */
-
+	if(_ci->instance.s!=NULL && _ci->instance.len>0)
+	{
+		/* when we have instance set, update contact address and call-id */
+		if(_ci->c!=NULL && _ci->c->s!=NULL && _ci->c->len>0)
+			update_str( &_c->c, _ci->c);
+		if(_ci->callid!=NULL && _ci->callid->s!=NULL && _ci->callid->len>0)
+			update_str( &_c->callid, _ci->callid);
+	}
 	update_str( &_c->user_agent, _ci->user_agent);
 
 	if (_ci->received.s && _ci->received.len) {

+ 1 - 0
modules_k/usrloc/usrloc.h

@@ -94,6 +94,7 @@ typedef struct ucontact {
 /*! \brief Informations related to a contact */
 typedef struct ucontact_info {
 	str ruid;                 /*!< Pointer to record internal unique id */
+	str *c;                   /*!< Contact address */
 	str received;             /*!< Received interface */
 	str* path;                /*!< Path informations */
 	time_t expires;           /*!< Contact expires */