KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > ristretto > smtp > SMTPInputStream


1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is Ristretto Mail API.
15  *
16  * The Initial Developers of the Original Code are
17  * Timo Stich and Frederik Dietz.
18  * Portions created by the Initial Developers are Copyright (C) 2004
19  * All Rights Reserved.
20  *
21  * Contributor(s):
22  *
23  * Alternatively, the contents of this file may be used under the terms of
24  * either the GNU General Public License Version 2 or later (the "GPL"), or
25  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26  * in which case the provisions of the GPL or the LGPL are applicable instead
27  * of those above. If you wish to allow use of your version of this file only
28  * under the terms of either the GPL or the LGPL, and not to allow others to
29  * use your version of this file under the terms of the MPL, indicate your
30  * decision by deleting the provisions above and replace them with the notice
31  * and other provisions required by the GPL or the LGPL. If you do not delete
32  * the provisions above, a recipient may use your version of this file under
33  * the terms of any one of the MPL, the GPL or the LGPL.
34  *
35  * ***** END LICENSE BLOCK ***** */

36 package org.columba.ristretto.smtp;
37
38 import java.io.FilterInputStream JavaDoc;
39 import java.io.IOException JavaDoc;
40 import java.io.InputStream JavaDoc;
41
42 import org.columba.ristretto.io.ConnectionDroppedException;
43 import org.columba.ristretto.parser.ParserException;
44 import org.columba.ristretto.smtp.parser.SMTPResponseParser;
45
46 /**
47  * This stream is used to read responses from a SMTP server. Every response is
48  * finalized by a CR LF. The stream reads a line from the stream and pases it
49  * to the {@link SMTPResponseParser}.
50  *
51  * @author Timo Stich <tstich@users.sourceforge.net>
52  */

53 public class SMTPInputStream extends FilterInputStream JavaDoc {
54
55     private StringBuffer JavaDoc lineBuffer;
56
57     /**
58      * Constructs a SMTPInputStream.
59      *
60      * @param arg0
61      * the inputstream of the socket.
62      */

63     public SMTPInputStream(InputStream JavaDoc arg0) {
64         super(arg0);
65
66         lineBuffer = new StringBuffer JavaDoc();
67     }
68
69     /**
70      * Reads a response from the socket inputstream.
71      * Every response is finalized by a CR LF. The stream reads a line from the
72      * stream and pases it to the {@link SMTPResponseParser}.
73      *
74      * @return the received response.
75      * @throws IOException
76      * @throws SMTPException
77      */

78     public SMTPResponse readSingleLineResponse()
79         throws IOException JavaDoc, SMTPException {
80         readLineInBuffer();
81
82         try {
83             return SMTPResponseParser.parse(lineBuffer);
84         } catch (ParserException e) {
85             throw new SMTPException("Malformed answer from server", e);
86         }
87     }
88
89     
90     /**
91      * Reads until a CR LF terminates the reponse.
92      *
93      * @throws IOException
94      */

95     private void readLineInBuffer() throws IOException JavaDoc {
96         // Clear the buffer
97
lineBuffer.delete(0, lineBuffer.length());
98
99         int read = in.read();
100         // read until CRLF
101
while (read != '\r' && read != -1) {
102             lineBuffer.append((char) read);
103             read = in.read();
104         }
105         lineBuffer.append((char) read);
106
107         // read the LF
108
read = in.read();
109         if( read != '\n' ) throw new ConnectionDroppedException();
110         lineBuffer.append((char) read);
111     }
112
113 }
114
Popular Tags