This commit is contained in:
Jeremy Latt 2014-03-27 18:58:12 -07:00
parent 2dc69c7e3d
commit 3b12dec207
2 changed files with 11 additions and 17 deletions

View File

@ -60,19 +60,9 @@ func NewClient(server *Server, conn net.Conn) *Client {
// command goroutine
//
func (client *Client) send(command Command) {
command.SetClient(client)
client.server.commands <- command
}
func (client *Client) run() {
client.send(&ProxyCommand{
hostname: AddrLookupHostname(client.socket.conn.RemoteAddr()),
})
for command := range client.commands {
checkPass, ok := command.(checkPasswordCommand)
if ok {
if checkPass, ok := command.(checkPasswordCommand); ok {
checkPass.LoadPassword(client.server)
// Block the client thread while handling a potentially expensive
// password bcrypt operation. Since the server is single-threaded
@ -81,13 +71,9 @@ func (client *Client) run() {
// completes. This could be a form of DoS if handled naively.
checkPass.CheckPassword()
}
client.send(command)
command.SetClient(client)
client.server.commands <- command
}
client.send(&QuitCommand{
message: "connection closed",
})
}
func (client *Client) connectionTimeout() {

View File

@ -38,6 +38,10 @@ func (socket *Socket) Close() {
}
func (socket *Socket) readLines(commands chan<- Command) {
commands <- &ProxyCommand{
hostname: AddrLookupHostname(socket.conn.RemoteAddr()),
}
scanner := bufio.NewScanner(socket.conn)
for scanner.Scan() {
line := scanner.Text()
@ -58,6 +62,10 @@ func (socket *Socket) readLines(commands chan<- Command) {
Log.debug.Printf("%s error: %s", socket, err)
}
commands <- &QuitCommand{
message: "connection closed",
}
close(commands)
}