| OLD | NEW |
| 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 #ifndef NET_SPDY_CORE_SPDY_FRAME_BUILDER_H_ | 5 #ifndef NET_SPDY_CORE_SPDY_FRAME_BUILDER_H_ |
| 6 #define NET_SPDY_CORE_SPDY_FRAME_BUILDER_H_ | 6 #define NET_SPDY_CORE_SPDY_FRAME_BUILDER_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 bool WriteUInt64(uint64_t value) { | 103 bool WriteUInt64(uint64_t value) { |
| 104 uint32_t upper = base::HostToNet32(static_cast<uint32_t>(value >> 32)); | 104 uint32_t upper = base::HostToNet32(static_cast<uint32_t>(value >> 32)); |
| 105 uint32_t lower = base::HostToNet32(static_cast<uint32_t>(value)); | 105 uint32_t lower = base::HostToNet32(static_cast<uint32_t>(value)); |
| 106 return (WriteBytes(&upper, sizeof(upper)) && | 106 return (WriteBytes(&upper, sizeof(upper)) && |
| 107 WriteBytes(&lower, sizeof(lower))); | 107 WriteBytes(&lower, sizeof(lower))); |
| 108 } | 108 } |
| 109 bool WriteStringPiece16(const SpdyStringPiece& value); | 109 bool WriteStringPiece16(const SpdyStringPiece& value); |
| 110 bool WriteStringPiece32(const SpdyStringPiece& value); | 110 bool WriteStringPiece32(const SpdyStringPiece& value); |
| 111 bool WriteBytes(const void* data, uint32_t data_len); | 111 bool WriteBytes(const void* data, uint32_t data_len); |
| 112 | 112 |
| 113 // Update (in-place) the length field in the frame being built to reflect the | |
| 114 // given length. | |
| 115 // The framer parameter is used to determine version-specific location and | |
| 116 // size information of the length field to be written, and must be initialized | |
| 117 // with the correct version for the frame being written. | |
| 118 bool OverwriteLength(const SpdyFramer& framer, size_t length); | |
| 119 | |
| 120 private: | 113 private: |
| 121 FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableBuffer); | 114 FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableBuffer); |
| 122 FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableOutput); | 115 FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableOutput); |
| 123 FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableOutputNegative); | 116 FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableOutputNegative); |
| 124 | 117 |
| 125 // Populates this frame with a HTTP2 frame prefix with type and length | 118 // Populates this frame with a HTTP2 frame prefix with type and length |
| 126 // information. | 119 // information. |
| 127 bool BeginNewFrameInternal(const SpdyFramer& framer, | 120 bool BeginNewFrameInternal(const SpdyFramer& framer, |
| 128 uint8_t raw_frame_type, | 121 uint8_t raw_frame_type, |
| 129 uint8_t flags, | 122 uint8_t flags, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 146 // A buffer to be created whenever a new frame needs to be written. Used only | 139 // A buffer to be created whenever a new frame needs to be written. Used only |
| 147 // if |output_| is nullptr. | 140 // if |output_| is nullptr. |
| 148 std::unique_ptr<char[]> buffer_; | 141 std::unique_ptr<char[]> buffer_; |
| 149 // A pre-allocated buffer. If not-null, serialized frame data is written to | 142 // A pre-allocated buffer. If not-null, serialized frame data is written to |
| 150 // this buffer. | 143 // this buffer. |
| 151 ZeroCopyOutputBuffer* output_ = nullptr; // Does not own. | 144 ZeroCopyOutputBuffer* output_ = nullptr; // Does not own. |
| 152 | 145 |
| 153 size_t capacity_; // Allocation size of payload, set by constructor. | 146 size_t capacity_; // Allocation size of payload, set by constructor. |
| 154 size_t length_; // Length of the latest frame in the buffer. | 147 size_t length_; // Length of the latest frame in the buffer. |
| 155 size_t offset_; // Position at which the latest frame begins. | 148 size_t offset_; // Position at which the latest frame begins. |
| 156 | |
| 157 // Remove all four below after | |
| 158 // FLAGS_chromium_http2_flag_remove_rewritelength deprecates. | |
| 159 const size_t kLengthFieldLength = 3; | |
| 160 char* start_of_current_frame_ = nullptr; | |
| 161 size_t bytes_of_length_written_in_first_block_ = kLengthFieldLength; | |
| 162 // In case length of a new frame is cross blocks. | |
| 163 char* start_of_current_frame_in_next_block_ = nullptr; | |
| 164 }; | 149 }; |
| 165 | 150 |
| 166 } // namespace net | 151 } // namespace net |
| 167 | 152 |
| 168 #endif // NET_SPDY_CORE_SPDY_FRAME_BUILDER_H_ | 153 #endif // NET_SPDY_CORE_SPDY_FRAME_BUILDER_H_ |
| OLD | NEW |