final Message parseMeshMessage(@NonNull final NetworkKey key,
                                   @NonNull final ProvisionedMeshNode node,
                                   @NonNull final byte[] data,
                                   @NonNull final byte[] networkHeader,
                                   @NonNull final byte[] decryptedNetworkPayload,
                                   final int ivIndex,
                                   @NonNull final byte[] sequenceNumber) throws ExtendedInvalidCipherTextException {
        mMeshNode = node;
        final Provisioner provisioner = mNetworkLayerCallbacks.getProvisioner();
        final int ctlTtl = networkHeader[0];
        final int ctl = (ctlTtl >> 7) & 0x01;
        final int ttl = ctlTtl & 0x7F;
        MeshLogger.verbose(TAG, "TTL for received message: " + ttl);
        final int src = MeshParserUtils.unsignedBytesToInt(networkHeader[5], networkHeader[4]);
        if (ctl == 1) {
            return parseControlMessage(key, provisioner.getProvisionerAddress(), data, networkHeader, decryptedNetworkPayload, src, sequenceNumber);
        } else {
            return parseAccessMessage(key, data, networkHeader, decryptedNetworkPayload, src, sequenceNumber, ivIndex);
        }
    }
Parse received mesh message
<p>
This method will drop messages with an invalid sequence number as all mesh messages are supposed to have a sequence
</p>

@param key                     Network Key used to decrypt
@param node                    Mesh node.
@param data                    PDU received from the mesh node.
@param networkHeader           Network header.
@param decryptedNetworkPayload Decrypted network payload.
@param ivIndex                 IV Index of the network.
@return complete {@link Message} that was successfully parsed or null otherwise.
mesh/src/main/java/no/nordicsemi/android/mesh/transport/NetworkLayer.java