diff options
| -rw-r--r-- | xmpp/session.go | 44 | ||||
| -rw-r--r-- | xmpp/stream_pair.go | 52 | 
2 files changed, 53 insertions, 43 deletions
diff --git a/xmpp/session.go b/xmpp/session.go index 8b2d4ab..f14cd34 100644 --- a/xmpp/session.go +++ b/xmpp/session.go @@ -49,24 +49,9 @@ func (s *session) run() {  	go s.ed.run()  	defer func() { s.ed.terminator <- true }() -	s.openStream() -	defer s.closeStreams() -  	s.out <- SessionConnect{} -	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 -		} -	} +	runStreamPair(s)  }  func (s *session) startTransport() error { @@ -86,30 +71,3 @@ func (s *session) startTransport() error {  	return nil  } - -func (s *session) openStream() { -	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 (s *session) closeStreams() { -	err := s.ed.encodeToken(s.streamEnd) -	if err != nil { -		log.Println("Could not encode stream end!") -	} -} 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!") +	} +}  | 
