@@ -548,25 +548,21 @@ void ConsumerImpl::messageReceived(const ClientConnectionPtr& cnx, const proto::
548548 bool & isChecksumValid, proto::BrokerEntryMetadata& brokerEntryMetadata,
549549 proto::MessageMetadata& metadata, SharedBuffer& payload) {
550550 LOG_DEBUG (getName () << " Received Message -- Size: " << payload.readableBytes ());
551-
552- if (!decryptMessageIfNeeded (cnx, msg, metadata, payload)) {
553- // Message was discarded or not consumed due to decryption failure
554- return ;
555- }
556-
557551 if (!isChecksumValid) {
558552 // Message discarded for checksum error
559553 discardCorruptedMessage (cnx, msg.message_id (), CommandAck_ValidationError_ChecksumMismatch);
560554 return ;
561555 }
562556
563- auto redeliveryCount = msg.redelivery_count ();
564- const bool isMessageUndecryptable =
565- metadata.encryption_keys_size () > 0 && !config_.getCryptoKeyReader ().get () &&
566- config_.getCryptoFailureAction () == ConsumerCryptoFailureAction::CONSUME;
557+ auto decryptResult = decryptMessageIfNeeded (cnx, msg, metadata, payload);
558+ if (decryptResult == FAILED) {
559+ // Message was discarded due to decryption failure or not consumed due to decryption failure
560+ return ;
561+ }
567562
563+ auto redeliveryCount = msg.redelivery_count ();
568564 const bool isChunkedMessage = metadata.num_chunks_from_msg () > 1 ;
569- if (!isMessageUndecryptable && !isChunkedMessage) {
565+ if (decryptResult == DECRYPTED && !isChunkedMessage) {
570566 if (!uncompressMessageIfNeeded (cnx, msg.message_id (), metadata, payload, true )) {
571567 // Message was discarded on decompression error
572568 return ;
@@ -586,6 +582,7 @@ void ConsumerImpl::messageReceived(const ClientConnectionPtr& cnx, const proto::
586582 }
587583 }
588584
585+ // TODO: create encryption context
589586 Message m (messageId, brokerEntryMetadata, metadata, payload);
590587 m.impl_ ->cnx_ = cnx.get ();
591588 m.impl_ ->setTopicName (getTopicPtr ());
@@ -812,17 +809,18 @@ uint32_t ConsumerImpl::receiveIndividualMessagesFromBatch(const ClientConnection
812809 return batchSize - skippedMessages;
813810}
814811
815- bool ConsumerImpl::decryptMessageIfNeeded (const ClientConnectionPtr& cnx, const proto::CommandMessage& msg,
816- const proto::MessageMetadata& metadata, SharedBuffer& payload) {
817- if (!metadata.encryption_keys_size ()) {
818- return true ;
812+ auto ConsumerImpl::decryptMessageIfNeeded (const ClientConnectionPtr& cnx, const proto::CommandMessage& msg,
813+ const proto::MessageMetadata& metadata, SharedBuffer& payload)
814+ -> DecryptResult {
815+ if (metadata.encryption_keys_size () == 0 ) {
816+ return DECRYPTED;
819817 }
820818
821819 // If KeyReader is not configured throw exception based on config param
822820 if (!config_.isEncryptionEnabled ()) {
823821 if (config_.getCryptoFailureAction () == ConsumerCryptoFailureAction::CONSUME) {
824822 LOG_WARN (getName () << " CryptoKeyReader is not implemented. Consuming encrypted message." );
825- return true ;
823+ return CONSUME_ENCRYPTED ;
826824 } else if (config_.getCryptoFailureAction () == ConsumerCryptoFailureAction::DISCARD) {
827825 LOG_WARN (getName () << " Skipping decryption since CryptoKeyReader is not implemented and config "
828826 " is set to discard" );
@@ -833,20 +831,20 @@ bool ConsumerImpl::decryptMessageIfNeeded(const ClientConnectionPtr& cnx, const
833831 auto messageId = MessageIdBuilder::from (msg.message_id ()).build ();
834832 unAckedMessageTrackerPtr_->add (messageId);
835833 }
836- return false ;
834+ return FAILED ;
837835 }
838836
839837 SharedBuffer decryptedPayload;
840838 if (msgCrypto_->decrypt (metadata, payload, config_.getCryptoKeyReader (), decryptedPayload)) {
841839 payload = decryptedPayload;
842- return true ;
840+ return DECRYPTED ;
843841 }
844842
845843 if (config_.getCryptoFailureAction () == ConsumerCryptoFailureAction::CONSUME) {
846844 // Note, batch message will fail to consume even if config is set to consume
847845 LOG_WARN (
848846 getName () << " Decryption failed. Consuming encrypted message since config is set to consume." );
849- return true ;
847+ return CONSUME_ENCRYPTED ;
850848 } else if (config_.getCryptoFailureAction () == ConsumerCryptoFailureAction::DISCARD) {
851849 LOG_WARN (getName () << " Discarding message since decryption failed and config is set to discard" );
852850 discardCorruptedMessage (cnx, msg.message_id (), CommandAck_ValidationError_DecryptionError);
@@ -855,7 +853,7 @@ bool ConsumerImpl::decryptMessageIfNeeded(const ClientConnectionPtr& cnx, const
855853 auto messageId = MessageIdBuilder::from (msg.message_id ()).build ();
856854 unAckedMessageTrackerPtr_->add (messageId);
857855 }
858- return false ;
856+ return FAILED ;
859857}
860858
861859bool ConsumerImpl::uncompressMessageIfNeeded (const ClientConnectionPtr& cnx,
0 commit comments