|
RequestResponseInfo |
|
/* ** Luxor - XML User Interface Language (XUL) Toolkit ** Copyright (c) 2001, 2002 by Gerald Bauer ** ** This program is free software. ** ** You may redistribute it and/or modify it under the terms of the GNU ** General Public License as published by the Free Software Foundation. ** Version 2 of the license should be included with this distribution in ** the file LICENSE, as well as License.html. If the license is not ** included with this distribution, you may find a copy at the FSF web ** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the ** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. ** ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR ** REDISTRIBUTION OF THIS SOFTWARE. ** */ package luxor.http; import java.io.*; import java.util.*; import javax.swing.event.*; import luxor.constant.*; import luxor.event.*; public class RequestResponseInfo { private ArrayList _error = new ArrayList(); private EventListenerList _listener = new EventListenerList(); private RequestInfo _requestInfo; private int _responseCode = -1; private long _responseContentLength = -1; // todo: add client ip/dns private Date _timestamp; public RequestResponseInfo() { _timestamp = new Date(); } public void setRequestInfo( RequestInfo requestInfo ) { _requestInfo = requestInfo; } public void setResponseCode( int responseCode ) { _responseCode = responseCode; } public void setResponseContentLength( long responseContentLength ) { _responseContentLength = responseContentLength; fireUpdateSize( _responseContentLength ); // todo: pass in respone object instead of size } public void setResponseError( Exception ex ) { fireError( ex ); // todo: pass in respone object instead of size // todo: set status to error } public void setResponseStatus( int status ) { fireUpdateStatus( status ); // todo: pass in respone object instead of size } public void setResponseTransferredSize( long size ) { fireUpdateTransferredSize( size ); // todo: pass in respone object instead of size } public String getLogString() { StringBuffer buf = new StringBuffer(); buf.append( "[" + _timestamp + "]" ); buf.append( " " + _requestInfo.getRequestLine() ); String userAgent = _requestInfo.getUserAgentHeader(); String referer = _requestInfo.getRefererHeader(); String host = _requestInfo.getHostHeader(); if( userAgent == null ) userAgent = ""; if( referer == null ) referer = ""; if( host == null ) host = ""; buf.append( " - " + userAgent ); buf.append( " - " + referer ); buf.append( " - " + host ); buf.append( " - " + _responseCode ); buf.append( " " + _responseContentLength ); return buf.toString(); } public RequestInfo getRequestInfo() { return _requestInfo; } /** * multi line log string */ public String getVerboseLogString() { StringBuffer buf = new StringBuffer(); buf.append( _requestInfo.getRequestLine() + "\r\n" ); Iterator it = _requestInfo.getHeaders().entrySet().iterator(); while( it.hasNext() ) { Map.Entry header = ( Map.Entry ) it.next(); String key = ( String ) header.getKey(); String value = ( String ) header.getValue(); buf.append( key + ": " + value + "\r\n" ); } Iterator errorIt = _error.iterator(); while( errorIt.hasNext() ) { Exception ex = ( Exception ) errorIt.next(); buf.append( "*** error: " + ex.toString() ); StringWriter stackTraceBuf = new StringWriter(); PrintWriter stackTraceOut = new PrintWriter( stackTraceBuf ); ex.printStackTrace( stackTraceOut ); buf.append( stackTraceBuf.toString() ); stackTraceOut.close(); } buf.append( "========== ========== ========== ========== ==========\r\n" ); return buf.toString(); } public void addError( Exception ex ) { _error.add( ex ); } public void addResponeListener( ResponseListener l ) { _listener.add( ResponseListener.class, l ); } public void removeResponseListener( ResponseListener l ) { _listener.remove( ResponseListener.class, l ); } protected void fireError( Exception ex ) { ResponseListener l[] = ( ResponseListener[] ) _listener.getListeners( ResponseListener.class ); for( int i = 0; i < l.length; i++ ) l[i].error( ex ); } protected void fireUpdateSize( long size ) { ResponseListener l[] = ( ResponseListener[] ) _listener.getListeners( ResponseListener.class ); for( int i = 0; i < l.length; i++ ) l[i].updateSize( size ); } protected void fireUpdateStatus( int status ) { ResponseListener l[] = ( ResponseListener[] ) _listener.getListeners( ResponseListener.class ); for( int i = 0; i < l.length; i++ ) l[i].updateStatus( status ); } protected void fireUpdateTransferredSize( long size ) { ResponseListener l[] = ( ResponseListener[] ) _listener.getListeners( ResponseListener.class ); for( int i = 0; i < l.length; i++ ) l[i].updateTransferredSize( size ); } }
|
RequestResponseInfo |
|