/*
*
*
* Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights
* Reserved. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
/*
* (c) Copyright 2001, 2002 Motorola, Inc. ALL RIGHTS RESERVED.
*/
package javax.bluetooth;
import java.io.IOException;
import javax.microedition.io.Connection;
import com.sun.kvem.jsr082.bluetooth.BluetoothConnection;
import com.sun.kvem.jsr082.bluetooth.BCC;
/**
* This class is defined by the JSR-82 specification
* <em>Java™ APIs for Bluetooth™ Wireless Technology,
* Version 1.1.</em>
*/
// JAVADOC COMMENT ELIDED
public class RemoteDevice {
// JAVADOC COMMENT ELIDED
private long l_address;
// JAVADOC COMMENT ELIDED
private String s_address;
// JAVADOC COMMENT ELIDED
private String friendlyName;
// JAVADOC COMMENT ELIDED
protected RemoteDevice(String address) {
if (address == null) {
throw new NullPointerException("null address");
}
final String errorMsg = "Malformed address: " + address;
if (address.length() != 12) {
throw new IllegalArgumentException(errorMsg);
}
if (address.startsWith("-")) {
throw new IllegalArgumentException(errorMsg);
}
try {
l_address = Long.parseLong(address, 16);
} catch (NumberFormatException e) {
throw new IllegalArgumentException(errorMsg);
}
// should be upper case only
address = address.toUpperCase();
try {
String lAddr = LocalDevice.getLocalDevice().getBluetoothAddress();
if (address.equals(lAddr)) {
throw new IllegalArgumentException(
"Can't use the local address.");
}
} catch (BluetoothStateException e) {
throw new RuntimeException("Can't initialize bluetooth support");
}
s_address = address;
}
// JAVADOC COMMENT ELIDED
public boolean isTrustedDevice() {
return BCC.getInstance().isTrusted(getBluetoothAddress());
}
// JAVADOC COMMENT ELIDED
public String getFriendlyName(boolean alwaysAsk) throws IOException {
// contact the remote device if name is not known or alwaysAsk is true
if (friendlyName == null || alwaysAsk) {
friendlyName = BCC.getInstance().getFriendlyName(
getBluetoothAddress());
}
return friendlyName;
}
// JAVADOC COMMENT ELIDED
public final String getBluetoothAddress() {
return s_address;
}
// JAVADOC COMMENT ELIDED
public boolean equals(Object obj) {
return obj instanceof RemoteDevice &&
l_address == ((RemoteDevice) obj).l_address;
}
// JAVADOC COMMENT ELIDED
public int hashCode() {
return (int) ((l_address >>> 24) ^ (l_address & 0xffffffL));
}
// JAVADOC COMMENT ELIDED
public static RemoteDevice getRemoteDevice(Connection conn)
throws IOException {
return BluetoothConnection.getConnection(conn).getRemoteDevice();
}
// JAVADOC COMMENT ELIDED
public boolean authenticate() throws IOException {
if (!BCC.getInstance().isConnected(getBluetoothAddress())) {
throw new IOException("There are no open connections between the " +
"local device and this RemoteDevice.");
}
return BCC.getInstance().authenticate(getBluetoothAddress());
}
// JAVADOC COMMENT ELIDED
public boolean authorize(Connection conn) throws IOException {
BluetoothConnection btconn = BluetoothConnection.getConnection(conn);
if (!equals(btconn.getRemoteDevice())) {
throw new IllegalArgumentException("The specified connection " +
"is not a connection to this RemoteDevice.");
}
if (!btconn.isServerSide()) {
throw new IllegalArgumentException("The local device is client " +
"rather than the server for the specified connection.");
}
return authenticate() && (isTrustedDevice() || btconn.isAuthorized() ||
btconn.authorize());
}
// JAVADOC COMMENT ELIDED
public boolean encrypt(Connection conn, boolean on) throws IOException {
BluetoothConnection btconn = BluetoothConnection.getConnection(conn);
if (!equals(btconn.getRemoteDevice())) {
throw new IllegalArgumentException("The specified connection " +
"is not a connection to this RemoteDevice.");
}
if (on && !authenticate()) {
return false;
}
return btconn.encrypt(on);
}
// JAVADOC COMMENT ELIDED
public boolean isAuthenticated() {
return BCC.getInstance().isAuthenticated(getBluetoothAddress());
}
// JAVADOC COMMENT ELIDED
public boolean isAuthorized(Connection conn) throws IOException {
BluetoothConnection btconn = BluetoothConnection.getConnection(conn);
RemoteDevice device;
try {
device = btconn.getRemoteDevice();
} catch (IllegalArgumentException e) {
return false;
}
if (!equals(device)) {
throw new IllegalArgumentException("The specified connection " +
"is not a connection to this RemoteDevice.");
}
return btconn.isServerSide() && btconn.isAuthorized();
}
// JAVADOC COMMENT ELIDED
public boolean isEncrypted() {
return BCC.getInstance().isEncrypted(getBluetoothAddress());
}
} // end of class 'RemoteDevice' definition
|