| OLD | NEW |
| 1 #!mojo mojo:dart_content_handler | 1 #!mojo mojo:dart_content_handler |
| 2 // Copyright 2014 The Chromium Authors. All rights reserved. | 2 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
| 4 // found in the LICENSE file. | 4 // found in the LICENSE file. |
| 5 | 5 |
| 6 import 'dart:async'; | 6 import 'dart:async'; |
| 7 import 'dart:core'; | 7 import 'dart:core'; |
| 8 import 'dart:typed_data'; | 8 import 'dart:typed_data'; |
| 9 | 9 |
| 10 import 'package:mojo/application.dart'; | 10 import 'package:mojo/application.dart'; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 : _readBuffer = new ByteData(16 * 1024), | 58 : _readBuffer = new ByteData(16 * 1024), |
| 59 _writeBuffer = new ByteData(16 * 1024); | 59 _writeBuffer = new ByteData(16 * 1024); |
| 60 | 60 |
| 61 Future connect(NetAddress remote_address) async { | 61 Future connect(NetAddress remote_address) async { |
| 62 try { | 62 try { |
| 63 var networkService = new NetworkServiceProxy.unbound(); | 63 var networkService = new NetworkServiceProxy.unbound(); |
| 64 _application.connectToService('mojo:network_service', networkService); | 64 _application.connectToService('mojo:network_service', networkService); |
| 65 | 65 |
| 66 NetAddress local_address = makeIPv4NetAddress([0, 0, 0, 0], 0); | 66 NetAddress local_address = makeIPv4NetAddress([0, 0, 0, 0], 0); |
| 67 var boundSocket = new TcpBoundSocketProxy.unbound(); | 67 var boundSocket = new TcpBoundSocketProxy.unbound(); |
| 68 await networkService.ptr.createTcpBoundSocket(local_address, boundSocket); | 68 await networkService.createTcpBoundSocket(local_address, boundSocket); |
| 69 await networkService.close(); | 69 await networkService.close(); |
| 70 | 70 |
| 71 var sendDataPipe = new MojoDataPipe(); | 71 var sendDataPipe = new MojoDataPipe(); |
| 72 _socketSender = sendDataPipe.producer; | 72 _socketSender = sendDataPipe.producer; |
| 73 var receiveDataPipe = new MojoDataPipe(); | 73 var receiveDataPipe = new MojoDataPipe(); |
| 74 _socketReceiver = receiveDataPipe.consumer; | 74 _socketReceiver = receiveDataPipe.consumer; |
| 75 _socket = new TcpConnectedSocketProxy.unbound(); | 75 _socket = new TcpConnectedSocketProxy.unbound(); |
| 76 await boundSocket.ptr.connect(remote_address, sendDataPipe.consumer, | 76 await boundSocket.connect(remote_address, sendDataPipe.consumer, |
| 77 receiveDataPipe.producer, _socket); | 77 receiveDataPipe.producer, _socket); |
| 78 await boundSocket.close(); | 78 await boundSocket.close(); |
| 79 | 79 |
| 80 // Set up reading from the terminal. | 80 // Set up reading from the terminal. |
| 81 _startReadingFromTerminal(); | 81 _startReadingFromTerminal(); |
| 82 | 82 |
| 83 // Set up reading from the socket. | 83 // Set up reading from the socket. |
| 84 _socketReceiverEventSubscription = | 84 _socketReceiverEventSubscription = |
| 85 new MojoEventSubscription(_socketReceiver.handle); | 85 new MojoEventSubscription(_socketReceiver.handle); |
| 86 _socketReceiverEventSubscription.subscribe(_onSocketReceiverEvent); | 86 _socketReceiverEventSubscription.subscribe(_onSocketReceiverEvent); |
| 87 } catch (e) { | 87 } catch (e) { |
| 88 _shutDown(); | 88 _shutDown(); |
| 89 } | 89 } |
| 90 } | 90 } |
| 91 | 91 |
| 92 void _startReadingFromTerminal() { | 92 void _startReadingFromTerminal() { |
| 93 // TODO(vtl): Do we have to do something on error? | 93 // TODO(vtl): Do we have to do something on error? |
| 94 _terminal.ptr | 94 _terminal |
| 95 .read(_writeBuffer.lengthInBytes, 0, files.Whence.fromCurrent) | 95 .read(_writeBuffer.lengthInBytes, 0, files.Whence.fromCurrent) |
| 96 .then(_onReadFromTerminal) | 96 .then(_onReadFromTerminal) |
| 97 .catchError((e) { | 97 .catchError((e) { |
| 98 _shutDown(); | 98 _shutDown(); |
| 99 }); | 99 }); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void _onReadFromTerminal(files.FileReadResponseParams p) { | 102 void _onReadFromTerminal(files.FileReadResponseParams p) { |
| 103 if (p.error != files.Error.ok) { | 103 if (p.error != files.Error.ok) { |
| 104 // TODO(vtl): Do terminal errors. | 104 // TODO(vtl): Do terminal errors. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 122 | 122 |
| 123 _startReadingFromTerminal(); | 123 _startReadingFromTerminal(); |
| 124 } | 124 } |
| 125 | 125 |
| 126 void _onSocketReceiverEvent(int mojoSignals) { | 126 void _onSocketReceiverEvent(int mojoSignals) { |
| 127 var shouldShutDown = false; | 127 var shouldShutDown = false; |
| 128 if (MojoHandleSignals.isReadable(mojoSignals)) { | 128 if (MojoHandleSignals.isReadable(mojoSignals)) { |
| 129 var numBytesRead = _socketReceiver.read(_readBuffer); | 129 var numBytesRead = _socketReceiver.read(_readBuffer); |
| 130 if (_socketReceiver.status == MojoResult.kOk) { | 130 if (_socketReceiver.status == MojoResult.kOk) { |
| 131 assert(numBytesRead > 0); | 131 assert(numBytesRead > 0); |
| 132 _terminal.ptr | 132 _terminal |
| 133 .write(_readBuffer.buffer.asUint8List(0, numBytesRead), 0, | 133 .write(_readBuffer.buffer.asUint8List(0, numBytesRead), 0, |
| 134 files.Whence.fromCurrent) | 134 files.Whence.fromCurrent) |
| 135 .catchError((e) { | 135 .catchError((e) { |
| 136 _shutDown(); | 136 _shutDown(); |
| 137 }); | 137 }); |
| 138 _socketReceiverEventSubscription.enableReadEvents(); | 138 _socketReceiverEventSubscription.enableReadEvents(); |
| 139 } else { | 139 } else { |
| 140 shouldShutDown = true; | 140 shouldShutDown = true; |
| 141 } | 141 } |
| 142 } else if (MojoHandleSignals.isPeerClosed(mojoSignals)) { | 142 } else if (MojoHandleSignals.isPeerClosed(mojoSignals)) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 } | 181 } |
| 182 | 182 |
| 183 @override | 183 @override |
| 184 void connectToTerminal(files.FileProxy terminal) { | 184 void connectToTerminal(files.FileProxy terminal) { |
| 185 var url = Uri.parse(_resolvedUrl); | 185 var url = Uri.parse(_resolvedUrl); |
| 186 NetAddress remote_address; | 186 NetAddress remote_address; |
| 187 try { | 187 try { |
| 188 remote_address = _getNetAddressFromUrl(url); | 188 remote_address = _getNetAddressFromUrl(url); |
| 189 } catch (e) { | 189 } catch (e) { |
| 190 fputs( | 190 fputs( |
| 191 terminal.ptr, | 191 terminal, |
| 192 'HALP: Add a query: ?host=<host>&port=<port>\n' | 192 'HALP: Add a query: ?host=<host>&port=<port>\n' |
| 193 '(<host> must be "localhost" or n1.n2.n3.n4)\n\n' | 193 '(<host> must be "localhost" or n1.n2.n3.n4)\n\n' |
| 194 'Got query parameters:\n' + | 194 'Got query parameters:\n' + |
| 195 url.queryParameters.toString()); | 195 url.queryParameters.toString()); |
| 196 ignoreFuture(terminal.close()); | 196 ignoreFuture(terminal.close()); |
| 197 return; | 197 return; |
| 198 } | 198 } |
| 199 | 199 |
| 200 // TODO(vtl): Currently, we only do IPv4, so this should work. | 200 // TODO(vtl): Currently, we only do IPv4, so this should work. |
| 201 fputs( | 201 fputs( |
| 202 terminal.ptr, | 202 terminal, |
| 203 'Connecting to: ' + | 203 'Connecting to: ' + |
| 204 remote_address.ipv4.addr.join('.') + | 204 remote_address.ipv4.addr.join('.') + |
| 205 ':' + | 205 ':' + |
| 206 remote_address.ipv4.port.toString() + | 206 remote_address.ipv4.port.toString() + |
| 207 '...'); | 207 '...'); |
| 208 | 208 |
| 209 var connector = new Connector(_application, terminal); | 209 var connector = new Connector(_application, terminal); |
| 210 // TODO(vtl): Do we have to do something on error? | 210 // TODO(vtl): Do we have to do something on error? |
| 211 connector.connect(remote_address).catchError((e) {}); | 211 connector.connect(remote_address).catchError((e) {}); |
| 212 } | 212 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 232 } | 232 } |
| 233 } | 233 } |
| 234 | 234 |
| 235 main(List args, Object handleToken) { | 235 main(List args, Object handleToken) { |
| 236 MojoHandle appHandle = new MojoHandle(handleToken); | 236 MojoHandle appHandle = new MojoHandle(handleToken); |
| 237 new NetcatApplication.fromHandle(appHandle) | 237 new NetcatApplication.fromHandle(appHandle) |
| 238 ..onError = ((Object e) { | 238 ..onError = ((Object e) { |
| 239 MojoHandle.reportLeakedHandles(); | 239 MojoHandle.reportLeakedHandles(); |
| 240 }); | 240 }); |
| 241 } | 241 } |
| OLD | NEW |