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 {
SPDY_AUTO_RESET,
SPDY_READING_COMMON_HEADER,
SPDY_CONTROL_FRAME_PAYLOAD,
SPDY_READ_PADDING_LENGTH,
SPDY_READ_DATA_FRAME_PADDING_LENGTH,
SPDY_CONSUME_PADDING,
SPDY_IGNORE_REMAINING_PAYLOAD,
SPDY_FORWARD_STREAM_FRAME,
......@@ -601,6 +601,8 @@ class NET_EXPORT_PRIVATE SpdyFramer {
UnclosedStreamDataCompressorsOneByteAtATime);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
UncompressLargerThanFrameBufferInitialSize);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
CreatePushPromiseThenContinuationUncompressed);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ReadLargeSettingsFrame);
FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
ReadLargeSettingsFrameInSmallChunks);
......@@ -634,7 +636,7 @@ class NET_EXPORT_PRIVATE SpdyFramer {
size_t ProcessControlFrameHeaderBlock(const char* data,
size_t len,
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 ProcessDataFramePayload(const char* data, size_t len);
size_t ProcessGoAwayFramePayload(const char* data, size_t len);
......@@ -672,7 +674,8 @@ class NET_EXPORT_PRIVATE SpdyFramer {
void WritePayloadWithContinuation(SpdyFrameBuilder* builder,
const std::string& hpack_encoding,
SpdyStreamId stream_id,
SpdyFrameType type);
SpdyFrameType type,
int padding_payload_len);
private:
// Deliver the given control frame's uncompressed headers block to the
......
This diff is collapsed.
......@@ -845,9 +845,11 @@ class NET_EXPORT_PRIVATE SpdyGoAwayIR : public SpdyFrameIR {
class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithNameValueBlockIR {
public:
explicit SpdyHeadersIR(SpdyStreamId stream_id)
: SpdyFrameWithNameValueBlockIR(stream_id),
has_priority_(false),
priority_(0) {}
: SpdyFrameWithNameValueBlockIR(stream_id),
has_priority_(false),
priority_(0),
padded_(false),
padding_payload_len_(0) {}
void Visit(SpdyFrameVisitor* visitor) const override;
......@@ -856,10 +858,24 @@ class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithNameValueBlockIR {
uint32 priority() const { return 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:
bool has_priority_;
// 31-bit priority.
uint32 priority_;
bool padded_;
int padding_payload_len_;
DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR);
};
......@@ -901,14 +917,30 @@ class NET_EXPORT_PRIVATE SpdyPushPromiseIR
public:
SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_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_; }
void set_promised_stream_id(SpdyStreamId id) { promised_stream_id_ = id; }
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:
SpdyStreamId promised_stream_id_;
bool padded_;
int padding_payload_len_;
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