Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(352)

Side by Side Diff: webrtc/base/physicalsocketserver.cc

Issue 1556743002: Bind a socket to a network if the network handle is set. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix a compiling issue for Windows Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "webrtc/base/physicalsocketserver.h"
10 11
11 #if defined(_MSC_VER) && _MSC_VER < 1300 12 #if defined(_MSC_VER) && _MSC_VER < 1300
12 #pragma warning(disable:4786) 13 #pragma warning(disable:4786)
13 #endif 14 #endif
14 15
15 #include <assert.h> 16 #include <assert.h>
16 17
17 #ifdef MEMORY_SANITIZER 18 #ifdef MEMORY_SANITIZER
18 #include <sanitizer/msan_interface.h> 19 #include <sanitizer/msan_interface.h>
19 #endif 20 #endif
(...skipping 17 matching lines...) Expand all
37 #endif 38 #endif
38 39
39 #include <algorithm> 40 #include <algorithm>
40 #include <map> 41 #include <map>
41 42
42 #include "webrtc/base/arraysize.h" 43 #include "webrtc/base/arraysize.h"
43 #include "webrtc/base/basictypes.h" 44 #include "webrtc/base/basictypes.h"
44 #include "webrtc/base/byteorder.h" 45 #include "webrtc/base/byteorder.h"
45 #include "webrtc/base/common.h" 46 #include "webrtc/base/common.h"
46 #include "webrtc/base/logging.h" 47 #include "webrtc/base/logging.h"
47 #include "webrtc/base/physicalsocketserver.h"
48 #include "webrtc/base/timeutils.h" 48 #include "webrtc/base/timeutils.h"
49 #include "webrtc/base/winping.h" 49 #include "webrtc/base/winping.h"
50 #include "webrtc/base/win32socketinit.h" 50 #include "webrtc/base/win32socketinit.h"
51 51
52 // stm: this will tell us if we are on OSX 52 // stm: this will tell us if we are on OSX
53 #ifdef HAVE_CONFIG_H 53 #ifdef HAVE_CONFIG_H
54 #include "config.h" 54 #include "config.h"
55 #endif 55 #endif
56 56
57 #if defined(WEBRTC_POSIX) 57 #if defined(WEBRTC_POSIX)
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 size_t len = bind_addr.ToSockAddrStorage(&addr_storage); 167 size_t len = bind_addr.ToSockAddrStorage(&addr_storage);
168 sockaddr* addr = reinterpret_cast<sockaddr*>(&addr_storage); 168 sockaddr* addr = reinterpret_cast<sockaddr*>(&addr_storage);
169 int err = ::bind(s_, addr, static_cast<int>(len)); 169 int err = ::bind(s_, addr, static_cast<int>(len));
170 UpdateLastError(); 170 UpdateLastError();
171 #if !defined(NDEBUG) 171 #if !defined(NDEBUG)
172 if (0 == err) { 172 if (0 == err) {
173 dbg_addr_ = "Bound @ "; 173 dbg_addr_ = "Bound @ ";
174 dbg_addr_.append(GetLocalAddress().ToString()); 174 dbg_addr_.append(GetLocalAddress().ToString());
175 } 175 }
176 #endif 176 #endif
177 if (ss_->network_binder()) {
178 int result =
179 ss_->network_binder()->BindSocketToNetwork(s_, bind_addr.ipaddr());
180 if (result < 0) {
181 LOG(LS_INFO) << "Binding socket to network address "
182 << bind_addr.ipaddr().ToString() << " result " << result;
183 }
184 }
177 return err; 185 return err;
178 } 186 }
179 187
180 int PhysicalSocket::Connect(const SocketAddress& addr) { 188 int PhysicalSocket::Connect(const SocketAddress& addr) {
181 // TODO(pthatcher): Implicit creation is required to reconnect... 189 // TODO(pthatcher): Implicit creation is required to reconnect...
182 // ...but should we make it more explicit? 190 // ...but should we make it more explicit?
183 if (state_ != CS_CLOSED) { 191 if (state_ != CS_CLOSED) {
184 SetError(EALREADY); 192 SetError(EALREADY);
185 return SOCKET_ERROR; 193 return SOCKET_ERROR;
186 } 194 }
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 virtual SOCKET GetSocket() { 1110 virtual SOCKET GetSocket() {
1103 return INVALID_SOCKET; 1111 return INVALID_SOCKET;
1104 } 1112 }
1105 1113
1106 virtual bool CheckSignalClose() { return false; } 1114 virtual bool CheckSignalClose() { return false; }
1107 1115
1108 private: 1116 private:
1109 PhysicalSocketServer* ss_; 1117 PhysicalSocketServer* ss_;
1110 WSAEVENT hev_; 1118 WSAEVENT hev_;
1111 }; 1119 };
1112 #endif // WEBRTC_WIN 1120 #endif // WEBRTC_WIN
1113 1121
1114 // Sets the value of a boolean value to false when signaled. 1122 // Sets the value of a boolean value to false when signaled.
1115 class Signaler : public EventDispatcher { 1123 class Signaler : public EventDispatcher {
1116 public: 1124 public:
1117 Signaler(PhysicalSocketServer* ss, bool* pf) 1125 Signaler(PhysicalSocketServer* ss, bool* pf)
1118 : EventDispatcher(ss), pf_(pf) { 1126 : EventDispatcher(ss), pf_(pf) {
1119 } 1127 }
1120 ~Signaler() override { } 1128 ~Signaler() override { }
1121 1129
1122 void OnEvent(uint32_t ff, int err) override { 1130 void OnEvent(uint32_t ff, int err) override {
(...skipping 21 matching lines...) Expand all
1144 signal_dispatcher_.reset(); 1152 signal_dispatcher_.reset();
1145 #endif 1153 #endif
1146 delete signal_wakeup_; 1154 delete signal_wakeup_;
1147 ASSERT(dispatchers_.empty()); 1155 ASSERT(dispatchers_.empty());
1148 } 1156 }
1149 1157
1150 void PhysicalSocketServer::WakeUp() { 1158 void PhysicalSocketServer::WakeUp() {
1151 signal_wakeup_->Signal(); 1159 signal_wakeup_->Signal();
1152 } 1160 }
1153 1161
1162 void PhysicalSocketServer::MaybeSetNetworkBinder() {
1163 if (NetworkMonitorFactory::GetFactory()) {
1164 network_binder_ =
1165 NetworkMonitorFactory::GetFactory()->GetOrCreateNetworkMonitor();
1166 }
pthatcher1 2016/01/14 20:07:24 I'm not sure if this is the best way to get it con
honghaiz3 2016/01/15 01:00:38 Removed this. Set Networkbinder from the network m
1167 }
1168
1154 Socket* PhysicalSocketServer::CreateSocket(int type) { 1169 Socket* PhysicalSocketServer::CreateSocket(int type) {
1155 return CreateSocket(AF_INET, type); 1170 return CreateSocket(AF_INET, type);
1156 } 1171 }
1157 1172
1158 Socket* PhysicalSocketServer::CreateSocket(int family, int type) { 1173 Socket* PhysicalSocketServer::CreateSocket(int family, int type) {
1159 PhysicalSocket* socket = new PhysicalSocket(this); 1174 PhysicalSocket* socket = new PhysicalSocket(this);
1160 if (socket->Create(family, type)) { 1175 if (socket->Create(family, type)) {
1161 return socket; 1176 return socket;
1162 } else { 1177 } else {
1163 delete socket; 1178 delete socket;
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
1596 break; 1611 break;
1597 cmsElapsed = TimeSince(msStart); 1612 cmsElapsed = TimeSince(msStart);
1598 if ((cmsWait != kForever) && (cmsElapsed >= cmsWait)) { 1613 if ((cmsWait != kForever) && (cmsElapsed >= cmsWait)) {
1599 break; 1614 break;
1600 } 1615 }
1601 } 1616 }
1602 1617
1603 // Done 1618 // Done
1604 return true; 1619 return true;
1605 } 1620 }
1606 #endif // WEBRTC_WIN 1621 #endif // WEBRTC_WIN
1607 1622
1608 } // namespace rtc 1623 } // namespace rtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698