@@ -3,6 +3,7 @@ import 'dart:math';
33import 'dart:convert' ;
44import 'dart:async' ;
55import '../logger.dart' ;
6+ import '../grammar.dart' ;
67
78typedef void OnMessageCallback (dynamic msg);
89typedef void OnCloseCallback (int code, String reason);
@@ -17,15 +18,21 @@ class WebSocketImpl {
1718 OnCloseCallback onClose;
1819 WebSocketImpl (this ._url);
1920
20- void connect ({Object protocols, Object headers}) async {
21- logger.info ('connect $_url , $headers , $protocols ' );
21+ void connect (
22+ {Iterable <String > protocols,
23+ Map <String , String > extHeaders,
24+ bool allowBadCertificate = false }) async {
25+ logger.info ('connect $_url , $extHeaders , $protocols ' );
2226 try {
23- _socket =
24- await WebSocket .connect (_url, protocols: protocols, headers: headers);
25-
26- /// Allow self-signed certificate, for test only.
27- /// var parsed_url = Grammar.parse(this._url, 'absoluteURI');
28- /// _socket = await _connectForBadCertificate(parsed_url.scheme, parsed_url.host, parsed_url.port);
27+ if (allowBadCertificate) {
28+ /// Allow self-signed certificate, for test only.
29+ var parsed_url = Grammar .parse (_url, 'absoluteURI' );
30+ _socket = await _connectForBadCertificate (
31+ parsed_url.scheme, parsed_url.host, parsed_url.port, extHeaders);
32+ } else {
33+ _socket = await WebSocket .connect (_url,
34+ protocols: protocols, headers: extHeaders);
35+ }
2936
3037 this ? .onOpen ();
3138 _socket.listen ((data) {
@@ -41,7 +48,7 @@ class WebSocketImpl {
4148 void send (data) {
4249 if (_socket != null ) {
4350 _socket.add (data);
44- logger.debug ('send: $data ' );
51+ logger.debug ('send: \n\n $data ' );
4552 }
4653 }
4754
@@ -54,31 +61,36 @@ class WebSocketImpl {
5461 }
5562
5663 /// For test only.
57- Future <WebSocket > _connectForBadCertificate (
58- String scheme, String host, int port ) async {
64+ Future <WebSocket > _connectForBadCertificate (String scheme, String host,
65+ int port, Map < String , String > extHeaders ) async {
5966 try {
60- Random r = new Random ();
61- String key = base64.encode (List <int >.generate (8 , (_) => r.nextInt (255 )));
62- SecurityContext securityContext = new SecurityContext ();
63- HttpClient client = HttpClient (context: securityContext);
67+ var r = new Random ();
68+ var key = base64.encode (List <int >.generate (8 , (_) => r.nextInt (255 )));
69+ var securityContext = new SecurityContext ();
70+ var client = HttpClient (context: securityContext);
6471 client.badCertificateCallback =
6572 (X509Certificate cert, String host, int port) {
6673 logger.warn ('Allow self-signed certificate => $host :$port . ' );
6774 return true ;
6875 };
6976
70- HttpClientRequest request = await client.getUrl (Uri .parse (
77+ var request = await client.getUrl (Uri .parse (
7178 (scheme == 'wss' ? 'https' : 'http' ) +
7279 '://$host :$port /ws' )); // form the correct url here
7380
7481 request.headers.add ('Connection' , 'Upgrade' );
7582 request.headers.add ('Upgrade' , 'websocket' );
76- request.headers.add ('Sec-WebSocket-Protocol' , 'sip' );
7783 request.headers.add (
7884 'Sec-WebSocket-Version' , '13' ); // insert the correct version here
7985 request.headers.add ('Sec-WebSocket-Key' , key.toLowerCase ());
8086
81- HttpClientResponse response = await request.close ();
87+ //request.headers.add('Origin', 'http://localhost:5060');
88+ //request.headers.add('Sec-WebSocket-Protocol', 'sip');
89+ extHeaders.forEach ((key, value) {
90+ request.headers.add (key, value);
91+ });
92+
93+ var response = await request.close ();
8294 var socket = await response.detachSocket ();
8395 var webSocket = WebSocket .fromUpgradedSocket (
8496 socket,
0 commit comments