private void sendProvisionerPublicKey(final UnprovisionedMeshNode node) {
        if (!isProvisioningPublicKeySent) {
            if (provisioningState instanceof ProvisioningPublicKeyState) {
                isProvisioningPublicKeySent = true;
                provisioningState.executeSend();
            } else {
                final ProvisioningPublicKeyState provisioningPublicKeyState = new ProvisioningPublicKeyState(node, mInternalTransportCallbacks, mStatusCallbacks);
                provisioningState = provisioningPublicKeyState;
                isProvisioningPublicKeySent = true;
                provisioningPublicKeyState.executeSend();
                if (node.getProvisioningCapabilities().isPublicKeyOobSupported() && node.getProvisioneePublicKeyXY() != null) {
                    isProvisioneePublicKeyReceived = provisioningPublicKeyState.parseData(node.getProvisioneePublicKeyXY());
                    if (isProvisioningPublicKeySent && isProvisioneePublicKeyReceived) {
                        handleConfirmationState(node, null);
                    }
                }
            }
        }
    }
Read provisioning capabilities of node

@param capabilities provisioning capabilities of the node
@return true if the message is valid
mesh/src/main/java/no/nordicsemi/android/mesh/MeshProvisioningHandler.java