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.BufferedReader;
021import java.io.FileNotFoundException;
022import java.io.FileReader;
023import java.io.IOException;
024import java.io.InputStreamReader;
025import java.io.PrintWriter;
026import java.io.Writer;
027
028import org.apache.commons.net.PrintCommandListener;
029import org.apache.commons.net.io.Util;
030import org.apache.commons.net.nntp.NNTPClient;
031import org.apache.commons.net.nntp.NNTPReply;
032import org.apache.commons.net.nntp.SimpleNNTPHeader;
033
034
035/***
036 * This is an example program using the NNTP package to post an article
037 * to the specified newsgroup(s).  It prompts you for header information and
038 * a filename to post.
039 * <p>
040 ***/
041
042public final class post
043{
044
045    public final static void main(String[] args)
046    {
047        String from, subject, newsgroup, filename, server, organization;
048        String references;
049        BufferedReader stdin;
050        FileReader fileReader = null;
051        SimpleNNTPHeader header;
052        NNTPClient client;
053
054        if (args.length < 1)
055        {
056            System.err.println("Usage: post newsserver");
057            System.exit(1);
058        }
059
060        server = args[0];
061
062        stdin = new BufferedReader(new InputStreamReader(System.in));
063
064        try
065        {
066            System.out.print("From: ");
067            System.out.flush();
068
069            from = stdin.readLine();
070
071            System.out.print("Subject: ");
072            System.out.flush();
073
074            subject = stdin.readLine();
075
076            header = new SimpleNNTPHeader(from, subject);
077
078            System.out.print("Newsgroup: ");
079            System.out.flush();
080
081            newsgroup = stdin.readLine();
082            header.addNewsgroup(newsgroup);
083
084            while (true)
085            {
086                System.out.print("Additional Newsgroup <Hit enter to end>: ");
087                System.out.flush();
088
089                // Of course you don't want to do this because readLine() may be null
090                newsgroup = stdin.readLine().trim();
091
092                if (newsgroup.length() == 0)
093                    break;
094
095                header.addNewsgroup(newsgroup);
096            }
097
098            System.out.print("Organization: ");
099            System.out.flush();
100
101            organization = stdin.readLine();
102
103            System.out.print("References: ");
104            System.out.flush();
105
106            references = stdin.readLine();
107
108            if (organization != null && organization.length() > 0)
109                header.addHeaderField("Organization", organization);
110
111            if (references != null && organization.length() > 0)
112                header.addHeaderField("References", references);
113
114            header.addHeaderField("X-Newsreader", "NetComponents");
115
116            System.out.print("Filename: ");
117            System.out.flush();
118
119            filename = stdin.readLine();
120
121            try
122            {
123                fileReader = new FileReader(filename);
124            }
125            catch (FileNotFoundException e)
126            {
127                System.err.println("File not found. " + e.getMessage());
128                System.exit(1);
129            }
130
131            client = new NNTPClient();
132            client.addProtocolCommandListener(new PrintCommandListener(
133                                                  new PrintWriter(System.out)));
134
135            client.connect(server);
136
137            if (!NNTPReply.isPositiveCompletion(client.getReplyCode()))
138            {
139                client.disconnect();
140                System.err.println("NNTP server refused connection.");
141                System.exit(1);
142            }
143
144            if (client.isAllowedToPost())
145            {
146                Writer writer = client.postArticle();
147
148                if (writer != null)
149                {
150                    writer.write(header.toString());
151                    Util.copyReader(fileReader, writer);
152                    writer.close();
153                    client.completePendingCommand();
154                }
155            }
156
157            fileReader.close();
158
159            client.logout();
160
161            client.disconnect();
162        }
163        catch (IOException e)
164        {
165            e.printStackTrace();
166            System.exit(1);
167        }
168    }
169}
170
171