OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 | 111 |
112 // SocketServer: | 112 // SocketServer: |
113 void SetMessageQueue(MessageQueue* queue) override; | 113 void SetMessageQueue(MessageQueue* queue) override; |
114 bool Wait(int cms, bool process_io) override; | 114 bool Wait(int cms, bool process_io) override; |
115 void WakeUp() override; | 115 void WakeUp() override; |
116 | 116 |
117 void SetDelayOnAddress(const rtc::SocketAddress& address, int delay_ms) { | 117 void SetDelayOnAddress(const rtc::SocketAddress& address, int delay_ms) { |
118 delay_by_ip_[address.ipaddr()] = delay_ms; | 118 delay_by_ip_[address.ipaddr()] = delay_ms; |
119 } | 119 } |
120 | 120 |
| 121 // Used by TurnPortTest and TcpPortTest (for example), to mimic a case where |
| 122 // a proxy returns the local host address instead of the original one the |
| 123 // port was bound against. Please see WebRTC issue 3927 for more detail. |
| 124 // |
| 125 // If SetAlternativeLocalAddress(A, B) is called, then when something |
| 126 // attempts to bind a socket to address A, it will get a socket bound to |
| 127 // address B instead. |
| 128 void SetAlternativeLocalAddress(const rtc::IPAddress& address, |
| 129 const rtc::IPAddress& alternative); |
| 130 |
121 typedef std::pair<double, double> Point; | 131 typedef std::pair<double, double> Point; |
122 typedef std::vector<Point> Function; | 132 typedef std::vector<Point> Function; |
123 | 133 |
124 static Function* CreateDistribution(uint32_t mean, | 134 static Function* CreateDistribution(uint32_t mean, |
125 uint32_t stddev, | 135 uint32_t stddev, |
126 uint32_t samples); | 136 uint32_t samples); |
127 | 137 |
128 // Similar to Thread::ProcessMessages, but it only processes messages until | 138 // Similar to Thread::ProcessMessages, but it only processes messages until |
129 // there are no immediate messages or pending network traffic. Returns false | 139 // there are no immediate messages or pending network traffic. Returns false |
130 // if Thread::Stop() was called. | 140 // if Thread::Stop() was called. |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 | 276 |
267 uint32_t bandwidth_; | 277 uint32_t bandwidth_; |
268 uint32_t network_capacity_; | 278 uint32_t network_capacity_; |
269 uint32_t send_buffer_capacity_; | 279 uint32_t send_buffer_capacity_; |
270 uint32_t recv_buffer_capacity_; | 280 uint32_t recv_buffer_capacity_; |
271 uint32_t delay_mean_; | 281 uint32_t delay_mean_; |
272 uint32_t delay_stddev_; | 282 uint32_t delay_stddev_; |
273 uint32_t delay_samples_; | 283 uint32_t delay_samples_; |
274 | 284 |
275 std::map<rtc::IPAddress, int> delay_by_ip_; | 285 std::map<rtc::IPAddress, int> delay_by_ip_; |
| 286 std::map<rtc::IPAddress, rtc::IPAddress> alternative_address_mapping_; |
276 std::unique_ptr<Function> delay_dist_; | 287 std::unique_ptr<Function> delay_dist_; |
277 | 288 |
278 CriticalSection delay_crit_; | 289 CriticalSection delay_crit_; |
279 | 290 |
280 double drop_prob_; | 291 double drop_prob_; |
281 bool sending_blocked_ = false; | 292 bool sending_blocked_ = false; |
282 RTC_DISALLOW_COPY_AND_ASSIGN(VirtualSocketServer); | 293 RTC_DISALLOW_COPY_AND_ASSIGN(VirtualSocketServer); |
283 }; | 294 }; |
284 | 295 |
285 // Implements the socket interface using the virtual network. Packets are | 296 // Implements the socket interface using the virtual network. Packets are |
286 // passed as messages using the message queue of the socket server. | 297 // passed as messages using the message queue of the socket server. |
287 class VirtualSocket : public AsyncSocket, | 298 class VirtualSocket : public AsyncSocket, |
288 public MessageHandler, | 299 public MessageHandler, |
289 public sigslot::has_slots<> { | 300 public sigslot::has_slots<> { |
290 public: | 301 public: |
291 VirtualSocket(VirtualSocketServer* server, int family, int type, bool async); | 302 VirtualSocket(VirtualSocketServer* server, int family, int type, bool async); |
292 ~VirtualSocket() override; | 303 ~VirtualSocket() override; |
293 | 304 |
294 SocketAddress GetLocalAddress() const override; | 305 SocketAddress GetLocalAddress() const override; |
295 SocketAddress GetRemoteAddress() const override; | 306 SocketAddress GetRemoteAddress() const override; |
296 | 307 |
297 // Used by TurnPortTest to mimic a case where proxy returns local host address | |
298 // instead of the original one TurnPort was bound against. Please see WebRTC | |
299 // issue 3927 for more detail. | |
300 void SetAlternativeLocalAddress(const SocketAddress& addr); | |
301 | |
302 int Bind(const SocketAddress& addr) override; | 308 int Bind(const SocketAddress& addr) override; |
303 int Connect(const SocketAddress& addr) override; | 309 int Connect(const SocketAddress& addr) override; |
304 int Close() override; | 310 int Close() override; |
305 int Send(const void* pv, size_t cb) override; | 311 int Send(const void* pv, size_t cb) override; |
306 int SendTo(const void* pv, size_t cb, const SocketAddress& addr) override; | 312 int SendTo(const void* pv, size_t cb, const SocketAddress& addr) override; |
307 int Recv(void* pv, size_t cb, int64_t* timestamp) override; | 313 int Recv(void* pv, size_t cb, int64_t* timestamp) override; |
308 int RecvFrom(void* pv, | 314 int RecvFrom(void* pv, |
309 size_t cb, | 315 size_t cb, |
310 SocketAddress* paddr, | 316 SocketAddress* paddr, |
311 int64_t* timestamp) override; | 317 int64_t* timestamp) override; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 void SetLocalAddress(const SocketAddress& addr); | 352 void SetLocalAddress(const SocketAddress& addr); |
347 | 353 |
348 void OnSocketServerReadyToSend(); | 354 void OnSocketServerReadyToSend(); |
349 | 355 |
350 VirtualSocketServer* server_; | 356 VirtualSocketServer* server_; |
351 int type_; | 357 int type_; |
352 bool async_; | 358 bool async_; |
353 ConnState state_; | 359 ConnState state_; |
354 int error_; | 360 int error_; |
355 SocketAddress local_addr_; | 361 SocketAddress local_addr_; |
356 SocketAddress alternative_local_addr_; | |
357 SocketAddress remote_addr_; | 362 SocketAddress remote_addr_; |
358 | 363 |
359 // Pending sockets which can be Accepted | 364 // Pending sockets which can be Accepted |
360 ListenQueue* listen_queue_; | 365 ListenQueue* listen_queue_; |
361 | 366 |
362 // Data which tcp has buffered for sending | 367 // Data which tcp has buffered for sending |
363 SendBuffer send_buffer_; | 368 SendBuffer send_buffer_; |
364 // Set to false if the last attempt to send resulted in EWOULDBLOCK. | 369 // Set to false if the last attempt to send resulted in EWOULDBLOCK. |
365 // Set back to true when the socket can send again. | 370 // Set back to true when the socket can send again. |
366 bool ready_to_send_ = true; | 371 bool ready_to_send_ = true; |
(...skipping 24 matching lines...) Expand all Loading... |
391 | 396 |
392 // Store the options that are set | 397 // Store the options that are set |
393 OptionsMap options_map_; | 398 OptionsMap options_map_; |
394 | 399 |
395 friend class VirtualSocketServer; | 400 friend class VirtualSocketServer; |
396 }; | 401 }; |
397 | 402 |
398 } // namespace rtc | 403 } // namespace rtc |
399 | 404 |
400 #endif // WEBRTC_RTC_BASE_VIRTUALSOCKETSERVER_H_ | 405 #endif // WEBRTC_RTC_BASE_VIRTUALSOCKETSERVER_H_ |
OLD | NEW |