Reuse session->iframe.buf for all incoming frames.
This commit is contained in:
parent
7a6bf8e5cc
commit
d4ba423248
|
@ -115,11 +115,12 @@ static int spdylay_session_new(spdylay_session **session_ptr,
|
||||||
goto fail_ob_ss_pq;
|
goto fail_ob_ss_pq;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*session_ptr)->aob.framebuf = malloc(SPDYLAY_INITIAL_OUTBOUND_BUFFER_LENGTH);
|
(*session_ptr)->aob.framebuf = malloc
|
||||||
|
(SPDYLAY_INITIAL_OUTBOUND_FRAMEBUF_LENGTH);
|
||||||
if((*session_ptr)->aob.framebuf == NULL) {
|
if((*session_ptr)->aob.framebuf == NULL) {
|
||||||
goto fail_aob_framebuf;
|
goto fail_aob_framebuf;
|
||||||
}
|
}
|
||||||
(*session_ptr)->aob.framebufmax = SPDYLAY_INITIAL_OUTBOUND_BUFFER_LENGTH;
|
(*session_ptr)->aob.framebufmax = SPDYLAY_INITIAL_OUTBOUND_FRAMEBUF_LENGTH;
|
||||||
|
|
||||||
(*session_ptr)->nvbuf = malloc(SPDYLAY_INITIAL_NV_BUFFER_LENGTH);
|
(*session_ptr)->nvbuf = malloc(SPDYLAY_INITIAL_NV_BUFFER_LENGTH);
|
||||||
if((*session_ptr)->nvbuf == NULL) {
|
if((*session_ptr)->nvbuf == NULL) {
|
||||||
|
@ -140,8 +141,16 @@ static int spdylay_session_new(spdylay_session **session_ptr,
|
||||||
(*session_ptr)->ibuf.limit = (*session_ptr)->ibuf.buf;
|
(*session_ptr)->ibuf.limit = (*session_ptr)->ibuf.buf;
|
||||||
|
|
||||||
(*session_ptr)->iframe.state = SPDYLAY_RECV_HEAD;
|
(*session_ptr)->iframe.state = SPDYLAY_RECV_HEAD;
|
||||||
|
(*session_ptr)->iframe.buf = malloc(SPDYLAY_INITIAL_INBOUND_FRAMEBUF_LENGTH);
|
||||||
|
if((*session_ptr)->iframe.buf == NULL) {
|
||||||
|
goto fail_iframe_buf;
|
||||||
|
}
|
||||||
|
(*session_ptr)->iframe.bufmax = SPDYLAY_INITIAL_INBOUND_FRAMEBUF_LENGTH;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
fail_iframe_buf:
|
||||||
|
free((*session_ptr)->nvbuf);
|
||||||
fail_nvbuf:
|
fail_nvbuf:
|
||||||
free((*session_ptr)->aob.framebuf);
|
free((*session_ptr)->aob.framebuf);
|
||||||
fail_aob_framebuf:
|
fail_aob_framebuf:
|
||||||
|
@ -259,10 +268,10 @@ void spdylay_session_del(spdylay_session *session)
|
||||||
spdylay_session_ob_pq_free(&session->ob_ss_pq);
|
spdylay_session_ob_pq_free(&session->ob_ss_pq);
|
||||||
spdylay_zlib_deflate_free(&session->hd_deflater);
|
spdylay_zlib_deflate_free(&session->hd_deflater);
|
||||||
spdylay_zlib_inflate_free(&session->hd_inflater);
|
spdylay_zlib_inflate_free(&session->hd_inflater);
|
||||||
free(session->iframe.buf);
|
|
||||||
free(session->aob.framebuf);
|
free(session->aob.framebuf);
|
||||||
free(session->nvbuf);
|
free(session->nvbuf);
|
||||||
spdylay_buffer_free(&session->inflatebuf);
|
spdylay_buffer_free(&session->inflatebuf);
|
||||||
|
free(session->iframe.buf);
|
||||||
free(session);
|
free(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -936,8 +945,6 @@ static size_t spdylay_inbound_buffer_avail(spdylay_inbound_buffer *ibuf)
|
||||||
static void spdylay_inbound_frame_reset(spdylay_inbound_frame *iframe)
|
static void spdylay_inbound_frame_reset(spdylay_inbound_frame *iframe)
|
||||||
{
|
{
|
||||||
iframe->state = SPDYLAY_RECV_HEAD;
|
iframe->state = SPDYLAY_RECV_HEAD;
|
||||||
free(iframe->buf);
|
|
||||||
iframe->buf = NULL;
|
|
||||||
iframe->len = iframe->off = 0;
|
iframe->len = iframe->off = 0;
|
||||||
iframe->ign = 0;
|
iframe->ign = 0;
|
||||||
}
|
}
|
||||||
|
@ -1501,9 +1508,11 @@ int spdylay_session_recv(spdylay_session *session)
|
||||||
if(spdylay_frame_is_ctrl_frame(session->iframe.headbuf[0])) {
|
if(spdylay_frame_is_ctrl_frame(session->iframe.headbuf[0])) {
|
||||||
/* control frame */
|
/* control frame */
|
||||||
session->iframe.len = payloadlen;
|
session->iframe.len = payloadlen;
|
||||||
session->iframe.buf = malloc(session->iframe.len);
|
r = spdylay_reserve_buffer(&session->iframe.buf,
|
||||||
if(session->iframe.buf == NULL) {
|
&session->iframe.bufmax,
|
||||||
return SPDYLAY_ERR_NOMEM;
|
session->iframe.len);
|
||||||
|
if(r != 0) {
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
session->iframe.off = 0;
|
session->iframe.off = 0;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -64,7 +64,9 @@ typedef struct {
|
||||||
message block of SSLv3/TLSv1 */
|
message block of SSLv3/TLSv1 */
|
||||||
#define SPDYLAY_INBOUND_BUFFER_LENGTH 16384
|
#define SPDYLAY_INBOUND_BUFFER_LENGTH 16384
|
||||||
|
|
||||||
#define SPDYLAY_INITIAL_OUTBOUND_BUFFER_LENGTH SPDYLAY_DATA_FRAME_LENGTH
|
#define SPDYLAY_INITIAL_OUTBOUND_FRAMEBUF_LENGTH SPDYLAY_DATA_FRAME_LENGTH
|
||||||
|
#define SPDYLAY_INITIAL_INBOUND_FRAMEBUF_LENGTH \
|
||||||
|
SPDYLAY_INITIAL_OUTBOUND_FRAMEBUF_LENGTH
|
||||||
#define SPDYLAY_INITIAL_NV_BUFFER_LENGTH 4096
|
#define SPDYLAY_INITIAL_NV_BUFFER_LENGTH 4096
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -87,8 +89,10 @@ typedef enum {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
spdylay_inbound_state state;
|
spdylay_inbound_state state;
|
||||||
uint8_t headbuf[SPDYLAY_HEAD_LEN];
|
uint8_t headbuf[SPDYLAY_HEAD_LEN];
|
||||||
/* NULL if inbound frame is data frame */
|
/* Payload for control frames. It is not used for DATA frames */
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
|
/* Capacity of buf */
|
||||||
|
size_t bufmax;
|
||||||
/* length in Length field */
|
/* length in Length field */
|
||||||
size_t len;
|
size_t len;
|
||||||
size_t off;
|
size_t off;
|
||||||
|
|
Loading…
Reference in New Issue