commit - 182fcdb4dc02479e7748c872f6a8d5a0b0fd540b
commit + 857e8780e0133566f375c18fe274c410ee1d9967
blob - 7064dd99184f74c346e04d9b781961f6d14493e5
blob + 4e398b8cfdd56171f14756b42a7dbf0872ffd5fc
--- mata_bot.pl
+++ mata_bot.pl
sub evasdrop {
my ($s, $host, $chan, $lists) = @_;
- my ($checkping, $msgmax, $pingtime, $pongtime, $prefixlen, $priv);
+ my ($msgtime, $msgmax, $pingsent, $pingtime, $prefixlen, $priv);
- $checkping = 1;
+ $pingsent = 0;
$priv = "PRIVMSG ${chan} :";
- $pongtime = $pingtime = time;
+ $msgtime = $pingtime = time;
while (1) {
+ if ($pingsent) {
+ if (time - $pingtime > MAX_LAG) {
+ # leave if we don't get ponged back on time
+ logger(LOG_WARN, 'server pong reply timed out');
+ return;
+ }
+ } elsif (time - $msgtime > LAG_CHECK_TIME) {
+ # ping server every once in a while
+ sendmsg($s, "PING :${host}");
+ $pingsent = 1;
+ $pingtime = time;
+ }
defined($_ = recvmsg($s)) or return;
- if(not length) {
- } elsif (/^PING :([^ ]+)$/) {
+ next if not length;
+ $msgtime = time;
+ if (/^PING :([^ ]+)$/) {
sendmsg($s, 'PONG :' . $1);
} elsif (/^:[^ ]+ PONG/) {
- $pongtime = $pingtime = time;
- $checkping = 1;
+ $pingsent = 0;
} elsif (/^:[^ ]+ 352 [^ ]+ [^ ]+ [^ ]+ ([^ ]+)/) {
# the extra 2 bytes account for \r\n
$msgmax = IRCMAX - length($1) - length($priv) - 2;
$r = respond($1, $2, @$lists);
sendmsg($s, $priv . substr($r,0,$msgmax)) if length($r);
}
- if ($checkping and time-$pingtime > LAG_CHECK_TIME) {
- # ping server every once in a while and wait for pong
- sendmsg($s, "PING :${host}");
- $checkping = 0;
- } elsif (not $checkping and time-$pongtime > MAX_LAG) {
- # we're leaving if we don't get ponged back on time
- logger(LOG_WARN, 'server PONG response timed out');
- return;
- }
}
}