forked from jshiffer/go-xmpp
Merge pull request #16 from sushimako/master
Jid in bindBind was not unmarshalled due to missing xml-spec
This commit is contained in:
commit
df87efc875
23
xmpp.go
23
xmpp.go
@ -222,15 +222,25 @@ type Chat struct {
|
|||||||
Text string
|
Text string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Presence struct {
|
||||||
|
From string
|
||||||
|
To string
|
||||||
|
Type string
|
||||||
|
Show string
|
||||||
|
}
|
||||||
|
|
||||||
// Recv wait next token of chat.
|
// Recv wait next token of chat.
|
||||||
func (c *Client) Recv() (chat Chat, err error) {
|
func (c *Client) Recv() (event interface{}, err error) {
|
||||||
for {
|
for {
|
||||||
_, val, err := next(c.p)
|
_, val, err := next(c.p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Chat{}, err
|
return Chat{}, err
|
||||||
}
|
}
|
||||||
if v, ok := val.(*clientMessage); ok {
|
switch v := val.(type) {
|
||||||
|
case *clientMessage:
|
||||||
return Chat{v.From, v.Type, v.Body}, nil
|
return Chat{v.From, v.Type, v.Body}, nil
|
||||||
|
case *clientPresence:
|
||||||
|
return Presence{v.From, v.To, v.Type, v.Show}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
panic("unreachable")
|
panic("unreachable")
|
||||||
@ -238,13 +248,12 @@ func (c *Client) Recv() (chat Chat, err error) {
|
|||||||
|
|
||||||
// Send sends message text.
|
// Send sends message text.
|
||||||
func (c *Client) Send(chat Chat) {
|
func (c *Client) Send(chat Chat) {
|
||||||
fmt.Fprintf(c.tls, "<message to='%s' type='chat' xml:lang='en'>"+
|
fmt.Fprintf(c.tls, "<message to='%s' type='%s' xml:lang='en'>"+
|
||||||
"<body>%s</body></message>",
|
"<body>%s</body></message>",
|
||||||
xmlEscape(chat.Remote), xmlEscape(chat.Text))
|
xmlEscape(chat.Remote), xmlEscape(chat.Type), xmlEscape(chat.Text))
|
||||||
}
|
}
|
||||||
|
|
||||||
// RFC 3920 C.1 Streams name space
|
// RFC 3920 C.1 Streams name space
|
||||||
|
|
||||||
type streamFeatures struct {
|
type streamFeatures struct {
|
||||||
XMLName xml.Name `xml:"http://etherx.jabber.org/streams features"`
|
XMLName xml.Name `xml:"http://etherx.jabber.org/streams features"`
|
||||||
StartTLS tlsStartTLS
|
StartTLS tlsStartTLS
|
||||||
@ -308,7 +317,7 @@ type saslFailure struct {
|
|||||||
type bindBind struct {
|
type bindBind struct {
|
||||||
XMLName xml.Name `xml:"urn:ietf:params:xml:ns:xmpp-bind bind"`
|
XMLName xml.Name `xml:"urn:ietf:params:xml:ns:xmpp-bind bind"`
|
||||||
Resource string
|
Resource string
|
||||||
Jid string
|
Jid string `xml:"jid"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RFC 3921 B.1 jabber:client
|
// RFC 3921 B.1 jabber:client
|
||||||
@ -340,7 +349,7 @@ type clientPresence struct {
|
|||||||
Type string `xml:"type,attr"` // error, probe, subscribe, subscribed, unavailable, unsubscribe, unsubscribed
|
Type string `xml:"type,attr"` // error, probe, subscribe, subscribed, unavailable, unsubscribe, unsubscribed
|
||||||
Lang string `xml:"lang,attr"`
|
Lang string `xml:"lang,attr"`
|
||||||
|
|
||||||
Show string `xml:"show,attr"`// away, chat, dnd, xa
|
Show string `xml:"show"` // away, chat, dnd, xa
|
||||||
Status string `xml:"status,attr"` // sb []clientText
|
Status string `xml:"status,attr"` // sb []clientText
|
||||||
Priority string `xml:"priority,attr"`
|
Priority string `xml:"priority,attr"`
|
||||||
Error *clientError
|
Error *clientError
|
||||||
|
31
xmpp_muc.go
Normal file
31
xmpp_muc.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright 2013 Flo Lauber <dev@qatfy.at>. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// TODO(flo):
|
||||||
|
// - support password protected MUC rooms
|
||||||
|
// - cleanup signatures of join/leave functions
|
||||||
|
package xmpp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
nsMUC = "http://jabber.org/protocol/muc"
|
||||||
|
nsMUCUser = "http://jabber.org/protocol/muc#user"
|
||||||
|
)
|
||||||
|
|
||||||
|
// xep-0045 7.2
|
||||||
|
func (c *Client) JoinMUC(jid string) {
|
||||||
|
fmt.Fprintf(c.tls, "<presence to='%s'>\n"+
|
||||||
|
"<x xmlns='%s' />\n"+
|
||||||
|
"</presence>",
|
||||||
|
xmlEscape(jid), nsMUC)
|
||||||
|
}
|
||||||
|
|
||||||
|
// xep-0045 7.14
|
||||||
|
func (c *Client) LeaveMUC(jid string) {
|
||||||
|
fmt.Fprintf(c.tls, "<presence from='%s' to='%s' type='unavailable' />",
|
||||||
|
c.jid, xmlEscape(jid))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user