Loading wifi/java/android/net/wifi/nan/IWifiNanManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ interface IWifiNanManager void requestConfig(int clientId, in ConfigRequest configRequest); // session API int createSession(int clientId, in IWifiNanSessionCallback callback, int events); int createSession(int clientId, in IWifiNanSessionCallback callback); void publish(int clientId, int sessionId, in PublishConfig publishConfig); void subscribe(int clientId, int sessionId, in SubscribeConfig subscribeConfig); void sendMessage(int clientId, int sessionId, int peerId, in byte[] message, int messageLength, Loading wifi/java/android/net/wifi/nan/PublishConfig.java +38 −8 Original line number Diff line number Diff line Loading @@ -95,9 +95,15 @@ public class PublishConfig implements Parcelable { */ public final int mTtlSec; /** * @hide */ public final boolean mEnableTerminateNotification; private PublishConfig(String serviceName, byte[] serviceSpecificInfo, int serviceSpecificInfoLength, byte[] txFilter, int txFilterLength, byte[] rxFilter, int rxFilterLength, int publishType, int publichCount, int ttlSec) { int rxFilterLength, int publishType, int publichCount, int ttlSec, boolean enableTerminateNotification) { mServiceName = serviceName; mServiceSpecificInfoLength = serviceSpecificInfoLength; mServiceSpecificInfo = serviceSpecificInfo; Loading @@ -108,6 +114,7 @@ public class PublishConfig implements Parcelable { mPublishType = publishType; mPublishCount = publichCount; mTtlSec = ttlSec; mEnableTerminateNotification = enableTerminateNotification; } @Override Loading @@ -119,7 +126,8 @@ public class PublishConfig implements Parcelable { + ", mRxFilter=" + (new TlvBufferUtils.TlvIterable(0, 1, mRxFilter, mRxFilterLength)).toString() + ", mPublishType=" + mPublishType + ", mPublishCount=" + mPublishCount + ", mTtlSec=" + mTtlSec + "']"; + ", mTtlSec=" + mTtlSec + ", mEnableTerminateNotification=" + mEnableTerminateNotification + "]"; } @Override Loading @@ -145,6 +153,7 @@ public class PublishConfig implements Parcelable { dest.writeInt(mPublishType); dest.writeInt(mPublishCount); dest.writeInt(mTtlSec); dest.writeInt(mEnableTerminateNotification ? 1 : 0); } public static final Creator<PublishConfig> CREATOR = new Creator<PublishConfig>() { Loading Loading @@ -174,8 +183,11 @@ public class PublishConfig implements Parcelable { int publishType = in.readInt(); int publishCount = in.readInt(); int ttlSec = in.readInt(); boolean enableTerminateNotification = in.readInt() != 0; return new PublishConfig(serviceName, ssi, ssiLength, txFilter, txFilterLength, rxFilter, rxFilterLength, publishType, publishCount, ttlSec); rxFilter, rxFilterLength, publishType, publishCount, ttlSec, enableTerminateNotification); } }; Loading Loading @@ -229,7 +241,8 @@ public class PublishConfig implements Parcelable { } return mPublishType == lhs.mPublishType && mPublishCount == lhs.mPublishCount && mTtlSec == lhs.mTtlSec; && mTtlSec == lhs.mTtlSec && mEnableTerminateNotification == lhs.mEnableTerminateNotification; } @Override Loading @@ -246,6 +259,7 @@ public class PublishConfig implements Parcelable { result = 31 * result + mPublishType; result = 31 * result + mPublishCount; result = 31 * result + mTtlSec; result = 31 * result + (mEnableTerminateNotification ? 1 : 0); return result; } Loading @@ -261,9 +275,10 @@ public class PublishConfig implements Parcelable { private byte[] mTxFilter = new byte[0]; private int mRxFilterLength; private byte[] mRxFilter = new byte[0]; private int mPublishType; private int mPublishCount; private int mTtlSec; private int mPublishType = PUBLISH_TYPE_UNSOLICITED; private int mPublishCount = 0; private int mTtlSec = 0; private boolean mEnableTerminateNotification = true; /** * Specify the service name of the publish session. The actual on-air Loading Loading @@ -437,6 +452,21 @@ public class PublishConfig implements Parcelable { return this; } /** * Configure whether a publish terminate notification * {@link WifiNanSessionCallback#onPublishTerminated(int)} is reported * back to the callback. * * @param enable If true the terminate callback will be called when the * publish is terminated. Otherwise it will not be called. * @return The builder to facilitate chaining * {@code builder.setXXX(..).setXXX(..)}. */ public Builder setEnableTerminateNotification(boolean enable) { mEnableTerminateNotification = enable; return this; } /** * Build {@link PublishConfig} given the current requests made on the * builder. Loading @@ -444,7 +474,7 @@ public class PublishConfig implements Parcelable { public PublishConfig build() { return new PublishConfig(mServiceName, mServiceSpecificInfo, mServiceSpecificInfoLength, mTxFilter, mTxFilterLength, mRxFilter, mRxFilterLength, mPublishType, mPublishCount, mTtlSec); mPublishCount, mTtlSec, mEnableTerminateNotification); } } } wifi/java/android/net/wifi/nan/SubscribeConfig.java +38 −7 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ import java.util.Arrays; /** * Defines the configuration of a NAN subscribe session. Built using * {@link SubscribeConfig.Builder}. Subscribe is done using * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback, int)} * or {@link WifiNanSubscribeSession#subscribe(SubscribeConfig)}. * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} or * {@link WifiNanSubscribeSession#subscribe(SubscribeConfig)}. * * @hide PROPOSED_NAN_API */ Loading Loading @@ -113,9 +113,15 @@ public class SubscribeConfig implements Parcelable { */ public final int mMatchStyle; /** * @hide */ public final boolean mEnableTerminateNotification; private SubscribeConfig(String serviceName, byte[] serviceSpecificInfo, int serviceSpecificInfoLength, byte[] txFilter, int txFilterLength, byte[] rxFilter, int rxFilterLength, int subscribeType, int publichCount, int ttlSec, int matchStyle) { int rxFilterLength, int subscribeType, int publichCount, int ttlSec, int matchStyle, boolean enableTerminateNotification) { mServiceName = serviceName; mServiceSpecificInfoLength = serviceSpecificInfoLength; mServiceSpecificInfo = serviceSpecificInfo; Loading @@ -127,6 +133,7 @@ public class SubscribeConfig implements Parcelable { mSubscribeCount = publichCount; mTtlSec = ttlSec; mMatchStyle = matchStyle; mEnableTerminateNotification = enableTerminateNotification; } @Override Loading @@ -138,7 +145,8 @@ public class SubscribeConfig implements Parcelable { + ", mRxFilter=" + (new TlvBufferUtils.TlvIterable(0, 1, mRxFilter, mRxFilterLength)).toString() + ", mSubscribeType=" + mSubscribeType + ", mSubscribeCount=" + mSubscribeCount + ", mTtlSec=" + mTtlSec + ", mMatchType=" + mMatchStyle + "']"; + ", mTtlSec=" + mTtlSec + ", mMatchType=" + mMatchStyle + ", mEnableTerminateNotification=" + mEnableTerminateNotification + "]"; } @Override Loading @@ -165,6 +173,7 @@ public class SubscribeConfig implements Parcelable { dest.writeInt(mSubscribeCount); dest.writeInt(mTtlSec); dest.writeInt(mMatchStyle); dest.writeInt(mEnableTerminateNotification ? 1 : 0); } public static final Creator<SubscribeConfig> CREATOR = new Creator<SubscribeConfig>() { Loading Loading @@ -195,8 +204,11 @@ public class SubscribeConfig implements Parcelable { int subscribeCount = in.readInt(); int ttlSec = in.readInt(); int matchStyle = in.readInt(); boolean enableTerminateNotification = in.readInt() != 0; return new SubscribeConfig(serviceName, ssi, ssiLength, txFilter, txFilterLength, rxFilter, rxFilterLength, subscribeType, subscribeCount, ttlSec, matchStyle); rxFilter, rxFilterLength, subscribeType, subscribeCount, ttlSec, matchStyle, enableTerminateNotification); } }; Loading Loading @@ -250,7 +262,8 @@ public class SubscribeConfig implements Parcelable { } return mSubscribeType == lhs.mSubscribeType && mSubscribeCount == lhs.mSubscribeCount && mTtlSec == lhs.mTtlSec && mMatchStyle == lhs.mMatchStyle; && mTtlSec == lhs.mTtlSec && mMatchStyle == lhs.mMatchStyle && mEnableTerminateNotification == lhs.mEnableTerminateNotification; } @Override Loading @@ -268,6 +281,7 @@ public class SubscribeConfig implements Parcelable { result = 31 * result + mSubscribeCount; result = 31 * result + mTtlSec; result = 31 * result + mMatchStyle; result = 31 * result + (mEnableTerminateNotification ? 1 : 0); return result; } Loading @@ -287,6 +301,7 @@ public class SubscribeConfig implements Parcelable { private int mSubscribeCount = 0; private int mTtlSec = 0; private int mMatchStyle = MATCH_STYLE_ALL; private boolean mEnableTerminateNotification = true; /** * Specify the service name of the subscribe session. The actual on-air Loading Loading @@ -469,6 +484,21 @@ public class SubscribeConfig implements Parcelable { return this; } /** * Configure whether a subscribe terminate notification * {@link WifiNanSessionCallback#onSubscribeTerminated(int)} is reported * back to the callback. * * @param enable If true the terminate callback will be called when the * subscribe is terminated. Otherwise it will not be called. * @return The builder to facilitate chaining * {@code builder.setXXX(..).setXXX(..)}. */ public Builder setEnableTerminateNotification(boolean enable) { mEnableTerminateNotification = enable; return this; } /** * Build {@link SubscribeConfig} given the current requests made on the * builder. Loading @@ -476,7 +506,8 @@ public class SubscribeConfig implements Parcelable { public SubscribeConfig build() { return new SubscribeConfig(mServiceName, mServiceSpecificInfo, mServiceSpecificInfoLength, mTxFilter, mTxFilterLength, mRxFilter, mRxFilterLength, mSubscribeType, mSubscribeCount, mTtlSec, mMatchStyle); mRxFilterLength, mSubscribeType, mSubscribeCount, mTtlSec, mMatchStyle, mEnableTerminateNotification); } } } wifi/java/android/net/wifi/nan/WifiNanManager.java +4 −32 Original line number Diff line number Diff line Loading @@ -134,25 +134,11 @@ public class WifiNanManager { * configuration of the publish session. * @param callback The {@link WifiNanSessionCallback} derived objects to be * used for the event callbacks specified by {@code events}. * @param events The list of events to be delivered to the {@code callback} * object. An OR'd value of {@link WifiNanSessionCallback * WifiNanSessionCallback.LISTEN_*}. * @return The {@link WifiNanPublishSession} which can be used to further * control the publish session. */ public WifiNanPublishSession publish(PublishConfig publishConfig, WifiNanSessionCallback callback, int events) { return publishRaw(publishConfig, callback, events | WifiNanSessionCallback.LISTEN_HIDDEN_FLAGS); } /** * Same as publish(*) but does not modify the event flag * * @hide */ public WifiNanPublishSession publishRaw(PublishConfig publishConfig, WifiNanSessionCallback callback, int events) { WifiNanSessionCallback callback) { if (VDBG) Log.v(TAG, "publish(): config=" + publishConfig); if (publishConfig.mPublishType == PublishConfig.PUBLISH_TYPE_UNSOLICITED Loading @@ -172,7 +158,7 @@ public class WifiNanManager { int sessionId; try { sessionId = mService.createSession(mClientId, callback.callback, events); sessionId = mService.createSession(mClientId, callback.callback); if (DBG) Log.d(TAG, "publish: session created - sessionId=" + sessionId); mService.publish(mClientId, sessionId, publishConfig); } catch (RemoteException e) { Loading Loading @@ -215,25 +201,11 @@ public class WifiNanManager { * configuration of the subscribe session. * @param callback The {@link WifiNanSessionCallback} derived objects to be * used for the event callbacks specified by {@code events}. * @param events The list of events to be delivered to the {@code callback} * object. An OR'd value of {@link WifiNanSessionCallback * WifiNanSessionCallback.LISTEN_*}. * @return The {@link WifiNanSubscribeSession} which can be used to further * control the subscribe session. */ public WifiNanSubscribeSession subscribe(SubscribeConfig subscribeConfig, WifiNanSessionCallback callback, int events) { return subscribeRaw(subscribeConfig, callback, events | WifiNanSessionCallback.LISTEN_HIDDEN_FLAGS); } /** * Same as subscribe(*) but does not modify the event flag * * @hide */ public WifiNanSubscribeSession subscribeRaw(SubscribeConfig subscribeConfig, WifiNanSessionCallback callback, int events) { WifiNanSessionCallback callback) { if (VDBG) { Log.v(TAG, "subscribe(): config=" + subscribeConfig); } Loading @@ -252,7 +224,7 @@ public class WifiNanManager { int sessionId; try { sessionId = mService.createSession(mClientId, callback.callback, events); sessionId = mService.createSession(mClientId, callback.callback); if (DBG) Log.d(TAG, "subscribe: session created - sessionId=" + sessionId); mService.subscribe(mClientId, sessionId, subscribeConfig); } catch (RemoteException e) { Loading wifi/java/android/net/wifi/nan/WifiNanSessionCallback.java +38 −98 Original line number Diff line number Diff line Loading @@ -26,18 +26,12 @@ import android.util.Log; * Base class for NAN session events callbacks. Should be extended by * applications wanting notifications. The callbacks are registered when a * publish or subscribe session is created using * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback, int)} or * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback, int)} * . These are callbacks applying to a specific NAN session. Events * corresponding to the NAN link are delivered using * {@link WifiNanEventCallback}. * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback)} or * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} . * These are callbacks applying to a specific NAN session. Events corresponding * to the NAN link are delivered using {@link WifiNanEventCallback}. * <p> * A single callback is registered at session creation - it cannot be replaced. * <p> * During registration specify which specific events are desired using a set of * {@code WifiNanSessionCallback.LISTEN_*} flags OR'd together. Only those * events will be delivered to the registered callback. Override those callbacks * {@code WifiNanSessionCallback.on*} for the registered events. * * @hide PROPOSED_NAN_API */ Loading @@ -46,76 +40,22 @@ public class WifiNanSessionCallback { private static final boolean DBG = false; private static final boolean VDBG = false; // STOPSHIP if true /** * Publish fail callback event registration flag. Corresponding callback is * {@link WifiNanSessionCallback#onPublishFail(int)}. * * @hide */ public static final int FLAG_LISTEN_PUBLISH_FAIL = 0x1 << 0; /** * Publish terminated callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onPublishTerminated(int)}. */ public static final int FLAG_LISTEN_PUBLISH_TERMINATED = 0x1 << 1; /** * Subscribe fail callback event registration flag. Corresponding callback * is {@link WifiNanSessionCallback#onSubscribeFail(int)}. * * @hide */ public static final int FLAG_LISTEN_SUBSCRIBE_FAIL = 0x1 << 2; /** * Subscribe terminated callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onSubscribeTerminated(int)}. */ public static final int FLAG_LISTEN_SUBSCRIBE_TERMINATED = 0x1 << 3; /** * Match (discovery: publish or subscribe) callback event registration flag. * Corresponding callback is * {@link WifiNanSessionCallback#onMatch(int, byte[], int, byte[], int)}. * * @hide */ public static final int FLAG_LISTEN_MATCH = 0x1 << 4; /** * Message sent successfully callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onMessageSendSuccess()}. * * @hide */ public static final int FLAG_LISTEN_MESSAGE_SEND_SUCCESS = 0x1 << 5; /** * Message sending failure callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onMessageSendFail(int)}. * * @hide */ public static final int FLAG_LISTEN_MESSAGE_SEND_FAIL = 0x1 << 6; /** * Message received callback event registration flag. Corresponding callback * is {@link WifiNanSessionCallback#onMessageReceived(int, byte[], int)}. * * @hide */ public static final int FLAG_LISTEN_MESSAGE_RECEIVED = 0x1 << 7; /** * List of hidden events: which are mandatory - i.e. they will be added to * every request. * * @hide */ public static final int LISTEN_HIDDEN_FLAGS = FLAG_LISTEN_PUBLISH_FAIL | FLAG_LISTEN_SUBSCRIBE_FAIL | FLAG_LISTEN_MATCH | FLAG_LISTEN_MESSAGE_SEND_SUCCESS | FLAG_LISTEN_MESSAGE_SEND_FAIL | FLAG_LISTEN_MESSAGE_RECEIVED; /** @hide */ public static final int CALLBACK_PUBLISH_FAIL = 0; /** @hide */ public static final int CALLBACK_PUBLISH_TERMINATED = 1; /** @hide */ public static final int CALLBACK_SUBSCRIBE_FAIL = 2; /** @hide */ public static final int CALLBACK_SUBSCRIBE_TERMINATED = 3; /** @hide */ public static final int CALLBACK_MATCH = 4; /** @hide */ public static final int CALLBACK_MESSAGE_SEND_SUCCESS = 5; /** @hide */ public static final int CALLBACK_MESSAGE_SEND_FAIL = 6; /** @hide */ public static final int CALLBACK_MESSAGE_RECEIVED = 7; /** * Failure reason flag for {@link WifiNanEventCallback} and Loading Loading @@ -192,31 +132,31 @@ public class WifiNanSessionCallback { public void handleMessage(Message msg) { if (DBG) Log.d(TAG, "What=" + msg.what + ", msg=" + msg); switch (msg.what) { case FLAG_LISTEN_PUBLISH_FAIL: case CALLBACK_PUBLISH_FAIL: WifiNanSessionCallback.this.onPublishFail(msg.arg1); break; case FLAG_LISTEN_PUBLISH_TERMINATED: case CALLBACK_PUBLISH_TERMINATED: WifiNanSessionCallback.this.onPublishTerminated(msg.arg1); break; case FLAG_LISTEN_SUBSCRIBE_FAIL: case CALLBACK_SUBSCRIBE_FAIL: WifiNanSessionCallback.this.onSubscribeFail(msg.arg1); break; case FLAG_LISTEN_SUBSCRIBE_TERMINATED: case CALLBACK_SUBSCRIBE_TERMINATED: WifiNanSessionCallback.this.onSubscribeTerminated(msg.arg1); break; case FLAG_LISTEN_MATCH: case CALLBACK_MATCH: WifiNanSessionCallback.this.onMatch( msg.getData().getInt(MESSAGE_BUNDLE_KEY_PEER_ID), msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE), msg.arg1, msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE2), msg.arg2); break; case FLAG_LISTEN_MESSAGE_SEND_SUCCESS: case CALLBACK_MESSAGE_SEND_SUCCESS: WifiNanSessionCallback.this.onMessageSendSuccess(msg.arg1); break; case FLAG_LISTEN_MESSAGE_SEND_FAIL: case CALLBACK_MESSAGE_SEND_FAIL: WifiNanSessionCallback.this.onMessageSendFail(msg.arg1, msg.arg2); break; case FLAG_LISTEN_MESSAGE_RECEIVED: case CALLBACK_MESSAGE_RECEIVED: WifiNanSessionCallback.this.onMessageReceived(msg.arg2, msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE), msg.arg1); break; Loading @@ -240,7 +180,7 @@ public class WifiNanSessionCallback { /** * Called when a publish operation terminates. Event will only be delivered * if registered using * {@link WifiNanSessionCallback#FLAG_LISTEN_PUBLISH_TERMINATED}. A dummy (empty * {@link WifiNanSessionCallback#CALLBACK_PUBLISH_TERMINATED}. A dummy (empty * implementation printing out a warning). Make sure to override if * registered. * Loading @@ -266,7 +206,7 @@ public class WifiNanSessionCallback { /** * Called when a subscribe operation terminates. Event will only be * delivered if registered using * {@link WifiNanSessionCallback#FLAG_LISTEN_SUBSCRIBE_TERMINATED}. A dummy * {@link WifiNanSessionCallback#CALLBACK_SUBSCRIBE_TERMINATED}. A dummy * (empty implementation printing out a warning). Make sure to override if * registered. * Loading Loading @@ -353,7 +293,7 @@ public class WifiNanSessionCallback { public void onPublishFail(int reason) { if (VDBG) Log.v(TAG, "onPublishFail: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_PUBLISH_FAIL); Message msg = mHandler.obtainMessage(CALLBACK_PUBLISH_FAIL); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -362,7 +302,7 @@ public class WifiNanSessionCallback { public void onPublishTerminated(int reason) { if (VDBG) Log.v(TAG, "onPublishResponse: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_PUBLISH_TERMINATED); Message msg = mHandler.obtainMessage(CALLBACK_PUBLISH_TERMINATED); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -371,7 +311,7 @@ public class WifiNanSessionCallback { public void onSubscribeFail(int reason) { if (VDBG) Log.v(TAG, "onSubscribeFail: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_SUBSCRIBE_FAIL); Message msg = mHandler.obtainMessage(CALLBACK_SUBSCRIBE_FAIL); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -380,7 +320,7 @@ public class WifiNanSessionCallback { public void onSubscribeTerminated(int reason) { if (VDBG) Log.v(TAG, "onSubscribeTerminated: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_SUBSCRIBE_TERMINATED); Message msg = mHandler.obtainMessage(CALLBACK_SUBSCRIBE_TERMINATED); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -395,7 +335,7 @@ public class WifiNanSessionCallback { data.putByteArray(MESSAGE_BUNDLE_KEY_MESSAGE, serviceSpecificInfo); data.putByteArray(MESSAGE_BUNDLE_KEY_MESSAGE2, matchFilter); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MATCH); Message msg = mHandler.obtainMessage(CALLBACK_MATCH); msg.arg1 = serviceSpecificInfoLength; msg.arg2 = matchFilterLength; msg.setData(data); Loading @@ -406,7 +346,7 @@ public class WifiNanSessionCallback { public void onMessageSendSuccess(int messageId) { if (VDBG) Log.v(TAG, "onMessageSendSuccess"); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MESSAGE_SEND_SUCCESS); Message msg = mHandler.obtainMessage(CALLBACK_MESSAGE_SEND_SUCCESS); msg.arg1 = messageId; mHandler.sendMessage(msg); } Loading @@ -415,7 +355,7 @@ public class WifiNanSessionCallback { public void onMessageSendFail(int messageId, int reason) { if (VDBG) Log.v(TAG, "onMessageSendFail: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MESSAGE_SEND_FAIL); Message msg = mHandler.obtainMessage(CALLBACK_MESSAGE_SEND_FAIL); msg.arg1 = messageId; msg.arg2 = reason; mHandler.sendMessage(msg); Loading @@ -431,7 +371,7 @@ public class WifiNanSessionCallback { Bundle data = new Bundle(); data.putByteArray(MESSAGE_BUNDLE_KEY_MESSAGE, message); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MESSAGE_RECEIVED); Message msg = mHandler.obtainMessage(CALLBACK_MESSAGE_RECEIVED); msg.arg1 = messageLength; msg.arg2 = peerId; msg.setData(data); Loading Loading
wifi/java/android/net/wifi/nan/IWifiNanManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ interface IWifiNanManager void requestConfig(int clientId, in ConfigRequest configRequest); // session API int createSession(int clientId, in IWifiNanSessionCallback callback, int events); int createSession(int clientId, in IWifiNanSessionCallback callback); void publish(int clientId, int sessionId, in PublishConfig publishConfig); void subscribe(int clientId, int sessionId, in SubscribeConfig subscribeConfig); void sendMessage(int clientId, int sessionId, int peerId, in byte[] message, int messageLength, Loading
wifi/java/android/net/wifi/nan/PublishConfig.java +38 −8 Original line number Diff line number Diff line Loading @@ -95,9 +95,15 @@ public class PublishConfig implements Parcelable { */ public final int mTtlSec; /** * @hide */ public final boolean mEnableTerminateNotification; private PublishConfig(String serviceName, byte[] serviceSpecificInfo, int serviceSpecificInfoLength, byte[] txFilter, int txFilterLength, byte[] rxFilter, int rxFilterLength, int publishType, int publichCount, int ttlSec) { int rxFilterLength, int publishType, int publichCount, int ttlSec, boolean enableTerminateNotification) { mServiceName = serviceName; mServiceSpecificInfoLength = serviceSpecificInfoLength; mServiceSpecificInfo = serviceSpecificInfo; Loading @@ -108,6 +114,7 @@ public class PublishConfig implements Parcelable { mPublishType = publishType; mPublishCount = publichCount; mTtlSec = ttlSec; mEnableTerminateNotification = enableTerminateNotification; } @Override Loading @@ -119,7 +126,8 @@ public class PublishConfig implements Parcelable { + ", mRxFilter=" + (new TlvBufferUtils.TlvIterable(0, 1, mRxFilter, mRxFilterLength)).toString() + ", mPublishType=" + mPublishType + ", mPublishCount=" + mPublishCount + ", mTtlSec=" + mTtlSec + "']"; + ", mTtlSec=" + mTtlSec + ", mEnableTerminateNotification=" + mEnableTerminateNotification + "]"; } @Override Loading @@ -145,6 +153,7 @@ public class PublishConfig implements Parcelable { dest.writeInt(mPublishType); dest.writeInt(mPublishCount); dest.writeInt(mTtlSec); dest.writeInt(mEnableTerminateNotification ? 1 : 0); } public static final Creator<PublishConfig> CREATOR = new Creator<PublishConfig>() { Loading Loading @@ -174,8 +183,11 @@ public class PublishConfig implements Parcelable { int publishType = in.readInt(); int publishCount = in.readInt(); int ttlSec = in.readInt(); boolean enableTerminateNotification = in.readInt() != 0; return new PublishConfig(serviceName, ssi, ssiLength, txFilter, txFilterLength, rxFilter, rxFilterLength, publishType, publishCount, ttlSec); rxFilter, rxFilterLength, publishType, publishCount, ttlSec, enableTerminateNotification); } }; Loading Loading @@ -229,7 +241,8 @@ public class PublishConfig implements Parcelable { } return mPublishType == lhs.mPublishType && mPublishCount == lhs.mPublishCount && mTtlSec == lhs.mTtlSec; && mTtlSec == lhs.mTtlSec && mEnableTerminateNotification == lhs.mEnableTerminateNotification; } @Override Loading @@ -246,6 +259,7 @@ public class PublishConfig implements Parcelable { result = 31 * result + mPublishType; result = 31 * result + mPublishCount; result = 31 * result + mTtlSec; result = 31 * result + (mEnableTerminateNotification ? 1 : 0); return result; } Loading @@ -261,9 +275,10 @@ public class PublishConfig implements Parcelable { private byte[] mTxFilter = new byte[0]; private int mRxFilterLength; private byte[] mRxFilter = new byte[0]; private int mPublishType; private int mPublishCount; private int mTtlSec; private int mPublishType = PUBLISH_TYPE_UNSOLICITED; private int mPublishCount = 0; private int mTtlSec = 0; private boolean mEnableTerminateNotification = true; /** * Specify the service name of the publish session. The actual on-air Loading Loading @@ -437,6 +452,21 @@ public class PublishConfig implements Parcelable { return this; } /** * Configure whether a publish terminate notification * {@link WifiNanSessionCallback#onPublishTerminated(int)} is reported * back to the callback. * * @param enable If true the terminate callback will be called when the * publish is terminated. Otherwise it will not be called. * @return The builder to facilitate chaining * {@code builder.setXXX(..).setXXX(..)}. */ public Builder setEnableTerminateNotification(boolean enable) { mEnableTerminateNotification = enable; return this; } /** * Build {@link PublishConfig} given the current requests made on the * builder. Loading @@ -444,7 +474,7 @@ public class PublishConfig implements Parcelable { public PublishConfig build() { return new PublishConfig(mServiceName, mServiceSpecificInfo, mServiceSpecificInfoLength, mTxFilter, mTxFilterLength, mRxFilter, mRxFilterLength, mPublishType, mPublishCount, mTtlSec); mPublishCount, mTtlSec, mEnableTerminateNotification); } } }
wifi/java/android/net/wifi/nan/SubscribeConfig.java +38 −7 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ import java.util.Arrays; /** * Defines the configuration of a NAN subscribe session. Built using * {@link SubscribeConfig.Builder}. Subscribe is done using * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback, int)} * or {@link WifiNanSubscribeSession#subscribe(SubscribeConfig)}. * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} or * {@link WifiNanSubscribeSession#subscribe(SubscribeConfig)}. * * @hide PROPOSED_NAN_API */ Loading Loading @@ -113,9 +113,15 @@ public class SubscribeConfig implements Parcelable { */ public final int mMatchStyle; /** * @hide */ public final boolean mEnableTerminateNotification; private SubscribeConfig(String serviceName, byte[] serviceSpecificInfo, int serviceSpecificInfoLength, byte[] txFilter, int txFilterLength, byte[] rxFilter, int rxFilterLength, int subscribeType, int publichCount, int ttlSec, int matchStyle) { int rxFilterLength, int subscribeType, int publichCount, int ttlSec, int matchStyle, boolean enableTerminateNotification) { mServiceName = serviceName; mServiceSpecificInfoLength = serviceSpecificInfoLength; mServiceSpecificInfo = serviceSpecificInfo; Loading @@ -127,6 +133,7 @@ public class SubscribeConfig implements Parcelable { mSubscribeCount = publichCount; mTtlSec = ttlSec; mMatchStyle = matchStyle; mEnableTerminateNotification = enableTerminateNotification; } @Override Loading @@ -138,7 +145,8 @@ public class SubscribeConfig implements Parcelable { + ", mRxFilter=" + (new TlvBufferUtils.TlvIterable(0, 1, mRxFilter, mRxFilterLength)).toString() + ", mSubscribeType=" + mSubscribeType + ", mSubscribeCount=" + mSubscribeCount + ", mTtlSec=" + mTtlSec + ", mMatchType=" + mMatchStyle + "']"; + ", mTtlSec=" + mTtlSec + ", mMatchType=" + mMatchStyle + ", mEnableTerminateNotification=" + mEnableTerminateNotification + "]"; } @Override Loading @@ -165,6 +173,7 @@ public class SubscribeConfig implements Parcelable { dest.writeInt(mSubscribeCount); dest.writeInt(mTtlSec); dest.writeInt(mMatchStyle); dest.writeInt(mEnableTerminateNotification ? 1 : 0); } public static final Creator<SubscribeConfig> CREATOR = new Creator<SubscribeConfig>() { Loading Loading @@ -195,8 +204,11 @@ public class SubscribeConfig implements Parcelable { int subscribeCount = in.readInt(); int ttlSec = in.readInt(); int matchStyle = in.readInt(); boolean enableTerminateNotification = in.readInt() != 0; return new SubscribeConfig(serviceName, ssi, ssiLength, txFilter, txFilterLength, rxFilter, rxFilterLength, subscribeType, subscribeCount, ttlSec, matchStyle); rxFilter, rxFilterLength, subscribeType, subscribeCount, ttlSec, matchStyle, enableTerminateNotification); } }; Loading Loading @@ -250,7 +262,8 @@ public class SubscribeConfig implements Parcelable { } return mSubscribeType == lhs.mSubscribeType && mSubscribeCount == lhs.mSubscribeCount && mTtlSec == lhs.mTtlSec && mMatchStyle == lhs.mMatchStyle; && mTtlSec == lhs.mTtlSec && mMatchStyle == lhs.mMatchStyle && mEnableTerminateNotification == lhs.mEnableTerminateNotification; } @Override Loading @@ -268,6 +281,7 @@ public class SubscribeConfig implements Parcelable { result = 31 * result + mSubscribeCount; result = 31 * result + mTtlSec; result = 31 * result + mMatchStyle; result = 31 * result + (mEnableTerminateNotification ? 1 : 0); return result; } Loading @@ -287,6 +301,7 @@ public class SubscribeConfig implements Parcelable { private int mSubscribeCount = 0; private int mTtlSec = 0; private int mMatchStyle = MATCH_STYLE_ALL; private boolean mEnableTerminateNotification = true; /** * Specify the service name of the subscribe session. The actual on-air Loading Loading @@ -469,6 +484,21 @@ public class SubscribeConfig implements Parcelable { return this; } /** * Configure whether a subscribe terminate notification * {@link WifiNanSessionCallback#onSubscribeTerminated(int)} is reported * back to the callback. * * @param enable If true the terminate callback will be called when the * subscribe is terminated. Otherwise it will not be called. * @return The builder to facilitate chaining * {@code builder.setXXX(..).setXXX(..)}. */ public Builder setEnableTerminateNotification(boolean enable) { mEnableTerminateNotification = enable; return this; } /** * Build {@link SubscribeConfig} given the current requests made on the * builder. Loading @@ -476,7 +506,8 @@ public class SubscribeConfig implements Parcelable { public SubscribeConfig build() { return new SubscribeConfig(mServiceName, mServiceSpecificInfo, mServiceSpecificInfoLength, mTxFilter, mTxFilterLength, mRxFilter, mRxFilterLength, mSubscribeType, mSubscribeCount, mTtlSec, mMatchStyle); mRxFilterLength, mSubscribeType, mSubscribeCount, mTtlSec, mMatchStyle, mEnableTerminateNotification); } } }
wifi/java/android/net/wifi/nan/WifiNanManager.java +4 −32 Original line number Diff line number Diff line Loading @@ -134,25 +134,11 @@ public class WifiNanManager { * configuration of the publish session. * @param callback The {@link WifiNanSessionCallback} derived objects to be * used for the event callbacks specified by {@code events}. * @param events The list of events to be delivered to the {@code callback} * object. An OR'd value of {@link WifiNanSessionCallback * WifiNanSessionCallback.LISTEN_*}. * @return The {@link WifiNanPublishSession} which can be used to further * control the publish session. */ public WifiNanPublishSession publish(PublishConfig publishConfig, WifiNanSessionCallback callback, int events) { return publishRaw(publishConfig, callback, events | WifiNanSessionCallback.LISTEN_HIDDEN_FLAGS); } /** * Same as publish(*) but does not modify the event flag * * @hide */ public WifiNanPublishSession publishRaw(PublishConfig publishConfig, WifiNanSessionCallback callback, int events) { WifiNanSessionCallback callback) { if (VDBG) Log.v(TAG, "publish(): config=" + publishConfig); if (publishConfig.mPublishType == PublishConfig.PUBLISH_TYPE_UNSOLICITED Loading @@ -172,7 +158,7 @@ public class WifiNanManager { int sessionId; try { sessionId = mService.createSession(mClientId, callback.callback, events); sessionId = mService.createSession(mClientId, callback.callback); if (DBG) Log.d(TAG, "publish: session created - sessionId=" + sessionId); mService.publish(mClientId, sessionId, publishConfig); } catch (RemoteException e) { Loading Loading @@ -215,25 +201,11 @@ public class WifiNanManager { * configuration of the subscribe session. * @param callback The {@link WifiNanSessionCallback} derived objects to be * used for the event callbacks specified by {@code events}. * @param events The list of events to be delivered to the {@code callback} * object. An OR'd value of {@link WifiNanSessionCallback * WifiNanSessionCallback.LISTEN_*}. * @return The {@link WifiNanSubscribeSession} which can be used to further * control the subscribe session. */ public WifiNanSubscribeSession subscribe(SubscribeConfig subscribeConfig, WifiNanSessionCallback callback, int events) { return subscribeRaw(subscribeConfig, callback, events | WifiNanSessionCallback.LISTEN_HIDDEN_FLAGS); } /** * Same as subscribe(*) but does not modify the event flag * * @hide */ public WifiNanSubscribeSession subscribeRaw(SubscribeConfig subscribeConfig, WifiNanSessionCallback callback, int events) { WifiNanSessionCallback callback) { if (VDBG) { Log.v(TAG, "subscribe(): config=" + subscribeConfig); } Loading @@ -252,7 +224,7 @@ public class WifiNanManager { int sessionId; try { sessionId = mService.createSession(mClientId, callback.callback, events); sessionId = mService.createSession(mClientId, callback.callback); if (DBG) Log.d(TAG, "subscribe: session created - sessionId=" + sessionId); mService.subscribe(mClientId, sessionId, subscribeConfig); } catch (RemoteException e) { Loading
wifi/java/android/net/wifi/nan/WifiNanSessionCallback.java +38 −98 Original line number Diff line number Diff line Loading @@ -26,18 +26,12 @@ import android.util.Log; * Base class for NAN session events callbacks. Should be extended by * applications wanting notifications. The callbacks are registered when a * publish or subscribe session is created using * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback, int)} or * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback, int)} * . These are callbacks applying to a specific NAN session. Events * corresponding to the NAN link are delivered using * {@link WifiNanEventCallback}. * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback)} or * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} . * These are callbacks applying to a specific NAN session. Events corresponding * to the NAN link are delivered using {@link WifiNanEventCallback}. * <p> * A single callback is registered at session creation - it cannot be replaced. * <p> * During registration specify which specific events are desired using a set of * {@code WifiNanSessionCallback.LISTEN_*} flags OR'd together. Only those * events will be delivered to the registered callback. Override those callbacks * {@code WifiNanSessionCallback.on*} for the registered events. * * @hide PROPOSED_NAN_API */ Loading @@ -46,76 +40,22 @@ public class WifiNanSessionCallback { private static final boolean DBG = false; private static final boolean VDBG = false; // STOPSHIP if true /** * Publish fail callback event registration flag. Corresponding callback is * {@link WifiNanSessionCallback#onPublishFail(int)}. * * @hide */ public static final int FLAG_LISTEN_PUBLISH_FAIL = 0x1 << 0; /** * Publish terminated callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onPublishTerminated(int)}. */ public static final int FLAG_LISTEN_PUBLISH_TERMINATED = 0x1 << 1; /** * Subscribe fail callback event registration flag. Corresponding callback * is {@link WifiNanSessionCallback#onSubscribeFail(int)}. * * @hide */ public static final int FLAG_LISTEN_SUBSCRIBE_FAIL = 0x1 << 2; /** * Subscribe terminated callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onSubscribeTerminated(int)}. */ public static final int FLAG_LISTEN_SUBSCRIBE_TERMINATED = 0x1 << 3; /** * Match (discovery: publish or subscribe) callback event registration flag. * Corresponding callback is * {@link WifiNanSessionCallback#onMatch(int, byte[], int, byte[], int)}. * * @hide */ public static final int FLAG_LISTEN_MATCH = 0x1 << 4; /** * Message sent successfully callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onMessageSendSuccess()}. * * @hide */ public static final int FLAG_LISTEN_MESSAGE_SEND_SUCCESS = 0x1 << 5; /** * Message sending failure callback event registration flag. Corresponding * callback is {@link WifiNanSessionCallback#onMessageSendFail(int)}. * * @hide */ public static final int FLAG_LISTEN_MESSAGE_SEND_FAIL = 0x1 << 6; /** * Message received callback event registration flag. Corresponding callback * is {@link WifiNanSessionCallback#onMessageReceived(int, byte[], int)}. * * @hide */ public static final int FLAG_LISTEN_MESSAGE_RECEIVED = 0x1 << 7; /** * List of hidden events: which are mandatory - i.e. they will be added to * every request. * * @hide */ public static final int LISTEN_HIDDEN_FLAGS = FLAG_LISTEN_PUBLISH_FAIL | FLAG_LISTEN_SUBSCRIBE_FAIL | FLAG_LISTEN_MATCH | FLAG_LISTEN_MESSAGE_SEND_SUCCESS | FLAG_LISTEN_MESSAGE_SEND_FAIL | FLAG_LISTEN_MESSAGE_RECEIVED; /** @hide */ public static final int CALLBACK_PUBLISH_FAIL = 0; /** @hide */ public static final int CALLBACK_PUBLISH_TERMINATED = 1; /** @hide */ public static final int CALLBACK_SUBSCRIBE_FAIL = 2; /** @hide */ public static final int CALLBACK_SUBSCRIBE_TERMINATED = 3; /** @hide */ public static final int CALLBACK_MATCH = 4; /** @hide */ public static final int CALLBACK_MESSAGE_SEND_SUCCESS = 5; /** @hide */ public static final int CALLBACK_MESSAGE_SEND_FAIL = 6; /** @hide */ public static final int CALLBACK_MESSAGE_RECEIVED = 7; /** * Failure reason flag for {@link WifiNanEventCallback} and Loading Loading @@ -192,31 +132,31 @@ public class WifiNanSessionCallback { public void handleMessage(Message msg) { if (DBG) Log.d(TAG, "What=" + msg.what + ", msg=" + msg); switch (msg.what) { case FLAG_LISTEN_PUBLISH_FAIL: case CALLBACK_PUBLISH_FAIL: WifiNanSessionCallback.this.onPublishFail(msg.arg1); break; case FLAG_LISTEN_PUBLISH_TERMINATED: case CALLBACK_PUBLISH_TERMINATED: WifiNanSessionCallback.this.onPublishTerminated(msg.arg1); break; case FLAG_LISTEN_SUBSCRIBE_FAIL: case CALLBACK_SUBSCRIBE_FAIL: WifiNanSessionCallback.this.onSubscribeFail(msg.arg1); break; case FLAG_LISTEN_SUBSCRIBE_TERMINATED: case CALLBACK_SUBSCRIBE_TERMINATED: WifiNanSessionCallback.this.onSubscribeTerminated(msg.arg1); break; case FLAG_LISTEN_MATCH: case CALLBACK_MATCH: WifiNanSessionCallback.this.onMatch( msg.getData().getInt(MESSAGE_BUNDLE_KEY_PEER_ID), msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE), msg.arg1, msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE2), msg.arg2); break; case FLAG_LISTEN_MESSAGE_SEND_SUCCESS: case CALLBACK_MESSAGE_SEND_SUCCESS: WifiNanSessionCallback.this.onMessageSendSuccess(msg.arg1); break; case FLAG_LISTEN_MESSAGE_SEND_FAIL: case CALLBACK_MESSAGE_SEND_FAIL: WifiNanSessionCallback.this.onMessageSendFail(msg.arg1, msg.arg2); break; case FLAG_LISTEN_MESSAGE_RECEIVED: case CALLBACK_MESSAGE_RECEIVED: WifiNanSessionCallback.this.onMessageReceived(msg.arg2, msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE), msg.arg1); break; Loading @@ -240,7 +180,7 @@ public class WifiNanSessionCallback { /** * Called when a publish operation terminates. Event will only be delivered * if registered using * {@link WifiNanSessionCallback#FLAG_LISTEN_PUBLISH_TERMINATED}. A dummy (empty * {@link WifiNanSessionCallback#CALLBACK_PUBLISH_TERMINATED}. A dummy (empty * implementation printing out a warning). Make sure to override if * registered. * Loading @@ -266,7 +206,7 @@ public class WifiNanSessionCallback { /** * Called when a subscribe operation terminates. Event will only be * delivered if registered using * {@link WifiNanSessionCallback#FLAG_LISTEN_SUBSCRIBE_TERMINATED}. A dummy * {@link WifiNanSessionCallback#CALLBACK_SUBSCRIBE_TERMINATED}. A dummy * (empty implementation printing out a warning). Make sure to override if * registered. * Loading Loading @@ -353,7 +293,7 @@ public class WifiNanSessionCallback { public void onPublishFail(int reason) { if (VDBG) Log.v(TAG, "onPublishFail: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_PUBLISH_FAIL); Message msg = mHandler.obtainMessage(CALLBACK_PUBLISH_FAIL); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -362,7 +302,7 @@ public class WifiNanSessionCallback { public void onPublishTerminated(int reason) { if (VDBG) Log.v(TAG, "onPublishResponse: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_PUBLISH_TERMINATED); Message msg = mHandler.obtainMessage(CALLBACK_PUBLISH_TERMINATED); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -371,7 +311,7 @@ public class WifiNanSessionCallback { public void onSubscribeFail(int reason) { if (VDBG) Log.v(TAG, "onSubscribeFail: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_SUBSCRIBE_FAIL); Message msg = mHandler.obtainMessage(CALLBACK_SUBSCRIBE_FAIL); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -380,7 +320,7 @@ public class WifiNanSessionCallback { public void onSubscribeTerminated(int reason) { if (VDBG) Log.v(TAG, "onSubscribeTerminated: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_SUBSCRIBE_TERMINATED); Message msg = mHandler.obtainMessage(CALLBACK_SUBSCRIBE_TERMINATED); msg.arg1 = reason; mHandler.sendMessage(msg); } Loading @@ -395,7 +335,7 @@ public class WifiNanSessionCallback { data.putByteArray(MESSAGE_BUNDLE_KEY_MESSAGE, serviceSpecificInfo); data.putByteArray(MESSAGE_BUNDLE_KEY_MESSAGE2, matchFilter); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MATCH); Message msg = mHandler.obtainMessage(CALLBACK_MATCH); msg.arg1 = serviceSpecificInfoLength; msg.arg2 = matchFilterLength; msg.setData(data); Loading @@ -406,7 +346,7 @@ public class WifiNanSessionCallback { public void onMessageSendSuccess(int messageId) { if (VDBG) Log.v(TAG, "onMessageSendSuccess"); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MESSAGE_SEND_SUCCESS); Message msg = mHandler.obtainMessage(CALLBACK_MESSAGE_SEND_SUCCESS); msg.arg1 = messageId; mHandler.sendMessage(msg); } Loading @@ -415,7 +355,7 @@ public class WifiNanSessionCallback { public void onMessageSendFail(int messageId, int reason) { if (VDBG) Log.v(TAG, "onMessageSendFail: reason=" + reason); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MESSAGE_SEND_FAIL); Message msg = mHandler.obtainMessage(CALLBACK_MESSAGE_SEND_FAIL); msg.arg1 = messageId; msg.arg2 = reason; mHandler.sendMessage(msg); Loading @@ -431,7 +371,7 @@ public class WifiNanSessionCallback { Bundle data = new Bundle(); data.putByteArray(MESSAGE_BUNDLE_KEY_MESSAGE, message); Message msg = mHandler.obtainMessage(FLAG_LISTEN_MESSAGE_RECEIVED); Message msg = mHandler.obtainMessage(CALLBACK_MESSAGE_RECEIVED); msg.arg1 = messageLength; msg.arg2 = peerId; msg.setData(data); Loading