Merge "Move client request validation to L2capNetworkSpecifier" into main

This commit is contained in:
Maciej Żenczykowski 2025-02-25 14:18:19 -08:00 • committed by Gerrit Code Review
commit 47669ff8e4
2 changed files with 24 additions and 19 deletions

View file

@ -170,6 +170,29 @@ public final class L2capNetworkSpecifier extends NetworkSpecifier implements Par
return mPsm;
}
/**
* Checks whether the given L2capNetworkSpecifier is valid as part of a client network request.
*
* @hide
*/
public boolean isValidClientRequestSpecifier() {
// The ROLE_CLIENT offer can be satisfied by a ROLE_ANY request.
if (mRole != ROLE_CLIENT) return false;
// HEADER_COMPRESSION_ANY is never valid in a request.
if (mHeaderCompression == HEADER_COMPRESSION_ANY) return false;
// Remote address must not be null for ROLE_CLIENT requests.
if (mRemoteAddress == null) return false;
// Client network requests require a PSM to be specified.
// Ensure the PSM is within the valid range of dynamic BLE L2CAP values.
if (mPsm < 0x80) return false;
if (mPsm > 0xFF) return false;
return true;
}
/** A builder class for L2capNetworkSpecifier. */
public static final class Builder {
@Role

View file

@ -509,24 +509,6 @@ public class L2capNetworkProvider {
return true;
}
private boolean isValidL2capClientSpecifier(L2capNetworkSpecifier l2capSpec) {
// The ROLE_CLIENT offer can be satisfied by a ROLE_ANY request.
if (l2capSpec.getRole() != ROLE_CLIENT) return false;
// HEADER_COMPRESSION_ANY is never valid in a request.
if (l2capSpec.getHeaderCompression() == HEADER_COMPRESSION_ANY) return false;
// remoteAddr must not be null for ROLE_CLIENT requests.
if (l2capSpec.getRemoteAddress() == null) return false;
// Client network requests require a PSM to be specified.
// Ensure the PSM is within the valid range of dynamic BLE L2CAP values.
if (l2capSpec.getPsm() < 0x80) return false;
if (l2capSpec.getPsm() > 0xFF) return false;
return true;
}
@Override
public void onNetworkNeeded(NetworkRequest request) {
// The NetworkSpecifier is guaranteed to be either null or an L2capNetworkSpecifier, so
@ -534,7 +516,7 @@ public class L2capNetworkProvider {
final L2capNetworkSpecifier requestSpecifier =
(L2capNetworkSpecifier) request.getNetworkSpecifier();
if (requestSpecifier == null) return;
if (!isValidL2capClientSpecifier(requestSpecifier)) {
if (!requestSpecifier.isValidClientRequestSpecifier()) {
Log.i(TAG, "Ignoring invalid client request: " + request);
return;
}