| |
| /** |
| * Module dependencies. |
| */ |
| |
| var Polling = require('./polling'); |
| var util = require('util'); |
| |
| /** |
| * Module exports. |
| */ |
| |
| module.exports = XHR; |
| |
| /** |
| * Ajax polling transport. |
| * |
| * @api public |
| */ |
| |
| function XHR (req) { |
| Polling.call(this, req); |
| } |
| |
| /** |
| * Inherits from Polling. |
| */ |
| |
| util.inherits(XHR, Polling); |
| |
| /** |
| * Overrides `onRequest` to handle `OPTIONS`.. |
| * |
| * @param {http.IncomingMessage} |
| * @api private |
| */ |
| |
| XHR.prototype.onRequest = function (req) { |
| if ('OPTIONS' === req.method) { |
| var res = req.res; |
| var headers = this.headers(req); |
| headers['Access-Control-Allow-Headers'] = 'Content-Type'; |
| res.writeHead(200, headers); |
| res.end(); |
| } else { |
| Polling.prototype.onRequest.call(this, req); |
| } |
| }; |
| |
| /** |
| * Returns headers for a response. |
| * |
| * @param {http.IncomingMessage} request |
| * @param {Object} extra headers |
| * @api private |
| */ |
| |
| XHR.prototype.headers = function (req, headers) { |
| headers = headers || {}; |
| |
| if (req.headers.origin) { |
| headers['Access-Control-Allow-Credentials'] = 'true'; |
| headers['Access-Control-Allow-Origin'] = req.headers.origin; |
| } else { |
| headers['Access-Control-Allow-Origin'] = '*'; |
| } |
| |
| return Polling.prototype.headers.call(this, req, headers); |
| }; |