From 445bb8efa35389c29b85fbc68201540e6942ab61 Mon Sep 17 00:00:00 2001 From: Mickael Remond Date: Wed, 26 Jun 2019 15:58:42 +0200 Subject: [PATCH] Fix crash on send when disconnected Fixes #74 --- client.go | 14 ++++++++++++-- component.go | 12 +++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/client.go b/client.go index 440ca94..1a63041 100644 --- a/client.go +++ b/client.go @@ -154,12 +154,17 @@ func (c *Client) SetHandler(handler EventHandler) { // Send marshals XMPP stanza and sends it to the server. func (c *Client) Send(packet Packet) error { + conn := c.conn + if conn == nil { + return errors.New("client is not connected") + } + data, err := xml.Marshal(packet) if err != nil { return errors.New("cannot marshal packet " + err.Error()) } - if _, err := fmt.Fprintf(c.conn, string(data)); err != nil { + if _, err := fmt.Fprintf(conn, string(data)); err != nil { return errors.New("cannot send packet " + err.Error()) } return nil @@ -170,8 +175,13 @@ func (c *Client) Send(packet Packet) error { // disconnect the client. It is up to the user of this method to // carefully craft the XML content to produce valid XMPP. func (c *Client) SendRaw(packet string) error { + conn := c.conn + if conn == nil { + return errors.New("client is not connected") + } + var err error - _, err = fmt.Fprintf(c.Session.socketProxy, packet) + _, err = fmt.Fprintf(conn, packet) return err } diff --git a/component.go b/component.go index eaea1d1..d13822b 100644 --- a/component.go +++ b/component.go @@ -138,12 +138,17 @@ func (c *Component) recv() (err error) { // Send marshalls XMPP stanza and sends it to the server. func (c *Component) Send(packet Packet) error { + conn := c.conn + if conn == nil { + return errors.New("component is not connected") + } + data, err := xml.Marshal(packet) if err != nil { return errors.New("cannot marshal packet " + err.Error()) } - if _, err := fmt.Fprintf(c.conn, string(data)); err != nil { + if _, err := fmt.Fprintf(conn, string(data)); err != nil { return errors.New("cannot send packet " + err.Error()) } return nil @@ -154,6 +159,11 @@ func (c *Component) Send(packet Packet) error { // disconnect the component. It is up to the user of this method to // carefully craft the XML content to produce valid XMPP. func (c *Component) SendRaw(packet string) error { + conn := c.conn + if conn == nil { + return errors.New("component is not connected") + } + var err error _, err = fmt.Fprintf(c.conn, packet) return err