tls-autodetect: mark issues, fix initialization
This commit is contained in:
parent
e8602ee718
commit
b2cd8b46c9
@ -16,14 +16,14 @@
|
|||||||
//
|
//
|
||||||
// This is an example TLS-autodetecting chat server.
|
// This is an example TLS-autodetecting chat server.
|
||||||
//
|
//
|
||||||
// You may connect to it using either of these:
|
// These clients are unable to properly shutdown the connection on their exit:
|
||||||
// ncat -C localhost 1234
|
|
||||||
// ncat -C --ssl localhost 1234
|
|
||||||
//
|
|
||||||
// These clients are unable to properly shutdown the connection:
|
|
||||||
// telnet localhost 1234
|
// telnet localhost 1234
|
||||||
// openssl s_client -connect localhost:1234
|
// openssl s_client -connect localhost:1234
|
||||||
//
|
//
|
||||||
|
// While this one doesn't react to an EOF from the server:
|
||||||
|
// ncat -C localhost 1234
|
||||||
|
// ncat -C --ssl localhost 1234
|
||||||
|
//
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -165,7 +165,7 @@ func forceShutdown(reason string) {
|
|||||||
// --- Client ------------------------------------------------------------------
|
// --- Client ------------------------------------------------------------------
|
||||||
|
|
||||||
func (c *client) send(line string) {
|
func (c *client) send(line string) {
|
||||||
if !c.closing {
|
if c.conn != nil && !c.closing {
|
||||||
c.outQ = append(c.outQ, (line + "\r\n")...)
|
c.outQ = append(c.outQ, (line + "\r\n")...)
|
||||||
c.flushOutQ()
|
c.flushOutQ()
|
||||||
}
|
}
|
||||||
@ -205,6 +205,7 @@ func (c *client) destroy() {
|
|||||||
c.killTimer.Stop()
|
c.killTimer.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Println("client destroyed")
|
||||||
delete(clients, c)
|
delete(clients, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -341,6 +342,8 @@ func prepare(client *client) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note that in this demo application the autodetection prevents non-TLS
|
||||||
|
// clients from receiving any messages until they send something.
|
||||||
isTLS := false
|
isTLS := false
|
||||||
if sysconn, err := conn.(syscall.Conn).SyscallConn(); err != nil {
|
if sysconn, err := conn.(syscall.Conn).SyscallConn(); err != nil {
|
||||||
// This is just for the TLS detection and doesn't need to be fatal.
|
// This is just for the TLS detection and doesn't need to be fatal.
|
||||||
@ -349,6 +352,7 @@ func prepare(client *client) {
|
|||||||
isTLS = detectTLS(sysconn)
|
isTLS = detectTLS(sysconn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: When the client sends no data, we still initialize its conn.
|
||||||
prepared <- preparedEvent{client, host, isTLS}
|
prepared <- preparedEvent{client, host, isTLS}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user