don't send more than 5 (by default) stanza per seconde
This commit is contained in:
parent
6a4214fcab
commit
acf31c1585
|
@ -138,6 +138,7 @@ class Config:
|
||||||
'keep_alive_disconnect_secs': [ opt_int, 120 ],
|
'keep_alive_disconnect_secs': [ opt_int, 120 ],
|
||||||
# try for 2 minutes before giving up (aka. timeout after those seconds)
|
# try for 2 minutes before giving up (aka. timeout after those seconds)
|
||||||
'try_connecting_for_foo_secs': [ opt_int, 120 ],
|
'try_connecting_for_foo_secs': [ opt_int, 120 ],
|
||||||
|
'max_stanza_per_sec': [ opt_int, 5],
|
||||||
}, {}),
|
}, {}),
|
||||||
'statusmsg': ({
|
'statusmsg': ({
|
||||||
'message': [ opt_str, '' ],
|
'message': [ opt_str, '' ],
|
||||||
|
|
|
@ -101,7 +101,8 @@ def get_os_info():
|
||||||
# sourcemage_version has all the info we need
|
# sourcemage_version has all the info we need
|
||||||
if not os.path.basename(path_to_file).startswith('sourcemage'):
|
if not os.path.basename(path_to_file).startswith('sourcemage'):
|
||||||
text = distro_name + ' ' + text
|
text = distro_name + ' ' + text
|
||||||
elif path_to_file.endswith('aurox-release'): # file doesn't have version
|
elif path_to_file.endswith('aurox-release'):
|
||||||
|
# file doesn't have version
|
||||||
text = distro_name
|
text = distro_name
|
||||||
elif path_to_file.endswith('lfs-release'): # file just has version
|
elif path_to_file.endswith('lfs-release'): # file just has version
|
||||||
text = distro_name + ' ' + text
|
text = distro_name + ' ' + text
|
||||||
|
@ -130,6 +131,8 @@ class Connection:
|
||||||
self.on_purpose = False
|
self.on_purpose = False
|
||||||
self.last_incoming = time.time()
|
self.last_incoming = time.time()
|
||||||
self.keep_alive_sent = False
|
self.keep_alive_sent = False
|
||||||
|
self.to_be_sent = []
|
||||||
|
self.last_sent = []
|
||||||
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()
|
||||||
|
@ -151,7 +154,7 @@ class Connection:
|
||||||
iq = common.xmpp.Iq(typ = 'get', to = jid, queryNS = ns)
|
iq = common.xmpp.Iq(typ = 'get', to = jid, queryNS = ns)
|
||||||
if node:
|
if node:
|
||||||
iq.setQuerynode(node)
|
iq.setQuerynode(node)
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def discoverItems(self, jid, node = None):
|
def discoverItems(self, jid, node = None):
|
||||||
'''According to JEP-0030: jid is mandatory,
|
'''According to JEP-0030: jid is mandatory,
|
||||||
|
@ -279,10 +282,12 @@ class Connection:
|
||||||
gajim.log.debug('subscribe request from %s' % who)
|
gajim.log.debug('subscribe request from %s' % who)
|
||||||
if gajim.config.get('alwaysauth') or who.find("@") <= 0:
|
if gajim.config.get('alwaysauth') or who.find("@") <= 0:
|
||||||
if self.connection:
|
if self.connection:
|
||||||
self.connection.send(common.xmpp.Presence(who, 'subscribed'))
|
self.to_be_sent.insert(0, common.xmpp.Presence(who,
|
||||||
|
'subscribed'))
|
||||||
if who.find("@") <= 0:
|
if who.find("@") <= 0:
|
||||||
self.dispatch('NOTIFY', (prs.getFrom().getStripped().encode('utf8'), \
|
self.dispatch('NOTIFY',
|
||||||
'offline', 'offline', prs.getFrom().getResource().encode('utf8'), prio, \
|
(prs.getFrom().getStripped().encode('utf8'), 'offline',
|
||||||
|
'offline', prs.getFrom().getResource().encode('utf8'), prio,
|
||||||
keyID, None, None, None, None, None, None))
|
keyID, None, None, None, None, None, None))
|
||||||
else:
|
else:
|
||||||
if not status:
|
if not status:
|
||||||
|
@ -290,9 +295,10 @@ class Connection:
|
||||||
self.dispatch('SUBSCRIBE', (who, status))
|
self.dispatch('SUBSCRIBE', (who, status))
|
||||||
elif ptype == 'subscribed':
|
elif ptype == 'subscribed':
|
||||||
jid = prs.getFrom()
|
jid = prs.getFrom()
|
||||||
self.dispatch('SUBSCRIBED', (jid.getStripped().encode('utf8'), jid.getResource().encode('utf8')))
|
self.dispatch('SUBSCRIBED', (jid.getStripped().encode('utf8'),
|
||||||
self.dispatch('UPDUSER', (jid.getStripped().encode('utf8'), jid.getNode(), \
|
jid.getResource().encode('utf8')))
|
||||||
['General']))
|
self.dispatch('UPDUSER', (jid.getStripped().encode('utf8'),
|
||||||
|
jid.getNode(), ['General']))
|
||||||
#BE CAREFUL : no con.updateRosterItem() in a callback
|
#BE CAREFUL : no con.updateRosterItem() in a callback
|
||||||
gajim.log.debug('we are now subscribed to %s' % who)
|
gajim.log.debug('we are now subscribed to %s' % who)
|
||||||
elif ptype == 'unsubscribe':
|
elif ptype == 'unsubscribe':
|
||||||
|
@ -401,7 +407,7 @@ class Connection:
|
||||||
gajim.log.debug('DiscoverInfoErrorCB')
|
gajim.log.debug('DiscoverInfoErrorCB')
|
||||||
iq = common.xmpp.Iq(to = iq_obj.getFrom(), typ = 'get', queryNS =\
|
iq = common.xmpp.Iq(to = iq_obj.getFrom(), typ = 'get', queryNS =\
|
||||||
common.xmpp.NS_AGENTS)
|
common.xmpp.NS_AGENTS)
|
||||||
con.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def _DiscoverInfoCB(self, con, iq_obj):
|
def _DiscoverInfoCB(self, con, iq_obj):
|
||||||
gajim.log.debug('DiscoverInfoCB')
|
gajim.log.debug('DiscoverInfoCB')
|
||||||
|
@ -426,7 +432,7 @@ class Connection:
|
||||||
features.append(i.getAttr('var'))
|
features.append(i.getAttr('var'))
|
||||||
jid = str(iq_obj.getFrom())
|
jid = str(iq_obj.getFrom())
|
||||||
if not identities:
|
if not identities:
|
||||||
self.connection.send(common.xmpp.Iq(typ = 'get', queryNS = \
|
self.to_be_sent.insert(0, common.xmpp.Iq(typ = 'get', queryNS = \
|
||||||
common.xmpp.NS_AGENTS))
|
common.xmpp.NS_AGENTS))
|
||||||
else:
|
else:
|
||||||
self.dispatch('AGENT_INFO_INFO', (jid, node, identities, features))
|
self.dispatch('AGENT_INFO_INFO', (jid, node, identities, features))
|
||||||
|
@ -441,7 +447,7 @@ class Connection:
|
||||||
send_os = gajim.config.get('send_os_info')
|
send_os = gajim.config.get('send_os_info')
|
||||||
if send_os:
|
if send_os:
|
||||||
qp.setTagData('os', get_os_info())
|
qp.setTagData('os', get_os_info())
|
||||||
con.send(iq_obj)
|
self.to_be_sent.insert(0, iq_obj)
|
||||||
raise common.xmpp.NodeProcessed
|
raise common.xmpp.NodeProcessed
|
||||||
|
|
||||||
def _VersionResultCB(self, con, iq_obj):
|
def _VersionResultCB(self, con, iq_obj):
|
||||||
|
@ -540,11 +546,12 @@ class Connection:
|
||||||
for i in roster.keys():
|
for i in roster.keys():
|
||||||
props = roster[i]
|
props = roster[i]
|
||||||
if props.has_key('name') and props['name']:
|
if props.has_key('name') and props['name']:
|
||||||
props['name']=props['name'].encode('utf8')
|
props['name'] = props['name'].encode('utf8')
|
||||||
if props.has_key('groups') and props['groups']:
|
if props.has_key('groups') and props['groups']:
|
||||||
props['groups']= map(lambda e:e.encode('utf8'),props['groups'])
|
props['groups'] = map(lambda e:e.encode('utf8'), props['groups'])
|
||||||
if props.has_key('resources') and props['resources']:
|
if props.has_key('resources') and props['resources']:
|
||||||
props['resources']= map(lambda e:e.encode('utf8'),props['resources'])
|
props['resources'] = map(lambda e:e.encode('utf8'),
|
||||||
|
props['resources'])
|
||||||
del roster[i]
|
del roster[i]
|
||||||
roster[i.encode('utf8')] = props
|
roster[i.encode('utf8')] = props
|
||||||
|
|
||||||
|
@ -706,7 +713,8 @@ class Connection:
|
||||||
gajim.log.debug("Couldn't authenticate to %s" % self.name)
|
gajim.log.debug("Couldn't authenticate to %s" % self.name)
|
||||||
self.connected = 0
|
self.connected = 0
|
||||||
self.dispatch('STATUS', 'offline')
|
self.dispatch('STATUS', 'offline')
|
||||||
self.dispatch('ERROR', (_('Authentication failed with "%s"') % self.name,
|
self.dispatch('ERROR', (_('Authentication failed with "%s"') % \
|
||||||
|
self.name,
|
||||||
_('Please check your login and password for correctness.')))
|
_('Please check your login and password for correctness.')))
|
||||||
return None
|
return None
|
||||||
# END connect
|
# END connect
|
||||||
|
@ -749,7 +757,8 @@ class Connection:
|
||||||
signed = ''
|
signed = ''
|
||||||
keyID = gajim.config.get_per('accounts', self.name, 'keyid')
|
keyID = gajim.config.get_per('accounts', self.name, 'keyid')
|
||||||
if keyID and USE_GPG:
|
if keyID and USE_GPG:
|
||||||
if self.connected < 2 and self.gpg.passphrase == None: # We didn't set a passphrase
|
if self.connected < 2 and self.gpg.passphrase == None:
|
||||||
|
# We didn't set a passphrase
|
||||||
self.dispatch('ERROR', (_('OpenPGP Key was not given'),
|
self.dispatch('ERROR', (_('OpenPGP Key was not given'),
|
||||||
_('You will be connected to %s without OpenPGP.') % self.name))
|
_('You will be connected to %s without OpenPGP.') % self.name))
|
||||||
else:
|
else:
|
||||||
|
@ -828,7 +837,7 @@ class Connection:
|
||||||
msg_iq = common.xmpp.Message(to = jid, body = msgtxt, typ = 'chat')
|
msg_iq = common.xmpp.Message(to = jid, body = msgtxt, typ = 'chat')
|
||||||
if msgenc:
|
if msgenc:
|
||||||
msg_iq.setTag(common.xmpp.NS_ENCRYPTED + ' x').setData(msgenc)
|
msg_iq.setTag(common.xmpp.NS_ENCRYPTED + ' x').setData(msgenc)
|
||||||
self.connection.send(msg_iq)
|
self.to_be_sent.insert(0, msg_iq)
|
||||||
gajim.logger.write('outgoing', msg, jid)
|
gajim.logger.write('outgoing', msg, jid)
|
||||||
self.dispatch('MSGSENT', (jid, msg, keyID))
|
self.dispatch('MSGSENT', (jid, msg, keyID))
|
||||||
|
|
||||||
|
@ -840,17 +849,17 @@ class Connection:
|
||||||
if not msg:
|
if not msg:
|
||||||
msg = _('I would like to add you to my roster.')
|
msg = _('I would like to add you to my roster.')
|
||||||
pres.setStatus(msg)
|
pres.setStatus(msg)
|
||||||
self.connection.send(pres)
|
self.to_be_sent.insert(0, pres)
|
||||||
|
|
||||||
def send_authorization(self, jid):
|
def send_authorization(self, jid):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
self.connection.send(common.xmpp.Presence(jid, 'subscribed'))
|
self.to_be_sent.insert(0, common.xmpp.Presence(jid, 'subscribed'))
|
||||||
|
|
||||||
def refuse_authorization(self, jid):
|
def refuse_authorization(self, jid):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
self.connection.send(common.xmpp.Presence(jid, 'unsubscribed'))
|
self.to_be_sent.insert(0, common.xmpp.Presence(jid, 'unsubscribed'))
|
||||||
|
|
||||||
def unsubscribe(self, jid):
|
def unsubscribe(self, jid):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
|
@ -882,7 +891,7 @@ class Connection:
|
||||||
|
|
||||||
def request_agents(self, jid, node):
|
def request_agents(self, jid, node):
|
||||||
if self.connection:
|
if self.connection:
|
||||||
self.connection.send(common.xmpp.Iq(to = jid, typ = 'get',
|
self.to_be_sent.insert(0, common.xmpp.Iq(to = jid, typ = 'get',
|
||||||
queryNS = common.xmpp.NS_BROWSE))
|
queryNS = common.xmpp.NS_BROWSE))
|
||||||
self.discoverInfo(jid, node)
|
self.discoverInfo(jid, node)
|
||||||
|
|
||||||
|
@ -960,7 +969,7 @@ class Connection:
|
||||||
return
|
return
|
||||||
iq = common.xmpp.Iq(to=jid + '/' + resource, typ = 'get', queryNS =\
|
iq = common.xmpp.Iq(to=jid + '/' + resource, typ = 'get', queryNS =\
|
||||||
common.xmpp.NS_VERSION)
|
common.xmpp.NS_VERSION)
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def request_vcard(self, jid = None):
|
def request_vcard(self, jid = None):
|
||||||
'''request the VCARD and return the iq'''
|
'''request the VCARD and return the iq'''
|
||||||
|
@ -970,7 +979,7 @@ class Connection:
|
||||||
if jid:
|
if jid:
|
||||||
iq.setTo(jid)
|
iq.setTo(jid)
|
||||||
iq.setTag(common.xmpp.NS_VCARD + ' vCard')
|
iq.setTag(common.xmpp.NS_VCARD + ' vCard')
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
return iq
|
return iq
|
||||||
#('VCARD', {entry1: data, entry2: {entry21: data, ...}, ...})
|
#('VCARD', {entry1: data, entry2: {entry21: data, ...}, ...})
|
||||||
|
|
||||||
|
@ -993,7 +1002,7 @@ class Connection:
|
||||||
iq3.addChild(k).setData(j[k])
|
iq3.addChild(k).setData(j[k])
|
||||||
else:
|
else:
|
||||||
iq2.addChild(i).setData(vcard[i])
|
iq2.addChild(i).setData(vcard[i])
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def get_settings(self):
|
def get_settings(self):
|
||||||
''' Get Gajim settings as described in JEP 0049 '''
|
''' Get Gajim settings as described in JEP 0049 '''
|
||||||
|
@ -1002,7 +1011,7 @@ class Connection:
|
||||||
iq = common.xmpp.Iq(typ='get')
|
iq = common.xmpp.Iq(typ='get')
|
||||||
iq2 = iq.addChild(name='query', namespace='jabber:iq:private')
|
iq2 = iq.addChild(name='query', namespace='jabber:iq:private')
|
||||||
iq3 = iq2.addChild(name='gajim', namespace='gajim:prefs')
|
iq3 = iq2.addChild(name='gajim', namespace='gajim:prefs')
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def get_bookmarks(self):
|
def get_bookmarks(self):
|
||||||
''' Get Bookmarks from storage as described in JEP 0048 '''
|
''' Get Bookmarks from storage as described in JEP 0048 '''
|
||||||
|
@ -1012,7 +1021,7 @@ class Connection:
|
||||||
iq = common.xmpp.Iq(typ='get')
|
iq = common.xmpp.Iq(typ='get')
|
||||||
iq2 = iq.addChild(name="query", namespace="jabber:iq:private")
|
iq2 = iq.addChild(name="query", namespace="jabber:iq:private")
|
||||||
iq3 = iq2.addChild(name="storage", namespace="storage:bookmarks")
|
iq3 = iq2.addChild(name="storage", namespace="storage:bookmarks")
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def store_bookmarks(self):
|
def store_bookmarks(self):
|
||||||
''' Send bookmarks to the storage namespace '''
|
''' Send bookmarks to the storage namespace '''
|
||||||
|
@ -1028,14 +1037,13 @@ class Connection:
|
||||||
iq4.setAttr('name',bm['name'])
|
iq4.setAttr('name',bm['name'])
|
||||||
iq5 = iq4.setTagData('nick',bm['nick'])
|
iq5 = iq4.setTagData('nick',bm['nick'])
|
||||||
iq5 = iq4.setTagData('password',bm['password'])
|
iq5 = iq4.setTagData('password',bm['password'])
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
|
|
||||||
def send_agent_status(self, agent, ptype):
|
def send_agent_status(self, agent, ptype):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
p = common.xmpp.Presence(to = agent, typ = ptype)
|
p = common.xmpp.Presence(to = agent, typ = ptype)
|
||||||
self.connection.send(p)
|
self.to_be_sent.insert(0, p)
|
||||||
|
|
||||||
def join_gc(self, nick, room, server, password):
|
def join_gc(self, nick, room, server, password):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
|
@ -1049,30 +1057,30 @@ class Connection:
|
||||||
t = p.setTag(common.xmpp.NS_MUC + ' x')
|
t = p.setTag(common.xmpp.NS_MUC + ' x')
|
||||||
if password:
|
if password:
|
||||||
t.setTagData('password', password)
|
t.setTagData('password', password)
|
||||||
self.connection.send(p)
|
self.to_be_sent.insert(0, p)
|
||||||
|
|
||||||
def send_gc_message(self, jid, msg):
|
def send_gc_message(self, jid, msg):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
msg_iq = common.xmpp.Message(jid, msg, typ = 'groupchat')
|
msg_iq = common.xmpp.Message(jid, msg, typ = 'groupchat')
|
||||||
self.connection.send(msg_iq)
|
self.to_be_sent.insert(0, msg_iq)
|
||||||
self.dispatch('MSGSENT', (jid, msg))
|
self.dispatch('MSGSENT', (jid, msg))
|
||||||
|
|
||||||
def send_gc_subject(self, jid, subject):
|
def send_gc_subject(self, jid, subject):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
msg_iq = common.xmpp.Message(jid,typ = 'groupchat', subject = subject)
|
msg_iq = common.xmpp.Message(jid,typ = 'groupchat', subject = subject)
|
||||||
self.connection.send(msg_iq)
|
self.to_be_sent.insert(0, msg_iq)
|
||||||
|
|
||||||
def request_gc_config(self, room_jid):
|
def request_gc_config(self, room_jid):
|
||||||
iq = common.xmpp.Iq(typ = 'get', queryNS = common.xmpp.NS_MUC_OWNER,
|
iq = common.xmpp.Iq(typ = 'get', queryNS = common.xmpp.NS_MUC_OWNER,
|
||||||
to = room_jid)
|
to = room_jid)
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def change_gc_nick(self, room_jid, nick):
|
def change_gc_nick(self, room_jid, nick):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
self.connection.send(common.xmpp.Presence(to = '%s/%s' % (room_jid,
|
self.to_be_sent.insert(0, common.xmpp.Presence(to = '%s/%s' % (room_jid,
|
||||||
nick)))
|
nick)))
|
||||||
|
|
||||||
def send_gc_status(self, nick, jid, show, status):
|
def send_gc_status(self, nick, jid, show, status):
|
||||||
|
@ -1084,7 +1092,7 @@ class Connection:
|
||||||
show = None
|
show = None
|
||||||
if show == 'online':
|
if show == 'online':
|
||||||
show = None
|
show = None
|
||||||
self.connection.send(common.xmpp.Presence(to = '%s/%s' % (jid, nick),
|
self.to_be_sent.insert(0, common.xmpp.Presence(to = '%s/%s' % (jid, nick),
|
||||||
typ = ptype, show = show, status = status))
|
typ = ptype, show = show, status = status))
|
||||||
|
|
||||||
def gc_set_role(self, room_jid, nick, role):
|
def gc_set_role(self, room_jid, nick, role):
|
||||||
|
@ -1095,7 +1103,7 @@ class Connection:
|
||||||
item = iq.getTag('query').setTag('item')
|
item = iq.getTag('query').setTag('item')
|
||||||
item.setAttr('nick', nick)
|
item.setAttr('nick', nick)
|
||||||
item.setAttr('role', role)
|
item.setAttr('role', role)
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def gc_set_affiliation(self, room_jid, jid, affiliation):
|
def gc_set_affiliation(self, room_jid, jid, affiliation):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
|
@ -1105,7 +1113,7 @@ class Connection:
|
||||||
item = iq.getTag('query').setTag('item')
|
item = iq.getTag('query').setTag('item')
|
||||||
item.setAttr('jid', jid)
|
item.setAttr('jid', jid)
|
||||||
item.setAttr('affiliation', affiliation)
|
item.setAttr('affiliation', affiliation)
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def send_gc_config(self, room_jid, config):
|
def send_gc_config(self, room_jid, config):
|
||||||
iq = common.xmpp.Iq(typ = 'set', to = room_jid, queryNS =\
|
iq = common.xmpp.Iq(typ = 'set', to = room_jid, queryNS =\
|
||||||
|
@ -1132,7 +1140,7 @@ class Connection:
|
||||||
val = '1'
|
val = '1'
|
||||||
tag.setTagData('value', val)
|
tag.setTagData('value', val)
|
||||||
i += 1
|
i += 1
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def gpg_passphrase(self, passphrase):
|
def gpg_passphrase(self, passphrase):
|
||||||
if USE_GPG:
|
if USE_GPG:
|
||||||
|
@ -1158,7 +1166,7 @@ class Connection:
|
||||||
q = iq.setTag(common.xmpp.NS_REGISTER + ' query')
|
q = iq.setTag(common.xmpp.NS_REGISTER + ' query')
|
||||||
q.setTagData('username',username)
|
q.setTagData('username',username)
|
||||||
q.setTagData('password',password)
|
q.setTagData('password',password)
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def unregister_account(self):
|
def unregister_account(self):
|
||||||
if self.connected == 0:
|
if self.connected == 0:
|
||||||
|
@ -1167,33 +1175,47 @@ class Connection:
|
||||||
hostname = gajim.config.get_per('accounts', self.name, 'hostname')
|
hostname = gajim.config.get_per('accounts', self.name, 'hostname')
|
||||||
iq = common.xmpp.Iq(typ = 'set', to = hostname)
|
iq = common.xmpp.Iq(typ = 'set', to = hostname)
|
||||||
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.to_be_sent.insert(0, iq)
|
||||||
|
|
||||||
def send_keepalive(self):
|
def send_keepalive(self):
|
||||||
# we received nothing for the last foo seconds (60 secs by default)
|
# we received nothing for the last foo seconds (60 secs by default)
|
||||||
hostname = gajim.config.get_per('accounts', self.name,
|
hostname = gajim.config.get_per('accounts', self.name,
|
||||||
'hostname')
|
'hostname')
|
||||||
iq = common.xmpp.Iq('get', common.xmpp.NS_LAST, to = hostname)
|
iq = common.xmpp.Iq('get', common.xmpp.NS_LAST, to = hostname)
|
||||||
self.connection.send(iq)
|
self.to_be_sent.insert(0, iq)
|
||||||
self.keep_alive_sent = True
|
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:
|
||||||
|
now = time.time()
|
||||||
|
l = []
|
||||||
|
for t in self.last_sent:
|
||||||
|
if (now - t) < 1:
|
||||||
|
l.append(t)
|
||||||
|
self.last_sent = l
|
||||||
|
t_limit = time.time() + timeout
|
||||||
|
while time.time() < t_limit and len(self.to_be_sent) and \
|
||||||
|
len(self.last_sent) < gajim.config.get_per('accounts',
|
||||||
|
self.name, 'max_stanza_per_sec'):
|
||||||
|
self.connection.send(self.to_be_sent.pop())
|
||||||
|
self.last_sent.append(time.time())
|
||||||
try:
|
try:
|
||||||
if gajim.config.get_per('accounts', self.name,
|
if gajim.config.get_per('accounts', self.name,
|
||||||
'keep_alives_enabled'): # do we want keepalives?
|
'keep_alives_enabled'): # do we want keepalives?
|
||||||
keep_alive_every_foo_secs = gajim.config.get_per('accounts',
|
keep_alive_every_foo_secs = gajim.config.get_per('accounts',
|
||||||
self.name,'keep_alive_every_foo_secs')
|
self.name,'keep_alive_every_foo_secs')
|
||||||
if time.time() > (self.last_incoming + keep_alive_every_foo_secs)\
|
#should we send keepalive?
|
||||||
and not self.keep_alive_sent: #should we send keepalive?
|
if time.time() > (self.last_incoming + \
|
||||||
|
keep_alive_every_foo_secs) and not self.keep_alive_sent:
|
||||||
self.send_keepalive()
|
self.send_keepalive()
|
||||||
|
|
||||||
# did the server reply to the keepalive? if no disconnect
|
# did the server reply to the keepalive? if no disconnect
|
||||||
keep_alive_disconnect_secs = gajim.config.get_per('accounts',
|
keep_alive_disconnect_secs = gajim.config.get_per('accounts',
|
||||||
self.name, 'keep_alive_disconnect_secs') # 2 mins by default
|
self.name, 'keep_alive_disconnect_secs') # 2 mins by default
|
||||||
if time.time() > (self.last_incoming + keep_alive_disconnect_secs):
|
if time.time() > (self.last_incoming + \
|
||||||
|
keep_alive_disconnect_secs):
|
||||||
self.connection.disconnect() # disconnect if no answer
|
self.connection.disconnect() # disconnect if no answer
|
||||||
msg = '%s seconds have passed and server did not reply to our keepalive. Gajim disconnected from %s' % (str(keep_alive_disconnect_secs), self.name)
|
msg = '%s seconds have passed and server did not reply to our keepalive. Gajim disconnected from %s' % (str(keep_alive_disconnect_secs), self.name)
|
||||||
gajim.log.debug(msg)
|
gajim.log.debug(msg)
|
||||||
|
|
Loading…
Reference in New Issue