summaryrefslogtreecommitdiffstats
path: root/src/lib/http/http_header.h
blob: 35d4c17db576a80953ebbfe918381607bc56d574 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Copyright (C) 2017-2019 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#ifndef HTTP_HEADER_H
#define HTTP_HEADER_H

#include <boost/shared_ptr.hpp>
#include <string>

namespace isc {
namespace http {

/// @brief Represents HTTP header including a header name and value.
///
/// It includes methods for retrieving header name and value in lower case
/// and for case insensitive comparison of header values.
class HttpHeader {
public:

    /// @brief Constructor.
    ///
    /// @param header_name Header name.
    /// @param header_value Header value.
    explicit HttpHeader(const std::string& header_name,
                        const std::string& header_value = "");

    /// @brief Returns header name.
    std::string getName() const {
        return (header_name_);
    }

    /// @brief Returns header value.
    std::string getValue() const {
        return (header_value_);
    }

    /// @brief Returns header value as unsigned integer.
    ///
    /// @throw BadValue if the header value is not a valid number.
    uint64_t getUint64Value() const;

    /// @brief Returns lower case header name.
    std::string getLowerCaseName() const;

    /// @brief Returns lower case header value.
    std::string getLowerCaseValue() const;

    /// @brief Case insensitive comparison of header value.
    ///
    /// @param v Value to be compared.
    ///
    /// @return true if header value is equal, false otherwise.
    bool isValueEqual(const std::string& v) const;

private:

    std::string header_name_;  ///< Header name.
    std::string header_value_; ///< Header value.
};

/// @brief Pointer to the @c HttpHeader class.
typedef boost::shared_ptr<HttpHeader> HttpHeaderPtr;

/// @brief Represents HTTP Host header.
class HostHttpHeader : public HttpHeader {
public:

    /// @brief Constructor.
    ///
    /// @param header_value Host header value. The default is empty
    /// string.
    explicit HostHttpHeader(const std::string& header_value = "")
        : HttpHeader("Host", header_value) {
    }
};

/// @brief Pointer to the HTTP host header.
typedef boost::shared_ptr<HostHttpHeader> HostHttpHeaderPtr;

} // end of namespace isc::http
} // end of namespace isc

#endif // HTTP_HEADER_H