import (
xmpp "code.google.com/p/goexmpp"
- "log"
"crypto/tls"
"os"
"time"
"path"
)
-type StdLogger struct {
-}
+//~ type StdLogger struct {
+//~ }
-func (s *StdLogger) Log(v ...interface{}) {
- log.Println(v...)
-}
+//~ func (s *StdLogger) Log(v ...interface{}) {
+ //~ log.Println(v...)
+//~ }
-func (s *StdLogger) Logf(fmt string, v ...interface{}) {
- log.Printf(fmt, v...)
-}
+//~ func (s *StdLogger) Logf(fmt string, v ...interface{}) {
+ //~ log.Printf(fmt, v...)
+//~ }
func (botdata *XmppBot) makeXMPPMessage(to string, message interface{}, subject interface{}) *xmpp.Message {
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 {
- log.Println(err)
+ Syslog_.Println(err)
return
}
}
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 {
- log.Println(err)
+ Syslog_.Println(err)
return
}
for to, jiddata := range data {
defer func() {
if x := recover(); x != nil {
- log.Printf("handleEventsforXMPP: run time panic: %v", x)
+ Syslog_.Printf("handleEventsforXMPP: run time panic: %v", x)
}
}()
for {
select {
case pe := <-presence_events:
+ Debug_.Printf("handleEventsforXMPP<-presence_events: %T %+v", pe, pe)
switch pec := pe.(type) {
case xmpp.Stanza:
xmppout <- pec
}
case je := <-jabber_events:
+ Debug_.Printf("handleEventsforXMPP<-jabber_events: %T %+v", je, je)
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 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
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
}
bodytext :=inmsg.Body.Chardata
- //~ log.Println("Message Body:", bodytext)
if botdata.isAuthenticated(inmsg.GetHeader().From) {
switch bodytext {
case "on", "*on*":
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)
}
}()
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
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 {
- log.Println("'Error StartSession:", err)
+ Syslog_.Println("'Error StartSession:", err)
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", "","")
}