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