| 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_
|
|
|