Author: toad
Date: 2006-11-09 22:18:34 +0000 (Thu, 09 Nov 2006)
New Revision: 10851

Modified:
   trunk/freenet/src/freenet/client/Metadata.java
   trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java
   trunk/freenet/src/freenet/clients/http/filter/HTMLFilter.java
   trunk/freenet/src/freenet/support/io/BucketTools.java
Log:
Some optimisations.
Include proper Connection header; fixes wget not being able to fetch from 
fproxy.
Fix nio bug in BucketTools.copy.

Modified: trunk/freenet/src/freenet/client/Metadata.java
===================================================================
--- trunk/freenet/src/freenet/client/Metadata.java      2006-11-09 21:16:38 UTC 
(rev 10850)
+++ trunk/freenet/src/freenet/client/Metadata.java      2006-11-09 22:18:34 UTC 
(rev 10851)
@@ -1,5 +1,6 @@
 package freenet.client;

+import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
@@ -143,9 +144,10 @@
         */
        public static Metadata construct(Bucket data) throws 
MetadataParseException, IOException {
                InputStream is = data.getInputStream();
+               BufferedInputStream bis = new BufferedInputStream(is, 4096);
                Metadata m;
                try {
-                       DataInputStream dis = new DataInputStream(is);
+                       DataInputStream dis = new DataInputStream(bis);
                        m = new Metadata(dis, data.size());
                } finally {
                        is.close();

Modified: trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java      
2006-11-09 21:16:38 UTC (rev 10850)
+++ trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java      
2006-11-09 22:18:34 UTC (rev 10851)
@@ -37,6 +37,7 @@
         * may be later requests.
         */
        private boolean closed;
+       private boolean shouldDisconnect;

        public ToadletContextImpl(Socket sock, MultiValueTable headers, String 
CSSName, BucketFactory bf, PageMaker pageMaker) throws IOException {
                this.headers = headers;
@@ -63,10 +64,8 @@

        private static void sendError(OutputStream os, int code, String 
message, String htmlMessage, boolean disconnect, MultiValueTable mvt) throws 
IOException {
                if(mvt == null) mvt = new MultiValueTable();
-               if(disconnect)
-                       mvt.put("Connection", "close");
                byte[] messageBytes = htmlMessage.getBytes("UTF-8");
-               sendReplyHeaders(os, code, message, mvt, "text/html; 
charset=UTF-8", messageBytes.length);
+               sendReplyHeaders(os, code, message, mvt, "text/html; 
charset=UTF-8", messageBytes.length, disconnect);
                os.write(messageBytes);
        }

@@ -81,7 +80,7 @@

        public void sendReplyHeaders(int replyCode, String replyDescription, 
MultiValueTable mvt, String mimeType, long contentLength) throws 
ToadletContextClosedException, IOException {
                if(closed) throw new ToadletContextClosedException();
-               sendReplyHeaders(sockOutputStream, replyCode, replyDescription, 
mvt, mimeType, contentLength);
+               sendReplyHeaders(sockOutputStream, replyCode, replyDescription, 
mvt, mimeType, contentLength, shouldDisconnect);
        }

        public PageMaker getPageMaker() {
@@ -92,7 +91,7 @@
                return headers;
        }

-       static void sendReplyHeaders(OutputStream sockOutputStream, int 
replyCode, String replyDescription, MultiValueTable mvt, String mimeType, long 
contentLength) throws IOException {
+       static void sendReplyHeaders(OutputStream sockOutputStream, int 
replyCode, String replyDescription, MultiValueTable mvt, String mimeType, long 
contentLength, boolean disconnect) throws IOException {
                // Construct headers
                if(mvt == null)
                        mvt = new MultiValueTable();
@@ -112,6 +111,10 @@
                mvt.put("last-modified", 
makeHTTPDate(System.currentTimeMillis()-1000));
                mvt.put("pragma", "no-cache");
                mvt.put("cache-control", "max-age=0, must-revalidate, no-cache, 
no-store, post-check=0, pre-check=0");
+               if(disconnect)
+                       mvt.put("connection", "close");
+               else
+                       mvt.put("connection", "keep-alive");
                StringBuffer buf = new StringBuffer(1024);
                buf.append("HTTP/1.1 ");
                buf.append(replyCode);
@@ -230,6 +233,7 @@
                                boolean shouldDisconnect = 
shouldDisconnectAfterHandled(split[2].equals("HTTP/1.0"), headers);

                                ToadletContextImpl ctx = new 
ToadletContextImpl(sock, headers, container.getCSSName(), bf, pageMaker);
+                               ctx.shouldDisconnect = shouldDisconnect;

                                /*
                                 * if we're handling a POST, copy the data into 
a bucket now,

Modified: trunk/freenet/src/freenet/clients/http/filter/HTMLFilter.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/filter/HTMLFilter.java       
2006-11-09 21:16:38 UTC (rev 10850)
+++ trunk/freenet/src/freenet/clients/http/filter/HTMLFilter.java       
2006-11-09 22:18:34 UTC (rev 10851)
@@ -2,6 +2,8 @@

 package freenet.clients.http.filter;

+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.IOException;
@@ -41,13 +43,15 @@
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR) Logger.minor(this, "readFilter(): 
charset="+charset);
                InputStream strm = bucket.getInputStream();
+               BufferedInputStream bis = new BufferedInputStream(strm, 4096);
                Bucket temp = bf.makeBucket(bucket.size());
                OutputStream os = temp.getOutputStream();
+               BufferedOutputStream bos = new BufferedOutputStream(os, 4096);
                Reader r;
                Writer w;
                try {
-                       r = new BufferedReader(new InputStreamReader(strm, 
charset), 32768);
-                       w = new BufferedWriter(new OutputStreamWriter(os, 
charset), 32768);
+                       r = new BufferedReader(new InputStreamReader(bis, 
charset), 4096);
+                       w = new BufferedWriter(new OutputStreamWriter(bos, 
charset), 4096);
                } catch (UnsupportedEncodingException e) {
                        os.close();
                        strm.close();
@@ -73,9 +77,10 @@
                logMINOR = Logger.shouldLog(Logger.MINOR, this);                
                if(logMINOR) Logger.minor(this, "getCharset(): 
default="+parseCharset);
                InputStream strm = bucket.getInputStream();
+               BufferedInputStream bis = new BufferedInputStream(strm, 4096);
                Writer w = new NullWriter();
                Reader r;
-               r = new BufferedReader(new InputStreamReader(strm, 
parseCharset), 32768);
+               r = new BufferedReader(new InputStreamReader(bis, 
parseCharset), 4096);
                HTMLParseContext pc = new HTMLParseContext(r, w, null, new 
NullFilterCallback());
                try {
                        pc.run(null);

Modified: trunk/freenet/src/freenet/support/io/BucketTools.java
===================================================================
--- trunk/freenet/src/freenet/support/io/BucketTools.java       2006-11-09 
21:16:38 UTC (rev 10850)
+++ trunk/freenet/src/freenet/support/io/BucketTools.java       2006-11-09 
22:18:34 UTC (rev 10851)
@@ -40,7 +40,8 @@
                ByteBuffer buffer = ByteBuffer.allocateDirect(BLOCK_SIZE);
                while (readChannel.read(buffer) != -1) {
                        buffer.flip();
-                       writeChannel.write(buffer);
+                       while(buffer.hasRemaining())
+                               writeChannel.write(buffer);
                        buffer.clear();
                }



Reply via email to