mcardle 2006/01/06 02:08:56 CET
Modified files:
src/net/sf/j2ep/responsehandlers ResponseHandlerBase.java
Log:
* deals with "Connection reset by peer: socket write error"
Revision Changes Path
1.21 +57 -34
esi_server/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/esi_server/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java.diff?r1=1.20&r2=1.21&f=h
Index: ResponseHandlerBase.java
===================================================================
RCS file:
/home/cvs/repository/esi_server/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- ResponseHandlerBase.java 4 Jan 2006 22:57:29 -0000 1.20
+++ ResponseHandlerBase.java 6 Jan 2006 01:08:56 -0000 1.21
@@ -20,10 +20,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.net.URL;
-import java.net.MalformedURLException;
+import java.net.*;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Date;
@@ -167,12 +164,17 @@
//log.debug(".");
read = streamFromServer.read(buffer);
}
- streamFromServer.close();
+
+ }
+ }
+ catch (SocketException ex) {
+ if ( ex.getMessage().equals("Connection reset by peer: socket
write error") ) {
+ log.info("Client "+clientRequest.getRemoteAddr()+" has
prematurely closed the connection to " + this.getClientRequestURL().toString());
}
- clientResponseStream.flush();
}
finally {
-
+ streamFromServer.close();
+ clientResponseStream.flush();
clientResponseStream.close();
}
}
@@ -183,52 +185,69 @@
OutputStream clientResponseStream = clientResponse.getOutputStream();
ByteArrayOutputStream cacheStream = new ByteArrayOutputStream(1000);
+ boolean transferError = false;
- if (streamFromServer != null) {
- byte[] buffer = new byte[1024];
- int read = streamFromServer.read(buffer);
- while (read > 0) {
- clientResponseStream.write(buffer, 0, read);
- cacheStream.write(buffer, 0, read);
+ try {
+ if (streamFromServer != null) {
+ byte[] buffer = new byte[1024];
+ int read = streamFromServer.read(buffer);
+ while (read > 0) {
+ clientResponseStream.write(buffer, 0, read);
+ cacheStream.write(buffer, 0, read);
- read = streamFromServer.read(buffer);
+ read = streamFromServer.read(buffer);
+ }
}
- streamFromServer.close();
}
- clientResponseStream.flush();
- clientResponseStream.close();
+ catch (SocketException ex) {
+ if ( ex.getMessage().equals("Connection reset by peer: socket
write error") ) {
+ log.info("Client "+clientRequest.getRemoteAddr()+" has
prematurely closed the connection to " + this.getClientRequestURL().toString());
+ transferError = true;
+ }
+ }
+ finally {
+ streamFromServer.close();
- cacheStream.flush();
- cacheStream.close();
+ clientResponseStream.flush();
+ clientResponseStream.close();
- byte[] cacheByteContent = cacheStream.toByteArray();
+ cacheStream.flush();
+ cacheStream.close();
+ }
- FragmentCache fragmentCache = FragmentCache.getInstance();
+ if (!transferError) {
+ byte[] cacheByteContent = cacheStream.toByteArray();
- //fragmentCache.add(cacheKey, this.method, cacheByteContent);
- fragmentCache.add(cacheKey, this.methodToServer, cacheByteContent,
- this.getClientRequestURL().toString(),
- null, null, null ,null); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ FragmentCache fragmentCache = FragmentCache.getInstance();
+ //fragmentCache.add(cacheKey, this.method, cacheByteContent);
+ fragmentCache.add(cacheKey, this.methodToServer,
cacheByteContent,
+ this.getClientRequestURL().toString(),
+ null, null, null ,null);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ }
}
public void sendStreamToClientFromCache(ServletResponse clientResponse,
byte[] cachedByteContent) throws IOException {
OutputStream clientResponseStream = clientResponse.getOutputStream();
- //reset content-length header previously set by
copyHeadersFromServerResponseToClientResponse()
- clientResponse.setContentLength(cachedByteContent.length);
-
try {
+ //reset content-length header previously set by
copyHeadersFromServerResponseToClientResponse()
+ clientResponse.setContentLength(cachedByteContent.length);
+
if (cachedByteContent==null) {
log.error("sendStreamToClientFromCache : cachedByteContent
is NULL. so not sending anything");
}
else
clientResponseStream.write(cachedByteContent, 0,
cachedByteContent.length);
- clientResponseStream.flush();
+ }
+ catch (SocketException ex) {
+ if ( ex.getMessage().equals("Connection reset by peer: socket
write error") )
+ log.info("Client "+clientRequest.getRemoteAddr()+" has
prematurely closed the connection to " + this.getClientRequestURL().toString());
}
finally {
+ clientResponseStream.flush();
clientResponseStream.close();
}
}
@@ -274,6 +293,10 @@
location=true;
else if (name.equalsIgnoreCase("referer"))
referer=true;
+ else if (name.equalsIgnoreCase("Server")) {
+ clientResponse.addHeader(name, "Remote-" + val); //this is
the Server header from Jahia, so rename it since the current response will add
it's own Server Header
+ continue;
+ }
else if (name.equalsIgnoreCase("Transfer-Encoding")
&& val.toLowerCase().indexOf("chunked")!=-1)
transferEncodingChunked=true;
@@ -306,7 +329,7 @@
}
if (!connection
- && !transferEncodingChunked) {
+ && !transferEncodingChunked) {
//optionally ignore Set-Cookie header
if (setcookie && ignoreCookies) {
log.info("Ignored Set-Cookie header because this is a
response returned from Cache. Header:"+header);
@@ -459,8 +482,8 @@
else {
if (errorStatusCode==-5)
clientResponse.setStatus(getStatusCode());
- //if an TransferFailedException occured, then the
getStatusCode() might return NULL
- //so use the errorCode returned in the exception
+ //if an TransferFailedException occured, then the
getStatusCode() might return NULL
+ //so use the errorCode returned in the exception
else
clientResponse.setStatus(errorStatusCode);
@@ -486,7 +509,7 @@
Vector retrievedFrags = new Vector();
if (urlObj==null //not in cache?
- || urlObj.getExpirationDateInSecs() < (new Date()).getTime()/1000
//expired? //TODO: when implemented add "+ urlObj.getMaxRemovalDelayInSecs()"
+ || urlObj.getExpirationDateInSecs() < (new
Date()).getTime()/1000 //expired? //TODO: when implemented add "+
urlObj.getMaxRemovalDelayInSecs()"
) {
//TODO:Need to support all other methods such as POST !
fetchingSkeleton = true;
@@ -639,7 +662,7 @@
}
}
else
- if (log.isDebugEnabled()) log.debug("client submitted a
IfNoneMatch:"+IfNoneMatchHeader +" but cached server response did not contain
an ETag");
+ if (log.isDebugEnabled()) log.debug("client submitted a
IfNoneMatch:"+IfNoneMatchHeader +" but cached server response did not contain
an ETag");
}
long modSinceHeader =
clientRequest.getDateHeader("If-Modified-Since");