forked from chteufleur/go-xmpp
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