From 570becff4ccbb7141e87d60665fa5b050b2ec2e9 Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Fri, 28 Jun 2002 21:21:47 +0000 Subject: [PATCH] be more critical of yEnc part order don't loop while timeing out --- trunk/ripnews/news/article.rb | 37 ++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/trunk/ripnews/news/article.rb b/trunk/ripnews/news/article.rb index c3e814a..4c9d5cf 100644 --- a/trunk/ripnews/news/article.rb +++ b/trunk/ripnews/news/article.rb @@ -1,7 +1,13 @@ -#!/usr/local/bin/ruby - +################################# +# # $Id$ # $Source$ +# +# article.rb +# +# (C) 2002, Ward Wouts +# +################################# require 'set/intspan' require 'net/nntp' @@ -72,6 +78,7 @@ end def get_articles(cachedir=false) for server in @connections.keys first, last = get_group_info(server) + return false if first == false if first @connections[server]["first"] = first ? first : 0 @connections[server]["last"] = last ? last : 0 @@ -85,7 +92,7 @@ def get_articles(cachedir=false) for server in @connections.keys print " reading articles from server: #{server}\n" if @connections[server]["first"] > @connections[server]["last"] - print " First article has higher number that last article on server #{server}.\n" + print " First article has higher number than last article on server #{server}.\n" print " Skipping...\n" next else @@ -133,7 +140,7 @@ def get_group_info(server) last = "" begin if timedout > 1 - print "Too many timeouts!\n" + print "Too many timeouts! (get_group_info)\n" return false end timeout(30) do @@ -164,7 +171,7 @@ def get_xhdr(server, range, header) lines = [] begin if timedout > 1 - print "Too many timeouts!\n" + print "Too many timeouts! (get_xhdr)\n" return false end timeout(180) do @@ -181,7 +188,7 @@ def get_xhdr(server, range, header) print "Caught Errno::EPIPE reading from server #{server}\n" print "Error: #{$!}\n" if reconnect(server) - get_group_info(server) + return false unless get_group_info(server) retry end end @@ -191,7 +198,7 @@ def get_xhdr(server, range, header) print "Time out, reconnecting to server\n" timedout += 1 if reconnect(server) - get_group_info(server) + return false unless get_group_info(server) retry end end @@ -234,7 +241,7 @@ def get_body(server, message) list = [] begin if timedout > 1 - print "Too many timeouts!\n" + print "Too many timeouts! (get_body)\n" return false end timeout(180) do @@ -248,7 +255,7 @@ def get_body(server, message) print "Caught Errno::EPIPE reading from server #{server}\n" print "Error: #{$!}\n" if reconnect(server) - get_group_info(server) + return false unless get_group_info(server) retry end end @@ -258,7 +265,7 @@ def get_body(server, message) print "Time out, reconnecting to server\n" timedout += 1 if reconnect(server) - get_group_info(server) + return false unless get_group_info(server) retry end end @@ -691,6 +698,7 @@ def _ydecode_file(file, outfile) file.pos = 0 bytes = 0 total = 0 + oldpartend = 0 while (! file.eof) line = file.gets @@ -773,7 +781,14 @@ def _ydecode_file(file, outfile) if line =~ /^=ypart\s+(\s*begin=(\d+))(\s+end=(\d+))/ b = $2 e = $4 - print "next part begin #{b}, end #{e}\n" + print " next part begin #{b}, end #{e}\n" + if b.to_i == oldpartend + 1 + oldpartend = e.to_i + else + print "Parts not continuous! last end #{oldpartend}, begin #{b}\n" + print "Bailing out...\n" + return false + end next end