- From: Eamon Dalton <edalton@wilde.cs.tcd.ie>
- Date: Fri, 11 Aug 2000 23:07:53 +0100 (BST)
- To: www-jigsaw@w3.org
Hi,
I'm currently running Jigsaw in proxy configuration with a filter that I
have developed. The filter currently monitors all http requests and
associated replies from my browser so that performance can be analysed as
is percieved from an end user prespective, logged to a database and are
then summarised to give an overview of performance. What I am aiming at is
to provide a framework to implement Quality of Service(QoS) for services
that are delivered over HTTP.
At the moment, I'm able to measure the time that a request is sent, the
time that it's associated response headers are recieved and the size
and time taken to download the reply entity (if one exists) so kbps
download for the reply entity are possible to calculate.
I'm trying to extend my ingoing filter which currently only measures the
time that a request is sent ,to be able to calculate the size and rate of
upload of a request entity that a POST method typically has.
I'm having a problem with my code shown below which gives me the following
error for certain POST requests.. It appears that somewhere(I think in
HttpBasicServer), an inputStream is marked and reset which is causing the
problem but I'm not sure..
Any help would be appreciated..
Eamon.
java.io.IOException: mark/reset not supported
at java.io.InputStream.reset(InputStream.java:336)
at org.w3c.www.protocol.http.HttpBasicServer.runRequest(Compile
at org.w3c.www.protocol.http.HttpManager.runRequest(Compiled Co
at org.w3c.jigsaw.proxy.ForwardFrame.perform(Compiled Code)
at org.w3c.tools.resources.FramedResource.performFrames(Compile
at org.w3c.tools.resources.FramedResource.perform(Compiled Code
at org.w3c.jigsaw.http.httpd.perform(Compiled Code)
at org.w3c.jigsaw.http.Client.processRequest(Compiled Code)
at org.w3c.jigsaw.http.Client.startConnection(Compiled Code)
at org.w3c.jigsaw.http.socket.SocketClient.run(SocketClient.jav
at org.w3c.util.CachedThread.run(Compiled Code)
In my ingoingfilter, I am calling the following,
if(request.hasOutputStream()){
try {
PipedOutputStream pout = new PipedOutputStream();
PipedInputStream pin = new PipedInputStream(pout);
new RequestDataMover(request.getOutputStream(),pout);
request.setOutputStream(pin);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
and RequestDataMover(which is similar to what the
org.w3c.jigsaw.filters.GZIPDataMover does except that it's being done on
the request) looks like
class RequestDataMover extends Thread {
InputStream in = null;
OutputStream out = null;
public void run() {
try {
byte buf[] = new byte[1];
int got = -1;
//Calcuate some parameter..
int contentLenght = 0;
while ((got = in.read(buf)) >= 0){
out.write(buf, 0, got);
contentLenght = contentLenght + 1;
}
//Calcuate some more parameter..
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try { in.close(); } catch (Exception ex) {};
try { out.close(); } catch (Exception ex) {} ;
}
}
RequestDataMover(InputStream in, OutputStream out ) {
this.in = in;
this.out = out;
setName("RequestDataMover");
start();
}
}
Received on Friday, 11 August 2000 18:08:02 UTC