Skip to content

Commit 55f4795

Browse files
committed
Add allowBadCertificate for UaSettings.
1 parent f77f741 commit 55f4795

File tree

7 files changed

+64
-27
lines changed

7 files changed

+64
-27
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// Generated file. Do not edit.
3+
//
4+
5+
// ignore: unused_import
6+
import 'dart:ui';
7+
8+
import 'package:shared_preferences_web/shared_preferences_web.dart';
9+
10+
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
11+
12+
// ignore: public_member_api_docs
13+
void registerPlugins(PluginRegistry registry) {
14+
SharedPreferencesPlugin.registerWith(registry.registrarFor(SharedPreferencesPlugin));
15+
registry.registerMessageHandler();
16+
}

example/lib/src/register.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ class _MyRegisterWidget extends State<RegisterWidget>
102102
settings.password = _password;
103103
settings.displayName = _displayName;
104104
settings.webSocketExtraHeaders = _wsExtraHeaders;
105+
settings.allowBadCertificate = true;
105106

106107
helper.start(settings);
107108
}

lib/src/sip_ua_helper.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class SIPUAHelper extends EventManager {
133133

134134
_settings = Settings();
135135
var socket = WebSocketInterface(
136-
uaSettings.webSocketUrl, uaSettings.webSocketExtraHeaders);
136+
uaSettings.webSocketUrl, uaSettings.webSocketExtraHeaders, uaSettings.allowBadCertificate);
137137
_settings.sockets = [socket];
138138
_settings.uri = uaSettings.uri;
139139
_settings.password = uaSettings.password;
@@ -459,6 +459,7 @@ abstract class SipUaHelperListener {
459459
class UaSettings {
460460
String webSocketUrl;
461461
Map<String, dynamic> webSocketExtraHeaders;
462+
bool allowBadCertificate = false;
462463

463464
String uri;
464465
String authorizationUser;

lib/src/transport.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class Transport {
175175
}
176176

177177
var message = data.toString();
178-
logger.debug('sending message:\n\n${message}\n');
178+
//logger.debug('sending message:\n\n${message}\n');
179179
return this.socket.send(message);
180180
}
181181

lib/src/transports/websocket_dart_impl.dart

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:math';
33
import 'dart:convert';
44
import 'dart:async';
55
import '../logger.dart';
6+
import '../grammar.dart';
67

78
typedef void OnMessageCallback(dynamic msg);
89
typedef 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,

lib/src/transports/websocket_interface.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class WebSocketInterface implements Socket {
1414
String _sip_uri;
1515
String _via_transport;
1616
String _websocket_protocol = 'sip';
17+
bool _allowBadCertificate = false;
1718
WebSocketImpl _ws;
1819
var _closed = false;
1920
var _connected = false;
@@ -30,7 +31,8 @@ class WebSocketInterface implements Socket {
3031
@override
3132
void Function(dynamic data) ondata;
3233

33-
WebSocketInterface(String url, [Map<String, dynamic> wsExtraHeaders]) {
34+
WebSocketInterface(String url,
35+
[Map<String, dynamic> wsExtraHeaders, bool allowBadCertificate]) {
3436
logger.debug('new() [url:' + url + ']');
3537
this._url = url;
3638
var parsed_url = Grammar.parse(url, 'absoluteURI');
@@ -42,11 +44,13 @@ class WebSocketInterface implements Socket {
4244
throw new AssertionError('Invalid argument: ${url}');
4345
} else {
4446
var port = parsed_url.port != null ? ':${parsed_url.port}' : '';
45-
this._sip_uri = 'sip:${parsed_url.host}${port};transport=${parsed_url.scheme}';
47+
this._sip_uri =
48+
'sip:${parsed_url.host}${port};transport=${parsed_url.scheme}';
4649
logger.debug('SIP URI: ${this._sip_uri}');
4750
this._via_transport = parsed_url.scheme.toUpperCase();
4851
}
4952
this._wsExtraHeaders = wsExtraHeaders ?? {};
53+
this._allowBadCertificate = allowBadCertificate ?? false;
5054
}
5155

5256
@override
@@ -96,10 +100,10 @@ class WebSocketInterface implements Socket {
96100
this._onClose(true, closeCode, closeReason);
97101
};
98102

99-
await this._ws.connect(headers: {
103+
await this._ws.connect(extHeaders: {
100104
'Sec-WebSocket-Protocol': _websocket_protocol,
101105
...this._wsExtraHeaders
102-
});
106+
}, allowBadCertificate: this._allowBadCertificate);
103107
} catch (e, s) {
104108
Log.e(e.toString(), null, s);
105109
_connected = false;

lib/src/transports/websocket_web_impl.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ class WebSocketImpl {
1616

1717
WebSocketImpl(this._url);
1818

19-
void connect({Object protocols, Object headers}) async {
20-
logger.info('connect $_url, $headers, $protocols');
19+
void connect(
20+
{Iterable<String> protocols,
21+
Map<String, String> extHeaders,
22+
bool allowBadCertificate = false}) async {
23+
logger.info('connect $_url, $extHeaders, $protocols');
2124
try {
2225
_socket = WebSocket(_url, 'sip');
2326
_socket.onOpen.listen((e) {
@@ -46,7 +49,7 @@ class WebSocketImpl {
4649
void send(data) {
4750
if (_socket != null && _socket.readyState == WebSocket.OPEN) {
4851
_socket.send(data);
49-
logger.debug('send: $data');
52+
logger.debug('send: \n\n$data');
5053
} else {
5154
logger.error('WebSocket not connected, message $data not sent');
5255
}

0 commit comments

Comments
 (0)