tls-autodetect: mark issues, fix initialization
This commit is contained in:
		@@ -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}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user