| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | package tlsimport (	"crypto/tls"	"v2ray.com/core/common/buf"	"v2ray.com/core/common/net")//go:generate go run $GOPATH/src/v2ray.com/core/common/errors/errorgen/main.go -pkg tls -path Transport,Internet,TLSvar (	_ buf.Writer = (*conn)(nil))type conn struct {	*tls.Conn	mergingWriter *buf.BufferedWriter}func (c *conn) WriteMultiBuffer(mb buf.MultiBuffer) error {	if c.mergingWriter == nil {		c.mergingWriter = buf.NewBufferedWriter(buf.NewWriter(c.Conn))	}	if err := c.mergingWriter.WriteMultiBuffer(mb); err != nil {		return err	}	return c.mergingWriter.Flush()}func (c *conn) HandshakeAddress() net.Address {	if err := c.Handshake(); err != nil {		return nil	}	state := c.Conn.ConnectionState()	if len(state.ServerName) == 0 {		return nil	}	return net.ParseAddress(state.ServerName)}// Client initiates a TLS client handshake on the given connection.func Client(c net.Conn, config *tls.Config) net.Conn {	tlsConn := tls.Client(c, config)	return &conn{Conn: tlsConn}}// Server initiates a TLS server handshake on the given connection.func Server(c net.Conn, config *tls.Config) net.Conn {	tlsConn := tls.Server(c, config)	return &conn{Conn: tlsConn}}
 |