172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file.
4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
5201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#ifndef NET_TOOLS_FLIP_PROXY_CONFIG_H
6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#define NET_TOOLS_FLIP_PROXY_CONFIG_H
7201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#pragma once
8201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
9201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <arpa/inet.h>  // in_addr_t
10201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string>
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <vector>
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
14201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/logging.h"
15201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "net/tools/flip_server/create_listener.h"
16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace net {
18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
19201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochenum FlipHandlerType {
20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    FLIP_HANDLER_PROXY,
21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    FLIP_HANDLER_SPDY_SERVER,
22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    FLIP_HANDLER_HTTP_SERVER
23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch};
24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass FlipAcceptor {
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public:
2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  FlipAcceptor(enum FlipHandlerType flip_handler_type,
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string listen_ip,
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string listen_port,
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string ssl_cert_filename,
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string ssl_key_filename,
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string http_server_ip,
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string http_server_port,
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string https_server_ip,
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               std::string https_server_port,
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               int spdy_only,
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               int accept_backlog_size,
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               bool disable_nagle,
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               int accepts_per_wake,
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               bool reuseport,
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               bool wait_for_iface,
4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               void *memory_cache);
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ~FlipAcceptor();
4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  enum FlipHandlerType flip_handler_type_;
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string listen_ip_;
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string listen_port_;
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string ssl_cert_filename_;
4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string ssl_key_filename_;
5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string http_server_ip_;
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string http_server_port_;
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string https_server_ip_;
5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string https_server_port_;
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int spdy_only_;
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int accept_backlog_size_;
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  bool disable_nagle_;
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int accepts_per_wake_;
5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int listen_fd_;
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void* memory_cache_;
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int ssl_session_expiry_;
6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  bool ssl_disable_compression_;
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int idle_socket_timeout_s_;
63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch};
64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass FlipConfig {
6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public:
6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  FlipConfig();
6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ~FlipConfig();
69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void AddAcceptor(enum FlipHandlerType flip_handler_type,
7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string listen_ip,
7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string listen_port,
7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string ssl_cert_filename,
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string ssl_key_filename,
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string http_server_ip,
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string http_server_port,
7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string https_server_ip,
7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   std::string https_server_port,
7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   int spdy_only,
8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   int accept_backlog_size,
8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   bool disable_nagle,
8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   int accepts_per_wake,
8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   bool reuseport,
8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   bool wait_for_iface,
8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   void *memory_cache);
86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<FlipAcceptor*> acceptors_;
8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  double server_think_time_in_s_;
8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  enum logging::LoggingDestination log_destination_;
9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string log_filename_;
9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  bool wait_for_iface_;
9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int ssl_session_expiry_;
9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  bool ssl_disable_compression_;
9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int idle_socket_timeout_s_;
9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen};
96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace
98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif  // NET_TOOLS_FLIP_PROXY_CONFIG_H
100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
101