001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package examples.nntp;
019
020import java.io.IOException;
021import java.io.PrintWriter;
022
023import org.apache.commons.net.PrintCommandListener;
024import org.apache.commons.net.nntp.Article;
025import org.apache.commons.net.nntp.NNTPClient;
026import org.apache.commons.net.nntp.NewsgroupInfo;
027
028
029/**
030 * Simple class showing some of the extended commands (AUTH, XOVER, LIST ACTIVE)
031 * 
032 * @author Rory Winston <rwinston@checkfree.com>
033 */
034public class ExtendedNNTPOps {
035
036    
037    NNTPClient client;
038
039    public ExtendedNNTPOps() {
040        client = new NNTPClient();
041        client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
042    }
043
044
045    public void demo(String host, String user, String password) {
046        try {
047            client.connect(host);
048
049            // AUTHINFO USER/AUTHINFO PASS
050            boolean success = client.authenticate(user, password);
051            if (success) {
052                System.out.println("Authentication succeeded");
053            } else {
054                System.out.println("Authentication failed, error =" + client.getReplyString());
055            }
056
057            // XOVER
058            NewsgroupInfo testGroup = new NewsgroupInfo();
059            client.selectNewsgroup("alt.test", testGroup);
060            int lowArticleNumber = testGroup.getFirstArticle();
061            int highArticleNumber = lowArticleNumber + 100;
062            Article[] articles = NNTPUtils.getArticleInfo(client, lowArticleNumber, highArticleNumber);
063
064            for (int i = 0; i < articles.length; ++i) {
065                System.out.println(articles[i].getSubject());
066            }
067
068            // LIST ACTIVE
069            NewsgroupInfo[] fanGroups = client.listNewsgroups("alt.fan.*");
070            for (int i = 0; i < fanGroups.length; ++i) {
071                System.out.println(fanGroups[i].getNewsgroup());
072            }
073
074        } catch (IOException e) {
075            e.printStackTrace();
076        }
077    }
078
079    public static void main(String[] args) {
080        ExtendedNNTPOps ops;
081
082        if (args.length != 3) {
083            System.err.println("usage: ExtendedNNTPOps nntpserver username password");
084            System.exit(1);
085        }
086
087        ops = new ExtendedNNTPOps();
088        ops.demo(args[0], args[1], args[2]);
089    }
090
091}
092
093/* Emacs configuration
094 * Local variables:        **
095 * mode:             java  **
096 * c-basic-offset:   4     **
097 * indent-tabs-mode: nil   **
098 * End:                    **
099 */