Mercurial > hg > nginx
comparison src/http/ngx_http_spdy_filter_module.c @ 5529:e4adaa47af65
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.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Wed, 22 Jan 2014 04:58:19 +0400 |
parents | d5de6c25b759 |
children | 827e53c136b0 |
comparison
equal
deleted
inserted
replaced
5528:d5de6c25b759 | 5529:e4adaa47af65 |
---|---|
558 | 558 |
559 len = b->last - b->pos; | 559 len = b->last - b->pos; |
560 | 560 |
561 r->header_size = len; | 561 r->header_size = len; |
562 | 562 |
563 len -= NGX_SPDY_FRAME_HEADER_SIZE; | |
564 | |
563 if (r->header_only) { | 565 if (r->header_only) { |
564 b->last_buf = 1; | 566 b->last_buf = 1; |
565 p = ngx_spdy_frame_write_flags_and_len(p, NGX_SPDY_FLAG_FIN, | 567 p = ngx_spdy_frame_write_flags_and_len(p, NGX_SPDY_FLAG_FIN, len); |
566 len - NGX_SPDY_FRAME_HEADER_SIZE); | 568 |
567 } else { | 569 } else { |
568 p = ngx_spdy_frame_write_flags_and_len(p, 0, | 570 p = ngx_spdy_frame_write_flags_and_len(p, 0, len); |
569 len - NGX_SPDY_FRAME_HEADER_SIZE); | |
570 } | 571 } |
571 | 572 |
572 (void) ngx_spdy_frame_write_sid(p, stream->id); | 573 (void) ngx_spdy_frame_write_sid(p, stream->id); |
573 | 574 |
574 cl = ngx_alloc_chain_link(r->pool); | 575 cl = ngx_alloc_chain_link(r->pool); |
586 | 587 |
587 frame->first = cl; | 588 frame->first = cl; |
588 frame->last = cl; | 589 frame->last = cl; |
589 frame->handler = ngx_http_spdy_syn_frame_handler; | 590 frame->handler = ngx_http_spdy_syn_frame_handler; |
590 frame->stream = stream; | 591 frame->stream = stream; |
591 frame->size = len; | 592 frame->length = len; |
592 frame->priority = stream->priority; | 593 frame->priority = stream->priority; |
593 frame->blocked = 1; | 594 frame->blocked = 1; |
594 frame->fin = r->header_only; | 595 frame->fin = r->header_only; |
595 | 596 |
596 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, stream->request->connection->log, 0, | 597 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, stream->request->connection->log, 0, |
597 "spdy:%ui create SYN_REPLY frame %p: size:%uz", | 598 "spdy:%ui create SYN_REPLY frame %p: len:%uz", |
598 stream->id, frame, frame->size); | 599 stream->id, frame, frame->length); |
599 | 600 |
600 ngx_http_spdy_queue_blocked_frame(sc, frame); | 601 ngx_http_spdy_queue_blocked_frame(sc, frame); |
601 | 602 |
602 cln = ngx_http_cleanup_add(r, 0); | 603 cln = ngx_http_cleanup_add(r, 0); |
603 if (cln == NULL) { | 604 if (cln == NULL) { |
879 | 880 |
880 frame->first = first; | 881 frame->first = first; |
881 frame->last = last; | 882 frame->last = last; |
882 frame->handler = ngx_http_spdy_data_frame_handler; | 883 frame->handler = ngx_http_spdy_data_frame_handler; |
883 frame->stream = stream; | 884 frame->stream = stream; |
884 frame->size = NGX_SPDY_FRAME_HEADER_SIZE + len; | 885 frame->length = len; |
885 frame->priority = stream->priority; | 886 frame->priority = stream->priority; |
886 frame->blocked = 0; | 887 frame->blocked = 0; |
887 frame->fin = last->buf->last_buf; | 888 frame->fin = last->buf->last_buf; |
888 | 889 |
889 return frame; | 890 return frame; |
1041 { | 1042 { |
1042 ngx_http_request_t *r; | 1043 ngx_http_request_t *r; |
1043 | 1044 |
1044 r = stream->request; | 1045 r = stream->request; |
1045 | 1046 |
1046 r->connection->sent += frame->size; | 1047 r->connection->sent += NGX_SPDY_FRAME_HEADER_SIZE + frame->length; |
1047 | 1048 |
1048 if (frame->fin) { | 1049 if (frame->fin) { |
1049 stream->out_closed = 1; | 1050 stream->out_closed = 1; |
1050 } | 1051 } |
1051 | 1052 |