summaryrefslogtreecommitdiffstats
path: root/src/com/android/mms/service/http/NetworkAwareClientConnectionOperator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/mms/service/http/NetworkAwareClientConnectionOperator.java')
-rw-r--r--src/com/android/mms/service/http/NetworkAwareClientConnectionOperator.java185
1 files changed, 0 insertions, 185 deletions
diff --git a/src/com/android/mms/service/http/NetworkAwareClientConnectionOperator.java b/src/com/android/mms/service/http/NetworkAwareClientConnectionOperator.java
deleted file mode 100644
index ec5fa59..0000000
--- a/src/com/android/mms/service/http/NetworkAwareClientConnectionOperator.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed 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.
- */
-
-package com.android.mms.service.http;
-
-import com.android.mms.service.MmsService;
-
-import org.apache.http.HttpHost;
-import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.conn.HttpHostConnectException;
-import org.apache.http.conn.OperatedClientConnection;
-import org.apache.http.conn.scheme.LayeredSocketFactory;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.scheme.SocketFactory;
-import org.apache.http.impl.conn.DefaultClientConnectionOperator;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HttpContext;
-
-import android.util.Log;
-
-import java.io.IOException;
-import java.net.ConnectException;
-import java.net.Inet4Address;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.SocketException;
-import java.util.ArrayList;
-
-/**
- * This is a subclass of {@link org.apache.http.impl.conn.DefaultClientConnectionOperator}
- * which allows us to use a custom name resolver and pick the address type when we resolve
- * the host name to connect.
- */
-public class NetworkAwareClientConnectionOperator extends DefaultClientConnectionOperator {
- private static final PlainSocketFactory staticPlainSocketFactory = new PlainSocketFactory();
-
- private NameResolver mResolver;
- private boolean mShouldUseIpv6;
-
- public NetworkAwareClientConnectionOperator(SchemeRegistry schemes) {
- super(schemes);
- }
-
- public void setNameResolver(NameResolver resolver) {
- mResolver = resolver;
- }
-
- public void setShouldUseIpv6(boolean value) {
- mShouldUseIpv6 = value;
- }
-
- /**
- * Resolve name by address type. Only returns IPv6 addresses if required, or IPv4 if not.
- *
- * @param hostName
- * @return The list addresses resolved
- * @throws java.io.IOException
- */
- private ArrayList<InetAddress> resolveHostName(final String hostName) throws IOException {
- final ArrayList<InetAddress> addresses = new ArrayList<InetAddress>();
- for (final InetAddress address : mResolver.getAllByName(hostName)) {
- if (mShouldUseIpv6 && address instanceof Inet6Address) {
- addresses.add(address);
- } else if (!mShouldUseIpv6 && address instanceof Inet4Address){
- addresses.add(address);
- }
- }
- return addresses;
- }
-
- /**
- * This method is mostly copied from the overridden one in parent. The only change
- * is how we resolve host name.
- */
- @Override
- public void openConnection(OperatedClientConnection conn, HttpHost target, InetAddress local,
- HttpContext context, HttpParams params) throws IOException {
- if (conn == null) {
- throw new IllegalArgumentException
- ("Connection must not be null.");
- }
- if (target == null) {
- throw new IllegalArgumentException
- ("Target host must not be null.");
- }
- // local address may be null
- //@@@ is context allowed to be null?
- if (params == null) {
- throw new IllegalArgumentException
- ("Parameters must not be null.");
- }
- if (conn.isOpen()) {
- throw new IllegalArgumentException
- ("Connection must not be open.");
- }
-
- final Scheme schm = schemeRegistry.getScheme(target.getSchemeName());
- final SocketFactory sf = schm.getSocketFactory();
- final SocketFactory plain_sf;
- final LayeredSocketFactory layered_sf;
- if (sf instanceof LayeredSocketFactory) {
- plain_sf = staticPlainSocketFactory;
- layered_sf = (LayeredSocketFactory)sf;
- } else {
- plain_sf = sf;
- layered_sf = null;
- }
- // CHANGE FOR MmsService
- ArrayList<InetAddress> addresses = resolveHostName(target.getHostName());
-
- for (int i = 0; i < addresses.size(); ++i) {
- Log.d(MmsService.TAG, "NetworkAwareClientConnectionOperator: connecting "
- + addresses.get(i));
- Socket sock = plain_sf.createSocket();
- conn.opening(sock, target);
-
- try {
- Socket connsock = plain_sf.connectSocket(sock,
- addresses.get(i).getHostAddress(),
- schm.resolvePort(target.getPort()),
- local, 0, params);
- if (sock != connsock) {
- sock = connsock;
- conn.opening(sock, target);
- }
- /*
- * prepareSocket is called on the just connected
- * socket before the creation of the layered socket to
- * ensure that desired socket options such as
- * TCP_NODELAY, SO_RCVTIMEO, SO_LINGER will be set
- * before any I/O is performed on the socket. This
- * happens in the common case as
- * SSLSocketFactory.createSocket performs hostname
- * verification which requires that SSL handshaking be
- * performed.
- */
- prepareSocket(sock, context, params);
- if (layered_sf != null) {
- Socket layeredsock = layered_sf.createSocket(sock,
- target.getHostName(),
- schm.resolvePort(target.getPort()),
- true);
- if (layeredsock != sock) {
- conn.opening(layeredsock, target);
- }
- conn.openCompleted(sf.isSecure(layeredsock), params);
- } else {
- conn.openCompleted(sf.isSecure(sock), params);
- }
- break;
- // BEGIN android-changed
- // catch SocketException to cover any kind of connect failure
- } catch (SocketException ex) {
- if (i == addresses.size() - 1) {
- ConnectException cause = ex instanceof ConnectException
- ? (ConnectException) ex :
- (ConnectException) new ConnectException(
- ex.getMessage()).initCause(ex);
- throw new HttpHostConnectException(target, cause);
- }
- // END android-changed
- } catch (ConnectTimeoutException ex) {
- if (i == addresses.size() - 1) {
- throw ex;
- }
- }
- }
- }
-}