@miconda commented on this pull request.


In src/modules/websocket/websocket.c:

> +
+	if ((wsc = wsconn_get(msg->rcv.proto_reserved1)) == NULL) {
+		LM_ERR("$ws_real_src_ip cannot retrieve websocket connection\n");
+		return pv_get_null(msg, param, res);
+	}
+
+	wscid = wsc->id;
+
+	if (wsc->real_src_ip[0] == 0) {
+		wsconn_put(wsc);
+		LM_DBG("$ws_real_src_ip ws_conid %d real_src_ip is not set\n", wscid);
+		return pv_get_null(msg, param, res);
+	}
+
+	LM_DBG("$ws_real_src_ip ws_conid %d wsc->real_src_ip is %s (%d)\n", wscid, wsc->real_src_ip, (int)strlen(wsc->real_src_ip));
+	len = snprintf(buff, IP_ADDR_MAX_STR_SIZE, "%s", wsc->real_src_ip);

I noticed the use of snprintf(...) for storing just a single string value in another buffer. Is this chosen for any particular reason instead of strcpy()/strncpy()? Afaik, functions with variadic parameters tend to be slower.


In src/modules/websocket/websocket.c:

> +	if (wsc->real_src_ip[0] == 0) {
+		wsconn_put(wsc);
+		LM_DBG("$ws_real_src_ip ws_conid %d real_src_ip is not set\n", wscid);
+		return pv_get_null(msg, param, res);
+	}
+
+	LM_DBG("$ws_real_src_ip ws_conid %d wsc->real_src_ip is %s (%d)\n", wscid, wsc->real_src_ip, (int)strlen(wsc->real_src_ip));
+	len = snprintf(buff, IP_ADDR_MAX_STR_SIZE, "%s", wsc->real_src_ip);
+	buff[len] = 0;
+
+	wsconn_put(wsc);
+
+	ip_str.s = (char *)buff;
+	ip_str.len = strlen(buff);
+	LM_DBG("$ws_real_src_ip ws_conid %d real_src_ip is %s (%d)\n", wscid, ip_str.s, ip_str.len);
+	return pv_get_strval(msg, param, res, &ip_str);

The need for ip_str variable can be avoided by using pv_get_strzval(msg, param, buf), if I haven't missed any other use of ip_str.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.