Loading services/core/java/com/android/server/connectivity/PacManager.java +30 −4 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.content.ServiceConnection; import android.net.ProxyInfo; import android.net.Uri; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; Loading @@ -39,10 +40,10 @@ import com.android.internal.annotations.GuardedBy; import com.android.net.IProxyCallback; import com.android.net.IProxyPortListener; import com.android.net.IProxyService; import com.android.server.IoThread; import libcore.io.Streams; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; Loading @@ -66,6 +67,7 @@ public class PacManager { private static final int DELAY_1 = 0; private static final int DELAY_4 = 3; private static final int DELAY_LONG = 4; private static final long MAX_PAC_SIZE = 20 * 1000 * 1000; /** Keep these values up-to-date with ProxyService.java */ public static final String KEY_PROXY = "keyProxy"; Loading Loading @@ -123,15 +125,21 @@ public class PacManager { } }; private final HandlerThread mNetThread = new HandlerThread("android.pacmanager", android.os.Process.THREAD_PRIORITY_DEFAULT); private final Handler mNetThreadHandler; class PacRefreshIntentReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { IoThread.getHandler().post(mPacDownloader); mNetThreadHandler.post(mPacDownloader); } } public PacManager(Context context, Handler handler, int proxyMessage) { mContext = context; mLastPort = -1; mNetThread.start(); mNetThreadHandler = new Handler(mNetThread.getLooper()); mPacRefreshIntent = PendingIntent.getBroadcast( context, 0, new Intent(ACTION_PAC_REFRESH), 0); Loading Loading @@ -199,7 +207,25 @@ public class PacManager { private static String get(Uri pacUri) throws IOException { URL url = new URL(pacUri.toString()); URLConnection urlConnection = url.openConnection(java.net.Proxy.NO_PROXY); return new String(Streams.readFully(urlConnection.getInputStream())); long contentLength = -1; try { contentLength = Long.parseLong(urlConnection.getHeaderField("Content-Length")); } catch (NumberFormatException e) { // Ignore } if (contentLength > MAX_PAC_SIZE) { throw new IOException("PAC too big: " + contentLength + " bytes"); } ByteArrayOutputStream bytes = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count; while ((count = urlConnection.getInputStream().read(buffer)) != -1) { bytes.write(buffer, 0, count); if (bytes.size() > MAX_PAC_SIZE) { throw new IOException("PAC too big"); } } return bytes.toString(); } private int getNextDelay(int currentDelay) { Loading Loading @@ -297,7 +323,7 @@ public class PacManager { } catch (RemoteException e) { Log.e(TAG, "Unable to reach ProxyService - PAC will not be started", e); } IoThread.getHandler().post(mPacDownloader); mNetThreadHandler.post(mPacDownloader); } } } Loading Loading
services/core/java/com/android/server/connectivity/PacManager.java +30 −4 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.content.ServiceConnection; import android.net.ProxyInfo; import android.net.Uri; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; Loading @@ -39,10 +40,10 @@ import com.android.internal.annotations.GuardedBy; import com.android.net.IProxyCallback; import com.android.net.IProxyPortListener; import com.android.net.IProxyService; import com.android.server.IoThread; import libcore.io.Streams; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; Loading @@ -66,6 +67,7 @@ public class PacManager { private static final int DELAY_1 = 0; private static final int DELAY_4 = 3; private static final int DELAY_LONG = 4; private static final long MAX_PAC_SIZE = 20 * 1000 * 1000; /** Keep these values up-to-date with ProxyService.java */ public static final String KEY_PROXY = "keyProxy"; Loading Loading @@ -123,15 +125,21 @@ public class PacManager { } }; private final HandlerThread mNetThread = new HandlerThread("android.pacmanager", android.os.Process.THREAD_PRIORITY_DEFAULT); private final Handler mNetThreadHandler; class PacRefreshIntentReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { IoThread.getHandler().post(mPacDownloader); mNetThreadHandler.post(mPacDownloader); } } public PacManager(Context context, Handler handler, int proxyMessage) { mContext = context; mLastPort = -1; mNetThread.start(); mNetThreadHandler = new Handler(mNetThread.getLooper()); mPacRefreshIntent = PendingIntent.getBroadcast( context, 0, new Intent(ACTION_PAC_REFRESH), 0); Loading Loading @@ -199,7 +207,25 @@ public class PacManager { private static String get(Uri pacUri) throws IOException { URL url = new URL(pacUri.toString()); URLConnection urlConnection = url.openConnection(java.net.Proxy.NO_PROXY); return new String(Streams.readFully(urlConnection.getInputStream())); long contentLength = -1; try { contentLength = Long.parseLong(urlConnection.getHeaderField("Content-Length")); } catch (NumberFormatException e) { // Ignore } if (contentLength > MAX_PAC_SIZE) { throw new IOException("PAC too big: " + contentLength + " bytes"); } ByteArrayOutputStream bytes = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count; while ((count = urlConnection.getInputStream().read(buffer)) != -1) { bytes.write(buffer, 0, count); if (bytes.size() > MAX_PAC_SIZE) { throw new IOException("PAC too big"); } } return bytes.toString(); } private int getNextDelay(int currentDelay) { Loading Loading @@ -297,7 +323,7 @@ public class PacManager { } catch (RemoteException e) { Log.e(TAG, "Unable to reach ProxyService - PAC will not be started", e); } IoThread.getHandler().post(mPacDownloader); mNetThreadHandler.post(mPacDownloader); } } } Loading