Add example of Google Talk.
This commit is contained in:
parent
b752357c8d
commit
c64a5bc2fe
|
|
@ -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
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue