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