@@ -5,16 +5,18 @@ import (
5
5
"crypto/md5"
6
6
"encoding/json"
7
7
"fmt"
8
+ "io"
8
9
"log"
9
10
"net"
10
11
"net/http"
11
12
"strings"
13
+ "sync"
12
14
"time"
13
15
)
14
16
15
17
const (
16
- NetDeadline = time .Second * 2
17
- DialTimeout = time .Second * 2
18
+ NetDeadline = time .Second * 5
19
+ DialTimeout = time .Second * 5
18
20
ProxyBind = ""
19
21
)
20
22
@@ -181,7 +183,7 @@ func handleLoginRequest(clientConn net.Conn, handshake ServerBoundHandshake, use
181
183
return
182
184
}
183
185
184
- log .Printf ("User %s connected to %s. Username %s -> %s\n " , userInfo .TgName , cfg .BaseDomain , passedUsername , userInfo .Nickname )
186
+ log .Printf ("User %s connected to %s from %s. Nickname %s -> %s\n " , userInfo .TgName , cfg .BaseDomain , clientConn . RemoteAddr (). String () , passedUsername , userInfo .Nickname )
185
187
186
188
ProxyConnection (clientConn , cfg .MinecraftServer , peekedData )
187
189
}
@@ -269,6 +271,12 @@ func NameUUIDFromBytes(name []byte) McUUID {
269
271
270
272
///////////////////////////////////////////////////////////////////////////////
271
273
274
+ var bufferPool = sync.Pool {
275
+ New : func () interface {} {
276
+ return make ([]byte , 32 * 1024 )
277
+ },
278
+ }
279
+
272
280
func ProxyConnection (clientConn net.Conn , serverAddr string , peekedData []byte ) (err error ) {
273
281
dialer := net.Dialer {
274
282
Timeout : DialTimeout ,
@@ -282,31 +290,27 @@ func ProxyConnection(clientConn net.Conn, serverAddr string, peekedData []byte)
282
290
return err
283
291
}
284
292
285
- serverConn .Write (peekedData )
293
+ _ , err = serverConn .Write (peekedData )
294
+ if err != nil {
295
+ log .Printf ("Error writing to server connection: %v\n " , err )
296
+ clientConn .Close ()
297
+ serverConn .Close ()
298
+ return err
299
+ }
286
300
287
301
go func () {
288
- pipe (serverConn , clientConn )
302
+ buffer := bufferPool .Get ().([]byte )
303
+ defer bufferPool .Put (buffer )
304
+ io .CopyBuffer (serverConn , clientConn , buffer )
289
305
clientConn .Close ()
290
306
}()
291
307
292
308
go func () {
293
- pipe (clientConn , serverConn )
309
+ buffer := bufferPool .Get ().([]byte )
310
+ defer bufferPool .Put (buffer )
311
+ io .CopyBuffer (clientConn , serverConn , buffer )
294
312
serverConn .Close ()
295
313
}()
296
314
297
315
return nil
298
316
}
299
-
300
- func pipe (c1 , c2 net.Conn ) {
301
- buffer := make ([]byte , 0xffff )
302
- for {
303
- n , err := c1 .Read (buffer )
304
- if err != nil {
305
- return
306
- }
307
- _ , err = c2 .Write (buffer [:n ])
308
- if err != nil {
309
- return
310
- }
311
- }
312
- }
0 commit comments