@@ -113,40 +113,34 @@ void initFirstWrite() {
113
113
String statusLine = String .format (Locale .ENGLISH , "%s %s %s" , httpVersion , code , AsyncHttpServer .getResponseCodeDescription (code ));
114
114
String rh = mRawHeaders .toPrefixString (statusLine );
115
115
116
- Util .writeAll (mSocket , rh .getBytes (), new CompletedCallback () {
117
- @ Override
118
- public void onCompleted (Exception ex ) {
119
- if (ex != null ) {
120
- report (ex );
121
- return ;
122
- }
123
- if (isChunked ) {
124
- ChunkedOutputFilter chunked = new ChunkedOutputFilter (mSocket );
125
- chunked .setMaxBuffer (0 );
126
- mSink = chunked ;
127
- }
128
- else {
129
- mSink = mSocket ;
130
- }
131
-
132
- mSink .setClosedCallback (closedCallback );
133
- closedCallback = null ;
134
- mSink .setWriteableCallback (writable );
135
- writable = null ;
136
- if (ended ) {
137
- // the response ended while headers were written
138
- end ();
139
- return ;
140
- }
141
- getServer ().post (new Runnable () {
142
- @ Override
143
- public void run () {
144
- WritableCallback wb = getWriteableCallback ();
145
- if (wb != null )
146
- wb .onWriteable ();
147
- }
148
- });
116
+ Util .writeAll (mSocket , rh .getBytes (), ex -> {
117
+ if (ex != null ) {
118
+ report (ex );
119
+ return ;
120
+ }
121
+ if (isChunked ) {
122
+ ChunkedOutputFilter chunked = new ChunkedOutputFilter (mSocket );
123
+ chunked .setMaxBuffer (0 );
124
+ mSink = chunked ;
125
+ }
126
+ else {
127
+ mSink = mSocket ;
128
+ }
129
+
130
+ mSink .setClosedCallback (closedCallback );
131
+ closedCallback = null ;
132
+ mSink .setWriteableCallback (writable );
133
+ writable = null ;
134
+ if (ended ) {
135
+ // the response ended while headers were written
136
+ end ();
137
+ return ;
149
138
}
139
+ getServer ().post (() -> {
140
+ WritableCallback wb = getWriteableCallback ();
141
+ if (wb != null )
142
+ wb .onWriteable ();
143
+ });
150
144
});
151
145
}
152
146
@@ -183,9 +177,8 @@ public void end() {
183
177
mRawHeaders .remove ("Transfer-Encoding" );
184
178
}
185
179
if (mSink instanceof ChunkedOutputFilter ) {
186
- ((ChunkedOutputFilter )mSink ).setMaxBuffer (Integer .MAX_VALUE );
187
- mSink .write (new ByteBufferList ());
188
- onEnd ();
180
+ // this filter won't close the socket underneath.
181
+ mSink .end ();
189
182
}
190
183
else if (!headWritten ) {
191
184
if (!mRequest .getMethod ().equalsIgnoreCase (AsyncHttpHead .METHOD ))
@@ -218,7 +211,7 @@ public void send(final String contentType, final byte[] bytes) {
218
211
@ Override
219
212
public <T > void sendBody (AsyncParser <T > body , T value ) {
220
213
mRawHeaders .set ("Content-Type" , body .getMime ());
221
- body .write (this , value , ex -> onEnd ());
214
+ body .write (this , value , ex -> end ());
222
215
}
223
216
224
217
@ Override
@@ -234,12 +227,7 @@ public void send(String contentType, ByteBufferList bb) {
234
227
if (contentType != null )
235
228
mRawHeaders .set ("Content-Type" , contentType );
236
229
237
- Util .writeAll (AsyncHttpServerResponseImpl .this , bb , new CompletedCallback () {
238
- @ Override
239
- public void onCompleted (Exception ex ) {
240
- onEnd ();
241
- }
242
- });
230
+ Util .writeAll (AsyncHttpServerResponseImpl .this , bb , ex -> onEnd ());
243
231
});
244
232
}
245
233
@@ -332,18 +320,12 @@ public void sendStream(final InputStream inputStream, long totalLength) {
332
320
onEnd ();
333
321
return ;
334
322
}
335
- getServer ().post (new Runnable () {
336
- @ Override
337
- public void run () {
338
- Util .pump (inputStream , mContentLength , AsyncHttpServerResponseImpl .this , new CompletedCallback () {
339
- @ Override
340
- public void onCompleted (Exception ex ) {
341
- StreamUtility .closeQuietly (inputStream );
342
- onEnd ();
343
- }
344
- });
345
- }
346
- });
323
+ getServer ().post (() ->
324
+ Util .pump (inputStream , mContentLength , AsyncHttpServerResponseImpl .this ,
325
+ ex -> {
326
+ StreamUtility .closeQuietly (inputStream );
327
+ onEnd ();
328
+ }));
347
329
}
348
330
catch (Exception e ) {
349
331
code (500 );
@@ -374,13 +356,10 @@ public void proxy(final AsyncHttpResponse remoteResponse) {
374
356
getHeaders ().addAll (remoteResponse .headers ());
375
357
// TODO: remove?
376
358
remoteResponse .headers ().set ("Connection" , "close" );
377
- Util .pump (remoteResponse , this , new CompletedCallback () {
378
- @ Override
379
- public void onCompleted (Exception ex ) {
380
- remoteResponse .setEndCallback (new NullCompletedCallback ());
381
- remoteResponse .setDataCallback (new DataCallback .NullDataCallback ());
382
- end ();
383
- }
359
+ Util .pump (remoteResponse , this , ex -> {
360
+ remoteResponse .setEndCallback (new NullCompletedCallback ());
361
+ remoteResponse .setDataCallback (new DataCallback .NullDataCallback ());
362
+ end ();
384
363
});
385
364
}
386
365
0 commit comments