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

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

Issue 199843005: Implement padding for SPDY4/HTTP2 DATA frames. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nullptr => NULL & discard padding at SpdySession visitor call. Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_framer_test.cc ('k') | net/spdy/spdy_protocol.cc » ('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 2 and 3 5 // This file contains some protocol structures for use with SPDY 2 and 3
6 // The SPDY 2 spec can be found at: 6 // The SPDY 2 spec can be found at:
7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2 7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2
8 // The SPDY 3 spec can be found at: 8 // The SPDY 3 spec can be found at:
9 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3 9 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3
10 10
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 WINDOW_UPDATE, 284 WINDOW_UPDATE,
285 CREDENTIAL, // No longer valid. Kept for identifiability/enum order. 285 CREDENTIAL, // No longer valid. Kept for identifiability/enum order.
286 BLOCKED, 286 BLOCKED,
287 PUSH_PROMISE, 287 PUSH_PROMISE,
288 CONTINUATION, 288 CONTINUATION,
289 LAST_CONTROL_TYPE = CONTINUATION 289 LAST_CONTROL_TYPE = CONTINUATION
290 }; 290 };
291 291
292 // Flags on data packets. 292 // Flags on data packets.
293 enum SpdyDataFlags { 293 enum SpdyDataFlags {
294 DATA_FLAG_NONE = 0, 294 DATA_FLAG_NONE = 0x00,
295 DATA_FLAG_FIN = 1, 295 DATA_FLAG_FIN = 0x01,
296 DATA_FLAG_END_SEGMENT = 0x02,
297 DATA_FLAG_PAD_LOW = 0x10,
298 DATA_FLAG_PAD_HIGH = 0x20
296 }; 299 };
297 300
298 // Flags on control packets 301 // Flags on control packets
299 enum SpdyControlFlags { 302 enum SpdyControlFlags {
300 CONTROL_FLAG_NONE = 0, 303 CONTROL_FLAG_NONE = 0,
301 CONTROL_FLAG_FIN = 1, 304 CONTROL_FLAG_FIN = 1,
302 CONTROL_FLAG_UNIDIRECTIONAL = 2 305 CONTROL_FLAG_UNIDIRECTIONAL = 2
303 }; 306 };
304 307
305 enum SpdyPingFlags { 308 enum SpdyPingFlags {
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 // Performs deep copy on data. 479 // Performs deep copy on data.
477 SpdyDataIR(SpdyStreamId stream_id, const base::StringPiece& data); 480 SpdyDataIR(SpdyStreamId stream_id, const base::StringPiece& data);
478 481
479 // Use in conjunction with SetDataShallow() for shallow-copy on data. 482 // Use in conjunction with SetDataShallow() for shallow-copy on data.
480 explicit SpdyDataIR(SpdyStreamId stream_id); 483 explicit SpdyDataIR(SpdyStreamId stream_id);
481 484
482 virtual ~SpdyDataIR(); 485 virtual ~SpdyDataIR();
483 486
484 base::StringPiece data() const { return data_; } 487 base::StringPiece data() const { return data_; }
485 488
489 bool pad_low() const { return pad_low_; }
490
491 bool pad_high() const { return pad_high_; }
492
493 int padding_payload_len() const { return padding_payload_len_; }
494
495 void set_padding_len(int padding_len) {
496 // The padding_len should be in (0, 65535 + 2].
497 // Note that SpdyFramer::GetDataFrameMaximumPayload() enforces the overall
498 // payload size later so we actually can't pad more than 16375 bytes.
499 DCHECK_GT(padding_len, 0);
500 DCHECK_LT(padding_len, 65537);
501
502 if (padding_len <= 256) {
503 pad_low_ = true;
504 --padding_len;
505 } else {
506 pad_low_ = pad_high_ = true;
507 padding_len -= 2;
508 }
509 padding_payload_len_ = padding_len;
510 }
511
486 // Deep-copy of data (keep private copy). 512 // Deep-copy of data (keep private copy).
487 void SetDataDeep(const base::StringPiece& data) { 513 void SetDataDeep(const base::StringPiece& data) {
488 data_store_.reset(new std::string(data.data(), data.length())); 514 data_store_.reset(new std::string(data.data(), data.length()));
489 data_ = *(data_store_.get()); 515 data_ = *(data_store_.get());
490 } 516 }
491 517
492 // Shallow-copy of data (do not keep private copy). 518 // Shallow-copy of data (do not keep private copy).
493 void SetDataShallow(const base::StringPiece& data) { 519 void SetDataShallow(const base::StringPiece& data) {
494 data_store_.reset(); 520 data_store_.reset();
495 data_ = data; 521 data_ = data;
496 } 522 }
497 523
498 virtual void Visit(SpdyFrameVisitor* visitor) const OVERRIDE; 524 virtual void Visit(SpdyFrameVisitor* visitor) const OVERRIDE;
499 525
500 private: 526 private:
501 // Used to store data that this SpdyDataIR should own. 527 // Used to store data that this SpdyDataIR should own.
502 scoped_ptr<std::string> data_store_; 528 scoped_ptr<std::string> data_store_;
503 base::StringPiece data_; 529 base::StringPiece data_;
504 530
531 bool pad_low_;
532 bool pad_high_;
533 // padding_payload_len_ = desired padding length - len(padding length field).
534 int padding_payload_len_;
535
505 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR); 536 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR);
506 }; 537 };
507 538
508 class NET_EXPORT_PRIVATE SpdySynStreamIR 539 class NET_EXPORT_PRIVATE SpdySynStreamIR
509 : public SpdyFrameWithNameValueBlockIR { 540 : public SpdyFrameWithNameValueBlockIR {
510 public: 541 public:
511 explicit SpdySynStreamIR(SpdyStreamId stream_id) 542 explicit SpdySynStreamIR(SpdyStreamId stream_id)
512 : SpdyFrameWithNameValueBlockIR(stream_id), 543 : SpdyFrameWithNameValueBlockIR(stream_id),
513 associated_to_stream_id_(0), 544 associated_to_stream_id_(0),
514 priority_(0), 545 priority_(0),
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 SpdyFrameVisitor() {} 870 SpdyFrameVisitor() {}
840 virtual ~SpdyFrameVisitor() {} 871 virtual ~SpdyFrameVisitor() {}
841 872
842 private: 873 private:
843 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); 874 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor);
844 }; 875 };
845 876
846 } // namespace net 877 } // namespace net
847 878
848 #endif // NET_SPDY_SPDY_PROTOCOL_H_ 879 #endif // NET_SPDY_SPDY_PROTOCOL_H_
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer_test.cc ('k') | net/spdy/spdy_protocol.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698