15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef NET_TOOLS_FLIP_SERVER_FLIP_CONFIG_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define NET_TOOLS_FLIP_SERVER_FLIP_CONFIG_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <arpa/inet.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/tools/flip_server/create_listener.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum FlipHandlerType {
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  FLIP_HANDLER_PROXY,
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  FLIP_HANDLER_SPDY_SERVER,
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  FLIP_HANDLER_HTTP_SERVER
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FlipAcceptor {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FlipAcceptor(enum FlipHandlerType flip_handler_type,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string listen_ip,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string listen_port,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string ssl_cert_filename,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string ssl_key_filename,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string http_server_ip,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string http_server_port,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string https_server_ip,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               std::string https_server_port,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               int spdy_only,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               int accept_backlog_size,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               bool disable_nagle,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               int accepts_per_wake,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               bool reuseport,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               bool wait_for_iface,
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)               void* memory_cache);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FlipAcceptor();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum FlipHandlerType flip_handler_type_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string listen_ip_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string listen_port_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ssl_cert_filename_;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ssl_key_filename_;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string http_server_ip_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string http_server_port_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string https_server_ip_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string https_server_port_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int spdy_only_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int accept_backlog_size_;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool disable_nagle_;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int accepts_per_wake_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int listen_fd_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void* memory_cache_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ssl_session_expiry_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ssl_disable_compression_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int idle_socket_timeout_s_;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FlipConfig {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FlipConfig();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FlipConfig();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddAcceptor(enum FlipHandlerType flip_handler_type,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string listen_ip,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string listen_port,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string ssl_cert_filename,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string ssl_key_filename,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string http_server_ip,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string http_server_port,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string https_server_ip,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   std::string https_server_port,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   int spdy_only,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   int accept_backlog_size,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   bool disable_nagle,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   int accepts_per_wake,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   bool reuseport,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   bool wait_for_iface,
84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                   void* memory_cache);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FlipAcceptor*> acceptors_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double server_think_time_in_s_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum logging::LoggingDestination log_destination_;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string log_filename_;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool wait_for_iface_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ssl_session_expiry_;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ssl_disable_compression_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int idle_socket_timeout_s_;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}  // namespace net
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // NET_TOOLS_FLIP_SERVER_FLIP_CONFIG_H_
99