forked from jshiffer/go-xmpp
add iq:version, iq:last
This commit is contained in:
parent
224305b3ef
commit
66c008d798
21
xmpp.go
21
xmpp.go
@ -62,10 +62,11 @@ func getCookie() Cookie {
|
|||||||
|
|
||||||
// Client holds XMPP connection opitons
|
// Client holds XMPP connection opitons
|
||||||
type Client struct {
|
type Client struct {
|
||||||
conn net.Conn // connection to server
|
conn net.Conn // connection to server
|
||||||
jid string // Jabber ID for our connection
|
jid string // Jabber ID for our connection
|
||||||
domain string
|
domain string
|
||||||
p *xml.Decoder
|
loginTime time.Time
|
||||||
|
p *xml.Decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) JID() string {
|
func (c *Client) JID() string {
|
||||||
@ -257,6 +258,7 @@ func (o Options) NewClient() (*Client, error) {
|
|||||||
client.Close()
|
client.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
client.loginTime = time.Now()
|
||||||
|
|
||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
@ -666,7 +668,16 @@ func (c *Client) Recv() (stanza interface{}, err error) {
|
|||||||
}
|
}
|
||||||
// <query xmlns='jabber:iq:roster' ver='5'>
|
// <query xmlns='jabber:iq:roster' ver='5'>
|
||||||
// TODO: shall we check XMLName.Local is "query"?
|
// TODO: shall we check XMLName.Local is "query"?
|
||||||
if v.Query.XMLName.Space == "jabber:iq:roster" {
|
switch v.Query.XMLName.Space {
|
||||||
|
case "jabber:iq:version":
|
||||||
|
if err := c.SendVersion(v.ID, v.From, v.To); err != nil {
|
||||||
|
return Chat{}, err
|
||||||
|
}
|
||||||
|
case "jabber:iq:last":
|
||||||
|
if err := c.SendIQLast(v.ID, v.From, v.To); err != nil {
|
||||||
|
return Chat{}, err
|
||||||
|
}
|
||||||
|
case "jabber:iq:roster":
|
||||||
var item rosterItem
|
var item rosterItem
|
||||||
var r Roster
|
var r Roster
|
||||||
if v.Type != "result" && v.Type != "set" {
|
if v.Type != "result" && v.Type != "set" {
|
||||||
|
32
xmpp_version.go
Normal file
32
xmpp_version.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package xmpp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"runtime"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *Client) SendVersion(id, toServer, fromU string) error {
|
||||||
|
_, err := fmt.Fprintf(c.conn, "<iq type='result' from='%s' to='%s'"+
|
||||||
|
" id='%s'>", xmlEscape(fromU), xmlEscape(toServer), xmlEscape(id))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = fmt.Fprintf(c.conn, "<query xmlns='jabber:iq:version'>"+
|
||||||
|
"<name>go-xmpp</name><version>0.1</version><os>%s</os>"+
|
||||||
|
"</query>\n</iq>", runtime.GOOS)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) SendIQLast(id, toServer, fromU string) error {
|
||||||
|
_, err := fmt.Fprintf(c.conn, "<iq type='result' from='%s' to='%s'"+
|
||||||
|
"id='%s' type='result'>\n", xmlEscape(fromU),
|
||||||
|
xmlEscape(toServer), xmlEscape(id))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tt := time.Now().Sub(c.loginTime)
|
||||||
|
_, err = fmt.Fprintf(c.conn, "<query xmlns='jabber:iq:last' "+
|
||||||
|
"seconds='%d'>Working</query>\n</iq>", int(tt.Seconds()))
|
||||||
|
return err
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user