diff --git a/xmpp/extensions/extensions.go b/xmpp/extensions/extensions.go index d864493..c8889b2 100644 --- a/xmpp/extensions/extensions.go +++ b/xmpp/extensions/extensions.go @@ -324,6 +324,12 @@ type QueryMucAdminItem struct { Reason string `xml:"reason,omitempty"` } +// QueryMucOwner is from XEP-0045 +type QueryMucOwner struct { + XMLName xml.Name `xml:"http://jabber.org/protocol/muc#owner query"` + ResultSet *stanza.ResultSet `xml:"set,omitempty"` +} + // Namespace is a namespace! func (c PresenceNickExtension) Namespace() string { return c.XMLName.Space @@ -419,6 +425,16 @@ func (c QueryMucAdmin) GetSet() *stanza.ResultSet { return c.ResultSet } +// Namespace is a namespace! +func (c QueryMucOwner) Namespace() string { + return c.XMLName.Space +} + +// GetSet getsets! +func (c QueryMucOwner) GetSet() *stanza.ResultSet { + return c.ResultSet +} + // NewReplyFallback initializes a fallback range func NewReplyFallback(start uint64, end uint64) Fallback { return Fallback{ @@ -546,4 +562,10 @@ func init() { "http://jabber.org/protocol/muc#admin", "query", }, QueryMucAdmin{}) + + // muc owner query + stanza.TypeRegistry.MapExtension(stanza.PKTIQ, xml.Name{ + "http://jabber.org/protocol/muc#owner", + "query", + }, QueryMucOwner{}) } diff --git a/xmpp/handlers.go b/xmpp/handlers.go index 7b1f41e..d0c3416 100644 --- a/xmpp/handlers.go +++ b/xmpp/handlers.go @@ -76,6 +76,11 @@ func HandleIq(s xmpp.Sender, p stanza.Packet) { go handleGetQueryMucAdmin(s, iq, queryMucAdmin) return } + _, ok = iq.Payload.(*extensions.QueryMucOwner) + if ok { + go handleGetQueryMucOwner(s, iq) + return + } } else if iq.Type == stanza.IQTypeSet { queryRegister, ok := iq.Payload.(*extensions.QueryRegister) if ok { @@ -1231,6 +1236,15 @@ func handleGetQueryMucAdmin(s xmpp.Sender, iq *stanza.IQ, query *extensions.Quer } } +func handleGetQueryMucOwner(s xmpp.Sender, iq *stanza.IQ) { + component, answer, ok := iqResultStub(s, iq) + if !ok { + return + } + iqAnswerSetError(answer, 405) + gateway.ResumableSend(component, answer) +} + func handleSetQueryRegister(s xmpp.Sender, iq *stanza.IQ, query *extensions.QueryRegister) { component, answer, ok := iqResultStub(s, iq) if !ok {