nntpclient.java

来自「apache推出的net包」· Java 代码 · 共 1,285 行 · 第 1/4 页

JAVA
1,285
字号
     *      command to the server or receiving a reply from the server.     ***/    public NewsgroupInfo[] listNewNewsgroups(NewGroupsOrNewsQuery query)    throws IOException    {        if (!NNTPReply.isPositiveCompletion(newgroups(                                                query.getDate(), query.getTime(),                                                query.isGMT(), query.getDistributions())))            return null;        return __readNewsgroupListing();    }    /***     * List all new articles added to the NNTP server since a particular     * date subject to the conditions of the specified query.  If no new     * new news is found, a zero length array will be returned.  If the     * command fails, null will be returned.  You must add at least one     * newsgroup to the query, else the command will fail.  Each String     * in the returned array is a unique message identifier including the     * enclosing &lt and &gt.     * <p>     * @param query  The query restricting how to search for new news.  You     *    must add at least one newsgroup to the query.     * @return An array of String instances containing the unique message     *    identifiers for each new article added to the NNTP server.  If no     *    new news is found, a zero length array will be returned.  If the     *    command fails, null will be returned.     * @exception NNTPConnectionClosedException     *      If the NNTP server prematurely closes the connection as a result     *      of the client being idle or some other reason causing the server     *      to send NNTP reply code 400.  This exception may be caught either     *      as an IOException or independently as itself.     * @exception IOException  If an I/O error occurs while either sending a     *      command to the server or receiving a reply from the server.     ***/    public String[] listNewNews(NewGroupsOrNewsQuery query)    throws IOException    {        int size;        String line;        Vector list;        String[] result;        BufferedReader reader;        if (!NNTPReply.isPositiveCompletion(newnews(                                                query.getNewsgroups(), query.getDate(), query.getTime(),                                                query.isGMT(), query.getDistributions())))            return null;        list = new Vector();        reader = new BufferedReader(new DotTerminatedMessageReader(_reader_));        while ((line = reader.readLine()) != null)            list.addElement(line);        size = list.size();        if (size < 1)            return new String[0];        result = new String[size];        list.copyInto(result);        return result;    }    /***     * There are a few NNTPClient methods that do not complete the     * entire sequence of NNTP commands to complete a transaction.  These     * commands require some action by the programmer after the reception     * of a positive preliminary command.  After the programmer's code     * completes its actions, it must call this method to receive     * the completion reply from the server and verify the success of the     * entire transaction.     * <p>     * For example     * <pre>     * writer = client.postArticle();     * if(writer == null) // failure     *   return false;     * header = new SimpleNNTPHeader("foobar@foo.com", "Just testing");     * header.addNewsgroup("alt.test");     * writer.write(header.toString());     * writer.write("This is just a test");     * writer.close();     * if(!client.completePendingCommand()) // failure     *   return false;     * </pre>     * <p>     * @return True if successfully completed, false if not.     * @exception NNTPConnectionClosedException     *      If the NNTP server prematurely closes the connection as a result     *      of the client being idle or some other reason causing the server     *      to send NNTP reply code 400.  This exception may be caught either     *      as an IOException or independently as itself.     * @exception IOException  If an I/O error occurs while either sending a     *      command to the server or receiving a reply from the server.     ***/    public boolean completePendingCommand() throws IOException    {        return NNTPReply.isPositiveCompletion(getReply());    }    /***     * Post an article to the NNTP server.  This method returns a     * DotTerminatedMessageWriter instance to which the article can be     * written.  Null is returned if the posting attempt fails.  You     * should check {@link NNTP#isAllowedToPost isAllowedToPost() }     *  before trying to post.  However, a posting     * attempt can fail due to malformed headers.     * <p>     * You must not issue any commands to the NNTP server (i.e., call any     * (other methods) until you finish writing to the returned Writer     * instance and close it.  The NNTP protocol uses the same stream for     * issuing commands as it does for returning results.  Therefore the     * returned Writer actually writes directly to the NNTP connection.     * After you close the writer, you can execute new commands.  If you     * do not follow these requirements your program will not work properly.     * <p>     * Different NNTP servers will require different header formats, but     * you can use the provided     * {@link org.apache.commons.net.nntp.SimpleNNTPHeader}     * class to construct the bare minimum acceptable header for most     * news readers.  To construct more complicated headers you should     * refer to RFC 822.  When the Java Mail API is finalized, you will be     * able to use it to compose fully compliant Internet text messages.     * The DotTerminatedMessageWriter takes care of doubling line-leading     * dots and ending the message with a single dot upon closing, so all     * you have to worry about is writing the header and the message.     * <p>     * Upon closing the returned Writer, you need to call     * {@link #completePendingCommand  completePendingCommand() }     * to finalize the posting and verify its success or failure from     * the server reply.     * <p>     * @return A DotTerminatedMessageWriter to which the article (including     *      header) can be written.  Returns null if the command fails.     * @exception IOException  If an I/O error occurs while either sending a     *      command to the server or receiving a reply from the server.     ***/    public Writer postArticle() throws IOException    {        if (!NNTPReply.isPositiveIntermediate(post()))            return null;        return new DotTerminatedMessageWriter(_writer_);    }    public Writer forwardArticle(String articleId) throws IOException    {        if (!NNTPReply.isPositiveIntermediate(ihave(articleId)))            return null;        return new DotTerminatedMessageWriter(_writer_);    }    /***     * Logs out of the news server gracefully by sending the QUIT command.     * However, you must still disconnect from the server before you can open     * a new connection.     * <p>     * @return True if successfully completed, false if not.     * @exception IOException  If an I/O error occurs while either sending a     *      command to the server or receiving a reply from the server.     ***/    public boolean logout() throws IOException    {        return NNTPReply.isPositiveCompletion(quit());    }    /**     * Log into a news server by sending the AUTHINFO USER/AUTHINFO     * PASS command sequence. This is usually sent in response to a     * 480 reply code from the NNTP server.     * <p>     * @param username a valid username     * @param password the corresponding password     * @return True for successful login, false for a failure     * @throws IOException     */    public boolean authenticate(String username, String password)        throws IOException    {        int replyCode = authinfoUser(username);        if (replyCode == NNTPReply.MORE_AUTH_INFO_REQUIRED)            {                replyCode = authinfoPass(password);                if (replyCode == NNTPReply.AUTHENTICATION_ACCEPTED)                    {                        _isAllowedToPost = true;                        return true;                    }            }        return false;    }    /***     * Private implementation of XOVER functionality.     *     * See {@link NNTP#xover}     * for legal agument formats. Alternatively, read RFC 2980 :-)     * <p>     * @param articleRange     * @return Returns a DotTerminatedMessageReader if successful, null     *         otherwise     * @exception IOException     */    private Reader __retrieveArticleInfo(String articleRange)        throws IOException    {        if (!NNTPReply.isPositiveCompletion(xover(articleRange)))            return null;        return new DotTerminatedMessageReader(_reader_);    }    /**     * Return article headers for a specified post.     * <p>     * @param articleNumber the article to retrieve headers for     * @return a DotTerminatedReader if successful, null otherwise     * @throws IOException     */    public Reader retrieveArticleInfo(int articleNumber) throws IOException    {        return __retrieveArticleInfo(Integer.toString(articleNumber));    }    /**     * Return article headers for all articles between lowArticleNumber     * and highArticleNumber, inclusively.     * <p>     * @param lowArticleNumber     * @param highArticleNumber     * @return a DotTerminatedReader if successful, null otherwise     * @throws IOException     */    public Reader retrieveArticleInfo(int lowArticleNumber,                                      int highArticleNumber)        throws IOException    {        return            __retrieveArticleInfo(new String(lowArticleNumber + "-" +                                             highArticleNumber));    }    /***     * Private implementation of XHDR functionality.     *     * See {@link NNTP#xhdr}     * for legal agument formats. Alternatively, read RFC 1036.     * <p>     * @param header     * @param articleRange     * @return Returns a DotTerminatedMessageReader if successful, null     *         otherwise     * @exception IOException     */    private Reader __retrieveHeader(String header, String articleRange)        throws IOException    {        if (!NNTPReply.isPositiveCompletion(xhdr(header, articleRange)))            return null;        return new DotTerminatedMessageReader(_reader_);    }    /**     * Return an article header for a specified post.     * <p>     * @param header the header to retrieve     * @param articleNumber the article to retrieve the header for     * @return a DotTerminatedReader if successful, null otherwise     * @throws IOException     */    public Reader retrieveHeader(String header, int articleNumber)        throws IOException    {        return __retrieveHeader(header, Integer.toString(articleNumber));    }    /**     * Return an article header for all articles between lowArticleNumber     * and highArticleNumber, inclusively.     * <p>     * @param header     * @param lowArticleNumber     * @param highArticleNumber     * @return a DotTerminatedReader if successful, null otherwise     * @throws IOException     */    public Reader retrieveHeader(String header, int lowArticleNumber,                                 int highArticleNumber)        throws IOException    {        return            __retrieveHeader(header,                             new String(lowArticleNumber + "-" +                                        highArticleNumber));    }}/* Emacs configuration * Local variables:        ** * mode:             java  ** * c-basic-offset:   4     ** * indent-tabs-mode: nil   ** * End:                    ** */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?