нововведение: QoS (пока пустой). добавил чтение настроек модема, пока что оно не работает в браузере и не все параметры есть. найден баг с крашем приложения при получении параметров dpdm и acm
This commit is contained in:
@@ -70,6 +70,12 @@ namespace http::server {
|
||||
|
||||
RequestParser::result_type RequestParser::consume(Request &req, char input) {
|
||||
switch (state_) {
|
||||
case expecting_payload:
|
||||
req.payload.push_back(input);
|
||||
if (req.payload.size() <= contentLenghtHeader - 1) {
|
||||
return indeterminate;
|
||||
}
|
||||
return good;
|
||||
case method_start:
|
||||
if (!is_char(input) || is_ctl(input) || is_tspecial(input)) {
|
||||
return bad;
|
||||
@@ -82,36 +88,34 @@ namespace http::server {
|
||||
if (input == ' ') {
|
||||
state_ = uri;
|
||||
return indeterminate;
|
||||
} else if (!is_char(input) || is_ctl(input) || is_tspecial(input)) {
|
||||
return bad;
|
||||
} else {
|
||||
req.method.push_back(input);
|
||||
return indeterminate;
|
||||
}
|
||||
if (!is_char(input) || is_ctl(input) || is_tspecial(input)) {
|
||||
return bad;
|
||||
}
|
||||
req.method.push_back(input);
|
||||
return indeterminate;
|
||||
case uri:
|
||||
if (input == ' ') {
|
||||
state_ = http_version_h;
|
||||
return indeterminate;
|
||||
} else if (is_ctl(input)) {
|
||||
return bad;
|
||||
} else {
|
||||
req.queryUri.push_back(input);
|
||||
return indeterminate;
|
||||
}
|
||||
if (is_ctl(input)) {
|
||||
return bad;
|
||||
}
|
||||
req.queryUri.push_back(input);
|
||||
return indeterminate;
|
||||
case http_version_h:
|
||||
if (input == 'H') {
|
||||
state_ = http_version_t_1;
|
||||
return indeterminate;
|
||||
} else {
|
||||
return bad;
|
||||
}
|
||||
return bad;
|
||||
case http_version_t_1:
|
||||
if (input == 'T') {
|
||||
state_ = http_version_t_2;
|
||||
return indeterminate;
|
||||
} else {
|
||||
return bad;
|
||||
}
|
||||
return bad;
|
||||
case http_version_t_2:
|
||||
if (input == 'T') {
|
||||
state_ = http_version_p;
|
||||
@@ -210,12 +214,12 @@ namespace http::server {
|
||||
if (input == ':') {
|
||||
state_ = space_before_header_value;
|
||||
return indeterminate;
|
||||
} else if (!is_char(input) || is_ctl(input) || is_tspecial(input)) {
|
||||
return bad;
|
||||
} else {
|
||||
req.headers.back().name.push_back(input);
|
||||
return indeterminate;
|
||||
}
|
||||
if (!is_char(input) || is_ctl(input) || is_tspecial(input)) {
|
||||
return bad;
|
||||
}
|
||||
req.headers.back().name.push_back(input);
|
||||
return indeterminate;
|
||||
case space_before_header_value:
|
||||
if (input == ' ') {
|
||||
state_ = header_value;
|
||||
@@ -249,15 +253,12 @@ namespace http::server {
|
||||
}
|
||||
contentLenghtHeader = std::stol(content_len);
|
||||
state_ = expecting_payload;
|
||||
if (contentLenghtHeader > HTTP_MAX_PAYLOAD) {
|
||||
return bad;
|
||||
}
|
||||
return indeterminate;
|
||||
}
|
||||
return bad;
|
||||
case expecting_payload:
|
||||
req.payload.push_back(input);
|
||||
if (req.payload.size() <= contentLenghtHeader - 1) {
|
||||
return indeterminate;
|
||||
}
|
||||
return good;
|
||||
|
||||
default:
|
||||
return bad;
|
||||
|
Reference in New Issue
Block a user