Przeglądaj źródła

tcpops: check protocol of current message

Camille Oudot 10 lat temu
rodzic
commit
d5ac2a0b21
1 zmienionych plików z 19 dodań i 7 usunięć
  1. 19 7
      modules/tcpops/tcpops_mod.c

+ 19 - 7
modules/tcpops/tcpops_mod.c

@@ -45,15 +45,15 @@ static int w_tcp_keepalive_enable3(sip_msg_t* msg, char* idle, char *cnt, char *
 static int w_tcp_keepalive_disable1(sip_msg_t* msg, char* con);
 static int w_tcp_keepalive_disable0(sip_msg_t* msg);
 
-static int fixup_tcp_keepalive_numpv(void** param, int param_no);
+static int fixup_numpv(void** param, int param_no);
 
 
 static cmd_export_t cmds[]={
-	{"tcp_keepalive_enable", (cmd_function)w_tcp_keepalive_enable4, 4, fixup_tcp_keepalive_numpv,
+	{"tcp_keepalive_enable", (cmd_function)w_tcp_keepalive_enable4, 4, fixup_numpv,
 		0, ANY_ROUTE},
-	{"tcp_keepalive_enable", (cmd_function)w_tcp_keepalive_enable3, 3, fixup_tcp_keepalive_numpv,
+	{"tcp_keepalive_enable", (cmd_function)w_tcp_keepalive_enable3, 3, fixup_numpv,
 		0, REQUEST_ROUTE|ONREPLY_ROUTE},
-	{"tcp_keepalive_disable", (cmd_function)w_tcp_keepalive_disable1, 1, fixup_tcp_keepalive_numpv,
+	{"tcp_keepalive_disable", (cmd_function)w_tcp_keepalive_disable1, 1, fixup_numpv,
 		0, ANY_ROUTE},
 	{"tcp_keepalive_disable", (cmd_function)w_tcp_keepalive_disable0, 0, 0,
 		0, REQUEST_ROUTE|ONREPLY_ROUTE},
@@ -148,7 +148,13 @@ static int w_tcp_keepalive_enable3(sip_msg_t* msg, char* idle, char *cnt, char *
 {
 	int fd;
 
-	if (msg == NULL) {
+	if (unlikely(msg == NULL)) {
+		return -1;
+	}
+
+	if(unlikely(msg->rcv.proto != PROTO_TCP && msg->rcv.proto != PROTO_TLS && msg->rcv.proto != PROTO_WS && msg->rcv.proto != PROTO_WSS))
+	{
+		LM_ERR("the current message does not come from a TCP connection\n");
 		return -1;
 	}
 
@@ -188,9 +194,15 @@ static int w_tcp_keepalive_disable0(sip_msg_t* msg)
 {
 	int fd;
 
-	if (msg == NULL)
+	if (unlikely(msg == NULL))
 		return -1;
 
+	if(unlikely(msg->rcv.proto != PROTO_TCP && msg->rcv.proto != PROTO_TLS && msg->rcv.proto != PROTO_WS && msg->rcv.proto != PROTO_WSS))
+	{
+		LM_ERR("the current message does not come from a TCP connection\n");
+		return -1;
+	}
+
 	if (!tcpops_get_current_fd(msg->rcv.proto_reserved1, &fd)) {
 		return -1;
 	}
@@ -201,7 +213,7 @@ static int w_tcp_keepalive_disable0(sip_msg_t* msg)
 /**
  *
  */
-static int fixup_tcp_keepalive_numpv(void** param, int param_no)
+static int fixup_numpv(void** param, int param_no)
 {
 	return fixup_igp_null(param, 1);
 }