Irssi core bugs

Notice: Undefined index: tasklist_type in /var/www/ : eval()'d code on line 85 Notice: Undefined index: tasklist_type in /var/www/ : eval()'d code on line 90
  • Status Unconfirmed
  • Percent Complete
  • Task Type Feature Request
  • Category proxy
  • Assigned To No-one
  • Operating System All
  • Severity Medium
  • Priority Normal
  • Reported Version irssi 0.8.13
  • Due in Version Undecided
  • Due Date Undecided
  • Votes 0
  • Private No
Attached to Project: Irssi core bugs
Opened by DJ (imk) - 2009-05-20

FS#675 - Irssi proxy does not maintain PING/PONG between the proxy and client

Irssi's proxy does not issue pings to the clients that are connected to it.

Some of the IRC networks that I connect to, I sit in only one or two channels with not many people. Because of this, there are periods where there will be no activity for hours (not even a single join, part, or quit). Since there is no activity at all, the client gets disconnected after about 10 minutes.

The problem seems to be that the proxy relies on activity to maintain the connection. I've looked through the source and there are no events that send PINGs to, or checks for PONGs, from the client.

To verify that any IRC client I was using was not masking any PING or PONG event, I used telnet to connect directly to the proxy. After displaying the usual connection messages, joins to the channels, and nicks being printed, the activity went quiet (as expected) and about 10-11 minutes later, the connection automatically gets disconnected remotely.

A solution would be to set up a timer in the proxy that when a client connects, start issuing a PING and checking for a PONG reply at regular intervals. If no PONG is received, then simply terminate the client's connection to the proxy. It would basically work the same way as an IRC server, especially since that's the idea of the proxy in the first place.

This task does not depend on any other tasks.

DJ (imk)
Thursday, 21 May 2009, 04:56 GMT
I've put together an incomplete patch so far.

On connection, it will create a timer. Every two minutes the timer will send a PING to the client for the specific server. On disconnection, it will remove that timer. This is good enough to prevent the client from timing out with no activity.

What needs implemented still is to check for a PONG response from the client.