virtual void OnSynStream(SpdyStreamId stream_id,
SpdyStreamId associated_stream_id,
SpdyPriority priority,
- uint8 credential_slot,
bool fin,
bool unidirectional,
const SpdyHeaderBlock& headers) = 0;
bool fin,
const SpdyHeaderBlock& headers) = 0;
+ // Called when a data frame header is received.
+ virtual void OnDataFrameHeader(SpdyStreamId stream_id,
+ size_t length,
+ bool fin) = 0;
+
// Called when data is received.
// |stream_id| The stream receiving data.
// |data| A buffer containing the data received.
// and validated.
virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) = 0;
+ // Called when a SETTINGS frame is received with the ACK flag set.
+ virtual void OnSettingsAck() {}
+
+ // Called at the completion of parsing SETTINGS id and value tuples.
+ virtual void OnSettingsEnd() {}
+
// Called when a PING frame has been parsed.
- virtual void OnPing(uint32 unique_id) = 0;
+ virtual void OnPing(SpdyPingId unique_id, bool is_ack) = 0;
// Called when a RST_STREAM frame has been parsed.
virtual void OnRstStream(SpdyStreamId stream_id,
// Called when a PUSH_PROMISE frame has been parsed.
virtual void OnPushPromise(SpdyStreamId stream_id,
- SpdyStreamId promised_stream_id) = 0;
+ SpdyStreamId promised_stream_id,
+ const SpdyHeaderBlock& headers) = 0;
+
+ // Called when a frame type we don't recognize is received.
+ // Return true if this appears to be a valid extension frame, false otherwise.
+ // We distinguish between extension frames and nonsense by checking
+ // whether the stream id is valid.
+ virtual bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) = 0;
protected:
virtual ~BufferedSpdyFramerVisitorInterface() {}
virtual void OnSynStream(SpdyStreamId stream_id,
SpdyStreamId associated_stream_id,
SpdyPriority priority,
- uint8 credential_slot,
bool fin,
bool unidirectional) OVERRIDE;
virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE;
- virtual void OnHeaders(SpdyStreamId stream_id, bool fin) OVERRIDE;
- virtual bool OnCredentialFrameData(const char* frame_data,
- size_t len) OVERRIDE;
+ virtual void OnHeaders(SpdyStreamId stream_id, bool fin, bool end) OVERRIDE;
virtual bool OnControlFrameHeaderData(SpdyStreamId stream_id,
const char* header_data,
size_t len) OVERRIDE;
virtual void OnSettings(bool clear_persisted) OVERRIDE;
virtual void OnSetting(
SpdySettingsIds id, uint8 flags, uint32 value) OVERRIDE;
- virtual void OnPing(uint32 unique_id) OVERRIDE;
+ virtual void OnSettingsAck() OVERRIDE;
+ virtual void OnSettingsEnd() OVERRIDE;
+ virtual void OnPing(SpdyPingId unique_id, bool is_ack) OVERRIDE;
virtual void OnRstStream(SpdyStreamId stream_id,
SpdyRstStreamStatus status) OVERRIDE;
virtual void OnGoAway(SpdyStreamId last_accepted_stream_id,
virtual void OnWindowUpdate(SpdyStreamId stream_id,
uint32 delta_window_size) OVERRIDE;
virtual void OnPushPromise(SpdyStreamId stream_id,
- SpdyStreamId promised_stream_id) OVERRIDE;
+ SpdyStreamId promised_stream_id,
+ bool end) OVERRIDE;
virtual void OnDataFrameHeader(SpdyStreamId stream_id,
size_t length,
bool fin) OVERRIDE;
+ virtual void OnContinuation(SpdyStreamId stream_id, bool end) OVERRIDE;
+ virtual bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) OVERRIDE;
// SpdyFramer methods.
size_t ProcessInput(const char* data, size_t len);
- int protocol_version();
+ SpdyMajorVersion protocol_version();
void Reset();
SpdyFramer::SpdyError error_code() const;
SpdyFramer::SpdyState state() const;
SpdyFrame* CreateSynStream(SpdyStreamId stream_id,
SpdyStreamId associated_stream_id,
SpdyPriority priority,
- uint8 credential_slot,
SpdyControlFlags flags,
- bool compressed,
const SpdyHeaderBlock* headers);
SpdyFrame* CreateSynReply(SpdyStreamId stream_id,
SpdyControlFlags flags,
- bool compressed,
const SpdyHeaderBlock* headers);
SpdyFrame* CreateRstStream(SpdyStreamId stream_id,
SpdyRstStreamStatus status) const;
SpdyFrame* CreateSettings(const SettingsMap& values) const;
- SpdyFrame* CreatePingFrame(uint32 unique_id) const;
+ SpdyFrame* CreatePingFrame(uint32 unique_id, bool is_ack) const;
SpdyFrame* CreateGoAway(
SpdyStreamId last_accepted_stream_id,
SpdyGoAwayStatus status) const;
SpdyFrame* CreateHeaders(SpdyStreamId stream_id,
SpdyControlFlags flags,
- bool compressed,
const SpdyHeaderBlock* headers);
SpdyFrame* CreateWindowUpdate(
SpdyStreamId stream_id,
const char* data,
uint32 len,
SpdyDataFlags flags);
+ SpdyFrame* CreatePushPromise(SpdyStreamId stream_id,
+ SpdyStreamId promised_stream_id,
+ const SpdyHeaderBlock* headers);
// Serialize a frame of unknown type.
SpdySerializedFrame* SerializeFrame(const SpdyFrameIR& frame) {
SpdyFrameType type;
SpdyStreamId stream_id;
SpdyStreamId associated_stream_id;
+ SpdyStreamId promised_stream_id;
SpdyPriority priority;
uint8 credential_slot;
bool fin;