Create a new stream after StartTLS

This commit is contained in:
Wichert Akkerman
2019-10-25 15:22:01 +02:00
committed by Mickaël Rémond
parent 390f9b065e
commit 33446ad0ba
7 changed files with 55 additions and 26 deletions
+20 -13
View File
@@ -14,16 +14,19 @@ import (
// XMPPTransport implements the XMPP native TCP transport
type XMPPTransport struct {
Config TransportConfiguration
TLSConfig *tls.Config
decoder *xml.Decoder
conn net.Conn
readWriter io.ReadWriter
logFile io.Writer
isSecure bool
openStatement string
Config TransportConfiguration
TLSConfig *tls.Config
decoder *xml.Decoder
conn net.Conn
readWriter io.ReadWriter
logFile io.Writer
isSecure bool
}
const xmppStreamOpen = "<?xml version='1.0'?><stream:stream to='%s' xmlns='%s' xmlns:stream='%s' version='1.0'>"
var componentStreamOpen = fmt.Sprintf("<?xml version='1.0'?><stream:stream to='%%s' xmlns='%s' xmlns:stream='%s'>", stanza.NSComponent, stanza.NSStream)
var clientStreamOpen = fmt.Sprintf("<?xml version='1.0'?><stream:stream to='%%s' xmlns='%s' xmlns:stream='%s' version='1.0'>", stanza.NSClient, stanza.NSStream)
func (t *XMPPTransport) Connect() (string, error) {
var err error
@@ -34,8 +37,11 @@ func (t *XMPPTransport) Connect() (string, error) {
}
t.readWriter = newStreamLogger(t.conn, t.logFile)
return t.startStream()
}
if _, err = fmt.Fprintf(t.readWriter, xmppStreamOpen, t.Config.Domain, stanza.NSClient, stanza.NSStream); err != nil {
func (t *XMPPTransport) startStream() (string, error) {
if _, err := fmt.Fprintf(t.readWriter, t.openStatement, t.Config.Domain); err != nil {
t.conn.Close()
return "", NewConnError(err, true)
}
@@ -62,7 +68,7 @@ func (t XMPPTransport) IsSecure() bool {
return t.isSecure
}
func (t *XMPPTransport) StartTLS() error {
func (t *XMPPTransport) StartTLS() (string, error) {
if t.Config.TLSConfig == nil {
t.TLSConfig = &tls.Config{}
} else {
@@ -75,7 +81,7 @@ func (t *XMPPTransport) StartTLS() error {
tlsConn := tls.Client(t.conn, t.TLSConfig)
// We convert existing connection to TLS
if err := tlsConn.Handshake(); err != nil {
return err
return "", err
}
t.conn = tlsConn
@@ -85,12 +91,13 @@ func (t *XMPPTransport) StartTLS() error {
if !t.TLSConfig.InsecureSkipVerify {
if err := tlsConn.VerifyHostname(t.Config.Domain); err != nil {
return err
return "", err
}
}
t.isSecure = true
return nil
return t.startStream()
}
func (t XMPPTransport) Ping() error {