Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63761a2d authored by Dave Platt's avatar Dave Platt Committed by Android Git Automerger
Browse files

am bf588bda: am f08cd8c6: am 7d8262cb: am 22f66b76: Merge "Harden NsdManager...

am bf588bda: am f08cd8c6: am 7d8262cb: am 22f66b76: Merge "Harden NsdManager against null-dereference crashes"

* commit 'bf588bda':
  Harden NsdManager against null-dereference crashes
parents 568628dc bf588bda
Loading
Loading
Loading
Loading
+28 −19
Original line number Diff line number Diff line
@@ -299,27 +299,36 @@ public final class NsdManager {

        @Override
        public void handleMessage(Message message) {
            Object listener = getListener(message.arg2);
            boolean listenerRemove = true;
            switch (message.what) {
                case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
                    mAsyncChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
                    break;
                    return;
                case AsyncChannel.CMD_CHANNEL_FULLY_CONNECTED:
                    mConnected.countDown();
                    break;
                    return;
                case AsyncChannel.CMD_CHANNEL_DISCONNECTED:
                    Log.e(TAG, "Channel lost");
                    return;
                default:
                    break;
            }
            Object listener = getListener(message.arg2);
            if (listener == null) {
                Log.d(TAG, "Stale key " + message.arg2);
                return;
            }
            boolean listenerRemove = true;
            NsdServiceInfo ns = getNsdService(message.arg2);
            switch (message.what) {
                case DISCOVER_SERVICES_STARTED:
                    String s = ((NsdServiceInfo) message.obj).getServiceType();
                    String s = getNsdServiceInfoType((NsdServiceInfo) message.obj);
                    ((DiscoveryListener) listener).onDiscoveryStarted(s);
                    // Keep listener until stop discovery
                    listenerRemove = false;
                    break;
                case DISCOVER_SERVICES_FAILED:
                    ((DiscoveryListener) listener).onStartDiscoveryFailed(
                            getNsdService(message.arg2).getServiceType(), message.arg1);
                    ((DiscoveryListener) listener).onStartDiscoveryFailed(getNsdServiceInfoType(ns),
                            message.arg1);
                    break;
                case SERVICE_FOUND:
                    ((DiscoveryListener) listener).onServiceFound((NsdServiceInfo) message.obj);
@@ -332,16 +341,14 @@ public final class NsdManager {
                    listenerRemove = false;
                    break;
                case STOP_DISCOVERY_FAILED:
                    ((DiscoveryListener) listener).onStopDiscoveryFailed(
                            getNsdService(message.arg2).getServiceType(), message.arg1);
                    ((DiscoveryListener) listener).onStopDiscoveryFailed(getNsdServiceInfoType(ns),
                            message.arg1);
                    break;
                case STOP_DISCOVERY_SUCCEEDED:
                    ((DiscoveryListener) listener).onDiscoveryStopped(
                            getNsdService(message.arg2).getServiceType());
                    ((DiscoveryListener) listener).onDiscoveryStopped(getNsdServiceInfoType(ns));
                    break;
                case REGISTER_SERVICE_FAILED:
                    ((RegistrationListener) listener).onRegistrationFailed(
                            getNsdService(message.arg2), message.arg1);
                    ((RegistrationListener) listener).onRegistrationFailed(ns, message.arg1);
                    break;
                case REGISTER_SERVICE_SUCCEEDED:
                    ((RegistrationListener) listener).onServiceRegistered(
@@ -350,16 +357,13 @@ public final class NsdManager {
                    listenerRemove = false;
                    break;
                case UNREGISTER_SERVICE_FAILED:
                    ((RegistrationListener) listener).onUnregistrationFailed(
                            getNsdService(message.arg2), message.arg1);
                    ((RegistrationListener) listener).onUnregistrationFailed(ns, message.arg1);
                    break;
                case UNREGISTER_SERVICE_SUCCEEDED:
                    ((RegistrationListener) listener).onServiceUnregistered(
                            getNsdService(message.arg2));
                    ((RegistrationListener) listener).onServiceUnregistered(ns);
                    break;
                case RESOLVE_SERVICE_FAILED:
                    ((ResolveListener) listener).onResolveFailed(
                            getNsdService(message.arg2), message.arg1);
                    ((ResolveListener) listener).onResolveFailed(ns, message.arg1);
                    break;
                case RESOLVE_SERVICE_SUCCEEDED:
                    ((ResolveListener) listener).onServiceResolved((NsdServiceInfo) message.obj);
@@ -419,6 +423,11 @@ public final class NsdManager {
    }


    private String getNsdServiceInfoType(NsdServiceInfo s) {
        if (s == null) return "?";
        return s.getServiceType();
    }

    /**
     * Initialize AsyncChannel
     */