X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Futil%2FResponseBuffer.java;h=96d4563fd8e3a3f330ef9da318a4d891217bed8a;hb=13e578b10b388cc0dea88e05b79265c21416e3a0;hp=7c5760882aadd19c8db6dc4572fd65e27de34a7a;hpb=78f5d1201f8d3aecb660b7877b08d9bfbe650911;p=jsvc.git diff --git a/src/dolda/jsvc/util/ResponseBuffer.java b/src/dolda/jsvc/util/ResponseBuffer.java index 7c57608..96d4563 100644 --- a/src/dolda/jsvc/util/ResponseBuffer.java +++ b/src/dolda/jsvc/util/ResponseBuffer.java @@ -4,23 +4,34 @@ import dolda.jsvc.*; import java.io.*; import java.util.*; -public abstract class ResponseBuffer implements Request { +public abstract class ResponseBuffer implements ResettableRequest { private boolean flushed = false; - private int respcode = -1; - private String resptext = null; + protected int respcode = -1; + protected String resptext = null; private OutputStream out = null, wrapout = null; - private MultiMap headers = new HeaderTreeMap() { - protected void modified() { - ckflush(); - } - }; + private MultiMap headers; + + public ResponseBuffer() { + init(); + } + + private void init() { + ckflush(); + wrapout = null; + respcode = -1; + headers = new HeaderTreeMap() { + protected void modified() { + ckflush(); + } + }; + } private void ckflush() { if(flushed) throw(new IllegalStateException("Response has been flushed; header information cannot be modified")); } - private void flush() { + private void flush() throws IOException { if(flushed) return; if(respcode < 0) { @@ -81,6 +92,14 @@ public abstract class ResponseBuffer implements Request { return(headers); } - protected abstract void backflush(); + public boolean canreset() { + return(!flushed); + } + + public void reset() { + init(); + } + + protected abstract void backflush() throws IOException; protected abstract OutputStream realoutput(); }