| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/spdy/spdy_framer.h" | 5 #include "net/spdy/spdy_framer.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/metrics/stats_counters.h" | 9 #include "base/metrics/stats_counters.h" |
| 10 #include "base/third_party/valgrind/memcheck.h" | 10 #include "base/third_party/valgrind/memcheck.h" |
| (...skipping 2389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2400 return builder.take(); | 2400 return builder.take(); |
| 2401 } | 2401 } |
| 2402 | 2402 |
| 2403 SpdySerializedFrame* SpdyFramer::SerializeHeaders( | 2403 SpdySerializedFrame* SpdyFramer::SerializeHeaders( |
| 2404 const SpdyHeadersIR& headers) { | 2404 const SpdyHeadersIR& headers) { |
| 2405 uint8 flags = 0; | 2405 uint8 flags = 0; |
| 2406 if (headers.fin()) { | 2406 if (headers.fin()) { |
| 2407 flags |= CONTROL_FLAG_FIN; | 2407 flags |= CONTROL_FLAG_FIN; |
| 2408 } | 2408 } |
| 2409 if (protocol_version() > SPDY3) { | 2409 if (protocol_version() > SPDY3) { |
| 2410 // TODO(mlavan): If we overflow into a CONTINUATION frame, this will | 2410 // This will get overwritten if we overflow into a CONTINUATION frame. |
| 2411 // get overwritten below, so we should probably just get rid of the | 2411 flags |= HEADERS_FLAG_END_HEADERS; |
| 2412 // end_headers field. | |
| 2413 if (headers.end_headers()) { | |
| 2414 flags |= HEADERS_FLAG_END_HEADERS; | |
| 2415 } | |
| 2416 if (headers.has_priority()) { | 2412 if (headers.has_priority()) { |
| 2417 flags |= HEADERS_FLAG_PRIORITY; | 2413 flags |= HEADERS_FLAG_PRIORITY; |
| 2418 } | 2414 } |
| 2419 } | 2415 } |
| 2420 | 2416 |
| 2421 // The size of this frame, including variable-length name-value block. | 2417 // The size of this frame, including variable-length name-value block. |
| 2422 size_t size = GetHeadersMinimumSize(); | 2418 size_t size = GetHeadersMinimumSize(); |
| 2423 | 2419 |
| 2424 uint32 priority = headers.priority(); | 2420 uint32 priority = headers.priority(); |
| 2425 if (headers.has_priority()) { | 2421 if (headers.has_priority()) { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2511 DCHECK_LT(SPDY3, protocol_version()); | 2507 DCHECK_LT(SPDY3, protocol_version()); |
| 2512 SpdyFrameBuilder builder(GetBlockedSize(), protocol_version()); | 2508 SpdyFrameBuilder builder(GetBlockedSize(), protocol_version()); |
| 2513 builder.BeginNewFrame(*this, BLOCKED, kNoFlags, blocked.stream_id()); | 2509 builder.BeginNewFrame(*this, BLOCKED, kNoFlags, blocked.stream_id()); |
| 2514 return builder.take(); | 2510 return builder.take(); |
| 2515 } | 2511 } |
| 2516 | 2512 |
| 2517 SpdyFrame* SpdyFramer::SerializePushPromise( | 2513 SpdyFrame* SpdyFramer::SerializePushPromise( |
| 2518 const SpdyPushPromiseIR& push_promise) { | 2514 const SpdyPushPromiseIR& push_promise) { |
| 2519 DCHECK_LT(SPDY3, protocol_version()); | 2515 DCHECK_LT(SPDY3, protocol_version()); |
| 2520 uint8 flags = 0; | 2516 uint8 flags = 0; |
| 2521 // TODO(mlavan): If we overflow into a CONTINUATION frame, this will | 2517 // This will get overwritten if we overflow into a CONTINUATION frame. |
| 2522 // get overwritten below, so we should probably just get rid of the | 2518 flags |= PUSH_PROMISE_FLAG_END_PUSH_PROMISE; |
| 2523 // end_push_promise field. | |
| 2524 if (push_promise.end_push_promise()) { | |
| 2525 flags |= PUSH_PROMISE_FLAG_END_PUSH_PROMISE; | |
| 2526 } | |
| 2527 // The size of this frame, including variable-length name-value block. | 2519 // The size of this frame, including variable-length name-value block. |
| 2528 size_t size = GetPushPromiseMinimumSize(); | 2520 size_t size = GetPushPromiseMinimumSize(); |
| 2529 | 2521 |
| 2530 string hpack_encoding; | 2522 string hpack_encoding; |
| 2531 if (protocol_version() > SPDY3) { | 2523 if (protocol_version() > SPDY3) { |
| 2532 if (enable_compression_) { | 2524 if (enable_compression_) { |
| 2533 hpack_encoder_.EncodeHeaderSet( | 2525 hpack_encoder_.EncodeHeaderSet( |
| 2534 push_promise.name_value_block(), &hpack_encoding); | 2526 push_promise.name_value_block(), &hpack_encoding); |
| 2535 } else { | 2527 } else { |
| 2536 hpack_encoder_.EncodeHeaderSetWithoutCompression( | 2528 hpack_encoder_.EncodeHeaderSetWithoutCompression( |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2991 builder->Seek(compressed_size); | 2983 builder->Seek(compressed_size); |
| 2992 builder->RewriteLength(*this); | 2984 builder->RewriteLength(*this); |
| 2993 | 2985 |
| 2994 pre_compress_bytes.Add(uncompressed_len); | 2986 pre_compress_bytes.Add(uncompressed_len); |
| 2995 post_compress_bytes.Add(compressed_size); | 2987 post_compress_bytes.Add(compressed_size); |
| 2996 | 2988 |
| 2997 compressed_frames.Increment(); | 2989 compressed_frames.Increment(); |
| 2998 } | 2990 } |
| 2999 | 2991 |
| 3000 } // namespace net | 2992 } // namespace net |
| OLD | NEW |