diff options
Diffstat (limited to 'xmpp/conn.go')
-rw-r--r-- | xmpp/conn.go | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/xmpp/conn.go b/xmpp/conn.go deleted file mode 100644 index f017889..0000000 --- a/xmpp/conn.go +++ /dev/null @@ -1,96 +0,0 @@ -package xmpp - -import ( - "crypto/tls" - "crypto/x509" - "log" -) - -type Event uint8 - -const ( - DisconnectEvent Event = iota - ConnectEvent - ShouldDisconnectEvent -) - -type Conn struct { - ch chan Event - jid, pwd string - tcp *tls.Conn - enc encoder -} - -func NewConn(ch chan Event, jid string, pwd string) *Conn { - c := Conn{ - ch: ch, - jid: jid, - pwd: pwd} - - return &c -} - -func (c *Conn) Connect() error { - var err error - - domain := domainpart(c.jid) - - roots, err := x509.SystemCertPool() - if err != nil { - log.Println(err) - return err - } - - c.tcp, err = tls.Dial("tcp", domain+":"+"5223", &tls.Config{RootCAs: roots}) - if err != nil { - log.Println(err) - return err - } - - return nil -} - -func (c *Conn) Disconnect() { - c.tcp.Close() -} - -func (c *Conn) Run() { - err := c.Connect() - if err != nil { - return - } - defer c.Disconnect() - - decoder := newDecoder(c.tcp) - go decoder.run() - defer decoder.stop() - - c.enc = newEncoder(c.tcp) - defer c.enc.Close() - - tr := newTokenRouter() - - end := sendStreamStart(&c.enc, c.jid) - defer sendStreamEnd(&c.enc, end) - - c.ch <- ConnectEvent - defer func() { c.ch <- DisconnectEvent }() - - for { - select { - case ev := <-c.ch: - switch ev { - case ShouldDisconnectEvent: - return - default: - log.Printf("Unknown Event '%d'!\n", ev) - } - case token := <-decoder.data: - err = tr.route(token, c) - if err != nil { - log.Println(err) - return - } - } - } -} |