Просмотр исходного кода

tm: fix cloning parsed uri for to/from headers

- parsed structure was not cloned
- several fields in struct uri were not cloned
Daniel-Constantin Mierla 16 лет назад
Родитель
Сommit
d9d008e341
1 измененных файлов с 22 добавлено и 0 удалено
  1. 22 0
      modules/tm/sip_msg.c

+ 22 - 0
modules/tm/sip_msg.c

@@ -288,6 +288,24 @@ static void uri_trans(char *new_buf, char *org_buf, struct sip_uri *uri)
 	uri->port.s=translate_pointer(new_buf,org_buf,uri->port.s);
 	uri->params.s=translate_pointer(new_buf,org_buf,uri->params.s);
 	uri->headers.s=translate_pointer(new_buf,org_buf,uri->headers.s);
+	/* parameters */
+	uri->transport.s=translate_pointer(new_buf,org_buf,uri->transport.s);
+	uri->ttl.s=translate_pointer(new_buf,org_buf,uri->ttl.s);
+	uri->user_param.s=translate_pointer(new_buf,org_buf,uri->user_param.s);
+	uri->maddr.s=translate_pointer(new_buf,org_buf,uri->maddr.s);
+	uri->method.s=translate_pointer(new_buf,org_buf,uri->method.s);
+	uri->lr.s=translate_pointer(new_buf,org_buf,uri->lr.s);
+	uri->r2.s=translate_pointer(new_buf,org_buf,uri->r2.s);
+	/* values */
+	uri->transport_val.s
+		=translate_pointer(new_buf,org_buf,uri->transport_val.s);
+	uri->ttl_val.s=translate_pointer(new_buf,org_buf,uri->ttl_val.s);
+	uri->user_param_val.s
+		=translate_pointer(new_buf,org_buf,uri->user_param_val.s);
+	uri->maddr_val.s=translate_pointer(new_buf,org_buf,uri->maddr_val.s);
+	uri->method_val.s=translate_pointer(new_buf,org_buf,uri->method_val.s);
+	uri->lr_val.s=translate_pointer(new_buf,org_buf,uri->lr_val.s);
+	uri->r2_val.s=translate_pointer(new_buf,org_buf,uri->r2_val.s);
 }
 
 
@@ -685,6 +703,10 @@ struct sip_msg*  sip_msg_cloner( struct sip_msg *org_msg, int *sip_msg_len )
 				((struct to_body*)new_hdr->parsed)->tag_value.s =
 					translate_pointer( new_msg->buf , org_msg->buf ,
 							   ((struct to_body*)hdr->parsed)->tag_value.s );
+			if ( (((struct to_body*)new_hdr->parsed)->parsed_uri.user.s)
+				|| (((struct to_body*)new_hdr->parsed)->parsed_uri.host.s) )
+					uri_trans(new_msg->buf, org_msg->buf,
+							&((struct to_body*)new_hdr->parsed)->parsed_uri);
 			     /*to params*/
 			to_prm = ((struct to_body*)(hdr->parsed))->param_lst;
 			for(;to_prm;to_prm=to_prm->next) {