From 9f2f6454f3e87a0065d21e373b0075cd2948a505 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Fri, 27 Jan 2012 23:22:27 +0900 Subject: [PATCH] Added handling of received RST_STREAM --- lib/spdylay_session.c | 17 +++++++++++++++++ lib/spdylay_session.h | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/lib/spdylay_session.c b/lib/spdylay_session.c index 6190c6de..67289c57 100644 --- a/lib/spdylay_session.c +++ b/lib/spdylay_session.c @@ -713,6 +713,12 @@ int spdylay_session_on_syn_reply_received(spdylay_session *session, return r; } +int spdylay_session_on_rst_stream_received(spdylay_session *session, + spdylay_frame *frame) +{ + spdylay_session_close_stream(session, frame->rst_stream.stream_id); +} + int spdylay_session_on_ping_received(spdylay_session *session, spdylay_frame *frame) { @@ -831,6 +837,17 @@ int spdylay_session_process_ctrl_frame(spdylay_session *session) spdylay_frame_syn_reply_free(&frame.syn_reply); } break; + case SPDYLAY_RST_STREAM: + r = spdylay_frame_unpack_rst_stream(&frame.rst_stream, + session->iframe.headbuf, + sizeof(session->iframe.headbuf), + session->iframe.buf, + session->iframe.len); + if(r == 0) { + r = spdylay_session_on_rst_stream_received(session, &frame); + spdylay_frame_rst_stream_free(&frame.rst_stream); + } + break; case SPDYLAY_PING: r = spdylay_frame_unpack_ping(&frame.ping, session->iframe.headbuf, diff --git a/lib/spdylay_session.h b/lib/spdylay_session.h index e606ab8b..18886d38 100644 --- a/lib/spdylay_session.h +++ b/lib/spdylay_session.h @@ -155,6 +155,12 @@ int spdylay_session_on_syn_reply_received(spdylay_session *session, spdylay_frame *frame); +/* + * Called when RST_STREAM is received. Received frame is |frame|. + */ +int spdylay_session_on_rst_stream_received(spdylay_session *session, + spdylay_frame *frame); + /* * Called when HEADERS is recieved. Received frame is |frame|. */