Skip to content

Commit

Permalink
fix: open connection when the WebSocket URI prefix has _ (underscore).
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcelo Amaro committed Aug 23, 2023
1 parent c3c9199 commit b620627
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 38 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.0.24

* Fix connection when the WebSocket URI prefix has ```_``` (underscore).

## 0.0.23

* Fix WebSocket closure
Expand Down
32 changes: 22 additions & 10 deletions lib/src/protocol/network/web_socket_transport.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:flutter/services.dart';
import 'package:pretty_json/pretty_json.dart';

import '../../services/logger.service.dart';
import '../../utils/lime.utils.dart';
import '../enums/session_encryption.enum.dart';
import '../enums/session_compression.enum.dart';
import '../enums/session_encryption.enum.dart';
import '../envelope.dart';
import '../exceptions/insecure_socket.exception.dart';
import 'transport.dart';

import 'package:pretty_json/pretty_json.dart';

/// Allows websocket communication based a Transport base class
class WebSocketTransport implements Transport {
StreamController<Map<String, dynamic>>? onEnvelopeStream =
Expand Down Expand Up @@ -43,21 +43,29 @@ class WebSocketTransport implements Transport {
final String uri, {
final bool useMtls = false,
}) async {
HttpClient? customClient;
SecurityContext? securityContext;

if (useMtls) {
List<int> keyBytes = await _getKeyBytes();
List<int> certificateChainBytes = await _getCertificateChainBytes();

final context = SecurityContext(withTrustedRoots: true);
context.usePrivateKeyBytes(keyBytes);
context.useCertificateChainBytes(certificateChainBytes);

customClient = HttpClient(context: context);
securityContext = SecurityContext(withTrustedRoots: true);
securityContext.usePrivateKeyBytes(keyBytes);
securityContext.useCertificateChainBytes(certificateChainBytes);
}

final customClient = HttpClient(
context: securityContext,
);

if (uri.contains('wss://')) {
encryption = SessionEncryption.tls;

// Some WebSocket URI prefix has _ (underscore) which might throw
// Handshake Hostname Mismatch exception because it cannot be
// authenticated by any trusted root certificates.
customClient.badCertificateCallback =
(_, host, __) => host.contains('_') && host.endsWith('.ws.blip.ai');
} else {
encryption = SessionEncryption.none;
}
Expand All @@ -66,7 +74,11 @@ class WebSocketTransport implements Transport {

try {
// connect to the socket server
socket = await WebSocket.connect(uri, customClient: customClient);
socket = await WebSocket.connect(
uri,
customClient: customClient,
);

logger.info('Connected to: $uri');

// listen for responses from the server
Expand Down
62 changes: 35 additions & 27 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: "3444216bfd127af50bbe4862d8843ed44db946dd933554f0d7285e89f10e28ac"
sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a
url: "https://pub.dev"
source: hosted
version: "50.0.0"
version: "61.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: "68796c31f510c8455a06fed75fc97d8e5ad04d324a830322ab3efc9feb6201c1"
sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562
url: "https://pub.dev"
source: hosted
version: "5.2.0"
version: "5.13.0"
args:
dependency: transitive
description:
Expand All @@ -29,10 +29,10 @@ packages:
dependency: transitive
description:
name: async
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.10.0"
version: "2.11.0"
boolean_selector:
dependency: transitive
description:
Expand Down Expand Up @@ -109,10 +109,10 @@ packages:
dependency: transitive
description:
name: characters
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.3.0"
checked_yaml:
dependency: transitive
description:
Expand Down Expand Up @@ -141,10 +141,10 @@ packages:
dependency: transitive
description:
name: collection
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
url: "https://pub.dev"
source: hosted
version: "1.17.0"
version: "1.17.2"
convert:
dependency: transitive
description:
Expand Down Expand Up @@ -263,10 +263,10 @@ packages:
dependency: transitive
description:
name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev"
source: hosted
version: "0.6.5"
version: "0.6.7"
json_annotation:
dependency: transitive
description:
Expand Down Expand Up @@ -295,26 +295,26 @@ packages:
dependency: transitive
description:
name: matcher
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev"
source: hosted
version: "0.12.13"
version: "0.12.16"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
version: "0.5.0"
meta:
dependency: transitive
description:
name: meta
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
version: "1.9.1"
mime:
dependency: transitive
description:
Expand All @@ -327,10 +327,10 @@ packages:
dependency: "direct dev"
description:
name: mockito
sha256: "2a8a17b82b1bde04d514e75d90d634a0ac23f6cb4991f6098009dd56836aeafe"
sha256: "8b46d7eb40abdda92d62edd01546051f0c27365e65608c284de336dccfef88cc"
url: "https://pub.dev"
source: hosted
version: "5.3.2"
version: "5.4.1"
package_config:
dependency: transitive
description:
Expand All @@ -343,10 +343,10 @@ packages:
dependency: transitive
description:
name: path
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev"
source: hosted
version: "1.8.2"
version: "1.8.3"
pool:
dependency: transitive
description:
Expand Down Expand Up @@ -420,10 +420,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.10.0"
stack_trace:
dependency: transitive
description:
Expand Down Expand Up @@ -468,10 +468,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
url: "https://pub.dev"
source: hosted
version: "0.4.16"
version: "0.6.0"
timing:
dependency: transitive
description:
Expand Down Expand Up @@ -512,6 +512,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.2"
web:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
web_socket_channel:
dependency: transitive
description:
Expand All @@ -529,5 +537,5 @@ packages:
source: hosted
version: "3.1.1"
sdks:
dart: ">=2.18.0 <3.0.0"
dart: ">=3.1.0-185.0.dev <4.0.0"
flutter: ">=1.17.0"
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: lime
description: LIME Protocol for Dart/Flutter - A lightweight messaging library
version: 0.0.23
version: 0.0.24
homepage: https://limeprotocol.org/
repository: https://github.com/takenet/lime-dart

Expand Down

0 comments on commit b620627

Please sign in to comment.