| 'use strict'; | 
|   | 
| var inherits = require('inherits') | 
|   , urlUtils = require('../../utils/url') | 
|   , SenderReceiver = require('./sender-receiver') | 
|   ; | 
|   | 
| var debug = function() {}; | 
| if (process.env.NODE_ENV !== 'production') { | 
|   debug = require('debug')('sockjs-client:ajax-based'); | 
| } | 
|   | 
| function createAjaxSender(AjaxObject) { | 
|   return function(url, payload, callback) { | 
|     debug('create ajax sender', url, payload); | 
|     var opt = {}; | 
|     if (typeof payload === 'string') { | 
|       opt.headers = {'Content-type': 'text/plain'}; | 
|     } | 
|     var ajaxUrl = urlUtils.addPath(url, '/xhr_send'); | 
|     var xo = new AjaxObject('POST', ajaxUrl, payload, opt); | 
|     xo.once('finish', function(status) { | 
|       debug('finish', status); | 
|       xo = null; | 
|   | 
|       if (status !== 200 && status !== 204) { | 
|         return callback(new Error('http status ' + status)); | 
|       } | 
|       callback(); | 
|     }); | 
|     return function() { | 
|       debug('abort'); | 
|       xo.close(); | 
|       xo = null; | 
|   | 
|       var err = new Error('Aborted'); | 
|       err.code = 1000; | 
|       callback(err); | 
|     }; | 
|   }; | 
| } | 
|   | 
| function AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) { | 
|   SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject); | 
| } | 
|   | 
| inherits(AjaxBasedTransport, SenderReceiver); | 
|   | 
| module.exports = AjaxBasedTransport; |