diff --git a/prototypes/tls-autodetect.go b/prototypes/tls-autodetect.go index a5642d6..0427465 100644 --- a/prototypes/tls-autodetect.go +++ b/prototypes/tls-autodetect.go @@ -61,7 +61,7 @@ func detectTLS(sysconn syscall.RawConn) (isTLS bool) { isTLS = buf[0]&0x80 != 0 && buf[2] == 1 fallthrough case n == 2: - isTLS = buf[0] == 22 && buf[1] == 3 + isTLS = isTLS || buf[0] == 22 && buf[1] == 3 case n == 1: isTLS = buf[0] == 22 case err == syscall.EAGAIN: @@ -74,21 +74,21 @@ func detectTLS(sysconn syscall.RawConn) (isTLS bool) { // --- Declarations ------------------------------------------------------------ -type connCloseWrite interface { +type connCloseWriter interface { net.Conn CloseWrite() error } type client struct { - transport net.Conn // underlying connection - tls *tls.Conn // TLS, if detected - conn connCloseWrite // high-level connection - inQ []byte // unprocessed input - outQ []byte // unprocessed output - reading bool // whether a reading goroutine is running - writing bool // whether a writing goroutine is running - closing bool // whether we're closing the connection - killTimer *time.Timer // timeout + transport net.Conn // underlying connection + tls *tls.Conn // TLS, if detected + conn connCloseWriter // high-level connection + inQ []byte // unprocessed input + outQ []byte // unprocessed output + reading bool // whether a reading goroutine is running + writing bool // whether a writing goroutine is running + closing bool // whether we're closing the connection + killTimer *time.Timer // timeout } type preparedEvent struct { @@ -210,15 +210,14 @@ func (c *client) destroy() { } // Handle the results from initializing the client's connection. -func (c *client) onPrepared(host string, isTLS bool) { +func (c *client) onPrepared(isTLS bool) { if isTLS { c.tls = tls.Server(c.transport, tlsConf) c.conn = c.tls } else { - c.conn = c.transport.(connCloseWrite) + c.conn = c.transport.(connCloseWriter) } - // TODO: Save the host in the client structure. // TODO: If we've tried to send any data before now, we need to flushOutQ. go read(c) c.reading = true @@ -399,9 +398,9 @@ func processOneEvent() { go prepare(c) case ev := <-prepared: - log.Println("client is ready:", ev.host) + log.Println("client is ready, resolved to", ev.host) if _, ok := clients[ev.client]; ok { - ev.client.onPrepared(ev.host, ev.isTLS) + ev.client.onPrepared(ev.isTLS) } case ev := <-reads: