// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_H_ #define NET_HTTP_HTTP_SERVER_PROPERTIES_H_ #include #include #include "base/basictypes.h" #include "net/base/host_port_pair.h" #include "net/base/net_export.h" #include "net/http/http_pipelined_host_capability.h" #include "net/spdy/spdy_framer.h" // TODO(willchan): Reconsider this. namespace net { enum AlternateProtocol { NPN_SPDY_1 = 0, NPN_SPDY_2, NPN_SPDY_3, NUM_ALTERNATE_PROTOCOLS, ALTERNATE_PROTOCOL_BROKEN, // The alternate protocol is known to be broken. UNINITIALIZED_ALTERNATE_PROTOCOL, }; NET_EXPORT const char* AlternateProtocolToString(AlternateProtocol protocol); NET_EXPORT AlternateProtocol AlternateProtocolFromString( const std::string& protocol); struct NET_EXPORT PortAlternateProtocolPair { bool Equals(const PortAlternateProtocolPair& other) const { return port == other.port && protocol == other.protocol; } std::string ToString() const; uint16 port; AlternateProtocol protocol; }; typedef std::map AlternateProtocolMap; typedef std::map SpdySettingsMap; typedef std::map PipelineCapabilityMap; extern const char kAlternateProtocolHeader[]; extern const char* const kAlternateProtocolStrings[NUM_ALTERNATE_PROTOCOLS]; // The interface for setting/retrieving the HTTP server properties. // Currently, this class manages servers': // * SPDY support (based on NPN results) // * Alternate-Protocol support // * Spdy Settings (like CWND ID field) class NET_EXPORT HttpServerProperties { public: HttpServerProperties() {} virtual ~HttpServerProperties() {} // Deletes all data. virtual void Clear() = 0; // Returns true if |server| supports SPDY. virtual bool SupportsSpdy(const HostPortPair& server) const = 0; // Add |server| into the persistent store. Should only be called from IO // thread. virtual void SetSupportsSpdy(const HostPortPair& server, bool support_spdy) = 0; // Returns true if |server| has an Alternate-Protocol header. virtual bool HasAlternateProtocol(const HostPortPair& server) const = 0; // Returns the Alternate-Protocol and port for |server|. // HasAlternateProtocol(server) must be true. virtual PortAlternateProtocolPair GetAlternateProtocol( const HostPortPair& server) const = 0; // Sets the Alternate-Protocol for |server|. virtual void SetAlternateProtocol(const HostPortPair& server, uint16 alternate_port, AlternateProtocol alternate_protocol) = 0; // Sets the Alternate-Protocol for |server| to be BROKEN. virtual void SetBrokenAlternateProtocol(const HostPortPair& server) = 0; // Returns all Alternate-Protocol mappings. virtual const AlternateProtocolMap& alternate_protocol_map() const = 0; // Gets a reference to the SettingsMap stored for a host. // If no settings are stored, returns an empty SettingsMap. virtual const SettingsMap& GetSpdySettings( const HostPortPair& host_port_pair) const = 0; // Saves an individual SPDY setting for a host. Returns true if SPDY setting // is to be persisted. virtual bool SetSpdySetting(const HostPortPair& host_port_pair, SpdySettingsIds id, SpdySettingsFlags flags, uint32 value) = 0; // Clears all SPDY settings. virtual void ClearSpdySettings() = 0; // Returns all persistent SPDY settings. virtual const SpdySettingsMap& spdy_settings_map() const = 0; virtual HttpPipelinedHostCapability GetPipelineCapability( const HostPortPair& origin) = 0; virtual void SetPipelineCapability( const HostPortPair& origin, HttpPipelinedHostCapability capability) = 0; virtual void ClearPipelineCapabilities() = 0; virtual PipelineCapabilityMap GetPipelineCapabilityMap() const = 0; private: DISALLOW_COPY_AND_ASSIGN(HttpServerProperties); }; } // namespace net #endif // NET_HTTP_HTTP_SERVER_PROPERTIES_H_