Renamed spdylay_session_init as spdylay_session_new. Added session arg to cb.

Now recv_callback and send_callback accepts session argument.
spdylay_session_free was also renamed as spdylay_session_del.
This commit is contained in:
Tatsuhiro Tsujikawa 2012-01-24 22:56:26 +09:00
parent 9c8270436f
commit a52ff39850
3 changed files with 25 additions and 21 deletions

View File

@ -46,25 +46,27 @@ typedef enum {
SPDYLAY_MSG_MORE SPDYLAY_MSG_MORE
} spdylay_io_flag; } spdylay_io_flag;
struct spdylay_session;
typedef struct spdylay_session spdylay_session;
typedef ssize_t (*spdylay_send_callback) typedef ssize_t (*spdylay_send_callback)
(const uint8_t *data, size_t length, int flags, void *user_data); (spdylay_session *session,
const uint8_t *data, size_t length, int flags, void *user_data);
typedef ssize_t (*spdylay_recv_callback) typedef ssize_t (*spdylay_recv_callback)
(uint8_t *buf, size_t length, int flags, void *user_data); (spdylay_session *session,
uint8_t *buf, size_t length, int flags, void *user_data);
typedef struct { typedef struct {
spdylay_send_callback send_callback; spdylay_send_callback send_callback;
spdylay_recv_callback recv_callback; spdylay_recv_callback recv_callback;
} spdylay_session_callbacks; } spdylay_session_callbacks;
struct spdylay_session; int spdylay_session_client_new(spdylay_session **session_ptr,
typedef struct spdylay_session spdylay_session; const spdylay_session_callbacks *callbacks,
void *user_data);
int spdylay_session_client_init(spdylay_session **session_ptr, void spdylay_session_del(spdylay_session *session);
const spdylay_session_callbacks *callbacks,
void *user_data);
void spdylay_session_free(struct spdylay_session *session);
int spdylay_session_send(spdylay_session *session); int spdylay_session_send(spdylay_session *session);

View File

