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

Unified Diff: runtime/bin/socket_patch.dart

Issue 2767533002: Revert "Fix observatory tests broken by running dartfmt." (Closed)
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/secure_socket_patch.dart ('k') | runtime/bin/stdio_patch.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/socket_patch.dart
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 5c87fed28f3ea86d216b488f05fe465d272f8278..db194b9ffb6a8fe723ddd67564406fdb61f7f9b3 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -2,79 +2,69 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-@patch
-class RawServerSocket {
- @patch
- static Future<RawServerSocket> bind(address, int port,
- {int backlog: 0, bool v6Only: false, bool shared: false}) {
+@patch class RawServerSocket {
+ @patch static Future<RawServerSocket> bind(address,
+ int port,
+ {int backlog: 0,
+ bool v6Only: false,
+ bool shared: false}) {
return _RawServerSocket.bind(address, port, backlog, v6Only, shared);
}
}
-@patch
-class RawSocket {
- @patch
- static Future<RawSocket> connect(host, int port, {sourceAddress}) {
+
+@patch class RawSocket {
+ @patch static Future<RawSocket> connect(
+ host, int port, {sourceAddress}) {
return _RawSocket.connect(host, port, sourceAddress);
}
}
-@patch
-class InternetAddress {
- @patch
- static InternetAddress get LOOPBACK_IP_V4 {
+
+@patch class InternetAddress {
+ @patch static InternetAddress get LOOPBACK_IP_V4 {
return _InternetAddress.LOOPBACK_IP_V4;
}
- @patch
- static InternetAddress get LOOPBACK_IP_V6 {
+ @patch static InternetAddress get LOOPBACK_IP_V6 {
return _InternetAddress.LOOPBACK_IP_V6;
}
- @patch
- static InternetAddress get ANY_IP_V4 {
+ @patch static InternetAddress get ANY_IP_V4 {
return _InternetAddress.ANY_IP_V4;
}
- @patch
- static InternetAddress get ANY_IP_V6 {
+ @patch static InternetAddress get ANY_IP_V6 {
return _InternetAddress.ANY_IP_V6;
}
- @patch
- factory InternetAddress(String address) {
+ @patch factory InternetAddress(String address) {
return new _InternetAddress.parse(address);
}
- @patch
- static Future<List<InternetAddress>> lookup(String host,
- {InternetAddressType type: InternetAddressType.ANY}) {
+ @patch static Future<List<InternetAddress>> lookup(
+ String host, {InternetAddressType type: InternetAddressType.ANY}) {
return _NativeSocket.lookup(host, type: type);
}
- @patch
- static InternetAddress _cloneWithNewHost(
+ @patch static InternetAddress _cloneWithNewHost(
InternetAddress address, String host) {
return (address as _InternetAddress)._cloneWithNewHost(host);
}
}
-@patch
-class NetworkInterface {
- @patch
- static bool get listSupported {
+@patch class NetworkInterface {
+ @patch static bool get listSupported {
return _listSupported();
}
- @patch
- static Future<List<NetworkInterface>> list(
- {bool includeLoopback: false,
+ @patch static Future<List<NetworkInterface>> list({
+ bool includeLoopback: false,
bool includeLinkLocal: false,
InternetAddressType type: InternetAddressType.ANY}) {
- return _NativeSocket.listInterfaces(
- includeLoopback: includeLoopback,
- includeLinkLocal: includeLinkLocal,
- type: type);
+ return _NativeSocket.listInterfaces(includeLoopback: includeLoopback,
+ includeLinkLocal: includeLinkLocal,
+ type: type);
}
static bool _listSupported() native "NetworkInterface_ListSupported";
@@ -107,9 +97,9 @@ class _InternetAddress implements InternetAddress {
final String _host;
final Uint8List _in_addr;
- InternetAddressType get type => _in_addr.length == _IPV4_ADDR_LENGTH
- ? InternetAddressType.IP_V4
- : InternetAddressType.IP_V6;
+ InternetAddressType get type =>
+ _in_addr.length == _IPV4_ADDR_LENGTH ? InternetAddressType.IP_V4
+ : InternetAddressType.IP_V6;
String get host => _host != null ? _host : address;
@@ -157,7 +147,7 @@ class _InternetAddress implements InternetAddress {
_InternetAddress(this.address, this._host, this._in_addr);
factory _InternetAddress.parse(String address) {
- if (address is! String) {
+ if (address is !String) {
throw new ArgumentError("Invalid internet address $address");
}
var in_addr = _parse(address);
@@ -233,10 +223,12 @@ class _NetworkInterface implements NetworkInterface {
}
}
+
// The NativeFieldWrapperClass1 can not be used with a mixin, due to missing
// implicit constructor.
class _NativeSocketNativeWrapper extends NativeFieldWrapperClass1 {}
+
// The _NativeSocket class encapsulates an OS socket.
class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
// Bit flags used when communicating between the eventhandler and
@@ -286,6 +278,7 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
static const int TYPE_PROTOCOL_MASK =
TYPE_TCP_SOCKET | TYPE_UDP_SOCKET | TYPE_INTERNAL_SOCKET;
+
// Native port messages.
static const HOST_NAME_LOOKUP = 0;
static const LIST_INTERFACES = 1;
@@ -342,56 +335,57 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
// a HttpServer, a WebSocket connection, a process pipe, etc.
Object owner;
- static Future<List<InternetAddress>> lookup(String host,
- {InternetAddressType type: InternetAddressType.ANY}) {
- return _IOService
- ._dispatch(_SOCKET_LOOKUP, [host, type._value]).then((response) {
- if (isErrorResponse(response)) {
- throw createError(response, "Failed host lookup: '$host'");
- } else {
- return response.skip(1).map((result) {
- var type = new InternetAddressType._from(result[0]);
- return new _InternetAddress(result[1], host, result[2]);
- }).toList();
- }
- });
+ static Future<List<InternetAddress>> lookup(
+ String host, {InternetAddressType type: InternetAddressType.ANY}) {
+ return _IOService._dispatch(_SOCKET_LOOKUP, [host, type._value])
+ .then((response) {
+ if (isErrorResponse(response)) {
+ throw createError(response, "Failed host lookup: '$host'");
+ } else {
+ return response.skip(1).map((result) {
+ var type = new InternetAddressType._from(result[0]);
+ return new _InternetAddress(result[1], host, result[2]);
+ }).toList();
+ }
+ });
}
static Future<InternetAddress> reverseLookup(InternetAddress addr) {
- return _IOService
- ._dispatch(_SOCKET_REVERSE_LOOKUP, [addr._in_addr]).then((response) {
- if (isErrorResponse(response)) {
- throw createError(response, "Failed reverse host lookup", addr);
- } else {
- return addr._cloneWithNewHost(response);
- }
- });
+ return _IOService._dispatch(_SOCKET_REVERSE_LOOKUP, [addr._in_addr])
+ .then((response) {
+ if (isErrorResponse(response)) {
+ throw createError(response, "Failed reverse host lookup", addr);
+ } else {
+ return addr._cloneWithNewHost(response);
+ }
+ });
}
- static Future<List<NetworkInterface>> listInterfaces(
- {bool includeLoopback: false,
+ static Future<List<NetworkInterface>> listInterfaces({
+ bool includeLoopback: false,
bool includeLinkLocal: false,
InternetAddressType type: InternetAddressType.ANY}) {
- return _IOService
- ._dispatch(_SOCKET_LIST_INTERFACES, [type._value]).then((response) {
- if (isErrorResponse(response)) {
- throw createError(response, "Failed listing interfaces");
- } else {
- var map = response.skip(1).fold(new Map<String, NetworkInterface>(),
- (map, result) {
- var type = new InternetAddressType._from(result[0]);
- var name = result[3];
- var index = result[4];
- var address = new _InternetAddress(result[1], "", result[2]);
- if (!includeLinkLocal && address.isLinkLocal) return map;
- if (!includeLoopback && address.isLoopback) return map;
- map.putIfAbsent(name, () => new _NetworkInterface(name, index));
- map[name].addresses.add(address);
- return map;
+ return _IOService._dispatch(_SOCKET_LIST_INTERFACES, [type._value])
+ .then((response) {
+ if (isErrorResponse(response)) {
+ throw createError(response, "Failed listing interfaces");
+ } else {
+ var map = response.skip(1)
+ .fold(new Map<String, NetworkInterface>(), (map, result) {
+ var type = new InternetAddressType._from(result[0]);
+ var name = result[3];
+ var index = result[4];
+ var address = new _InternetAddress(result[1], "", result[2]);
+ if (!includeLinkLocal && address.isLinkLocal) return map;
+ if (!includeLoopback && address.isLoopback) return map;
+ map.putIfAbsent(
+ name, () => new _NetworkInterface(name, index));
+ map[name].addresses.add(address);
+ return map;
+ });
+ return map.values.toList();
+ }
});
- return map.values.toList();
- }
- });
}
static Future<_NativeSocket> connect(host, int port, sourceAddress) {
@@ -401,153 +395,176 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
sourceAddress = new InternetAddress(sourceAddress);
}
}
- return new Future.value(host).then((host) {
- if (host is _InternetAddress) return [host];
- return lookup(host).then((addresses) {
- if (addresses.isEmpty) {
- throw createError(null, "Failed host lookup: '$host'");
- }
- return addresses;
- });
- }).then((addresses) {
- assert(addresses is List);
- var completer = new Completer();
- var it = addresses.iterator;
- var error = null;
- var connecting = new HashMap();
- void connectNext() {
- if (!it.moveNext()) {
- if (connecting.isEmpty) {
- assert(error != null);
- completer.completeError(error);
- }
- return;
- }
- var address = it.current;
- var socket = new _NativeSocket.normal();
- socket.localAddress = address;
- var result;
- if (sourceAddress == null) {
- result = socket.nativeCreateConnect(address._in_addr, port);
- } else {
- assert(sourceAddress is _InternetAddress);
- result = socket.nativeCreateBindConnect(
- address._in_addr, port, sourceAddress._in_addr);
- }
- if (result is OSError) {
- // Keep first error, if present.
- if (error == null) {
- int errorCode = result.errorCode;
- if (errorCode != null && socket.isBindError(errorCode)) {
- error = createError(result, "Bind failed", sourceAddress);
+ return new Future.value(host)
+ .then((host) {
+ if (host is _InternetAddress) return [host];
+ return lookup(host)
+ .then((addresses) {
+ if (addresses.isEmpty) {
+ throw createError(null, "Failed host lookup: '$host'");
+ }
+ return addresses;
+ });
+ })
+ .then((addresses) {
+ assert(addresses is List);
+ var completer = new Completer();
+ var it = addresses.iterator;
+ var error = null;
+ var connecting = new HashMap();
+ void connectNext() {
+ if (!it.moveNext()) {
+ if (connecting.isEmpty) {
+ assert(error != null);
+ completer.completeError(error);
+ }
+ return;
+ }
+ var address = it.current;
+ var socket = new _NativeSocket.normal();
+ socket.localAddress = address;
+ var result;
+ if (sourceAddress == null) {
+ result = socket.nativeCreateConnect(address._in_addr, port);
} else {
- error = createError(result, "Connection failed", address, port);
+ assert(sourceAddress is _InternetAddress);
+ result = socket.nativeCreateBindConnect(
+ address._in_addr, port, sourceAddress._in_addr);
+ }
+ if (result is OSError) {
+ // Keep first error, if present.
+ if (error == null) {
+ int errorCode = result.errorCode;
+ if (errorCode != null && socket.isBindError(errorCode)) {
+ error = createError(result, "Bind failed", sourceAddress);
+ } else {
+ error =
+ createError(result, "Connection failed", address, port);
+ }
+ }
+ connectNext();
+ } else {
+ // Query the local port, for error messages.
+ try {
+ socket.port;
+ } catch (e) {
+ error = createError(e, "Connection failed", address, port);
+ connectNext();
+ }
+ // Set up timer for when we should retry the next address
+ // (if any).
+ var duration = address.isLoopback ?
+ _RETRY_DURATION_LOOPBACK :
+ _RETRY_DURATION;
+ var timer = new Timer(duration, connectNext);
+ setupResourceInfo(socket);
+
+ connecting[socket] = timer;
+ // Setup handlers for receiving the first write event which
+ // indicate that the socket is fully connected.
+ socket.setHandlers(
+ write: () {
+ timer.cancel();
+ socket.setListening(read: false, write: false);
+ completer.complete(socket);
+ connecting.remove(socket);
+ connecting.forEach((s, t) {
+ t.cancel();
+ s.close();
+ s.setHandlers();
+ s.setListening(read: false, write: false);
+ });
+ },
+ error: (e) {
+ timer.cancel();
+ socket.close();
+ // Keep first error, if present.
+ if (error == null) error = e;
+ connecting.remove(socket);
+ if (connecting.isEmpty) connectNext();
+ });
+ socket.setListening(read: false, write: true);
}
}
connectNext();
- } else {
- // Query the local port, for error messages.
- try {
- socket.port;
- } catch (e) {
- error = createError(e, "Connection failed", address, port);
- connectNext();
- }
- // Set up timer for when we should retry the next address
- // (if any).
- var duration =
- address.isLoopback ? _RETRY_DURATION_LOOPBACK : _RETRY_DURATION;
- var timer = new Timer(duration, connectNext);
- setupResourceInfo(socket);
-
- connecting[socket] = timer;
- // Setup handlers for receiving the first write event which
- // indicate that the socket is fully connected.
- socket.setHandlers(write: () {
- timer.cancel();
- socket.setListening(read: false, write: false);
- completer.complete(socket);
- connecting.remove(socket);
- connecting.forEach((s, t) {
- t.cancel();
- s.close();
- s.setHandlers();
- s.setListening(read: false, write: false);
- });
- }, error: (e) {
- timer.cancel();
- socket.close();
- // Keep first error, if present.
- if (error == null) error = e;
- connecting.remove(socket);
- if (connecting.isEmpty) connectNext();
- });
- socket.setListening(read: false, write: true);
- }
- }
-
- connectNext();
- return completer.future;
- });
+ return completer.future;
+ });
}
- static Future<_NativeSocket> bind(
- host, int port, int backlog, bool v6Only, bool shared) {
+ static Future<_NativeSocket> bind(host,
+ int port,
+ int backlog,
+ bool v6Only,
+ bool shared) {
_throwOnBadPort(port);
- return new Future.value(host).then((host) {
- if (host is _InternetAddress) return host;
- return lookup(host).then((list) {
- if (list.length == 0) {
- throw createError(null, "Failed host lookup: '$host'");
- }
- return list[0];
- });
- }).then((address) {
- var socket = new _NativeSocket.listen();
- socket.localAddress = address;
- var result = socket.nativeCreateBindListen(
- address._in_addr, port, backlog, v6Only, shared);
- if (result is OSError) {
- throw new SocketException("Failed to create server socket",
- osError: result, address: address, port: port);
- }
- if (port != 0) socket.localPort = port;
- setupResourceInfo(socket);
- socket.connectToEventHandler();
- return socket;
- });
+ return new Future.value(host)
+ .then((host) {
+ if (host is _InternetAddress) return host;
+ return lookup(host)
+ .then((list) {
+ if (list.length == 0) {
+ throw createError(null, "Failed host lookup: '$host'");
+ }
+ return list[0];
+ });
+ })
+ .then((address) {
+ var socket = new _NativeSocket.listen();
+ socket.localAddress = address;
+ var result = socket.nativeCreateBindListen(address._in_addr,
+ port,
+ backlog,
+ v6Only,
+ shared);
+ if (result is OSError) {
+ throw new SocketException("Failed to create server socket",
+ osError: result,
+ address: address,
+ port: port);
+ }
+ if (port != 0) socket.localPort = port;
+ setupResourceInfo(socket);
+ socket.connectToEventHandler();
+ return socket;
+ });
}
static void setupResourceInfo(_NativeSocket socket) {
socket.resourceInfo = new _SocketResourceInfo(socket);
}
- static Future<_NativeSocket> bindDatagram(host, int port, bool reuseAddress) {
+ static Future<_NativeSocket> bindDatagram(
+ host, int port, bool reuseAddress) {
_throwOnBadPort(port);
- return new Future.value(host).then((host) {
- if (host is _InternetAddress) return host;
- return lookup(host).then((list) {
- if (list.length == 0) {
- throw createError(null, "Failed host lookup: '$host'");
- }
- return list[0];
- });
- }).then((address) {
- var socket = new _NativeSocket.datagram(address);
- var result =
- socket.nativeCreateBindDatagram(address._in_addr, port, reuseAddress);
- if (result is OSError) {
- throw new SocketException("Failed to create datagram socket",
- osError: result, address: address, port: port);
- }
- if (port != 0) socket.localPort = port;
- setupResourceInfo(socket);
- return socket;
- });
+ return new Future.value(host)
+ .then((host) {
+ if (host is _InternetAddress) return host;
+ return lookup(host)
+ .then((list) {
+ if (list.length == 0) {
+ throw createError(null, "Failed host lookup: '$host'");
+ }
+ return list[0];
+ });
+ })
+ .then((address) {
+ var socket = new _NativeSocket.datagram(address);
+ var result = socket.nativeCreateBindDatagram(
+ address._in_addr, port, reuseAddress);
+ if (result is OSError) {
+ throw new SocketException("Failed to create datagram socket",
+ osError: result,
+ address: address,
+ port: port);
+ }
+ if (port != 0) socket.localPort = port;
+ setupResourceInfo(socket);
+ return socket;
+ });
}
_NativeSocket.datagram(this.localAddress)
- : typeFlags = TYPE_NORMAL_SOCKET | TYPE_UDP_SOCKET;
+ : typeFlags = TYPE_NORMAL_SOCKET | TYPE_UDP_SOCKET;
_NativeSocket.normal() : typeFlags = TYPE_NORMAL_SOCKET | TYPE_TCP_SOCKET;
@@ -668,14 +685,16 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
return result;
}
- int send(List<int> buffer, int offset, int bytes, InternetAddress address,
- int port) {
+ int send(List<int> buffer, int offset, int bytes,
+ InternetAddress address, int port) {
_throwOnBadPort(port);
if (isClosing || isClosed) return 0;
_BufferAndStart bufferAndStart =
- _ensureFastAndSerializableByteData(buffer, offset, bytes);
- var result = nativeSendTo(bufferAndStart.buffer, bufferAndStart.start,
- bytes, address._in_addr, port);
+ _ensureFastAndSerializableByteData(
+ buffer, offset, bytes);
+ var result = nativeSendTo(
+ bufferAndStart.buffer, bufferAndStart.start, bytes,
+ address._in_addr, port);
if (result is OSError) {
OSError osError = result;
scheduleMicrotask(() => reportError(osError, "Send failed"));
@@ -760,7 +779,6 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
handler();
scheduleMicrotask(issue);
}
-
scheduleMicrotask(issue);
}
@@ -777,7 +795,6 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
if (handler == null) return;
handler();
}
-
if (delayed) {
writeEventIssued = true;
scheduleMicrotask(issue);
@@ -792,7 +809,10 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
if (((events & (1 << i)) != 0)) {
if ((i == CLOSED_EVENT || i == READ_EVENT) && isClosedRead) continue;
if (isClosing && i != DESTROYED_EVENT) continue;
- if (i == CLOSED_EVENT && !isListening && !isClosing && !isClosed) {
+ if (i == CLOSED_EVENT &&
+ !isListening &&
+ !isClosing &&
+ !isClosed) {
isClosedRead = true;
issueReadEvent();
continue;
@@ -942,10 +962,10 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
eventPort = new RawReceivePort(multiplex);
}
if (!connectedResourceHandler) {
- registerExtension(
- 'ext.dart.io.getOpenSockets', _SocketResourceInfo.getOpenSockets);
+ registerExtension('ext.dart.io.getOpenSockets',
+ _SocketResourceInfo.getOpenSockets);
registerExtension('ext.dart.io.getSocketByID',
- _SocketResourceInfo.getSocketInfoMapByID);
+ _SocketResourceInfo.getSocketInfoMapByID);
connectedResourceHandler = true;
}
@@ -967,11 +987,13 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
// Create the appropriate error/exception from different returned
// error objects.
- static createError(error, String message,
- [InternetAddress address, int port]) {
+ static createError(error,
+ String message,
+ [InternetAddress address,
+ int port]) {
if (error is OSError) {
- return new SocketException(message,
- osError: error, address: address, port: port);
+ return new SocketException(
+ message, osError: error, address: address, port: port);
} else if (error is List) {
assert(isErrorResponse(error));
switch (error[0]) {
@@ -979,9 +1001,9 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
return new ArgumentError();
case _OSERROR_RESPONSE:
return new SocketException(message,
- osError: new OSError(error[2], error[1]),
- address: address,
- port: port);
+ osError: new OSError(error[2], error[1]),
+ address: address,
+ port: port);
default:
return new Exception("Unknown error");
}
@@ -1040,33 +1062,42 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
void joinMulticast(InternetAddress addr, NetworkInterface interface) {
var interfaceAddr = multicastAddress(addr, interface);
var interfaceIndex = interface == null ? 0 : interface.index;
- var result = nativeJoinMulticast(addr._in_addr,
- interfaceAddr == null ? null : interfaceAddr._in_addr, interfaceIndex);
+ var result = nativeJoinMulticast(
+ addr._in_addr,
+ interfaceAddr == null ? null : interfaceAddr._in_addr,
+ interfaceIndex);
if (result is OSError) throw result;
}
void leaveMulticast(InternetAddress addr, NetworkInterface interface) {
var interfaceAddr = multicastAddress(addr, interface);
var interfaceIndex = interface == null ? 0 : interface.index;
- var result = nativeLeaveMulticast(addr._in_addr,
- interfaceAddr == null ? null : interfaceAddr._in_addr, interfaceIndex);
+ var result = nativeLeaveMulticast(
+ addr._in_addr,
+ interfaceAddr == null ? null : interfaceAddr._in_addr,
+ interfaceIndex);
if (result is OSError) throw result;
}
+
void nativeSetSocketId(int id) native "Socket_SetSocketId";
nativeAvailable() native "Socket_Available";
nativeRead(int len) native "Socket_Read";
nativeRecvFrom() native "Socket_RecvFrom";
nativeWrite(List<int> buffer, int offset, int bytes)
native "Socket_WriteList";
- nativeSendTo(List<int> buffer, int offset, int bytes, List<int> address,
- int port) native "Socket_SendTo";
- nativeCreateConnect(List<int> addr, int port) native "Socket_CreateConnect";
- nativeCreateBindConnect(List<int> addr, int port, List<int> sourceAddr)
+ nativeSendTo(List<int> buffer, int offset, int bytes,
+ List<int> address, int port)
+ native "Socket_SendTo";
+ nativeCreateConnect(List<int> addr,
+ int port) native "Socket_CreateConnect";
+ nativeCreateBindConnect(
+ List<int> addr, int port, List<int> sourceAddr)
native "Socket_CreateBindConnect";
bool isBindError(int errorNumber) native "Socket_IsBindError";
nativeCreateBindListen(List<int> addr, int port, int backlog, bool v6Only,
- bool shared) native "ServerSocket_CreateBindListen";
+ bool shared)
+ native "ServerSocket_CreateBindListen";
nativeCreateBindDatagram(List<int> addr, int port, bool reuseAddress)
native "Socket_CreateBindDatagram";
nativeAccept(_NativeSocket socket) native "ServerSocket_Accept";
@@ -1077,60 +1108,73 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
nativeGetOption(int option, int protocol) native "Socket_GetOption";
bool nativeSetOption(int option, int protocol, value)
native "Socket_SetOption";
- OSError nativeJoinMulticast(List<int> addr, List<int> interfaceAddr,
- int interfaceIndex) native "Socket_JoinMulticast";
- bool nativeLeaveMulticast(List<int> addr, List<int> interfaceAddr,
- int interfaceIndex) native "Socket_LeaveMulticast";
+ OSError nativeJoinMulticast(
+ List<int> addr, List<int> interfaceAddr, int interfaceIndex)
+ native "Socket_JoinMulticast";
+ bool nativeLeaveMulticast(
+ List<int> addr, List<int> interfaceAddr, int interfaceIndex)
+ native "Socket_LeaveMulticast";
}
-class _RawServerSocket extends Stream<RawSocket> implements RawServerSocket {
+
+class _RawServerSocket extends Stream<RawSocket>
+ implements RawServerSocket {
final _NativeSocket _socket;
StreamController<RawSocket> _controller;
ReceivePort _referencePort;
bool _v6Only;
- static Future<_RawServerSocket> bind(
- address, int port, int backlog, bool v6Only, bool shared) {
+ static Future<_RawServerSocket> bind(address,
+ int port,
+ int backlog,
+ bool v6Only,
+ bool shared) {
_throwOnBadPort(port);
if (backlog < 0) throw new ArgumentError("Invalid backlog $backlog");
- return _NativeSocket
- .bind(address, port, backlog, v6Only, shared)
+ return _NativeSocket.bind(address, port, backlog, v6Only, shared)
.then((socket) => new _RawServerSocket(socket, v6Only));
}
_RawServerSocket(this._socket, this._v6Only);
StreamSubscription<RawSocket> listen(void onData(RawSocket event),
- {Function onError, void onDone(), bool cancelOnError}) {
+ {Function onError,
+ void onDone(),
+ bool cancelOnError}) {
if (_controller != null) {
throw new StateError("Stream was already listened to");
}
var zone = Zone.current;
- _controller = new StreamController(
- sync: true,
+ _controller = new StreamController(sync: true,
onListen: _onSubscriptionStateChange,
onCancel: _onSubscriptionStateChange,
onPause: _onPauseStateChange,
onResume: _onPauseStateChange);
- _socket.setHandlers(read: zone.bindCallback(() {
- while (_socket.available > 0) {
- var socket = _socket.accept();
- if (socket == null) return;
- _controller.add(new _RawSocket(socket));
- if (_controller.isPaused) return;
- }
- }), error: zone.bindUnaryCallback((e) {
- _controller.addError(e);
- _controller.close();
- }), destroyed: () {
- _controller.close();
- if (_referencePort != null) {
- _referencePort.close();
- _referencePort = null;
- }
- });
- return _controller.stream.listen(onData,
- onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+ _socket.setHandlers(
+ read: zone.bindCallback(() {
+ while (_socket.available > 0) {
+ var socket = _socket.accept();
+ if (socket == null) return;
+ _controller.add(new _RawSocket(socket));
+ if (_controller.isPaused) return;
+ }
+ }),
+ error: zone.bindUnaryCallback((e) {
+ _controller.addError(e);
+ _controller.close();
+ }),
+ destroyed: () {
+ _controller.close();
+ if (_referencePort != null) {
+ _referencePort.close();
+ _referencePort = null;
+ }
+ });
+ return _controller.stream.listen(
+ onData,
+ onError: onError,
+ onDone: onDone,
+ cancelOnError: cancelOnError);
}
int get port => _socket.port;
@@ -1171,12 +1215,12 @@ class _RawServerSocket extends Stream<RawSocket> implements RawServerSocket {
}
}
- void set _owner(owner) {
- _socket.owner = owner;
- }
+ void set _owner(owner) { _socket.owner = owner; }
}
-class _RawSocket extends Stream<RawSocketEvent> implements RawSocket {
+
+class _RawSocket extends Stream<RawSocketEvent>
+ implements RawSocket {
final _NativeSocket _socket;
StreamController<RawSocketEvent> _controller;
bool _readEventsEnabled = true;
@@ -1186,36 +1230,35 @@ class _RawSocket extends Stream<RawSocketEvent> implements RawSocket {
bool _isMacOSTerminalInput = false;
static Future<RawSocket> connect(host, int port, sourceAddress) {
- return _NativeSocket
- .connect(host, port, sourceAddress)
+ return _NativeSocket.connect(host, port, sourceAddress)
.then((socket) => new _RawSocket(socket));
}
_RawSocket(this._socket) {
var zone = Zone.current;
- _controller = new StreamController(
- sync: true,
+ _controller = new StreamController(sync: true,
onListen: _onSubscriptionStateChange,
onCancel: _onSubscriptionStateChange,
onPause: _onPauseStateChange,
onResume: _onPauseStateChange);
_socket.setHandlers(
- read: () => _controller.add(RawSocketEvent.READ),
- write: () {
- // The write event handler is automatically disabled by the
- // event handler when it fires.
- _writeEventsEnabled = false;
- _controller.add(RawSocketEvent.WRITE);
- },
- closed: () => _controller.add(RawSocketEvent.READ_CLOSED),
- destroyed: () {
- _controller.add(RawSocketEvent.CLOSED);
- _controller.close();
- },
- error: zone.bindUnaryCallback((e) {
- _controller.addError(e);
- _socket.close();
- }));
+ read: () => _controller.add(RawSocketEvent.READ),
+ write: () {
+ // The write event handler is automatically disabled by the
+ // event handler when it fires.
+ _writeEventsEnabled = false;
+ _controller.add(RawSocketEvent.WRITE);
+ },
+ closed: () => _controller.add(RawSocketEvent.READ_CLOSED),
+ destroyed: () {
+ _controller.add(RawSocketEvent.CLOSED);
+ _controller.close();
+ },
+ error: zone.bindUnaryCallback((e) {
+ _controller.addError(e);
+ _socket.close();
+ })
+ );
}
factory _RawSocket._writePipe() {
@@ -1239,9 +1282,14 @@ class _RawSocket extends Stream<RawSocketEvent> implements RawSocket {
}
StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent event),
- {Function onError, void onDone(), bool cancelOnError}) {
- return _controller.stream.listen(onData,
- onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+ {Function onError,
+ void onDone(),
+ bool cancelOnError}) {
+ return _controller.stream.listen(
+ onData,
+ onError: onError,
+ onDone: onDone,
+ cancelOnError: cancelOnError);
}
int available() => _socket.available;
@@ -1320,36 +1368,45 @@ class _RawSocket extends Stream<RawSocketEvent> implements RawSocket {
}
}
- void set _owner(owner) {
- _socket.owner = owner;
- }
+ void set _owner(owner) { _socket.owner = owner; }
}
-@patch
-class ServerSocket {
- @patch
- static Future<ServerSocket> bind(address, int port,
- {int backlog: 0, bool v6Only: false, bool shared: false}) {
+
+@patch class ServerSocket {
+ @patch static Future<ServerSocket> bind(address,
+ int port,
+ {int backlog: 0,
+ bool v6Only: false,
+ bool shared: false}) {
return _ServerSocket.bind(address, port, backlog, v6Only, shared);
}
}
-class _ServerSocket extends Stream<Socket> implements ServerSocket {
+
+class _ServerSocket extends Stream<Socket>
+ implements ServerSocket {
final _socket;
- static Future<_ServerSocket> bind(
- address, int port, int backlog, bool v6Only, bool shared) {
- return _RawServerSocket
- .bind(address, port, backlog, v6Only, shared)
+ static Future<_ServerSocket> bind(address,
+ int port,
+ int backlog,
+ bool v6Only,
+ bool shared) {
+ return _RawServerSocket.bind(address, port, backlog, v6Only, shared)
.then((socket) => new _ServerSocket(socket));
}
_ServerSocket(this._socket);
StreamSubscription<Socket> listen(void onData(Socket event),
- {Function onError, void onDone(), bool cancelOnError}) {
- return _socket.map((rawSocket) => new _Socket(rawSocket)).listen(onData,
- onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+ {Function onError,
+ void onDone(),
+ bool cancelOnError}) {
+ return _socket.map((rawSocket) => new _Socket(rawSocket)).listen(
+ onData,
+ onError: onError,
+ onDone: onDone,
+ cancelOnError: cancelOnError);
}
int get port => _socket.port;
@@ -1358,21 +1415,18 @@ class _ServerSocket extends Stream<Socket> implements ServerSocket {
Future close() => _socket.close().then((_) => this);
- void set _owner(owner) {
- _socket._owner = owner;
- }
+ void set _owner(owner) { _socket._owner = owner; }
}
-@patch
-class Socket {
- @patch
- static Future<Socket> connect(host, int port, {sourceAddress}) {
- return RawSocket
- .connect(host, port, sourceAddress: sourceAddress)
- .then((socket) => new _Socket(socket));
+
+@patch class Socket {
+ @patch static Future<Socket> connect(host, int port, {sourceAddress}) {
+ return RawSocket.connect(host, port, sourceAddress: sourceAddress).then(
+ (socket) => new _Socket(socket));
}
}
+
class _SocketStreamConsumer extends StreamConsumer<List<int>> {
StreamSubscription subscription;
final _Socket socket;
@@ -1387,24 +1441,28 @@ class _SocketStreamConsumer extends StreamConsumer<List<int>> {
socket._ensureRawSocketSubscription();
streamCompleter = new Completer<Socket>();
if (socket._raw != null) {
- subscription = stream.listen((data) {
- assert(!paused);
- assert(buffer == null);
- buffer = data;
- offset = 0;
- try {
- write();
- } catch (e) {
- socket.destroy();
- stop();
- done(e);
- }
- }, onError: (error, [stackTrace]) {
- socket.destroy();
- done(error, stackTrace);
- }, onDone: () {
- done();
- }, cancelOnError: true);
+ subscription = stream.listen(
+ (data) {
+ assert(!paused);
+ assert(buffer == null);
+ buffer = data;
+ offset = 0;
+ try {
+ write();
+ } catch (e) {
+ socket.destroy();
+ stop();
+ done(e);
+ }
+ },
+ onError: (error, [stackTrace]) {
+ socket.destroy();
+ done(error, stackTrace);
+ },
+ onDone: () {
+ done();
+ },
+ cancelOnError: true);
}
return streamCompleter.future;
}
@@ -1454,9 +1512,10 @@ class _SocketStreamConsumer extends StreamConsumer<List<int>> {
}
}
+
class _Socket extends Stream<List<int>> implements Socket {
- RawSocket _raw; // Set to null when the raw socket is closed.
- bool _closed = false; // Set to true when the raw socket is closed.
+ RawSocket _raw; // Set to null when the raw socket is closed.
+ bool _closed = false; // Set to true when the raw socket is closed.
StreamController _controller;
bool _controllerClosed = false;
_SocketStreamConsumer _consumer;
@@ -1465,8 +1524,7 @@ class _Socket extends Stream<List<int>> implements Socket {
var _detachReady;
_Socket(this._raw) {
- _controller = new StreamController<List<int>>(
- sync: true,
+ _controller = new StreamController<List<int>>(sync: true,
onListen: _onSubscriptionStateChange,
onCancel: _onSubscriptionStateChange,
onPause: _onPauseStateChange,
@@ -1492,9 +1550,14 @@ class _Socket extends Stream<List<int>> implements Socket {
_NativeSocket get _nativeSocket => _raw._socket;
StreamSubscription<List<int>> listen(void onData(List<int> event),
- {Function onError, void onDone(), bool cancelOnError}) {
- return _controller.stream.listen(onData,
- onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+ {Function onError,
+ void onDone(),
+ bool cancelOnError}) {
+ return _controller.stream.listen(
+ onData,
+ onError: onError,
+ onDone: onDone,
+ cancelOnError: cancelOnError);
}
Encoding get encoding => _sink.encoding;
@@ -1538,26 +1601,22 @@ class _Socket extends Stream<List<int>> implements Socket {
}
int get port {
- if (_raw == null) throw const SocketException.closed();
- ;
+ if (_raw == null) throw const SocketException.closed();;
return _raw.port;
}
InternetAddress get address {
- if (_raw == null) throw const SocketException.closed();
- ;
+ if (_raw == null) throw const SocketException.closed();;
return _raw.address;
}
int get remotePort {
- if (_raw == null) throw const SocketException.closed();
- ;
+ if (_raw == null) throw const SocketException.closed();;
return _raw.remotePort;
}
InternetAddress get remoteAddress {
- if (_raw == null) throw const SocketException.closed();
- ;
+ if (_raw == null) throw const SocketException.closed();;
return _raw.remoteAddress;
}
@@ -1578,7 +1637,9 @@ class _Socket extends Stream<List<int>> implements Socket {
void _ensureRawSocketSubscription() {
if (_subscription == null && _raw != null) {
_subscription = _raw.listen(_onData,
- onError: _onError, onDone: _onDone, cancelOnError: true);
+ onError: _onError,
+ onDone: _onDone,
+ cancelOnError: true);
}
}
@@ -1667,16 +1728,13 @@ class _Socket extends Stream<List<int>> implements Socket {
}
}
- void set _owner(owner) {
- _raw._owner = owner;
- }
+ void set _owner(owner) { _raw._owner = owner; }
}
-@patch
-class RawDatagramSocket {
- @patch
- static Future<RawDatagramSocket> bind(host, int port,
- {bool reuseAddress: true}) {
+
+@patch class RawDatagramSocket {
+ @patch static Future<RawDatagramSocket> bind(
+ host, int port, {bool reuseAddress: true}) {
return _RawDatagramSocket.bind(host, port, reuseAddress);
}
}
@@ -1689,42 +1747,47 @@ class _RawDatagramSocket extends Stream implements RawDatagramSocket {
_RawDatagramSocket(this._socket) {
var zone = Zone.current;
- _controller = new StreamController(
- sync: true,
+ _controller = new StreamController(sync: true,
onListen: _onSubscriptionStateChange,
onCancel: _onSubscriptionStateChange,
onPause: _onPauseStateChange,
onResume: _onPauseStateChange);
_socket.setHandlers(
- read: () => _controller.add(RawSocketEvent.READ),
- write: () {
- // The write event handler is automatically disabled by the
- // event handler when it fires.
- _writeEventsEnabled = false;
- _controller.add(RawSocketEvent.WRITE);
- },
- closed: () => _controller.add(RawSocketEvent.READ_CLOSED),
- destroyed: () {
- _controller.add(RawSocketEvent.CLOSED);
- _controller.close();
- },
- error: zone.bindUnaryCallback((e) {
- _controller.addError(e);
- _socket.close();
- }));
- }
-
- static Future<RawDatagramSocket> bind(host, int port, bool reuseAddress) {
+ read: () => _controller.add(RawSocketEvent.READ),
+ write: () {
+ // The write event handler is automatically disabled by the
+ // event handler when it fires.
+ _writeEventsEnabled = false;
+ _controller.add(RawSocketEvent.WRITE);
+ },
+ closed: () => _controller.add(RawSocketEvent.READ_CLOSED),
+ destroyed: () {
+ _controller.add(RawSocketEvent.CLOSED);
+ _controller.close();
+ },
+ error: zone.bindUnaryCallback((e) {
+ _controller.addError(e);
+ _socket.close();
+ })
+ );
+ }
+
+ static Future<RawDatagramSocket> bind(
+ host, int port, bool reuseAddress) {
_throwOnBadPort(port);
- return _NativeSocket
- .bindDatagram(host, port, reuseAddress)
+ return _NativeSocket.bindDatagram(host, port, reuseAddress)
.then((socket) => new _RawDatagramSocket(socket));
}
StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent event),
- {Function onError, void onDone(), bool cancelOnError}) {
- return _controller.stream.listen(onData,
- onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+ {Function onError,
+ void onDone(),
+ bool cancelOnError}) {
+ return _controller.stream.listen(
+ onData,
+ onError: onError,
+ onDone: onDone,
+ cancelOnError: cancelOnError);
}
Future close() => _socket.close().then((_) => this);
@@ -1765,15 +1828,18 @@ class _RawDatagramSocket extends Stream implements RawDatagramSocket {
void set multicastLoopback(bool value) =>
_socket.setOption(SocketOption._IP_MULTICAST_LOOP, value);
- int get multicastHops => _socket.getOption(SocketOption._IP_MULTICAST_HOPS);
+ int get multicastHops =>
+ _socket.getOption(SocketOption._IP_MULTICAST_HOPS);
void set multicastHops(int value) =>
_socket.setOption(SocketOption._IP_MULTICAST_HOPS, value);
- NetworkInterface get multicastInterface => throw "Not implemented";
+ NetworkInterface get multicastInterface =>
+ throw "Not implemented";
void set multicastInterface(NetworkInterface value) =>
throw "Not implemented";
- bool get broadcastEnabled => _socket.getOption(SocketOption._IP_BROADCAST);
+ bool get broadcastEnabled =>
+ _socket.getOption(SocketOption._IP_BROADCAST);
void set broadcastEnabled(bool value) =>
_socket.setOption(SocketOption._IP_BROADCAST, value);
@@ -1806,7 +1872,13 @@ class _RawDatagramSocket extends Stream implements RawDatagramSocket {
}
}
-Datagram _makeDatagram(
- List<int> data, String address, List<int> in_addr, int port) {
- return new Datagram(data, new _InternetAddress(address, null, in_addr), port);
+Datagram _makeDatagram(List<int> data,
+ String address,
+ List<int> in_addr,
+ int port) {
+ return new Datagram(
+ data,
+ new _InternetAddress(address, null, in_addr),
+ port);
}
+
« no previous file with comments | « runtime/bin/secure_socket_patch.dart ('k') | runtime/bin/stdio_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698