spdy_http_utils.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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_SPDY_SPDY_HTTP_UTILS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_SPDY_SPDY_HTTP_UTILS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "googleurl/src/gurl.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/request_priority.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/spdy/spdy_framer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/spdy/spdy_header_block.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/spdy/spdy_protocol.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpResponseInfo; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct HttpRequestInfo; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpRequestHeaders; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert a SpdyHeaderBlock into an HttpResponseInfo. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |headers| input parameter with the SpdyHeaderBlock. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |response| output parameter for the HttpResponseInfo. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if successfully converted. False if the SpdyHeaderBlock is 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// incomplete (e.g. missing 'status' or 'version'). 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SpdyHeadersToHttpResponse(const SpdyHeaderBlock& headers, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int protocol_version, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpResponseInfo* response); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a SpdyHeaderBlock for a Spdy SYN_STREAM Frame from 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HttpRequestInfo and HttpRequestHeaders. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NET_EXPORT_PRIVATE CreateSpdyHeadersFromHttpRequest( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const HttpRequestInfo& info, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const HttpRequestHeaders& request_headers, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyHeaderBlock* headers, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int protocol_version, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool direct); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the URL associated with the |headers| by assembling the 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// scheme, host and path from the protocol specific keys. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetUrlFromHeaderBlock(const SpdyHeaderBlock& headers, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int protocol_version, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool pushed); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns true if the value of this header should be displayed. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NET_EXPORT_PRIVATE bool ShouldShowHttpHeaderValue( 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& header_name); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NET_EXPORT_PRIVATE SpdyPriority ConvertRequestPriorityToSpdyPriority( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RequestPriority priority, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int protocol_version); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NET_EXPORT_PRIVATE RequestPriority ConvertSpdyPriorityToRequestPriority( 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyPriority priority, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int protocol_version); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NET_SPDY_SPDY_HTTP_UTILS_H_ 60