OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 return NULL; | 80 return NULL; |
81 } | 81 } |
82 | 82 |
83 if (BindSocket(socket, local_address, min_port, max_port) < 0) { | 83 if (BindSocket(socket, local_address, min_port, max_port) < 0) { |
84 LOG(LS_ERROR) << "TCP bind failed with error " | 84 LOG(LS_ERROR) << "TCP bind failed with error " |
85 << socket->GetError(); | 85 << socket->GetError(); |
86 delete socket; | 86 delete socket; |
87 return NULL; | 87 return NULL; |
88 } | 88 } |
89 | 89 |
90 // If using SSLTCP, wrap the TCP socket in a pseudo-SSL socket. | 90 // If using fake TLS, wrap the TCP socket in a pseudo-SSL socket. |
91 if (opts & PacketSocketFactory::OPT_SSLTCP) { | 91 if (opts & PacketSocketFactory::OPT_TLS_FAKE) { |
92 ASSERT(!(opts & PacketSocketFactory::OPT_TLS)); | 92 ASSERT(!(opts & PacketSocketFactory::OPT_TLS)); |
93 socket = new AsyncSSLSocket(socket); | 93 socket = new AsyncSSLSocket(socket); |
94 } | 94 } |
95 | 95 |
96 // Set TCP_NODELAY (via OPT_NODELAY) for improved performance. | 96 // Set TCP_NODELAY (via OPT_NODELAY) for improved performance. |
97 // See http://go/gtalktcpnodelayexperiment | 97 // See http://go/gtalktcpnodelayexperiment |
98 socket->SetOption(Socket::OPT_NODELAY, 1); | 98 socket->SetOption(Socket::OPT_NODELAY, 1); |
99 | 99 |
100 if (opts & PacketSocketFactory::OPT_STUN) | 100 if (opts & PacketSocketFactory::OPT_STUN) |
101 return new cricket::AsyncStunTCPSocket(socket, true); | 101 return new cricket::AsyncStunTCPSocket(socket, true); |
(...skipping 20 matching lines...) Expand all Loading... |
122 // If using a proxy, wrap the socket in a proxy socket. | 122 // If using a proxy, wrap the socket in a proxy socket. |
123 if (proxy_info.type == PROXY_SOCKS5) { | 123 if (proxy_info.type == PROXY_SOCKS5) { |
124 socket = new AsyncSocksProxySocket( | 124 socket = new AsyncSocksProxySocket( |
125 socket, proxy_info.address, proxy_info.username, proxy_info.password); | 125 socket, proxy_info.address, proxy_info.username, proxy_info.password); |
126 } else if (proxy_info.type == PROXY_HTTPS) { | 126 } else if (proxy_info.type == PROXY_HTTPS) { |
127 socket = | 127 socket = |
128 new AsyncHttpsProxySocket(socket, user_agent, proxy_info.address, | 128 new AsyncHttpsProxySocket(socket, user_agent, proxy_info.address, |
129 proxy_info.username, proxy_info.password); | 129 proxy_info.username, proxy_info.password); |
130 } | 130 } |
131 | 131 |
132 // If using TLS, wrap the socket in an SSL adapter. | 132 // Assert that at most one TLS option is used. |
133 if (opts & PacketSocketFactory::OPT_TLS) { | 133 int tlsOpts = |
134 ASSERT(!(opts & PacketSocketFactory::OPT_SSLTCP)); | 134 opts & (PacketSocketFactory::OPT_TLS | PacketSocketFactory::OPT_TLS_FAKE | |
| 135 PacketSocketFactory::OPT_TLS_INSECURE); |
| 136 ASSERT((tlsOpts & (tlsOpts - 1)) == 0); |
135 | 137 |
| 138 if ((tlsOpts & PacketSocketFactory::OPT_TLS) || |
| 139 (tlsOpts & PacketSocketFactory::OPT_TLS_INSECURE)) { |
| 140 // Using TLS, wrap the socket in an SSL adapter. |
136 SSLAdapter* ssl_adapter = SSLAdapter::Create(socket); | 141 SSLAdapter* ssl_adapter = SSLAdapter::Create(socket); |
137 if (!ssl_adapter) { | 142 if (!ssl_adapter) { |
138 return NULL; | 143 return NULL; |
139 } | 144 } |
140 | 145 |
| 146 if (tlsOpts & PacketSocketFactory::OPT_TLS_INSECURE) { |
| 147 ssl_adapter->set_ignore_bad_cert(true); |
| 148 } |
| 149 |
141 socket = ssl_adapter; | 150 socket = ssl_adapter; |
142 | 151 |
143 if (ssl_adapter->StartSSL(remote_address.hostname().c_str(), false) != 0) { | 152 if (ssl_adapter->StartSSL(remote_address.hostname().c_str(), false) != 0) { |
144 delete ssl_adapter; | 153 delete ssl_adapter; |
145 return NULL; | 154 return NULL; |
146 } | 155 } |
147 | 156 |
148 // If using SSLTCP, wrap the TCP socket in a pseudo-SSL socket. | 157 } else if (tlsOpts & PacketSocketFactory::OPT_TLS_FAKE) { |
149 } else if (opts & PacketSocketFactory::OPT_SSLTCP) { | 158 // Using fake TLS, wrap the TCP socket in a pseudo-SSL socket. |
150 ASSERT(!(opts & PacketSocketFactory::OPT_TLS)); | |
151 socket = new AsyncSSLSocket(socket); | 159 socket = new AsyncSSLSocket(socket); |
152 } | 160 } |
153 | 161 |
154 if (socket->Connect(remote_address) < 0) { | 162 if (socket->Connect(remote_address) < 0) { |
155 LOG(LS_ERROR) << "TCP connect failed with error " | 163 LOG(LS_ERROR) << "TCP connect failed with error " |
156 << socket->GetError(); | 164 << socket->GetError(); |
157 delete socket; | 165 delete socket; |
158 return NULL; | 166 return NULL; |
159 } | 167 } |
160 | 168 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 SocketFactory* BasicPacketSocketFactory::socket_factory() { | 205 SocketFactory* BasicPacketSocketFactory::socket_factory() { |
198 if (thread_) { | 206 if (thread_) { |
199 ASSERT(thread_ == Thread::Current()); | 207 ASSERT(thread_ == Thread::Current()); |
200 return thread_->socketserver(); | 208 return thread_->socketserver(); |
201 } else { | 209 } else { |
202 return socket_factory_; | 210 return socket_factory_; |
203 } | 211 } |
204 } | 212 } |
205 | 213 |
206 } // namespace rtc | 214 } // namespace rtc |
OLD | NEW |