mirror of
https://github.com/golang/go
synced 2024-11-19 03:54:42 -07:00
net/smtp: add TLSConnectionState accessor
Fixes #9451 Change-Id: I0540e398b30c10779ac9d5a67a01d44bb6054a92 Reviewed-on: https://go-review.googlesource.com/2151 Reviewed-by: David Symonds <dsymonds@golang.org>
This commit is contained in:
parent
d4e48eeca1
commit
26d5573949
@ -157,6 +157,17 @@ func (c *Client) StartTLS(config *tls.Config) error {
|
|||||||
return c.ehlo()
|
return c.ehlo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TLSConnectionState returns the client's TLS connection state.
|
||||||
|
// The return values are their zero values if StartTLS did
|
||||||
|
// not succeed.
|
||||||
|
func (c *Client) TLSConnectionState() (state tls.ConnectionState, ok bool) {
|
||||||
|
tc, ok := c.conn.(*tls.Conn)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return tc.ConnectionState(), true
|
||||||
|
}
|
||||||
|
|
||||||
// Verify checks the validity of an email address on the server.
|
// Verify checks the validity of an email address on the server.
|
||||||
// If Verify returns nil, the address is valid. A non-nil return
|
// If Verify returns nil, the address is valid. A non-nil return
|
||||||
// does not necessarily indicate an invalid address. Many servers
|
// does not necessarily indicate an invalid address. Many servers
|
||||||
|
@ -571,6 +571,50 @@ func TestTLSClient(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTLSConnState(t *testing.T) {
|
||||||
|
ln := newLocalListener(t)
|
||||||
|
defer ln.Close()
|
||||||
|
clientDone := make(chan bool)
|
||||||
|
serverDone := make(chan bool)
|
||||||
|
go func() {
|
||||||
|
defer close(serverDone)
|
||||||
|
c, err := ln.Accept()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Server accept: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer c.Close()
|
||||||
|
if err := serverHandle(c, t); err != nil {
|
||||||
|
t.Errorf("server error: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
go func() {
|
||||||
|
defer close(clientDone)
|
||||||
|
c, err := Dial(ln.Addr().String())
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Client dial: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer c.Quit()
|
||||||
|
cfg := &tls.Config{ServerName: "example.com"}
|
||||||
|
testHookStartTLS(cfg) // set the RootCAs
|
||||||
|
if err := c.StartTLS(cfg); err != nil {
|
||||||
|
t.Errorf("StartTLS: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cs, ok := c.TLSConnectionState()
|
||||||
|
if !ok {
|
||||||
|
t.Errorf("TLSConnectionState returned ok == false; want true")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if cs.Version == 0 || !cs.HandshakeComplete {
|
||||||
|
t.Errorf("ConnectionState = %#v; expect non-zero Version and HandshakeComplete", cs)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
<-clientDone
|
||||||
|
<-serverDone
|
||||||
|
}
|
||||||
|
|
||||||
func newLocalListener(t *testing.T) net.Listener {
|
func newLocalListener(t *testing.T) net.Listener {
|
||||||
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user