mirror of
https://github.com/Hopiu/postal.js.git
synced 2026-03-20 16:00:29 +00:00
118 lines
2.2 KiB
JavaScript
118 lines
2.2 KiB
JavaScript
/*!
|
|
* socket.io-node
|
|
* Copyright(c) 2011 LearnBoost <dev@learnboost.com>
|
|
* MIT Licensed
|
|
*/
|
|
|
|
/**
|
|
* Module requirements.
|
|
*/
|
|
|
|
var Transport = require( '../transport' )
|
|
, parser = require( '../parser' )
|
|
, qs = require( 'querystring' );
|
|
|
|
/**
|
|
* Export the constructor.
|
|
*/
|
|
|
|
exports = module.exports = HTTPTransport;
|
|
|
|
/**
|
|
* HTTP interface constructor. For all non-websocket transports.
|
|
*
|
|
* @api public
|
|
*/
|
|
|
|
function HTTPTransport( mng, data, req ) {
|
|
Transport.call( this, mng, data, req );
|
|
}
|
|
;
|
|
|
|
/**
|
|
* Inherits from Transport.
|
|
*/
|
|
|
|
HTTPTransport.prototype.__proto__ = Transport.prototype;
|
|
|
|
/**
|
|
* Handles a request.
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
HTTPTransport.prototype.handleRequest = function ( req ) {
|
|
if ( req.method == 'POST' ) {
|
|
var buffer = ''
|
|
, res = req.res
|
|
, origin = req.headers.origin
|
|
, headers = { 'Content-Length' : 1, 'Content-Type' : 'text/plain; charset=UTF-8' }
|
|
, self = this;
|
|
|
|
req.on( 'data', function ( data ) {
|
|
buffer += data;
|
|
|
|
if ( Buffer.byteLength( buffer ) >= self.manager.get( 'destroy buffer size' ) ) {
|
|
buffer = '';
|
|
req.connection.destroy();
|
|
}
|
|
} );
|
|
|
|
req.on( 'end', function () {
|
|
res.writeHead( 200, headers );
|
|
res.end( '1' );
|
|
|
|
self.onData( self.postEncoded ? qs.parse( buffer ).d : buffer );
|
|
} );
|
|
|
|
// prevent memory leaks for uncompleted requests
|
|
req.on( 'close', function () {
|
|
buffer = '';
|
|
} );
|
|
|
|
if ( origin ) {
|
|
// https://developer.mozilla.org/En/HTTP_Access_Control
|
|
headers['Access-Control-Allow-Origin'] = origin;
|
|
headers['Access-Control-Allow-Credentials'] = 'true';
|
|
}
|
|
} else {
|
|
this.response = req.res;
|
|
|
|
Transport.prototype.handleRequest.call( this, req );
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Handles data payload.
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
HTTPTransport.prototype.onData = function ( data ) {
|
|
var messages = parser.decodePayload( data );
|
|
this.log.debug( this.name + ' received data packet', data );
|
|
|
|
for ( var i = 0, l = messages.length; i < l; i++ ) {
|
|
this.onMessage( messages[i] );
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Closes the request-response cycle
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
HTTPTransport.prototype.doClose = function () {
|
|
this.response.end();
|
|
};
|
|
|
|
/**
|
|
* Writes a payload of messages
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
HTTPTransport.prototype.payload = function ( msgs ) {
|
|
this.write( parser.encodePayload( msgs ) );
|
|
};
|