you can now disable keepalives; we know now if keepalive disconnected us; experts can change the seconds for keepalive stuff
This commit is contained in:
parent
ad05a9d1de
commit
d29bbbee55
|
@ -131,6 +131,13 @@ class Config:
|
||||||
'sync_with_global_status': [ opt_bool, False ],
|
'sync_with_global_status': [ opt_bool, False ],
|
||||||
'no_log_for': [ opt_str, '' ],
|
'no_log_for': [ opt_str, '' ],
|
||||||
'attached_gpg_keys': [ opt_str, '' ],
|
'attached_gpg_keys': [ opt_str, '' ],
|
||||||
|
'keep_alives_enabled': [ opt_bool, True],
|
||||||
|
# send keepalive every 60 seconds of inactivity
|
||||||
|
'keep_alive_every_foo_secs': [ opt_int, 60 ],
|
||||||
|
# disconnect if 2 minutes have passed and server didn't reply
|
||||||
|
'keep_alive_disconnect_secs': [ opt_int, 120 ],
|
||||||
|
# try for 2 minutes before giving up (aka. timeout after those seconds)
|
||||||
|
'try_connecting_for_foo_secs': [ opt_int, 120 ],
|
||||||
}, {}),
|
}, {}),
|
||||||
'statusmsg': ({
|
'statusmsg': ({
|
||||||
'message': [ opt_str, '' ],
|
'message': [ opt_str, '' ],
|
||||||
|
|
|
@ -127,8 +127,8 @@ class Connection:
|
||||||
self.myVCardID = []
|
self.myVCardID = []
|
||||||
self.bookmarks = []
|
self.bookmarks = []
|
||||||
self.on_purpose = False
|
self.on_purpose = False
|
||||||
self._lastIncome = time.time()
|
self.last_incoming = time.time()
|
||||||
self._natSent = False
|
self.keep_alive_sent = False
|
||||||
self.password = gajim.config.get_per('accounts', name, 'password')
|
self.password = gajim.config.get_per('accounts', name, 'password')
|
||||||
if USE_GPG:
|
if USE_GPG:
|
||||||
self.gpg = GnuPG.GnuPG()
|
self.gpg = GnuPG.GnuPG()
|
||||||
|
@ -597,8 +597,8 @@ class Connection:
|
||||||
self.dispatch('ERROR_ANSWER', (jid_from, errmsg, errcode))
|
self.dispatch('ERROR_ANSWER', (jid_from, errmsg, errcode))
|
||||||
|
|
||||||
def _StanzaArrivedCB(self, con, obj):
|
def _StanzaArrivedCB(self, con, obj):
|
||||||
self._lastIncome = time.time()
|
self.last_incoming = time.time()
|
||||||
self._natSent = False
|
self.keep_alive_sent = False
|
||||||
|
|
||||||
def _event_dispatcher(self, realm, event, data):
|
def _event_dispatcher(self, realm, event, data):
|
||||||
if realm == common.xmpp.NS_REGISTER:
|
if realm == common.xmpp.NS_REGISTER:
|
||||||
|
@ -612,6 +612,8 @@ class Connection:
|
||||||
hostname = gajim.config.get_per('accounts', self.name, 'hostname')
|
hostname = gajim.config.get_per('accounts', self.name, 'hostname')
|
||||||
resource = gajim.config.get_per('accounts', self.name, 'resource')
|
resource = gajim.config.get_per('accounts', self.name, 'resource')
|
||||||
usessl = gajim.config.get_per('accounts', self.name, 'usessl')
|
usessl = gajim.config.get_per('accounts', self.name, 'usessl')
|
||||||
|
try_connecting_for_foo_secs = gajim.config.get_per('accounts', self.name,
|
||||||
|
'try_connecting_for_foo_secs')
|
||||||
|
|
||||||
#create connection if it doesn't already exist
|
#create connection if it doesn't already exist
|
||||||
if self.connection:
|
if self.connection:
|
||||||
|
@ -629,7 +631,7 @@ class Connection:
|
||||||
con = common.xmpp.Client(hostname)
|
con = common.xmpp.Client(hostname)
|
||||||
else:
|
else:
|
||||||
con = common.xmpp.Client(hostname, debug = [])
|
con = common.xmpp.Client(hostname, debug = [])
|
||||||
common.xmpp.dispatcher.DefaultTimeout = 45 # wait 45 seconds until you timeout connection
|
common.xmpp.dispatcher.DefaultTimeout = try_connecting_for_foo_secs
|
||||||
con.UnregisterDisconnectHandler(con.DisconnectHandler)
|
con.UnregisterDisconnectHandler(con.DisconnectHandler)
|
||||||
con.RegisterDisconnectHandler(self._disconnectedCB)
|
con.RegisterDisconnectHandler(self._disconnectedCB)
|
||||||
|
|
||||||
|
@ -1157,21 +1159,36 @@ class Connection:
|
||||||
q = iq.setTag(common.xmpp.NS_REGISTER + ' query').setTag('remove')
|
q = iq.setTag(common.xmpp.NS_REGISTER + ' query').setTag('remove')
|
||||||
self.connection.send(iq)
|
self.connection.send(iq)
|
||||||
|
|
||||||
|
def send_keepalive(self):
|
||||||
|
# we received nothing for the last foo seconds (60 secs by default)
|
||||||
|
hostname = gajim.config.get_per('accounts', self.name,
|
||||||
|
'hostname')
|
||||||
|
iq = common.xmpp.Iq('get', common.xmpp.NS_LAST, to = hostname)
|
||||||
|
self.connection.send(iq)
|
||||||
|
self.keep_alive_sent = True
|
||||||
|
|
||||||
def process(self, timeout):
|
def process(self, timeout):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
if self.connected:
|
if self.connected:
|
||||||
try:
|
try:
|
||||||
if time.time() > (self._lastIncome + 60) and not self._natSent:
|
if gajim.config.get_per('accounts', self.name,
|
||||||
# we received nothing since 1 minute
|
'keep_alives_enabled'): # do we want keepalives?
|
||||||
hostname = gajim.config.get_per('accounts', self.name,
|
keep_alive_every_foo_secs = gajim.config.get_per('accounts',
|
||||||
'hostname')
|
self.name,'keep_alive_every_foo_secs')
|
||||||
iq = common.xmpp.Iq('get', common.xmpp.NS_LAST, to = hostname)
|
if time.time() > (self.last_incoming + keep_alive_every_foo_secs)\
|
||||||
self.connection.send(iq)
|
and not self.keep_alive_sent: #should we send keepalive?
|
||||||
self._natSent = True
|
self.send_keepalive()
|
||||||
if time.time() > self._lastIncome + 105: #1 min + 45 sec for answer
|
return
|
||||||
self.connection.disconnect()
|
|
||||||
return
|
# did the server reply to the keepalive? if no disconnect
|
||||||
|
keep_alive_disconnect_secs = gajim.config.get_per('accounts',
|
||||||
|
self.name, 'keep_alive_disconnect_secs') # 2 mins by default
|
||||||
|
if time.time() > (self.last_incoming + keep_alive_disconnect_secs):
|
||||||
|
self.connection.disconnect() # disconnect if no answer
|
||||||
|
msg = str(keep_alive_disconnect_secs) +\
|
||||||
|
' seconds have passed and server did not reply to our keepalive. Gajim disconnected from ' + self.name
|
||||||
|
gajim.log.debug(msg)
|
||||||
self.connection.Process(timeout)
|
self.connection.Process(timeout)
|
||||||
except:
|
except:
|
||||||
gajim.log.debug('error appeared while processing xmpp:')
|
gajim.log.debug('error appeared while processing xmpp:')
|
||||||
|
|
|
@ -1311,6 +1311,11 @@ _('There was a problem retrieving your GPG secret keys.')).get_response()
|
||||||
else:
|
else:
|
||||||
self.xml.get_widget('custom_port_entry').set_text('5222')
|
self.xml.get_widget('custom_port_entry').set_text('5222')
|
||||||
|
|
||||||
|
def on_send_keepalive_checkbutton_toggled(self, widget):
|
||||||
|
isactive = widget.get_active()
|
||||||
|
gajim.config.set_per('accounts', self.account,
|
||||||
|
'keep_alives_enabled', isactive)
|
||||||
|
|
||||||
def on_custom_host_port_checkbutton_toggled(self, widget):
|
def on_custom_host_port_checkbutton_toggled(self, widget):
|
||||||
isactive = widget.get_active()
|
isactive = widget.get_active()
|
||||||
self.xml.get_widget('custom_host_port_hbox').set_sensitive(isactive)
|
self.xml.get_widget('custom_host_port_hbox').set_sensitive(isactive)
|
||||||
|
|
|
@ -1338,6 +1338,27 @@
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
|
<child>
|
||||||
|
<widget class="GtkCheckButton" id="send_keepalive_checkbutton">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="tooltip" translatable="yes">If checked, Gajim will send keep-alive packets so it prevents connection timeout which results in disconnection</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="label" translatable="yes">Send keep-alive packets</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||||
|
<property name="focus_on_click">True</property>
|
||||||
|
<property name="active">True</property>
|
||||||
|
<property name="inconsistent">False</property>
|
||||||
|
<property name="draw_indicator">True</property>
|
||||||
|
<signal name="toggled" handler="on_send_keepalive_checkbutton_toggled" last_modification_time="Sat, 25 Jun 2005 21:29:56 GMT"/>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="padding">0</property>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkCheckButton" id="custom_host_port_checkbutton">
|
<widget class="GtkCheckButton" id="custom_host_port_checkbutton">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
Loading…
Reference in New Issue