3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-28 05:29:25 +01:00

protocols: move handle_pong into ircs2s_common, be less strict about the ping argument

This fixes issues on UnrealIRCd where PONGs get ignored if the argument doesn't match the server name entirely (e.g. different case).
Treating all PONGs from the uplink as valid is totally fine, as all we care about is that the uplink is alive.

(cherry picked from commit 38350465c1)
This commit is contained in:
James Lu 2017-01-01 20:24:34 -08:00
parent 930443f4cd
commit d5eb01b724
5 changed files with 5 additions and 27 deletions

View File

@ -508,15 +508,6 @@ class InspIRCdProtocol(TS6BaseProtocol):
if self.irc.isInternalServer(args[1]): if self.irc.isInternalServer(args[1]):
self._send(args[1], 'PONG %s %s' % (args[1], source)) self._send(args[1], 'PONG %s %s' % (args[1], source))
def handle_pong(self, source, command, args):
"""Handles incoming PONG commands.
This is used to keep track of whether the uplink is alive by the Irc()
internals - a server that fails to reply to our PINGs eventually
times out and is disconnected."""
if source == self.irc.uplink and args[1] == self.irc.sid:
self.irc.lastping = time.time()
def handle_fjoin(self, servernumeric, command, args): def handle_fjoin(self, servernumeric, command, args):
"""Handles incoming FJOIN commands (InspIRCd equivalent of JOIN/SJOIN).""" """Handles incoming FJOIN commands (InspIRCd equivalent of JOIN/SJOIN)."""
# :70M FJOIN #chat 1423790411 +AFPfjnt 6:5 7:5 9:5 :o,1SRAABIT4 v,1IOAAF53R <...> # :70M FJOIN #chat 1423790411 +AFPfjnt 6:5 7:5 9:5 :o,1SRAABIT4 v,1IOAAF53R <...>

View File

@ -98,3 +98,8 @@ class IRCS2SProtocol(Protocol):
def handle_time(self, numeric, command, args): def handle_time(self, numeric, command, args):
"""Handles incoming /TIME requests.""" """Handles incoming /TIME requests."""
return {'target': args[0]} return {'target': args[0]}
def handle_pong(self, source, command, args):
"""Handles incoming PONG commands."""
if source == self.irc.uplink:
self.irc.lastping = time.time()

View File

@ -966,12 +966,6 @@ class P10Protocol(IRCS2SProtocol):
if args[0] != self.irc.serverdata['recvpass']: if args[0] != self.irc.serverdata['recvpass']:
raise ProtocolError("Error: RECVPASS from uplink does not match configuration!") raise ProtocolError("Error: RECVPASS from uplink does not match configuration!")
def handle_pong(self, source, command, args):
"""Handles incoming PONGs."""
# <- AB Z AB :Ay
if source == self.irc.uplink:
self.irc.lastping = time.time()
def handle_burst(self, source, command, args): def handle_burst(self, source, command, args):
"""Handles the BURST command, used for bursting channels on link. """Handles the BURST command, used for bursting channels on link.

View File

@ -411,12 +411,6 @@ class TS6Protocol(TS6BaseProtocol):
# Return the endburst hook. # Return the endburst hook.
return {'parse_as': 'ENDBURST'} return {'parse_as': 'ENDBURST'}
def handle_pong(self, source, command, args):
"""Handles incoming PONG commands."""
if source == self.irc.uplink:
self.irc.lastping = time.time()
def handle_sjoin(self, servernumeric, command, args): def handle_sjoin(self, servernumeric, command, args):
"""Handles incoming SJOIN commands.""" """Handles incoming SJOIN commands."""
# parameters: channelTS, channel, simple modes, opt. mode parameters..., nicklist # parameters: channelTS, channel, simple modes, opt. mode parameters..., nicklist

View File

@ -404,12 +404,6 @@ class UnrealProtocol(TS6BaseProtocol):
if numeric == self.irc.uplink: if numeric == self.irc.uplink:
self.irc.send('PONG %s :%s' % (self.irc.serverdata['hostname'], args[-1])) self.irc.send('PONG %s :%s' % (self.irc.serverdata['hostname'], args[-1]))
def handle_pong(self, source, command, args):
log.debug('(%s) Ping received from %s for %s.', self.irc.name, source, args[-1])
if source in (self.irc.uplink, self.irc.servers[self.irc.uplink].name) and args[-1] == self.irc.serverdata['hostname']:
log.debug('(%s) Set self.irc.lastping.', self.irc.name)
self.irc.lastping = time.time()
def handle_server(self, numeric, command, args): def handle_server(self, numeric, command, args):
"""Handles the SERVER command, which is used for both authentication and """Handles the SERVER command, which is used for both authentication and
introducing legacy (non-SID) servers.""" introducing legacy (non-SID) servers."""