    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
    018    package examples.nntp;
    019
    020    import java.io.IOException;
    021    import java.io.PrintWriter;
    022    import java.util.List;
    023
    024    import org.apache.commons.net.PrintCommandListener;
    025    import org.apache.commons.net.nntp.Article;
    026    import org.apache.commons.net.nntp.NNTPClient;
    027    import org.apache.commons.net.nntp.NewsgroupInfo;
    028
    029
    030    /**
    031     * Simple class showing some of the extended commands (AUTH, XOVER, LIST ACTIVE)
    032     *
    033     * @author Rory Winston <rwinston@apache.org>
    034     */
    035    public class ExtendedNNTPOps {
    036
    037
    038        NNTPClient client;
    039
    040        public ExtendedNNTPOps() {
    041            client = new NNTPClient();
    042            client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
    043        }
    044
    045
    046        public void demo(String host, String user, String password) {
    047            try {
    048                client.connect(host);
    049
    050                // AUTHINFO USER/AUTHINFO PASS
    051                boolean success = client.authenticate(user, password);
    052                if (success) {
    053                    System.out.println("Authentication succeeded");
    054                } else {
    055                    System.out.println("Authentication failed, error =" + client.getReplyString());
    056                }
    057
    058                // XOVER
    059                NewsgroupInfo testGroup = new NewsgroupInfo();
    060                client.selectNewsgroup("alt.test", testGroup);
    061                long lowArticleNumber = testGroup.getFirstArticle();
    062                long  highArticleNumber = lowArticleNumber + 100;
    063                List<Article> articles = NNTPUtils.getArticleInfo(client, lowArticleNumber, highArticleNumber);
    064
    065                for (Article article : articles) {
    066                    System.out.println(article.getSubject());
    067                }
    068
    069                // LIST ACTIVE
    070                NewsgroupInfo[] fanGroups = client.listNewsgroups("alt.fan.*");
    071                for (int i = 0; i < fanGroups.length; ++i) {
    072                    System.out.println(fanGroups[i].getNewsgroup());
    073                }
    074
    075            } catch (IOException e) {
    076                e.printStackTrace();
    077            }
    078        }
    079
    080        public static void main(String[] args) {
    081            ExtendedNNTPOps ops;
    082
    083            if (args.length != 3) {
    084                System.err.println("usage: ExtendedNNTPOps nntpserver username password");
    085                System.exit(1);
    086            }
    087
    088            ops = new ExtendedNNTPOps();
    089            ops.demo(args[0], args[1], args[2]);
    090        }
    091
    092    }
    093
    094    /* Emacs configuration
    095     * Local variables:        **
    096     * mode:             java  **
    097     * c-basic-offset:   4     **
    098     * indent-tabs-mode: nil   **
    099     * End:                    **
    100     */