| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    49 const uint32_t TCP_MSS = 1400;        // Maximum segment size |    49 const uint32_t TCP_MSS = 1400;        // Maximum segment size | 
|    50  |    50  | 
|    51 // Note: The current algorithm doesn't work for sample sizes smaller than this. |    51 // Note: The current algorithm doesn't work for sample sizes smaller than this. | 
|    52 const int NUM_SAMPLES = 1000; |    52 const int NUM_SAMPLES = 1000; | 
|    53  |    53  | 
|    54 enum { |    54 enum { | 
|    55   MSG_ID_PACKET, |    55   MSG_ID_PACKET, | 
|    56   MSG_ID_ADDRESS_BOUND, |    56   MSG_ID_ADDRESS_BOUND, | 
|    57   MSG_ID_CONNECT, |    57   MSG_ID_CONNECT, | 
|    58   MSG_ID_DISCONNECT, |    58   MSG_ID_DISCONNECT, | 
 |    59   MSG_ID_SIGNALREADEVENT, | 
|    59 }; |    60 }; | 
|    60  |    61  | 
|    61 // Packets are passed between sockets as messages.  We copy the data just like |    62 // Packets are passed between sockets as messages.  We copy the data just like | 
|    62 // the kernel does. |    63 // the kernel does. | 
|    63 class Packet : public MessageData { |    64 class Packet : public MessageData { | 
|    64  public: |    65  public: | 
|    65   Packet(const char* data, size_t size, const SocketAddress& from) |    66   Packet(const char* data, size_t size, const SocketAddress& from) | 
|    66         : size_(size), consumed_(0), from_(from) { |    67         : size_(size), consumed_(0), from_(from) { | 
|    67     RTC_DCHECK(nullptr != data); |    68     RTC_DCHECK(nullptr != data); | 
|    68     data_ = new char[size_]; |    69     data_ = new char[size_]; | 
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   296   memcpy(pv, packet->data(), data_read); |   297   memcpy(pv, packet->data(), data_read); | 
|   297   *paddr = packet->from(); |   298   *paddr = packet->from(); | 
|   298  |   299  | 
|   299   if (data_read < packet->size()) { |   300   if (data_read < packet->size()) { | 
|   300     packet->Consume(data_read); |   301     packet->Consume(data_read); | 
|   301   } else { |   302   } else { | 
|   302     recv_buffer_.pop_front(); |   303     recv_buffer_.pop_front(); | 
|   303     delete packet; |   304     delete packet; | 
|   304   } |   305   } | 
|   305  |   306  | 
 |   307   // To behave like a real socket, SignalReadEvent should fire in the next | 
 |   308   // message loop pass if there's still data buffered. | 
 |   309   if (!recv_buffer_.empty()) { | 
 |   310     // Clear the message so it doesn't end up posted multiple times. | 
 |   311     server_->msg_queue_->Clear(this, MSG_ID_SIGNALREADEVENT); | 
 |   312     server_->msg_queue_->Post(RTC_FROM_HERE, this, MSG_ID_SIGNALREADEVENT); | 
 |   313   } | 
 |   314  | 
|   306   if (SOCK_STREAM == type_) { |   315   if (SOCK_STREAM == type_) { | 
|   307     bool was_full = (recv_buffer_size_ == server_->recv_buffer_capacity_); |   316     bool was_full = (recv_buffer_size_ == server_->recv_buffer_capacity_); | 
|   308     recv_buffer_size_ -= data_read; |   317     recv_buffer_size_ -= data_read; | 
|   309     if (was_full) { |   318     if (was_full) { | 
|   310       VirtualSocket* sender = server_->LookupBinding(remote_addr_); |   319       VirtualSocket* sender = server_->LookupBinding(remote_addr_); | 
|   311       RTC_DCHECK(nullptr != sender); |   320       RTC_DCHECK(nullptr != sender); | 
|   312       server_->SendTcp(sender); |   321       server_->SendTcp(sender); | 
|   313     } |   322     } | 
|   314   } |   323   } | 
|   315  |   324  | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   414     if (CS_CLOSED != state_) { |   423     if (CS_CLOSED != state_) { | 
|   415       int error = (CS_CONNECTING == state_) ? ECONNREFUSED : 0; |   424       int error = (CS_CONNECTING == state_) ? ECONNREFUSED : 0; | 
|   416       state_ = CS_CLOSED; |   425       state_ = CS_CLOSED; | 
|   417       remote_addr_.Clear(); |   426       remote_addr_.Clear(); | 
|   418       if (async_) { |   427       if (async_) { | 
|   419         SignalCloseEvent(this, error); |   428         SignalCloseEvent(this, error); | 
|   420       } |   429       } | 
|   421     } |   430     } | 
|   422   } else if (pmsg->message_id == MSG_ID_ADDRESS_BOUND) { |   431   } else if (pmsg->message_id == MSG_ID_ADDRESS_BOUND) { | 
|   423     SignalAddressReady(this, GetLocalAddress()); |   432     SignalAddressReady(this, GetLocalAddress()); | 
 |   433   } else if (pmsg->message_id == MSG_ID_SIGNALREADEVENT) { | 
 |   434     if (!recv_buffer_.empty()) { | 
 |   435       SignalReadEvent(this); | 
 |   436     } | 
|   424   } else { |   437   } else { | 
|   425     RTC_NOTREACHED(); |   438     RTC_NOTREACHED(); | 
|   426   } |   439   } | 
|   427 } |   440 } | 
|   428  |   441  | 
|   429 int VirtualSocket::InitiateConnect(const SocketAddress& addr, bool use_delay) { |   442 int VirtualSocket::InitiateConnect(const SocketAddress& addr, bool use_delay) { | 
|   430   if (!remote_addr_.IsNil()) { |   443   if (!remote_addr_.IsNil()) { | 
|   431     error_ = (CS_CONNECTED == state_) ? EISCONN : EINPROGRESS; |   444     error_ = (CS_CONNECTED == state_) ? EISCONN : EINPROGRESS; | 
|   432     return -1; |   445     return -1; | 
|   433   } |   446   } | 
| (...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1180 void VirtualSocketServer::SetDefaultRoute(const IPAddress& from_addr) { |  1193 void VirtualSocketServer::SetDefaultRoute(const IPAddress& from_addr) { | 
|  1181   RTC_DCHECK(!IPIsAny(from_addr)); |  1194   RTC_DCHECK(!IPIsAny(from_addr)); | 
|  1182   if (from_addr.family() == AF_INET) { |  1195   if (from_addr.family() == AF_INET) { | 
|  1183     default_route_v4_ = from_addr; |  1196     default_route_v4_ = from_addr; | 
|  1184   } else if (from_addr.family() == AF_INET6) { |  1197   } else if (from_addr.family() == AF_INET6) { | 
|  1185     default_route_v6_ = from_addr; |  1198     default_route_v6_ = from_addr; | 
|  1186   } |  1199   } | 
|  1187 } |  1200 } | 
|  1188  |  1201  | 
|  1189 }  // namespace rtc |  1202 }  // namespace rtc | 
| OLD | NEW |