Loading services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java +35 −18 Original line number Diff line number Diff line Loading @@ -508,24 +508,21 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub } remote = mSessionInfoMap.get(sessionId).getRemoteEndpointInfo(); } if (!ContextHubServiceUtil.notePermissions( mAppOpsManager, mUid, mPackageName, mAttributionTag, remote.getRequiredPermissions(), RECEIVE_MSG_NOTE + "-0x" + Long.toHexString(remote.getIdentifier().getHub()) + "-0x" + Long.toHexString(remote.getIdentifier().getEndpoint()))) { Log.e( TAG, try { Binder.withCleanCallingIdentity( () -> { if (!notePermissions(remote)) { throw new RuntimeException( "Dropping message from " + remote + ". " + mPackageName + " doesn't have permission"); } }); } catch (RuntimeException e) { Log.e(TAG, e.getMessage()); return ErrorCode.PERMISSION_DENIED; } Loading Loading @@ -657,4 +654,24 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub return mIsRegistered; } } /** * Utility to call notePermissions for e.g. when processing a message from a given endpoint for * this broker. * * @param endpoint The endpoint to check permissions for this broker. */ private boolean notePermissions(HubEndpointInfo endpoint) { return ContextHubServiceUtil.notePermissions( mAppOpsManager, mUid, mPackageName, mAttributionTag, endpoint.getRequiredPermissions(), RECEIVE_MSG_NOTE + "-0x" + Long.toHexString(endpoint.getIdentifier().getHub()) + "-0x" + Long.toHexString(endpoint.getIdentifier().getEndpoint())); } } services/core/java/com/android/server/location/contexthub/ContextHubHalEndpointCallback.java +11 −26 Original line number Diff line number Diff line Loading @@ -21,9 +21,6 @@ import android.hardware.contexthub.HubMessage; import android.hardware.contexthub.IEndpointCallback; import android.hardware.contexthub.Message; import android.hardware.contexthub.MessageDeliveryStatus; import android.os.Handler; import android.os.HandlerThread; import android.os.Process; import android.os.RemoteException; /** IEndpointCallback implementation. */ Loading @@ -32,11 +29,6 @@ public class ContextHubHalEndpointCallback private final IEndpointLifecycleCallback mEndpointLifecycleCallback; private final IEndpointSessionCallback mEndpointSessionCallback; // Use this thread in case where the execution requires to be on an async service thread. private final HandlerThread mHandlerThread = new HandlerThread("Context Hub endpoint callback", Process.THREAD_PRIORITY_BACKGROUND); private Handler mHandler; /** Interface for listening for endpoint start and stop events. */ public interface IEndpointLifecycleCallback { /** Called when a batch of endpoints started. */ Loading Loading @@ -73,9 +65,6 @@ public class ContextHubHalEndpointCallback IEndpointSessionCallback endpointSessionCallback) { mEndpointLifecycleCallback = endpointLifecycleCallback; mEndpointSessionCallback = endpointSessionCallback; mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper()); } @Override Loading @@ -88,7 +77,7 @@ public class ContextHubHalEndpointCallback for (int i = 0; i < halEndpointInfos.length; i++) { endpointInfos[i] = new HubEndpointInfo(halEndpointInfos[i]); } mHandler.post(() -> mEndpointLifecycleCallback.onEndpointStarted(endpointInfos)); mEndpointLifecycleCallback.onEndpointStarted(endpointInfos); } @Override Loading @@ -98,7 +87,7 @@ public class ContextHubHalEndpointCallback for (int i = 0; i < halEndpointIds.length; i++) { endpointIds[i] = new HubEndpointInfo.HubEndpointIdentifier(halEndpointIds[i]); } mHandler.post(() -> mEndpointLifecycleCallback.onEndpointStopped(endpointIds, reason)); mEndpointLifecycleCallback.onEndpointStopped(endpointIds, reason); } @Override Loading @@ -109,37 +98,33 @@ public class ContextHubHalEndpointCallback new HubEndpointInfo.HubEndpointIdentifier(destination.hubId, destination.id); HubEndpointInfo.HubEndpointIdentifier initiatorId = new HubEndpointInfo.HubEndpointIdentifier(initiator.hubId, initiator.id); mHandler.post( () -> mEndpointSessionCallback.onEndpointSessionOpenRequest( sessionId, destinationId, initiatorId, serviceDescriptor)); sessionId, destinationId, initiatorId, serviceDescriptor); } @Override public void onCloseEndpointSession(int sessionId, byte reason) throws RemoteException { mHandler.post(() -> mEndpointSessionCallback.onCloseEndpointSession(sessionId, reason)); mEndpointSessionCallback.onCloseEndpointSession(sessionId, reason); } @Override public void onEndpointSessionOpenComplete(int sessionId) throws RemoteException { mHandler.post(() -> mEndpointSessionCallback.onEndpointSessionOpenComplete(sessionId)); mEndpointSessionCallback.onEndpointSessionOpenComplete(sessionId); } @Override public void onMessageReceived(int sessionId, Message message) throws RemoteException { HubMessage hubMessage = ContextHubServiceUtil.createHubMessage(message); mHandler.post(() -> mEndpointSessionCallback.onMessageReceived(sessionId, hubMessage)); mEndpointSessionCallback.onMessageReceived(sessionId, hubMessage); } @Override public void onMessageDeliveryStatusReceived( int sessionId, MessageDeliveryStatus messageDeliveryStatus) throws RemoteException { mHandler.post( () -> mEndpointSessionCallback.onMessageDeliveryStatusReceived( sessionId, messageDeliveryStatus.messageSequenceNumber, messageDeliveryStatus.errorCode)); messageDeliveryStatus.errorCode); } @Override Loading Loading
services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java +35 −18 Original line number Diff line number Diff line Loading @@ -508,24 +508,21 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub } remote = mSessionInfoMap.get(sessionId).getRemoteEndpointInfo(); } if (!ContextHubServiceUtil.notePermissions( mAppOpsManager, mUid, mPackageName, mAttributionTag, remote.getRequiredPermissions(), RECEIVE_MSG_NOTE + "-0x" + Long.toHexString(remote.getIdentifier().getHub()) + "-0x" + Long.toHexString(remote.getIdentifier().getEndpoint()))) { Log.e( TAG, try { Binder.withCleanCallingIdentity( () -> { if (!notePermissions(remote)) { throw new RuntimeException( "Dropping message from " + remote + ". " + mPackageName + " doesn't have permission"); } }); } catch (RuntimeException e) { Log.e(TAG, e.getMessage()); return ErrorCode.PERMISSION_DENIED; } Loading Loading @@ -657,4 +654,24 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub return mIsRegistered; } } /** * Utility to call notePermissions for e.g. when processing a message from a given endpoint for * this broker. * * @param endpoint The endpoint to check permissions for this broker. */ private boolean notePermissions(HubEndpointInfo endpoint) { return ContextHubServiceUtil.notePermissions( mAppOpsManager, mUid, mPackageName, mAttributionTag, endpoint.getRequiredPermissions(), RECEIVE_MSG_NOTE + "-0x" + Long.toHexString(endpoint.getIdentifier().getHub()) + "-0x" + Long.toHexString(endpoint.getIdentifier().getEndpoint())); } }
services/core/java/com/android/server/location/contexthub/ContextHubHalEndpointCallback.java +11 −26 Original line number Diff line number Diff line Loading @@ -21,9 +21,6 @@ import android.hardware.contexthub.HubMessage; import android.hardware.contexthub.IEndpointCallback; import android.hardware.contexthub.Message; import android.hardware.contexthub.MessageDeliveryStatus; import android.os.Handler; import android.os.HandlerThread; import android.os.Process; import android.os.RemoteException; /** IEndpointCallback implementation. */ Loading @@ -32,11 +29,6 @@ public class ContextHubHalEndpointCallback private final IEndpointLifecycleCallback mEndpointLifecycleCallback; private final IEndpointSessionCallback mEndpointSessionCallback; // Use this thread in case where the execution requires to be on an async service thread. private final HandlerThread mHandlerThread = new HandlerThread("Context Hub endpoint callback", Process.THREAD_PRIORITY_BACKGROUND); private Handler mHandler; /** Interface for listening for endpoint start and stop events. */ public interface IEndpointLifecycleCallback { /** Called when a batch of endpoints started. */ Loading Loading @@ -73,9 +65,6 @@ public class ContextHubHalEndpointCallback IEndpointSessionCallback endpointSessionCallback) { mEndpointLifecycleCallback = endpointLifecycleCallback; mEndpointSessionCallback = endpointSessionCallback; mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper()); } @Override Loading @@ -88,7 +77,7 @@ public class ContextHubHalEndpointCallback for (int i = 0; i < halEndpointInfos.length; i++) { endpointInfos[i] = new HubEndpointInfo(halEndpointInfos[i]); } mHandler.post(() -> mEndpointLifecycleCallback.onEndpointStarted(endpointInfos)); mEndpointLifecycleCallback.onEndpointStarted(endpointInfos); } @Override Loading @@ -98,7 +87,7 @@ public class ContextHubHalEndpointCallback for (int i = 0; i < halEndpointIds.length; i++) { endpointIds[i] = new HubEndpointInfo.HubEndpointIdentifier(halEndpointIds[i]); } mHandler.post(() -> mEndpointLifecycleCallback.onEndpointStopped(endpointIds, reason)); mEndpointLifecycleCallback.onEndpointStopped(endpointIds, reason); } @Override Loading @@ -109,37 +98,33 @@ public class ContextHubHalEndpointCallback new HubEndpointInfo.HubEndpointIdentifier(destination.hubId, destination.id); HubEndpointInfo.HubEndpointIdentifier initiatorId = new HubEndpointInfo.HubEndpointIdentifier(initiator.hubId, initiator.id); mHandler.post( () -> mEndpointSessionCallback.onEndpointSessionOpenRequest( sessionId, destinationId, initiatorId, serviceDescriptor)); sessionId, destinationId, initiatorId, serviceDescriptor); } @Override public void onCloseEndpointSession(int sessionId, byte reason) throws RemoteException { mHandler.post(() -> mEndpointSessionCallback.onCloseEndpointSession(sessionId, reason)); mEndpointSessionCallback.onCloseEndpointSession(sessionId, reason); } @Override public void onEndpointSessionOpenComplete(int sessionId) throws RemoteException { mHandler.post(() -> mEndpointSessionCallback.onEndpointSessionOpenComplete(sessionId)); mEndpointSessionCallback.onEndpointSessionOpenComplete(sessionId); } @Override public void onMessageReceived(int sessionId, Message message) throws RemoteException { HubMessage hubMessage = ContextHubServiceUtil.createHubMessage(message); mHandler.post(() -> mEndpointSessionCallback.onMessageReceived(sessionId, hubMessage)); mEndpointSessionCallback.onMessageReceived(sessionId, hubMessage); } @Override public void onMessageDeliveryStatusReceived( int sessionId, MessageDeliveryStatus messageDeliveryStatus) throws RemoteException { mHandler.post( () -> mEndpointSessionCallback.onMessageDeliveryStatusReceived( sessionId, messageDeliveryStatus.messageSequenceNumber, messageDeliveryStatus.errorCode)); messageDeliveryStatus.errorCode); } @Override Loading