Turn googletalk.go into a generic XMPP message tail tool.

This commit is contained in:
Matt Goodall 2012-07-10 10:43:00 +01:00
parent 2a32fc1e44
commit de111bc744
2 changed files with 62 additions and 66 deletions

View File

@ -1,66 +0,0 @@
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
}

62
tail.go Normal file
View File

@ -0,0 +1,62 @@
package main
import (
"flag"
"log"
"xmpp"
)
var (
addr = ""
skipverify = false
jid = ""
pass = ""
)
func init() {
flag.StringVar(&addr, "addr", "", "XMPP server address, <host>:<port>. Optional")
flag.BoolVar(&skipverify, "skipverify", false, "Skip TLS certificate verification.")
flag.StringVar(&jid, "jid", "", "User's JID, e.g. alice@wonderland.lit/chat.")
flag.StringVar(&pass, "pass", "", "User's password.")
}
func main() {
// Parse args
flag.Parse()
jid, _ := xmpp.ParseJID(jid)
// Lookup home server TCP addr if not explicitly set.
if addr == "" {
if addrs, err := xmpp.HomeServerAddrs(jid); err != nil {
log.Fatal(err)
} else {
addr = addrs[0]
}
}
// Create stream.
stream, err := xmpp.NewStream(addr)
if err != nil {
log.Fatal(err)
}
// Configure stream as client.
config := xmpp.ClientConfig{InsecureSkipVerify: skipverify}
x, err := xmpp.NewClientXMPP(stream, jid, pass, &config)
if err != nil {
log.Fatal(err)
}
// Signal presence.
x.Send(xmpp.Presence{})
// Log anything that arrives.
for {
stanza, err := x.Recv()
if err != nil {
log.Fatal(err)
}
log.Printf("recv: %T %v", stanza, stanza)
}
}