import java.io.*; import java.net.*; import java.lang.*; import java.util.*; class ListNews { public static String host=null,group_name=null,user=null,password=null; public static PrintStream console_out=System.out,console_err=System.err,logfile=null; public static void main(String args[]) { doCommandLine(args); /* also load from command-line-list */ }; public static void flushState() { console_out.println("------------------"); console_out.println("status : Doing Garbage Collection..."); System.gc(); console_out.println("status : Garbage Collection done."); }; public static void doCommandLine(String args[]) { NNTP_Client nntp; ArticleHeader header,lastheader; boolean keepgoing,matched; int argi; boolean wantshelp=false; int files_got=0,files_seen=0; String matchMe; long diffclock; console_out = System.out; console_err = System.err; for(argi=0;argi 1 ) { if ( args[argi].charAt(0) == '-' ) { int parami = 2; String param; if ( args[argi].length() > 2 ) if ( args[argi].charAt(2) == ':' || args[argi].charAt(2) == '=' ) parami++; if ( args[argi].length() > parami ) param = new String(args[argi].substring(parami)); else param = null; switch( args[argi].charAt(1) ) { case '?': case 'H': case 'h': wantshelp = true; break; case 'U': case 'u': user = param; console_out.println("got user : " + user); break; case 'P': case 'p': password = param; console_out.println("got password : " + password); break; default: console_out.println("Unknown flag : " + args[argi] + "ignored"); break; } } else { if ( host == null ) host = args[argi]; else if ( group_name == null ) group_name = args[argi]; else console_out.println("Extra argument : " + args[argi] + "ignored"); } } } if ( host == null || group_name == null || wantshelp ) { console_out.println("usage: ListNews newshost group -[options]"); console_out.println("options:"); console_out.println("\tu\tuser name"); console_out.println("\tp\tpassword"); return; } try { logfile = new PrintStream( (OutputStream) new FileOutputStream("listnews.log") ); } catch ( IOException e ) { console_out.println("Error opening testnews.log : " + e ); console_out.println("exiting"); return; } console_out.println("Opening NNTP_Client on: " + host + "..."); try { nntp = new NNTP_Client(host,logfile,user,password); } catch (IOException e) { System.err.println("error " + e); System.err.println("Could not create NNTP client. Exiting."); return; } if ( ! nntp.isConnected() ) { System.err.println("error."); System.err.println("Could not connect to news host :" + host); return; } console_out.println("Connected okay."); console_out.println("Changing to group: " + group_name); if ( ! nntp.goGroup(group_name) ) { System.err.println("failed"); return; } console_out.println("okay."); console_out.println("Getting article headers."); lastheader = null; do { try { header = nntp.getHeader(); lastheader = header; console_out.println("------------------"); console_out.print("header : subject: "); if ( header.subject.length() > 60 ) console_out.println(header.subject.substring(header.subject.length() - 60) ); else console_out.println(header.subject); console_out.println("header : author : " + header.author); console_out.println("header : date : " + header.date); console_out.println("header : number : " + header.number); console_out.println("header : lines : " + header.lines); console_out.println("header : bytes : " + header.bytes); console_out.println("------------------"); files_seen++; keepgoing = nntp.next(); } catch ( IOException e ) { boolean newkeepgoing = false; do { keepgoing = true; console_err.println("error : " + e + ", trying NNTP.reset"); try { if ( lastheader == null ) keepgoing = nntp.reset(); else keepgoing = nntp.reset(lastheader); } catch ( IOException err ) { System.err.println("fatal : couldn't reset : " + err ); keepgoing = false; } if ( ! keepgoing ) newkeepgoing = clib.askContinue(); } while(!keepgoing && newkeepgoing ); } console_err.println("status : " + files_seen + " articles seen"); } while( keepgoing ); console_out.println("------------------"); console_out.println("No more articles."); console_out.println("Disconnecting..."); nntp.disconnect(); console_out.println("done."); flushState(); } };