summaryrefslogtreecommitdiff
path: root/xmpp/encoder.go
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp/encoder.go')
-rw-r--r--xmpp/encoder.go79
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
+}