tls-autodetect: mark issues, fix initialization
This commit is contained in:
		@@ -16,14 +16,14 @@
 | 
			
		||||
//
 | 
			
		||||
// This is an example TLS-autodetecting chat server.
 | 
			
		||||
//
 | 
			
		||||
// You may connect to it using either of these:
 | 
			
		||||
//  ncat -C localhost 1234
 | 
			
		||||
//  ncat -C --ssl localhost 1234
 | 
			
		||||
//
 | 
			
		||||
// These clients are unable to properly shutdown the connection:
 | 
			
		||||
// These clients are unable to properly shutdown the connection on their exit:
 | 
			
		||||
//  telnet 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
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
@@ -165,7 +165,7 @@ func forceShutdown(reason string) {
 | 
			
		||||
// --- Client ------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
func (c *client) send(line string) {
 | 
			
		||||
	if !c.closing {
 | 
			
		||||
	if c.conn != nil && !c.closing {
 | 
			
		||||
		c.outQ = append(c.outQ, (line + "\r\n")...)
 | 
			
		||||
		c.flushOutQ()
 | 
			
		||||
	}
 | 
			
		||||
@@ -205,6 +205,7 @@ func (c *client) destroy() {
 | 
			
		||||
		c.killTimer.Stop()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Println("client destroyed")
 | 
			
		||||
	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
 | 
			
		||||
	if sysconn, err := conn.(syscall.Conn).SyscallConn(); err != nil {
 | 
			
		||||
		// 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)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// FIXME: When the client sends no data, we still initialize its conn.
 | 
			
		||||
	prepared <- preparedEvent{client, host, isTLS}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user