/** | |
* 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); | |
} | |
} | |