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.impl.io;
29
30 import java.io.IOException;
31
32 import org.apache.http.HttpException;
33 import org.apache.http.HttpResponse;
34 import org.apache.http.HttpResponseFactory;
35 import org.apache.http.NoHttpResponseException;
36 import org.apache.http.ParseException;
37 import org.apache.http.StatusLine;
38 import org.apache.http.annotation.NotThreadSafe;
39 import org.apache.http.config.MessageConstraints;
40 import org.apache.http.impl.DefaultHttpResponseFactory;
41 import org.apache.http.io.SessionInputBuffer;
42 import org.apache.http.message.BasicLineParser;
43 import org.apache.http.message.LineParser;
44 import org.apache.http.message.ParserCursor;
45 import org.apache.http.params.HttpParams;
46 import org.apache.http.util.Args;
47 import org.apache.http.util.CharArrayBuffer;
48
49
50
51
52
53
54
55 @SuppressWarnings("deprecation")
56 @NotThreadSafe
57 public class DefaultHttpResponseParser extends AbstractMessageParser<HttpResponse> {
58
59 private final HttpResponseFactory responseFactory;
60 private final CharArrayBuffer lineBuf;
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 @Deprecated
76 public DefaultHttpResponseParser(
77 final SessionInputBuffer buffer,
78 final LineParser lineParser,
79 final HttpResponseFactory responseFactory,
80 final HttpParams params) {
81 super(buffer, lineParser, params);
82 this.responseFactory = Args.notNull(responseFactory, "Response factory");
83 this.lineBuf = new CharArrayBuffer(128);
84 }
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 public DefaultHttpResponseParser(
100 final SessionInputBuffer buffer,
101 final LineParser lineParser,
102 final HttpResponseFactory responseFactory,
103 final MessageConstraints constraints) {
104 super(buffer, lineParser, constraints);
105 this.responseFactory = responseFactory != null ? responseFactory :
106 DefaultHttpResponseFactory.INSTANCE;
107 this.lineBuf = new CharArrayBuffer(128);
108 }
109
110
111
112
113 public DefaultHttpResponseParser(
114 final SessionInputBuffer buffer,
115 final MessageConstraints constraints) {
116 this(buffer, null, null, constraints);
117 }
118
119
120
121
122 public DefaultHttpResponseParser(final SessionInputBuffer buffer) {
123 this(buffer, null, null, MessageConstraints.DEFAULT);
124 }
125
126 @Override
127 protected HttpResponse parseHead(
128 final SessionInputBuffer sessionBuffer)
129 throws IOException, HttpException, ParseException {
130
131 this.lineBuf.clear();
132 final int i = sessionBuffer.readLine(this.lineBuf);
133 if (i == -1) {
134 throw new NoHttpResponseException("The target server failed to respond");
135 }
136
137 final ParserCursor cursor = new ParserCursor(0, this.lineBuf.length());
138 final StatusLine statusline = lineParser.parseStatusLine(this.lineBuf, cursor);
139 return this.responseFactory.newHttpResponse(statusline, null);
140 }
141
142 }