From 05f50be52b03c7e84ba47d3b5349321920748f8b Mon Sep 17 00:00:00 2001 From: xengineering Date: Thu, 18 May 2023 20:51:16 +0200 Subject: Add xmpp/encoder.go This simplifies the double-encoding to the TCP connection and the debug console. --- xmpp/encoder.go | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 xmpp/encoder.go (limited to 'xmpp/encoder.go') diff --git a/xmpp/encoder.go b/xmpp/encoder.go new file mode 100644 index 0000000..434ca68 --- /dev/null +++ b/xmpp/encoder.go @@ -0,0 +1,79 @@ +package xmpp + +import ( + "crypto/tls" + "encoding/xml" + "os" +) + +type encoder struct { + tcp *xml.Encoder + debug *xml.Encoder +} + +func newEncoder(conn *tls.Conn) encoder { + e := encoder{ + xml.NewEncoder(conn), + xml.NewEncoder(os.Stdout), + } + e.tcp.Indent("", "") + e.debug.Indent("C: ", " ") + + return e +} + +func (e *encoder) encodeNow(t xml.Token) error { + err := e.encode(t) + if err != nil { + return err + } + + err = e.flush() + if err != nil { + return err + } + + return nil +} + +func (e *encoder) encode(t xml.Token) error { + err := e.tcp.EncodeToken(t) + if err != nil { + return err + } + + err = e.debug.EncodeToken(t) + if err != nil { + return err + } + + return nil +} + +func (e *encoder) flush() error { + err := e.tcp.Flush() + if err != nil { + return err + } + + err = e.debug.Flush() + if err != nil { + return err + } + + return nil +} + +func (e *encoder) Close() error { + err := e.tcp.Close() + if err != nil { + return err + } + + err = e.debug.Close() + if err != nil { + return err + } + + return nil +} -- cgit v1.2.3-70-g09d2