diff options
Diffstat (limited to 'xmpp/encoder.go')
-rw-r--r-- | xmpp/encoder.go | 79 |
1 files changed, 79 insertions, 0 deletions
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 +} |