/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.wifi.nan; import android.util.Log; /** * A representation of a single publish or subscribe NAN session. This object * will not be created directly - only its child classes are available: * {@link WifiNanPublishSession} and {@link WifiNanSubscribeSession}. * * @hide PROPOSED_NAN_API */ public class WifiNanSession { private static final String TAG = "WifiNanSession"; private static final boolean DBG = false; private static final boolean VDBG = false; // STOPSHIP if true /** * {@hide} */ protected WifiNanManager mManager; /** * {@hide} */ protected int mSessionId; /** * {@hide} */ private boolean mDestroyed; /** * {@hide} */ public WifiNanSession(WifiNanManager manager, int sessionId) { if (VDBG) Log.v(TAG, "New client created: manager=" + manager + ", sessionId=" + sessionId); mManager = manager; mSessionId = sessionId; mDestroyed = false; } /** * Terminate the current publish or subscribe session - i.e. stop * transmitting packet on-air (for an active session) or listening for * matches (for a passive session). Note that the session may still receive * incoming messages and may be re-configured/re-started at a later time. */ public void stop() { mManager.stopSession(mSessionId); } /** * Destroy the current publish or subscribe session. Performs a * {@link WifiNanSession#stop()} function but in addition destroys the session - * it will not be able to receive any messages or to be restarted at a later * time. */ public void destroy() { mManager.destroySession(mSessionId); mDestroyed = true; } /** * {@hide} */ @Override protected void finalize() throws Throwable { if (!mDestroyed) { Log.w(TAG, "WifiNanSession mSessionId=" + mSessionId + " was not explicitly destroyed. The session may use resources until " + "destroyed so step should be done explicitly"); } destroy(); } /** * Sends a message to the specified destination. Message transmission is * part of the current discovery session - i.e. executed subsequent to a * publish/subscribe * {@link WifiNanSessionListener#onMatch(int, byte[], int, byte[], int)} * event. * * @param peerId The peer's ID for the message. Must be a result of an * {@link WifiNanSessionListener#onMatch(int, byte[], int, byte[], int)} * event. * @param message The message to be transmitted. * @param messageLength The number of bytes from the {@code message} to be * transmitted. * @param messageId An arbitrary integer used by the caller to identify the * message. The same integer ID will be returned in the callbacks * indicated message send success or failure. */ public void sendMessage(int peerId, byte[] message, int messageLength, int messageId) { mManager.sendMessage(mSessionId, peerId, message, messageLength, messageId); } }