[NEW] implemented XEP-0030 (Service Discovery) — you can now see transport in service discovery
[NEW] implemented XEP-0077 (In-Band Registration) — now you can also start session from GUI Jabber client
[NEW] implemented XEP-0100 iq:jabber:gateway — you can now add Telegram contact from your GUI Jabber client
[NEW] implemented presence cache. now sending presences once a minute to prevent presence flooding
[FIX] fixed online presence after establishing telegram session and offline after disposing session
[FIX] won't use tdlib message database anymore, implemented our own messages cache
[FIX] show "chat created" message correctly
[FIX] fixed /info command
[FIX] fixed closing secret chats
[UPD] now you can start secret chat directly by sending /secret to contact
[UPD] /debug renamed to /info, now shows active sesions, removed memory profiling as it does not helps
[UPD] removed main loop (but still shutting down correctly) — use systemd etc. to restart transport correctly
query=(delete)?"DELETE FROM users where jid = '%s';"%jid.to_s:"INSERT OR REPLACE INTO users(jid, login) VALUES('%s', '%s');"%[jid.to_s,@sessions[jid].login.to_s]
query=(delete)?"DELETE FROM users where jid = '%s';"%jid.to_s:"INSERT OR REPLACE INTO users(jid, login) VALUES('%s', '%s');"%[jid.to_s,login]
@logger.info'Received message from <%s> to <%s>'%[msg.from.to_s,msg.to.to_s]
@logger.debugmsg.to_s
ifmsg.to==@@transport.jidthenself.process_command(msg.from,msg.first_element_text('body'));return;end# treat message as internal command if received as transport jid
ifmsg.to==@component.jidthenself.process_command(msg.from,msg.first_element_text('body'));return;end# treat message as internal command if received as transport jid
if@sessions.key?msg.from.bare.to_sthenself.request_tz(msg.from)ifnot@sessions[msg.from.bare.to_s].tz_set?;@sessions[msg.from.bare.to_s].process_outgoing_msg(msg.to.to_s.split('@')[0].to_i,msg.first_element_text('body'));return;end#if @sessions.key? msg.from.bare.to_s and @sessions[msg.from.bare.to_s].online? # queue message for processing session is active for jid from
end
@ -149,9 +172,9 @@ class XMPPComponent
defpresence_handler(prsnc)
@logger.debug"Received presence :%s from <%s> to <%s>"%[prsnc.type.to_s,prsnc.from.to_s,prsnc.to.to_s]
@logger.debug(prsnc.to_s)
ifprsnc.type==:subscribethenreply=prsnc.answer(false);reply.type=:subscribed;@@transport.send(reply);end# send "subscribed" reply to "subscribe" presence
ifprsnc.to==@@transport.jidand@sessions.key?prsnc.from.bare.to_sandprsnc.type==:unavailablethen@sessions[prsnc.from.bare.to_s].disconnect();return;end# go offline when received offline presence from jabber user
ifprsnc.to==@@transport.jidand@sessions.key?prsnc.from.bare.to_sthenself.request_tz(prsnc.from);@sessions[prsnc.from.bare.to_s].connect();return;end# connect if we have session
ifprsnc.type==:subscribethenreply=prsnc.answer(false);reply.type=:subscribed;@component.send(reply);end# send "subscribed" reply to "subscribe" presence
ifprsnc.to==@component.jidand@sessions.key?prsnc.from.bare.to_sandprsnc.type==:unavailablethen@sessions[prsnc.from.bare.to_s].disconnect();return;end# go offline when received offline presence from jabber user
ifprsnc.to==@component.jidand@sessions.key?prsnc.from.bare.to_sthenself.request_tz(prsnc.from);@sessions[prsnc.from.bare.to_s].connect();return;end# connect if we have session