Revision: 3095
http://archive-access.svn.sourceforge.net/archive-access/?rev=3095&view=rev
Author: bradtofel
Date: 2010-05-17 19:33:41 +0000 (Mon, 17 May 2010)
Log Message:
-----------
FEATURE: now uses resource code to auto-detect and unchunkify chunked content. also does not forward on some hop-by-hop HTTP headers
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/liveweb/ARCUnwrappingProxy.java
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/liveweb/ARCUnwrappingProxy.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/liveweb/ARCUnwrappingProxy.java 2010-05-17 19:28:20 UTC (rev 3094)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/liveweb/ARCUnwrappingProxy.java 2010-05-17 19:33:41 UTC (rev 3095)
@@ -26,19 +26,24 @@
package org.archive.wayback.liveweb;
import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
import java.util.zip.GZIPInputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.log4j.Logger;
import org.archive.io.arc.ARCRecord;
+import org.archive.wayback.core.Resource;
+import org.archive.wayback.exception.ResourceNotAvailableException;
+import org.archive.wayback.resourcestore.resourcefile.ResourceFactory;
import org.archive.wayback.util.ByteOp;
import org.archive.wayback.util.webapp.AbstractRequestHandler;
@@ -56,6 +61,8 @@
*/
public class ARCUnwrappingProxy extends AbstractRequestHandler {
+ private static final Logger LOGGER =
+ Logger.getLogger(ARCUnwrappingProxy.class.getName());
private MultiThreadedHttpConnectionManager connectionManager = null;
private HostConfiguration hostConfiguration = null;
/**
@@ -75,7 +82,6 @@
sb.append("?").append(query);
}
HttpMethod method = new GetMethod(sb.toString());
-// method.addRequestHeader("User-Agent", userAgent);
boolean got200 = false;
try {
HttpClient http = new HttpClient(connectionManager);
@@ -87,14 +93,28 @@
new ARCRecord(new GZIPInputStream(
method.getResponseBodyAsStream()),
"id",0L,false,false,true);
- r.skipHttpHeader();
- httpResponse.setStatus(r.getStatusCode());
- Header headers[] = r.getHttpHeaders();
- for(Header header : headers) {
- httpResponse.addHeader(header.getName(), header.getValue());
+ Resource res = null;
+ try {
+ res = ResourceFactory.ARCArchiveRecordToResource(r, null);
+ } catch (ResourceNotAvailableException e) {
+ LOGGER.error(e);
+ throw new IOException(e);
+ }
+ httpResponse.setStatus(res.getStatusCode());
+
+ Map<String,String> headers = res.getHttpHeaders();
+ Iterator<String> keys = headers.keySet().iterator();
+ while(keys.hasNext()) {
+ String key = keys.next();
+ if(!key.equalsIgnoreCase("Connection")
+ && !key.equalsIgnoreCase("Content-Length")
+ && !key.equalsIgnoreCase("Transfer-Encoding")) {
+ String value = headers.get(key);
+ httpResponse.addHeader(key, value);
+ }
}
- ByteOp.copyStream(r, httpResponse.getOutputStream());
+ ByteOp.copyStream(res, httpResponse.getOutputStream());
got200 = true;
}
} finally {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|