001: /* HttpRecorderMethod
002: *
003: * Created on August 22, 2004
004: *
005: * Copyright (C) 2003 Internet Archive.
006: *
007: * This file is part of the Heritrix web crawler (crawler.archive.org).
008: *
009: * Heritrix is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU Lesser Public License as published by
011: * the Free Software Foundation; either version 2.1 of the License, or
012: * any later version.
013: *
014: * Heritrix is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
017: * GNU Lesser Public License for more details.
018: *
019: * You should have received a copy of the GNU Lesser Public License
020: * along with Heritrix; if not, write to the Free Software
021: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022: */
023: package org.archive.httpclient;
024:
025: import java.util.logging.Logger;
026:
027: import org.apache.commons.httpclient.Header;
028: import org.apache.commons.httpclient.HttpConnection;
029: import org.apache.commons.httpclient.HttpMethod;
030: import org.archive.util.HttpRecorder;
031:
032: /**
033: * This class encapsulates the specializations supplied by the
034: * overrides {@link HttpRecorderGetMethod} and {@link HttpRecorderPostMethod}.
035: *
036: * It keeps instance of HttpRecorder and HttpConnection.
037: *
038: * @author stack
039: * @version $Revision: 3351 $, $Date: 2005-04-07 21:44:47 +0000 (Thu, 07 Apr 2005) $
040: */
041: public class HttpRecorderMethod {
042: protected static Logger logger = Logger
043: .getLogger(HttpRecorderMethod.class.getName());
044:
045: /**
046: * Instance of http recorder we're using recording this http get.
047: */
048: private HttpRecorder httpRecorder = null;
049:
050: /**
051: * Save around so can force close.
052: *
053: * See [ 922080 ] IllegalArgumentException (size is wrong).
054: * https://sourceforge.net/tracker/?func=detail&aid=922080&group_id=73833&atid=539099
055: */
056: private HttpConnection connection = null;
057:
058: public HttpRecorderMethod(HttpRecorder recorder) {
059: this .httpRecorder = recorder;
060: }
061:
062: public void markContentBegin(HttpConnection c) {
063: if (c != this .connection) {
064: // We're checking that we're not being asked to work on
065: // a connection that is other than the one we started
066: // this method#execute with.
067: throw new IllegalArgumentException("Connections differ: "
068: + this .connection + " " + c + " "
069: + Thread.currentThread().getName());
070: }
071: this .httpRecorder.markContentBegin();
072: }
073:
074: /**
075: * @return Returns the connection.
076: */
077: public HttpConnection getConnection() {
078: return this .connection;
079: }
080:
081: /**
082: * @param connection The connection to set.
083: */
084: public void setConnection(HttpConnection connection) {
085: this .connection = connection;
086: }
087:
088: /**
089: * @return Returns the httpRecorder.
090: */
091: public HttpRecorder getHttpRecorder() {
092: return httpRecorder;
093: }
094:
095: /**
096: * If a 'Proxy-Connection' header has been added to the request,
097: * it'll be of a 'keep-alive' type. Until we support 'keep-alives',
098: * override the Proxy-Connection setting and instead pass a 'close'
099: * (Otherwise every request has to timeout before we notice
100: * end-of-document).
101: * @param method Method to find proxy-connection header in.
102: */
103: public void handleAddProxyConnectionHeader(HttpMethod method) {
104: Header h = method.getRequestHeader("Proxy-Connection");
105: if (h != null) {
106: h.setValue("close");
107: method.setRequestHeader(h);
108: }
109: }
110: }
|