@@ -5,6 +5,8 @@ var tls = require('tls');
5
5
6
6
var config = require ( './config' ) ;
7
7
8
+ config . reconnectTime = config . reconnectTime || 15 * 1000 ;
9
+
8
10
var opts = {
9
11
key : fs . readFileSync ( config . key ) ,
10
12
cert : fs . readFileSync ( config . cert ) ,
@@ -23,7 +25,7 @@ switch (config.module) {
23
25
var io = require ( 'socket.io' ) . listen ( server ) ;
24
26
io . set ( 'log level' , 1 ) ;
25
27
io . sockets . on ( 'connection' , function ( client ) {
26
- ws_client_connect ( client , client . handshake . address . address ) ;
28
+ can_connect ( client , client . handshake . address . address ) ;
27
29
} ) ;
28
30
break ;
29
31
case 'ws' :
@@ -35,12 +37,38 @@ switch (config.module) {
35
37
return true ;
36
38
} ,
37
39
} ) . on ( 'connection' , function ( client ) {
38
- ws_client_connect ( client , client . _socket . remoteAddress ) ;
40
+ can_connect ( client , client . _socket . remoteAddress ) ;
39
41
} ) ;
40
42
break ;
41
43
}
42
44
45
+ var last_connect = { } ;
46
+
47
+ setInterval ( function ( ) {
48
+ var k , now = Date . now ( ) , maxAge = 5 * config . reconnectTime ;
49
+ for ( k in last_connect ) {
50
+ if ( ( now - last_connect [ k ] ) > maxAge ) {
51
+ delete last_connect [ k ] ;
52
+ }
53
+ }
54
+ } , 5 * config . reconnectTime ) ;
55
+
56
+ function can_connect ( client , ip ) {
57
+ var time = last_connect [ ip ] ;
58
+ if ( time !== undefined && ( Date . now ( ) - time ) < config . reconnectTime ) {
59
+ console . log ( 'client connecting too fast' , ip , time , Date . now ( ) ) ;
60
+ client . send ( 'ERROR :Trying to reconnect too fast.\r\n' ) ;
61
+ if ( client . close )
62
+ client . close ( ) ;
63
+ else
64
+ client . disconnect ( ) ;
65
+ } else {
66
+ ws_client_connect ( client , ip ) ;
67
+ }
68
+ }
69
+
43
70
function ws_client_connect ( client , ip ) {
71
+ last_connect [ ip ] = Date . now ( ) ;
44
72
console . log ( 'client connected' , ip ) ;
45
73
dns . reverse ( ip , function ( err , domains ) {
46
74
if ( err ) {
@@ -89,7 +117,6 @@ function ws_client_resolved(client, ip, host) {
89
117
} ) ;
90
118
91
119
client . on ( 'message' , function ( msg ) {
92
- console . log ( 'writing' , ip , remote . writable ) ;
93
120
if ( ! webirc ) {
94
121
webirc = true ;
95
122
// WEBIRC <password> <user> <host> <ip>
@@ -108,7 +135,7 @@ function ws_client_resolved(client, ip, host) {
108
135
} ) ;
109
136
110
137
client . on ( 'disconnect' , function ( ) {
111
- console . log ( 'client hungip ' , ip ) ;
138
+ console . log ( 'client hungup ' , ip ) ;
112
139
remote . end ( ) ;
113
140
} ) ;
114
141
}
0 commit comments