| 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 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 class _HttpIncoming extends Stream<List<int>> { | 7 class _HttpIncoming extends Stream<List<int>> { |
| 8 final int _transferLength; | 8 final int _transferLength; |
| 9 final Completer _dataCompleter = new Completer(); | 9 final Completer _dataCompleter = new Completer(); |
| 10 Stream<List<int>> _stream; | 10 Stream<List<int>> _stream; |
| (...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 writeCRLF(); | 689 writeCRLF(); |
| 690 } | 690 } |
| 691 } | 691 } |
| 692 | 692 |
| 693 | 693 |
| 694 // Transformer that transforms data to HTTP Chunked Encoding. | 694 // Transformer that transforms data to HTTP Chunked Encoding. |
| 695 class _ChunkedTransformer extends StreamEventTransformer<List<int>, List<int>> { | 695 class _ChunkedTransformer extends StreamEventTransformer<List<int>, List<int>> { |
| 696 final bool writeEnd; | 696 final bool writeEnd; |
| 697 _ChunkedTransformer({this.writeEnd: true}); | 697 _ChunkedTransformer({this.writeEnd: true}); |
| 698 | 698 |
| 699 void handleData(List<int> data, StreamSink<List<int>> sink) { | 699 void handleData(List<int> data, EventSink<List<int>> sink) { |
| 700 _addChunk(data, sink.add); | 700 _addChunk(data, sink.add); |
| 701 } | 701 } |
| 702 | 702 |
| 703 void handleDone(StreamSink<List<int>> sink) { | 703 void handleDone(EventSink<List<int>> sink) { |
| 704 if (writeEnd) { | 704 if (writeEnd) { |
| 705 _addChunk([], sink.add); | 705 _addChunk([], sink.add); |
| 706 } | 706 } |
| 707 sink.close(); | 707 sink.close(); |
| 708 } | 708 } |
| 709 | 709 |
| 710 static void _addChunk(List<int> data, void add(List<int> data)) { | 710 static void _addChunk(List<int> data, void add(List<int> data)) { |
| 711 add(_chunkHeader(data.length)); | 711 add(_chunkHeader(data.length)); |
| 712 if (data.length > 0) add(data); | 712 if (data.length > 0) add(data); |
| 713 add(_chunkFooter); | 713 add(_chunkFooter); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 739 class _DoneTransformer implements StreamTransformer<List<int>, List<int>> { | 739 class _DoneTransformer implements StreamTransformer<List<int>, List<int>> { |
| 740 final StreamController<List<int>> _controller | 740 final StreamController<List<int>> _controller |
| 741 = new StreamController<List<int>>(); | 741 = new StreamController<List<int>>(); |
| 742 final Function _onDone; | 742 final Function _onDone; |
| 743 | 743 |
| 744 _DoneTransformer(this._onDone); | 744 _DoneTransformer(this._onDone); |
| 745 | 745 |
| 746 Stream<List<int>> bind(Stream<List<int>> stream) { | 746 Stream<List<int>> bind(Stream<List<int>> stream) { |
| 747 var subscription = stream.listen( | 747 var subscription = stream.listen( |
| 748 _controller.add, | 748 _controller.add, |
| 749 onError: _controller.signalError, | 749 onError: _controller.addError, |
| 750 onDone: () { | 750 onDone: () { |
| 751 _onDone(); | 751 _onDone(); |
| 752 _controller.close(); | 752 _controller.close(); |
| 753 }); | 753 }); |
| 754 return _controller.stream; | 754 return _controller.stream; |
| 755 } | 755 } |
| 756 } | 756 } |
| 757 | 757 |
| 758 // Transformer that validates the data written. | 758 // Transformer that validates the data written. |
| 759 class _DataValidatorTransformer | 759 class _DataValidatorTransformer |
| 760 implements StreamTransformer<List<int>, List<int>> { | 760 implements StreamTransformer<List<int>, List<int>> { |
| 761 final StreamController<List<int>> _controller = | 761 final StreamController<List<int>> _controller = |
| 762 new StreamController<List<int>>(); | 762 new StreamController<List<int>>(); |
| 763 int _bytesWritten = 0; | 763 int _bytesWritten = 0; |
| 764 | 764 |
| 765 int expectedTransferLength; | 765 int expectedTransferLength; |
| 766 | 766 |
| 767 Stream<List<int>> bind(Stream<List<int>> stream) { | 767 Stream<List<int>> bind(Stream<List<int>> stream) { |
| 768 var subscription; | 768 var subscription; |
| 769 subscription = stream.listen( | 769 subscription = stream.listen( |
| 770 (data) { | 770 (data) { |
| 771 if (expectedTransferLength != null) { | 771 if (expectedTransferLength != null) { |
| 772 _bytesWritten += data.length; | 772 _bytesWritten += data.length; |
| 773 if (_bytesWritten > expectedTransferLength) { | 773 if (_bytesWritten > expectedTransferLength) { |
| 774 subscription.cancel(); | 774 subscription.cancel(); |
| 775 _controller.signalError(new HttpException( | 775 _controller.addError(new HttpException( |
| 776 "Content size exceeds specified contentLength. " | 776 "Content size exceeds specified contentLength. " |
| 777 "$_bytesWritten bytes written while expected " | 777 "$_bytesWritten bytes written while expected " |
| 778 "$expectedTransferLength.")); | 778 "$expectedTransferLength.")); |
| 779 _controller.close(); | 779 _controller.close(); |
| 780 return; | 780 return; |
| 781 } | 781 } |
| 782 } | 782 } |
| 783 _controller.add(data); | 783 _controller.add(data); |
| 784 }, | 784 }, |
| 785 onError: (error) { | 785 onError: (error) { |
| 786 _controller.signalError(error); | 786 _controller.addError(error); |
| 787 _controller.close(); | 787 _controller.close(); |
| 788 }, | 788 }, |
| 789 onDone: () { | 789 onDone: () { |
| 790 if (expectedTransferLength != null) { | 790 if (expectedTransferLength != null) { |
| 791 if (_bytesWritten < expectedTransferLength) { | 791 if (_bytesWritten < expectedTransferLength) { |
| 792 _controller.signalError(new HttpException( | 792 _controller.addError(new HttpException( |
| 793 "Content size below specified contentLength. " | 793 "Content size below specified contentLength. " |
| 794 " $_bytesWritten bytes written while expected " | 794 " $_bytesWritten bytes written while expected " |
| 795 "$expectedTransferLength.")); | 795 "$expectedTransferLength.")); |
| 796 } | 796 } |
| 797 } | 797 } |
| 798 _controller.close(); | 798 _controller.close(); |
| 799 }, | 799 }, |
| 800 unsubscribeOnError: true); | 800 unsubscribeOnError: true); |
| 801 return _controller.stream; | 801 return _controller.stream; |
| 802 } | 802 } |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1323 StreamSubscription<HttpRequest> listen(void onData(HttpRequest event), | 1323 StreamSubscription<HttpRequest> listen(void onData(HttpRequest event), |
| 1324 {void onError(AsyncError error), | 1324 {void onError(AsyncError error), |
| 1325 void onDone(), | 1325 void onDone(), |
| 1326 bool unsubscribeOnError}) { | 1326 bool unsubscribeOnError}) { |
| 1327 _serverSocket.listen( | 1327 _serverSocket.listen( |
| 1328 (Socket socket) { | 1328 (Socket socket) { |
| 1329 // Accept the client connection. | 1329 // Accept the client connection. |
| 1330 _HttpConnection connection = new _HttpConnection(socket, this); | 1330 _HttpConnection connection = new _HttpConnection(socket, this); |
| 1331 _connections.add(connection); | 1331 _connections.add(connection); |
| 1332 }, | 1332 }, |
| 1333 onError: _controller.signalError, | 1333 onError: _controller.addError, |
| 1334 onDone: _controller.close); | 1334 onDone: _controller.close); |
| 1335 return _controller.stream.listen(onData, | 1335 return _controller.stream.listen(onData, |
| 1336 onError: onError, | 1336 onError: onError, |
| 1337 onDone: onDone, | 1337 onDone: onDone, |
| 1338 unsubscribeOnError: unsubscribeOnError); | 1338 unsubscribeOnError: unsubscribeOnError); |
| 1339 } | 1339 } |
| 1340 | 1340 |
| 1341 void close() { | 1341 void close() { |
| 1342 closed = true; | 1342 closed = true; |
| 1343 if (_serverSocket != null && _closeServer) { | 1343 if (_serverSocket != null && _closeServer) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1360 | 1360 |
| 1361 set sessionTimeout(int timeout) { | 1361 set sessionTimeout(int timeout) { |
| 1362 _sessionManager.sessionTimeout = timeout; | 1362 _sessionManager.sessionTimeout = timeout; |
| 1363 } | 1363 } |
| 1364 | 1364 |
| 1365 void _handleRequest(HttpRequest request) { | 1365 void _handleRequest(HttpRequest request) { |
| 1366 _controller.add(request); | 1366 _controller.add(request); |
| 1367 } | 1367 } |
| 1368 | 1368 |
| 1369 void _handleError(AsyncError error) { | 1369 void _handleError(AsyncError error) { |
| 1370 if (!closed) _controller.signalError(error); | 1370 if (!closed) _controller.addError(error); |
| 1371 } | 1371 } |
| 1372 | 1372 |
| 1373 void _connectionClosed(_HttpConnection connection) { | 1373 void _connectionClosed(_HttpConnection connection) { |
| 1374 _connections.remove(connection); | 1374 _connections.remove(connection); |
| 1375 } | 1375 } |
| 1376 | 1376 |
| 1377 _HttpSessionManager get _sessionManager { | 1377 _HttpSessionManager get _sessionManager { |
| 1378 // Lazy init. | 1378 // Lazy init. |
| 1379 if (_sessionManagerInstance == null) { | 1379 if (_sessionManagerInstance == null) { |
| 1380 _sessionManagerInstance = new _HttpSessionManager(); | 1380 _sessionManagerInstance = new _HttpSessionManager(); |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1636 | 1636 |
| 1637 | 1637 |
| 1638 class _RedirectInfo implements RedirectInfo { | 1638 class _RedirectInfo implements RedirectInfo { |
| 1639 const _RedirectInfo(int this.statusCode, | 1639 const _RedirectInfo(int this.statusCode, |
| 1640 String this.method, | 1640 String this.method, |
| 1641 Uri this.location); | 1641 Uri this.location); |
| 1642 final int statusCode; | 1642 final int statusCode; |
| 1643 final String method; | 1643 final String method; |
| 1644 final Uri location; | 1644 final Uri location; |
| 1645 } | 1645 } |
| OLD | NEW |