| OLD | NEW | 
|---|
| 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 // VMOptions= | 5 // VMOptions= | 
| 6 // VMOptions=--short_socket_read | 6 // VMOptions=--short_socket_read | 
| 7 // VMOptions=--short_socket_write | 7 // VMOptions=--short_socket_write | 
| 8 // VMOptions=--short_socket_read --short_socket_write | 8 // VMOptions=--short_socket_read --short_socket_write | 
| 9 | 9 | 
| 10 import "package:expect/expect.dart"; | 10 import "package:expect/expect.dart"; | 
| 11 import "package:path/path.dart"; | 11 import "package:path/path.dart"; | 
| 12 import "dart:async"; | 12 import "dart:async"; | 
| 13 import "dart:io"; | 13 import "dart:io"; | 
| 14 import "dart:isolate"; | 14 import "dart:isolate"; | 
| 15 | 15 | 
| 16 Future<HttpServer> startServer() { | 16 String localFile(path) => Platform.script.resolve(path).toFilePath(); | 
| 17   return HttpServer.bindSecure( |  | 
| 18       "localhost", |  | 
| 19       0, |  | 
| 20       backlog: 5, |  | 
| 21       certificateName: 'localhost_cert').then((server) { |  | 
| 22     server.listen((HttpRequest request) { |  | 
| 23       request.listen( |  | 
| 24         (_) { }, |  | 
| 25         onDone: () { |  | 
| 26           request.response.contentLength = 100; |  | 
| 27           for (int i = 0; i < 10; i++) { |  | 
| 28             request.response.add([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); |  | 
| 29           } |  | 
| 30           request.response.close(); |  | 
| 31         }); |  | 
| 32     }); |  | 
| 33     return server; |  | 
| 34   }); |  | 
| 35 } |  | 
| 36 | 17 | 
| 37 void InitializeSSL() { | 18 SecurityContext serverContext = new SecurityContext() | 
| 38   var testPkcertDatabase = Platform.script.resolve('pkcert').toFilePath(); | 19   ..useCertificateChain(localFile('certificates/server_chain.pem')) | 
| 39   SecureSocket.initialize(database: testPkcertDatabase, | 20   ..usePrivateKey(localFile('certificates/server_key.pem'), | 
| 40                           password: 'dartdart'); | 21                   password: 'dartdart'); | 
| 41 } |  | 
| 42 | 22 | 
| 43 void main() { | 23 SecurityContext clientContext = new SecurityContext() | 
|  | 24   ..setTrustedCertificates(file: localFile('certificates/trusted_certs.pem')); | 
|  | 25 | 
|  | 26 main() async { | 
| 44   List<int> message = "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n".codeUnits; | 27   List<int> message = "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n".codeUnits; | 
| 45   int written = 0; | 28   int written = 0; | 
| 46   List<int> body = <int>[]; | 29   List<int> body = <int>[]; | 
| 47   InitializeSSL(); | 30   var server = await HttpServer.bindSecure( | 
| 48   startServer().then((server) { | 31       "localhost", | 
| 49     RawSecureSocket.connect("localhost", server.port).then((socket) { | 32       0, | 
| 50       socket.listen( | 33       serverContext, | 
| 51           (RawSocketEvent event) { | 34       backlog: 5); | 
| 52             switch (event) { | 35   server.listen((HttpRequest request) async { | 
| 53               case RawSocketEvent.READ: | 36     await request.drain(); | 
| 54                 body.addAll(socket.read()); | 37     request.response.contentLength = 100; | 
| 55                 break; | 38     for (int i = 0; i < 10; i++) { | 
| 56               case RawSocketEvent.WRITE: | 39       request.response.add([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); | 
| 57                 written += | 40     } | 
| 58                     socket.write(message, written, message.length - written); | 41     request.response.close(); | 
| 59                 if (written < message.length) { | 42   }); | 
| 60                   socket.writeEventsEnabled = true; | 43   var socket = await RawSecureSocket.connect("localhost", | 
| 61                 } else { | 44                                              server.port, | 
| 62                   socket.shutdown(SocketDirection.SEND); | 45                                              context: clientContext); | 
| 63                 } | 46   socket.listen((RawSocketEvent event) { | 
| 64                 break; | 47     switch (event) { | 
| 65               case RawSocketEvent.READ_CLOSED: | 48       case RawSocketEvent.READ: | 
| 66                 Expect.isTrue(body.length > 100, "$body\n${body.length}"); | 49         body.addAll(socket.read()); | 
| 67                 Expect.equals(72, body[0]); | 50         break; | 
| 68                 Expect.equals(9, body[body.length - 1]); | 51       case RawSocketEvent.WRITE: | 
| 69                 server.close(); | 52         written += | 
| 70                 break; | 53             socket.write(message, written, message.length - written); | 
| 71               default: throw "Unexpected event $event"; | 54         if (written < message.length) { | 
| 72             } | 55           socket.writeEventsEnabled = true; | 
| 73           }, | 56         } else { | 
| 74           onError: (e, trace) { | 57           socket.shutdown(SocketDirection.SEND); | 
| 75             String msg = "onError handler of RawSecureSocket stream hit $e"; | 58         } | 
| 76             if (trace != null) msg += "\nStackTrace: $trace"; | 59         break; | 
| 77             Expect.fail(msg); | 60       case RawSocketEvent.READ_CLOSED: | 
| 78           }); | 61         Expect.isTrue(body.length > 100, "$body\n${body.length}"); | 
| 79     }); | 62         Expect.equals(72, body[0]); | 
|  | 63         Expect.equals(9, body[body.length - 1]); | 
|  | 64         server.close(); | 
|  | 65         break; | 
|  | 66       default: throw "Unexpected event $event"; | 
|  | 67     } | 
|  | 68   }, onError: (e, trace) { | 
|  | 69     String msg = "onError handler of RawSecureSocket stream hit $e"; | 
|  | 70     if (trace != null) msg += "\nStackTrace: $trace"; | 
|  | 71     Expect.fail(msg); | 
| 80   }); | 72   }); | 
| 81 } | 73 } | 
| OLD | NEW | 
|---|