3 * @brief HTTP Request Message Header
5 * Copyright (C) 2009 NTT COMWARE Corporation.
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 **********************************************************************/
24 #ifndef __HTTPREQUEST_H__
25 #define __HTTPREQUEST_H__
27 #include <boost/multi_index_container.hpp>
28 #include <boost/multi_index/member.hpp>
29 #include <boost/multi_index/hashed_index.hpp>
30 #include <boost/multi_index/sequenced_index.hpp>
32 #include "httprequest_enum.h"
33 #include "logger_wrapper.h"
35 using boost::multi_index_container;
36 using namespace boost::multi_index;
38 struct field_map; // tag
39 typedef std::pair<std::string, std::string> field; // header field
40 typedef multi_index_container<
43 sequenced<>, // header field order
44 hashed_non_unique< tag<field_map>, member<field, std::string, &field::first> >
47 typedef header_container::index_iterator<field_map>::type field_map_iterator;
48 typedef std::pair<field_map_iterator, field_map_iterator> field_range;
50 //! HTTP Request Class (RFC2616)
55 std::string _request_uri;
56 std::string _http_version;
58 * _header : keep header fields order and fast key lookup.
61 * The order in which header fields with the same field-name are
62 * received is therefore significant to the interpretation of
63 * the combined field value, and thus a proxy MUST NOT change
64 * the order of these field values when a message is forwarded.
66 header_container _header;
68 std::string incomplete;
69 std::string raw_request;
74 http_request( std::string );
78 std::string method( std::string );
79 std::string request_uri();
80 std::string request_uri( std::string );
81 std::string http_version();
82 std::string http_version( std::string );
83 field_range header( std::string );
84 void header( std::string, std::string );
85 std::string message();
86 std::string message( std::string );
88 std::string request_line();
89 std::string as_string();
90 void parse( std::string );
94 #endif //__HTTPREQUEST_H__