Mercurial Hosting > luan
comparison src/org/eclipse/jetty/io/bio/StreamEndPoint.java @ 802:3428c60d7cfc
replace jetty jars with source
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 07 Sep 2016 21:15:48 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
801:6a21393191c1 | 802:3428c60d7cfc |
---|---|
1 // | |
2 // ======================================================================== | |
3 // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. | |
4 // ------------------------------------------------------------------------ | |
5 // All rights reserved. This program and the accompanying materials | |
6 // are made available under the terms of the Eclipse Public License v1.0 | |
7 // and Apache License v2.0 which accompanies this distribution. | |
8 // | |
9 // The Eclipse Public License is available at | |
10 // http://www.eclipse.org/legal/epl-v10.html | |
11 // | |
12 // The Apache License v2.0 is available at | |
13 // http://www.opensource.org/licenses/apache2.0.php | |
14 // | |
15 // You may elect to redistribute this code under either of these licenses. | |
16 // ======================================================================== | |
17 // | |
18 | |
19 | |
20 package org.eclipse.jetty.io.bio; | |
21 | |
22 import java.io.IOException; | |
23 import java.io.InputStream; | |
24 import java.io.OutputStream; | |
25 import java.net.SocketTimeoutException; | |
26 | |
27 import org.eclipse.jetty.io.Buffer; | |
28 import org.eclipse.jetty.io.EndPoint; | |
29 | |
30 public class StreamEndPoint implements EndPoint | |
31 { | |
32 InputStream _in; | |
33 OutputStream _out; | |
34 int _maxIdleTime; | |
35 boolean _ishut; | |
36 boolean _oshut; | |
37 | |
38 /** | |
39 * | |
40 */ | |
41 public StreamEndPoint(InputStream in, OutputStream out) | |
42 { | |
43 _in=in; | |
44 _out=out; | |
45 } | |
46 | |
47 public boolean isBlocking() | |
48 { | |
49 return true; | |
50 } | |
51 | |
52 public boolean blockReadable(long millisecs) throws IOException | |
53 { | |
54 return true; | |
55 } | |
56 | |
57 public boolean blockWritable(long millisecs) throws IOException | |
58 { | |
59 return true; | |
60 } | |
61 | |
62 /* | |
63 * @see org.eclipse.io.BufferIO#isOpen() | |
64 */ | |
65 public boolean isOpen() | |
66 { | |
67 return _in!=null; | |
68 } | |
69 | |
70 /* | |
71 * @see org.eclipse.io.BufferIO#isOpen() | |
72 */ | |
73 public final boolean isClosed() | |
74 { | |
75 return !isOpen(); | |
76 } | |
77 | |
78 public void shutdownOutput() throws IOException | |
79 { | |
80 _oshut = true; | |
81 if (_ishut && _out!=null) | |
82 _out.close(); | |
83 } | |
84 | |
85 public boolean isInputShutdown() | |
86 { | |
87 return _ishut; | |
88 } | |
89 | |
90 public void shutdownInput() throws IOException | |
91 { | |
92 _ishut = true; | |
93 if (_oshut&&_in!=null) | |
94 _in.close(); | |
95 } | |
96 | |
97 public boolean isOutputShutdown() | |
98 { | |
99 return _oshut; | |
100 } | |
101 | |
102 /* | |
103 * @see org.eclipse.io.BufferIO#close() | |
104 */ | |
105 public void close() throws IOException | |
106 { | |
107 if (_in!=null) | |
108 _in.close(); | |
109 _in=null; | |
110 if (_out!=null) | |
111 _out.close(); | |
112 _out=null; | |
113 } | |
114 | |
115 protected void idleExpired() throws IOException | |
116 { | |
117 if (_in!=null) | |
118 _in.close(); | |
119 } | |
120 | |
121 /* (non-Javadoc) | |
122 * @see org.eclipse.io.BufferIO#fill(org.eclipse.io.Buffer) | |
123 */ | |
124 public int fill(Buffer buffer) throws IOException | |
125 { | |
126 if (_ishut) | |
127 return -1; | |
128 if (_in==null) | |
129 return 0; | |
130 | |
131 int space=buffer.space(); | |
132 if (space<=0) | |
133 { | |
134 if (buffer.hasContent()) | |
135 return 0; | |
136 throw new IOException("FULL"); | |
137 } | |
138 | |
139 try | |
140 { | |
141 int filled=buffer.readFrom(_in, space); | |
142 if (filled<0) | |
143 shutdownInput(); | |
144 return filled; | |
145 } | |
146 catch(SocketTimeoutException e) | |
147 { | |
148 idleExpired(); | |
149 return -1; | |
150 } | |
151 } | |
152 | |
153 /* (non-Javadoc) | |
154 * @see org.eclipse.io.BufferIO#flush(org.eclipse.io.Buffer) | |
155 */ | |
156 public int flush(Buffer buffer) throws IOException | |
157 { | |
158 if (_oshut) | |
159 return -1; | |
160 if (_out==null) | |
161 return 0; | |
162 int length=buffer.length(); | |
163 if (length>0) | |
164 buffer.writeTo(_out); | |
165 if (!buffer.isImmutable()) | |
166 buffer.clear(); | |
167 return length; | |
168 } | |
169 | |
170 /* (non-Javadoc) | |
171 * @see org.eclipse.io.BufferIO#flush(org.eclipse.io.Buffer, org.eclipse.io.Buffer, org.eclipse.io.Buffer) | |
172 */ | |
173 public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException | |
174 { | |
175 int len=0; | |
176 | |
177 if (header!=null) | |
178 { | |
179 int tw=header.length(); | |
180 if (tw>0) | |
181 { | |
182 int f=flush(header); | |
183 len=f; | |
184 if (f<tw) | |
185 return len; | |
186 } | |
187 } | |
188 | |
189 if (buffer!=null) | |
190 { | |
191 int tw=buffer.length(); | |
192 if (tw>0) | |
193 { | |
194 int f=flush(buffer); | |
195 if (f<0) | |
196 return len>0?len:f; | |
197 len+=f; | |
198 if (f<tw) | |
199 return len; | |
200 } | |
201 } | |
202 | |
203 if (trailer!=null) | |
204 { | |
205 int tw=trailer.length(); | |
206 if (tw>0) | |
207 { | |
208 int f=flush(trailer); | |
209 if (f<0) | |
210 return len>0?len:f; | |
211 len+=f; | |
212 } | |
213 } | |
214 return len; | |
215 } | |
216 | |
217 /* ------------------------------------------------------------ */ | |
218 /* | |
219 * @see org.eclipse.io.EndPoint#getLocalAddr() | |
220 */ | |
221 public String getLocalAddr() | |
222 { | |
223 return null; | |
224 } | |
225 | |
226 /* ------------------------------------------------------------ */ | |
227 /* | |
228 * @see org.eclipse.io.EndPoint#getLocalHost() | |
229 */ | |
230 public String getLocalHost() | |
231 { | |
232 return null; | |
233 } | |
234 | |
235 /* ------------------------------------------------------------ */ | |
236 /* | |
237 * @see org.eclipse.io.EndPoint#getLocalPort() | |
238 */ | |
239 public int getLocalPort() | |
240 { | |
241 return 0; | |
242 } | |
243 | |
244 /* ------------------------------------------------------------ */ | |
245 /* | |
246 * @see org.eclipse.io.EndPoint#getRemoteAddr() | |
247 */ | |
248 public String getRemoteAddr() | |
249 { | |
250 return null; | |
251 } | |
252 | |
253 /* ------------------------------------------------------------ */ | |
254 /* | |
255 * @see org.eclipse.io.EndPoint#getRemoteHost() | |
256 */ | |
257 public String getRemoteHost() | |
258 { | |
259 return null; | |
260 } | |
261 | |
262 /* ------------------------------------------------------------ */ | |
263 /* | |
264 * @see org.eclipse.io.EndPoint#getRemotePort() | |
265 */ | |
266 public int getRemotePort() | |
267 { | |
268 return 0; | |
269 } | |
270 | |
271 /* ------------------------------------------------------------ */ | |
272 /* | |
273 * @see org.eclipse.io.EndPoint#getConnection() | |
274 */ | |
275 public Object getTransport() | |
276 { | |
277 return null; | |
278 } | |
279 | |
280 /* ------------------------------------------------------------ */ | |
281 public InputStream getInputStream() | |
282 { | |
283 return _in; | |
284 } | |
285 | |
286 /* ------------------------------------------------------------ */ | |
287 public void setInputStream(InputStream in) | |
288 { | |
289 _in=in; | |
290 } | |
291 | |
292 /* ------------------------------------------------------------ */ | |
293 public OutputStream getOutputStream() | |
294 { | |
295 return _out; | |
296 } | |
297 | |
298 /* ------------------------------------------------------------ */ | |
299 public void setOutputStream(OutputStream out) | |
300 { | |
301 _out=out; | |
302 } | |
303 | |
304 | |
305 /* ------------------------------------------------------------ */ | |
306 public void flush() | |
307 throws IOException | |
308 { | |
309 if (_out != null) | |
310 _out.flush(); | |
311 } | |
312 | |
313 /* ------------------------------------------------------------ */ | |
314 public int getMaxIdleTime() | |
315 { | |
316 return _maxIdleTime; | |
317 } | |
318 | |
319 /* ------------------------------------------------------------ */ | |
320 public void setMaxIdleTime(int timeMs) throws IOException | |
321 { | |
322 _maxIdleTime=timeMs; | |
323 } | |
324 | |
325 } |