Index: net/quic/core/frames/quic_frame.h |
diff --git a/net/quic/core/frames/quic_frame.h b/net/quic/core/frames/quic_frame.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9e65ce2e1c192c3e1a06bb27aa87ff0dc9884031 |
--- /dev/null |
+++ b/net/quic/core/frames/quic_frame.h |
@@ -0,0 +1,81 @@ |
+// Copyright (c) 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef NET_QUIC_CORE_FRAMES_FRAME_H_ |
+#define NET_QUIC_CORE_FRAMES_FRAME_H_ |
+ |
+#include <vector> |
+ |
+#include "net/quic/core/frames/quic_ack_frame.h" |
+#include "net/quic/core/frames/quic_blocked_frame.h" |
+#include "net/quic/core/frames/quic_connection_close_frame.h" |
+#include "net/quic/core/frames/quic_frame.h" |
+#include "net/quic/core/frames/quic_goaway_frame.h" |
+#include "net/quic/core/frames/quic_mtu_discovery_frame.h" |
+#include "net/quic/core/frames/quic_padding_frame.h" |
+#include "net/quic/core/frames/quic_path_close_frame.h" |
+#include "net/quic/core/frames/quic_ping_frame.h" |
+#include "net/quic/core/frames/quic_rst_stream_frame.h" |
+#include "net/quic/core/frames/quic_stop_waiting_frame.h" |
+#include "net/quic/core/frames/quic_stream_frame.h" |
+#include "net/quic/core/frames/quic_window_update_frame.h" |
+#include "net/quic/core/quic_constants.h" |
+#include "net/quic/core/quic_types.h" |
+ |
+namespace net { |
+ |
+struct NET_EXPORT_PRIVATE QuicFrame { |
+ QuicFrame(); |
+ explicit QuicFrame(QuicPaddingFrame padding_frame); |
+ explicit QuicFrame(QuicMtuDiscoveryFrame frame); |
+ explicit QuicFrame(QuicPingFrame frame); |
+ |
+ explicit QuicFrame(QuicStreamFrame* stream_frame); |
+ explicit QuicFrame(QuicAckFrame* frame); |
+ explicit QuicFrame(QuicRstStreamFrame* frame); |
+ explicit QuicFrame(QuicConnectionCloseFrame* frame); |
+ explicit QuicFrame(QuicStopWaitingFrame* frame); |
+ explicit QuicFrame(QuicGoAwayFrame* frame); |
+ explicit QuicFrame(QuicWindowUpdateFrame* frame); |
+ explicit QuicFrame(QuicBlockedFrame* frame); |
+ explicit QuicFrame(QuicPathCloseFrame* frame); |
+ |
+ NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os, |
+ const QuicFrame& frame); |
+ |
+ QuicFrameType type; |
+ union { |
+ // Frames smaller than a pointer are inline. |
+ QuicPaddingFrame padding_frame; |
+ QuicMtuDiscoveryFrame mtu_discovery_frame; |
+ QuicPingFrame ping_frame; |
+ |
+ // Frames larger than a pointer. |
+ QuicStreamFrame* stream_frame; |
+ QuicAckFrame* ack_frame; |
+ QuicStopWaitingFrame* stop_waiting_frame; |
+ QuicRstStreamFrame* rst_stream_frame; |
+ QuicConnectionCloseFrame* connection_close_frame; |
+ QuicGoAwayFrame* goaway_frame; |
+ QuicWindowUpdateFrame* window_update_frame; |
+ QuicBlockedFrame* blocked_frame; |
+ QuicPathCloseFrame* path_close_frame; |
+ }; |
+}; |
+// QuicFrameType consumes 8 bytes with padding. |
+static_assert(sizeof(QuicFrame) <= 16, |
+ "Frames larger than 8 bytes should be referenced by pointer."); |
+ |
+typedef std::vector<QuicFrame> QuicFrames; |
+ |
+// Deletes all the sub-frames contained in |frames|. |
+NET_EXPORT_PRIVATE void DeleteFrames(QuicFrames* frames); |
+ |
+// Deletes all the QuicStreamFrames for the specified |stream_id|. |
+NET_EXPORT_PRIVATE void RemoveFramesForStream(QuicFrames* frames, |
+ QuicStreamId stream_id); |
+ |
+} // namespace net |
+ |
+#endif // NET_QUIC_CORE_FRAMES_FRAMES_H_ |