Remove adjust_priority_callback

Since we have stream ID immediately available from nghttp2_submit_*,
we don't need adjust_priority_callback.
This commit is contained in:
Tatsuhiro Tsujikawa 2014-05-07 23:40:59 +09:00
parent e8de437d5c
commit d2890dfb91
2 changed files with 27 additions and 110 deletions

View File

@ -1415,37 +1415,6 @@ typedef ssize_t (*nghttp2_select_padding_callback)
size_t max_payloadlen,
void *user_data);
/**
* @functypedef
*
* Callback function invoked to adjust priority value for request
* HEADERS. This callback is called only for request HEADERS (which
* means, `frame->hd.type == NGHTTP2_HEADERS && frame->headers.cat ==
* NGHTTP2_HCAT_REQUEST` hold) and before
* :type:`nghttp2_before_frame_send_callback()`. The application can
* adjust priority value |pri_spec|. Initially, |pri_spec| is filled
* with the current priority value, which is equal to
* `frame->headers.pri_spec`. If the application doesn't alter
* priority value, just return 0 without updating |pri_spec|.
*
* Since the application doesn't know stream ID when it submits
* requests, it may not be able to add correct priority value to
* HEADERS frame and forced to use follwing PRIORITY frame. The
* purpose of this callback is give the chance to the application to
* adjust priority value with the latest information it has just
* before transmission so that correct priority is included in HEADERS
* frame and it doesn't have to send additional PRIORITY frame.
*
* Returning :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` will make
* `nghttp2_session_send()` function immediately return
* :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`.
*/
typedef int (*nghttp2_adjust_priority_callback)
(nghttp2_session *session,
const nghttp2_frame *frame,
nghttp2_priority_spec *pri_spec,
void *user_data);
/**
* @struct
*
@ -1519,11 +1488,6 @@ typedef struct {
* frame.
*/
nghttp2_select_padding_callback select_padding_callback;
/**
* Callback function invoked to adjust priority value just before
* request HEADERS is serialized to the wire format.
*/
nghttp2_adjust_priority_callback adjust_priority_callback;
} nghttp2_session_callbacks;
struct nghttp2_option;
@ -1730,23 +1694,20 @@ void nghttp2_session_del(nghttp2_session *session);
* are not met (e.g., request HEADERS cannot be sent after GOAWAY),
* :member:`nghttp2_session_callbacks.on_frame_not_send_callback`
* is invoked. Abort the following steps.
* 4. If the frame is request HEADERS,
* :member:`nghttp2_session_callbacks.adjust_priority_callback` is
* invoked.
* 5. If the frame is HEADERS, PUSH_PROMISE or DATA,
* 4. If the frame is HEADERS, PUSH_PROMISE or DATA,
* :member:`nghttp2_session_callbacks.select_padding_callback` is
* invoked.
* 6. If the frame is request HEADERS, the stream is opened here.
* 7. :member:`nghttp2_session_callbacks.before_frame_send_callback` is
* 5. If the frame is request HEADERS, the stream is opened here.
* 6. :member:`nghttp2_session_callbacks.before_frame_send_callback` is
* invoked.
* 8. :member:`nghttp2_session_callbacks.send_callback` is invoked one
* 7. :member:`nghttp2_session_callbacks.send_callback` is invoked one
* or more times to send the frame.
* 9. :member:`nghttp2_session_callbacks.on_frame_send_callback` is
* 8. :member:`nghttp2_session_callbacks.on_frame_send_callback` is
* invoked.
* 9. If the transmission of the frame triggers closure of the stream,
* the stream is closed and
* :member:`nghttp2_session_callbacks.on_stream_close_callback` is
* invoked.
* 10. If the transmission of the frame triggers closure of the stream,
* the stream is closed and
* :member:`nghttp2_session_callbacks.on_stream_close_callback` is
* invoked.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:

View File

