From c64a5bc2fe3727c7e4cbb0668a5ec002843b7d1f Mon Sep 17 00:00:00 2001 From: Matt Goodall Date: Mon, 9 Jul 2012 15:11:25 +0100 Subject: [PATCH] Add example of Google Talk. --- googletalk.go | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 googletalk.go diff --git a/googletalk.go b/googletalk.go new file mode 100644 index 0000000..229e33d --- /dev/null +++ b/googletalk.go @@ -0,0 +1,66 @@ +package main + +import ( + "flag" + "fmt" + "log" + "net" + "xmpp" +) + +var ( + jid = flag.String("jid", "", "JID") + pass = flag.String("pass", "", "Password") +) + +func main() { + + flag.Parse() + jid, _ := xmpp.ParseJID(*jid) + pass := *pass + + // Lookup XMPP client net addr. + addr, err := xmppHomeAddr(jid) + if err != nil { + log.Fatal(err) + } + + // Create stream. + stream, err := xmpp.NewStream(addr) + if err != nil { + log.Fatal(err) + } + + // Configure stream as client. + x, err := xmpp.NewClientXMPP(stream, jid, pass, nil) + if err != nil { + log.Fatal(err) + } + + // Signal presence. + x.Send(xmpp.Presence{}) + + for { + stanza, err := x.Recv() + if err != nil { + log.Fatal(err) + } + log.Printf("recv: %v", stanza) + } +} + +// Get XMPP server addr from DNS SRV entry. +func xmppHomeAddr(jid xmpp.JID) (addr string, err error) { + + _, addrs, err := net.LookupSRV("xmpp-client", "tcp", jid.Domain) + if err != nil { + return + } + + if len(addrs) == 0 { + err = fmt.Errorf("No addrs for %s", jid.Domain) + return + } + + return fmt.Sprintf("%s:%d", addrs[0].Target, addrs[0].Port), nil +}