1 //========================================================================
2 //$Id: StreamEndPoint.java,v 1.1 2005/10/05 14:09:39 janb Exp $
3 //Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
4 //------------------------------------------------------------------------
5 //Licensed under the Apache License, Version 2.0 (the "License");
6 //you may not use this file except in compliance with the License.
7 //You may obtain a copy of the License at
8 //http://www.apache.org/licenses/LICENSE-2.0
9 //Unless required by applicable law or agreed to in writing, software
10 //distributed under the License is distributed on an "AS IS" BASIS,
11 //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 //See the License for the specific language governing permissions and
13 //limitations under the License.
14 //========================================================================
15
16
17 package org.mortbay.io.bio;
18
19 import java.io.IOException;
20 import java.io.InputStream;
21 import java.io.OutputStream;
22
23 import org.mortbay.io.Buffer;
24 import org.mortbay.io.EndPoint;
25
26 /**
27 * @author gregw
28 *
29 * To change the template for this generated type comment go to
30 * Window - Preferences - Java - Code Generation - Code and Comments
31 */
32 public class StreamEndPoint implements EndPoint
33 {
34 InputStream _in;
35 OutputStream _out;
36
37 /**
38 *
39 */
40 public StreamEndPoint(InputStream in, OutputStream out)
41 {
42 _in=in;
43 _out=out;
44 }
45
46 public boolean isBlocking()
47 {
48 return true;
49 }
50
51 public boolean blockReadable(long millisecs) throws IOException
52 {
53 return true;
54 }
55
56 public boolean blockWritable(long millisecs) throws IOException
57 {
58 return true;
59 }
60
61 /*
62 * @see org.mortbay.io.BufferIO#isOpen()
63 */
64 public boolean isOpen()
65 {
66 return _in!=null;
67 }
68
69 /*
70 * @see org.mortbay.io.BufferIO#isOpen()
71 */
72 public final boolean isClosed()
73 {
74 return !isOpen();
75 }
76
77 /*
78 * @see org.mortbay.io.EndPoint#shutdownOutput()
79 */
80 public void shutdownOutput() throws IOException
81 {
82 }
83
84 /*
85 * @see org.mortbay.io.BufferIO#close()
86 */
87 public void close() throws IOException
88 {
89 if (_in!=null)
90 _in.close();
91 _in=null;
92 if (_out!=null)
93 _out.close();
94 _out=null;
95 }
96
97 /* (non-Javadoc)
98 * @see org.mortbay.io.BufferIO#fill(org.mortbay.io.Buffer)
99 */
100 public int fill(Buffer buffer) throws IOException
101 {
102 // TODO handle null array()
103 if (_in==null)
104 return 0;
105
106 int space=buffer.space();
107 if (space<=0)
108 {
109 if (buffer.hasContent())
110 return 0;
111 throw new IOException("FULL");
112 }
113
114 int len = buffer.readFrom(_in,space);
115
116 return len;
117 }
118
119 /* (non-Javadoc)
120 * @see org.mortbay.io.BufferIO#flush(org.mortbay.io.Buffer)
121 */
122 public int flush(Buffer buffer) throws IOException
123 {
124 // TODO handle null array()
125 if (_out==null)
126 return -1;
127 int length=buffer.length();
128 if (length>0)
129 buffer.writeTo(_out);
130 buffer.clear();
131 return length;
132 }
133
134 /* (non-Javadoc)
135 * @see org.mortbay.io.BufferIO#flush(org.mortbay.io.Buffer, org.mortbay.io.Buffer, org.mortbay.io.Buffer)
136 */
137 public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException
138 {
139 int len=0;
140
141 // TODO consider copying buffer and trailer into header if there is space.
142
143
144 if (header!=null)
145 {
146 int tw=header.length();
147 if (tw>0)
148 {
149 int f=flush(header);
150 len=f;
151 if (f<tw)
152 return len;
153 }
154 }
155
156 if (buffer!=null)
157 {
158 int tw=buffer.length();
159 if (tw>0)
160 {
161 int f=flush(buffer);
162 if (f<0)
163 return len>0?len:f;
164 len+=f;
165 if (f<tw)
166 return len;
167 }
168 }
169
170 if (trailer!=null)
171 {
172 int tw=trailer.length();
173 if (tw>0)
174 {
175 int f=flush(trailer);
176 if (f<0)
177 return len>0?len:f;
178 len+=f;
179 }
180 }
181 return len;
182 }
183
184 /* ------------------------------------------------------------ */
185 /*
186 * @see org.mortbay.io.EndPoint#getLocalAddr()
187 */
188 public String getLocalAddr()
189 {
190 return null;
191 }
192
193 /* ------------------------------------------------------------ */
194 /*
195 * @see org.mortbay.io.EndPoint#getLocalHost()
196 */
197 public String getLocalHost()
198 {
199 return null;
200 }
201
202 /* ------------------------------------------------------------ */
203 /*
204 * @see org.mortbay.io.EndPoint#getLocalPort()
205 */
206 public int getLocalPort()
207 {
208 return 0;
209 }
210
211 /* ------------------------------------------------------------ */
212 /*
213 * @see org.mortbay.io.EndPoint#getRemoteAddr()
214 */
215 public String getRemoteAddr()
216 {
217 return null;
218 }
219
220 /* ------------------------------------------------------------ */
221 /*
222 * @see org.mortbay.io.EndPoint#getRemoteHost()
223 */
224 public String getRemoteHost()
225 {
226 return null;
227 }
228
229 /* ------------------------------------------------------------ */
230 /*
231 * @see org.mortbay.io.EndPoint#getRemotePort()
232 */
233 public int getRemotePort()
234 {
235 return 0;
236 }
237
238 /* ------------------------------------------------------------ */
239 /*
240 * @see org.mortbay.io.EndPoint#getConnection()
241 */
242 public Object getTransport()
243 {
244 return null;
245 }
246
247 /* ------------------------------------------------------------ */
248 public InputStream getInputStream()
249 {
250 return _in;
251 }
252
253 /* ------------------------------------------------------------ */
254 public void setInputStream(InputStream in)
255 {
256 _in=in;
257 }
258
259 /* ------------------------------------------------------------ */
260 public OutputStream getOutputStream()
261 {
262 return _out;
263 }
264
265 /* ------------------------------------------------------------ */
266 public void setOutputStream(OutputStream out)
267 {
268 _out=out;
269 }
270
271
272 /* ------------------------------------------------------------ */
273 public void flush()
274 throws IOException
275 {
276 _out.flush();
277 }
278
279 /* ------------------------------------------------------------ */
280 public boolean isBufferingInput()
281 {
282 return false;
283 }
284
285 /* ------------------------------------------------------------ */
286 public boolean isBufferingOutput()
287 {
288 return false;
289 }
290
291 /* ------------------------------------------------------------ */
292 public boolean isBufferred()
293 {
294 return false;
295 }
296
297 }