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

Side by Side Diff: net/quic/core/frames/quic_frame.cc

Issue 2547583002: Landing Recent QUIC changes until Fri Nov 18 23:21:04 2016 +0000 (Closed)
Patch Set: Remove explicit HTTP/2 enum usage Created 4 years 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
« no previous file with comments | « net/quic/core/frames/quic_frame.h ('k') | net/quic/core/frames/quic_frame_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/quic/core/frames/quic_frame.h"
6
7 using base::StringPiece;
8 using std::ostream;
9 using std::string;
10
11 namespace net {
12
13 QuicFrame::QuicFrame() {}
14
15 QuicFrame::QuicFrame(QuicPaddingFrame padding_frame)
16 : type(PADDING_FRAME), padding_frame(padding_frame) {}
17
18 QuicFrame::QuicFrame(QuicStreamFrame* stream_frame)
19 : type(STREAM_FRAME), stream_frame(stream_frame) {}
20
21 QuicFrame::QuicFrame(QuicAckFrame* frame) : type(ACK_FRAME), ack_frame(frame) {}
22
23 QuicFrame::QuicFrame(QuicMtuDiscoveryFrame frame)
24 : type(MTU_DISCOVERY_FRAME), mtu_discovery_frame(frame) {}
25
26 QuicFrame::QuicFrame(QuicStopWaitingFrame* frame)
27 : type(STOP_WAITING_FRAME), stop_waiting_frame(frame) {}
28
29 QuicFrame::QuicFrame(QuicPingFrame frame)
30 : type(PING_FRAME), ping_frame(frame) {}
31
32 QuicFrame::QuicFrame(QuicRstStreamFrame* frame)
33 : type(RST_STREAM_FRAME), rst_stream_frame(frame) {}
34
35 QuicFrame::QuicFrame(QuicConnectionCloseFrame* frame)
36 : type(CONNECTION_CLOSE_FRAME), connection_close_frame(frame) {}
37
38 QuicFrame::QuicFrame(QuicGoAwayFrame* frame)
39 : type(GOAWAY_FRAME), goaway_frame(frame) {}
40
41 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame)
42 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) {}
43
44 QuicFrame::QuicFrame(QuicBlockedFrame* frame)
45 : type(BLOCKED_FRAME), blocked_frame(frame) {}
46
47 QuicFrame::QuicFrame(QuicPathCloseFrame* frame)
48 : type(PATH_CLOSE_FRAME), path_close_frame(frame) {}
49
50 void DeleteFrames(QuicFrames* frames) {
51 for (QuicFrame& frame : *frames) {
52 switch (frame.type) {
53 // Frames smaller than a pointer are inlined, so don't need to be deleted.
54 case PADDING_FRAME:
55 case MTU_DISCOVERY_FRAME:
56 case PING_FRAME:
57 break;
58 case STREAM_FRAME:
59 delete frame.stream_frame;
60 break;
61 case ACK_FRAME:
62 delete frame.ack_frame;
63 break;
64 case STOP_WAITING_FRAME:
65 delete frame.stop_waiting_frame;
66 break;
67 case RST_STREAM_FRAME:
68 delete frame.rst_stream_frame;
69 break;
70 case CONNECTION_CLOSE_FRAME:
71 delete frame.connection_close_frame;
72 break;
73 case GOAWAY_FRAME:
74 delete frame.goaway_frame;
75 break;
76 case BLOCKED_FRAME:
77 delete frame.blocked_frame;
78 break;
79 case WINDOW_UPDATE_FRAME:
80 delete frame.window_update_frame;
81 break;
82 case PATH_CLOSE_FRAME:
83 delete frame.path_close_frame;
84 break;
85 case NUM_FRAME_TYPES:
86 DCHECK(false) << "Cannot delete type: " << frame.type;
87 }
88 }
89 frames->clear();
90 }
91
92 void RemoveFramesForStream(QuicFrames* frames, QuicStreamId stream_id) {
93 QuicFrames::iterator it = frames->begin();
94 while (it != frames->end()) {
95 if (it->type != STREAM_FRAME || it->stream_frame->stream_id != stream_id) {
96 ++it;
97 continue;
98 }
99 delete it->stream_frame;
100 it = frames->erase(it);
101 }
102 }
103
104 ostream& operator<<(ostream& os, const QuicFrame& frame) {
105 switch (frame.type) {
106 case PADDING_FRAME: {
107 os << "type { PADDING_FRAME } " << frame.padding_frame;
108 break;
109 }
110 case RST_STREAM_FRAME: {
111 os << "type { RST_STREAM_FRAME } " << *(frame.rst_stream_frame);
112 break;
113 }
114 case CONNECTION_CLOSE_FRAME: {
115 os << "type { CONNECTION_CLOSE_FRAME } "
116 << *(frame.connection_close_frame);
117 break;
118 }
119 case GOAWAY_FRAME: {
120 os << "type { GOAWAY_FRAME } " << *(frame.goaway_frame);
121 break;
122 }
123 case WINDOW_UPDATE_FRAME: {
124 os << "type { WINDOW_UPDATE_FRAME } " << *(frame.window_update_frame);
125 break;
126 }
127 case BLOCKED_FRAME: {
128 os << "type { BLOCKED_FRAME } " << *(frame.blocked_frame);
129 break;
130 }
131 case STREAM_FRAME: {
132 os << "type { STREAM_FRAME } " << *(frame.stream_frame);
133 break;
134 }
135 case ACK_FRAME: {
136 os << "type { ACK_FRAME } " << *(frame.ack_frame);
137 break;
138 }
139 case STOP_WAITING_FRAME: {
140 os << "type { STOP_WAITING_FRAME } " << *(frame.stop_waiting_frame);
141 break;
142 }
143 case PING_FRAME: {
144 os << "type { PING_FRAME } ";
145 break;
146 }
147 case MTU_DISCOVERY_FRAME: {
148 os << "type { MTU_DISCOVERY_FRAME } ";
149 break;
150 }
151 case PATH_CLOSE_FRAME: {
152 os << "type { PATH_CLOSE_FRAME } " << *(frame.path_close_frame);
153 break;
154 }
155 default: {
156 LOG(ERROR) << "Unknown frame type: " << frame.type;
157 break;
158 }
159 }
160 return os;
161 }
162
163 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/frames/quic_frame.h ('k') | net/quic/core/frames/quic_frame_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698