summaryrefslogtreecommitdiff
path: root/xmpp/stream_pair.go
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp/stream_pair.go')
-rw-r--r--xmpp/stream_pair.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/xmpp/stream_pair.go b/xmpp/stream_pair.go
new file mode 100644
index 0000000..6224a77
--- /dev/null
+++ b/xmpp/stream_pair.go
@@ -0,0 +1,52 @@
+package xmpp
+
+import (
+ "encoding/xml"
+ "log"
+)
+
+func runStreamPair(s *session) {
+ openStream(s)
+ defer closeStream(s)
+
+ for {
+ select {
+ case data := <-s.in:
+ switch data.(type) {
+ case SessionShouldDisconnect:
+ return
+ default:
+ log.Printf("Unknown data '%d'!\n", data)
+ }
+ case _ = <-s.rx:
+ // TODO route received XML token here
+ }
+ }
+}
+
+func openStream(s *session) {
+ start := xml.StartElement{
+ xml.Name{"jabber:client", "stream:stream"},
+ []xml.Attr{
+ xml.Attr{xml.Name{"", "from"}, s.jid},
+ xml.Attr{xml.Name{"", "to"}, domainpart(s.jid)},
+ xml.Attr{xml.Name{"", "version"}, "1.0"},
+ xml.Attr{xml.Name{"", "xml:lang"}, "en"},
+ xml.Attr{xml.Name{"", "xmlns:stream"}, "http://etherx.jabber.org/streams"},
+ },
+ }
+
+ s.streamEnd = start.End()
+
+ err := s.ed.encodeToken(start)
+ if err != nil {
+ log.Println("Could not encode stream start!")
+ }
+}
+
+func closeStream(s *session) {
+ err := s.ed.encodeToken(s.streamEnd)
+ if err != nil {
+ log.Println("Could not encode stream end!")
+ }
+}