@ -1494,43 +1494,6 @@ static int session_consider_blocked(nghttp2_session *session,
return 0;
}
static int session_call_adjust_priority(nghttp2_session *session,
nghttp2_frame *frame,
nghttp2_stream *stream)
{
int rv;
if(session->callbacks.adjust_priority_callback) {
nghttp2_priority_spec pri_spec;
pri_spec = frame->headers.pri_spec;
rv = session->callbacks.adjust_priority_callback(session, frame,
&pri_spec,
session->user_data);
if(rv != 0) {
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
frame->headers.pri_spec = pri_spec;
if(nghttp2_priority_spec_check_default(&pri_spec)) {
rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
if(nghttp2_is_fatal(rv)) {
return rv;
}
frame->hd.flags &= ~NGHTTP2_FLAG_PRIORITY;
} else {
frame->hd.flags |= NGHTTP2_FLAG_PRIORITY;
}
}
return 0;
}
/*
* This function serializes frame for transmission.
*
@ -1553,7 +1516,6 @@ static int nghttp2_session_prep_frame(nghttp2_session *session,
aux_data = (nghttp2_headers_aux_data*)item->aux_data;
if(frame->headers.cat == NGHTTP2_HCAT_REQUEST) {
nghttp2_priority_spec pri_spec_default;
nghttp2_stream *stream;
/* initial HEADERS, which opens stream */
@ -1563,14 +1525,10 @@ static int nghttp2_session_prep_frame(nghttp2_session *session,
return rv;
}
/* We first open strea with default priority. This is because
priority may be adjusted in callback. */
nghttp2_priority_spec_default_init(&pri_spec_default);
stream = nghttp2_session_open_stream
(session, frame->hd.stream_id,
NGHTTP2_STREAM_FLAG_NONE,
&pri_spec_default,
&frame->headers.pri_spec,
NGHTTP2_STREAM_INITIAL,
aux_data ? aux_data->stream_user_data : NULL);
@ -1578,14 +1536,6 @@ static int nghttp2_session_prep_frame(nghttp2_session *session,
return NGHTTP2_ERR_NOMEM;
}
/* We need to call this after stream was opened so that we can
use nghttp2_session_get_stream_user_data() */
rv = session_call_adjust_priority(session, frame, stream);
if(nghttp2_is_fatal(rv)) {
return rv;
}
} else if(nghttp2_session_predicate_push_response_headers_send
(session, frame->hd.stream_id) == 0) {
frame->headers.cat = NGHTTP2_HCAT_PUSH_RESPONSE;
@ -1606,16 +1556,7 @@ static int nghttp2_session_prep_frame(nghttp2_session *session,
&session->hd_deflater);
if(framerv < 0) {
if(!nghttp2_is_fatal(framerv)) {
rv = nghttp2_session_close_stream(session, frame->hd.stream_id,
NGHTTP2_NO_ERROR);
if(nghttp2_is_fatal(rv)) {
return rv;
}
}
return framerv;
goto close_stream_return;
}
DEBUGF(fprintf(stderr,
@ -1623,8 +1564,9 @@ static int nghttp2_session_prep_frame(nghttp2_session *session,
nghttp2_bufs_len(&session->aob.framebufs)));
framerv = session_headers_add_pad(session, frame);
if(framerv < 0) {
return framerv;
goto close_stream_return;
}
if(frame->headers.cat == NGHTTP2_HCAT_PUSH_RESPONSE) {
@ -1639,6 +1581,20 @@ static int nghttp2_session_prep_frame(nghttp2_session *session,
nghttp2_bufs_len(&session->aob.framebufs)));
break;
close_stream_return:
if(frame->headers.cat == NGHTTP2_HCAT_REQUEST &&
!nghttp2_is_fatal(framerv)) {
rv = nghttp2_session_close_stream(session, frame->hd.stream_id,
NGHTTP2_NO_ERROR);
if(nghttp2_is_fatal(rv)) {
return rv;
}
}
return framerv;
}
case NGHTTP2_PRIORITY: {
rv = nghttp2_session_predicate_priority_send