|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package socks |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"bufio" |
|
|
|
|
"errors" |
|
|
|
|
"net" |
|
|
|
|
"strconv" |
|
|
|
@ -60,8 +61,10 @@ func (server *SocksServer) AcceptConnections(listener net.Listener) error {
|
|
|
|
|
|
|
|
|
|
func (server *SocksServer) HandleConnection(connection net.Conn) error { |
|
|
|
|
defer connection.Close() |
|
|
|
|
|
|
|
|
|
reader := bufio.NewReader(connection) |
|
|
|
|
|
|
|
|
|
auth, err := socksio.ReadAuthentication(connection) |
|
|
|
|
auth, err := socksio.ReadAuthentication(reader) |
|
|
|
|
if err != nil { |
|
|
|
|
log.Error("Error on reading authentication: %v", err) |
|
|
|
|
return err |
|
|
|
@ -83,7 +86,7 @@ func (server *SocksServer) HandleConnection(connection net.Conn) error {
|
|
|
|
|
authResponse := socksio.NewAuthenticationResponse(socksio.AuthNotRequired) |
|
|
|
|
socksio.WriteAuthentication(connection, authResponse) |
|
|
|
|
|
|
|
|
|
request, err := socksio.ReadRequest(connection) |
|
|
|
|
request, err := socksio.ReadRequest(reader) |
|
|
|
|
if err != nil { |
|
|
|
|
log.Error("Error on reading socks request: %v", err) |
|
|
|
|
return err |
|
|
|
@ -118,7 +121,7 @@ func (server *SocksServer) HandleConnection(connection net.Conn) error {
|
|
|
|
|
readFinish := make(chan bool) |
|
|
|
|
writeFinish := make(chan bool) |
|
|
|
|
|
|
|
|
|
go server.dumpInput(connection, input, readFinish) |
|
|
|
|
go server.dumpInput(reader, input, readFinish) |
|
|
|
|
go server.dumpOutput(connection, output, writeFinish) |
|
|
|
|
<-writeFinish |
|
|
|
|
|
|
|
|
|