Browse Source

registrar: add_sock_hdr() uses spve fixup

(cherry picked from commit b7baf05bd27aec0bfb606ff1ad43c01e165583fa)
Daniel-Constantin Mierla 8 years ago
parent
commit
123607ce0a
1 changed files with 17 additions and 5 deletions
  1. 17 5
      src/modules/registrar/registrar.c

+ 17 - 5
src/modules/registrar/registrar.c

@@ -84,7 +84,7 @@ static int unreg_fixup(void** param, int param_no);
 static int fetchc_fixup(void** param, int param_no);
 static int registered_fixup(void** param, int param_no);
 /*! \brief Functions */
-static int add_sock_hdr(struct sip_msg* msg, char *str, char *foo);
+static int w_add_sock_hdr(struct sip_msg* msg, char *str, char *foo);
 
 int tcp_persistent_flag = -1;			/*!< if the TCP connection should be kept open */
 int method_filtering = 0;			/*!< if the looked up contacts should be filtered based on supported methods */
@@ -176,7 +176,7 @@ static cmd_export_t cmds[] = {
 			ANY_ROUTE },
 	{"registered",   (cmd_function)w_registered4, 4,  registered_fixup, 0,
 			ANY_ROUTE },
-	{"add_sock_hdr", (cmd_function)add_sock_hdr,  1,  fixup_str_null, 0,
+	{"add_sock_hdr", (cmd_function)w_add_sock_hdr,  1,  fixup_spve_null, 0,
 			REQUEST_ROUTE },
 	{"unregister",   (cmd_function)w_unregister,  2,  unreg_fixup, 0,
 			REQUEST_ROUTE| FAILURE_ROUTE },
@@ -680,15 +680,17 @@ static void mod_destroy(void)
 #include "../../core/ip_addr.h"
 #include "../../core/ut.h"
 
-static int add_sock_hdr(struct sip_msg* msg, char *name, char *foo)
+static int ki_add_sock_hdr(sip_msg_t* msg, str *hdr_name)
 {
 	struct socket_info* si;
 	struct lump* anchor;
-	str *hdr_name;
 	str hdr;
 	char *p;
 
-	hdr_name = (str*)name;
+	if(hdr_name==NULL || hdr_name->s==NULL || hdr_name->len<=0) {
+		LM_ERR("invalid header name parameter\n");
+		return -1;
+	}
 	si = msg->rcv.bind_address;
 
 	if (parse_headers( msg, HDR_EOH_F, 0) == -1) {
@@ -737,6 +739,16 @@ error:
 	return -1;
 }
 
+static int w_add_sock_hdr(struct sip_msg* msg, char *name, char *foo)
+{
+	str hdr_name;
+	if(fixup_get_svalue(msg, (gparam_t*)name, &hdr_name)<0) {
+		LM_ERR("cannot get the header name\n");
+		return -1;
+	}
+	return ki_add_sock_hdr(msg, &hdr_name);
+}
+
 void default_expires_stats_update(str* gname, str* name){
 	update_stat(default_expire_stat, cfg_get(registrar, registrar_cfg, default_expires));
 }