|
@@ -39,16 +39,16 @@ enum {
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
-enum {
|
|
|
|
- START_TO, DISPLAY_QUOTED, E_DISPLAY_QUOTED, DISPLAY_TOKEN,
|
|
|
|
- S_URI_ENCLOSED, URI_ENCLOSED, E_URI_ENCLOSED,
|
|
|
|
|
|
+enum {
|
|
|
|
+ START_TO, DISPLAY_QUOTED, E_DISPLAY_QUOTED, DISPLAY_TOKEN,
|
|
|
|
+ S_URI_ENCLOSED, URI_ENCLOSED, E_URI_ENCLOSED,
|
|
URI_OR_TOKEN, MAYBE_URI_END, END, F_CR, F_LF, F_CRLF
|
|
URI_OR_TOKEN, MAYBE_URI_END, END, F_CR, F_LF, F_CRLF
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
-enum {
|
|
|
|
- S_PARA_NAME=20, PARA_NAME, S_EQUAL, S_PARA_VALUE, TAG1, TAG2,
|
|
|
|
- TAG3, PARA_VALUE_TOKEN , PARA_VALUE_QUOTED, E_PARA_VALUE, PARA_START
|
|
|
|
|
|
+enum {
|
|
|
|
+ S_PARA_NAME=20, PARA_NAME, S_EQUAL, S_PARA_VALUE, TAG1, TAG2,
|
|
|
|
+ TAG3, PARA_VALUE_TOKEN , PARA_VALUE_QUOTED, E_PARA_VALUE
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
@@ -78,9 +78,8 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
char *tmp;
|
|
char *tmp;
|
|
|
|
|
|
param=0;
|
|
param=0;
|
|
- status=PARA_START;
|
|
|
|
- saved_status=PARA_START;
|
|
|
|
-
|
|
|
|
|
|
+ status=E_PARA_VALUE;
|
|
|
|
+ saved_status=E_PARA_VALUE;
|
|
for( tmp=buffer; tmp<end; tmp++)
|
|
for( tmp=buffer; tmp<end; tmp++)
|
|
{
|
|
{
|
|
switch(*tmp)
|
|
switch(*tmp)
|
|
@@ -95,12 +94,10 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
case TAG1:
|
|
case TAG1:
|
|
case TAG2:
|
|
case TAG2:
|
|
param->name.len = tmp-param->name.s;
|
|
param->name.len = tmp-param->name.s;
|
|
- *tmp=0;
|
|
|
|
status = S_EQUAL;
|
|
status = S_EQUAL;
|
|
break;
|
|
break;
|
|
case PARA_VALUE_TOKEN:
|
|
case PARA_VALUE_TOKEN:
|
|
param->value.len = tmp-param->value.s;
|
|
param->value.len = tmp-param->value.s;
|
|
- *tmp=0;
|
|
|
|
status = E_PARA_VALUE;
|
|
status = E_PARA_VALUE;
|
|
add_param( param , to_b );
|
|
add_param( param , to_b );
|
|
break;
|
|
break;
|
|
@@ -128,13 +125,11 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
case TAG1:
|
|
case TAG1:
|
|
case TAG2:
|
|
case TAG2:
|
|
param->name.len = tmp-param->name.s;
|
|
param->name.len = tmp-param->name.s;
|
|
- *tmp=0;
|
|
|
|
saved_status = S_EQUAL;
|
|
saved_status = S_EQUAL;
|
|
status = F_LF;
|
|
status = F_LF;
|
|
break;
|
|
break;
|
|
case PARA_VALUE_TOKEN:
|
|
case PARA_VALUE_TOKEN:
|
|
param->value.len = tmp-param->value.s;
|
|
param->value.len = tmp-param->value.s;
|
|
- *tmp=0;
|
|
|
|
saved_status = E_PARA_VALUE;
|
|
saved_status = E_PARA_VALUE;
|
|
status = F_LF;
|
|
status = F_LF;
|
|
add_param( param , to_b );
|
|
add_param( param , to_b );
|
|
@@ -168,13 +163,11 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
case TAG1:
|
|
case TAG1:
|
|
case TAG2:
|
|
case TAG2:
|
|
param->name.len = tmp-param->name.s;
|
|
param->name.len = tmp-param->name.s;
|
|
- *tmp=0;
|
|
|
|
saved_status = S_EQUAL;
|
|
saved_status = S_EQUAL;
|
|
status = F_CR;
|
|
status = F_CR;
|
|
break;
|
|
break;
|
|
case PARA_VALUE_TOKEN:
|
|
case PARA_VALUE_TOKEN:
|
|
param->value.len = tmp-param->value.s;
|
|
param->value.len = tmp-param->value.s;
|
|
- *tmp=0;
|
|
|
|
saved_status = E_PARA_VALUE;
|
|
saved_status = E_PARA_VALUE;
|
|
status = F_CR;
|
|
status = F_CR;
|
|
add_param( param , to_b );
|
|
add_param( param , to_b );
|
|
@@ -191,6 +184,34 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
|
|
+ case 0:
|
|
|
|
+ switch (status)
|
|
|
|
+ {
|
|
|
|
+#ifndef NO_PINGTEL_TAG_HACK
|
|
|
|
+ case TAG3:
|
|
|
|
+ param->type = TAG_PARAM;
|
|
|
|
+ param->name.len = 3;
|
|
|
|
+ status = S_EQUAL;
|
|
|
|
+ case S_EQUAL:
|
|
|
|
+ case S_PARA_VALUE:
|
|
|
|
+ saved_status=status;
|
|
|
|
+ goto endofheader;
|
|
|
|
+#endif
|
|
|
|
+ case PARA_VALUE_TOKEN:
|
|
|
|
+ status = E_PARA_VALUE;
|
|
|
|
+ param->value.len = tmp-param->value.s;
|
|
|
|
+ add_param( param , to_b );
|
|
|
|
+ case E_PARA_VALUE:
|
|
|
|
+ saved_status = status;
|
|
|
|
+ goto endofheader;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ LOG( L_ERR , "ERROR: parse_to_param : "
|
|
|
|
+ "unexpected char [%c] in status %d: <<%.*s>> .\n",
|
|
|
|
+ *tmp,status, (int)(tmp-buffer), buffer);
|
|
|
|
+ goto error;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
case '\\':
|
|
case '\\':
|
|
switch (status)
|
|
switch (status)
|
|
{
|
|
{
|
|
@@ -219,7 +240,6 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
break;
|
|
break;
|
|
case PARA_VALUE_QUOTED:
|
|
case PARA_VALUE_QUOTED:
|
|
param->value.len=tmp-param->value.s-1 ;
|
|
param->value.len=tmp-param->value.s-1 ;
|
|
- *tmp = 0;
|
|
|
|
add_param( param , to_b );
|
|
add_param( param , to_b );
|
|
status = E_PARA_VALUE;
|
|
status = E_PARA_VALUE;
|
|
break;
|
|
break;
|
|
@@ -258,8 +278,6 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
case PARA_VALUE_TOKEN:
|
|
case PARA_VALUE_TOKEN:
|
|
param->value.len=tmp-param->value.s;
|
|
param->value.len=tmp-param->value.s;
|
|
add_param(param,to_b);
|
|
add_param(param,to_b);
|
|
- case PARA_START:
|
|
|
|
- *tmp=0;
|
|
|
|
case E_PARA_VALUE:
|
|
case E_PARA_VALUE:
|
|
param = (struct to_param*)
|
|
param = (struct to_param*)
|
|
pkg_malloc(sizeof(struct to_param));
|
|
pkg_malloc(sizeof(struct to_param));
|
|
@@ -398,7 +416,6 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
case TAG1:
|
|
case TAG1:
|
|
case TAG2:
|
|
case TAG2:
|
|
param->name.len = tmp-param->name.s;
|
|
param->name.len = tmp-param->name.s;
|
|
- *tmp=0;
|
|
|
|
status = S_PARA_VALUE;
|
|
status = S_PARA_VALUE;
|
|
break;
|
|
break;
|
|
case S_EQUAL:
|
|
case S_EQUAL:
|
|
@@ -419,6 +436,11 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
|
|
default:
|
|
default:
|
|
switch (status)
|
|
switch (status)
|
|
{
|
|
{
|
|
|
|
+ case TAG1:
|
|
|
|
+ case TAG2:
|
|
|
|
+ case TAG3:
|
|
|
|
+ status = PARA_NAME;
|
|
|
|
+ break;
|
|
case PARA_VALUE_TOKEN:
|
|
case PARA_VALUE_TOKEN:
|
|
case PARA_NAME:
|
|
case PARA_NAME:
|
|
case PARA_VALUE_QUOTED:
|
|
case PARA_VALUE_QUOTED:
|
|
@@ -459,9 +481,9 @@ endofheader:
|
|
return tmp;
|
|
return tmp;
|
|
|
|
|
|
error:
|
|
error:
|
|
- LOG(L_ERR, "to_param parse error\n");
|
|
|
|
if (param) pkg_free(param);
|
|
if (param) pkg_free(param);
|
|
to_b->error=PARSE_ERROR;
|
|
to_b->error=PARSE_ERROR;
|
|
|
|
+ *returned_status = status;
|
|
return tmp;
|
|
return tmp;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -476,7 +498,7 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
|
|
|
|
|
|
status=START_TO;
|
|
status=START_TO;
|
|
to_b->error=PARSE_OK;
|
|
to_b->error=PARSE_OK;
|
|
- foo=0;
|
|
|
|
|
|
+ foo=0;
|
|
|
|
|
|
for( tmp=buffer; tmp<end; tmp++)
|
|
for( tmp=buffer; tmp<end; tmp++)
|
|
{
|
|
{
|
|
@@ -494,7 +516,6 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
|
|
break;
|
|
break;
|
|
case URI_ENCLOSED:
|
|
case URI_ENCLOSED:
|
|
to_b->uri.len = tmp - to_b->uri.s;
|
|
to_b->uri.len = tmp - to_b->uri.s;
|
|
- //*tmp = 0;
|
|
|
|
status = E_URI_ENCLOSED;
|
|
status = E_URI_ENCLOSED;
|
|
break;
|
|
break;
|
|
case URI_OR_TOKEN:
|
|
case URI_OR_TOKEN:
|
|
@@ -554,6 +575,22 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
|
|
+ case 0:
|
|
|
|
+ switch (status)
|
|
|
|
+ {
|
|
|
|
+ case URI_OR_TOKEN:
|
|
|
|
+ case MAYBE_URI_END:
|
|
|
|
+ to_b->uri.len = tmp - to_b->uri.s;
|
|
|
|
+ case END:
|
|
|
|
+ saved_status = status = END;
|
|
|
|
+ goto endofheader;
|
|
|
|
+ default:
|
|
|
|
+ LOG( L_ERR , "ERROR: parse_to : unexpected char [%c] "
|
|
|
|
+ "in status %d: <<%.*s>> .\n",
|
|
|
|
+ *tmp,status, (int)(tmp-buffer), buffer);
|
|
|
|
+ goto error;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
case '\\':
|
|
case '\\':
|
|
switch (status)
|
|
switch (status)
|
|
{
|
|
{
|
|
@@ -606,7 +643,6 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
|
|
case DISPLAY_QUOTED:
|
|
case DISPLAY_QUOTED:
|
|
break;
|
|
break;
|
|
case URI_ENCLOSED:
|
|
case URI_ENCLOSED:
|
|
- //*tmp = 0;
|
|
|
|
case E_URI_ENCLOSED:
|
|
case E_URI_ENCLOSED:
|
|
to_b->uri.len = tmp - to_b->uri.s;
|
|
to_b->uri.len = tmp - to_b->uri.s;
|
|
status = END;
|
|
status = END;
|
|
@@ -659,7 +695,6 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
|
|
case END:
|
|
case END:
|
|
to_b->body.len = tmp-to_b->body.s;
|
|
to_b->body.len = tmp-to_b->body.s;
|
|
tmp = parse_to_param(tmp,end,to_b,&saved_status);
|
|
tmp = parse_to_param(tmp,end,to_b,&saved_status);
|
|
- //if (foo) *foo=0;
|
|
|
|
goto endofheader;
|
|
goto endofheader;
|
|
case F_CRLF:
|
|
case F_CRLF:
|
|
case F_LF:
|
|
case F_LF:
|
|
@@ -710,12 +745,10 @@ endofheader:
|
|
/* check if error*/
|
|
/* check if error*/
|
|
switch(status){
|
|
switch(status){
|
|
case MAYBE_URI_END:
|
|
case MAYBE_URI_END:
|
|
- //*foo=0;
|
|
|
|
to_b->uri.len = foo - to_b->uri.s;
|
|
to_b->uri.len = foo - to_b->uri.s;
|
|
case END:
|
|
case END:
|
|
to_b->body.len = tmp - to_b->body.s;
|
|
to_b->body.len = tmp - to_b->body.s;
|
|
case E_PARA_VALUE:
|
|
case E_PARA_VALUE:
|
|
- *(tmp-1)=0;
|
|
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
LOG(L_ERR, "ERROR: parse_to: invalid To - unexpected "
|
|
LOG(L_ERR, "ERROR: parse_to: invalid To - unexpected "
|
|
@@ -725,7 +758,6 @@ endofheader:
|
|
return tmp;
|
|
return tmp;
|
|
|
|
|
|
error:
|
|
error:
|
|
- LOG(L_ERR, "to parse error\n");
|
|
|
|
to_b->error=PARSE_ERROR;
|
|
to_b->error=PARSE_ERROR;
|
|
return tmp;
|
|
return tmp;
|
|
|
|
|