Files
doris/be/src/http/http_parser.h
chenhao7253886 37b4cafe87 Change variable and namespace name in BE (#268)
Change 'palo' to 'doris'
2018-11-02 10:22:32 +08:00

68 lines
2.6 KiB
C++

// 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
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// 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.
#ifndef DORIS_BE_SRC_COMMON_UTIL_HTTP_PARSER_H
#define DORIS_BE_SRC_COMMON_UTIL_HTTP_PARSER_H
#include <stdint.h>
#include <ostream>
namespace doris {
struct HttpChunkParseCtx {
int state; // Parse state
size_t size; // Chunk size
size_t length; // minimal length need to read
HttpChunkParseCtx() : state(0), size(0), length(0) { }
};
std::ostream& operator<<(std::ostream& os, const HttpChunkParseCtx& ctx);
class HttpParser {
public:
enum ParseState {
PARSE_OK, // reach trunk data, you can read data
PARSE_AGAIN, // continue call this function
PARSE_DONE, // trunk is over
PARSE_ERROR, // parse failed.
};
// Used to parse http Chunked Transfer Coding(rfc2616 3.6.1)
// Params:
// buf network buffer's pointer, changed when receive data
// when this function return, *buf point to position where
// next call will begin processing
// buf_len length of receive http data
// ctx parse context, used to save parse state and data size
//
// Returns:
// PARSE_OK return this means we reach chunk-data, *buf point to begin of data
// size of chunk-data is saved in ctx->size. Caller need subtract size
// consumed from ctx->size before next call of this function.
// PARSE_AGAIN return this means that caller need to call this function with new data
// from network
// PARSE_DONE All of chunks readed
// PARSE_ERROR Error happend
static ParseState http_parse_chunked(const uint8_t** buf,
const int64_t buf_len,
HttpChunkParseCtx* ctx);
};
}
#endif