apreq_parser_urlencoded.c revision 6ac28b74a504006c016d4df3fb84d2cd2e373942
/*
** Licensed to the Apache Software Foundation (ASF) under one or more
** contributor license agreements. See the NOTICE file distributed with
** this work for additional information regarding copyright ownership.
** The ASF licenses this file to You under the Apache License, Version 2.0
** (the "License"); you may not use this file except in compliance with
** the License. You may obtain a copy of the License at
**
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
#include "apreq_parser.h"
#include "apreq_util.h"
#include "apreq_error.h"
#define PARSER_STATUS_CHECK(PREFIX) do { \
return APREQ_ERROR_GENERAL; \
return APR_SUCCESS; \
return APR_INCOMPLETE; \
} while (0);
struct url_ctx {
enum {
} status;
};
/******************** application/x-www-form-urlencoded ********************/
{
apreq_value_t *v;
apr_bucket *e, *f;
apr_status_t s;
if (nlen == 0)
return APR_EBADARG;
*(const apreq_value_t **)&v = ¶m->v;
e = APR_BRIGADE_FIRST(bb);
while (!APR_BUCKET_IS_EOS(e)) {
&len, APR_BLOCK_READ);
if (s != APR_SUCCESS)
return s;
e = APR_BUCKET_NEXT(e);
if (nlen == 0) {
break;
}
}
while (!APR_BUCKET_IS_EOS(e)) {
&len, APR_BLOCK_READ);
if (s != APR_SUCCESS)
return s;
e = APR_BUCKET_NEXT(e);
if (vlen == 0) {
break;
}
}
if (s != APR_SUCCESS)
return s;
if (s != APR_SUCCESS)
return s;
case APREQ_CHARSET_UTF8:
if (charset == APREQ_CHARSET_ASCII)
case APREQ_CHARSET_ASCII:
break;
case APREQ_CHARSET_LATIN1:
if (charset != APREQ_CHARSET_CP1252)
break;
case APREQ_CHARSET_CP1252:
}
while ((f = APR_BRIGADE_FIRST(bb)) != e)
*p = param;
return APR_SUCCESS;
}
{
apr_bucket *e;
}
else
for (e = APR_BUCKET_NEXT(e);
e = APR_BUCKET_NEXT(e))
{
const char *data;
apr_status_t s;
if (APR_BUCKET_IS_EOS(e)) {
s = APR_SUCCESS;
}
else {
if (s == APR_SUCCESS) {
apreq_value_table_add(¶m->v, t);
}
else {
}
}
return s;
}
if ( s != APR_SUCCESS ) {
return s;
}
case URL_NAME:
case '=':
apr_bucket_split(e, off);
off = 0;
e = APR_BUCKET_NEXT(e);
goto parse_url_bucket;
default:
}
}
break;
case URL_VALUE:
case '&':
case ';':
apr_bucket_split(e, off);
if (s != APR_SUCCESS) {
return s;
}
apreq_value_table_add(¶m->v, t);
goto parse_url_brigade;
default:
}
}
break;
default:
; /* not reached */
}
}
return APR_INCOMPLETE;
}