You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.1 KiB
53 lines
1.1 KiB
/** |
|
* Module dependencies |
|
*/ |
|
|
|
var XMLHttpRequest = require('xmlhttprequest-ssl'); |
|
var XHR = require('./polling-xhr'); |
|
var JSONP = require('./polling-jsonp'); |
|
var websocket = require('./websocket'); |
|
|
|
/** |
|
* Export transports. |
|
*/ |
|
|
|
exports.polling = polling; |
|
exports.websocket = websocket; |
|
|
|
/** |
|
* Polling transport polymorphic constructor. |
|
* Decides on xhr vs jsonp based on feature detection. |
|
* |
|
* @api private |
|
*/ |
|
|
|
function polling (opts) { |
|
var xhr; |
|
var xd = false; |
|
var xs = false; |
|
var jsonp = false !== opts.jsonp; |
|
|
|
if (global.location) { |
|
var isSSL = 'https:' === location.protocol; |
|
var port = location.port; |
|
|
|
// some user agents have empty `location.port` |
|
if (!port) { |
|
port = isSSL ? 443 : 80; |
|
} |
|
|
|
xd = opts.hostname !== location.hostname || port !== opts.port; |
|
xs = opts.secure !== isSSL; |
|
} |
|
|
|
opts.xdomain = xd; |
|
opts.xscheme = xs; |
|
xhr = new XMLHttpRequest(opts); |
|
|
|
if ('open' in xhr && !opts.forceJSONP) { |
|
return new XHR(opts); |
|
} else { |
|
if (!jsonp) throw new Error('JSONP disabled'); |
|
return new JSONP(opts); |
|
} |
|
}
|
|
|