Skip to content

Commit 97ca2d7

Browse files
committed
Fix Uri.parse.
1 parent 62d4797 commit 97ca2d7

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

lib/src/transports/websocket_dart_impl.dart

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ typedef void OnCloseCallback(int code, String reason);
1212
typedef void OnOpenCallback();
1313

1414
class WebSocketImpl {
15-
String _url;
15+
final String _url;
1616
WebSocket _socket;
1717
final logger = Log();
1818
OnOpenCallback onOpen;
@@ -26,22 +26,20 @@ class WebSocketImpl {
2626
try {
2727
if (webSocketSettings.allowBadCertificate) {
2828
/// Allow self-signed certificate, for test only.
29-
var parsed_url = Grammar.parse(_url, 'absoluteURI');
30-
_socket = await _connectForBadCertificate(parsed_url.scheme,
31-
parsed_url.host, parsed_url.port, webSocketSettings);
29+
_socket = await _connectForBadCertificate(_url, webSocketSettings);
3230
} else {
3331
_socket = await WebSocket.connect(_url,
3432
protocols: protocols, headers: webSocketSettings.extraHeaders);
3533
}
3634

37-
this?.onOpen();
35+
onOpen?.call();
3836
_socket.listen((data) {
39-
this?.onMessage(data);
37+
onMessage?.call(data);
4038
}, onDone: () {
41-
this?.onClose(_socket.closeCode, _socket.closeReason);
39+
onClose?.call(_socket.closeCode, _socket.closeReason);
4240
});
4341
} catch (e) {
44-
this.onClose(500, e.toString());
42+
onClose?.call(500, e.toString());
4543
}
4644
}
4745

@@ -61,8 +59,8 @@ class WebSocketImpl {
6159
}
6260

6361
/// For test only.
64-
Future<WebSocket> _connectForBadCertificate(String scheme, String host,
65-
int port, WebSocketSettings webSocketSettings) async {
62+
Future<WebSocket> _connectForBadCertificate(
63+
String url, WebSocketSettings webSocketSettings) async {
6664
try {
6765
var r = new Random();
6866
var key = base64.encode(List<int>.generate(16, (_) => r.nextInt(255)));
@@ -79,9 +77,11 @@ class WebSocketImpl {
7977
return true;
8078
};
8179

82-
var request = await client.getUrl(Uri.parse(
83-
(scheme == 'wss' ? 'https' : 'http') +
84-
'://$host:$port')); // form the correct url here
80+
var parsed_uri = Uri.parse(url);
81+
var uri = parsed_uri.replace(
82+
scheme: parsed_uri.scheme == 'wss' ? 'https' : 'http');
83+
84+
var request = await client.getUrl(uri); // form the correct url here
8585
request.headers.add('Connection', 'Upgrade', preserveHeaderCase: true);
8686
request.headers.add('Upgrade', 'websocket', preserveHeaderCase: true);
8787
request.headers.add('Sec-WebSocket-Version', '13',

test/test_uri_parse.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'dart:io';
2+
import 'package:test/test.dart';
3+
4+
var testFunctions = [
5+
() => test('Parser: URI => [ replace scheme ].', () {
6+
var url = 'wss://github.com:8086/ws';
7+
var uri = Uri.parse(url);
8+
expect(uri.scheme, 'wss');
9+
var uri2 = uri.replace(
10+
scheme: uri.scheme == 'wss' ? 'https' : 'http', path: '/wsxxx');
11+
expect(uri.scheme, 'https');
12+
})
13+
];
14+
15+
void main() {
16+
testFunctions.forEach((func) => func());
17+
}

0 commit comments

Comments
 (0)