Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: net/spdy/core/spdy_protocol.h

Issue 2839373002: Implement SPDY_EXPORT and SPDY_EXPORT_PRIVATE macros. (Closed)
Patch Set: Rebase: manually resolve trivial merge conflicts. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/core/spdy_prefixed_buffer_reader.h ('k') | net/spdy/core/write_scheduler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains some protocol structures for use with SPDY 3 and HTTP 2 5 // This file contains some protocol structures for use with SPDY 3 and HTTP 2
6 // The SPDY 3 spec can be found at: 6 // The SPDY 3 spec can be found at:
7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3 7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3
8 8
9 #ifndef NET_SPDY_CORE_SPDY_PROTOCOL_H_ 9 #ifndef NET_SPDY_CORE_SPDY_PROTOCOL_H_
10 #define NET_SPDY_CORE_SPDY_PROTOCOL_H_ 10 #define NET_SPDY_CORE_SPDY_PROTOCOL_H_
11 11
12 #include <stddef.h> 12 #include <stddef.h>
13 #include <stdint.h> 13 #include <stdint.h>
14 14
15 #include <iosfwd> 15 #include <iosfwd>
16 #include <limits> 16 #include <limits>
17 #include <map> 17 #include <map>
18 #include <memory> 18 #include <memory>
19 #include <new> 19 #include <new>
20 #include <utility> 20 #include <utility>
21 21
22 #include "base/compiler_specific.h" 22 #include "base/compiler_specific.h"
23 #include "base/logging.h" 23 #include "base/logging.h"
24 #include "base/macros.h" 24 #include "base/macros.h"
25 #include "base/sys_byteorder.h" 25 #include "base/sys_byteorder.h"
26 #include "net/base/net_export.h"
27 #include "net/spdy/core/spdy_alt_svc_wire_format.h" 26 #include "net/spdy/core/spdy_alt_svc_wire_format.h"
28 #include "net/spdy/core/spdy_bitmasks.h" 27 #include "net/spdy/core/spdy_bitmasks.h"
29 #include "net/spdy/core/spdy_bug_tracker.h" 28 #include "net/spdy/core/spdy_bug_tracker.h"
30 #include "net/spdy/core/spdy_header_block.h" 29 #include "net/spdy/core/spdy_header_block.h"
30 #include "net/spdy/platform/api/spdy_export.h"
31 #include "net/spdy/platform/api/spdy_ptr_util.h" 31 #include "net/spdy/platform/api/spdy_ptr_util.h"
32 #include "net/spdy/platform/api/spdy_string.h" 32 #include "net/spdy/platform/api/spdy_string.h"
33 #include "net/spdy/platform/api/spdy_string_piece.h" 33 #include "net/spdy/platform/api/spdy_string_piece.h"
34 34
35 namespace net { 35 namespace net {
36 36
37 // A stream id is a 31 bit entity. 37 // A stream id is a 31 bit entity.
38 typedef uint32_t SpdyStreamId; 38 typedef uint32_t SpdyStreamId;
39 39
40 // Specifies the stream ID used to denote the current session (for 40 // Specifies the stream ID used to denote the current session (for
(...skipping 19 matching lines...) Expand all
60 60
61 // Maximum padding size in octets for one DATA or HEADERS or PUSH_PROMISE frame. 61 // Maximum padding size in octets for one DATA or HEADERS or PUSH_PROMISE frame.
62 const int32_t kPaddingSizePerFrame = 256; 62 const int32_t kPaddingSizePerFrame = 256;
63 63
64 // The HTTP/2 connection preface, which must be the first bytes sent by the 64 // The HTTP/2 connection preface, which must be the first bytes sent by the
65 // client upon starting an HTTP/2 connection, and which must be followed by a 65 // client upon starting an HTTP/2 connection, and which must be followed by a
66 // SETTINGS frame. Note that even though |kHttp2ConnectionHeaderPrefix| is 66 // SETTINGS frame. Note that even though |kHttp2ConnectionHeaderPrefix| is
67 // defined as a string literal with a null terminator, the actual connection 67 // defined as a string literal with a null terminator, the actual connection
68 // preface is only the first |kHttp2ConnectionHeaderPrefixSize| bytes, which 68 // preface is only the first |kHttp2ConnectionHeaderPrefixSize| bytes, which
69 // excludes the null terminator. 69 // excludes the null terminator.
70 NET_EXPORT_PRIVATE extern const char* const kHttp2ConnectionHeaderPrefix; 70 SPDY_EXPORT_PRIVATE extern const char* const kHttp2ConnectionHeaderPrefix;
71 const int kHttp2ConnectionHeaderPrefixSize = 24; 71 const int kHttp2ConnectionHeaderPrefixSize = 24;
72 72
73 // Wire values for HTTP2 frame types. 73 // Wire values for HTTP2 frame types.
74 enum class SpdyFrameType : uint8_t { 74 enum class SpdyFrameType : uint8_t {
75 DATA = 0x00, 75 DATA = 0x00,
76 HEADERS = 0x01, 76 HEADERS = 0x01,
77 PRIORITY = 0x02, 77 PRIORITY = 0x02,
78 RST_STREAM = 0x03, 78 RST_STREAM = 0x03,
79 SETTINGS = 0x04, 79 SETTINGS = 0x04,
80 PUSH_PROMISE = 0x05, 80 PUSH_PROMISE = 0x05,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 SETTINGS_INITIAL_WINDOW_SIZE = 0x4, 143 SETTINGS_INITIAL_WINDOW_SIZE = 0x4,
144 // The size of the largest frame payload that a receiver is willing to accept. 144 // The size of the largest frame payload that a receiver is willing to accept.
145 SETTINGS_MAX_FRAME_SIZE = 0x5, 145 SETTINGS_MAX_FRAME_SIZE = 0x5,
146 // The maximum size of header list that the sender is prepared to accept. 146 // The maximum size of header list that the sender is prepared to accept.
147 SETTINGS_MAX_HEADER_LIST_SIZE = 0x6, 147 SETTINGS_MAX_HEADER_LIST_SIZE = 0x6,
148 SETTINGS_MAX = SETTINGS_MAX_HEADER_LIST_SIZE 148 SETTINGS_MAX = SETTINGS_MAX_HEADER_LIST_SIZE
149 }; 149 };
150 150
151 // This explicit operator is needed, otherwise compiler finds 151 // This explicit operator is needed, otherwise compiler finds
152 // overloaded operator to be ambiguous. 152 // overloaded operator to be ambiguous.
153 NET_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out, 153 SPDY_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
154 SpdySettingsIds id); 154 SpdySettingsIds id);
155 155
156 // This operator is needed, because SpdyFrameType is an enum class, 156 // This operator is needed, because SpdyFrameType is an enum class,
157 // therefore implicit conversion to underlying integer type is not allowed. 157 // therefore implicit conversion to underlying integer type is not allowed.
158 NET_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out, 158 SPDY_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
159 SpdyFrameType frame_type); 159 SpdyFrameType frame_type);
160 160
161 using SettingsMap = std::map<SpdySettingsIds, uint32_t>; 161 using SettingsMap = std::map<SpdySettingsIds, uint32_t>;
162 162
163 // HTTP/2 error codes, RFC 7540 Section 7. 163 // HTTP/2 error codes, RFC 7540 Section 7.
164 enum SpdyErrorCode : uint32_t { 164 enum SpdyErrorCode : uint32_t {
165 ERROR_CODE_NO_ERROR = 0x0, 165 ERROR_CODE_NO_ERROR = 0x0,
166 ERROR_CODE_PROTOCOL_ERROR = 0x1, 166 ERROR_CODE_PROTOCOL_ERROR = 0x1,
167 ERROR_CODE_INTERNAL_ERROR = 0x2, 167 ERROR_CODE_INTERNAL_ERROR = 0x2,
168 ERROR_CODE_FLOW_CONTROL_ERROR = 0x3, 168 ERROR_CODE_FLOW_CONTROL_ERROR = 0x3,
169 ERROR_CODE_SETTINGS_TIMEOUT = 0x4, 169 ERROR_CODE_SETTINGS_TIMEOUT = 0x4,
(...skipping 12 matching lines...) Expand all
182 // A SPDY priority is a number between 0 and 7 (inclusive). 182 // A SPDY priority is a number between 0 and 7 (inclusive).
183 typedef uint8_t SpdyPriority; 183 typedef uint8_t SpdyPriority;
184 184
185 // Lowest and Highest here refer to SPDY priorities as described in 185 // Lowest and Highest here refer to SPDY priorities as described in
186 186
187 // https://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1#TOC-2.3.3- Stream-priority 187 // https://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1#TOC-2.3.3- Stream-priority
188 const SpdyPriority kV3HighestPriority = 0; 188 const SpdyPriority kV3HighestPriority = 0;
189 const SpdyPriority kV3LowestPriority = 7; 189 const SpdyPriority kV3LowestPriority = 7;
190 190
191 // Returns SPDY 3.x priority value clamped to the valid range of [0, 7]. 191 // Returns SPDY 3.x priority value clamped to the valid range of [0, 7].
192 NET_EXPORT_PRIVATE SpdyPriority ClampSpdy3Priority(SpdyPriority priority); 192 SPDY_EXPORT_PRIVATE SpdyPriority ClampSpdy3Priority(SpdyPriority priority);
193 193
194 // HTTP/2 stream weights are integers in range [1, 256], as specified in RFC 194 // HTTP/2 stream weights are integers in range [1, 256], as specified in RFC
195 // 7540 section 5.3.2. Default stream weight is defined in section 5.3.5. 195 // 7540 section 5.3.2. Default stream weight is defined in section 5.3.5.
196 const int kHttp2MinStreamWeight = 1; 196 const int kHttp2MinStreamWeight = 1;
197 const int kHttp2MaxStreamWeight = 256; 197 const int kHttp2MaxStreamWeight = 256;
198 const int kHttp2DefaultStreamWeight = 16; 198 const int kHttp2DefaultStreamWeight = 16;
199 199
200 // Returns HTTP/2 weight clamped to the valid range of [1, 256]. 200 // Returns HTTP/2 weight clamped to the valid range of [1, 256].
201 NET_EXPORT_PRIVATE int ClampHttp2Weight(int weight); 201 SPDY_EXPORT_PRIVATE int ClampHttp2Weight(int weight);
202 202
203 // Maps SPDY 3.x priority value in range [0, 7] to HTTP/2 weight value in range 203 // Maps SPDY 3.x priority value in range [0, 7] to HTTP/2 weight value in range
204 // [1, 256], where priority 0 (i.e. highest precedence) corresponds to maximum 204 // [1, 256], where priority 0 (i.e. highest precedence) corresponds to maximum
205 // weight 256 and priority 7 (lowest precedence) corresponds to minimum weight 205 // weight 256 and priority 7 (lowest precedence) corresponds to minimum weight
206 // 1. 206 // 1.
207 NET_EXPORT_PRIVATE int Spdy3PriorityToHttp2Weight(SpdyPriority priority); 207 SPDY_EXPORT_PRIVATE int Spdy3PriorityToHttp2Weight(SpdyPriority priority);
208 208
209 // Maps HTTP/2 weight value in range [1, 256] to SPDY 3.x priority value in 209 // Maps HTTP/2 weight value in range [1, 256] to SPDY 3.x priority value in
210 // range [0, 7], where minimum weight 1 corresponds to priority 7 (lowest 210 // range [0, 7], where minimum weight 1 corresponds to priority 7 (lowest
211 // precedence) and maximum weight 256 corresponds to priority 0 (highest 211 // precedence) and maximum weight 256 corresponds to priority 0 (highest
212 // precedence). 212 // precedence).
213 NET_EXPORT_PRIVATE SpdyPriority Http2WeightToSpdy3Priority(int weight); 213 SPDY_EXPORT_PRIVATE SpdyPriority Http2WeightToSpdy3Priority(int weight);
214 214
215 // Reserved ID for root stream of HTTP/2 stream dependency tree, as specified 215 // Reserved ID for root stream of HTTP/2 stream dependency tree, as specified
216 // in RFC 7540 section 5.3.1. 216 // in RFC 7540 section 5.3.1.
217 const unsigned int kHttp2RootStreamId = 0; 217 const unsigned int kHttp2RootStreamId = 0;
218 218
219 typedef uint64_t SpdyPingId; 219 typedef uint64_t SpdyPingId;
220 220
221 // Returns true if a given on-the-wire enumeration of a frame type is defined 221 // Returns true if a given on-the-wire enumeration of a frame type is defined
222 // in a standardized HTTP/2 specification, false otherwise. 222 // in a standardized HTTP/2 specification, false otherwise.
223 NET_EXPORT_PRIVATE bool IsDefinedFrameType(uint8_t frame_type_field); 223 SPDY_EXPORT_PRIVATE bool IsDefinedFrameType(uint8_t frame_type_field);
224 224
225 // Parses a frame type from an on-the-wire enumeration. 225 // Parses a frame type from an on-the-wire enumeration.
226 // Behavior is undefined for invalid frame type fields; consumers should first 226 // Behavior is undefined for invalid frame type fields; consumers should first
227 // use IsValidFrameType() to verify validity of frame type fields. 227 // use IsValidFrameType() to verify validity of frame type fields.
228 NET_EXPORT_PRIVATE SpdyFrameType ParseFrameType(uint8_t frame_type_field); 228 SPDY_EXPORT_PRIVATE SpdyFrameType ParseFrameType(uint8_t frame_type_field);
229 229
230 // Serializes a frame type to the on-the-wire value. 230 // Serializes a frame type to the on-the-wire value.
231 NET_EXPORT_PRIVATE uint8_t SerializeFrameType(SpdyFrameType frame_type); 231 SPDY_EXPORT_PRIVATE uint8_t SerializeFrameType(SpdyFrameType frame_type);
232 232
233 // (HTTP/2) All standard frame types except WINDOW_UPDATE are 233 // (HTTP/2) All standard frame types except WINDOW_UPDATE are
234 // (stream-specific xor connection-level). Returns false iff we know 234 // (stream-specific xor connection-level). Returns false iff we know
235 // the given frame type does not align with the given streamID. 235 // the given frame type does not align with the given streamID.
236 NET_EXPORT_PRIVATE bool IsValidHTTP2FrameStreamId( 236 SPDY_EXPORT_PRIVATE bool IsValidHTTP2FrameStreamId(
237 SpdyStreamId current_frame_stream_id, 237 SpdyStreamId current_frame_stream_id,
238 SpdyFrameType frame_type_field); 238 SpdyFrameType frame_type_field);
239 239
240 // Serialize |frame_type| to string for logging/debugging. 240 // Serialize |frame_type| to string for logging/debugging.
241 const char* FrameTypeToString(SpdyFrameType frame_type); 241 const char* FrameTypeToString(SpdyFrameType frame_type);
242 242
243 // If |wire_setting_id| is the on-the-wire representation of a defined SETTINGS 243 // If |wire_setting_id| is the on-the-wire representation of a defined SETTINGS
244 // parameter, parse it to |*setting_id| and return true. 244 // parameter, parse it to |*setting_id| and return true.
245 NET_EXPORT_PRIVATE bool ParseSettingsId(uint16_t wire_setting_id, 245 SPDY_EXPORT_PRIVATE bool ParseSettingsId(uint16_t wire_setting_id,
246 SpdySettingsIds* setting_id); 246 SpdySettingsIds* setting_id);
247 247
248 // Return if |id| corresponds to a defined setting; 248 // Return if |id| corresponds to a defined setting;
249 // stringify |id| to |*settings_id_string| regardless. 249 // stringify |id| to |*settings_id_string| regardless.
250 NET_EXPORT_PRIVATE bool SettingsIdToString(SpdySettingsIds id, 250 SPDY_EXPORT_PRIVATE bool SettingsIdToString(SpdySettingsIds id,
251 const char** settings_id_string); 251 const char** settings_id_string);
252 252
253 // Parse |wire_error_code| to a SpdyErrorCode. 253 // Parse |wire_error_code| to a SpdyErrorCode.
254 // Treat unrecognized error codes as INTERNAL_ERROR 254 // Treat unrecognized error codes as INTERNAL_ERROR
255 // as recommended by the HTTP/2 specification. 255 // as recommended by the HTTP/2 specification.
256 NET_EXPORT_PRIVATE SpdyErrorCode ParseErrorCode(uint32_t wire_error_code); 256 SPDY_EXPORT_PRIVATE SpdyErrorCode ParseErrorCode(uint32_t wire_error_code);
257 257
258 // Serialize RST_STREAM or GOAWAY frame error code to string 258 // Serialize RST_STREAM or GOAWAY frame error code to string
259 // for logging/debugging. 259 // for logging/debugging.
260 const char* ErrorCodeToString(SpdyErrorCode error_code); 260 const char* ErrorCodeToString(SpdyErrorCode error_code);
261 261
262 // Number of octets in the frame header. 262 // Number of octets in the frame header.
263 const size_t kFrameHeaderSize = 9; 263 const size_t kFrameHeaderSize = 9;
264 // Size, in bytes, of the data frame header. 264 // Size, in bytes, of the data frame header.
265 const size_t kDataFrameMinimumSize = kFrameHeaderSize; 265 const size_t kDataFrameMinimumSize = kFrameHeaderSize;
266 // Maximum possible configurable size of a frame in octets. 266 // Maximum possible configurable size of a frame in octets.
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 SpdyPriority spdy3_priority_; 368 SpdyPriority spdy3_priority_;
369 Http2StreamDependency http2_stream_dependency_; 369 Http2StreamDependency http2_stream_dependency_;
370 }; 370 };
371 }; 371 };
372 372
373 typedef StreamPrecedence<SpdyStreamId> SpdyStreamPrecedence; 373 typedef StreamPrecedence<SpdyStreamId> SpdyStreamPrecedence;
374 374
375 class SpdyFrameVisitor; 375 class SpdyFrameVisitor;
376 376
377 // Intermediate representation for HTTP2 frames. 377 // Intermediate representation for HTTP2 frames.
378 class NET_EXPORT_PRIVATE SpdyFrameIR { 378 class SPDY_EXPORT_PRIVATE SpdyFrameIR {
379 public: 379 public:
380 virtual ~SpdyFrameIR() {} 380 virtual ~SpdyFrameIR() {}
381 381
382 virtual void Visit(SpdyFrameVisitor* visitor) const = 0; 382 virtual void Visit(SpdyFrameVisitor* visitor) const = 0;
383 virtual SpdyFrameType frame_type() const = 0; 383 virtual SpdyFrameType frame_type() const = 0;
384 384
385 protected: 385 protected:
386 SpdyFrameIR() {} 386 SpdyFrameIR() {}
387 387
388 private: 388 private:
389 DISALLOW_COPY_AND_ASSIGN(SpdyFrameIR); 389 DISALLOW_COPY_AND_ASSIGN(SpdyFrameIR);
390 }; 390 };
391 391
392 // Abstract class intended to be inherited by IRs that have a stream associated 392 // Abstract class intended to be inherited by IRs that have a stream associated
393 // to them. 393 // to them.
394 class NET_EXPORT_PRIVATE SpdyFrameWithStreamIdIR : public SpdyFrameIR { 394 class SPDY_EXPORT_PRIVATE SpdyFrameWithStreamIdIR : public SpdyFrameIR {
395 public: 395 public:
396 ~SpdyFrameWithStreamIdIR() override {} 396 ~SpdyFrameWithStreamIdIR() override {}
397 SpdyStreamId stream_id() const { return stream_id_; } 397 SpdyStreamId stream_id() const { return stream_id_; }
398 void set_stream_id(SpdyStreamId stream_id) { 398 void set_stream_id(SpdyStreamId stream_id) {
399 DCHECK_EQ(0u, stream_id & ~kStreamIdMask); 399 DCHECK_EQ(0u, stream_id & ~kStreamIdMask);
400 stream_id_ = stream_id; 400 stream_id_ = stream_id;
401 } 401 }
402 402
403 protected: 403 protected:
404 explicit SpdyFrameWithStreamIdIR(SpdyStreamId stream_id) { 404 explicit SpdyFrameWithStreamIdIR(SpdyStreamId stream_id) {
405 set_stream_id(stream_id); 405 set_stream_id(stream_id);
406 } 406 }
407 407
408 private: 408 private:
409 SpdyStreamId stream_id_; 409 SpdyStreamId stream_id_;
410 410
411 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithStreamIdIR); 411 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithStreamIdIR);
412 }; 412 };
413 413
414 // Abstract class intended to be inherited by IRs that have the option of a FIN 414 // Abstract class intended to be inherited by IRs that have the option of a FIN
415 // flag. Implies SpdyFrameWithStreamIdIR. 415 // flag. Implies SpdyFrameWithStreamIdIR.
416 class NET_EXPORT_PRIVATE SpdyFrameWithFinIR : public SpdyFrameWithStreamIdIR { 416 class SPDY_EXPORT_PRIVATE SpdyFrameWithFinIR : public SpdyFrameWithStreamIdIR {
417 public: 417 public:
418 ~SpdyFrameWithFinIR() override {} 418 ~SpdyFrameWithFinIR() override {}
419 bool fin() const { return fin_; } 419 bool fin() const { return fin_; }
420 void set_fin(bool fin) { fin_ = fin; } 420 void set_fin(bool fin) { fin_ = fin; }
421 421
422 protected: 422 protected:
423 explicit SpdyFrameWithFinIR(SpdyStreamId stream_id) 423 explicit SpdyFrameWithFinIR(SpdyStreamId stream_id)
424 : SpdyFrameWithStreamIdIR(stream_id), 424 : SpdyFrameWithStreamIdIR(stream_id),
425 fin_(false) {} 425 fin_(false) {}
426 426
427 private: 427 private:
428 bool fin_; 428 bool fin_;
429 429
430 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithFinIR); 430 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithFinIR);
431 }; 431 };
432 432
433 // Abstract class intended to be inherited by IRs that contain a header 433 // Abstract class intended to be inherited by IRs that contain a header
434 // block. Implies SpdyFrameWithFinIR. 434 // block. Implies SpdyFrameWithFinIR.
435 class NET_EXPORT_PRIVATE SpdyFrameWithHeaderBlockIR 435 class SPDY_EXPORT_PRIVATE SpdyFrameWithHeaderBlockIR
436 : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) { 436 : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) {
437 public: 437 public:
438 ~SpdyFrameWithHeaderBlockIR() override; 438 ~SpdyFrameWithHeaderBlockIR() override;
439 439
440 const SpdyHeaderBlock& header_block() const { return header_block_; } 440 const SpdyHeaderBlock& header_block() const { return header_block_; }
441 void set_header_block(SpdyHeaderBlock header_block) { 441 void set_header_block(SpdyHeaderBlock header_block) {
442 // Deep copy. 442 // Deep copy.
443 header_block_ = std::move(header_block); 443 header_block_ = std::move(header_block);
444 } 444 }
445 void SetHeader(SpdyStringPiece name, SpdyStringPiece value) { 445 void SetHeader(SpdyStringPiece name, SpdyStringPiece value) {
446 header_block_[name] = value; 446 header_block_[name] = value;
447 } 447 }
448 bool end_headers() const { return end_headers_; } 448 bool end_headers() const { return end_headers_; }
449 void set_end_headers(bool end_headers) { end_headers_ = end_headers; } 449 void set_end_headers(bool end_headers) { end_headers_ = end_headers; }
450 450
451 protected: 451 protected:
452 SpdyFrameWithHeaderBlockIR(SpdyStreamId stream_id, 452 SpdyFrameWithHeaderBlockIR(SpdyStreamId stream_id,
453 SpdyHeaderBlock header_block); 453 SpdyHeaderBlock header_block);
454 454
455 private: 455 private:
456 SpdyHeaderBlock header_block_; 456 SpdyHeaderBlock header_block_;
457 bool end_headers_ = false; 457 bool end_headers_ = false;
458 458
459 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithHeaderBlockIR); 459 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithHeaderBlockIR);
460 }; 460 };
461 461
462 class NET_EXPORT_PRIVATE SpdyDataIR 462 class SPDY_EXPORT_PRIVATE SpdyDataIR
463 : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) { 463 : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) {
464 public: 464 public:
465 // Performs a deep copy on data. 465 // Performs a deep copy on data.
466 SpdyDataIR(SpdyStreamId stream_id, SpdyStringPiece data); 466 SpdyDataIR(SpdyStreamId stream_id, SpdyStringPiece data);
467 467
468 // Performs a deep copy on data. 468 // Performs a deep copy on data.
469 SpdyDataIR(SpdyStreamId stream_id, const char* data); 469 SpdyDataIR(SpdyStreamId stream_id, const char* data);
470 470
471 // Moves data into data_store_. Makes a copy if passed a non-movable string. 471 // Moves data into data_store_. Makes a copy if passed a non-movable string.
472 SpdyDataIR(SpdyStreamId stream_id, SpdyString data); 472 SpdyDataIR(SpdyStreamId stream_id, SpdyString data);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 const char* data_; 523 const char* data_;
524 size_t data_len_; 524 size_t data_len_;
525 525
526 bool padded_; 526 bool padded_;
527 // padding_payload_len_ = desired padding length - len(padding length field). 527 // padding_payload_len_ = desired padding length - len(padding length field).
528 int padding_payload_len_; 528 int padding_payload_len_;
529 529
530 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR); 530 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR);
531 }; 531 };
532 532
533 class NET_EXPORT_PRIVATE SpdyRstStreamIR : public SpdyFrameWithStreamIdIR { 533 class SPDY_EXPORT_PRIVATE SpdyRstStreamIR : public SpdyFrameWithStreamIdIR {
534 public: 534 public:
535 SpdyRstStreamIR(SpdyStreamId stream_id, SpdyErrorCode error_code); 535 SpdyRstStreamIR(SpdyStreamId stream_id, SpdyErrorCode error_code);
536 536
537 ~SpdyRstStreamIR() override; 537 ~SpdyRstStreamIR() override;
538 538
539 SpdyErrorCode error_code() const { return error_code_; } 539 SpdyErrorCode error_code() const { return error_code_; }
540 void set_error_code(SpdyErrorCode error_code) { error_code_ = error_code; } 540 void set_error_code(SpdyErrorCode error_code) { error_code_ = error_code; }
541 541
542 void Visit(SpdyFrameVisitor* visitor) const override; 542 void Visit(SpdyFrameVisitor* visitor) const override;
543 543
544 SpdyFrameType frame_type() const override; 544 SpdyFrameType frame_type() const override;
545 545
546 private: 546 private:
547 SpdyErrorCode error_code_; 547 SpdyErrorCode error_code_;
548 548
549 DISALLOW_COPY_AND_ASSIGN(SpdyRstStreamIR); 549 DISALLOW_COPY_AND_ASSIGN(SpdyRstStreamIR);
550 }; 550 };
551 551
552 class NET_EXPORT_PRIVATE SpdySettingsIR : public SpdyFrameIR { 552 class SPDY_EXPORT_PRIVATE SpdySettingsIR : public SpdyFrameIR {
553 public: 553 public:
554 SpdySettingsIR(); 554 SpdySettingsIR();
555 ~SpdySettingsIR() override; 555 ~SpdySettingsIR() override;
556 556
557 // Overwrites as appropriate. 557 // Overwrites as appropriate.
558 const SettingsMap& values() const { return values_; } 558 const SettingsMap& values() const { return values_; }
559 void AddSetting(SpdySettingsIds id, int32_t value) { values_[id] = value; } 559 void AddSetting(SpdySettingsIds id, int32_t value) { values_[id] = value; }
560 560
561 bool is_ack() const { return is_ack_; } 561 bool is_ack() const { return is_ack_; }
562 void set_is_ack(bool is_ack) { 562 void set_is_ack(bool is_ack) {
563 is_ack_ = is_ack; 563 is_ack_ = is_ack;
564 } 564 }
565 565
566 void Visit(SpdyFrameVisitor* visitor) const override; 566 void Visit(SpdyFrameVisitor* visitor) const override;
567 567
568 SpdyFrameType frame_type() const override; 568 SpdyFrameType frame_type() const override;
569 569
570 private: 570 private:
571 SettingsMap values_; 571 SettingsMap values_;
572 bool is_ack_; 572 bool is_ack_;
573 573
574 DISALLOW_COPY_AND_ASSIGN(SpdySettingsIR); 574 DISALLOW_COPY_AND_ASSIGN(SpdySettingsIR);
575 }; 575 };
576 576
577 class NET_EXPORT_PRIVATE SpdyPingIR : public SpdyFrameIR { 577 class SPDY_EXPORT_PRIVATE SpdyPingIR : public SpdyFrameIR {
578 public: 578 public:
579 explicit SpdyPingIR(SpdyPingId id) : id_(id), is_ack_(false) {} 579 explicit SpdyPingIR(SpdyPingId id) : id_(id), is_ack_(false) {}
580 SpdyPingId id() const { return id_; } 580 SpdyPingId id() const { return id_; }
581 581
582 bool is_ack() const { return is_ack_; } 582 bool is_ack() const { return is_ack_; }
583 void set_is_ack(bool is_ack) { is_ack_ = is_ack; } 583 void set_is_ack(bool is_ack) { is_ack_ = is_ack; }
584 584
585 void Visit(SpdyFrameVisitor* visitor) const override; 585 void Visit(SpdyFrameVisitor* visitor) const override;
586 586
587 SpdyFrameType frame_type() const override; 587 SpdyFrameType frame_type() const override;
588 588
589 private: 589 private:
590 SpdyPingId id_; 590 SpdyPingId id_;
591 bool is_ack_; 591 bool is_ack_;
592 592
593 DISALLOW_COPY_AND_ASSIGN(SpdyPingIR); 593 DISALLOW_COPY_AND_ASSIGN(SpdyPingIR);
594 }; 594 };
595 595
596 class NET_EXPORT_PRIVATE SpdyGoAwayIR : public SpdyFrameIR { 596 class SPDY_EXPORT_PRIVATE SpdyGoAwayIR : public SpdyFrameIR {
597 public: 597 public:
598 // References description, doesn't copy it, so description must outlast 598 // References description, doesn't copy it, so description must outlast
599 // this SpdyGoAwayIR. 599 // this SpdyGoAwayIR.
600 SpdyGoAwayIR(SpdyStreamId last_good_stream_id, 600 SpdyGoAwayIR(SpdyStreamId last_good_stream_id,
601 SpdyErrorCode error_code, 601 SpdyErrorCode error_code,
602 SpdyStringPiece description); 602 SpdyStringPiece description);
603 603
604 // References description, doesn't copy it, so description must outlast 604 // References description, doesn't copy it, so description must outlast
605 // this SpdyGoAwayIR. 605 // this SpdyGoAwayIR.
606 SpdyGoAwayIR(SpdyStreamId last_good_stream_id, 606 SpdyGoAwayIR(SpdyStreamId last_good_stream_id,
(...skipping 26 matching lines...) Expand all
633 633
634 private: 634 private:
635 SpdyStreamId last_good_stream_id_; 635 SpdyStreamId last_good_stream_id_;
636 SpdyErrorCode error_code_; 636 SpdyErrorCode error_code_;
637 const SpdyString description_store_; 637 const SpdyString description_store_;
638 const SpdyStringPiece description_; 638 const SpdyStringPiece description_;
639 639
640 DISALLOW_COPY_AND_ASSIGN(SpdyGoAwayIR); 640 DISALLOW_COPY_AND_ASSIGN(SpdyGoAwayIR);
641 }; 641 };
642 642
643 class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR { 643 class SPDY_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR {
644 public: 644 public:
645 explicit SpdyHeadersIR(SpdyStreamId stream_id) 645 explicit SpdyHeadersIR(SpdyStreamId stream_id)
646 : SpdyHeadersIR(stream_id, SpdyHeaderBlock()) {} 646 : SpdyHeadersIR(stream_id, SpdyHeaderBlock()) {}
647 SpdyHeadersIR(SpdyStreamId stream_id, SpdyHeaderBlock header_block) 647 SpdyHeadersIR(SpdyStreamId stream_id, SpdyHeaderBlock header_block)
648 : SpdyFrameWithHeaderBlockIR(stream_id, std::move(header_block)) {} 648 : SpdyFrameWithHeaderBlockIR(stream_id, std::move(header_block)) {}
649 649
650 void Visit(SpdyFrameVisitor* visitor) const override; 650 void Visit(SpdyFrameVisitor* visitor) const override;
651 651
652 SpdyFrameType frame_type() const override; 652 SpdyFrameType frame_type() const override;
653 653
(...skipping 19 matching lines...) Expand all
673 bool has_priority_ = false; 673 bool has_priority_ = false;
674 int weight_ = kHttp2DefaultStreamWeight; 674 int weight_ = kHttp2DefaultStreamWeight;
675 SpdyStreamId parent_stream_id_ = 0; 675 SpdyStreamId parent_stream_id_ = 0;
676 bool exclusive_ = false; 676 bool exclusive_ = false;
677 bool padded_ = false; 677 bool padded_ = false;
678 int padding_payload_len_ = 0; 678 int padding_payload_len_ = 0;
679 679
680 DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR); 680 DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR);
681 }; 681 };
682 682
683 class NET_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameWithStreamIdIR { 683 class SPDY_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameWithStreamIdIR {
684 public: 684 public:
685 SpdyWindowUpdateIR(SpdyStreamId stream_id, int32_t delta) 685 SpdyWindowUpdateIR(SpdyStreamId stream_id, int32_t delta)
686 : SpdyFrameWithStreamIdIR(stream_id) { 686 : SpdyFrameWithStreamIdIR(stream_id) {
687 set_delta(delta); 687 set_delta(delta);
688 } 688 }
689 int32_t delta() const { return delta_; } 689 int32_t delta() const { return delta_; }
690 void set_delta(int32_t delta) { 690 void set_delta(int32_t delta) {
691 DCHECK_LE(0, delta); 691 DCHECK_LE(0, delta);
692 DCHECK_LE(delta, kSpdyMaximumWindowSize); 692 DCHECK_LE(delta, kSpdyMaximumWindowSize);
693 delta_ = delta; 693 delta_ = delta;
694 } 694 }
695 695
696 void Visit(SpdyFrameVisitor* visitor) const override; 696 void Visit(SpdyFrameVisitor* visitor) const override;
697 697
698 SpdyFrameType frame_type() const override; 698 SpdyFrameType frame_type() const override;
699 699
700 private: 700 private:
701 int32_t delta_; 701 int32_t delta_;
702 702
703 DISALLOW_COPY_AND_ASSIGN(SpdyWindowUpdateIR); 703 DISALLOW_COPY_AND_ASSIGN(SpdyWindowUpdateIR);
704 }; 704 };
705 705
706 class NET_EXPORT_PRIVATE SpdyPushPromiseIR : public SpdyFrameWithHeaderBlockIR { 706 class SPDY_EXPORT_PRIVATE SpdyPushPromiseIR
707 : public SpdyFrameWithHeaderBlockIR {
707 public: 708 public:
708 SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_stream_id) 709 SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_stream_id)
709 : SpdyPushPromiseIR(stream_id, promised_stream_id, SpdyHeaderBlock()) {} 710 : SpdyPushPromiseIR(stream_id, promised_stream_id, SpdyHeaderBlock()) {}
710 SpdyPushPromiseIR(SpdyStreamId stream_id, 711 SpdyPushPromiseIR(SpdyStreamId stream_id,
711 SpdyStreamId promised_stream_id, 712 SpdyStreamId promised_stream_id,
712 SpdyHeaderBlock header_block) 713 SpdyHeaderBlock header_block)
713 : SpdyFrameWithHeaderBlockIR(stream_id, std::move(header_block)), 714 : SpdyFrameWithHeaderBlockIR(stream_id, std::move(header_block)),
714 promised_stream_id_(promised_stream_id), 715 promised_stream_id_(promised_stream_id),
715 padded_(false), 716 padded_(false),
716 padding_payload_len_(0) {} 717 padding_payload_len_(0) {}
(...skipping 15 matching lines...) Expand all
732 733
733 private: 734 private:
734 SpdyStreamId promised_stream_id_; 735 SpdyStreamId promised_stream_id_;
735 736
736 bool padded_; 737 bool padded_;
737 int padding_payload_len_; 738 int padding_payload_len_;
738 739
739 DISALLOW_COPY_AND_ASSIGN(SpdyPushPromiseIR); 740 DISALLOW_COPY_AND_ASSIGN(SpdyPushPromiseIR);
740 }; 741 };
741 742
742 class NET_EXPORT_PRIVATE SpdyContinuationIR : public SpdyFrameWithStreamIdIR { 743 class SPDY_EXPORT_PRIVATE SpdyContinuationIR : public SpdyFrameWithStreamIdIR {
743 public: 744 public:
744 explicit SpdyContinuationIR(SpdyStreamId stream_id); 745 explicit SpdyContinuationIR(SpdyStreamId stream_id);
745 ~SpdyContinuationIR() override; 746 ~SpdyContinuationIR() override;
746 747
747 void Visit(SpdyFrameVisitor* visitor) const override; 748 void Visit(SpdyFrameVisitor* visitor) const override;
748 749
749 SpdyFrameType frame_type() const override; 750 SpdyFrameType frame_type() const override;
750 751
751 bool end_headers() const { return end_headers_; } 752 bool end_headers() const { return end_headers_; }
752 void set_end_headers(bool end_headers) {end_headers_ = end_headers;} 753 void set_end_headers(bool end_headers) {end_headers_ = end_headers;}
753 const SpdyString& encoding() const { return *encoding_; } 754 const SpdyString& encoding() const { return *encoding_; }
754 void take_encoding(std::unique_ptr<SpdyString> encoding) { 755 void take_encoding(std::unique_ptr<SpdyString> encoding) {
755 encoding_ = std::move(encoding); 756 encoding_ = std::move(encoding);
756 } 757 }
757 758
758 private: 759 private:
759 std::unique_ptr<SpdyString> encoding_; 760 std::unique_ptr<SpdyString> encoding_;
760 bool end_headers_; 761 bool end_headers_;
761 DISALLOW_COPY_AND_ASSIGN(SpdyContinuationIR); 762 DISALLOW_COPY_AND_ASSIGN(SpdyContinuationIR);
762 }; 763 };
763 764
764 class NET_EXPORT_PRIVATE SpdyAltSvcIR : public SpdyFrameWithStreamIdIR { 765 class SPDY_EXPORT_PRIVATE SpdyAltSvcIR : public SpdyFrameWithStreamIdIR {
765 public: 766 public:
766 explicit SpdyAltSvcIR(SpdyStreamId stream_id); 767 explicit SpdyAltSvcIR(SpdyStreamId stream_id);
767 ~SpdyAltSvcIR() override; 768 ~SpdyAltSvcIR() override;
768 769
769 SpdyString origin() const { return origin_; } 770 SpdyString origin() const { return origin_; }
770 const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector() const { 771 const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector() const {
771 return altsvc_vector_; 772 return altsvc_vector_;
772 } 773 }
773 774
774 void set_origin(SpdyString origin) { origin_ = std::move(origin); } 775 void set_origin(SpdyString origin) { origin_ = std::move(origin); }
775 void add_altsvc(const SpdyAltSvcWireFormat::AlternativeService& altsvc) { 776 void add_altsvc(const SpdyAltSvcWireFormat::AlternativeService& altsvc) {
776 altsvc_vector_.push_back(altsvc); 777 altsvc_vector_.push_back(altsvc);
777 } 778 }
778 779
779 void Visit(SpdyFrameVisitor* visitor) const override; 780 void Visit(SpdyFrameVisitor* visitor) const override;
780 781
781 SpdyFrameType frame_type() const override; 782 SpdyFrameType frame_type() const override;
782 783
783 private: 784 private:
784 SpdyString origin_; 785 SpdyString origin_;
785 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_; 786 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_;
786 DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR); 787 DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR);
787 }; 788 };
788 789
789 class NET_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameWithStreamIdIR { 790 class SPDY_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameWithStreamIdIR {
790 public: 791 public:
791 SpdyPriorityIR(SpdyStreamId stream_id, 792 SpdyPriorityIR(SpdyStreamId stream_id,
792 SpdyStreamId parent_stream_id, 793 SpdyStreamId parent_stream_id,
793 int weight, 794 int weight,
794 bool exclusive) 795 bool exclusive)
795 : SpdyFrameWithStreamIdIR(stream_id), 796 : SpdyFrameWithStreamIdIR(stream_id),
796 parent_stream_id_(parent_stream_id), 797 parent_stream_id_(parent_stream_id),
797 weight_(weight), 798 weight_(weight),
798 exclusive_(exclusive) {} 799 exclusive_(exclusive) {}
799 SpdyStreamId parent_stream_id() const { return parent_stream_id_; } 800 SpdyStreamId parent_stream_id() const { return parent_stream_id_; }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 SpdyFrameVisitor() {} 912 SpdyFrameVisitor() {}
912 virtual ~SpdyFrameVisitor() {} 913 virtual ~SpdyFrameVisitor() {}
913 914
914 private: 915 private:
915 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); 916 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor);
916 }; 917 };
917 918
918 } // namespace net 919 } // namespace net
919 920
920 #endif // NET_SPDY_CORE_SPDY_PROTOCOL_H_ 921 #endif // NET_SPDY_CORE_SPDY_PROTOCOL_H_
OLDNEW
« no previous file with comments | « net/spdy/core/spdy_prefixed_buffer_reader.h ('k') | net/spdy/core/write_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698