From 580638c4829eaa6c81cb63271d42eac220f6b742 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 29 Jan 2012 00:16:51 +0900 Subject: [PATCH] Made spdylay_session_open_stream return a pointer to created spdylay_stream. --- lib/spdylay_session.c | 37 ++++++++++++++++++------------------- lib/spdylay_session.h | 12 +++++++----- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/lib/spdylay_session.c b/lib/spdylay_session.c index fe8e5e69..e1401064 100644 --- a/lib/spdylay_session.c +++ b/lib/spdylay_session.c @@ -264,21 +264,23 @@ int spdylay_session_add_rst_stream(spdylay_session *session, return 0; } -int spdylay_session_open_stream(spdylay_session *session, int32_t stream_id, - uint8_t flags, uint8_t pri, - spdylay_stream_state initial_state) +spdylay_stream* spdylay_session_open_stream(spdylay_session *session, + int32_t stream_id, + uint8_t flags, uint8_t pri, + spdylay_stream_state initial_state) { int r; spdylay_stream *stream = malloc(sizeof(spdylay_stream)); if(stream == NULL) { - return SPDYLAY_ERR_NOMEM; + return NULL; } spdylay_stream_init(stream, stream_id, flags, pri, initial_state); r = spdylay_map_insert(&session->streams, stream_id, stream); if(r != 0) { free(stream); + stream = NULL; } - return r; + return stream; } int spdylay_session_close_stream(spdylay_session *session, int32_t stream_id) @@ -345,7 +347,6 @@ ssize_t spdylay_session_prep_frame(spdylay_session *session, /* TODO Get or validate stream ID here */ uint8_t *framebuf; ssize_t framebuflen; - int r; switch(item->frame_type) { case SPDYLAY_SYN_STREAM: { if(session->goaway_flags) { @@ -361,13 +362,12 @@ ssize_t spdylay_session_prep_frame(spdylay_session *session, if(framebuflen < 0) { return framebuflen; } - r = spdylay_session_open_stream(session, item->frame->syn_stream.stream_id, - item->frame->syn_stream.hd.flags, - item->frame->syn_stream.pri, - SPDYLAY_STREAM_INITIAL); - if(r != 0) { + if(spdylay_session_open_stream(session, item->frame->syn_stream.stream_id, + item->frame->syn_stream.hd.flags, + item->frame->syn_stream.pri, + SPDYLAY_STREAM_INITIAL) == NULL) { free(framebuf); - return r; + return SPDYLAY_ERR_NOMEM; } break; } @@ -751,13 +751,12 @@ int spdylay_session_on_syn_stream_received(spdylay_session *session, be opened. */ r = 0; } else { - r = spdylay_session_open_stream(session, frame->syn_stream.stream_id, - frame->syn_stream.hd.flags, - frame->syn_stream.pri, - SPDYLAY_STREAM_OPENING); - if(r == 0) { - spdylay_stream *stream = spdylay_session_get_stream - (session, frame->syn_stream.stream_id); + spdylay_stream *stream; + stream = spdylay_session_open_stream(session, frame->syn_stream.stream_id, + frame->syn_stream.hd.flags, + frame->syn_stream.pri, + SPDYLAY_STREAM_OPENING); + if(stream) { if(flags & SPDYLAY_FLAG_FIN) { spdylay_stream_shutdown(stream, SPDYLAY_SHUT_RD); } diff --git a/lib/spdylay_session.h b/lib/spdylay_session.h index 69b744d6..87d9f718 100644 --- a/lib/spdylay_session.h +++ b/lib/spdylay_session.h @@ -140,12 +140,14 @@ int spdylay_session_add_goaway(spdylay_session *session, * priority |pri| and flags |flags|. Currently, |flags| & * SPDYLAY_FLAG_UNIDIRECTIONAL is non-zero, this stream is * unidirectional. |flags| & SPDYLAY_FLAG_FIN is non-zero, the sender - * of SYN_STREAM will not send any further data in this stream. - * The state of stream is set to |initial_state|. + * of SYN_STREAM will not send any further data in this stream. The + * state of stream is set to |initial_state|. This function returns a + * pointer to created new stream object, or NULL. */ -int spdylay_session_open_stream(spdylay_session *session, int32_t stream_id, - uint8_t flags, uint8_t pri, - spdylay_stream_state initial_state); +spdylay_stream* spdylay_session_open_stream(spdylay_session *session, + int32_t stream_id, + uint8_t flags, uint8_t pri, + spdylay_stream_state initial_state); /* * Closes stream whose stream ID is |stream_id|. This function returns