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
023 import org.apache.commons.net.PrintCommandListener;
024 import org.apache.commons.net.nntp.Article;
025 import org.apache.commons.net.nntp.NNTPClient;
026 import 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 */
034 public 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 */