Browse Source

A function to copy dst_uri

Jan Janak 21 năm trước cách đây
mục cha
commit
846a7aa04f
2 tập tin đã thay đổi với 39 bổ sung0 xóa
  1. 32 0
      parser/msg_parser.c
  2. 7 0
      parser/msg_parser.h

+ 32 - 0
parser/msg_parser.c

@@ -596,6 +596,7 @@ void free_reply_lump( struct lump_rpl *lump)
 void free_sip_msg(struct sip_msg* msg)
 {
 	if (msg->new_uri.s) { pkg_free(msg->new_uri.s); msg->new_uri.len=0; }
+	if (msg->dst_uri.s) { pkg_free(msg->dst_uri.s); msg->dst_uri.len=0; }
 	if (msg->headers)     free_hdr_field_lst(msg->headers);
 	if (msg->add_rm)      free_lump_list(msg->add_rm);
 	if (msg->body_lumps)  free_lump_list(msg->body_lumps);
@@ -621,3 +622,34 @@ int check_transaction_quadruple( struct sip_msg* msg )
 		return 0;
 	}
 }
+
+
+/*
+ * Make a private copy of the string and assign it to dst_uri
+ */
+int set_dst_uri(struct sip_msg* msg, str* uri)
+{
+	char* ptr;
+
+	if (!msg || !uri) {
+		LOG(L_ERR, "set_dst_uri: Invalid parameter value\n");
+		return -1;
+	}
+
+	if (msg->dst_uri.s && (msg->dst_uri.len >= uri->len)) {
+		memcpy(msg->dst_uri.s, uri->s, uri->len);
+		msg->dst_uri.len = uri->len;
+	} else {
+		ptr = (char*)pkg_malloc(uri->len);
+		if (!ptr) {
+			LOG(L_ERR, "set_dst_uri: Not enough memory\n");
+			return -1;
+		}
+
+		memcpy(ptr, uri->s, uri->len);
+		if (msg->dst_uri.s) pkg_free(msg->dst_uri.s);
+		msg->dst_uri.s = ptr;
+		msg->dst_uri.len = uri->len;
+	}
+	return 0;
+}

+ 7 - 0
parser/msg_parser.h

@@ -317,4 +317,11 @@ inline static char* get_body(struct sip_msg *msg)
 	return msg->unparsed + offset;
 }
 
+
+/*
+ * Make a private copy of the string and assign it to dst_uri
+ */
+int set_dst_uri(struct sip_msg* msg, str* uri);
+
+
 #endif