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