projects
/
svn42.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
distribute DoorProblemEvent
[svn42.git]
/
go
/
r3-netstatus
/
r3xmppbot
/
r3xmppbot.go
diff --git
a/go/r3-netstatus/r3xmppbot/r3xmppbot.go
b/go/r3-netstatus/r3xmppbot/r3xmppbot.go
index
3e6f210
..
293be18
100644
(file)
--- a/
go/r3-netstatus/r3xmppbot/r3xmppbot.go
+++ b/
go/r3-netstatus/r3xmppbot/r3xmppbot.go
@@
-4,7
+4,6
@@
package r3xmppbot
import (
xmpp "code.google.com/p/goexmpp"
import (
xmpp "code.google.com/p/goexmpp"
- "log"
"crypto/tls"
"os"
"time"
"crypto/tls"
"os"
"time"
@@
-143,13
+142,13
@@
type XmppBot struct {
func (data RealraumXmppNotifierConfig) saveTo(filepath string) () {
fh, err := os.Create(filepath)
if err != nil {
func (data RealraumXmppNotifierConfig) saveTo(filepath string) () {
fh, err := os.Create(filepath)
if err != nil {
- log.Println(err)
+ Syslog_.Println(err)
return
}
defer fh.Close()
enc := json.NewEncoder(fh)
if err = enc.Encode(&data); err != nil {
return
}
defer fh.Close()
enc := json.NewEncoder(fh)
if err = enc.Encode(&data); err != nil {
- log.Println(err)
+ Syslog_.Println(err)
return
}
}
return
}
}
@@
-157,13
+156,13
@@
func (data RealraumXmppNotifierConfig) saveTo(filepath string) () {
func (data RealraumXmppNotifierConfig) loadFrom(filepath string) () {
fh, err := os.Open(filepath)
if err != nil {
func (data RealraumXmppNotifierConfig) loadFrom(filepath string) () {
fh, err := os.Open(filepath)
if err != nil {
- log.Println(err)
+ Syslog_.Println(err)
return
}
defer fh.Close()
dec := json.NewDecoder(fh)
if err = dec.Decode(&data); err != nil {
return
}
defer fh.Close()
dec := json.NewDecoder(fh)
if err = dec.Decode(&data); err != nil {
- log.Println(err)
+ Syslog_.Println(err)
return
}
for to, jiddata := range data {
return
}
for to, jiddata := range data {
@@
-185,13
+184,16
@@
func (botdata *XmppBot) handleEventsforXMPP(xmppout chan <- xmpp.Stanza, presenc
defer func() {
if x := recover(); x != nil {
defer func() {
if x := recover(); x != nil {
- log.Printf("handleEventsforXMPP: run time panic: %v", x)
+ Syslog_.Printf("handleEventsforXMPP: run time panic: %v", x)
+ //FIXME: signal that xmpp bot has crashed
}
}()
for {
select {
}
}()
for {
select {
- case pe := <-presence_events:
+ case pe, pe_still_open := <-presence_events:
+ if ! pe_still_open { break }
+ Debug_.Printf("handleEventsforXMPP<-presence_events: %T %+v", pe, pe)
switch pec := pe.(type) {
case xmpp.Stanza:
xmppout <- pec
switch pec := pe.(type) {
case xmpp.Stanza:
xmppout <- pec
@@
-219,11
+221,20
@@
func (botdata *XmppBot) handleEventsforXMPP(xmppout chan <- xmpp.Stanza, presenc
break
}
break
}
- case je := <-jabber_events:
+ case je, je_still_open := <-jabber_events:
+ if ! je_still_open { break }
+ Debug_.Printf("handleEventsforXMPP<-jabber_events: %T %+v", je, je)
simple_jid := removeJIDResource(je.JID)
jid_data, jid_in_map := botdata.realraum_jids_[simple_jid]
simple_jid := removeJIDResource(je.JID)
jid_data, jid_in_map := botdata.realraum_jids_[simple_jid]
+
+ //send status if requested, even if user never changed any settings and thus is not in map
+ if last_status_msg != nil && je.StatusNow {
+ xmppout <- botdata.makeXMPPMessage(je.JID, last_status_msg, nil)
+ }
+
if jid_in_map {
if jid_in_map {
- if last_status_msg != nil && (je.StatusNow || (! jid_data.Online && je.Online && jid_data.Wants == R3OnlineOnlyWithRecapInfo) ) {
+ //if R3OnlineOnlyWithRecapInfo, we want a status update when coming online
+ if last_status_msg != nil && ! jid_data.Online && je.Online && jid_data.Wants == R3OnlineOnlyWithRecapInfo {
xmppout <- botdata.makeXMPPMessage(je.JID, last_status_msg, nil)
}
jid_data.Online = je.Online
xmppout <- botdata.makeXMPPMessage(je.JID, last_status_msg, nil)
}
jid_data.Online = je.Online
@@
-249,7
+260,6
@@
func removeJIDResource(jid string) string {
func (botdata *XmppBot) isAuthenticated(jid string) bool {
authtime, in_map := botdata.jid_lastauthtime_[jid]
func (botdata *XmppBot) isAuthenticated(jid string) bool {
authtime, in_map := botdata.jid_lastauthtime_[jid]
- //~ log.Println("isAuthenticated", in_map, authtime, time.Now().Unix(), auth_timeout_, time.Now().Unix() - authtime > auth_timeout_)
return in_map && time.Now().Unix() - authtime < botdata.auth_timeout_
}
return in_map && time.Now().Unix() - authtime < botdata.auth_timeout_
}
@@
-263,7
+273,6
@@
func (botdata *XmppBot) handleIncomingMessageDialog(inmsg xmpp.Message, xmppout
return
}
bodytext :=inmsg.Body.Chardata
return
}
bodytext :=inmsg.Body.Chardata
- //~ log.Println("Message Body:", bodytext)
if botdata.isAuthenticated(inmsg.GetHeader().From) {
switch bodytext {
case "on", "*on*":
if botdata.isAuthenticated(inmsg.GetHeader().From) {
switch bodytext {
case "on", "*on*":
@@
-316,7
+325,7
@@
func (botdata *XmppBot) handleIncomingXMPPStanzas(xmppin <- chan xmpp.Stanza, xm
defer func() {
if x := recover(); x != nil {
defer func() {
if x := recover(); x != nil {
- log.Printf("handleIncomingXMPPStanzas: run time panic: %v", x)
+ Syslog_.Printf("handleIncomingXMPPStanzas: run time panic: %v", x)
close(jabber_events)
}
}()
close(jabber_events)
}
}()
@@
-367,8
+376,6
@@
func NewStartedBot(loginjid, loginpwd, password, state_save_dir string, insecure
botdata.config_file_ = path.Join(state_save_dir, "r3xmpp."+removeJIDResource(loginjid)+".json")
botdata.config_file_ = path.Join(state_save_dir, "r3xmpp."+removeJIDResource(loginjid)+".json")
- //~ log.Println(botdata.config_file_)
-
//~ logger := &StdLogger{}
//~ xmpp.Debug = logger
//~ xmpp.Info = logger
//~ logger := &StdLogger{}
//~ xmpp.Debug = logger
//~ xmpp.Info = logger
@@
-381,18
+388,19
@@
func NewStartedBot(loginjid, loginpwd, password, state_save_dir string, insecure
client_jid.Set(botdata.my_jid_)
botdata.xmppclient_, err = xmpp.NewClient(client_jid, botdata.my_login_password_, nil)
if err != nil {
client_jid.Set(botdata.my_jid_)
botdata.xmppclient_, err = xmpp.NewClient(client_jid, botdata.my_login_password_, nil)
if err != nil {
- log.Println("Error connecting to xmpp server", err)
+ Syslog_.Println("Error connecting to xmpp server", err)
return nil, nil, err
}
err = botdata.xmppclient_.StartSession(true, &xmpp.Presence{})
if err != nil {
return nil, nil, err
}
err = botdata.xmppclient_.StartSession(true, &xmpp.Presence{})
if err != nil {
- log.Println("'Error StartSession:", err)
+ Syslog_.Println("'Error StartSession:", err)
return nil, nil, err
}
roster := xmpp.Roster(botdata.xmppclient_)
for _, entry := range roster {
return nil, nil, err
}
roster := xmpp.Roster(botdata.xmppclient_)
for _, entry := range roster {
+ Debug_.Print(entry)
if entry.Subscription == "from" {
botdata.xmppclient_.Out <- botdata.makeXMPPPresence(entry.Jid, "subscribe", "","")
}
if entry.Subscription == "from" {
botdata.xmppclient_.Out <- botdata.makeXMPPPresence(entry.Jid, "subscribe", "","")
}