1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.http.nio.protocol;
29
30 import java.io.IOException;
31
32 import org.apache.http.HttpEntity;
33 import org.apache.http.HttpResponse;
34 import org.apache.http.nio.ContentEncoder;
35 import org.apache.http.nio.IOControl;
36 import org.apache.http.nio.entity.EntityAsyncContentProducer;
37 import org.apache.http.nio.entity.HttpAsyncContentProducer;
38 import org.apache.http.protocol.HTTP;
39 import org.apache.http.protocol.HttpContext;
40
41 class ErrorResponseProducer implements HttpAsyncResponseProducer {
42
43 private final HttpResponse response;
44 private final HttpEntity entity;
45 private final HttpAsyncContentProducer contentProducer;
46 private final boolean keepAlive;
47
48 ErrorResponseProducer(
49 final HttpResponse response,
50 final HttpEntity entity,
51 final boolean keepAlive) {
52 super();
53 this.response = response;
54 this.entity = entity;
55 if (entity instanceof HttpAsyncContentProducer) {
56 this.contentProducer = (HttpAsyncContentProducer) entity;
57 } else {
58 this.contentProducer = new EntityAsyncContentProducer(entity);
59 }
60 this.keepAlive = keepAlive;
61 }
62
63 public HttpResponse generateResponse() {
64 if (this.keepAlive) {
65 response.addHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE);
66 } else {
67 response.addHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE);
68 }
69 response.setEntity(this.entity);
70 return response;
71 }
72
73 public void produceContent(
74 final ContentEncoder encoder, final IOControl ioctrl) throws IOException {
75 this.contentProducer.produceContent(encoder, ioctrl);
76 }
77
78 public void responseCompleted(final HttpContext context) {
79 }
80
81 public void failed(final Exception ex) {
82 }
83
84 public void close() throws IOException {
85 this.contentProducer.close();
86 }
87
88 }