summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorValentin Bartenev <vbart@nginx.com>2014-01-22 04:58:19 +0400
committerValentin Bartenev <vbart@nginx.com>2014-01-22 04:58:19 +0400
commit3ddf9ccfce12454dfa456d3ef5c92f7472966ebf (patch)
tree80f04b004534ba2b879d6c49227d2f30816c72a4
parente62156d8292eb288ad456d6ba1eb96db7ce2a6b6 (diff)
downloadnginx-3ddf9ccfce12454dfa456d3ef5c92f7472966ebf.tar.gz
nginx-3ddf9ccfce12454dfa456d3ef5c92f7472966ebf.tar.bz2
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.
-rw-r--r--src/http/ngx_http_spdy.c20
-rw-r--r--src/http/ngx_http_spdy.h2
-rw-r--r--src/http/ngx_http_spdy_filter_module.c19
3 files changed, 20 insertions, 21 deletions
diff --git a/src/http/ngx_http_spdy.c b/src/http/ngx_http_spdy.c
index b5aa9931c..accfcb1d4 100644
--- a/src/http/ngx_http_spdy.c
+++ b/src/http/ngx_http_spdy.c
@@ -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;
diff --git a/src/http/ngx_http_spdy.h b/src/http/ngx_http_spdy.h
index 3dab0fecb..652b88f01 100644
--- a/src/http/ngx_http_spdy.h
+++ b/src/http/ngx_http_spdy.h
@@ -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;
diff --git a/src/http/ngx_http_spdy_filter_module.c b/src/http/ngx_http_spdy_filter_module.c
index bc39ec2aa..6cf4aea42 100644
--- a/src/http/ngx_http_spdy_filter_module.c
+++ b/src/http/ngx_http_spdy_filter_module.c
@@ -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;