| 'use strict'; | 
|   | 
| var EventEmitter = require('events').EventEmitter | 
|   , inherits = require('inherits') | 
|   , http = require('http') | 
|   , https = require('https') | 
|   , URL = require('url-parse') | 
|   ; | 
|   | 
| var debug = function() {}; | 
| if (process.env.NODE_ENV !== 'production') { | 
|   debug = require('debug')('sockjs-client:driver:xhr'); | 
| } | 
|   | 
| function XhrDriver(method, url, payload, opts) { | 
|   debug(method, url, payload); | 
|   var self = this; | 
|   EventEmitter.call(this); | 
|   | 
|   var parsedUrl = new URL(url); | 
|   var options = { | 
|     method: method | 
|   , hostname: parsedUrl.hostname.replace(/\[|\]/g, '') | 
|   , port: parsedUrl.port | 
|   , path: parsedUrl.pathname + (parsedUrl.query || '') | 
|   , headers: opts && opts.headers | 
|   }; | 
|   | 
|   var protocol = parsedUrl.protocol === 'https:' ? https : http; | 
|   this.req = protocol.request(options, function(res) { | 
|     res.setEncoding('utf8'); | 
|     var responseText = ''; | 
|   | 
|     res.on('data', function(chunk) { | 
|       debug('data', chunk); | 
|       responseText += chunk; | 
|       self.emit('chunk', 200, responseText); | 
|     }); | 
|     res.once('end', function() { | 
|       debug('end'); | 
|       self.emit('finish', res.statusCode, responseText); | 
|       self.req = null; | 
|     }); | 
|   }); | 
|   | 
|   this.req.on('error', function(e) { | 
|     debug('error', e); | 
|     self.emit('finish', 0, e.message); | 
|   }); | 
|   | 
|   if (payload) { | 
|     this.req.write(payload); | 
|   } | 
|   this.req.end(); | 
| } | 
|   | 
| inherits(XhrDriver, EventEmitter); | 
|   | 
| XhrDriver.prototype.close = function() { | 
|   debug('close'); | 
|   this.removeAllListeners(); | 
|   if (this.req) { | 
|     this.req.abort(); | 
|     this.req = null; | 
|   } | 
| }; | 
|   | 
| XhrDriver.enabled = true; | 
| XhrDriver.supportsCORS = true; | 
|   | 
| module.exports = XhrDriver; |