diff --git a/lib/src/engine/socket.dart b/lib/src/engine/socket.dart index 7bfdd57..01e5396 100644 --- a/lib/src/engine/socket.dart +++ b/lib/src/engine/socket.dart @@ -73,6 +73,7 @@ class Socket extends EventEmitter { Transport transport; bool supportsBinary; bool upgrading; + Map extraHeaders; Socket(String uri, Map opts) { opts = opts ?? {}; @@ -137,6 +138,7 @@ class Socket extends EventEmitter { this.perMessageDeflate['threshold'] = 1024; } + this.extraHeaders = opts['extraHeaders'] ?? {}; // SSL options for Node.js client // this.pfx = opts.pfx || null; // this.key = opts.key || null; @@ -239,7 +241,7 @@ class Socket extends EventEmitter { // 'rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized, 'perMessageDeflate': options['perMessageDeflate'] ?? this.perMessageDeflate, -// 'extraHeaders: options['extraHeaders ?? this.extraHeaders, + 'extraHeaders': options['extraHeaders'] ?? this.extraHeaders, // 'forceNode: options.forceNode || this.forceNode, // 'localAddress: options.localAddress || this.localAddress, 'requestTimeout': options['requestTimeout'] ?? this.requestTimeout, diff --git a/lib/src/engine/transport/io_websocket_transport.dart b/lib/src/engine/transport/io_websocket_transport.dart index 5f488f4..5ce55b4 100644 --- a/lib/src/engine/transport/io_websocket_transport.dart +++ b/lib/src/engine/transport/io_websocket_transport.dart @@ -1,4 +1,4 @@ -// Copyright (C) 2019 Potix Corporation. All Rights Reserved +// Copyright (C) 2019 Potix Corporation. All Rights Reserved // History: 2019-01-21 12:13 // Author: jumperchen @@ -19,6 +19,7 @@ class IOWebSocketTransport extends Transport { bool supportsBinary; Map perMessageDeflate; + Map extraHeaders; WebSocket ws; IOWebSocketTransport(Map opts) : super(opts) { @@ -26,6 +27,7 @@ class IOWebSocketTransport extends Transport { this.supportsBinary = !forceBase64; this.perMessageDeflate = opts['perMessageDeflate']; this.protocols = opts['protocols']; + this.extraHeaders = opts['extraHeaders']; } void doOpen() async { @@ -33,7 +35,7 @@ class IOWebSocketTransport extends Transport { var protocols = this.protocols; try { - this.ws = await WebSocket.connect(uri, protocols: protocols); + this.ws = await WebSocket.connect(uri, protocols: protocols, headers: extraHeaders); } catch (err) { return this.emit('error', err); } diff --git a/test/io_client.dart b/test/io_client.dart index f95248a..63d57cb 100644 --- a/test/io_client.dart +++ b/test/io_client.dart @@ -1,11 +1,14 @@ -// Copyright (C) 2019 Potix Corporation. All Rights Reserved +// Copyright (C) 2019 Potix Corporation. All Rights Reserved // History: 2019-01-21 11:56 // Author: jumperchen import 'dart:async'; import 'package:socket_io_client/socket_io_client.dart' as IO; main() { - IO.Socket socket = IO.io('http://localhost:3000', {'transports': ['websocket']}); + IO.Socket socket = IO.io('http://localhost:3000', { + 'transports': ['websocket'], + 'extraHeaders': {'foo': 'bar'} + }); socket.on('connect', (_) { print('connect'); socket.emit('msg', 'init'); diff --git a/test/server.dart b/test/server.dart index 56fc774..bb52f8e 100644 --- a/test/server.dart +++ b/test/server.dart @@ -16,6 +16,9 @@ main() { // Dart server var io = new Server(); io.on('connection', (client) { + final headers = client.handshake['headers']; + headers.forEach((k, v) => print('$k => $v')); + print('connection default namespace'); client.on('msg', (data) { print('data from default => $data');