org/sonews/daemon/command/CapabilitiesCommand.java
author chris <chris@marvin>
Wed, 22 Jul 2009 14:04:05 +0200
changeset 3 2fdc9cc89502
parent 1 6fceb66e1ad7
child 20 6ae5e4f8329b
permissions -rw-r--r--
sonews/1.0.0
     1 /*
     2  *   SONEWS News Server
     3  *   see AUTHORS for the list of contributors
     4  *
     5  *   This program is free software: you can redistribute it and/or modify
     6  *   it under the terms of the GNU General Public License as published by
     7  *   the Free Software Foundation, either version 3 of the License, or
     8  *   (at your option) any later version.
     9  *
    10  *   This program is distributed in the hope that it will be useful,
    11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  *   GNU General Public License for more details.
    14  *
    15  *   You should have received a copy of the GNU General Public License
    16  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17  */
    18 
    19 package org.sonews.daemon.command;
    20 
    21 import java.io.IOException;
    22 import org.sonews.daemon.NNTPConnection;
    23 
    24 /**
    25  * <pre>
    26  * The CAPABILITIES command allows a client to determine the
    27  * capabilities of the server at any given time.
    28  *
    29  * This command MAY be issued at any time; the server MUST NOT require
    30  * it to be issued in order to make use of any capability. The response
    31  * generated by this command MAY change during a session because of
    32  * other state information (which, in turn, may be changed by the
    33  * effects of other commands or by external events).  An NNTP client is
    34  * only able to get the current and correct information concerning
    35  * available capabilities at any point during a session by issuing a
    36  * CAPABILITIES command at that point of that session and processing the
    37  * response.
    38  * </pre>
    39  * @author Christian Lins
    40  * @since sonews/0.5.0
    41  */
    42 public class CapabilitiesCommand implements Command
    43 {
    44 
    45   static final String[] CAPABILITIES = new String[]
    46     {
    47       "VERSION 2", // MUST be the first one; VERSION 2 refers to RFC3977
    48       "READER",    // Server implements commands for reading
    49       "POST",      // Server implements POST command
    50       "OVER"       // Server implements OVER command
    51     };
    52 
    53   @Override
    54   public String[] getSupportedCommandStrings()
    55   {
    56     return new String[] {"CAPABILITIES"};
    57   }
    58 
    59   /**
    60    * First called after one call to processLine().
    61    * @return
    62    */
    63   @Override
    64   public boolean hasFinished()
    65   {
    66     return true;
    67   }
    68 
    69   @Override
    70   public boolean isStateful()
    71   {
    72     return false;
    73   }
    74 
    75   @Override
    76   public void processLine(NNTPConnection conn, final String line, byte[] raw)
    77     throws IOException
    78   {
    79     conn.println("101 Capabilities list:");
    80     for(String cap : CAPABILITIES)
    81     {
    82       conn.println(cap);
    83     }
    84     conn.println(".");
    85   }
    86 
    87 }