diff options
Diffstat (limited to 'vendor')
-rw-r--r-- | vendor/github.com/matterbridge/go-xmpp/xmpp.go | 44 | ||||
-rw-r--r-- | vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go | 2 | ||||
-rw-r--r-- | vendor/modules.txt | 2 |
3 files changed, 32 insertions, 16 deletions
diff --git a/vendor/github.com/matterbridge/go-xmpp/xmpp.go b/vendor/github.com/matterbridge/go-xmpp/xmpp.go index 5b8cdcf7..30a7ff74 100644 --- a/vendor/github.com/matterbridge/go-xmpp/xmpp.go +++ b/vendor/github.com/matterbridge/go-xmpp/xmpp.go @@ -43,7 +43,7 @@ const ( ) // Default TLS configuration options -var DefaultConfig tls.Config +var DefaultConfig = &tls.Config{} // DebugWriter is the writer used to write debugging output to. var DebugWriter io.Writer = os.Stderr @@ -76,7 +76,7 @@ func containsIgnoreCase(s, substr string) bool { return strings.Contains(s, substr) } -func connect(host, user, passwd string) (net.Conn, error) { +func connect(host, user, passwd string, timeout time.Duration) (net.Conn, error) { addr := host if strings.TrimSpace(host) == "" { @@ -117,7 +117,7 @@ func connect(host, user, passwd string) (net.Conn, error) { } } - c, err := net.Dial("tcp", addr) + c, err := net.DialTimeout("tcp", addr, timeout) if err != nil { return nil, err } @@ -153,6 +153,10 @@ type Options struct { // Password supplies the password to use for authentication with the remote server. Password string + // DialTimeout is the time limit for establishing a connection. A + // DialTimeout of zero means no timeout. + DialTimeout time.Duration + // Resource specifies an XMPP client resource, like "bot", instead of accepting one // from the server. Use "" to let the server generate one for your client. Resource string @@ -221,7 +225,7 @@ func (o Options) NewClient() (*Client, error) { } } } - c, err := connect(host, o.User, o.Password) + c, err := connect(host, o.User, o.Password, o.DialTimeout) if err != nil { return nil, err } @@ -237,11 +241,11 @@ func (o Options) NewClient() (*Client, error) { var tlsconn *tls.Conn if o.TLSConfig != nil { tlsconn = tls.Client(c, o.TLSConfig) + host = o.TLSConfig.ServerName } else { - DefaultConfig.ServerName = host - newconfig := DefaultConfig + newconfig := DefaultConfig.Clone() newconfig.ServerName = host - tlsconn = tls.Client(c, &newconfig) + tlsconn = tls.Client(c, newconfig) } if err = tlsconn.Handshake(); err != nil { return nil, err @@ -331,7 +335,6 @@ func cnonce() string { } func (c *Client) init(o *Options) error { - var domain string var user string a := strings.SplitN(o.User, "@", 2) @@ -497,7 +500,7 @@ func (c *Client) init(o *Options) error { c.domain = domain if o.Session { - //if server support session, open it + // if server support session, open it fmt.Fprintf(c.conn, "<iq to='%s' type='set' id='%x'><session xmlns='%s'/></iq>", xmlEscape(domain), cookie, nsSession) } @@ -532,9 +535,8 @@ func (c *Client) startTLSIfRequired(f *streamFeatures, o *Options, domain string tc := o.TLSConfig if tc == nil { - tc = new(tls.Config) - *tc = DefaultConfig - //TODO(scott): we should consider using the server's address or reverse lookup + tc = DefaultConfig.Clone() + // TODO(scott): we should consider using the server's address or reverse lookup tc.ServerName = domain } t := tls.Client(c.conn, tc) @@ -652,6 +654,10 @@ func (c *Client) Recv() (stanza interface{}, err error) { // Handle Pubsub notifications switch v.Event.Items.Node { case XMPPNS_AVATAR_PEP_METADATA: + if len(v.Event.Items.Items) == 0 { + return AvatarMetadata{}, errors.New("No avatar metadata items available") + } + return handleAvatarMetadata(v.Event.Items.Items[0].Body, v.From) // I am not sure whether this can even happen. @@ -797,10 +803,18 @@ func (c *Client) Recv() (stanza interface{}, err error) { switch p.Node { case XMPPNS_AVATAR_PEP_DATA: + if len(p.Items) == 0 { + return AvatarData{}, errors.New("No avatar data items available") + } + return handleAvatarData(p.Items[0].Body, v.From, p.Items[0].ID) case XMPPNS_AVATAR_PEP_METADATA: + if len(p.Items) == 0 { + return AvatarMetadata{}, errors.New("No avatar metadata items available") + } + return handleAvatarMetadata(p.Items[0].Body, v.From) default: @@ -842,8 +856,10 @@ func (c *Client) Recv() (stanza interface{}, err error) { return Chat{}, err } - return IQ{ID: v.ID, From: v.From, To: v.To, Type: v.Type, - Query: res}, nil + return IQ{ + ID: v.ID, From: v.From, To: v.To, Type: v.Type, + Query: res, + }, nil } } } diff --git a/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go b/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go index 15114c9f..90dee955 100644 --- a/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go +++ b/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go @@ -39,7 +39,7 @@ func (c *Client) RawInformationQuery(from, to, id, iqType, requestNamespace, bod return id, err } -// rawInformation send a IQ request with the the payload body to the server +// rawInformation send a IQ request with the payload body to the server func (c *Client) RawInformation(from, to, id, iqType, body string) (string, error) { const xmlIQ = "<iq from='%s' to='%s' id='%s' type='%s'>%s</iq>" _, err := fmt.Fprintf(c.conn, xmlIQ, xmlEscape(from), xmlEscape(to), id, iqType, body) diff --git a/vendor/modules.txt b/vendor/modules.txt index dcc40a35..e83e308e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -180,7 +180,7 @@ github.com/matterbridge/Rocket.Chat.Go.SDK/rest # github.com/matterbridge/discordgo v0.21.2-0.20210201201054-fb39a175b4f7 ## explicit; go 1.10 github.com/matterbridge/discordgo -# github.com/matterbridge/go-xmpp v0.0.0-20210731150933-5702291c239f +# github.com/matterbridge/go-xmpp v0.0.0-20211030125215-791a06c5f1be ## explicit github.com/matterbridge/go-xmpp # github.com/matterbridge/gozulipbot v0.0.0-20211023205727-a19d6c1f3b75 |