- 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