blob: a0f1475ea96ff4b30258a1ca8ea1a06404ff1a0d [file]
/*
* 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 HTTP_H_E7A06C65_4FCF_46C0_8C97_455BEB9A3DE8
#define HTTP_H_E7A06C65_4FCF_46C0_8C97_455BEB9A3DE8
struct spdy_io_stream;
namespace spdy { struct key_value_block; }
// Send a HTTP error response on the given SPDY stream.
void http_send_error(spdy_io_stream *, TSHttpStatus);
// Send a HTTP response (HTTP header + MIME headers).
void http_send_response(spdy_io_stream *, TSMBuffer, TSMLoc);
// Send a chunk of the HTTP body content.
void http_send_content(spdy_io_stream *, TSIOBufferReader);
void debug_http_header(const spdy_io_stream *, TSMBuffer, TSMLoc);
struct scoped_http_header
{
explicit scoped_http_header(TSMBuffer b);
scoped_http_header(TSMBuffer, const spdy::key_value_block&);
scoped_http_header(TSMBuffer b, TSMLoc h)
: header(h), buffer(b) {
}
~scoped_http_header() {
if (header != TS_NULL_MLOC) {
TSHttpHdrDestroy(buffer, header);
TSHandleMLocRelease(buffer, TS_NULL_MLOC, header);
}
}
operator bool() const {
return buffer != nullptr && header != TS_NULL_MLOC;
}
operator TSMLoc() const {
return header;
}
TSMLoc get() {
return header;
}
TSMLoc release() {
TSMLoc tmp = TS_NULL_MLOC;
std::swap(tmp, header);
return tmp;
}
private:
TSMLoc header;
TSMBuffer buffer;
};
struct http_parser
{
http_parser();
~http_parser();
ssize_t parse(TSIOBufferReader);
TSHttpParser parser;
scoped_mbuffer mbuffer;
scoped_http_header header;
bool complete;
};
#endif /* HTTP_H_E7A06C65_4FCF_46C0_8C97_455BEB9A3DE8 */
/* vim: set sw=4 ts=4 tw=79 et : */