SPDY: store the length of frame instead of its whole size.

The "length" value better corresponds with the specification and reduces
confusion about whether frame's header is included in "size" or not.

Also this change simplifies some parts of code, since in more cases the
length of frame is more useful than its actual size, especially considering
that the size of frame header is constant.
This commit is contained in:
Valentin Bartenev 2014-01-22 04:58:19 +04:00
parent e62156d829
commit 3ddf9ccfce
3 changed files with 20 additions and 21 deletions

View File

@ -494,9 +494,9 @@ ngx_http_spdy_send_output_queue(ngx_http_spdy_connection_t *sc)
out = frame;
ngx_log_debug5(NGX_LOG_DEBUG_HTTP, c->log, 0,
"spdy frame out: %p sid:%ui prio:%ui bl:%d size:%uz",
"spdy frame out: %p sid:%ui prio:%ui bl:%d len:%uz",
out, out->stream ? out->stream->id : 0, out->priority,
out->blocked, out->size);
out->blocked, out->length);
}
cl = c->send_chain(c, cl, 0);
@ -537,9 +537,9 @@ ngx_http_spdy_send_output_queue(ngx_http_spdy_connection_t *sc)
}
ngx_log_debug4(NGX_LOG_DEBUG_HTTP, c->log, 0,
"spdy frame sent: %p sid:%ui bl:%d size:%uz",
"spdy frame sent: %p sid:%ui bl:%d len:%uz",
out, out->stream ? out->stream->id : 0,
out->blocked, out->size);
out->blocked, out->length);
}
frame = NULL;
@ -1587,9 +1587,7 @@ ngx_http_spdy_send_settings(ngx_http_spdy_connection_t *sc)
frame->handler = ngx_http_spdy_settings_frame_handler;
frame->stream = NULL;
#if (NGX_DEBUG)
frame->size = NGX_SPDY_FRAME_HEADER_SIZE
+ NGX_SPDY_SETTINGS_NUM_SIZE
+ NGX_SPDY_SETTINGS_PAIR_SIZE;
frame->length = NGX_SPDY_SETTINGS_NUM_SIZE + NGX_SPDY_SETTINGS_PAIR_SIZE;
#endif
frame->priority = NGX_SPDY_HIGHEST_PRIORITY;
frame->blocked = 0;
@ -1637,7 +1635,7 @@ ngx_http_spdy_settings_frame_handler(ngx_http_spdy_connection_t *sc,
static ngx_http_spdy_out_frame_t *
ngx_http_spdy_get_ctl_frame(ngx_http_spdy_connection_t *sc, size_t size,
ngx_http_spdy_get_ctl_frame(ngx_http_spdy_connection_t *sc, size_t length,
ngx_uint_t priority)
{
ngx_chain_t *cl;
@ -1677,13 +1675,13 @@ ngx_http_spdy_get_ctl_frame(ngx_http_spdy_connection_t *sc, size_t size,
}
#if (NGX_DEBUG)
if (size > NGX_SPDY_CTL_FRAME_BUFFER_SIZE - NGX_SPDY_FRAME_HEADER_SIZE) {
if (length > NGX_SPDY_CTL_FRAME_BUFFER_SIZE - NGX_SPDY_FRAME_HEADER_SIZE) {
ngx_log_error(NGX_LOG_ALERT, sc->pool->log, 0,
"requested control frame is too big: %uz", size);
"requested control frame is too big: %uz", length);
return NULL;
}
frame->size = size;
frame->length = length;
#endif
frame->priority = priority;

View File

@ -142,7 +142,7 @@ struct ngx_http_spdy_out_frame_s {
ngx_http_spdy_out_frame_t *frame);
ngx_http_spdy_stream_t *stream;
size_t size;
size_t length;
ngx_uint_t priority;
unsigned blocked:1;

View File

@ -560,13 +560,14 @@ ngx_http_spdy_header_filter(ngx_http_request_t *r)
r->header_size = len;
len -= NGX_SPDY_FRAME_HEADER_SIZE;
if (r->header_only) {
b->last_buf = 1;
p = ngx_spdy_frame_write_flags_and_len(p, NGX_SPDY_FLAG_FIN,
len - NGX_SPDY_FRAME_HEADER_SIZE);
p = ngx_spdy_frame_write_flags_and_len(p, NGX_SPDY_FLAG_FIN, len);
} else {
p = ngx_spdy_frame_write_flags_and_len(p, 0,
len - NGX_SPDY_FRAME_HEADER_SIZE);
p = ngx_spdy_frame_write_flags_and_len(p, 0, len);
}
(void) ngx_spdy_frame_write_sid(p, stream->id);
@ -588,14 +589,14 @@ ngx_http_spdy_header_filter(ngx_http_request_t *r)
frame->last = cl;
frame->handler = ngx_http_spdy_syn_frame_handler;
frame->stream = stream;
frame->size = len;
frame->length = len;
frame->priority = stream->priority;
frame->blocked = 1;
frame->fin = r->header_only;
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, stream->request->connection->log, 0,
"spdy:%ui create SYN_REPLY frame %p: size:%uz",
stream->id, frame, frame->size);
"spdy:%ui create SYN_REPLY frame %p: len:%uz",
stream->id, frame, frame->length);
ngx_http_spdy_queue_blocked_frame(sc, frame);
@ -881,7 +882,7 @@ ngx_http_spdy_filter_get_data_frame(ngx_http_spdy_stream_t *stream,
frame->last = last;
frame->handler = ngx_http_spdy_data_frame_handler;
frame->stream = stream;
frame->size = NGX_SPDY_FRAME_HEADER_SIZE + len;
frame->length = len;
frame->priority = stream->priority;
frame->blocked = 0;
frame->fin = last->buf->last_buf;
@ -1043,7 +1044,7 @@ ngx_http_spdy_handle_frame(ngx_http_spdy_stream_t *stream,
r = stream->request;
r->connection->sent += frame->size;
r->connection->sent += NGX_SPDY_FRAME_HEADER_SIZE + frame->length;
if (frame->fin) {
stream->out_closed = 1;