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

Side by Side Diff: runtime/bin/socket_patch.dart

Issue 13502004: Add the ability to secure an already established raw socket connection (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | sdk/lib/io/secure_socket.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 patch class RawServerSocket { 5 patch class RawServerSocket {
6 /* patch */ static Future<RawServerSocket> bind([String address = "127.0.0.1", 6 /* patch */ static Future<RawServerSocket> bind([String address = "127.0.0.1",
7 int port = 0, 7 int port = 0,
8 int backlog = 0]) { 8 int backlog = 0]) {
9 return _RawServerSocket.bind(address, port, backlog); 9 return _RawServerSocket.bind(address, port, backlog);
10 } 10 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 67
68 // Indicates if native interrupts can be activated. 68 // Indicates if native interrupts can be activated.
69 bool canActivateEvents = true; 69 bool canActivateEvents = true;
70 70
71 // The type flags for this socket. 71 // The type flags for this socket.
72 final int typeFlags; 72 final int typeFlags;
73 73
74 // Holds the port of the socket, null if not known. 74 // Holds the port of the socket, null if not known.
75 int localPort; 75 int localPort;
76 76
77 // Holds the host or address used to connect or bind the socket.
78 String localHost;
79
77 // Native port for socket services. 80 // Native port for socket services.
78 static SendPort socketService; 81 static SendPort socketService;
79 82
80 static Future<_NativeSocket> connect(String host, int port) { 83 static Future<_NativeSocket> connect(String host, int port) {
81 var completer = new Completer(); 84 var completer = new Completer();
82 ensureSocketService(); 85 ensureSocketService();
83 socketService.call([HOST_NAME_LOOKUP, host]).then((response) { 86 socketService.call([HOST_NAME_LOOKUP, host]).then((response) {
84 if (isErrorResponse(response)) { 87 if (isErrorResponse(response)) {
85 completer.completeError( 88 completer.completeError(
86 createError(response, "Failed host name lookup")); 89 createError(response, "Failed host name lookup"));
87 } else { 90 } else {
88 var socket = new _NativeSocket.normal(); 91 var socket = new _NativeSocket.normal();
92 socket.localHost = host;
89 var result = socket.nativeCreateConnect(response, port); 93 var result = socket.nativeCreateConnect(response, port);
90 if (result is OSError) { 94 if (result is OSError) {
91 completer.completeError(createError(result, "Connection failed")); 95 completer.completeError(createError(result, "Connection failed"));
92 } else { 96 } else {
93 // Setup handlers for receiving the first write event which 97 // Setup handlers for receiving the first write event which
94 // indicate that the socket is fully connected. 98 // indicate that the socket is fully connected.
95 socket.setHandlers( 99 socket.setHandlers(
96 write: () { 100 write: () {
97 socket.setListening(read: false, write: false); 101 socket.setListening(read: false, write: false);
98 completer.complete(socket); 102 completer.complete(socket);
99 }, 103 },
100 error: (e) { 104 error: (e) {
101 socket.close(); 105 socket.close();
102 completer.completeError(createError(e, "Connection failed")); 106 completer.completeError(createError(e, "Connection failed"));
103 } 107 }
104 ); 108 );
105 socket.setListening(read: false, write: true); 109 socket.setListening(read: false, write: true);
106 } 110 }
107 } 111 }
108 }); 112 });
109 return completer.future; 113 return completer.future;
110 } 114 }
111 115
112 static Future<_NativeSocket> bind(String address, 116 static Future<_NativeSocket> bind(String address,
113 int port, 117 int port,
114 int backlog) { 118 int backlog) {
115 var socket = new _NativeSocket.listen(); 119 var socket = new _NativeSocket.listen();
120 socket.localHost = address;
116 var result = socket.nativeCreateBindListen(address, port, backlog); 121 var result = socket.nativeCreateBindListen(address, port, backlog);
117 if (result is OSError) { 122 if (result is OSError) {
118 return new Future.immediateError( 123 return new Future.immediateError(
119 new SocketIOException("Failed to create server socket", result)); 124 new SocketIOException("Failed to create server socket", result));
120 } 125 }
121 if (port != 0) socket.localPort = port; 126 if (port != 0) socket.localPort = port;
122 return new Future.immediate(socket); 127 return new Future.immediate(socket);
123 } 128 }
124 129
125 _NativeSocket.normal() : typeFlags = TYPE_NORMAL_SOCKET { 130 _NativeSocket.normal() : typeFlags = TYPE_NORMAL_SOCKET {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 199
195 int get port { 200 int get port {
196 if (localPort != null) return localPort; 201 if (localPort != null) return localPort;
197 return localPort = nativeGetPort(); 202 return localPort = nativeGetPort();
198 } 203 }
199 204
200 int get remotePort { 205 int get remotePort {
201 return nativeGetRemotePeer()[1]; 206 return nativeGetRemotePeer()[1];
202 } 207 }
203 208
209 String get host => localHost;
210
204 String get remoteHost { 211 String get remoteHost {
205 return nativeGetRemotePeer()[0]; 212 return nativeGetRemotePeer()[0];
206 } 213 }
207 214
208 // Multiplexes socket events to the socket handlers. 215 // Multiplexes socket events to the socket handlers.
209 void multiplex(int events) { 216 void multiplex(int events) {
210 canActivateEvents = false; 217 canActivateEvents = false;
211 for (int i = FIRST_EVENT; i <= LAST_EVENT; i++) { 218 for (int i = FIRST_EVENT; i <= LAST_EVENT; i++) {
212 if (((events & (1 << i)) != 0)) { 219 if (((events & (1 << i)) != 0)) {
213 if (i == CLOSED_EVENT && 220 if (i == CLOSED_EVENT &&
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 _socket.write(buffer, offset, count); 560 _socket.write(buffer, offset, count);
554 561
555 void close() => _socket.close(); 562 void close() => _socket.close();
556 563
557 void shutdown(SocketDirection direction) => _socket.shutdown(direction); 564 void shutdown(SocketDirection direction) => _socket.shutdown(direction);
558 565
559 int get port => _socket.port; 566 int get port => _socket.port;
560 567
561 int get remotePort => _socket.remotePort; 568 int get remotePort => _socket.remotePort;
562 569
570 String get host => _socket.host;
571
563 String get remoteHost => _socket.remoteHost; 572 String get remoteHost => _socket.remoteHost;
564 573
565 bool get readEventsEnabled => _readEventsEnabled; 574 bool get readEventsEnabled => _readEventsEnabled;
566 void set readEventsEnabled(bool value) { 575 void set readEventsEnabled(bool value) {
567 if (value != _readEventsEnabled) { 576 if (value != _readEventsEnabled) {
568 _readEventsEnabled = value; 577 _readEventsEnabled = value;
569 if (!_controller.isPaused) _resume(); 578 if (!_controller.isPaused) _resume();
570 } 579 }
571 } 580 }
572 581
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 _raw.onBadCertificate = callback; 954 _raw.onBadCertificate = callback;
946 } 955 }
947 956
948 X509Certificate get peerCertificate { 957 X509Certificate get peerCertificate {
949 if (_raw == null) { 958 if (_raw == null) {
950 throw new StateError("peerCertificate called on destroyed SecureSocket"); 959 throw new StateError("peerCertificate called on destroyed SecureSocket");
951 } 960 }
952 return _raw.peerCertificate; 961 return _raw.peerCertificate;
953 } 962 }
954 } 963 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/io/secure_socket.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698