diff --git a/src/xmpp/doc.go b/src/xmpp/doc.go new file mode 100644 index 0000000..e5232bf --- /dev/null +++ b/src/xmpp/doc.go @@ -0,0 +1,46 @@ +/* + Tools for implementing XMPP clients and components. + + The package is built on the concept of an XML stream - a pair of XML + documents written to and read from a TCP connection. Top-level elements in + the document form the messages processed by either end of the connection. + + An XML stream is then configured for an XMPP conversation, as either a + client (chat, etc client) or component (a sort of server plugin). + + Create a client: + + jid, err := xmpp.ParseJID("alice@wonderland.lit/some-resource") + addr, err := xmpp.HomeServerAddrs(jid) + stream, err := xmpp.NewStream(addr[0]) + X, err := xmpp.NewClientXMPP(stream, jid, "password") + + Create a component: + + jid, err := xmpp.ParseJID("rabbithole.wonderland.lit") + stream, err := xmpp.NewStream("localhost:5347") + X, err := xmpp.NewComponentXMPP(stream, jid, "secret") + + Messages are sent using the XMPP.Send method, e.g. a client typically + announces its presence on the XMPP network as soon as it's connected: + + X.Send(xmpp.Presence{}) + + Incoming messages can be received in a simple loop, ended by an os.EOF for + clean shutdown or any other error for something unexpected. XMPP defines + four types of stanza: , , and + represented by Error, Iq, Message and Presence structs respectively. + + for { + stanza, err := X.Recv() + if err == os.EOF { + break + } + log.Printf("%T : %v\n", stanza, stanza) + } + + Note: A "bound" JID is negotatiated during XMPP setup and may be different + to the JID passed to the New(Client|Component)XMPP() call. Always + use the XMPP instance's JID attribute in any stanzas. +*/ +package xmpp