Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / socket.io-client / components / learnboost-socket.io-protocol / index.js
1
2 /**
3  * Module dependencies.
4  */
5
6 var json;
7
8 try {
9   json = require('json');
10 } catch(e){
11   json = JSON;
12 }
13
14 /**
15  * Protocol version.
16  *
17  * @api public
18  */
19
20 exports.protocol = 1;
21
22 /**
23  * Packet types.
24  *
25  * @api public
26  */
27
28 exports.types = [
29   'CONNECT',
30   'DISCONNECT',
31   'EVENT',
32   'ACK',
33   'ERROR'
34 ];
35
36 /**
37  * Packet type `connect`.
38  *
39  * @api public
40  */
41
42 exports.CONNECT = 0;
43
44 /**
45  * Packet type `disconnect`.
46  *
47  * @api public
48  */
49
50 exports.DISCONNECT = 1;
51
52 /**
53  * Packet type `event`.
54  *
55  * @api public
56  */
57
58 exports.EVENT = 2;
59
60 /**
61  * Packet type `ack`.
62  *
63  * @api public
64  */
65
66 exports.ACK = 3;
67
68 /**
69  * Packet type `error`.
70  *
71  * @api public
72  */
73
74 exports.ERROR = 4;
75
76 /**
77  * Encode.
78  *
79  * @param {Object} packet
80  * @return {String} encoded
81  * @api public
82  */
83
84 exports.encode = function(obj){
85   var str = '';
86   var nsp = false;
87
88   // first is type
89   str += obj.type;
90
91   // if we have a namespace other than `/`
92   // we append it followed by a comma `,`
93   if (obj.nsp && '/' != obj.nsp) {
94     nsp = true;
95     str += obj.nsp;
96   }
97
98   // immediately followed by the id
99   if (obj.id) {
100     if (nsp) {
101       str += ',';
102       nsp = false;
103     }
104     str += obj.id;
105   }
106
107   // json data
108   if (obj.data) {
109     if (nsp) str += ',';
110     str += json.stringify(obj.data);
111   }
112
113   return str;
114 };
115
116 /**
117  * Decode.
118  *
119  * @param {String} str
120  * @return {Object} packet
121  * @api public
122  */
123
124 exports.decode = function(str){
125   var p = {};
126   var i = 0;
127
128   // look up type
129   p.type = Number(str.charAt(0));
130   if (null == exports.types[p.type]) return error();
131
132   // look up namespace (if any)
133   if ('/' == str.charAt(i + 1)) {
134     p.nsp = '';
135     while (++i) {
136       var c = str.charAt(i);
137       if (',' == c) break;
138       p.nsp += c;
139       if (i + 1 == str.length) break;
140     }
141   } else {
142     p.nsp = '/';
143   }
144
145   // look up id
146   var next = str.charAt(i + 1);
147   if ('' != next && Number(next) == next) {
148     p.id = '';
149     while (++i) {
150       var c = str.charAt(i);
151       if (null == c || Number(c) != c) {
152         --i;
153         break;
154       }
155       p.id += str.charAt(i);
156       if (i + 1 == str.length) break;
157     }
158   }
159
160   // look up json data
161   if (str.charAt(++i)) {
162     try {
163       p.data = json.parse(str.substr(i));
164     } catch(e){
165       return error();
166     }
167   }
168
169   return p;
170 };
171
172 function error(data){
173   return {
174     type: exports.ERROR,
175     data: 'parser error'
176   };
177 }