org/sonews/daemon/command/CapabilitiesCommand.java
author cli
Mon, 24 Aug 2009 14:40:37 +0200
changeset 21 4b2c8bedb094
parent 20 6ae5e4f8329b
permissions -rw-r--r--
Refactoring in CommandSelector to allow manually loading of plugins.
     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 String impliedCapability()
    71   {
    72     return null;
    73   }
    74   
    75   @Override
    76   public boolean isStateful()
    77   {
    78     return false;
    79   }
    80 
    81   @Override
    82   public void processLine(NNTPConnection conn, final String line, byte[] raw)
    83     throws IOException
    84   {
    85     conn.println("101 Capabilities list:");
    86     for(String cap : CAPABILITIES)
    87     {
    88       conn.println(cap);
    89     }
    90     conn.println(".");
    91   }
    92 
    93 }