-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathResponseHandler.java
More file actions
138 lines (120 loc) · 3.95 KB
/
ResponseHandler.java
File metadata and controls
138 lines (120 loc) · 3.95 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* @(#)ResponseHandler.java 0.3-3 06/05/2001
*
* This file is part of the HTTPClient package
* Copyright (C) 1996-2001 Ronald Tschal�r
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307, USA
*
* For questions, suggestions, bug-reports, enhancement-requests etc.
* I may be contacted at:
*
* ronald@innovation.ch
*
* The HTTPClient's home page is located at:
*
* http://www.innovation.ch/java/HTTPClient/
*
*/
package HTTPClient;
import java.io.IOException;
/**
* This holds various information about an active response. Used by the
* StreamDemultiplexor and RespInputStream.
*
* @version 0.3-3 06/05/2001
* @author Ronald Tschal�r
* @since V0.2
*/
final class ResponseHandler
{
/** the response stream */
RespInputStream stream;
/** the response class */
Response resp;
/** the response class */
Request request;
/** signals that the demux has closed the response stream, and that
therefore no more data can be read */
boolean eof = false;
/** this is non-null if the stream has an exception pending */
IOException exception = null;
/**
* Creates a new handler. This also allocates the response input
* stream.
*
* @param resp the reponse
* @param request the request
* @param demux our stream demultiplexor.
*/
ResponseHandler(Response resp, Request request, StreamDemultiplexor demux)
{
this.resp = resp;
this.request = request;
this.stream = new RespInputStream(demux, this);
Log.write(Log.DEMUX, "Demux: Opening stream " + this.stream.hashCode() +
" for demux (" + demux.hashCode() + ")");
}
/** holds the string that marks the end of this stream; used for
multipart delimited responses. */
private byte[] endbndry = null;
/** holds the compilation of the above string */
private int[] end_cmp = null;
/**
* return the boundary string for this response. Set's up the
* InputStream buffer if neccessary.
*
* @param MasterStream the input stream from which the stream demux
* is reading.
* @return the boundary string.
*/
byte[] getEndBoundary(BufferedInputStream MasterStream)
throws IOException, ParseException
{
if (endbndry == null)
setupBoundary(MasterStream);
return endbndry;
}
/**
* return the compilation of the boundary string for this response.
* Set's up the InputStream buffer if neccessary.
*
* @param MasterStream the input stream from which the stream demux
* is reading.
* @return the compiled boundary string.
*/
int[] getEndCompiled(BufferedInputStream MasterStream)
throws IOException, ParseException
{
if (end_cmp == null)
setupBoundary(MasterStream);
return end_cmp;
}
/**
* Gets the boundary string, compiles it for searching, and initializes
* the buffered input stream.
*/
void setupBoundary(BufferedInputStream MasterStream)
throws IOException, ParseException
{
String endstr = "--" + Util.getParameter("boundary",
resp.getHeader("Content-Type")) +
"--\r\n";
endbndry = endstr.getBytes("8859_1");
end_cmp = Util.compile_search(endbndry);
MasterStream.markForSearch();
}
}