Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / ws / bin / wscat
1 #!/usr/bin/env node
2
3 /*!
4  * ws: a node.js websocket client
5  * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
6  * MIT Licensed
7  */
8
9 /**
10  * Module dependencies.
11  */
12
13 var WebSocket = require('../')
14   , fs = require('fs')
15   , program = require('commander')
16   , util = require('util')
17   , events = require('events')
18   , readline = require('readline');
19
20 /**
21  * InputReader - processes console input
22  */
23
24 function Console() {
25   this.stdin = process.stdin;
26   this.stdout = process.stdout;
27
28   this.readlineInterface = readline.createInterface(this.stdin, this.stdout);
29
30   var self = this;
31   this.readlineInterface.on('line', function(data) {
32     self.emit('line', data);
33   });
34   this.readlineInterface.on('close', function() {
35     self.emit('close');
36   });
37
38   this._resetInput = function() {
39     self.clear();
40   }
41 }
42 util.inherits(Console, events.EventEmitter);
43
44 Console.Colors = {
45   Red: '\033[31m',
46   Green: '\033[32m',
47   Yellow: '\033[33m',
48   Blue: '\033[34m',
49   Default: '\033[39m'
50 };
51
52 Console.prototype.prompt = function() {
53   this.readlineInterface.prompt();
54 }
55
56 Console.prototype.print = function(msg, color) {
57   this.clear();
58   color = color || Console.Colors.Default;
59   this.stdout.write(color + msg + Console.Colors.Default + '\n');
60   this.prompt();
61 }
62
63 Console.prototype.clear = function() {
64   this.stdout.write('\033[2K\033[E');
65 }
66
67 Console.prototype.pause = function() {
68   this.stdin.on('keypress', this._resetInput);
69 }
70
71 Console.prototype.resume = function() {
72   this.stdin.removeListener('keypress', this._resetInput);
73 }
74
75 function appender(xs) {
76   xs = xs || [];
77   return function (x) {
78     xs.push(x);
79     return xs;
80   }
81 }
82
83 function into(obj, kvals) {
84   kvals.forEach(function (kv) {
85     obj[kv[0]] = kv[1];
86   });
87   return obj;
88 }
89
90 function splitOnce(sep, str) { // sep can be either String or RegExp
91   var tokens = str.split(sep);
92   return [tokens[0], str.replace(sep, '').substr(tokens[0].length)];
93 }
94
95 /**
96  * The actual application
97  */
98
99 var version = JSON.parse(fs.readFileSync(__dirname + '/../package.json', 'utf8')).version;
100 program
101   .version(version)
102   .usage('[options] <url>')
103   .option('-l, --listen <port>', 'listen on port')
104   .option('-c, --connect <url>', 'connect to a websocket server')
105   .option('-p, --protocol <version>', 'optional protocol version')
106   .option('-o, --origin <origin>', 'optional origin')
107   .option('--host <host>', 'optional host')
108   .option('-s, --subprotocol <protocol>', 'optional subprotocol')
109   .option('-n, --no-check', 'Do not check for unauthorized certificates')
110   .option('-H, --header <header:value>', 'Set an HTTP header. Repeat to set multiple. (--connect only)', appender(), [])
111   .option('--auth <username:password>', 'Add basic HTTP authentication header. (--connect only)')
112   .parse(process.argv);
113
114 if (program.listen && program.connect) {
115   console.error('\033[33merror: use either --listen or --connect\033[39m');
116   process.exit(-1);
117 }
118 else if (program.listen) {
119   var wsConsole = new Console();
120   wsConsole.pause();
121   var options = {};
122   if (program.protocol) options.protocolVersion = program.protocol;
123   if (program.origin) options.origin = program.origin;
124   if (program.subprotocol) options.protocol = program.subprotocol;
125   if (!program.check) options.rejectUnauthorized = program.check;
126   var ws = null;
127   var wss = new WebSocket.Server({port: program.listen}, function() {
128     wsConsole.print('listening on port ' + program.listen + ' (press CTRL+C to quit)', Console.Colors.Green);
129     wsConsole.clear();
130   });
131   wsConsole.on('close', function() {
132     if (ws) {
133       try {
134         ws.close();
135       }
136       catch (e) {}
137     }
138     process.exit(0);
139   });
140   wsConsole.on('line', function(data) {
141     if (ws) {
142       ws.send(data, {mask: false});
143       wsConsole.prompt();
144     }
145   });
146   wss.on('connection', function(newClient) {
147     if (ws) {
148       // limit to one client
149       newClient.terminate();
150       return;
151     };
152     ws = newClient;
153     wsConsole.resume();
154     wsConsole.prompt();
155     wsConsole.print('client connected', Console.Colors.Green);
156     ws.on('close', function() {
157       wsConsole.print('disconnected', Console.Colors.Green);
158       wsConsole.clear();
159       wsConsole.pause();
160       ws = null;
161     });
162     ws.on('error', function(code, description) {
163       wsConsole.print('error: ' + code + (description ? ' ' + description : ''), Console.Colors.Yellow);
164     });
165     ws.on('message', function(data, flags) {
166       wsConsole.print('< ' + data, Console.Colors.Blue);
167     });
168   });
169   wss.on('error', function(error) {
170     wsConsole.print('error: ' + error.toString(), Console.Colors.Yellow);
171     process.exit(-1);
172   });
173 }
174 else if (program.connect) {
175   var wsConsole = new Console();
176   var options = {};
177   if (program.protocol) options.protocolVersion = program.protocol;
178   if (program.origin) options.origin = program.origin;
179   if (program.subprotocol) options.protocol = program.subprotocol;
180   if (program.host) options.host = program.host;
181   if (!program.check) options.rejectUnauthorized = program.check;
182   var headers = into({}, (program.header || []).map(function (s) {
183                                                       return splitOnce(':', s)
184                                                     }));
185   if (program.auth) {
186     headers['Authorization'] = 'Basic ' + new Buffer(program.auth).toString('base64');
187   }
188   options.headers = headers;
189   var ws = new WebSocket(program.connect, options);
190   ws.on('open', function() {
191     wsConsole.print('connected (press CTRL+C to quit)', Console.Colors.Green);
192     wsConsole.on('line', function(data) {
193       ws.send(data, {mask: true});
194       wsConsole.prompt();
195     });
196   });
197   ws.on('close', function() {
198     wsConsole.print('disconnected', Console.Colors.Green);
199     wsConsole.clear();
200     process.exit();
201   });
202   ws.on('error', function(code, description) {
203     wsConsole.print('error: ' + code + (description ? ' ' + description : ''), Console.Colors.Yellow);
204     process.exit(-1);
205   });
206   ws.on('message', function(data, flags) {
207     wsConsole.print('< ' + data, Console.Colors.Blue);
208   });
209   wsConsole.on('close', function() {
210     if (ws) {
211       try {
212         ws.close();
213       }
214       catch(e) {}
215       process.exit();
216     }
217   });
218 }
219 else {
220   console.error('\033[33merror: use either --listen or --connect\033[39m');
221   process.exit(-1);
222 }