am 5aaed097: am 58ada2f3: am 94062517: Merge "Require bonding and encryption for PBAP server"

* commit '5aaed0970be451479a07b2423e709026dec6611b':
  Require bonding and encryption for PBAP server
This commit is contained in:
Jaikumar Ganesh
2011-06-06 12:56:55 -07:00
committed by Android Git Automerger

View File

@ -873,10 +873,10 @@ public final class BluetoothAdapter {
/**
* Create a listening, insecure RFCOMM Bluetooth socket with Service Record.
* <p>The link key will be unauthenticated i.e the communication is
* <p>The link key is not required to be authenticated, i.e the communication may be
* vulnerable to Man In the Middle attacks. For Bluetooth 2.1 devices,
* the link key will be encrypted, as encryption is mandartory.
* For legacy devices (pre Bluetooth 2.1 devices) the link key will not
* the link will be encrypted, as encryption is mandartory.
* For legacy devices (pre Bluetooth 2.1 devices) the link will not
* be encrypted. Use {@link #listenUsingRfcommWithServiceRecord}, if an
* encrypted and authenticated communication channel is desired.
* <p>Use {@link BluetoothServerSocket#accept} to retrieve incoming
@ -902,6 +902,44 @@ public final class BluetoothAdapter {
return createNewRfcommSocketAndRecord(name, uuid, false, false);
}
/**
* Create a listening, encrypted,
* RFCOMM Bluetooth socket with Service Record.
* <p>The link will be encrypted, but the link key is not required to be authenticated
* i.e the communication is vulnerable to Man In the Middle attacks. Use
* {@link #listenUsingRfcommWithServiceRecord}, to ensure an authenticated link key.
* <p> Use this socket if authentication of link key is not possible.
* For example, for Bluetooth 2.1 devices, if any of the devices does not have
* an input and output capability or just has the ability to display a numeric key,
* a secure socket connection is not possible and this socket can be used.
* Use {@link #listenUsingInsecureRfcommWithServiceRecord}, if encryption is not required.
* For Bluetooth 2.1 devices, the link will be encrypted, as encryption is mandartory.
* For more details, refer to the Security Model section 5.2 (vol 3) of
* Bluetooth Core Specification version 2.1 + EDR.
* <p>Use {@link BluetoothServerSocket#accept} to retrieve incoming
* connections from a listening {@link BluetoothServerSocket}.
* <p>The system will assign an unused RFCOMM channel to listen on.
* <p>The system will also register a Service Discovery
* Protocol (SDP) record with the local SDP server containing the specified
* UUID, service name, and auto-assigned channel. Remote Bluetooth devices
* can use the same UUID to query our SDP server and discover which channel
* to connect to. This SDP record will be removed when this socket is
* closed, or if this application closes unexpectedly.
* <p>Use {@link BluetoothDevice#createRfcommSocketToServiceRecord} to
* connect to this socket from another device using the same {@link UUID}.
* <p>Requires {@link android.Manifest.permission#BLUETOOTH}
* @param name service name for SDP record
* @param uuid uuid for SDP record
* @return a listening RFCOMM BluetoothServerSocket
* @throws IOException on error, for example Bluetooth not available, or
* insufficient permissions, or channel in use.
* @hide
*/
public BluetoothServerSocket listenUsingEncryptedRfcommWithServiceRecord(
String name, UUID uuid) throws IOException {
return createNewRfcommSocketAndRecord(name, uuid, false, true);
}
private BluetoothServerSocket createNewRfcommSocketAndRecord(String name, UUID uuid,
boolean auth, boolean encrypt) throws IOException {
RfcommChannelPicker picker = new RfcommChannelPicker(uuid);
@ -973,6 +1011,28 @@ public final class BluetoothAdapter {
return socket;
}
/**
* Construct an encrypted, RFCOMM server socket.
* Call #accept to retrieve connections to this socket.
* @return An RFCOMM BluetoothServerSocket
* @throws IOException On error, for example Bluetooth not available, or
* insufficient permissions.
* @hide
*/
public BluetoothServerSocket listenUsingEncryptedRfcommOn(int port)
throws IOException {
BluetoothServerSocket socket = new BluetoothServerSocket(
BluetoothSocket.TYPE_RFCOMM, false, true, port);
int errno = socket.mSocket.bindListen();
if (errno != 0) {
try {
socket.close();
} catch (IOException e) {}
socket.mSocket.throwErrnoNative(errno);
}
return socket;
}
/**
* Construct a SCO server socket.
* Call #accept to retrieve connections to this socket.