annotate node_modules/socket.io/lib/transports/http.js @ 75:3a2845e3156e

added martin tweaks
author Rob Canning <rc@kiben.net>
date Tue, 01 Jul 2014 08:51:53 +0000
parents 333afcfd3f3a
children
rev   line source
rc-web@69 1
rc-web@69 2 /*!
rc-web@69 3 * socket.io-node
rc-web@69 4 * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
rc-web@69 5 * MIT Licensed
rc-web@69 6 */
rc-web@69 7
rc-web@69 8 /**
rc-web@69 9 * Module requirements.
rc-web@69 10 */
rc-web@69 11
rc-web@69 12 var Transport = require('../transport')
rc-web@69 13 , parser = require('../parser')
rc-web@69 14 , qs = require('querystring');
rc-web@69 15
rc-web@69 16 /**
rc-web@69 17 * Export the constructor.
rc-web@69 18 */
rc-web@69 19
rc-web@69 20 exports = module.exports = HTTPTransport;
rc-web@69 21
rc-web@69 22 /**
rc-web@69 23 * HTTP interface constructor. For all non-websocket transports.
rc-web@69 24 *
rc-web@69 25 * @api public
rc-web@69 26 */
rc-web@69 27
rc-web@69 28 function HTTPTransport (mng, data, req) {
rc-web@69 29 Transport.call(this, mng, data, req);
rc-web@69 30 };
rc-web@69 31
rc-web@69 32 /**
rc-web@69 33 * Inherits from Transport.
rc-web@69 34 */
rc-web@69 35
rc-web@69 36 HTTPTransport.prototype.__proto__ = Transport.prototype;
rc-web@69 37
rc-web@69 38 /**
rc-web@69 39 * Handles a request.
rc-web@69 40 *
rc-web@69 41 * @api private
rc-web@69 42 */
rc-web@69 43
rc-web@69 44 HTTPTransport.prototype.handleRequest = function (req) {
rc-web@69 45
rc-web@69 46 // Always set the response in case an error is returned to the client
rc-web@69 47 this.response = req.res;
rc-web@69 48
rc-web@69 49 if (req.method == 'POST') {
rc-web@69 50 var buffer = ''
rc-web@69 51 , res = req.res
rc-web@69 52 , origin = req.headers.origin
rc-web@69 53 , headers = { 'Content-Length': 1, 'Content-Type': 'text/plain; charset=UTF-8' }
rc-web@69 54 , self = this;
rc-web@69 55
rc-web@69 56 req.on('data', function (data) {
rc-web@69 57 buffer += data;
rc-web@69 58
rc-web@69 59 if (Buffer.byteLength(buffer) >= self.manager.get('destroy buffer size')) {
rc-web@69 60 buffer = '';
rc-web@69 61 req.connection.destroy();
rc-web@69 62 }
rc-web@69 63 });
rc-web@69 64
rc-web@69 65 req.on('end', function () {
rc-web@69 66 res.writeHead(200, headers);
rc-web@69 67 res.end('1');
rc-web@69 68
rc-web@69 69 self.onData(self.postEncoded ? qs.parse(buffer).d : buffer);
rc-web@69 70 });
rc-web@69 71
rc-web@69 72 // prevent memory leaks for uncompleted requests
rc-web@69 73 req.on('close', function () {
rc-web@69 74 buffer = '';
rc-web@69 75 self.onClose();
rc-web@69 76 });
rc-web@69 77
rc-web@69 78 if (origin) {
rc-web@69 79 // https://developer.mozilla.org/En/HTTP_Access_Control
rc-web@69 80 headers['Access-Control-Allow-Origin'] = origin;
rc-web@69 81 headers['Access-Control-Allow-Credentials'] = 'true';
rc-web@69 82 }
rc-web@69 83 } else {
rc-web@69 84 Transport.prototype.handleRequest.call(this, req);
rc-web@69 85 }
rc-web@69 86 };
rc-web@69 87
rc-web@69 88 /**
rc-web@69 89 * Handles data payload.
rc-web@69 90 *
rc-web@69 91 * @api private
rc-web@69 92 */
rc-web@69 93
rc-web@69 94 HTTPTransport.prototype.onData = function (data) {
rc-web@69 95 var messages = parser.decodePayload(data);
rc-web@69 96 this.log.debug(this.name + ' received data packet', data);
rc-web@69 97
rc-web@69 98 for (var i = 0, l = messages.length; i < l; i++) {
rc-web@69 99 this.onMessage(messages[i]);
rc-web@69 100 }
rc-web@69 101 };
rc-web@69 102
rc-web@69 103 /**
rc-web@69 104 * Closes the request-response cycle
rc-web@69 105 *
rc-web@69 106 * @api private
rc-web@69 107 */
rc-web@69 108
rc-web@69 109 HTTPTransport.prototype.doClose = function () {
rc-web@69 110 this.response.end();
rc-web@69 111 };
rc-web@69 112
rc-web@69 113 /**
rc-web@69 114 * Writes a payload of messages
rc-web@69 115 *
rc-web@69 116 * @api private
rc-web@69 117 */
rc-web@69 118
rc-web@69 119 HTTPTransport.prototype.payload = function (msgs) {
rc-web@69 120 this.write(parser.encodePayload(msgs));
rc-web@69 121 };