package xmpp import ( "encoding/xml" "fmt" "math/rand" "log" ) type iq struct { XMLName xml.Name `xml:"jabber:client iq"` Type string `xml:"type,attr,omitempty"` Id string `xml:"id,attr,omitempty"` Bind struct{ Jid string `xml:"jid,omitempty"` } `xml:"urn:ietf:params:xml:ns:xmpp-bind bind,omitempty"` } type bindRequest struct { Bind struct { Xmlns string `xml:"xmlns,attr"` Resource struct { Content string `xml:",chardata"` } `xml:"resource"` } `xml:"bind"` } func (s *session) sendBind() { s.resourceReq = fmt.Sprintf("%016x", rand.Uint64()) start := xml.StartElement{ xml.Name{"jabber:client", "iq"}, []xml.Attr{ xml.Attr{xml.Name{"", "id"}, s.resourceReq}, xml.Attr{xml.Name{"", "type"}, "set"}, }, } inner := bindRequest{} inner.Bind.Xmlns = "urn:ietf:params:xml:ns:xmpp-bind" inner.Bind.Resource.Content = "limox-" + fmt.Sprintf("%08x", rand.Uint32()) err := s.tx.EncodeElement(inner, start) if err != nil { log.Println("Could not encode ressource binding!") } } func handleIq(s *session, i iq) { if i.Bind.Jid != "" { s.jid = i.Bind.Jid s.sendPresence() return } }