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();
}