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