OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef NET_TOOLS_QUIC_TEST_TOOLS_TEST_TOOLS_HTTP_MESSAGE_H_ | |
6 #define NET_TOOLS_QUIC_TEST_TOOLS_TEST_TOOLS_HTTP_MESSAGE_H_ | |
7 | |
8 #include <string> | |
9 #include <vector> | |
10 | |
11 #include "base/strings/string_piece.h" | |
12 #include "net/tools/balsa/balsa_enums.h" | |
13 #include "net/tools/balsa/balsa_headers.h" | |
14 | |
15 namespace net { | |
16 namespace tools { | |
17 namespace test { | |
18 | |
19 class HttpConstants { | |
20 public: | |
21 enum Version { | |
22 HTTP_UNKNOWN = 0, | |
23 HTTP_0_9, | |
24 HTTP_1_0, | |
25 HTTP_1_1 | |
26 }; | |
27 | |
28 enum Method { | |
29 UNKNOWN_METHOD = 0, | |
30 OPTIONS, | |
31 GET, | |
32 HEAD, | |
33 POST, | |
34 PUT, | |
35 DELETE, | |
36 TRACE, | |
37 CONNECT, | |
38 | |
39 MKCOL, | |
40 UNLOCK, | |
41 }; | |
42 }; | |
43 | |
44 // Stripped down wrapper class which basically contains headers and a body. | |
45 class HTTPMessage { | |
46 public: | |
47 typedef HttpConstants::Version Version; | |
48 typedef HttpConstants::Method Method; | |
49 | |
50 // Convenient functions to map strings into enums. The string passed in is | |
51 // not assumed to be NULL-terminated. | |
52 static Version StringToVersion(base::StringPiece str); | |
53 static Method StringToMethod(base::StringPiece str); | |
54 | |
55 static const char* MethodToString(Method method); | |
56 static const char* VersionToString(Version version); | |
57 | |
58 // Default constructor makes an empty HTTP/1.1 GET request. This is typically | |
59 // used to construct a message that will be Initialize()-ed. | |
60 HTTPMessage(); | |
61 | |
62 // Build a request message | |
63 HTTPMessage(Version version, Method request, const std::string& path); | |
64 | |
65 virtual ~HTTPMessage(); | |
66 | |
67 const std::string& body() const { return body_; } | |
68 | |
69 // Adds a header line to the message. | |
70 void AddHeader(const std::string& header, const std::string& value); | |
71 | |
72 // Removes a header line from the message. | |
73 void RemoveHeader(const std::string& header); | |
74 | |
75 // A utility function which calls RemoveHeader followed by AddHeader. | |
76 void ReplaceHeader(const std::string& header, const std::string& value); | |
77 | |
78 // Adds a body and the optional content-length header field (omitted to test | |
79 // read until close test case). To generate a message that has a header field | |
80 // of 0 content-length, call AddBody("", true). | |
81 // Multiple calls to AddBody()/AddChunkedBody() has the effect of overwriting | |
82 // the previous entry without warning. | |
83 void AddBody(const std::string& body, bool add_content_length); | |
84 | |
85 bool has_complete_message() const { return has_complete_message_; } | |
86 void set_has_complete_message(bool value) { has_complete_message_ = value; } | |
87 | |
88 // Do some basic http message consistency checks like: | |
89 // - Valid transfer-encoding header | |
90 // - Valid content-length header | |
91 // - Messages we expect to be complete are complete. | |
92 // This check can be disabled by setting skip_message_validation. | |
93 void ValidateMessage() const; | |
94 | |
95 bool skip_message_validation() const { return skip_message_validation_; } | |
96 void set_skip_message_validation(bool value) { | |
97 skip_message_validation_ = value; | |
98 } | |
99 | |
100 // Allow direct access to the body string. This should be used with caution: | |
101 // it will not update the request headers like AddBody and AddChunkedBody do. | |
102 void set_body(const std::string& body) { body_ = body; } | |
103 | |
104 const BalsaHeaders* headers() const { return &headers_; } | |
105 BalsaHeaders* headers() { return &headers_; } | |
106 | |
107 protected: | |
108 BalsaHeaders headers_; | |
109 | |
110 std::string body_; // the body with chunked framing/gzip compression | |
111 | |
112 bool is_request_; | |
113 | |
114 // True if the message should be considered complete during serialization. | |
115 // Used by SPDY and Streamed RPC clients to decide wherever or not | |
116 // to include fin flags and during message validation (if enabled). | |
117 bool has_complete_message_; | |
118 | |
119 // Allows disabling message validation when creating test messages | |
120 // that are intentionally invalid. | |
121 bool skip_message_validation_; | |
122 | |
123 private: | |
124 void InitializeFields(); | |
125 | |
126 DISALLOW_COPY_AND_ASSIGN(HTTPMessage); | |
127 }; | |
128 | |
129 } // namespace test | |
130 } // namespace tools | |
131 } // namespace net | |
132 | |
133 #endif // NET_TOOLS_QUIC_TEST_TOOLS_TEST_TOOLS_HTTP_MESSAGE_H_ | |
OLD | NEW |