Commit 498174e9 authored by bnc's avatar bnc Committed by Commit bot

Implement padding PUSH_PROMISE and HEADERS frames.

This lands server change 77795511 by raullenchai.

BUG=345769

Review URL: https://codereview.chromium.org/661743003

Cr-Commit-Position: refs/heads/master@{#300713}
parent f2afbee8
This diff is collapsed.
...@@ -336,7 +336,7 @@ class NET_EXPORT_PRIVATE SpdyFramer { ...@@ -336,7 +336,7 @@ class NET_EXPORT_PRIVATE SpdyFramer {
SPDY_AUTO_RESET, SPDY_AUTO_RESET,
SPDY_READING_COMMON_HEADER, SPDY_READING_COMMON_HEADER,
SPDY_CONTROL_FRAME_PAYLOAD, SPDY_CONTROL_FRAME_PAYLOAD,
SPDY_READ_PADDING_LENGTH, SPDY_READ_DATA_FRAME_PADDING_LENGTH,
SPDY_CONSUME_PADDING, SPDY_CONSUME_PADDING,
SPDY_IGNORE_REMAINING_PAYLOAD, SPDY_IGNORE_REMAINING_PAYLOAD,
SPDY_FORWARD_STREAM_FRAME, SPDY_FORWARD_STREAM_FRAME,
...@@ -601,6 +601,8 @@ class NET_EXPORT_PRIVATE SpdyFramer { ...@@ -601,6 +601,8 @@ class NET_EXPORT_PRIVATE SpdyFramer {
UnclosedStreamDataCompressorsOneByteAtATime); UnclosedStreamDataCompressorsOneByteAtATime);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
UncompressLargerThanFrameBufferInitialSize); UncompressLargerThanFrameBufferInitialSize);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
CreatePushPromiseThenContinuationUncompressed);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ReadLargeSettingsFrame); FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ReadLargeSettingsFrame);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
ReadLargeSettingsFrameInSmallChunks); ReadLargeSettingsFrameInSmallChunks);
...@@ -634,7 +636,7 @@ class NET_EXPORT_PRIVATE SpdyFramer { ...@@ -634,7 +636,7 @@ class NET_EXPORT_PRIVATE SpdyFramer {
size_t ProcessControlFrameHeaderBlock(const char* data, size_t ProcessControlFrameHeaderBlock(const char* data,
size_t len, size_t len,
bool is_hpack_header_block); bool is_hpack_header_block);
size_t ProcessFramePaddingLength(const char* data, size_t len); size_t ProcessDataFramePaddingLength(const char* data, size_t len);
size_t ProcessFramePadding(const char* data, size_t len); size_t ProcessFramePadding(const char* data, size_t len);
size_t ProcessDataFramePayload(const char* data, size_t len); size_t ProcessDataFramePayload(const char* data, size_t len);
size_t ProcessGoAwayFramePayload(const char* data, size_t len); size_t ProcessGoAwayFramePayload(const char* data, size_t len);
...@@ -672,7 +674,8 @@ class NET_EXPORT_PRIVATE SpdyFramer { ...@@ -672,7 +674,8 @@ class NET_EXPORT_PRIVATE SpdyFramer {
void WritePayloadWithContinuation(SpdyFrameBuilder* builder, void WritePayloadWithContinuation(SpdyFrameBuilder* builder,
const std::string& hpack_encoding, const std::string& hpack_encoding,
SpdyStreamId stream_id, SpdyStreamId stream_id,
SpdyFrameType type); SpdyFrameType type,
int padding_payload_len);
private: private:
// Deliver the given control frame's uncompressed headers block to the // Deliver the given control frame's uncompressed headers block to the
......
This diff is collapsed.
...@@ -847,7 +847,9 @@ class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithNameValueBlockIR { ...@@ -847,7 +847,9 @@ class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithNameValueBlockIR {
explicit SpdyHeadersIR(SpdyStreamId stream_id) explicit SpdyHeadersIR(SpdyStreamId stream_id)
: SpdyFrameWithNameValueBlockIR(stream_id), : SpdyFrameWithNameValueBlockIR(stream_id),
has_priority_(false), has_priority_(false),
priority_(0) {} priority_(0),
padded_(false),
padding_payload_len_(0) {}
void Visit(SpdyFrameVisitor* visitor) const override; void Visit(SpdyFrameVisitor* visitor) const override;
...@@ -856,10 +858,24 @@ class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithNameValueBlockIR { ...@@ -856,10 +858,24 @@ class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithNameValueBlockIR {
uint32 priority() const { return priority_; } uint32 priority() const { return priority_; }
void set_priority(SpdyPriority priority) { priority_ = priority; } void set_priority(SpdyPriority priority) { priority_ = priority; }
bool padded() const { return padded_; }
int padding_payload_len() const { return padding_payload_len_; }
void set_padding_len(int padding_len) {
DCHECK_GT(padding_len, 0);
DCHECK_LE(padding_len, kPaddingSizePerFrame);
padded_ = true;
// The pad field takes one octet on the wire.
padding_payload_len_ = padding_len - 1;
}
private: private:
bool has_priority_; bool has_priority_;
// 31-bit priority. // 31-bit priority.
uint32 priority_; uint32 priority_;
bool padded_;
int padding_payload_len_;
DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR); DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR);
}; };
...@@ -901,14 +917,30 @@ class NET_EXPORT_PRIVATE SpdyPushPromiseIR ...@@ -901,14 +917,30 @@ class NET_EXPORT_PRIVATE SpdyPushPromiseIR
public: public:
SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_stream_id) SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_stream_id)
: SpdyFrameWithNameValueBlockIR(stream_id), : SpdyFrameWithNameValueBlockIR(stream_id),
promised_stream_id_(promised_stream_id) {} promised_stream_id_(promised_stream_id),
padded_(false),
padding_payload_len_(0) {}
SpdyStreamId promised_stream_id() const { return promised_stream_id_; } SpdyStreamId promised_stream_id() const { return promised_stream_id_; }
void set_promised_stream_id(SpdyStreamId id) { promised_stream_id_ = id; } void set_promised_stream_id(SpdyStreamId id) { promised_stream_id_ = id; }
void Visit(SpdyFrameVisitor* visitor) const override; void Visit(SpdyFrameVisitor* visitor) const override;
bool padded() const { return padded_; }
int padding_payload_len() const { return padding_payload_len_; }
void set_padding_len(int padding_len) {
DCHECK_GT(padding_len, 0);
DCHECK_LE(padding_len, kPaddingSizePerFrame);
padded_ = true;
// The pad field takes one octet on the wire.
padding_payload_len_ = padding_len - 1;
}
private: private:
SpdyStreamId promised_stream_id_; SpdyStreamId promised_stream_id_;
bool padded_;
int padding_payload_len_;
DISALLOW_COPY_AND_ASSIGN(SpdyPushPromiseIR); DISALLOW_COPY_AND_ASSIGN(SpdyPushPromiseIR);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment