W3C home > Mailing lists > Public > www-jigsaw@w3.org > July to August 2000

Re: mark/reset not supported

From: Benoit Mahe <Benoit.Mahe@sophia.inria.fr>
Date: Wed, 16 Aug 2000 18:23:26 +0200
Message-ID: <399ABFFE.2AFBACCE@sophia.inria.fr>
To: Eamon Dalton <edalton@wilde.cs.tcd.ie>
CC: www-jigsaw@w3.org
Sometimes Jigsaw needs to reset some streams and PipedInputStream does not
support mark/reset, that the reason why this exception occured.

Regards, Benoit.

Eamon Dalton wrote:
> 
> 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();
>     }
> }

-- 
- Benoît Mahé -------------------------------------------------------
                      World Wide Web Consortium   (W3C)
                    Architecture domain - Jigsaw Engineer           

                http://www.w3.org/People/Mahe  - bmahe@w3.org
---------------------------------------------------------------------
Received on Wednesday, 16 August 2000 12:23:36 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 9 April 2012 12:13:34 GMT