diff options
Diffstat (limited to 'packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java')
| -rw-r--r-- | packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java | 61 |
1 files changed, 50 insertions, 11 deletions
diff --git a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java index 77f3c8c..4bf1db8 100644 --- a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java +++ b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java @@ -15,8 +15,11 @@ */ package com.android.proxyhandler; +import android.net.ProxyProperties; +import android.os.RemoteException; import android.util.Log; +import com.android.net.IProxyPortListener; import com.google.android.collect.Lists; import java.io.IOException; @@ -49,6 +52,8 @@ public class ProxyServer extends Thread { public boolean mIsRunning = false; private ServerSocket serverSocket; + private int mPort; + private IProxyPortListener mCallback; private class ProxyConnection implements Runnable { private Socket connection; @@ -179,33 +184,59 @@ public class ProxyServer extends Thread { public ProxyServer() { threadExecutor = Executors.newCachedThreadPool(); + mPort = -1; + mCallback = null; } @Override public void run() { try { - serverSocket = new ServerSocket(ProxyService.PORT); + serverSocket = new ServerSocket(0); - serverSocket.setReuseAddress(true); + if (serverSocket != null) { + setPort(serverSocket.getLocalPort()); - while (mIsRunning) { - try { - ProxyConnection parser = new ProxyConnection(serverSocket.accept()); + while (mIsRunning) { + try { + ProxyConnection parser = new ProxyConnection(serverSocket.accept()); - threadExecutor.execute(parser); - } catch (IOException e) { - e.printStackTrace(); + threadExecutor.execute(parser); + } catch (IOException e) { + e.printStackTrace(); + } } } } catch (SocketException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + Log.e(TAG, "Failed to start proxy server", e); + } catch (IOException e1) { + Log.e(TAG, "Failed to start proxy server", e1); } mIsRunning = false; } + public synchronized void setPort(int port) { + if (mCallback != null) { + try { + mCallback.setProxyPort(port); + } catch (RemoteException e) { + Log.w(TAG, "Proxy failed to report port to PacManager", e); + } + } + mPort = port; + } + + public synchronized void setCallback(IProxyPortListener callback) { + if (mPort != -1) { + try { + callback.setProxyPort(mPort); + } catch (RemoteException e) { + Log.w(TAG, "Proxy failed to report port to PacManager", e); + } + } + mCallback = callback; + } + public synchronized void startServer() { mIsRunning = true; start(); @@ -222,4 +253,12 @@ public class ProxyServer extends Thread { } } } + + public boolean isBound() { + return (mPort != -1); + } + + public int getPort() { + return mPort; + } } |
