am bf588bda: am b4a78de4: am 7d8262cb: am 6948cb40: Merge "Harden NsdManager against null-dereference crashes"
* commit 'bf588bda2c4dc98919439946e905e98ad4d352dd': Harden NsdManager against null-dereference crashes
This commit is contained in:
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user