Skip to content

Commit a4f6364

Browse files
committed
Add support for passing options to transports other than websockets. Useful if you need to pass headers for example to an XHR request
1 parent 18ff02e commit a4f6364

16 files changed

+46
-43
lines changed

lib/info-ajax.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ if (process.env.NODE_ENV !== 'production') {
1111
debug = require('debug')('sockjs-client:info-ajax');
1212
}
1313

14-
function InfoAjax(url, AjaxObject) {
14+
function InfoAjax(url, AjaxObject, opts) {
1515
EventEmitter.call(this);
1616

1717
var self = this;
1818
var t0 = +new Date();
19-
this.xo = new AjaxObject('GET', url);
19+
this.xo = new AjaxObject('GET', url, null, opts);
2020

2121
this.xo.once('finish', function(status, text) {
2222
var info, rtt;

lib/info-iframe-receiver.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ var inherits = require('inherits')
77
, InfoAjax = require('./info-ajax')
88
;
99

10-
function InfoReceiverIframe(transUrl) {
10+
function InfoReceiverIframe(transUrl, ignore, opts) {
1111
var self = this;
1212
EventEmitter.call(this);
1313

14-
this.ir = new InfoAjax(transUrl, XHRLocalObject);
14+
this.ir = new InfoAjax(transUrl, XHRLocalObject, opts);
1515
this.ir.once('finish', function(info, rtt) {
1616
self.ir = null;
1717
self.emit('message', JSON3.stringify([info, rtt]));

lib/info-receiver.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,44 @@ if (process.env.NODE_ENV !== 'production') {
1616
debug = require('debug')('sockjs-client:info-receiver');
1717
}
1818

19-
function InfoReceiver(baseUrl, urlInfo) {
19+
function InfoReceiver(baseUrl, urlInfo, transportOptions) {
2020
debug(baseUrl);
2121
var self = this;
2222
EventEmitter.call(this);
2323

2424
setTimeout(function() {
25-
self.doXhr(baseUrl, urlInfo);
25+
self.doXhr(baseUrl, urlInfo, transportOptions);
2626
}, 0);
2727
}
2828

2929
inherits(InfoReceiver, EventEmitter);
3030

3131
// TODO this is currently ignoring the list of available transports and the whitelist
3232

33-
InfoReceiver._getReceiver = function(baseUrl, url, urlInfo) {
33+
InfoReceiver._getReceiver = function(baseUrl, url, urlInfo, transportOptions) {
3434
// determine method of CORS support (if needed)
3535
if (urlInfo.sameOrigin) {
36-
return new InfoAjax(url, XHRLocal);
36+
return new InfoAjax(url, XHRLocal, transportOptions['xhr-streaming'] || transportOptions['xhr-polling']);
3737
}
3838
if (XHRCors.enabled) {
39-
return new InfoAjax(url, XHRCors);
39+
return new InfoAjax(url, XHRCors, transportOptions['xhr-streaming'] || transportOptions['xhr-polling']);
4040
}
4141
if (XDR.enabled && urlInfo.sameScheme) {
42-
return new InfoAjax(url, XDR);
42+
return new InfoAjax(url, XDR, transportOptions['xdr-streaming'] || transportOptions['xdr-polling']);
4343
}
4444
if (InfoIframe.enabled()) {
45-
return new InfoIframe(baseUrl, url);
45+
return new InfoIframe(baseUrl, url, transportOptions['iframe']);
4646
}
4747
return new InfoAjax(url, XHRFake);
4848
};
4949

50-
InfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) {
50+
InfoReceiver.prototype.doXhr = function(baseUrl, urlInfo, transportOptions) {
5151
var self = this
5252
, url = urlUtils.addPath(baseUrl, '/info')
5353
;
5454
debug('doXhr', url);
5555

56-
this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo);
56+
this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo, transportOptions);
5757

5858
this.timeoutRef = setTimeout(function() {
5959
debug('timeout');

lib/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ function SockJS(url, protocols, options) {
122122
, sameScheme: urlUtils.isSchemeEqual(this.url, loc.href)
123123
};
124124

125-
this._ir = new InfoReceiver(this.url, this._urlInfo);
125+
this._ir = new InfoReceiver(this.url, this._urlInfo, this._transportOptions);
126126
this._ir.once('finish', this._receiveInfo.bind(this));
127127
}
128128

lib/transport/eventsource.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ var inherits = require('inherits')
77
, EventSourceDriver = require('eventsource')
88
;
99

10-
function EventSourceTransport(transUrl) {
10+
function EventSourceTransport(transUrl, ignore, opts) {
1111
if (!EventSourceTransport.enabled()) {
1212
throw new Error('Transport created when disabled');
1313
}
1414

15-
AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject);
15+
AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject, opts);
1616
}
1717

1818
inherits(EventSourceTransport, AjaxBasedTransport);

lib/transport/htmlfile.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ var inherits = require('inherits')
66
, AjaxBasedTransport = require('./lib/ajax-based')
77
;
88

9-
function HtmlFileTransport(transUrl) {
9+
function HtmlFileTransport(transUrl, ignore, opts) {
1010
if (!HtmlfileReceiver.enabled) {
1111
throw new Error('Transport created when disabled');
1212
}
13-
AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject);
13+
AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject, opts);
1414
}
1515

1616
inherits(HtmlFileTransport, AjaxBasedTransport);

lib/transport/lib/ajax-based.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@ if (process.env.NODE_ENV !== 'production') {
1010
debug = require('debug')('sockjs-client:ajax-based');
1111
}
1212

13-
function createAjaxSender(AjaxObject) {
13+
function createAjaxSender(AjaxObject, opts) {
1414
return function(url, payload, callback) {
1515
debug('create ajax sender', url, payload);
16-
var opt = {};
16+
opts = opts || {};
1717
if (typeof payload === 'string') {
18-
opt.headers = {'Content-type': 'text/plain'};
18+
opts.headers = opts.headers || {};
19+
opts.headers['Content-type'] = 'text/plain';
1920
}
2021
var ajaxUrl = urlUtils.addPath(url, '/xhr_send');
21-
var xo = new AjaxObject('POST', ajaxUrl, payload, opt);
22+
var xo = new AjaxObject('POST', ajaxUrl, payload, opts);
2223
xo.once('finish', function(status) {
2324
debug('finish', status);
2425
xo = null;
@@ -40,8 +41,8 @@ function createAjaxSender(AjaxObject) {
4041
};
4142
}
4243

43-
function AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {
44-
SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);
44+
function AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject, opts) {
45+
SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject, opts), Receiver, AjaxObject, opts);
4546
}
4647

4748
inherits(AjaxBasedTransport, SenderReceiver);

lib/transport/lib/polling.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ if (process.env.NODE_ENV !== 'production') {
99
debug = require('debug')('sockjs-client:polling');
1010
}
1111

12-
function Polling(Receiver, receiveUrl, AjaxObject) {
12+
function Polling(Receiver, receiveUrl, AjaxObject, opts) {
1313
debug(receiveUrl);
1414
EventEmitter.call(this);
1515
this.Receiver = Receiver;
1616
this.receiveUrl = receiveUrl;
1717
this.AjaxObject = AjaxObject;
18+
this.opts = opts;
1819
this._scheduleReceiver();
1920
}
2021

@@ -23,7 +24,7 @@ inherits(Polling, EventEmitter);
2324
Polling.prototype._scheduleReceiver = function() {
2425
debug('_scheduleReceiver');
2526
var self = this;
26-
var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject);
27+
var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject, this.opts);
2728

2829
poll.on('message', function(msg) {
2930
debug('message', msg);

lib/transport/lib/sender-receiver.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ if (process.env.NODE_ENV !== 'production') {
1111
debug = require('debug')('sockjs-client:sender-receiver');
1212
}
1313

14-
function SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject) {
14+
function SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject, opts) {
1515
var pollUrl = urlUtils.addPath(transUrl, urlSuffix);
1616
debug(pollUrl);
1717
var self = this;
1818
BufferedSender.call(this, transUrl, senderFunc);
1919

20-
this.poll = new Polling(Receiver, pollUrl, AjaxObject);
20+
this.poll = new Polling(Receiver, pollUrl, AjaxObject, opts);
2121
this.poll.on('message', function(msg) {
2222
debug('poll message', msg);
2323
self.emit('message', msg);

lib/transport/receiver/xhr.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ if (process.env.NODE_ENV !== 'production') {
99
debug = require('debug')('sockjs-client:receiver:xhr');
1010
}
1111

12-
function XhrReceiver(url, AjaxObject) {
12+
function XhrReceiver(url, AjaxObject, opts) {
1313
debug(url);
1414
EventEmitter.call(this);
1515
var self = this;
1616

1717
this.bufferPosition = 0;
1818

19-
this.xo = new AjaxObject('POST', url, null);
19+
this.opts = opts;
20+
this.xo = new AjaxObject('POST', url, null, opts);
2021
this.xo.on('chunk', this._chunkHandler.bind(this));
2122
this.xo.once('finish', function(status, text) {
2223
debug('finish', status, text);

0 commit comments

Comments
 (0)