OSDN Git Service

[NAN] Use a hidden class for peer ID opaque handle [DO NOT MERGE]
authorEtan Cohen <etancohen@google.com>
Tue, 27 Sep 2016 16:15:46 +0000 (09:15 -0700)
committerEtan Cohen <etancohen@google.com>
Tue, 27 Sep 2016 18:58:54 +0000 (11:58 -0700)
Results in clearer run-time exception (relatively to using Integer).

Bug: 31689166
Change-Id: I4c7f8800af12f18d846d23bbe7eda378eb45de34
Tests: unit-tests + integrated (sl4a).

wifi/java/android/net/wifi/nan/WifiNanDiscoveryBaseSession.java
wifi/java/android/net/wifi/nan/WifiNanManager.java

index 5b84eb2..17e974b 100644 (file)
@@ -16,6 +16,7 @@
 
 package android.net.wifi.nan;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.net.wifi.RttManager;
@@ -163,7 +164,7 @@ public class WifiNanDiscoveryBaseSession {
      *            (note: no retransmissions are attempted in other failure cases). A value of 0
      *            indicates no retries. Max permitted value is {@link #getMaxSendRetryCount()}.
      */
-    public void sendMessage(Object peerHandle, int messageId, @Nullable byte[] message,
+    public void sendMessage(@NonNull Object peerHandle, int messageId, @Nullable byte[] message,
             int retryCount) {
         if (mTerminated) {
             Log.w(TAG, "sendMessage: called on terminated session");
@@ -205,7 +206,7 @@ public class WifiNanDiscoveryBaseSession {
      *                  can be arbitrary and non-unique.
      * @param message The message to be transmitted.
      */
-    public void sendMessage(Object peerHandle, int messageId, @Nullable byte[] message) {
+    public void sendMessage(@NonNull Object peerHandle, int messageId, @Nullable byte[] message) {
         sendMessage(peerHandle, messageId, message, 0);
     }
 
@@ -270,8 +271,8 @@ public class WifiNanDiscoveryBaseSession {
      * {@link android.net.ConnectivityManager#requestNetwork(android.net.NetworkRequest,android.net.ConnectivityManager.NetworkCallback)}
      * [or other varieties of that API].
      */
-    public String createNetworkSpecifier(@WifiNanManager.DataPathRole int role, Object peerHandle,
-            @Nullable byte[] token) {
+    public String createNetworkSpecifier(@WifiNanManager.DataPathRole int role,
+            @Nullable Object peerHandle, @Nullable byte[] token) {
         if (mTerminated) {
             Log.w(TAG, "createNetworkSpecifier: called on terminated session");
             return null;
index 2cc75a8..d938f2f 100644 (file)
@@ -461,15 +461,20 @@ public class WifiNanManager {
     /** @hide */
     public void sendMessage(int clientId, int sessionId, Object peerHandle, byte[] message,
             int messageId, int retryCount) {
+        if (peerHandle == null) {
+            throw new IllegalArgumentException(
+                    "sendMessage: invalid peerHandle - must be non-null");
+        }
+
         if (VDBG) {
             Log.v(TAG, "sendMessage(): clientId=" + clientId + ", sessionId=" + sessionId
-                    + ", peerHandle=" + peerHandle + ", messageId=" + messageId + ", retryCount="
-                    + retryCount);
+                    + ", peerHandle=" + ((OpaquePeerHandle) peerHandle).peerId + ", messageId="
+                    + messageId + ", retryCount=" + retryCount);
         }
 
         try {
-            mService.sendMessage(clientId, sessionId, (Integer) peerHandle, message, messageId,
-                    retryCount);
+            mService.sendMessage(clientId, sessionId, ((OpaquePeerHandle) peerHandle).peerId,
+                    message, messageId, retryCount);
         } catch (RemoteException e) {
             e.rethrowAsRuntimeException();
         }
@@ -501,7 +506,8 @@ public class WifiNanManager {
             byte[] token) {
         if (VDBG) {
             Log.v(TAG, "createNetworkSpecifier: role=" + role + ", sessionId=" + sessionId
-                    + ", peerHandle=" + peerHandle + ", token=" + token);
+                    + ", peerHandle=" + ((peerHandle == null) ? peerHandle
+                    : ((OpaquePeerHandle) peerHandle).peerId) + ", token=" + token);
         }
 
         int type;
@@ -541,7 +547,7 @@ public class WifiNanManager {
             json.put(NETWORK_SPECIFIER_KEY_CLIENT_ID, clientId);
             json.put(NETWORK_SPECIFIER_KEY_SESSION_ID, sessionId);
             if (peerHandle != null) {
-                json.put(NETWORK_SPECIFIER_KEY_PEER_ID, (Integer) peerHandle);
+                json.put(NETWORK_SPECIFIER_KEY_PEER_ID, ((OpaquePeerHandle) peerHandle).peerId);
             }
             if (token != null) {
                 json.put(NETWORK_SPECIFIER_KEY_TOKEN,
@@ -846,7 +852,7 @@ public class WifiNanManager {
                             break;
                         case CALLBACK_MATCH:
                             mOriginalCallback.onServiceDiscovered(
-                                    Integer.valueOf(msg.arg1),
+                                    new OpaquePeerHandle(msg.arg1),
                                     msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE),
                                     msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE2));
                             break;
@@ -857,7 +863,7 @@ public class WifiNanManager {
                             mOriginalCallback.onMessageSendFailed(msg.arg1);
                             break;
                         case CALLBACK_MESSAGE_RECEIVED:
-                            mOriginalCallback.onMessageReceived(Integer.valueOf(msg.arg1),
+                            mOriginalCallback.onMessageReceived(new OpaquePeerHandle(msg.arg1),
                                     (byte[]) msg.obj);
                             break;
                     }
@@ -988,4 +994,13 @@ public class WifiNanManager {
             mOriginalCallback.onSessionTerminated(reason);
         }
     }
+
+    /** @hide */
+    public static class OpaquePeerHandle {
+        public OpaquePeerHandle(int peerId) {
+            this.peerId = peerId;
+        }
+
+        public int peerId;
+    }
 }