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_SPDY_FRAMER_H_ | 5 #ifndef NET_SPDY_SPDY_FRAMER_H_ |
6 #define NET_SPDY_SPDY_FRAMER_H_ | 6 #define NET_SPDY_SPDY_FRAMER_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 public: | 274 public: |
275 // SPDY states. | 275 // SPDY states. |
276 // TODO(mbelshe): Can we move these into the implementation | 276 // TODO(mbelshe): Can we move these into the implementation |
277 // and avoid exposing through the header. (Needed for test) | 277 // and avoid exposing through the header. (Needed for test) |
278 enum SpdyState { | 278 enum SpdyState { |
279 SPDY_ERROR, | 279 SPDY_ERROR, |
280 SPDY_RESET, | 280 SPDY_RESET, |
281 SPDY_AUTO_RESET, | 281 SPDY_AUTO_RESET, |
282 SPDY_READING_COMMON_HEADER, | 282 SPDY_READING_COMMON_HEADER, |
283 SPDY_CONTROL_FRAME_PAYLOAD, | 283 SPDY_CONTROL_FRAME_PAYLOAD, |
| 284 SPDY_READ_PADDING_LENGTH, |
| 285 SPDY_CONSUME_PADDING, |
284 SPDY_IGNORE_REMAINING_PAYLOAD, | 286 SPDY_IGNORE_REMAINING_PAYLOAD, |
285 SPDY_FORWARD_STREAM_FRAME, | 287 SPDY_FORWARD_STREAM_FRAME, |
286 SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK, | 288 SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK, |
287 SPDY_CONTROL_FRAME_HEADER_BLOCK, | 289 SPDY_CONTROL_FRAME_HEADER_BLOCK, |
288 SPDY_GOAWAY_FRAME_PAYLOAD, | 290 SPDY_GOAWAY_FRAME_PAYLOAD, |
289 SPDY_RST_STREAM_FRAME_PAYLOAD, | 291 SPDY_RST_STREAM_FRAME_PAYLOAD, |
290 SPDY_SETTINGS_FRAME_PAYLOAD, | 292 SPDY_SETTINGS_FRAME_PAYLOAD, |
291 }; | 293 }; |
292 | 294 |
293 // SPDY error codes. | 295 // SPDY error codes. |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 // consumed from the data. | 539 // consumed from the data. |
538 size_t ProcessCommonHeader(const char* data, size_t len); | 540 size_t ProcessCommonHeader(const char* data, size_t len); |
539 size_t ProcessControlFramePayload(const char* data, size_t len); | 541 size_t ProcessControlFramePayload(const char* data, size_t len); |
540 size_t ProcessControlFrameBeforeHeaderBlock(const char* data, size_t len); | 542 size_t ProcessControlFrameBeforeHeaderBlock(const char* data, size_t len); |
541 // HPACK data is re-encoded as SPDY3 and re-entrantly delivered through | 543 // HPACK data is re-encoded as SPDY3 and re-entrantly delivered through |
542 // |ProcessControlFrameHeaderBlock()|. |is_hpack_header_block| controls | 544 // |ProcessControlFrameHeaderBlock()|. |is_hpack_header_block| controls |
543 // whether data is treated as HPACK- vs SPDY3-encoded. | 545 // whether data is treated as HPACK- vs SPDY3-encoded. |
544 size_t ProcessControlFrameHeaderBlock(const char* data, | 546 size_t ProcessControlFrameHeaderBlock(const char* data, |
545 size_t len, | 547 size_t len, |
546 bool is_hpack_header_block); | 548 bool is_hpack_header_block); |
| 549 size_t ProcessFramePaddingLength(const char* data, size_t len); |
| 550 size_t ProcessFramePadding(const char* data, size_t len); |
547 size_t ProcessDataFramePayload(const char* data, size_t len); | 551 size_t ProcessDataFramePayload(const char* data, size_t len); |
548 size_t ProcessGoAwayFramePayload(const char* data, size_t len); | 552 size_t ProcessGoAwayFramePayload(const char* data, size_t len); |
549 size_t ProcessRstStreamFramePayload(const char* data, size_t len); | 553 size_t ProcessRstStreamFramePayload(const char* data, size_t len); |
550 size_t ProcessSettingsFramePayload(const char* data, size_t len); | 554 size_t ProcessSettingsFramePayload(const char* data, size_t len); |
551 | 555 |
552 // TODO(jgraettinger): To be removed with migration to | 556 // TODO(jgraettinger): To be removed with migration to |
553 // SpdyHeadersHandlerInterface. | 557 // SpdyHeadersHandlerInterface. |
554 // Serializes the last-processed header block of |hpack_decoder_| as | 558 // Serializes the last-processed header block of |hpack_decoder_| as |
555 // a SPDY3 format block, and delivers it to the visitor via reentrant | 559 // a SPDY3 format block, and delivers it to the visitor via reentrant |
556 // call to ProcessControlFrameHeaderBlock(). | 560 // call to ProcessControlFrameHeaderBlock(). |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 | 625 |
622 // The size of the control frame buffer. | 626 // The size of the control frame buffer. |
623 // Since this is only used for control frame headers, the maximum control | 627 // Since this is only used for control frame headers, the maximum control |
624 // frame header size (SYN_STREAM) is sufficient; all remaining control | 628 // frame header size (SYN_STREAM) is sufficient; all remaining control |
625 // frame data is streamed to the visitor. | 629 // frame data is streamed to the visitor. |
626 static const size_t kControlFrameBufferSize; | 630 static const size_t kControlFrameBufferSize; |
627 | 631 |
628 SpdyState state_; | 632 SpdyState state_; |
629 SpdyState previous_state_; | 633 SpdyState previous_state_; |
630 SpdyError error_code_; | 634 SpdyError error_code_; |
| 635 |
| 636 // Note that for DATA frame, remaining_data_length_ is sum of lengths of |
| 637 // frame header, padding length field (optional), data payload (optional) and |
| 638 // padding payload (optional). |
631 size_t remaining_data_length_; | 639 size_t remaining_data_length_; |
632 | 640 |
| 641 // The length (in bytes) of the padding payload to be processed. |
| 642 size_t remaining_padding_payload_length_; |
| 643 |
| 644 // The length (in bytes) of the padding length field to be processed. |
| 645 size_t remaining_padding_length_fields_; |
| 646 |
633 // The number of bytes remaining to read from the current control frame's | 647 // The number of bytes remaining to read from the current control frame's |
634 // headers. Note that header data blocks (for control types that have them) | 648 // headers. Note that header data blocks (for control types that have them) |
635 // are part of the frame's payload, and not the frame's headers. | 649 // are part of the frame's payload, and not the frame's headers. |
636 size_t remaining_control_header_; | 650 size_t remaining_control_header_; |
637 | 651 |
638 scoped_ptr<char[]> current_frame_buffer_; | 652 scoped_ptr<char[]> current_frame_buffer_; |
639 // Number of bytes read into the current_frame_buffer_. | 653 // Number of bytes read into the current_frame_buffer_. |
640 size_t current_frame_buffer_length_; | 654 size_t current_frame_buffer_length_; |
641 | 655 |
642 // The type of the frame currently being read. | 656 // The type of the frame currently being read. |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 // If a HEADERS frame is followed by a CONTINUATION frame, the FIN/END_STREAM | 710 // If a HEADERS frame is followed by a CONTINUATION frame, the FIN/END_STREAM |
697 // flag is still carried in the HEADERS frame. If it's set, flip this so that | 711 // flag is still carried in the HEADERS frame. If it's set, flip this so that |
698 // we know to terminate the stream when the entire header block has been | 712 // we know to terminate the stream when the entire header block has been |
699 // processed. | 713 // processed. |
700 bool end_stream_when_done_; | 714 bool end_stream_when_done_; |
701 }; | 715 }; |
702 | 716 |
703 } // namespace net | 717 } // namespace net |
704 | 718 |
705 #endif // NET_SPDY_SPDY_FRAMER_H_ | 719 #endif // NET_SPDY_SPDY_FRAMER_H_ |
OLD | NEW |