diff options
Diffstat (limited to 'mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/conn/CPoolProxy.java')
-rw-r--r-- | mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/conn/CPoolProxy.java | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/conn/CPoolProxy.java b/mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/conn/CPoolProxy.java new file mode 100644 index 000000000..9ac67a10d --- /dev/null +++ b/mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/conn/CPoolProxy.java @@ -0,0 +1,245 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + * + */ +package ch.boye.httpclientandroidlib.impl.conn; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.Socket; + +import javax.net.ssl.SSLSession; + +import ch.boye.httpclientandroidlib.HttpClientConnection; +import ch.boye.httpclientandroidlib.HttpConnectionMetrics; +import ch.boye.httpclientandroidlib.HttpEntityEnclosingRequest; +import ch.boye.httpclientandroidlib.HttpException; +import ch.boye.httpclientandroidlib.HttpRequest; +import ch.boye.httpclientandroidlib.HttpResponse; +import ch.boye.httpclientandroidlib.annotation.NotThreadSafe; +import ch.boye.httpclientandroidlib.conn.ManagedHttpClientConnection; +import ch.boye.httpclientandroidlib.protocol.HttpContext; + +/** + * @since 4.3 + */ +@NotThreadSafe +class CPoolProxy implements ManagedHttpClientConnection, HttpContext { + + private volatile CPoolEntry poolEntry; + + CPoolProxy(final CPoolEntry entry) { + super(); + this.poolEntry = entry; + } + + CPoolEntry getPoolEntry() { + return this.poolEntry; + } + + CPoolEntry detach() { + final CPoolEntry local = this.poolEntry; + this.poolEntry = null; + return local; + } + + ManagedHttpClientConnection getConnection() { + final CPoolEntry local = this.poolEntry; + if (local == null) { + return null; + } + return local.getConnection(); + } + + ManagedHttpClientConnection getValidConnection() { + final ManagedHttpClientConnection conn = getConnection(); + if (conn == null) { + throw new ConnectionShutdownException(); + } + return conn; + } + + public void close() throws IOException { + final CPoolEntry local = this.poolEntry; + if (local != null) { + local.closeConnection(); + } + } + + public void shutdown() throws IOException { + final CPoolEntry local = this.poolEntry; + if (local != null) { + local.shutdownConnection(); + } + } + + public boolean isOpen() { + final CPoolEntry local = this.poolEntry; + if (local != null) { + return !local.isClosed(); + } else { + return false; + } + } + + public boolean isStale() { + final HttpClientConnection conn = getConnection(); + if (conn != null) { + return conn.isStale(); + } else { + return true; + } + } + + public void setSocketTimeout(final int timeout) { + getValidConnection().setSocketTimeout(timeout); + } + + public int getSocketTimeout() { + return getValidConnection().getSocketTimeout(); + } + + public String getId() { + return getValidConnection().getId(); + } + + public void bind(final Socket socket) throws IOException { + getValidConnection().bind(socket); + } + + public Socket getSocket() { + return getValidConnection().getSocket(); + } + + public SSLSession getSSLSession() { + return getValidConnection().getSSLSession(); + } + + public boolean isResponseAvailable(final int timeout) throws IOException { + return getValidConnection().isResponseAvailable(timeout); + } + + public void sendRequestHeader(final HttpRequest request) throws HttpException, IOException { + getValidConnection().sendRequestHeader(request); + } + + public void sendRequestEntity(final HttpEntityEnclosingRequest request) throws HttpException, IOException { + getValidConnection().sendRequestEntity(request); + } + + public HttpResponse receiveResponseHeader() throws HttpException, IOException { + return getValidConnection().receiveResponseHeader(); + } + + public void receiveResponseEntity(final HttpResponse response) throws HttpException, IOException { + getValidConnection().receiveResponseEntity(response); + } + + public void flush() throws IOException { + getValidConnection().flush(); + } + + public HttpConnectionMetrics getMetrics() { + return getValidConnection().getMetrics(); + } + + public InetAddress getLocalAddress() { + return getValidConnection().getLocalAddress(); + } + + public int getLocalPort() { + return getValidConnection().getLocalPort(); + } + + public InetAddress getRemoteAddress() { + return getValidConnection().getRemoteAddress(); + } + + public int getRemotePort() { + return getValidConnection().getRemotePort(); + } + + public Object getAttribute(final String id) { + final ManagedHttpClientConnection conn = getValidConnection(); + if (conn instanceof HttpContext) { + return ((HttpContext) conn).getAttribute(id); + } else { + return null; + } + } + + public void setAttribute(final String id, final Object obj) { + final ManagedHttpClientConnection conn = getValidConnection(); + if (conn instanceof HttpContext) { + ((HttpContext) conn).setAttribute(id, obj); + } + } + + public Object removeAttribute(final String id) { + final ManagedHttpClientConnection conn = getValidConnection(); + if (conn instanceof HttpContext) { + return ((HttpContext) conn).removeAttribute(id); + } else { + return null; + } + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("CPoolProxy{"); + final ManagedHttpClientConnection conn = getConnection(); + if (conn != null) { + sb.append(conn); + } else { + sb.append("detached"); + } + sb.append('}'); + return sb.toString(); + } + + public static HttpClientConnection newProxy(final CPoolEntry poolEntry) { + return new CPoolProxy(poolEntry); + } + + private static CPoolProxy getProxy(final HttpClientConnection conn) { + if (!CPoolProxy.class.isInstance(conn)) { + throw new IllegalStateException("Unexpected connection proxy class: " + conn.getClass()); + } + return CPoolProxy.class.cast(conn); + } + + public static CPoolEntry getPoolEntry(final HttpClientConnection proxy) { + final CPoolEntry entry = getProxy(proxy).getPoolEntry(); + if (entry == null) { + throw new ConnectionShutdownException(); + } + return entry; + } + + public static CPoolEntry detach(final HttpClientConnection conn) { + return getProxy(conn).detach(); + } + +} |