/* * This file is part of the OWASP Proxy, a free intercepting proxy library. * Copyright (C) 2008-2010 Rogan Dawes <rogan@dawes.za.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to: * The Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ package org.owasp.proxy.http; import java.lang.ref.WeakReference; import org.owasp.proxy.util.AsciiString; public interface MutableBufferedResponse extends MutableResponseHeader, MutableBufferedMessage, BufferedResponse { public static class Impl extends MutableResponseHeader.Impl implements MutableBufferedResponse { private byte[] content; private WeakReference<byte[]> decoded = null; public void setContent(byte[] content) { this.content = content; decoded = null; } public byte[] getContent() { return content; } public byte[] getDecodedContent() throws MessageFormatException { if (content == null) return null; if (decoded == null || decoded.get() == null) { decoded = new WeakReference<byte[]>(MessageUtils.decode(this)); } return decoded.get(); } /** * This method automatically applies any chunked or gzip encoding specified in the message headers before * setting the message content. * * The decoded content is cached using a WeakReference to reduce the need to perform repeated decoding * operations. */ public void setDecodedContent(byte[] content) throws MessageFormatException { if (content == null) { this.decoded = null; this.content = null; } else { decoded = new WeakReference<byte[]>(content); this.content = MessageUtils.encode(this, content); } } @Override public String toString() { return super.toString() + (content != null ? AsciiString.create(content) : ""); } } }