|
@@ -39,10 +39,12 @@
|
|
|
* by andrei
|
|
|
* 2003-01-27 modified parse_via to set new via_param->start member and
|
|
|
* via->params.s (andrei)
|
|
|
+ * 2003-01-28 zero-terminations replaced with VIA_ZT (jiri)
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
+#include "../comp_defs.h"
|
|
|
#include <stdlib.h>
|
|
|
#include <string.h>
|
|
|
#include "../dprint.h"
|
|
@@ -127,7 +129,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case '\t':
|
|
|
switch(state){
|
|
|
case FIN_HIDDEN:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=L_PARAM;
|
|
@@ -138,7 +140,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case FIN_RECEIVED:
|
|
|
case FIN_RPORT:
|
|
|
case FIN_I:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=L_VALUE;
|
|
@@ -152,7 +154,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
break;
|
|
|
case GEN_PARAM:
|
|
|
default:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=GEN_PARAM;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=L_VALUE;
|
|
@@ -163,7 +165,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case '\n':
|
|
|
switch(state){
|
|
|
case FIN_HIDDEN:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
param->size=tmp-param->start;
|
|
@@ -176,7 +178,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case FIN_RECEIVED:
|
|
|
case FIN_I:
|
|
|
case FIN_RPORT:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
param->size=tmp-param->start;
|
|
@@ -196,7 +198,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
break;
|
|
|
case GEN_PARAM:
|
|
|
default:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=GEN_PARAM;
|
|
|
saved_state=L_VALUE;
|
|
|
param->name.len=tmp-param->name.s;
|
|
@@ -208,7 +210,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case '\r':
|
|
|
switch(state){
|
|
|
case FIN_HIDDEN:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
param->size=tmp-param->start;
|
|
@@ -221,7 +223,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case FIN_RECEIVED:
|
|
|
case FIN_I:
|
|
|
case FIN_RPORT:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
param->size=tmp-param->start;
|
|
@@ -238,7 +240,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
goto end_via;
|
|
|
case GEN_PARAM:
|
|
|
default:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=GEN_PARAM;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
param->size=tmp-param->start;
|
|
@@ -256,7 +258,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case FIN_RECEIVED:
|
|
|
case FIN_RPORT:
|
|
|
case FIN_I:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=F_VALUE;
|
|
@@ -273,7 +275,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
goto end_via;
|
|
|
case GEN_PARAM:
|
|
|
default:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=GEN_PARAM;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=F_VALUE;
|
|
@@ -284,7 +286,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
switch(state){
|
|
|
case FIN_HIDDEN:
|
|
|
case FIN_RPORT: /* rport can appear w/o a value */
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=F_PARAM;
|
|
@@ -304,7 +306,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
goto end_via;
|
|
|
case GEN_PARAM:
|
|
|
default:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=GEN_PARAM;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=F_PARAM;
|
|
@@ -315,7 +317,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
switch(state){
|
|
|
case FIN_HIDDEN:
|
|
|
case FIN_RPORT:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=state;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=F_VIA;
|
|
@@ -336,7 +338,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
goto end_via;
|
|
|
case GEN_PARAM:
|
|
|
default:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->type=GEN_PARAM;
|
|
|
param->name.len=tmp-param->name.s;
|
|
|
state=F_VIA;
|
|
@@ -719,7 +721,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case F_VALUE: /*eat space*/
|
|
|
break;
|
|
|
case P_VALUE:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
state=L_PARAM;
|
|
|
param->value.len=tmp-param->value.s;
|
|
|
goto endofvalue;
|
|
@@ -746,7 +748,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
state=F_LF;
|
|
|
break;
|
|
|
case P_VALUE:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
saved_state=L_PARAM;
|
|
|
state=F_LF;
|
|
|
param->value.len=tmp-param->value.s;
|
|
@@ -774,7 +776,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
state=F_CR;
|
|
|
break;
|
|
|
case P_VALUE:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->value.len=tmp-param->value.s;
|
|
|
saved_state=L_PARAM;
|
|
|
state=F_CR;
|
|
@@ -812,12 +814,12 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case ';':
|
|
|
switch(state){
|
|
|
case P_VALUE:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->value.len=tmp-param->value.s;
|
|
|
state=F_PARAM;
|
|
|
goto endofvalue;
|
|
|
case F_VALUE:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->value.len=0;
|
|
|
state=F_PARAM;
|
|
|
goto endofvalue;
|
|
@@ -845,7 +847,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
case ',':
|
|
|
switch(state){
|
|
|
case P_VALUE:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
param->value.len=tmp-param->value.s;
|
|
|
state=F_VIA;
|
|
|
goto endofvalue;
|
|
@@ -876,7 +878,7 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
param->value.s=tmp+1;
|
|
|
break;
|
|
|
case P_STRING:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
state=L_PARAM;
|
|
|
param->value.len=tmp-param->value.s;
|
|
|
goto endofvalue;
|
|
@@ -924,8 +926,8 @@ static /*inline*/ char* parse_via_param(char* p, char* end,
|
|
|
normal_exit:
|
|
|
*pstate=state;
|
|
|
*psaved_state=saved_state;
|
|
|
- DBG("Found param type %d, <%s> = <%s>; state=%d\n", param->type,
|
|
|
- param->name.s, param->value.s, state);
|
|
|
+ DBG("Found param type %d, <%.*s> = <%.*s>; state=%d\n", param->type,
|
|
|
+ param->name.len, param->name.s, param->value.len, param->value.s, state);
|
|
|
return tmp;
|
|
|
|
|
|
end_via:
|
|
@@ -941,8 +943,8 @@ normal_exit:
|
|
|
}
|
|
|
*pstate=state;
|
|
|
*psaved_state=saved_state;
|
|
|
- DBG("Error on param type %d, <%s>, state=%d, saved_state=%d\n",
|
|
|
- param->type, param->name.s, state, saved_state);
|
|
|
+ DBG("Error on param type %d, <%.*s>, state=%d, saved_state=%d\n",
|
|
|
+ param->type, param->name.len, param->name.s, state, saved_state);
|
|
|
|
|
|
error:
|
|
|
LOG(L_ERR, "error: parse_via_param\n");
|
|
@@ -982,24 +984,24 @@ parse_again:
|
|
|
case F_PROTO:
|
|
|
break;
|
|
|
case FIN_UDP:
|
|
|
- *tmp=0; /* finished proto parsing */
|
|
|
+ VIA_ZT(*tmp); /* finished proto parsing */
|
|
|
vb->transport.len=tmp-vb->transport.s;
|
|
|
vb->proto=PROTO_UDP;
|
|
|
state=F_HOST; /* start looking for host*/
|
|
|
goto main_via;
|
|
|
case FIN_TCP:
|
|
|
- *tmp=0; /* finished proto parsing */
|
|
|
+ VIA_ZT(*tmp); /* finished proto parsing */
|
|
|
vb->transport.len=tmp-vb->transport.s;
|
|
|
vb->proto=PROTO_TCP;
|
|
|
state=F_HOST; /* start looking for host*/
|
|
|
goto main_via;
|
|
|
case FIN_SIP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->name.len=tmp-vb->name.s;
|
|
|
state=L_VER;
|
|
|
break;
|
|
|
case FIN_VER:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->version.len=tmp-vb->version.s;
|
|
|
state=L_PROTO;
|
|
|
break;
|
|
@@ -1025,27 +1027,27 @@ parse_again:
|
|
|
state=F_LF;
|
|
|
break;
|
|
|
case FIN_UDP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->transport.len=tmp-vb->transport.s;
|
|
|
vb->proto=PROTO_UDP;
|
|
|
state=F_LF;
|
|
|
saved_state=F_HOST; /* start looking for host*/
|
|
|
goto main_via;
|
|
|
case FIN_TCP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->transport.len=tmp-vb->transport.s;
|
|
|
vb->proto=PROTO_TCP;
|
|
|
state=F_LF;
|
|
|
saved_state=F_HOST; /* start looking for host*/
|
|
|
goto main_via;
|
|
|
case FIN_SIP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->name.len=tmp-vb->name.s;
|
|
|
state=F_LF;
|
|
|
saved_state=L_VER;
|
|
|
break;
|
|
|
case FIN_VER:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->version.len=tmp-vb->version.s;
|
|
|
state=F_LF;
|
|
|
saved_state=L_PROTO;
|
|
@@ -1074,27 +1076,27 @@ parse_again:
|
|
|
state=F_CR;
|
|
|
break;
|
|
|
case FIN_UDP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->transport.len=tmp-vb->transport.s;
|
|
|
vb->proto=PROTO_UDP;
|
|
|
state=F_CR;
|
|
|
saved_state=F_HOST;
|
|
|
goto main_via;
|
|
|
case FIN_TCP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->transport.len=tmp-vb->transport.s;
|
|
|
vb->proto=PROTO_TCP;
|
|
|
state=F_CR;
|
|
|
saved_state=F_HOST;
|
|
|
goto main_via;
|
|
|
case FIN_SIP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->name.len=tmp-vb->name.s;
|
|
|
state=F_CR;
|
|
|
saved_state=L_VER;
|
|
|
break;
|
|
|
case FIN_VER:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->version.len=tmp-vb->version.s;
|
|
|
state=F_CR;
|
|
|
saved_state=L_PROTO;
|
|
@@ -1114,12 +1116,12 @@ parse_again:
|
|
|
case '/':
|
|
|
switch(state){
|
|
|
case FIN_SIP:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->name.len=tmp-vb->name.s;
|
|
|
state=F_VER;
|
|
|
break;
|
|
|
case FIN_VER:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->version.len=tmp-vb->version.s;
|
|
|
state=F_PROTO;
|
|
|
break;
|
|
@@ -1292,7 +1294,7 @@ parse_again:
|
|
|
case F_HOST:/*eat the spaces*/
|
|
|
break;
|
|
|
case P_HOST:
|
|
|
- *tmp=0;/*mark end of host*/
|
|
|
+ VIA_ZT(*tmp);/*mark end of host*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
state=L_PORT;
|
|
|
break;
|
|
@@ -1300,7 +1302,7 @@ parse_again:
|
|
|
case F_PORT:
|
|
|
break;
|
|
|
case P_PORT:
|
|
|
- *tmp=0; /*end of port */
|
|
|
+ VIA_ZT(*tmp); /*end of port */
|
|
|
vb->port_str.len=tmp-vb->port_str.s;
|
|
|
state=L_PARAM;
|
|
|
break;
|
|
@@ -1320,7 +1322,7 @@ parse_again:
|
|
|
case F_IP6HOST: /*eat the spaces*/
|
|
|
break;
|
|
|
case P_IP6HOST:
|
|
|
- *tmp=0; /*mark end of host*/
|
|
|
+ VIA_ZT(*tmp); /*mark end of host*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
state=L_PORT;
|
|
|
break;
|
|
@@ -1353,13 +1355,13 @@ parse_again:
|
|
|
state=F_LF;
|
|
|
break;
|
|
|
case P_HOST:
|
|
|
- *tmp=0;/*mark end of host*/
|
|
|
+ VIA_ZT(*tmp);/*mark end of host*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
saved_state=L_PORT;
|
|
|
state=F_LF;
|
|
|
break;
|
|
|
case P_PORT:
|
|
|
- *tmp=0; /*end of port */
|
|
|
+ VIA_ZT(*tmp); /*end of port */
|
|
|
vb->port_str.len=tmp-vb->port_str.s;
|
|
|
saved_state=L_PARAM;
|
|
|
state=F_LF;
|
|
@@ -1399,13 +1401,13 @@ parse_again:
|
|
|
state=F_CR;
|
|
|
break;
|
|
|
case P_HOST:
|
|
|
- *tmp=0;/*mark end of host*/
|
|
|
+ VIA_ZT(*tmp);/*mark end of host*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
saved_state=L_PORT;
|
|
|
state=F_CR;
|
|
|
break;
|
|
|
case P_PORT:
|
|
|
- *tmp=0; /*end of port */
|
|
|
+ VIA_ZT(*tmp); /*end of port */
|
|
|
vb->port_str.len=tmp-vb->port_str.s;
|
|
|
saved_state=L_PARAM;
|
|
|
state=F_CR;
|
|
@@ -1437,7 +1439,7 @@ parse_again:
|
|
|
case P_IP6HOST:
|
|
|
break;
|
|
|
case P_HOST:
|
|
|
- *tmp=0; /*mark end of host*/
|
|
|
+ VIA_ZT(*tmp); /*mark end of host*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
state=F_PORT;
|
|
|
break;
|
|
@@ -1489,13 +1491,13 @@ parse_again:
|
|
|
LOG(L_ERR, "ERROR:parse_via: bad ipv6 reference\n");
|
|
|
goto error;
|
|
|
case P_HOST:
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
state=F_PARAM;
|
|
|
param_start=tmp+1;
|
|
|
break;
|
|
|
case P_PORT:
|
|
|
- *tmp=0; /*mark the end*/
|
|
|
+ VIA_ZT(*tmp); /*mark the end*/
|
|
|
vb->port_str.len=tmp-vb->port_str.s;
|
|
|
case L_PORT:
|
|
|
case L_PARAM:
|
|
@@ -1552,12 +1554,12 @@ parse_again:
|
|
|
LOG(L_ERR, "ERROR:parse_via: bad ipv6 reference\n");
|
|
|
goto error;
|
|
|
case P_HOST:
|
|
|
- *tmp=0; /*mark the end*/
|
|
|
+ VIA_ZT(*tmp); /*mark the end*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
state=F_VIA;
|
|
|
break;
|
|
|
case P_PORT:
|
|
|
- *tmp=0; /*mark the end*/
|
|
|
+ VIA_ZT(*tmp); /*mark the end*/
|
|
|
vb->port_str.len=tmp-vb->port_str.s;
|
|
|
state=F_VIA;
|
|
|
break;
|
|
@@ -1607,19 +1609,19 @@ parse_again:
|
|
|
*tmp, state);
|
|
|
goto error;
|
|
|
case P_HOST:
|
|
|
- *tmp=0; /*mark the end*/
|
|
|
+ VIA_ZT(*tmp); /*mark the end*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
state=F_COMMENT;
|
|
|
c_nest++;
|
|
|
break;
|
|
|
case P_PORT:
|
|
|
- *tmp=0; /*mark the end*/
|
|
|
+ VIA_ZT(*tmp); /*mark the end*/
|
|
|
vb->port_str.len=tmp-vb->port_str.s;
|
|
|
state=F_COMMENT;
|
|
|
c_nest++;
|
|
|
break;
|
|
|
case P_PARAM:
|
|
|
- *tmp=0; /*mark the end*/
|
|
|
+ VIA_ZT(*tmp); /*mark the end*/
|
|
|
vb->params.len=tmp-vb->params.s;
|
|
|
state=F_COMMENT;
|
|
|
c_nest++;
|
|
@@ -1630,7 +1632,7 @@ parse_again:
|
|
|
state=F_COMMENT;
|
|
|
vb->params.len=tmp-vb->params.s;
|
|
|
c_nest++;
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
break;
|
|
|
case P_COMMENT:
|
|
|
case F_COMMENT:
|
|
@@ -1656,7 +1658,7 @@ parse_again:
|
|
|
c_nest--;
|
|
|
if(c_nest==0){
|
|
|
state=L_VIA;
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
vb->comment.len=tmp-vb->comment.s;
|
|
|
break;
|
|
|
}
|
|
@@ -1723,7 +1725,7 @@ parse_again:
|
|
|
case ']':
|
|
|
switch(state){
|
|
|
case P_IP6HOST:
|
|
|
- *tmp=0; /*mark the end*/
|
|
|
+ VIA_ZT(*tmp); /*mark the end*/
|
|
|
vb->host.len=tmp-vb->host.s;
|
|
|
state=L_PORT;
|
|
|
break;
|
|
@@ -1785,7 +1787,7 @@ parse_again:
|
|
|
case F_VIA:
|
|
|
vb->params.len=param->start+param->size
|
|
|
-vb->params.s;
|
|
|
- *tmp=0;
|
|
|
+ VIA_ZT(*tmp);
|
|
|
break;
|
|
|
case END_OF_HEADER:
|
|
|
vb->params.len=param->start+param->size
|
|
@@ -1901,8 +1903,8 @@ endofpacket:
|
|
|
if (vb->port_str.s){
|
|
|
vb->port=str2s((unsigned char*)vb->port_str.s, vb->port_str.len, &err);
|
|
|
if (err){
|
|
|
- LOG(L_ERR, "ERROR: parse_via: invalid port number <%s>\n",
|
|
|
- vb->port_str.s);
|
|
|
+ LOG(L_ERR, "ERROR: parse_via: invalid port number <%.*s>\n",
|
|
|
+ vb->port_str.len, vb->port_str.s);
|
|
|
goto error;
|
|
|
}
|
|
|
}
|
|
@@ -1914,8 +1916,8 @@ nextvia:
|
|
|
if (vb->port_str.s){
|
|
|
vb->port=str2s((unsigned char*)vb->port_str.s, vb->port_str.len, &err);
|
|
|
if (err){
|
|
|
- LOG(L_ERR, "ERROR: parse_via: invalid port number <%s>\n",
|
|
|
- vb->port_str.s);
|
|
|
+ LOG(L_ERR, "ERROR: parse_via: invalid port number <%.*s>\n",
|
|
|
+ vb->port_str.len, vb->port_str.s);
|
|
|
goto error;
|
|
|
}
|
|
|
}
|