diff --git a/src/xmpp/stream.go b/src/xmpp/stream.go index 8af222f..4feb2a9 100644 --- a/src/xmpp/stream.go +++ b/src/xmpp/stream.go @@ -56,26 +56,10 @@ func (stream *Stream) UpgradeTLS(config *tls.Config) error { // Send the element's start tag. Typically used to open the stream's document. func (stream *Stream) SendStart(start *xml.StartElement) error { - buf := new(bytes.Buffer) - if _, err := buf.Write([]byte{'<'}); err != nil { + if err := writeXMLStartElement(buf, start); err != nil { return err } - if err := writeXMLName(buf, start.Name); err != nil { - return err - } - for _, attr := range start.Attr { - if _, err := buf.Write([]byte{' '}); err != nil { - return err - } - if err := writeXMLAttr(buf, attr); err != nil { - return err - } - } - if _, err := buf.Write([]byte{'>'}); err != nil { - return err - } - return stream.send(buf.Bytes()) } diff --git a/src/xmpp/xml.go b/src/xmpp/xml.go index b09b354..d8e22a6 100644 --- a/src/xmpp/xml.go +++ b/src/xmpp/xml.go @@ -6,6 +6,28 @@ import ( "io" ) +// Write an xml.StartElement. +func writeXMLStartElement(w io.Writer, start *xml.StartElement) error { + if _, err := w.Write([]byte{'<'}); err != nil { + return err + } + if err := writeXMLName(w, start.Name); err != nil { + return err + } + for _, attr := range start.Attr { + if _, err := w.Write([]byte{' '}); err != nil { + return err + } + if err := writeXMLAttr(w, attr); err != nil { + return err + } + } + if _, err := w.Write([]byte{'>'}); err != nil { + return err + } + return nil +} + // Write a xml.Name. func writeXMLName(w io.Writer, name xml.Name) error { if name.Space == "" {