Turn googletalk.go into a generic XMPP message tail tool.
This commit is contained in:
parent
2a32fc1e44
commit
de111bc744
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue