Add int return value to nghttp2_on_data_recv_callback

This commit is contained in:
Tatsuhiro Tsujikawa 2013-08-29 21:22:00 +09:00
parent 972b47d6af
commit 544ac9f61f
6 changed files with 23 additions and 11 deletions

View File

@ -832,8 +832,13 @@ typedef int (*nghttp2_on_data_chunk_recv_callback)
* Callback function invoked when DATA frame is received. The actual * Callback function invoked when DATA frame is received. The actual
* data it contains are received by * data it contains are received by
* :type:`nghttp2_on_data_chunk_recv_callback`. * :type:`nghttp2_on_data_chunk_recv_callback`.
*
* The implementation of this function must return 0 if it
* succeeds. If nonzero is returned, it is treated as fatal error and
* `nghttp2_session_recv()` and `nghttp2_session_send()` functions
* immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`.
*/ */
typedef void (*nghttp2_on_data_recv_callback) typedef int (*nghttp2_on_data_recv_callback)
(nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id, (nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id,
void *user_data); void *user_data);

View File

@ -2626,8 +2626,10 @@ int nghttp2_session_on_data_received(nghttp2_session *session,
if(stream->state == NGHTTP2_STREAM_OPENED) { if(stream->state == NGHTTP2_STREAM_OPENED) {
valid = 1; valid = 1;
if(session->callbacks.on_data_recv_callback) { if(session->callbacks.on_data_recv_callback) {
session->callbacks.on_data_recv_callback if(session->callbacks.on_data_recv_callback
(session, length, flags, stream_id, session->user_data); (session, length, flags, stream_id, session->user_data) != 0) {
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
} }
} else if(stream->state != NGHTTP2_STREAM_CLOSING) { } else if(stream->state != NGHTTP2_STREAM_CLOSING) {
error_code = NGHTTP2_PROTOCOL_ERROR; error_code = NGHTTP2_PROTOCOL_ERROR;
@ -2641,8 +2643,10 @@ int nghttp2_session_on_data_received(nghttp2_session *session,
NGHTTP2_STREAM_CLOSING state. This is a race condition. */ NGHTTP2_STREAM_CLOSING state. This is a race condition. */
valid = 1; valid = 1;
if(session->callbacks.on_data_recv_callback) { if(session->callbacks.on_data_recv_callback) {
session->callbacks.on_data_recv_callback if(session->callbacks.on_data_recv_callback
(session, length, flags, stream_id, session->user_data); (session, length, flags, stream_id, session->user_data) != 0) {
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
} }
if(flags & NGHTTP2_FLAG_END_STREAM) { if(flags & NGHTTP2_FLAG_END_STREAM) {
nghttp2_session_call_on_request_recv(session, stream_id); nghttp2_session_call_on_request_recv(session, stream_id);

View File

@ -762,7 +762,7 @@ int on_data_chunk_recv_callback
} // namespace } // namespace
namespace { namespace {
void hd_on_data_recv_callback int hd_on_data_recv_callback
(nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id, (nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id,
void *user_data) void *user_data)
{ {
@ -772,6 +772,7 @@ void hd_on_data_recv_callback
print_session_id(hd->session_id()); print_session_id(hd->session_id());
on_data_recv_callback(session, length, flags, stream_id, user_data); on_data_recv_callback(session, length, flags, stream_id, user_data);
} }
return 0;
} }
} // namespace } // namespace

View File

@ -413,7 +413,7 @@ void print_data_frame(print_type ptype, uint16_t length, uint8_t flags,
} }
} // namespace } // namespace
void on_data_recv_callback int on_data_recv_callback
(nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id, (nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id,
void *user_data) void *user_data)
{ {
@ -421,6 +421,7 @@ void on_data_recv_callback
printf(" recv "); printf(" recv ");
print_data_frame(PRINT_RECV, length, flags, stream_id); print_data_frame(PRINT_RECV, length, flags, stream_id);
fflush(stdout); fflush(stdout);
return 0;
} }
void on_data_send_callback void on_data_send_callback

View File

@ -64,7 +64,7 @@ void on_unknown_frame_recv_callback(nghttp2_session *session,
void on_frame_send_callback void on_frame_send_callback
(nghttp2_session *session, nghttp2_frame *frame, void *user_data); (nghttp2_session *session, nghttp2_frame *frame, void *user_data);
void on_data_recv_callback int on_data_recv_callback
(nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id, (nghttp2_session *session, uint16_t length, uint8_t flags, int32_t stream_id,
void *user_data); void *user_data);

View File

@ -175,12 +175,13 @@ static int on_data_chunk_recv_callback(nghttp2_session *session,
return 0; return 0;
} }
static void on_data_recv_callback(nghttp2_session *session, static int on_data_recv_callback(nghttp2_session *session,
uint16_t length, uint8_t flags, uint16_t length, uint8_t flags,
int32_t stream_id, void *user_data) int32_t stream_id, void *user_data)
{ {
my_user_data *ud = (my_user_data*)user_data; my_user_data *ud = (my_user_data*)user_data;
++ud->data_recv_cb_called; ++ud->data_recv_cb_called;
return 0;
} }
static ssize_t fixed_length_data_source_read_callback static ssize_t fixed_length_data_source_read_callback