/******************************************************************************* * Copyright (c) 2007, 2014 compeople AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * compeople AG - initial API and implementation *******************************************************************************/ package org.eclipse.riena.internal.communication.factory.hessian; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.ProtocolException; import java.net.URL; import java.security.Permission; import java.util.List; import java.util.Map; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import org.eclipse.riena.communication.core.zipsupport.ReusableBufferedInputStream; /** * Simply wraps a {@code HttpURLConnection} for the only purpose to gzip the * input and the output streams. */ public class GZippingHttpURLConnectionWrapper extends HttpURLConnection { private final HttpURLConnection connection; private GZIPOutputStream myGZIPOutputStream; public GZippingHttpURLConnectionWrapper(final HttpURLConnection connection) { super(null); this.connection = connection; } protected GZippingHttpURLConnectionWrapper(final URL u) { super(null); this.connection = null; throw new UnsupportedOperationException( "This is not the intended usage of the GZippingHttpURLConnectionWrapper."); //$NON-NLS-1$ } @Override public void disconnect() { connection.disconnect(); } @Override public boolean usingProxy() { return connection.usingProxy(); } @Override public void connect() throws IOException { connection.connect(); } @Override public String getHeaderFieldKey(final int n) { return connection.getHeaderFieldKey(n); } @Override public void setFixedLengthStreamingMode(final int contentLength) { connection.setFixedLengthStreamingMode(contentLength); } @Override public void setChunkedStreamingMode(final int chunklen) { connection.setChunkedStreamingMode(chunklen); } @Override public String getHeaderField(final int n) { return connection.getHeaderField(n); } @Override public void setInstanceFollowRedirects(final boolean followRedirects) { connection.setInstanceFollowRedirects(followRedirects); } @Override public boolean getInstanceFollowRedirects() { return connection.getInstanceFollowRedirects(); } @Override public void setRequestMethod(final String method) throws ProtocolException { connection.setRequestMethod(method); } @Override public String getRequestMethod() { return connection.getRequestMethod(); } @Override public int getResponseCode() throws IOException { return connection.getResponseCode(); } @Override public String getResponseMessage() throws IOException { return connection.getResponseMessage(); } @Override public long getHeaderFieldDate(final String name, final long defaultValue) { return connection.getHeaderFieldDate(name, defaultValue); } @Override public Permission getPermission() throws IOException { return connection.getPermission(); } @Override public InputStream getErrorStream() { return connection.getErrorStream(); } @Override public void setConnectTimeout(final int timeout) { connection.setConnectTimeout(timeout); } @Override public int getConnectTimeout() { return connection.getConnectTimeout(); } @Override public void setReadTimeout(final int timeout) { connection.setReadTimeout(timeout); } @Override public int getReadTimeout() { return connection.getReadTimeout(); } @Override public URL getURL() { return connection.getURL(); } @Override public int getContentLength() { return connection.getContentLength(); } @Override public String getContentType() { return connection.getContentType(); } @Override public String getContentEncoding() { return connection.getContentEncoding(); } @Override public long getExpiration() { return connection.getExpiration(); } @Override public long getDate() { return connection.getDate(); } @Override public long getLastModified() { return connection.getLastModified(); } @Override public String getHeaderField(final String name) { return connection.getHeaderField(name); } @Override public Map<String, List<String>> getHeaderFields() { return connection.getHeaderFields(); } @Override public int getHeaderFieldInt(final String name, final int defaultValue) { return connection.getHeaderFieldInt(name, defaultValue); } @Override public Object getContent() throws IOException { return connection.getContent(); } @Override public Object getContent(final Class[] classes) throws IOException { return connection.getContent(classes); } @Override public InputStream getInputStream() throws IOException { final InputStream zipTestInputStream = new ReusableBufferedInputStream(connection.getInputStream()); if (zipTestInputStream.markSupported()) { zipTestInputStream.mark(20); final int readMAGIC = zipTestInputStream.read() + zipTestInputStream.read() * 256; zipTestInputStream.reset(); if (readMAGIC == GZIPInputStream.GZIP_MAGIC) { return new GZIPInputStream(zipTestInputStream); } } return zipTestInputStream; } @Override public OutputStream getOutputStream() throws IOException { myGZIPOutputStream = new GZIPOutputStream(connection.getOutputStream()); return myGZIPOutputStream; } public GZIPOutputStream getUsedGZIPOutputStream() { return myGZIPOutputStream; } @Override public String toString() { return connection.toString(); } @Override public void setDoInput(final boolean doinput) { connection.setDoInput(doinput); } @Override public boolean getDoInput() { return connection.getDoInput(); } @Override public void setDoOutput(final boolean dooutput) { connection.setDoOutput(dooutput); } @Override public boolean getDoOutput() { return connection.getDoOutput(); } @Override public void setAllowUserInteraction(final boolean allowuserinteraction) { connection.setAllowUserInteraction(allowuserinteraction); } @Override public boolean getAllowUserInteraction() { return connection.getAllowUserInteraction(); } @Override public void setUseCaches(final boolean usecaches) { connection.setUseCaches(usecaches); } @Override public boolean getUseCaches() { return connection.getUseCaches(); } @Override public void setIfModifiedSince(final long ifmodifiedsince) { connection.setIfModifiedSince(ifmodifiedsince); } @Override public long getIfModifiedSince() { return connection.getIfModifiedSince(); } @Override public boolean getDefaultUseCaches() { return connection.getDefaultUseCaches(); } @Override public void setDefaultUseCaches(final boolean defaultusecaches) { connection.setDefaultUseCaches(defaultusecaches); } @Override public void setRequestProperty(final String key, final String value) { connection.setRequestProperty(key, value); } @Override public void addRequestProperty(final String key, final String value) { connection.addRequestProperty(key, value); } @Override public String getRequestProperty(final String key) { return connection.getRequestProperty(key); } @Override public Map<String, List<String>> getRequestProperties() { return connection.getRequestProperties(); } @Override public int hashCode() { return connection.hashCode(); } @Override public boolean equals(final Object obj) { return connection.equals(obj); } }