forked from chteufleur/go-xmpp
67 lines
1.0 KiB
Go
67 lines
1.0 KiB
Go
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
|
|
}
|