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

Side by Side Diff: sdk/lib/io/socket.dart

Issue 14083007: Add new InternetAddress class with a static lookup function (including IPv6 results). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add Windows support and update ssl tests to use 'localhost'. 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
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 part of dart.io; 5 part of dart.io;
6 6
7
8 class InternetAddressType {
9 static const InternetAddressType IPv4 = const InternetAddressType._(0);
10 static const InternetAddressType IPv6 = const InternetAddressType._(1);
11 static const InternetAddressType ANY = const InternetAddressType._(-1);
12
13 final int _value;
14
15 const InternetAddressType._(String this._value);
16
17 String get name {
18 switch (_value) {
19 case -1: return "ANY";
20 case 0: return "IPv4";
21 case 1: return "IPv6";
22 default: throw new ArgumentError("Invalid InternetAddress");
23 }
24 }
25
26 String toString() => "InternetAddressType($name)";
27
28 int get hashCode => _value;
29
30 bool operator==(other) => _value == other._value;
31 }
32
33 abstract class InternetAddress {
34 InternetAddressType type;
35 String get address;
36 String get host;
37
38 external static Future<List<InternetAddress>> lookup(
39 String host, {InternetAddressType type: InternetAddressType.ANY});
40 }
41
7 /** 42 /**
8 * The RawServerSocket is a server socket, providing a stream of low-level 43 * The RawServerSocket is a server socket, providing a stream of low-level
9 * [RawSocket]s. 44 * [RawSocket]s.
10 * 45 *
11 * See [RawSocket] for more info. 46 * See [RawSocket] for more info.
12 */ 47 */
13 abstract class RawServerSocket implements Stream<RawSocket> { 48 abstract class RawServerSocket implements Stream<RawSocket> {
14 /** 49 /**
15 * Returns a future for a [:RawServerSocket:]. When the future 50 * Returns a future for a [:RawServerSocket:]. When the future
16 * completes the server socket is bound to the given [address] and 51 * completes the server socket is bound to the given [address] and
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 172
138 /** 173 /**
139 * The [RawSocket] is a low-level interface to a socket, exposing the raw 174 * The [RawSocket] is a low-level interface to a socket, exposing the raw
140 * events signaled by the system. It's a [Stream] of [RawSocketEvent]s. 175 * events signaled by the system. It's a [Stream] of [RawSocketEvent]s.
141 */ 176 */
142 abstract class RawSocket implements Stream<RawSocketEvent> { 177 abstract class RawSocket implements Stream<RawSocketEvent> {
143 /** 178 /**
144 * Creates a new socket connection to the host and port and returns a [Future] 179 * Creates a new socket connection to the host and port and returns a [Future]
145 * that will complete with either a [RawSocket] once connected or an error 180 * that will complete with either a [RawSocket] once connected or an error
146 * if the host-lookup or connection failed. 181 * if the host-lookup or connection failed.
182 *
183 * [host] can either be a [String] or an [InternetAddress]. If [host] is a
184 * [String], [connect] will perform a [InternetAddress.lookup] and use
185 * the first value in the list.
147 */ 186 */
148 external static Future<RawSocket> connect(String host, int port); 187 external static Future<RawSocket> connect(host, int port);
149 188
150 /** 189 /**
151 * Returns the number of received and non-read bytes in the socket that 190 * Returns the number of received and non-read bytes in the socket that
152 * can be read. 191 * can be read.
153 */ 192 */
154 int available(); 193 int available();
155 194
156 /** 195 /**
157 * Read up to [len] bytes from the socket. This function is 196 * Read up to [len] bytes from the socket. This function is
158 * non-blocking and will only return data if data is available. The 197 * non-blocking and will only return data if data is available. The
(...skipping 15 matching lines...) Expand all
174 * Returns the port used by this socket. 213 * Returns the port used by this socket.
175 */ 214 */
176 int get port; 215 int get port;
177 216
178 /** 217 /**
179 * Returns the remote port connected to by this socket. 218 * Returns the remote port connected to by this socket.
180 */ 219 */
181 int get remotePort; 220 int get remotePort;
182 221
183 /** 222 /**
184 * Returns the host used to connect this socket. 223 * Returns the [InternetAddress] used to connect this socket.
185 */ 224 */
186 String get host; 225 InternetAddress get address;
187 226
188 /** 227 /**
189 * Returns the remote host connected to by this socket. 228 * Returns the remote host connected to by this socket.
190 */ 229 */
191 String get remoteHost; 230 String get remoteHost;
192 231
193 /** 232 /**
194 * Closes the socket. Calling [close] will never throw an exception 233 * Closes the socket. Calling [close] will never throw an exception
195 * and calling it several times is supported. Calling [close] can result in 234 * and calling it several times is supported. Calling [close] can result in
196 * a [RawSocketEvent.READ_CLOSED] event. 235 * a [RawSocketEvent.READ_CLOSED] event.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 /** 270 /**
232 * A high-level class for communicating over a TCP socket. The [Socket] exposes 271 * A high-level class for communicating over a TCP socket. The [Socket] exposes
233 * both a [Stream] and a [IOSink] interface, making it ideal for 272 * both a [Stream] and a [IOSink] interface, making it ideal for
234 * using together with other [Stream]s. 273 * using together with other [Stream]s.
235 */ 274 */
236 abstract class Socket implements Stream<List<int>>, IOSink { 275 abstract class Socket implements Stream<List<int>>, IOSink {
237 /** 276 /**
238 * Creats a new socket connection to the host and port and returns a [Future] 277 * Creats a new socket connection to the host and port and returns a [Future]
239 * that will complete with either a [Socket] once connected or an error 278 * that will complete with either a [Socket] once connected or an error
240 * if the host-lookup or connection failed. 279 * if the host-lookup or connection failed.
280 *
281 * [host] can either be a [String] or an [InternetAddress]. If [host] is a
282 * [String], [connect] will perform a [InternetAddress.lookup] and use
283 * the first value in the list.
241 */ 284 */
242 external static Future<Socket> connect(String host, int port); 285 external static Future<Socket> connect(host, int port);
243 286
244 /** 287 /**
245 * Destroy the socket in both directions. Calling [destroy] will make the 288 * Destroy the socket in both directions. Calling [destroy] will make the
246 * send a close event on the stream and will no longer react on data being 289 * send a close event on the stream and will no longer react on data being
247 * piped to it. 290 * piped to it.
248 * 291 *
249 * Call [close](inherited from [IOSink]) to only close the [Socket] 292 * Call [close](inherited from [IOSink]) to only close the [Socket]
250 * for sending data. 293 * for sending data.
251 */ 294 */
252 void destroy(); 295 void destroy();
(...skipping 10 matching lines...) Expand all
263 * Returns the port used by this socket. 306 * Returns the port used by this socket.
264 */ 307 */
265 int get port; 308 int get port;
266 309
267 /** 310 /**
268 * Returns the remote port connected to by this socket. 311 * Returns the remote port connected to by this socket.
269 */ 312 */
270 int get remotePort; 313 int get remotePort;
271 314
272 /** 315 /**
273 * Returns the host used to connect this socket. 316 * Returns the [InternetAddress] used to connect this socket.
274 */ 317 */
275 String get host; 318 InternetAddress get address;
276 319
277 /** 320 /**
278 * Returns the remote host connected to by this socket. 321 * Returns the remote host connected to by this socket.
279 */ 322 */
280 String get remoteHost; 323 String get remoteHost;
281 } 324 }
282 325
283 326
284 class SocketIOException implements Exception { 327 class SocketIOException implements Exception {
285 const SocketIOException([String this.message = "", 328 const SocketIOException([String this.message = "",
286 OSError this.osError = null]); 329 OSError this.osError = null]);
287 String toString() { 330 String toString() {
288 StringBuffer sb = new StringBuffer(); 331 StringBuffer sb = new StringBuffer();
289 sb.write("SocketIOException"); 332 sb.write("SocketIOException");
290 if (!message.isEmpty) { 333 if (!message.isEmpty) {
291 sb.write(": $message"); 334 sb.write(": $message");
292 if (osError != null) { 335 if (osError != null) {
293 sb.write(" ($osError)"); 336 sb.write(" ($osError)");
294 } 337 }
295 } else if (osError != null) { 338 } else if (osError != null) {
296 sb.write(": $osError"); 339 sb.write(": $osError");
297 } 340 }
298 return sb.toString(); 341 return sb.toString();
299 } 342 }
300 final String message; 343 final String message;
301 final OSError osError; 344 final OSError osError;
302 } 345 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698