home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / net / nntp / nntpinputstream.java < prev    next >
Text File  |  1995-08-11  |  3KB  |  104 lines

  1. /*
  2.  * @(#)NntpInputStream.java    1.6 94/12/12 Jonathan Payne
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package net.nntp;
  21.  
  22. import java.io.*;
  23. import java.util.*;
  24.  
  25. /**
  26.  * This class provides the input stream for the NNTP client.
  27.  *
  28.  * @version    1.6, 12 Dec 1994
  29.  * @author    Jonathan Payne
  30.  * @see        NntpClient
  31.  */
  32. class NntpInputStream extends FilterInputStream {
  33.     int        column = 0;
  34.     boolean eofOccurred = false;
  35.  
  36.     public NntpInputStream(InputStream child) {
  37.     super(child);
  38.     }
  39.  
  40.     int eof() {
  41.     eofOccurred = true;
  42.     return -1;
  43.     }
  44.  
  45.     /**
  46.      * Read data from the NNTP stream.
  47.      * @exception NntpProtocolException thrown on bad data being read
  48.      */
  49.     public int read() {
  50.     int c;
  51.  
  52.     if (eofOccurred)
  53.         return -1;
  54.  
  55.     c = super.read();
  56.     if (c == '.' && column == 0) {
  57.         c = super.read();
  58.         if (c == '\n')
  59.         return eof();
  60.         if (c != '.')
  61.         throw new NntpProtocolException("Expecting '.' - got " + c);
  62.     }
  63.     if (c == '\n')
  64.         column = 0;
  65.     else
  66.         column += 1;
  67.     return c;
  68.     }
  69.  
  70.     /**
  71.      * Fills <i>bytes</i> with data read from the stream.
  72.      * @exception NntpProtocolException see read() above.
  73.      */
  74.     public int read(byte bytes[]) {
  75.     return read(bytes, 0, bytes.length);
  76.     }
  77.  
  78.     /**
  79.      * Reads <i>length</i> bytes into byte array <i>bytes</i> at offset 
  80.      * <i>off</i> with data read from the stream.
  81.      * @exception NntpProtocolException see read() above.
  82.      */
  83.     public int read(byte bytes[], int off, int length) {
  84.     int c;
  85.     int offStart = off;
  86.  
  87.     while (--length >= 0) {
  88.         c = read();
  89.         if (c == -1)
  90.         break;
  91.         bytes[off++] = (byte)c;
  92.     }
  93.     return (off > offStart) ? off - offStart : -1;
  94.     }
  95.  
  96.     /** Close the input stream.  We do nothing here because we
  97.         know we don't actually own this stream.  We're splicing
  98.     ourselves into this stream and returning EOF after we
  99.     have read a subset of the input. */
  100.  
  101.     public void close() {}
  102. }
  103.  
  104.