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