blob: bc1787fee47891599a4c7c3c81a0fdf1a69256bd [file] [log] [blame]
/*
* 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);
}
}