View Javadoc

    1   /*
    2    * Copyright 2001-2005 The Apache Software Foundation
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *     http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  package examples.nntp;
    17
    18  import java.io.BufferedReader;
    19  import java.io.FileNotFoundException;
    20  import java.io.FileReader;
    21  import java.io.IOException;
    22  import java.io.InputStreamReader;
    23  import java.io.PrintWriter;
    24  import java.io.Writer;
    25  import org.apache.commons.net.io.Util;
    26  import org.apache.commons.net.nntp.NNTPClient;
    27  import org.apache.commons.net.nntp.NNTPReply;
    28  import org.apache.commons.net.nntp.SimpleNNTPHeader;
    29
    30  import examples.PrintCommandListener;
    31
    32  /****
    33   * This is an example program using the NNTP package to post an article
    34   * to the specified newsgroup(s).  It prompts you for header information and
    35   * a filename to post.
    36   * <p>
    37   ***/
    38
    39  public final class post
    40  {
    41
    42      public final static void main(String[] args)
    43      {
    44          String from, subject, newsgroup, filename, server, organization;
    45          String references;
    46          BufferedReader stdin;
    47          FileReader fileReader = null;
    48          SimpleNNTPHeader header;
    49          NNTPClient client;
    50
    51          if (args.length < 1)
    52          {
    53              System.err.println("Usage: post newsserver");
    54              System.exit(1);
    55          }
    56
    57          server = args[0];
    58
    59          stdin = new BufferedReader(new InputStreamReader(System.in));
    60
    61          try
    62          {
    63              System.out.print("From: ");
    64              System.out.flush();
    65
    66              from = stdin.readLine();
    67
    68              System.out.print("Subject: ");
    69              System.out.flush();
    70
    71              subject = stdin.readLine();
    72
    73              header = new SimpleNNTPHeader(from, subject);
    74
    75              System.out.print("Newsgroup: ");
    76              System.out.flush();
    77
    78              newsgroup = stdin.readLine();
    79              header.addNewsgroup(newsgroup);
    80
    81              while (true)
    82              {
    83                  System.out.print("Additional Newsgroup <Hit enter to end>: ");
    84                  System.out.flush();
    85
    86                  // Of course you don't want to do this because readLine() may be null
    87                  newsgroup = stdin.readLine().trim();
    88
    89                  if (newsgroup.length() == 0)
    90                      break;
    91
    92                  header.addNewsgroup(newsgroup);
    93              }
    94
    95              System.out.print("Organization: ");
    96              System.out.flush();
    97
    98              organization = stdin.readLine();
    99
    100             System.out.print("References: ");
    101             System.out.flush();
    102
    103             references = stdin.readLine();
    104
    105             if (organization != null && organization.length() > 0)
    106                 header.addHeaderField("Organization", organization);
    107
    108             if (references != null && organization.length() > 0)
    109                 header.addHeaderField("References", references);
    110
    111             header.addHeaderField("X-Newsreader", "NetComponents");
    112
    113             System.out.print("Filename: ");
    114             System.out.flush();
    115
    116             filename = stdin.readLine();
    117
    118             try
    119             {
    120                 fileReader = new FileReader(filename);
    121             }
    122             catch (FileNotFoundException e)
    123             {
    124                 System.err.println("File not found. " + e.getMessage());
    125                 System.exit(1);
    126             }
    127
    128             client = new NNTPClient();
    129             client.addProtocolCommandListener(new PrintCommandListener(
    130                                                   new PrintWriter(System.out)));
    131
    132             client.connect(server);
    133
    134             if (!NNTPReply.isPositiveCompletion(client.getReplyCode()))
    135             {
    136                 client.disconnect();
    137                 System.err.println("NNTP server refused connection.");
    138                 System.exit(1);
    139             }
    140
    141             if (client.isAllowedToPost())
    142             {
    143                 Writer writer = client.postArticle();
    144
    145                 if (writer != null)
    146                 {
    147                     writer.write(header.toString());
    148                     Util.copyReader(fileReader, writer);
    149                     writer.close();
    150                     client.completePendingCommand();
    151                 }
    152             }
    153
    154             fileReader.close();
    155
    156             client.logout();
    157
    158             client.disconnect();
    159         }
    160         catch (IOException e)
    161         {
    162             e.printStackTrace();
    163             System.exit(1);
    164         }
    165     }
    166 }
    167
    168