Made spdylay_session_open_stream return a pointer to created spdylay_stream.

This commit is contained in:
Tatsuhiro Tsujikawa 2012-01-29 00:16:51 +09:00
parent 971e46f563
commit 580638c482
2 changed files with 25 additions and 24 deletions

View File

@ -264,21 +264,23 @@ int spdylay_session_add_rst_stream(spdylay_session *session,
return 0; return 0;
} }
int spdylay_session_open_stream(spdylay_session *session, int32_t stream_id, spdylay_stream* spdylay_session_open_stream(spdylay_session *session,
int32_t stream_id,
uint8_t flags, uint8_t pri, uint8_t flags, uint8_t pri,
spdylay_stream_state initial_state) spdylay_stream_state initial_state)
{ {
int r; int r;
spdylay_stream *stream = malloc(sizeof(spdylay_stream)); spdylay_stream *stream = malloc(sizeof(spdylay_stream));
if(stream == NULL) { if(stream == NULL) {
return SPDYLAY_ERR_NOMEM; return NULL;
} }
spdylay_stream_init(stream, stream_id, flags, pri, initial_state); spdylay_stream_init(stream, stream_id, flags, pri, initial_state);
r = spdylay_map_insert(&session->streams, stream_id, stream); r = spdylay_map_insert(&session->streams, stream_id, stream);
if(r != 0) { if(r != 0) {
free(stream); free(stream);
stream = NULL;
} }
return r; return stream;
} }
int spdylay_session_close_stream(spdylay_session *session, int32_t stream_id) 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 */ /* TODO Get or validate stream ID here */
uint8_t *framebuf; uint8_t *framebuf;
ssize_t framebuflen; ssize_t framebuflen;
int r;
switch(item->frame_type) { switch(item->frame_type) {
case SPDYLAY_SYN_STREAM: { case SPDYLAY_SYN_STREAM: {
if(session->goaway_flags) { if(session->goaway_flags) {
@ -361,13 +362,12 @@ ssize_t spdylay_session_prep_frame(spdylay_session *session,
if(framebuflen < 0) { if(framebuflen < 0) {
return framebuflen; return framebuflen;
} }
r = spdylay_session_open_stream(session, item->frame->syn_stream.stream_id, if(spdylay_session_open_stream(session, item->frame->syn_stream.stream_id,
item->frame->syn_stream.hd.flags, item->frame->syn_stream.hd.flags,
item->frame->syn_stream.pri, item->frame->syn_stream.pri,
SPDYLAY_STREAM_INITIAL); SPDYLAY_STREAM_INITIAL) == NULL) {
if(r != 0) {
free(framebuf); free(framebuf);
return r; return SPDYLAY_ERR_NOMEM;
} }
break; break;
} }
@ -751,13 +751,12 @@ int spdylay_session_on_syn_stream_received(spdylay_session *session,
be opened. */ be opened. */
r = 0; r = 0;
} else { } else {
r = spdylay_session_open_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.hd.flags,
frame->syn_stream.pri, frame->syn_stream.pri,
SPDYLAY_STREAM_OPENING); SPDYLAY_STREAM_OPENING);
if(r == 0) { if(stream) {
spdylay_stream *stream = spdylay_session_get_stream
(session, frame->syn_stream.stream_id);
if(flags & SPDYLAY_FLAG_FIN) { if(flags & SPDYLAY_FLAG_FIN) {
spdylay_stream_shutdown(stream, SPDYLAY_SHUT_RD); spdylay_stream_shutdown(stream, SPDYLAY_SHUT_RD);
} }

View File

@ -140,10 +140,12 @@ int spdylay_session_add_goaway(spdylay_session *session,
* priority |pri| and flags |flags|. Currently, |flags| & * priority |pri| and flags |flags|. Currently, |flags| &
* SPDYLAY_FLAG_UNIDIRECTIONAL is non-zero, this stream is * SPDYLAY_FLAG_UNIDIRECTIONAL is non-zero, this stream is
* unidirectional. |flags| & SPDYLAY_FLAG_FIN is non-zero, the sender * unidirectional. |flags| & SPDYLAY_FLAG_FIN is non-zero, the sender
* of SYN_STREAM will not send any further data in this stream. * of SYN_STREAM will not send any further data in this stream. The
* The state of stream is set to |initial_state|. * 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, spdylay_stream* spdylay_session_open_stream(spdylay_session *session,
int32_t stream_id,
uint8_t flags, uint8_t pri, uint8_t flags, uint8_t pri,
spdylay_stream_state initial_state); spdylay_stream_state initial_state);