implements some XEP in xmpp struct library
This commit is contained in:
parent
e2a59cb3ba
commit
02ee2f2087
12
README.md
12
README.md
|
@ -8,9 +8,6 @@
|
|||
|
||||
## Features
|
||||
- XMPP Library (first version - PR are welcome)
|
||||
- RFC 6120 (XMPP - Core)
|
||||
- XEP 0030: Service Discovery
|
||||
- XEP-0199: XMPP Ping
|
||||
- Client Library (WIP)
|
||||
- Stream: TLS Required
|
||||
- SASL-Auth (PLAIN, DIGEST-MD5)
|
||||
|
@ -34,9 +31,12 @@
|
|||
all implementation of all comman (RFCs and XEPs) xml element
|
||||
|
||||
**Version**
|
||||
- RFC 6120 (XMPP - Core)
|
||||
- XEP 0030: Service Discovery
|
||||
- XEP-0199: XMPP Ping
|
||||
- [RFC 6120 (XMPP - Core)](https://xmpp.org/rfcs/rfc3920.html)
|
||||
- [XEP 0030: Service Discovery](https://xmpp.org/extensions/xep-0030.html)
|
||||
- [XEP-0049: Private XML Storage](https://xmpp.org/extensions/xep-0049.html)
|
||||
- [XEP-0092: Software Version](https://xmpp.org/extensions/xep-0092.html)
|
||||
- [XEP-0138: Stream Compression](https://xmpp.org/extensions/xep-0138.html)
|
||||
- [XEP-0199: XMPP Ping](https://xmpp.org/extensions/xep-0199.html)
|
||||
|
||||
### Client
|
||||
|
||||
|
|
|
@ -16,10 +16,14 @@ type IQClient struct {
|
|||
Type IQType `xml:"type,attr"` // required
|
||||
Error *ErrorClient
|
||||
|
||||
Bind *Bind // RFC 6120 A.7 Resource binding namespace (But in a IQ?)
|
||||
Ping *xmppiq.Ping // XEP-0199: XMPP Ping (see iq/ping.go)
|
||||
PrivateQuery *xmppiq.IQPrivateQuery // which XEP ?
|
||||
PrivateRegister *xmppiq.IQPrivateRegister // which XEP ?
|
||||
Bind *Bind // RFC 6120 A.7 Resource binding namespace (But in a IQ?)
|
||||
DiscoQueryInfo *xmppiq.DiscoQueryInfo // XEP-0030: XMPP Service Discovery (see iq/service_discovery.go)
|
||||
DiscoQueryItem *xmppiq.DiscoQueryItem // XEP-0030: XMPP Service Discovery (see iq/service_discovery.go)
|
||||
PrivateXMLStorage *xmppiq.PrivateXMLStorage // XEP-0049: Private XML Storage (see iq/private_xml_storage.go)
|
||||
VCard *xmppiq.VCard // XEP-0054: vcard-temp (see iq/vcard.go) - WIP
|
||||
Register *xmppiq.Register // XEP-0077: In-Band Registration - 14.1 (see iq/register.go) - WIP
|
||||
Version *xmppiq.Version // XEP-0092: Software Version (see iq/version.go)
|
||||
Ping *xmppiq.Ping // XEP-0199: XMPP Ping (see iq/ping.go)
|
||||
|
||||
// Any hasn't matched element
|
||||
Other []XMLElement `xml:",any"`
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
package xmpp
|
||||
|
||||
import "encoding/xml"
|
||||
|
||||
// CompressionFeature implements XEP-0138: Stream Compression - 10.1 Stream Feature
|
||||
type CompressionFeature struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/features/compress compression"`
|
||||
Methods []string `xml:"method"`
|
||||
}
|
||||
|
||||
// CompressionCompress implements XEP-0138: Stream Compression - 10.2 Protocol Namespace
|
||||
type CompressionCompress struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/compress compress"`
|
||||
Methods []string `xml:"method"`
|
||||
}
|
||||
|
||||
// CompressionCompressed implements XEP-0138: Stream Compression - 10.2 Protocol Namespace
|
||||
type CompressionCompressed struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/compress compressed"`
|
||||
}
|
||||
|
||||
// CompressionFailure implements XEP-0138: Stream Compression - 10.2 Protocol Namespace
|
||||
type CompressionFailure struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/compress failure"`
|
||||
SetupFailed *xml.Name `xml:"http://jabber.org/protocol/compress setup-failed"`
|
||||
ProcessingFailed *xml.Name `xml:"http://jabber.org/protocol/compress processing-failed"`
|
||||
UnsupportedFailed *xml.Name `xml:"http://jabber.org/protocol/compress unsupported-failed"`
|
||||
Text *Text
|
||||
StanzaErrorGroup
|
||||
}
|
|
@ -8,11 +8,12 @@ import (
|
|||
|
||||
// StreamFeatures implements RFC 6120 - A.1 Stream Namespace
|
||||
type StreamFeatures struct {
|
||||
XMLName xml.Name `xml:"http://etherx.jabber.org/streams features"`
|
||||
StartTLS *TLSStartTLS
|
||||
Mechanisms SASLMechanisms
|
||||
Bind *Bind
|
||||
Session bool
|
||||
XMLName xml.Name `xml:"http://etherx.jabber.org/streams features"`
|
||||
StartTLS *TLSStartTLS
|
||||
Mechanisms SASLMechanisms // RFC 6120 - A.4 SASL Namespace (see sasl.go)
|
||||
Compression *CompressionFeature // XEP-0138: Stream Compression (see compression.go)
|
||||
Bind *Bind
|
||||
Session bool
|
||||
}
|
||||
|
||||
// TLSStartTLS implements RFC 6120 - A.3 StartTLS Namespace
|
||||
|
|
|
@ -1,18 +1,27 @@
|
|||
package xmppiq
|
||||
|
||||
const (
|
||||
// NSIQPing implements XEP-0199: XMPP Ping - 10
|
||||
NSIQPing = "urn:xmpp:ping"
|
||||
// NSDiscoInfo implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
NSDiscoInfo = "http://jabber.org/protocol/disco#info"
|
||||
|
||||
// NSIQDiscoInfo implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
NSIQDiscoInfo = "http://jabber.org/protocol/disco#info"
|
||||
// NSDiscoItems implements XEP 0030: Service Discovery - 11.2 disco#items
|
||||
NSDiscoItems = "http://jabber.org/protocol/disco#items"
|
||||
|
||||
// NSIQDiscoItems implements XEP 0030: Service Discovery - 11.2 disco#items
|
||||
NSIQDiscoItems = "http://jabber.org/protocol/disco#items"
|
||||
// NSPrivateXMLStorage implements XEP-0049: Private XML Storage - 7
|
||||
NSPrivateXMLStorage = "jabber:iq:private"
|
||||
|
||||
// NSIQRegister implements which XEP ?
|
||||
NSIQRegister = "jabber:iq:register"
|
||||
// NSVCard implements XEP-0054: vcard-temp - 14 (WIP)
|
||||
NSVCard = "vcard-temp"
|
||||
|
||||
// NSFeaturesIQRegister implements which XEP ?
|
||||
NSFeaturesIQRegister = "http://jabber.org/features/iq-register"
|
||||
// NSVersion implements XEP-0092: Software Version - 4
|
||||
NSVersion = "jabber:iq:version"
|
||||
|
||||
// NSPing implements XEP-0199: XMPP Ping - 10
|
||||
NSPing = "urn:xmpp:ping"
|
||||
|
||||
// NSRegister implements XEP-0077: In-Band Registration - 14.1 jabber:iq:register
|
||||
NSRegister = "jabber:iq:register"
|
||||
|
||||
// NSFeatureRegister implements XEP-0077: In-Band Registration - 14.2 Stream Feature
|
||||
NSFeatureRegister = "http://jabber.org/features/iq-register"
|
||||
)
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"encoding/xml"
|
||||
)
|
||||
|
||||
// XEP-0199: XMPP Ping
|
||||
// Ping implements XEP-0199: XMPP Ping - 10
|
||||
type Ping struct {
|
||||
XMLName xml.Name `xml:"urn:xmpp:ping ping"`
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package xmppiq
|
||||
|
||||
import "encoding/xml"
|
||||
|
||||
// PrivateXMLStorage implements XEP-0049: Private XML Storage - 7
|
||||
type PrivateXMLStorage struct {
|
||||
XMLName xml.Name `xml:"jabber:iq:private query"`
|
||||
Body []byte `xml:",innerxml"`
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package xmppiq
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
// WARNING WIP
|
||||
|
||||
// Register implements XEP-0077: In-Band Registration - 14.1 jabber:iq:register
|
||||
//TODO
|
||||
type Register struct {
|
||||
XMLName xml.Name `xml:"jabber:iq:register query"`
|
||||
Instructions string `xml:"instructions"`
|
||||
Username string `xml:"username"`
|
||||
Password string `xml:"password"`
|
||||
}
|
||||
|
||||
// FeatureRegister implements XEP-0077: In-Band Registration - 14.2 Stream Feature
|
||||
type FeatureRegister struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/features/iq-register register"`
|
||||
}
|
|
@ -6,37 +6,37 @@ import (
|
|||
"dev.sum7.eu/genofire/yaja/xmpp/base"
|
||||
)
|
||||
|
||||
// IQDiscoQueryInfo implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
type IQDiscoQueryInfo struct {
|
||||
// DiscoQueryInfo implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
type DiscoQueryInfo struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/disco#info query"`
|
||||
Node *string `xml:"node,attr"`
|
||||
Identities []*IQDiscoIdentity
|
||||
Features []*IQDiscoFeature
|
||||
Identities []*DiscoIdentity
|
||||
Features []*DiscoFeature
|
||||
}
|
||||
|
||||
// IQDiscoIdentity implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
type IQDiscoIdentity struct {
|
||||
// DiscoIdentity implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
type DiscoIdentity struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/disco#info identity"`
|
||||
Category string `xml:"category"` //required
|
||||
Name *string `xml:"name"`
|
||||
Type string `xml:"type"` //required
|
||||
}
|
||||
|
||||
// IQDiscoFeature implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
type IQDiscoFeature struct {
|
||||
// DiscoFeature implements XEP 0030: Service Discovery - 11.1 disco#info
|
||||
type DiscoFeature struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/disco#info feature"`
|
||||
Var string `xml:"var"` //required
|
||||
}
|
||||
|
||||
// IQDiscoQueryItem implements XEP 0030: Service Discovery - 11.2 disco#items
|
||||
type IQDiscoQueryItem struct {
|
||||
// DiscoQueryItem implements XEP 0030: Service Discovery - 11.2 disco#items
|
||||
type DiscoQueryItem struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/disco#items query"`
|
||||
Node *string `xml:"node,attr"`
|
||||
Items []*IQDiscoItem
|
||||
Items []*DiscoItem
|
||||
}
|
||||
|
||||
// IQDiscoItem implements XEP 0030: Service Discovery - 11.2 disco#items
|
||||
type IQDiscoItem struct {
|
||||
// DiscoItem implements XEP 0030: Service Discovery - 11.2 disco#items
|
||||
type DiscoItem struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/disco#items item"`
|
||||
JID *xmppbase.JID `xml:"jid"`
|
||||
Node *string `xml:"node"`
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package xmppiq
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
// WARNING WIP
|
||||
|
||||
// VCard implements XEP-0054: vcard-temp - 14
|
||||
//TODO
|
||||
type VCard struct {
|
||||
XMLName xml.Name `xml:"vcard-temp vCard"`
|
||||
Body []byte `xml:",innerxml"`
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package xmppiq
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
// Version implements XEP-0092: Software Version - 4
|
||||
type Version struct {
|
||||
XMLName xml.Name `xml:"jabber:iq:version query"`
|
||||
Name string `xml:"name"` //required
|
||||
Version string `xml:"version"` //required
|
||||
OS *string `xml:"os"`
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package xmppiq
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
// which XEP ????
|
||||
// where to put: (server part debug? is it part)
|
||||
type IQPrivateQuery struct {
|
||||
XMLName xml.Name `xml:"jabber:iq:private query"`
|
||||
Body []byte `xml:",innerxml"`
|
||||
}
|
||||
|
||||
type IQPrivateRegister struct {
|
||||
XMLName xml.Name `xml:"jabber:iq:register query"`
|
||||
Instructions string `xml:"instructions"`
|
||||
Username string `xml:"username"`
|
||||
Password string `xml:"password"`
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package xmpp
|
||||
|
||||
const (
|
||||
// NSDiscoOfflineMessages implements XEP-0160: Best Practices for Handling Offline Messages - 7
|
||||
//TODO where to put??
|
||||
NSDiscoOfflineMessages = "msgoffline"
|
||||
|
||||
// NSDiscoSocks5Bytestreams implements XEP-0065: SOCKS5 Bytestreams - 14
|
||||
//TODO where to put WIP iq implemention
|
||||
NSDiscoSocks5Bytestreams = "http://jabber.org/protocol/bytestreams"
|
||||
)
|
Reference in New Issue