@ -41,9 +41,9 @@ int spdylay_outbound_item_compar(const void *lhsx, const void *rhsx)
return lhs->pri-rhs->pri; return lhs->pri-rhs->pri;
} }
int spdylay_session_client_init(spdylay_session **session_ptr, int spdylay_session_client_new(spdylay_session **session_ptr,
const spdylay_session_callbacks *callbacks, const spdylay_session_callbacks *callbacks,
void *user_data) void *user_data)
{ {
int r; int r;
*session_ptr = malloc(sizeof(spdylay_session)); *session_ptr = malloc(sizeof(spdylay_session));
@ -109,7 +109,7 @@ static void spdylay_outbound_item_free(spdylay_outbound_item *item)
free(item->frame); free(item->frame);
} }
void spdylay_session_free(spdylay_session *session) void spdylay_session_del(spdylay_session *session)
{ {
spdylay_map_each(&session->streams, spdylay_free_streams); spdylay_map_each(&session->streams, spdylay_free_streams);
spdylay_map_free(&session->streams); spdylay_map_free(&session->streams);
@ -239,7 +239,7 @@ int spdylay_session_send(spdylay_session *session)
} }
data = session->aob.framebuf + session->aob.framebufoff; data = session->aob.framebuf + session->aob.framebufoff;
datalen = session->aob.framebuflen - session->aob.framebufoff; datalen = session->aob.framebuflen - session->aob.framebufoff;
sentlen = session->callbacks.send_callback(data, datalen, 0, sentlen = session->callbacks.send_callback(session, data, datalen, 0,
session->user_data); session->user_data);
if(sentlen < 0) { if(sentlen < 0) {
if(sentlen == SPDYLAY_ERR_WOULDBLOCK) { if(sentlen == SPDYLAY_ERR_WOULDBLOCK) {
@ -281,7 +281,7 @@ static ssize_t spdylay_recv(spdylay_session *session)
} }
recv_max = session->ibuf.buf+sizeof(session->ibuf.buf)-session->ibuf.limit; recv_max = session->ibuf.buf+sizeof(session->ibuf.buf)-session->ibuf.limit;
r = session->callbacks.recv_callback r = session->callbacks.recv_callback
(session->ibuf.limit, recv_max, 0, session->user_data); (session, session->ibuf.limit, recv_max, 0, session->user_data);
if(r > 0) { if(r > 0) {
if(r > recv_max) { if(r > recv_max) {
return SPDYLAY_ERR_CALLBACK_FAILURE; return SPDYLAY_ERR_CALLBACK_FAILURE;

View File

@ -60,7 +60,8 @@ static void scripted_data_feed_init(scripted_data_feed *df,
df->feedseq[0] = data_length; df->feedseq[0] = data_length;
} }
static ssize_t scripted_recv_callback(uint8_t* data, size_t len, int flags, static ssize_t scripted_recv_callback(spdylay_session *session,
uint8_t* data, size_t len, int flags,
void *user_data) void *user_data)
{ {
scripted_data_feed *df = ((my_user_data*)user_data)->df; scripted_data_feed *df = ((my_user_data*)user_data)->df;
@ -75,7 +76,8 @@ static ssize_t scripted_recv_callback(uint8_t* data, size_t len, int flags,
return wlen; return wlen;
} }
static ssize_t accumulator_send_callback(const uint8_t *buf, size_t len, static ssize_t accumulator_send_callback(spdylay_session *session,
const uint8_t *buf, size_t len,
int flags, void* user_data) int flags, void* user_data)
{ {
accumulator *acc = ((my_user_data*)user_data)->acc; accumulator *acc = ((my_user_data*)user_data)->acc;
@ -115,7 +117,7 @@ void test_spdylay_session_recv()
spdylay_frame frame; spdylay_frame frame;
user_data.df = &df; user_data.df = &df;
spdylay_session_client_init(&session, &callbacks, &user_data); spdylay_session_client_new(&session, &callbacks, &user_data);
spdylay_frame_syn_stream_init(&frame.syn_stream, 0, 0, 0, 3, dup_nv(nv)); spdylay_frame_syn_stream_init(&frame.syn_stream, 0, 0, 0, 3, dup_nv(nv));
framelen = spdylay_frame_pack_syn_stream(&framedata, &frame.syn_stream, framelen = spdylay_frame_pack_syn_stream(&framedata, &frame.syn_stream,
&session->hd_deflater); &session->hd_deflater);
@ -124,7 +126,7 @@ void test_spdylay_session_recv()
spdylay_frame_syn_stream_free(&frame.syn_stream); spdylay_frame_syn_stream_free(&frame.syn_stream);
CU_ASSERT(0 == spdylay_session_recv(session)); CU_ASSERT(0 == spdylay_session_recv(session));
spdylay_session_free(session); spdylay_session_del(session);
} }
void test_spdylay_session_add_frame() void test_spdylay_session_add_frame()
@ -150,7 +152,7 @@ void test_spdylay_session_add_frame()
uint32_t temp32; uint32_t temp32;
acc.length = 0; acc.length = 0;
user_data.acc = &acc; user_data.acc = &acc;
CU_ASSERT(0 == spdylay_session_client_init(&session, &callbacks, &user_data)); CU_ASSERT(0 == spdylay_session_client_new(&session, &callbacks, &user_data));
frame = malloc(sizeof(spdylay_frame)); frame = malloc(sizeof(spdylay_frame));
spdylay_frame_syn_stream_init(&frame->syn_stream, 0, 0, 0, 3, dup_nv(nv)); spdylay_frame_syn_stream_init(&frame->syn_stream, 0, 0, 0, 3, dup_nv(nv));
@ -171,5 +173,5 @@ void test_spdylay_session_add_frame()
temp32 = (acc.buf[16] >> 6) & 0x3; temp32 = (acc.buf[16] >> 6) & 0x3;
CU_ASSERT(3 == temp32); CU_ASSERT(3 == temp32);
spdylay_session_free(session); spdylay_session_del(session);
} }