Chromium Code Reviews| 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 patch class RawServerSocket { | 5 patch class RawServerSocket { |
| 6 /* patch */ static Future<RawServerSocket> bind(address, | 6 /* patch */ static Future<RawServerSocket> bind(address, |
| 7 int port, | 7 int port, |
| 8 {int backlog: 0, | 8 {int backlog: 0, |
| 9 bool v6Only: false}) { | 9 bool v6Only: false}) { |
| 10 return _RawServerSocket.bind(address, port, backlog, v6Only); | 10 return _RawServerSocket.bind(address, port, backlog, v6Only); |
| (...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 802 List<int> buffer; | 802 List<int> buffer; |
| 803 bool paused = false; | 803 bool paused = false; |
| 804 Completer streamCompleter; | 804 Completer streamCompleter; |
| 805 | 805 |
| 806 _SocketStreamConsumer(this.socket); | 806 _SocketStreamConsumer(this.socket); |
| 807 | 807 |
| 808 Future<Socket> addStream(Stream<List<int>> stream) { | 808 Future<Socket> addStream(Stream<List<int>> stream) { |
| 809 socket._ensureRawSocketSubscription(); | 809 socket._ensureRawSocketSubscription(); |
| 810 streamCompleter = new Completer<Socket>(); | 810 streamCompleter = new Completer<Socket>(); |
| 811 if (socket._raw != null) { | 811 if (socket._raw != null) { |
| 812 assert(!!!paused); | |
|
Anders Johnsen
2013/05/22 13:07:08
!!!?
Lasse Reichstein Nielsen
2013/05/24 06:02:49
!!!!!
Deliberately made stupid to mark it as debug
| |
| 812 subscription = stream.listen( | 813 subscription = stream.listen( |
| 813 (data) { | 814 (data) { |
| 814 assert(!paused); | 815 assert(!paused); |
| 815 assert(buffer == null); | 816 assert(buffer == null); |
| 816 buffer = data; | 817 buffer = data; |
| 817 offset = 0; | 818 offset = 0; |
| 818 write(); | 819 write(); |
| 819 }, | 820 }, |
| 820 onError: (error) { | 821 onError: (error) { |
| 821 socket._consumerDone(); | 822 socket._consumerDone(); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 835 } | 836 } |
| 836 | 837 |
| 837 void write() { | 838 void write() { |
| 838 try { | 839 try { |
| 839 if (subscription == null) return; | 840 if (subscription == null) return; |
| 840 assert(buffer != null); | 841 assert(buffer != null); |
| 841 // Write as much as possible. | 842 // Write as much as possible. |
| 842 offset += socket._write(buffer, offset, buffer.length - offset); | 843 offset += socket._write(buffer, offset, buffer.length - offset); |
| 843 if (offset < buffer.length) { | 844 if (offset < buffer.length) { |
| 844 if (!paused) { | 845 if (!paused) { |
| 845 paused = true; | |
| 846 // TODO(ajohnsen): It would be nice to avoid this check. | 846 // TODO(ajohnsen): It would be nice to avoid this check. |
| 847 // Some info: socket._write can emit an event, if it fails to write. | 847 // Some info: socket._write can emit an event, if it fails to write. |
| 848 // If the user closes the socket in that event, stop() will be called | 848 // If the user closes the socket in that event, stop() will be called |
| 849 // before we get a change to pause. | 849 // before we get a change to pause. |
| 850 if (subscription == null) return; | 850 if (subscription == null) return; |
|
Anders Johnsen
2013/05/22 13:07:08
This line (and the comment) can be removed now, du
Lasse Reichstein Nielsen
2013/05/24 06:02:49
YEY
| |
| 851 paused = true; | |
|
Anders Johnsen
2013/05/22 13:07:08
Can you try without these pause?
Lasse Reichstein Nielsen
2013/05/24 06:02:49
I'll try.
| |
| 851 subscription.pause(); | 852 subscription.pause(); |
| 852 } | 853 } |
| 853 socket._enableWriteEvent(); | 854 socket._enableWriteEvent(); |
| 854 } else { | 855 } else { |
| 855 buffer = null; | 856 buffer = null; |
| 856 if (paused) { | 857 if (paused) { |
| 857 paused = false; | 858 paused = false; |
| 858 subscription.resume(); | 859 subscription.resume(); |
| 859 } | 860 } |
| 860 } | 861 } |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 873 streamCompleter.complete(socket); | 874 streamCompleter.complete(socket); |
| 874 } | 875 } |
| 875 streamCompleter = null; | 876 streamCompleter = null; |
| 876 } | 877 } |
| 877 } | 878 } |
| 878 | 879 |
| 879 void stop() { | 880 void stop() { |
| 880 if (subscription == null) return; | 881 if (subscription == null) return; |
| 881 subscription.cancel(); | 882 subscription.cancel(); |
| 882 subscription = null; | 883 subscription = null; |
| 884 paused = false; | |
| 883 socket._disableWriteEvent(); | 885 socket._disableWriteEvent(); |
| 884 } | 886 } |
| 885 } | 887 } |
| 886 | 888 |
| 887 | 889 |
| 888 class _Socket extends Stream<List<int>> implements Socket { | 890 class _Socket extends Stream<List<int>> implements Socket { |
| 889 RawSocket _raw; // Set to null when the raw socket is closed. | 891 RawSocket _raw; // Set to null when the raw socket is closed. |
| 890 bool _closed = false; // Set to true when the raw socket is closed. | 892 bool _closed = false; // Set to true when the raw socket is closed. |
| 891 StreamController _controller; | 893 StreamController _controller; |
| 892 bool _controllerClosed = false; | 894 bool _controllerClosed = false; |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1094 _raw.onBadCertificate = callback; | 1096 _raw.onBadCertificate = callback; |
| 1095 } | 1097 } |
| 1096 | 1098 |
| 1097 X509Certificate get peerCertificate { | 1099 X509Certificate get peerCertificate { |
| 1098 if (_raw == null) { | 1100 if (_raw == null) { |
| 1099 throw new StateError("peerCertificate called on destroyed SecureSocket"); | 1101 throw new StateError("peerCertificate called on destroyed SecureSocket"); |
| 1100 } | 1102 } |
| 1101 return _raw.peerCertificate; | 1103 return _raw.peerCertificate; |
| 1102 } | 1104 } |
| 1103 } | 1105 } |
| OLD | NEW |