spdy_protocol.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file contains some protocol structures for use with SPDY 2 and 3 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The SPDY 2 spec can be found at: 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The SPDY 3 spec can be found at: 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_SPDY_SPDY_PROTOCOL_H_ 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_SPDY_SPDY_PROTOCOL_H_ 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/string_piece.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sys_byteorder.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/net_export.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/spdy/spdy_bitmasks.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int32 kSpdyVersion2 = 2; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int32 kSpdyVersion3 = 3; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A SPDY stream id is a 31 bit entity. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef uint32 SpdyStreamId; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Specifies the stream ID used to denote the current session (for 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// flow control). 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const SpdyStreamId kSessionFlowControlStreamId = 0; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Initial window size for a Spdy stream. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int32 kSpdyStreamInitialWindowSize = 64 * 1024; // 64 KBytes 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Initial window size for a Spdy session. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int32 kSpdySessionInitialWindowSize = 64 * 1024; // 64 KBytes 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Maximum window size for a Spdy stream or session. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int32 kSpdyMaximumWindowSize = 0x7FFFFFFF; // Max signed 32bit int 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SPDY 2 dictionary. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is just a hacked dictionary to use for shrinking HTTP-like headers. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kV2Dictionary[] = 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "-agent10010120020120220320420520630030130230330430530630740040140240340440" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "5406407408409410411412413414415416417500501502503504505accept-rangesageeta" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "sfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ndayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic" 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ation/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ".1statusversionurl"; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kV2DictionarySize = arraysize(kV2Dictionary); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SPDY 3 dictionary. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kV3Dictionary[] = { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x07, 0x6f, 0x70, 0x74, 0x69, // ....opti 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x04, 0x68, // ons....h 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x70, // ead....p 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x70, // ost....p 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65, // ut....de 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05, // lete.... 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00, // trace... 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00, // .accept. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, // ...accep 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, // t-charse 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x00, 0x00, 0x00, 0x0f, 0x61, 0x63, 0x63, // t....acc 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x70, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, // ept-enco 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x0f, // ding.... 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x6c, // accept-l 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, // anguage. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x70, // ...accep 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, // t-ranges 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00, // ....age. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, // ...allow 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68, // ....auth 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, // orizatio 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63, // n....cac 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x68, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, // he-contr 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x6c, 0x00, 0x00, 0x00, 0x0a, 0x63, 0x6f, // ol....co 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, // nnection 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, // ....cont 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61, 0x73, 0x65, // ent-base 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e, 0x74, // ....cont 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, // ent-enco 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, // ding.... 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, // content- 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, // language 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74, // ....cont 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, // ent-leng 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x68, 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, // th....co 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x6f, // ntent-lo 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // cation.. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, // ..conten 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00, 0x00, 0x00, // t-md5... 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, // .content 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, // -range.. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, // ..conten 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, // t-type.. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00, // ..date.. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00, // ..etag.. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, // ..expect 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x07, 0x65, 0x78, 0x70, 0x69, // ....expi 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x72, 0x65, 0x73, 0x00, 0x00, 0x00, 0x04, 0x66, // res....f 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x72, 0x6f, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x68, // rom....h 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x08, 0x69, // ost....i 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, // f-match. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d, 0x6f, // ...if-mo 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73, // dified-s 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d, // ince.... 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, // if-none- 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00, // match... 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67, // .if-rang 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d, // e....if- 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, // unmodifi 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x64, 0x2d, 0x73, 0x69, 0x6e, 0x63, 0x65, // ed-since 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x0d, 0x6c, 0x61, 0x73, 0x74, // ....last 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, // -modifie 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c, 0x6f, 0x63, // d....loc 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, // ation... 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72, // .max-for 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00, // wards... 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00, // .pragma. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79, // ...proxy 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, // -authent 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, // icate... 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x13, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, // .proxy-a 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, // uthoriza 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, // tion.... 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, 0x00, // range... 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x07, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, // .referer 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74, 0x72, // ....retr 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, // y-after. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, // ...serve 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00, // r....te. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, // ...trail 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72, // er....tr 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, // ansfer-e 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00, // ncoding. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x07, 0x75, 0x70, 0x67, 0x72, 0x61, // ...upgra 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x64, 0x65, 0x00, 0x00, 0x00, 0x0a, 0x75, 0x73, // de....us 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x72, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, // er-agent 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x04, 0x76, 0x61, 0x72, 0x79, // ....vary 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61, 0x00, // ....via. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, // ...warni 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77, // ng....ww 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, // w-authen 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, // ticate.. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, // ..method 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, // ....get. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, // ...statu 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x73, 0x00, 0x00, 0x00, 0x06, 0x32, 0x30, 0x30, // s....200 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x20, 0x4f, 0x4b, 0x00, 0x00, 0x00, 0x07, 0x76, // .OK....v 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, // ersion.. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x08, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, // ..HTTP.1 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75, 0x72, // .1....ur 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62, // l....pub 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73, // lic....s 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69, // et-cooki 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65, // e....kee 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00, // p-alive. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x00, 0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, // ...origi 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, // n1001012 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x30, 0x31, 0x32, 0x30, 0x32, 0x32, 0x30, 0x35, // 01202205 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x32, 0x30, 0x36, 0x33, 0x30, 0x30, 0x33, 0x30, // 20630030 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x32, 0x33, 0x30, 0x33, 0x33, 0x30, 0x34, 0x33, // 23033043 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x30, 0x35, 0x33, 0x30, 0x36, 0x33, 0x30, 0x37, // 05306307 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34, 0x30, // 40240540 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34, // 64074084 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31, // 09410411 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31, // 41241341 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34, // 44154164 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34, // 17502504 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x35, 0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e, // 505203.N 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x6e, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, // on-Autho 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, // ritative 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, // .Informa 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x30, 0x34, 0x20, // tion204. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, // No.Conte 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d, 0x6f, // nt301.Mo 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d, // ved.Perm 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34, // anently4 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, // 00.Bad.R 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30, // equest40 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, // 1.Unauth 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30, // orized40 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x33, 0x20, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, // 3.Forbid 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x64, 0x65, 0x6e, 0x34, 0x30, 0x34, 0x20, 0x4e, // den404.N 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, // ot.Found 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x35, 0x30, 0x30, 0x20, 0x49, 0x6e, 0x74, 0x65, // 500.Inte 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x72, // rnal.Ser 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72, 0x6f, // ver.Erro 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74, // r501.Not 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, // .Impleme 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20, // nted503. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, // Service. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, // Unavaila 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46, // bleJan.F 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x62, 0x20, 0x4d, 0x61, 0x72, 0x20, 0x41, // eb.Mar.A 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x70, 0x72, 0x20, 0x4d, 0x61, 0x79, 0x20, 0x4a, // pr.May.J 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x75, 0x6e, 0x20, 0x4a, 0x75, 0x6c, 0x20, 0x41, // un.Jul.A 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x75, 0x67, 0x20, 0x53, 0x65, 0x70, 0x74, 0x20, // ug.Sept. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f, 0x76, 0x20, // Oct.Nov. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a, 0x30, // Dec.00.0 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e, // 0.00.Mon 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, // ..Tue..W 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c, // ed..Thu. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, // .Fri..Sa 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, // t..Sun.. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b, // GMTchunk 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x64, 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, // ed.text. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x69, 0x6d, 0x61, // html.ima 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x2c, 0x69, // ge.png.i 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x67, // mage.jpg 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, // .image.g 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, // if.appli 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, // cation.x 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, // ml.appli 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, // cation.x 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c, // html.xml 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, // .text.pl 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x61, 0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74, // ain.text 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, // .javascr 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x69, 0x70, 0x74, 0x2c, 0x70, 0x75, 0x62, 0x6c, // ipt.publ 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x69, 0x63, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, // icprivat 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x65, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, // emax-age 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x64, 0x65, // .gzip.de 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, // flate.sd 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, // chcharse 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63, // t.utf-8c 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69, // harset.i 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, // so-8859- 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a, // 1.utf-.. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x2c, 0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e // .enq.0. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kV3DictionarySize = arraysize(kV3Dictionary); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: all protocol data structures are on-the-wire format. That means that 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// data is stored in network-normalized order. Readers must use the 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// accessors provided or call base::NetworkToHostX() functions. 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(hkhalil): remove above note. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Types of Spdy Control Frames. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SpdyControlType { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SYN_STREAM = 1, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SYN_REPLY, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RST_STREAM, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOOP, // Because it is valid in SPDY/2, kept for identifiability/enum order. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PING, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GOAWAY, 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HEADERS, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WINDOW_UPDATE, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CREDENTIAL, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NUM_CONTROL_FRAME_TYPES 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flags on data packets. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SpdyDataFlags { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DATA_FLAG_NONE = 0, 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DATA_FLAG_FIN = 1, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flags on control packets 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SpdyControlFlags { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTROL_FLAG_NONE = 0, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTROL_FLAG_FIN = 1, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTROL_FLAG_UNIDIRECTIONAL = 2 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flags on the SETTINGS control frame. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SpdySettingsControlFlags { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS = 0x1 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flags for settings within a SETTINGS frame. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SpdySettingsFlags { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_FLAG_NONE = 0x0, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_FLAG_PLEASE_PERSIST = 0x1, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_FLAG_PERSISTED = 0x2 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// List of known settings. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SpdySettingsIds { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_UPLOAD_BANDWIDTH = 0x1, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_DOWNLOAD_BANDWIDTH = 0x2, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Network round trip time in milliseconds. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_ROUND_TRIP_TIME = 0x3, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_MAX_CONCURRENT_STREAMS = 0x4, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TCP congestion window in packets. 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_CURRENT_CWND = 0x5, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Downstream byte retransmission rate in percentage. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_DOWNLOAD_RETRANS_RATE = 0x6, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initial window size in bytes 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SETTINGS_INITIAL_WINDOW_SIZE = 0x7 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Status codes for RST_STREAM frames. 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum SpdyRstStreamStatus { 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_INVALID = 0, 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_PROTOCOL_ERROR = 1, 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_INVALID_STREAM = 2, 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_REFUSED_STREAM = 3, 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_UNSUPPORTED_VERSION = 4, 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_CANCEL = 5, 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_INTERNAL_ERROR = 6, 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_FLOW_CONTROL_ERROR = 7, 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_STREAM_IN_USE = 8, 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_STREAM_ALREADY_CLOSED = 9, 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_INVALID_CREDENTIALS = 10, 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_FRAME_TOO_LARGE = 11, 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RST_STREAM_NUM_STATUS_CODES = 12 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Status codes for GOAWAY frames. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SpdyGoAwayStatus { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GOAWAY_INVALID = -1, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GOAWAY_OK = 0, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GOAWAY_PROTOCOL_ERROR = 1, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GOAWAY_INTERNAL_ERROR = 2, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GOAWAY_NUM_STATUS_CODES = 3 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A SPDY priority is a number between 0 and 7 (inclusive). 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SPDY priority range is version-dependant. For SPDY 2 and below, priority is a 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// number between 0 and 3. 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef uint8 SpdyPriority; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef uint8 SpdyCredentialSlot; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef std::map<std::string, std::string> SpdyNameValueBlock; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef uint32 SpdyPingId; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyFrame; 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef SpdyFrame SpdySerializedFrame; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyFramer; 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyFrameBuilder; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Intermediate representation for SPDY frames. 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(hkhalil): Rename this class to SpdyFrame when the existing SpdyFrame is 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// gone. 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyFrameIR { 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SpdyFrameIR() {} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyFrameIR() {} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyFrameIR); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Abstract class intended to be inherited by IRs that have a stream associated 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to them. 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyFrameWithStreamIdIR : public SpdyFrameIR { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SpdyFrameWithStreamIdIR() {} 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyStreamId stream_id() const { return stream_id_; } 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_stream_id(SpdyStreamId stream_id) { 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(hkhalil): DCHECK_LT(0u, stream_id); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(0u, stream_id & ~kStreamIdMask); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) stream_id_ = stream_id; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdyFrameWithStreamIdIR(SpdyStreamId stream_id) { 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_stream_id(stream_id); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyStreamId stream_id_; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithStreamIdIR); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Abstract class intended to be inherited by IRs that have the option of a FIN 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// flag. Implies SpdyFrameWithStreamIdIR. 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyFrameWithFinIR : public SpdyFrameWithStreamIdIR { 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SpdyFrameWithFinIR() {} 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool fin() const { return fin_; } 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_fin(bool fin) { fin_ = fin; } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdyFrameWithFinIR(SpdyStreamId stream_id) 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SpdyFrameWithStreamIdIR(stream_id), 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fin_(false) {} 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool fin_; 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithFinIR); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Abstract class intended to be inherited by IRs that contain a name-value 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// block. Implies SpdyFrameWithFinIR. 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NET_EXPORT_PRIVATE SpdyFrameWithNameValueBlockIR 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SpdyNameValueBlock& name_value_block() const { 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return name_value_block_; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyNameValueBlock* GetMutableNameValueBlock() { return &name_value_block_; } 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetHeader(const base::StringPiece& name, 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& value) { 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_value_block_[name.as_string()] = value.as_string(); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdyFrameWithNameValueBlockIR(SpdyStreamId stream_id); 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SpdyFrameWithNameValueBlockIR(); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyNameValueBlock name_value_block_; 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithNameValueBlockIR); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NET_EXPORT_PRIVATE SpdyDataIR 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Performs deep copy on data. 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyDataIR(SpdyStreamId stream_id, const base::StringPiece& data); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use in conjunction with SetDataShallow() for shallow-copy on data. 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdyDataIR(SpdyStreamId stream_id); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SpdyDataIR(); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringPiece data() const { return data_; } 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Deep-copy of data (keep private copy). 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDataDeep(const base::StringPiece& data) { 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data_store_.reset(new std::string(data.data(), data.length())); 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data_ = *(data_store_.get()); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Shallow-copy of data (do not keep private copy). 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDataShallow(const base::StringPiece& data) { 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data_store_.reset(); 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data_ = data; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to store data that this SpdyDataIR should own. 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<std::string> data_store_; 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringPiece data_; 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyDataIR); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdySynStreamIR : public SpdyFrameWithNameValueBlockIR { 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdySynStreamIR(SpdyStreamId stream_id) 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SpdyFrameWithNameValueBlockIR(stream_id), 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) associated_to_stream_id_(0), 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) priority_(0), 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) slot_(0), 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unidirectional_(false) {} 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyStreamId associated_to_stream_id() const { 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return associated_to_stream_id_; 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_associated_to_stream_id(SpdyStreamId stream_id) { 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) associated_to_stream_id_ = stream_id; 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyPriority priority() const { return priority_; } 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_priority(SpdyPriority priority) { priority_ = priority; } 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyCredentialSlot slot() const { return slot_; } 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_slot(SpdyCredentialSlot slot) { slot_ = slot; } 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool unidirectional() const { return unidirectional_; } 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_unidirectional(bool unidirectional) { 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unidirectional_ = unidirectional; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyStreamId associated_to_stream_id_; 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyPriority priority_; 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyCredentialSlot slot_; 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool unidirectional_; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdySynStreamIR); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdySynReplyIR : public SpdyFrameWithNameValueBlockIR { 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdySynReplyIR(SpdyStreamId stream_id) 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SpdyFrameWithNameValueBlockIR(stream_id) {} 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdySynReplyIR); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyRstStreamIR : public SpdyFrameWithStreamIdIR { 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyRstStreamIR(SpdyStreamId stream_id, SpdyRstStreamStatus status) 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SpdyFrameWithStreamIdIR(stream_id) { 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_status(status); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyRstStreamStatus status() const { 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return status_; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_status(SpdyRstStreamStatus status) { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_NE(status, RST_STREAM_INVALID); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_LT(status, RST_STREAM_NUM_STATUS_CODES); 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_ = status; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyRstStreamStatus status_; 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyRstStreamIR); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdySettingsIR : public SpdyFrameIR { 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Associates flags with a value. 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct Value { 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Value() : persist_value(false), 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) persisted(false), 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value(0) {} 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool persist_value; 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool persisted; 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32 value; 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::map<SpdySettingsIds, Value> ValueMap; 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdySettingsIR(); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SpdySettingsIR(); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overwrites as appropriate. 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ValueMap& values() const { return values_; } 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddSetting(SpdySettingsIds id, 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool persist_value, 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool persisted, 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32 value) { 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(hkhalil): DCHECK_LE(SETTINGS_UPLOAD_BANDWIDTH, id); 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(hkhalil): DCHECK_GE(SETTINGS_INITIAL_WINDOW_SIZE, id); 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) values_[id].persist_value = persist_value; 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) values_[id].persisted = persisted; 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) values_[id].value = value; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool clear_settings() const { return clear_settings_; } 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_clear_settings(bool clear_settings) { 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clear_settings_ = clear_settings; 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ValueMap values_; 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool clear_settings_; 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdySettingsIR); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyPingIR : public SpdyFrameIR { 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdyPingIR(SpdyPingId id) : id_(id) {} 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyPingId id() const { return id_; } 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyPingId id_; 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyPingIR); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyGoAwayIR : public SpdyFrameIR { 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyGoAwayIR(SpdyStreamId last_good_stream_id, SpdyGoAwayStatus status) { 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_last_good_stream_id(last_good_stream_id); 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_status(status); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyStreamId last_good_stream_id() const { return last_good_stream_id_; } 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_last_good_stream_id(SpdyStreamId last_good_stream_id) { 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_LE(0u, last_good_stream_id); 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(0u, last_good_stream_id & ~kStreamIdMask); 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_good_stream_id_ = last_good_stream_id; 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyGoAwayStatus status() const { return status_; } 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_status(SpdyGoAwayStatus status) { 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(hkhalil): Check valid ranges of status? 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_ = status; 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyStreamId last_good_stream_id_; 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyGoAwayStatus status_; 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyGoAwayIR); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyHeadersIR : public SpdyFrameWithNameValueBlockIR { 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdyHeadersIR(SpdyStreamId stream_id) 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SpdyFrameWithNameValueBlockIR(stream_id) {} 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyWindowUpdateIR : public SpdyFrameWithStreamIdIR { 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyWindowUpdateIR(SpdyStreamId stream_id, int32 delta) 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SpdyFrameWithStreamIdIR(stream_id) { 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_delta(delta); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32 delta() const { return delta_; } 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_delta(int32 delta) { 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_LT(0, delta); 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_LE(delta, kSpdyMaximumWindowSize); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delta_ = delta; 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32 delta_; 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyWindowUpdateIR); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyCredentialIR : public SpdyFrameIR { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::vector<std::string> CertificateList; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SpdyCredentialIR(int16 slot); 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SpdyCredentialIR(); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int16 slot() const { return slot_; } 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_slot(int16 slot) { 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(hkhalil): Verify valid slot range? 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) slot_ = slot; 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringPiece proof() const { return proof_; } 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_proof(const base::StringPiece& proof) { 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proof.CopyToString(&proof_); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CertificateList* certificates() const { return &certificates_; } 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddCertificate(const base::StringPiece& certificate) { 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) certificates_.push_back(certificate.as_string()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int16 slot_; 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string proof_; 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CertificateList certificates_; 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyCredentialIR); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ------------------------------------------------------------------------- 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Wrapper classes for various SPDY frames. 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// All Spdy Frame types derive from this SpdyFrame class. 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyFrame { 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create a SpdyFrame using a pre-created buffer. 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |owns_buffer| is true, this class takes ownership of the buffer 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and will delete it on cleanup. The buffer must have been created using 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // new char[]. 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |owns_buffer| is false, the caller retains ownership of the buffer and 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // is responsible for making sure the buffer outlives this frame. In other 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // words, this class does NOT create a copy of the buffer. 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyFrame(char* data, size_t size, bool owns_buffer) 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : frame_(data), 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_(size), 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) owns_buffer_(owns_buffer) { 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(frame_); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~SpdyFrame() { 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (owns_buffer_) { 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete [] frame_; 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) frame_ = NULL; 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Provides access to the frame bytes, which is a buffer containing 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the frame packed as expected for sending over the wire. 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char* data() const { return frame_; } 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the actual size of the underlying buffer. 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t size() const { return size_; } 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char* frame_; 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t size_; 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool owns_buffer_; 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdyFrame); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NET_SPDY_SPDY_PROTOCOL_H_ 707