-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSecureWebSocketServer.js
More file actions
75 lines (58 loc) · 1.83 KB
/
SecureWebSocketServer.js
File metadata and controls
75 lines (58 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// SecureWebSocket Server implementation with NACL
// Copyright (c) 2014 Tom Zhou<appnet.link@gmail.com>
var util = require('util');
var events = require('events');
var WebSocketServer = require('ws').Server;
var SecureWebSocket = require('./sws').SecureWebSocket;
var SecureWebSocketServer = module.exports = function(options, callback, secinfo) {
if (!(this instanceof SecureWebSocketServer))
return new SecureWebSocketServer(options, callback, secinfo);
// check parameters
if (options &&
callback && (typeof callback === 'function') &&
secinfo && (typeof secinfo === 'object')) {
} else if (options &&
callback && (typeof callback === 'object')) {
secinfo = callback;
callback = null;
} else {
throw new Error('Invalid SecureWebSocketServer arguments:'+arguments);
}
events.EventEmitter.call(this);
var self = this;
// setup security info
self.mySecInfo = secinfo;
self.wss = new WebSocketServer(options, callback);
// wrap SecureWebSocket
self.wss.on('connection', function(ws){
var sws = new SecureWebSocket(ws, self.mySecInfo);
sws.on('open', function(){
self.emit('connection', sws);
});
});
}
util.inherits(SecureWebSocketServer, events.EventEmitter);
SecureWebSocketServer.prototype.close = function() {
this.wss.close();
}
SecureWebSocketServer.prototype.on = function(event, fn) {
if (event === 'connection')
this.addListener(event, fn);
else
this.wss.addListener(event, fn);
}
SecureWebSocketServer.prototype.once = function(event, fn) {
var self = this;
var selftemp = function() {
fn.apply(self, arguments);
self.removeListener(event, selftemp);
};
var wsstemp = function() {
fn.apply(self.wss, arguments);
self.wss.removeListener(event, wsstemp);
};
if (event === 'connection')
self.addListener(event, selftemp);
else
self.wss.addListener(event, wsstemp);
}