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