Merge "Bluetooth: Expose L2CAP API to support OPP 1.2"

This commit is contained in:
Treehugger Robot
2017-03-08 00:28:30 +00:00
committed by Gerrit Code Review
2 changed files with 50 additions and 0 deletions

View File

@@ -1858,6 +1858,35 @@ public final class BluetoothAdapter {
return listenUsingL2capOn(port, false, false);
}
/**
* Construct an insecure L2CAP server socket.
* Call #accept to retrieve connections to this socket.
* <p>To auto assign a port without creating a SDP record use
* {@link SOCKET_CHANNEL_AUTO_STATIC_NO_SDP} as port number.
* @param port the PSM to listen on
* @return An L2CAP BluetoothServerSocket
* @throws IOException On error, for example Bluetooth not available, or
* insufficient permissions.
* @hide
*/
public BluetoothServerSocket listenUsingInsecureL2capOn(int port) throws IOException {
BluetoothServerSocket socket = new BluetoothServerSocket(
BluetoothSocket.TYPE_L2CAP, false, false, port, false, false);
int errno = socket.mSocket.bindListen();
if(port == SOCKET_CHANNEL_AUTO_STATIC_NO_SDP) {
socket.setChannel(socket.mSocket.getPort());
}
if (errno != 0) {
//TODO(BT): Throw the same exception error code
// that the previous code was using.
//socket.mSocket.throwErrnoNative(errno);
throw new IOException("Error: " + errno);
}
return socket;
}
/**
* Read the local Out of Band Pairing Data
* <p>Requires {@link android.Manifest.permission#BLUETOOTH}

View File

@@ -1411,6 +1411,27 @@ public final class BluetoothDevice implements Parcelable {
null);
}
/**
* Create an L2cap {@link BluetoothSocket} ready to start an insecure
* outgoing connection to this remote device on given channel.
* <p>The remote device will be not authenticated and communication on this
* socket will not be encrypted.
* <p>Use {@link BluetoothSocket#connect} to initiate the outgoing
* connection.
* <p>Valid L2CAP PSM channels are in range 1 to 2^16.
* <p>Requires {@link android.Manifest.permission#BLUETOOTH}
*
* @param channel L2cap PSM/channel to connect to
* @return a RFCOMM BluetoothServerSocket ready for an outgoing connection
* @throws IOException on error, for example Bluetooth not available, or
* insufficient permissions
* @hide
*/
public BluetoothSocket createInsecureL2capSocket(int channel) throws IOException {
return new BluetoothSocket(BluetoothSocket.TYPE_L2CAP, -1, false, false, this, channel,
null);
}
/**
* Create an RFCOMM {@link BluetoothSocket} ready to start a secure
* outgoing connection to this remote device using SDP lookup of uuid.