1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/tools/flip_server/flip_config.h"
6
7 namespace net {
8
FlipAcceptor(enum FlipHandlerType flip_handler_type,std::string listen_ip,std::string listen_port,std::string ssl_cert_filename,std::string ssl_key_filename,std::string http_server_ip,std::string http_server_port,std::string https_server_ip,std::string https_server_port,int spdy_only,int accept_backlog_size,bool disable_nagle,int accepts_per_wake,bool reuseport,bool wait_for_iface,void * memory_cache)9 FlipAcceptor::FlipAcceptor(enum FlipHandlerType flip_handler_type,
10 std::string listen_ip,
11 std::string listen_port,
12 std::string ssl_cert_filename,
13 std::string ssl_key_filename,
14 std::string http_server_ip,
15 std::string http_server_port,
16 std::string https_server_ip,
17 std::string https_server_port,
18 int spdy_only,
19 int accept_backlog_size,
20 bool disable_nagle,
21 int accepts_per_wake,
22 bool reuseport,
23 bool wait_for_iface,
24 void *memory_cache)
25 : flip_handler_type_(flip_handler_type),
26 listen_ip_(listen_ip),
27 listen_port_(listen_port),
28 ssl_cert_filename_(ssl_cert_filename),
29 ssl_key_filename_(ssl_key_filename),
30 http_server_ip_(http_server_ip),
31 http_server_port_(http_server_port),
32 https_server_ip_(https_server_ip),
33 https_server_port_(https_server_port),
34 spdy_only_(spdy_only),
35 accept_backlog_size_(accept_backlog_size),
36 disable_nagle_(disable_nagle),
37 accepts_per_wake_(accepts_per_wake),
38 memory_cache_(memory_cache),
39 ssl_session_expiry_(300), // TODO(mbelshe): Hook these up!
40 ssl_disable_compression_(false),
41 idle_socket_timeout_s_(300) {
42 VLOG(1) << "Attempting to listen on " << listen_ip_.c_str() << ":"
43 << listen_port_.c_str();
44 if (!https_server_ip_.size())
45 https_server_ip_ = http_server_ip_;
46 if (!https_server_port_.size())
47 https_server_port_ = http_server_port_;
48
49 while (1) {
50 int ret = CreateListeningSocket(listen_ip_,
51 listen_port_,
52 true,
53 accept_backlog_size_,
54 true,
55 reuseport,
56 wait_for_iface,
57 disable_nagle_,
58 &listen_fd_);
59 if ( ret == 0 ) {
60 break;
61 } else if ( ret == -3 && wait_for_iface ) {
62 // Binding error EADDRNOTAVAIL was encounted. We need
63 // to wait for the interfaces to raised. try again.
64 usleep(200000);
65 } else {
66 LOG(ERROR) << "Unable to create listening socket for: ret = " << ret
67 << ": " << listen_ip_.c_str() << ":"
68 << listen_port_.c_str();
69 return;
70 }
71 }
72
73 SetNonBlocking(listen_fd_);
74 VLOG(1) << "Listening on socket: ";
75 if (flip_handler_type == FLIP_HANDLER_PROXY)
76 VLOG(1) << "\tType : Proxy";
77 else if (FLIP_HANDLER_SPDY_SERVER)
78 VLOG(1) << "\tType : SPDY Server";
79 else if (FLIP_HANDLER_HTTP_SERVER)
80 VLOG(1) << "\tType : HTTP Server";
81 VLOG(1) << "\tIP : " << listen_ip_;
82 VLOG(1) << "\tPort : " << listen_port_;
83 VLOG(1) << "\tHTTP Server : " << http_server_ip_ << ":"
84 << http_server_port_;
85 VLOG(1) << "\tHTTPS Server : " << https_server_ip_ << ":"
86 << https_server_port_;
87 VLOG(1) << "\tSSL : "
88 << (ssl_cert_filename.size()?"true":"false");
89 VLOG(1) << "\tCertificate : " << ssl_cert_filename;
90 VLOG(1) << "\tKey : " << ssl_key_filename;
91 VLOG(1) << "\tSpdy Only : " << (spdy_only?"true":"flase");
92 }
93
~FlipAcceptor()94 FlipAcceptor::~FlipAcceptor() {}
95
FlipConfig()96 FlipConfig::FlipConfig()
97 : server_think_time_in_s_(0),
98 log_destination_(logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG),
99 wait_for_iface_(false) {
100 }
101
~FlipConfig()102 FlipConfig::~FlipConfig() {}
103
AddAcceptor(enum FlipHandlerType flip_handler_type,std::string listen_ip,std::string listen_port,std::string ssl_cert_filename,std::string ssl_key_filename,std::string http_server_ip,std::string http_server_port,std::string https_server_ip,std::string https_server_port,int spdy_only,int accept_backlog_size,bool disable_nagle,int accepts_per_wake,bool reuseport,bool wait_for_iface,void * memory_cache)104 void FlipConfig::AddAcceptor(enum FlipHandlerType flip_handler_type,
105 std::string listen_ip,
106 std::string listen_port,
107 std::string ssl_cert_filename,
108 std::string ssl_key_filename,
109 std::string http_server_ip,
110 std::string http_server_port,
111 std::string https_server_ip,
112 std::string https_server_port,
113 int spdy_only,
114 int accept_backlog_size,
115 bool disable_nagle,
116 int accepts_per_wake,
117 bool reuseport,
118 bool wait_for_iface,
119 void *memory_cache) {
120 // TODO(mbelshe): create a struct FlipConfigArgs{} for the arguments.
121 acceptors_.push_back(new FlipAcceptor(flip_handler_type,
122 listen_ip,
123 listen_port,
124 ssl_cert_filename,
125 ssl_key_filename,
126 http_server_ip,
127 http_server_port,
128 https_server_ip,
129 https_server_port,
130 spdy_only,
131 accept_backlog_size,
132 disable_nagle,
133 accepts_per_wake,
134 reuseport,
135 wait_for_iface,
136 memory_cache));
137 }
138
139 } // namespace
140