summaryrefslogtreecommitdiff
path: root/xmpp/jid.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2023-06-30 14:32:58 +0200
committerxengineering <me@xengineering.eu>2023-06-30 15:30:27 +0200
commit62a17dd6584009cad58fceee6b1ada74edf1d38f (patch)
treeb4c6c833179ff92662efbd352dc66fc9884c8ca0 /xmpp/jid.go
parentdd1cb9c23392d4d43198d60879fecf61fe4503b7 (diff)
downloadlimox-62a17dd6584009cad58fceee6b1ada74edf1d38f.tar
limox-62a17dd6584009cad58fceee6b1ada74edf1d38f.tar.zst
limox-62a17dd6584009cad58fceee6b1ada74edf1d38f.zip
Implement resource binding request
This is the first step of resource binding which is a mandatory part of establishing an XMPP connection.
Diffstat (limited to 'xmpp/jid.go')
-rw-r--r--xmpp/jid.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/xmpp/jid.go b/xmpp/jid.go
index d7107d4..138744c 100644
--- a/xmpp/jid.go
+++ b/xmpp/jid.go
@@ -2,6 +2,9 @@ package xmpp
import (
"encoding/xml"
+ "log"
+ "fmt"
+ "math/rand"
)
// domainpart extracts the domain name from a JID / XMPP address. See
@@ -52,3 +55,46 @@ func hasBind(e []xml.Token) bool {
return false
}
+
+func (s *session) sendBind() {
+ iqStart := xml.StartElement{
+ xml.Name{"jabber:client", "iq"},
+ []xml.Attr{
+ xml.Attr{xml.Name{"", "id"}, fmt.Sprintf("%016x", rand.Uint64())},
+ xml.Attr{xml.Name{"", "type"}, "set"},
+ },
+ }
+ iqEnd := iqStart.End()
+
+ bindStart := xml.StartElement{
+ xml.Name{"urn:ietf:params:xml:ns:xmpp-bind", "bind"},
+ []xml.Attr{},
+ }
+ bindEnd := bindStart.End()
+
+ resourceStart := xml.StartElement{
+ xml.Name{"", "resource"},
+ []xml.Attr{},
+ }
+ resourceEnd := resourceStart.End()
+
+ name := xml.CharData("limox-" + fmt.Sprintf("%08x", rand.Uint32()))
+
+ tokens := [...]xml.Token{
+ iqStart,
+ bindStart,
+ resourceStart,
+ name,
+ resourceEnd,
+ bindEnd,
+ iqEnd,
+ }
+
+ for _, v := range tokens {
+ err := s.ed.encodeToken(v)
+ if err != nil {
+ log.Println("Could not encode ressource binding!")
+ return
+ }
+ }
+}