This is an automated email from the ASF dual-hosted git repository. fgerlits pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 68991c705af21cc3f28de98a85295da36e3b15b3 Author: Adam Debreceni <[email protected]> AuthorDate: Fri Jun 2 10:50:21 2023 +0200 MINIFICPP-1755 - Use std::span instead of gsl::span Signed-off-by: Ferenc Gerlits <[email protected]> This closes #1584 --- extensions/aws/processors/PutS3Object.h | 2 +- extensions/azure/storage/AzureBlobStorage.cpp | 2 +- extensions/azure/storage/AzureBlobStorage.h | 2 +- .../azure/storage/AzureBlobStorageClient.cpp | 7 ++-- extensions/azure/storage/AzureBlobStorageClient.h | 2 +- extensions/azure/storage/AzureDataLakeStorage.cpp | 2 +- extensions/azure/storage/AzureDataLakeStorage.h | 2 +- .../azure/storage/AzureDataLakeStorageClient.cpp | 5 ++- .../azure/storage/AzureDataLakeStorageClient.h | 7 ++-- extensions/azure/storage/BlobStorageClient.h | 2 +- extensions/azure/storage/DataLakeStorageClient.h | 2 +- extensions/coap/controllerservice/CoapResponse.h | 2 +- extensions/coap/protocols/CoapC2Protocol.cpp | 3 +- extensions/gcp/processors/PutGCSObject.cpp | 2 +- extensions/http-curl/client/HTTPCallback.h | 2 +- extensions/http-curl/client/HTTPStream.cpp | 2 +- extensions/http-curl/client/HTTPStream.h | 2 +- extensions/http-curl/protocols/RESTSender.cpp | 2 +- extensions/http-curl/tests/C2CompressTest.cpp | 5 ++- extensions/http-curl/tests/C2DebugBundleTest.cpp | 4 +- extensions/http-curl/tests/CivetStream.h | 2 +- extensions/jni/jvm/JniReferenceObjects.h | 2 +- extensions/libarchive/ReadArchiveStream.cpp | 2 +- extensions/libarchive/ReadArchiveStream.h | 4 +- extensions/librdkafka/rdkafka_utils.cpp | 16 ++------ extensions/librdkafka/rdkafka_utils.h | 2 +- extensions/lua/LuaInputStream.cpp | 2 +- extensions/opencv/MotionDetector.cpp | 2 +- extensions/rocksdb-repos/RocksDbRepository.cpp | 3 +- extensions/rocksdb-repos/RocksDbStream.cpp | 16 ++------ extensions/rocksdb-repos/RocksDbStream.h | 2 +- .../encryption/RocksDbEncryptionProvider.cpp | 4 +- .../processors/ExecuteProcess.cpp | 2 +- .../processors/ExecuteProcess.h | 2 +- .../standard-processors/processors/ExtractText.cpp | 2 +- .../standard-processors/processors/PutTCP.cpp | 5 ++- extensions/systemd/ConsumeJournald.cpp | 4 +- extensions/systemd/ConsumeJournald.h | 2 +- libminifi/include/FlowFileRecord.h | 2 +- libminifi/include/c2/C2Payload.h | 8 +++- libminifi/include/c2/protocols/RESTProtocol.h | 2 +- libminifi/include/core/ConfigurableComponent.h | 2 +- libminifi/include/core/Connectable.h | 4 +- libminifi/include/core/ProcessSession.h | 8 ++-- libminifi/include/core/flow/Node.h | 2 +- .../include/core/repository/AtomicRepoEntries.h | 13 +++--- libminifi/include/io/AtomicEntryStream.h | 4 +- libminifi/include/io/BufferStream.h | 6 +-- libminifi/include/io/CRCStream.h | 2 +- libminifi/include/io/ClientSocket.h | 4 +- libminifi/include/io/DescriptorStream.h | 2 +- libminifi/include/io/FileStream.h | 2 +- libminifi/include/io/InputStream.h | 2 +- libminifi/include/io/OutputStream.h | 2 +- libminifi/include/io/Stream.h | 3 +- libminifi/include/io/StreamSlice.h | 4 +- libminifi/include/io/tls/SecureDescriptorStream.h | 2 +- libminifi/include/io/tls/TLSSocket.h | 4 +- libminifi/include/sitetosite/Peer.h | 2 +- libminifi/include/utils/ByteArrayCallback.h | 2 +- libminifi/include/utils/JsonCallback.h | 2 +- libminifi/include/utils/StringUtils.h | 17 ++++---- libminifi/include/utils/crypto/ciphers/Aes256Ecb.h | 4 +- libminifi/include/utils/gsl.h | 18 +-------- libminifi/include/utils/{gsl.h => span.h} | 35 +++++++--------- libminifi/src/c2/C2Agent.cpp | 2 +- libminifi/src/c2/C2Payload.cpp | 14 ++----- libminifi/src/c2/protocols/RESTProtocol.cpp | 5 +-- libminifi/src/core/ConfigurableComponent.cpp | 2 +- libminifi/src/core/Connectable.cpp | 4 +- libminifi/src/core/ProcessSession.cpp | 12 +++--- libminifi/src/core/Repository.cpp | 2 +- .../src/core/repository/VolatileRepository.cpp | 2 +- libminifi/src/io/BufferStream.cpp | 14 ++----- libminifi/src/io/ClientSocket.cpp | 2 +- libminifi/src/io/DescriptorStream.cpp | 15 ++----- libminifi/src/io/FileStream.cpp | 2 +- libminifi/src/io/StreamSlice.cpp | 4 +- libminifi/src/io/tls/SecureDescriptorStream.cpp | 2 +- libminifi/src/io/tls/TLSSocket.cpp | 4 +- libminifi/src/utils/BaseHTTPClient.cpp | 4 +- .../utils/LineByLineInputOutputStreamCallback.cpp | 3 +- libminifi/src/utils/StringUtils.cpp | 10 ++--- libminifi/src/utils/crypto/EncryptionUtils.cpp | 19 +++------ libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp | 26 ++++-------- libminifi/src/utils/file/FileUtils.cpp | 4 +- libminifi/test/TestBase.cpp | 3 +- libminifi/test/Utils.h | 4 +- .../test/archive-tests/ArchiveStreamTests.cpp | 2 +- .../test/archive-tests/CompressContentTests.cpp | 2 +- libminifi/test/archive-tests/MergeFileTests.cpp | 7 ++-- libminifi/test/azure-tests/MockBlobStorage.h | 5 ++- .../test/azure-tests/MockDataLakeStorageClient.h | 6 ++- libminifi/test/rocksdb-tests/EncryptionTests.cpp | 3 +- .../test/rocksdb-tests/RocksDBStreamTests.cpp | 4 +- libminifi/test/rocksdb-tests/SwapTests.cpp | 2 +- libminifi/test/unit/FileStreamTests.cpp | 2 +- libminifi/test/unit/FileSystemRepositoryTests.cpp | 4 +- libminifi/test/unit/FlowFileSerializationTests.cpp | 5 ++- .../LineByLineInputOutputStreamCallbackTests.cpp | 5 ++- libminifi/test/unit/LoggerTests.cpp | 3 +- libminifi/test/unit/ProvenanceTestHelper.h | 3 +- libminifi/test/unit/SiteToSiteHelper.h | 2 +- libminifi/test/unit/{GslTest.cpp => SpanTests.cpp} | 14 +++++-- libminifi/test/unit/StreamTests.cpp | 5 ++- libminifi/test/unit/StringUtilsTests.cpp | 46 +++++++++------------- libminifi/test/unit/ZlibStreamTests.cpp | 5 ++- nanofi/tests/CSite2SiteTests.cpp | 4 +- 108 files changed, 259 insertions(+), 320 deletions(-) diff --git a/extensions/aws/processors/PutS3Object.h b/extensions/aws/processors/PutS3Object.h index 4763c6e2f..81c0faa0d 100644 --- a/extensions/aws/processors/PutS3Object.h +++ b/extensions/aws/processors/PutS3Object.h @@ -116,7 +116,7 @@ class PutS3Object : public S3Processor { read_size_ = 0; while (read_size_ < flow_size_) { const auto next_read_size = (std::min)(flow_size_ - read_size_, BUFFER_SIZE); - const auto read_ret = stream->read(gsl::make_span(buffer).subspan(0, next_read_size)); + const auto read_ret = stream->read(std::span(buffer).subspan(0, next_read_size)); if (io::isError(read_ret)) { return -1; } diff --git a/extensions/azure/storage/AzureBlobStorage.cpp b/extensions/azure/storage/AzureBlobStorage.cpp index a5d9ec5b7..a00f5481b 100644 --- a/extensions/azure/storage/AzureBlobStorage.cpp +++ b/extensions/azure/storage/AzureBlobStorage.cpp @@ -43,7 +43,7 @@ std::optional<bool> AzureBlobStorage::createContainerIfNotExists(const PutAzureB } } -std::optional<UploadBlobResult> AzureBlobStorage::uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) { +std::optional<UploadBlobResult> AzureBlobStorage::uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) { try { logger_->log_debug("Uploading Azure blob %s to container %s", params.blob_name, params.container_name); auto response = blob_storage_client_->uploadBlob(params, buffer); diff --git a/extensions/azure/storage/AzureBlobStorage.h b/extensions/azure/storage/AzureBlobStorage.h index 8b7f9b16e..305da5451 100644 --- a/extensions/azure/storage/AzureBlobStorage.h +++ b/extensions/azure/storage/AzureBlobStorage.h @@ -64,7 +64,7 @@ class AzureBlobStorage { public: explicit AzureBlobStorage(std::unique_ptr<BlobStorageClient> blob_storage_client = nullptr); std::optional<bool> createContainerIfNotExists(const PutAzureBlobStorageParameters& params); - std::optional<UploadBlobResult> uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer); + std::optional<UploadBlobResult> uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer); bool deleteBlob(const DeleteAzureBlobStorageParameters& params); std::optional<uint64_t> fetchBlob(const FetchAzureBlobStorageParameters& params, io::OutputStream& stream); std::optional<ListContainerResult> listContainer(const ListAzureBlobStorageParameters& params); diff --git a/extensions/azure/storage/AzureBlobStorageClient.cpp b/extensions/azure/storage/AzureBlobStorageClient.cpp index f83302ded..b64c1e367 100644 --- a/extensions/azure/storage/AzureBlobStorageClient.cpp +++ b/extensions/azure/storage/AzureBlobStorageClient.cpp @@ -26,6 +26,7 @@ #include "azure/storage/blobs/blob_options.hpp" #include "utils/AzureSdkLogger.h" +#include "utils/span.h" namespace org::apache::nifi::minifi::azure::storage { @@ -40,8 +41,8 @@ class AzureBlobStorageInputStream : public io::InputStream { return result_.BodyStream->Length(); } - size_t read(gsl::span<std::byte> buffer) override { - const auto uint8_t_view = buffer.as_span<uint8_t>(); + size_t read(std::span<std::byte> buffer) override { + const auto uint8_t_view = minifi::utils::as_span<uint8_t>(buffer); return result_.BodyStream->Read(uint8_t_view.data(), uint8_t_view.size()); } @@ -71,7 +72,7 @@ bool AzureBlobStorageClient::createContainerIfNotExists(const PutAzureBlobStorag return container_client->CreateIfNotExists().Value.Created; } -Azure::Storage::Blobs::Models::UploadBlockBlobResult AzureBlobStorageClient::uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) { +Azure::Storage::Blobs::Models::UploadBlockBlobResult AzureBlobStorageClient::uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) { auto container_client = createClient(params.credentials, params.container_name); auto blob_client = container_client->GetBlockBlobClient(params.blob_name); return blob_client.UploadFrom(reinterpret_cast<const uint8_t*>(buffer.data()), buffer.size()).Value; diff --git a/extensions/azure/storage/AzureBlobStorageClient.h b/extensions/azure/storage/AzureBlobStorageClient.h index 325f4ef24..29455e888 100644 --- a/extensions/azure/storage/AzureBlobStorageClient.h +++ b/extensions/azure/storage/AzureBlobStorageClient.h @@ -36,7 +36,7 @@ class AzureBlobStorageClient : public BlobStorageClient { public: AzureBlobStorageClient(); bool createContainerIfNotExists(const PutAzureBlobStorageParameters& params) override; - Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) override; + Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) override; std::string getUrl(const AzureBlobStorageParameters& params) override; bool deleteBlob(const DeleteAzureBlobStorageParameters& params) override; std::unique_ptr<io::InputStream> fetchBlob(const FetchAzureBlobStorageParameters& params) override; diff --git a/extensions/azure/storage/AzureDataLakeStorage.cpp b/extensions/azure/storage/AzureDataLakeStorage.cpp index 9f575428c..dde6f8255 100644 --- a/extensions/azure/storage/AzureDataLakeStorage.cpp +++ b/extensions/azure/storage/AzureDataLakeStorage.cpp @@ -59,7 +59,7 @@ AzureDataLakeStorage::AzureDataLakeStorage(std::unique_ptr<DataLakeStorageClient : data_lake_storage_client_(data_lake_storage_client ? std::move(data_lake_storage_client) : std::make_unique<AzureDataLakeStorageClient>()) { } -UploadDataLakeStorageResult AzureDataLakeStorage::uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) { +UploadDataLakeStorageResult AzureDataLakeStorage::uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) { UploadDataLakeStorageResult result; logger_->log_debug("Uploading file '%s/%s' to Azure Data Lake Storage filesystem '%s'", params.directory_name, params.filename, params.file_system_name); try { diff --git a/extensions/azure/storage/AzureDataLakeStorage.h b/extensions/azure/storage/AzureDataLakeStorage.h index 6e1756c0f..587ec5f0d 100644 --- a/extensions/azure/storage/AzureDataLakeStorage.h +++ b/extensions/azure/storage/AzureDataLakeStorage.h @@ -67,7 +67,7 @@ class AzureDataLakeStorage { public: explicit AzureDataLakeStorage(std::unique_ptr<DataLakeStorageClient> data_lake_storage_client = nullptr); - storage::UploadDataLakeStorageResult uploadFile(const storage::PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer); + storage::UploadDataLakeStorageResult uploadFile(const storage::PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer); bool deleteFile(const storage::DeleteAzureDataLakeStorageParameters& params); std::optional<uint64_t> fetchFile(const FetchAzureDataLakeStorageParameters& params, io::OutputStream& stream); std::optional<ListDataLakeStorageResult> listDirectory(const ListAzureDataLakeStorageParameters& params); diff --git a/extensions/azure/storage/AzureDataLakeStorageClient.cpp b/extensions/azure/storage/AzureDataLakeStorageClient.cpp index d64ba296b..0b5e97079 100644 --- a/extensions/azure/storage/AzureDataLakeStorageClient.cpp +++ b/extensions/azure/storage/AzureDataLakeStorageClient.cpp @@ -27,6 +27,7 @@ #include "azure/identity.hpp" #include "utils/AzureSdkLogger.h" +#include "utils/span.h" namespace org::apache::nifi::minifi::azure::storage { @@ -70,9 +71,9 @@ bool AzureDataLakeStorageClient::createFile(const PutAzureDataLakeStorageParamet return response.Value.Created; } -std::string AzureDataLakeStorageClient::uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) { +std::string AzureDataLakeStorageClient::uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) { auto file_client = getFileClient(params); - file_client.UploadFrom(buffer.as_span<const uint8_t>().data(), buffer.size()); + file_client.UploadFrom(minifi::utils::as_span<const uint8_t>(buffer).data(), buffer.size()); return file_client.GetUrl(); } diff --git a/extensions/azure/storage/AzureDataLakeStorageClient.h b/extensions/azure/storage/AzureDataLakeStorageClient.h index 2e9fd98ac..c8eecf0a2 100644 --- a/extensions/azure/storage/AzureDataLakeStorageClient.h +++ b/extensions/azure/storage/AzureDataLakeStorageClient.h @@ -29,6 +29,7 @@ #include "DataLakeStorageClient.h" #include "core/logging/Logger.h" #include "core/logging/LoggerConfiguration.h" +#include "utils/span.h" namespace org::apache::nifi::minifi::azure::storage { @@ -49,7 +50,7 @@ class AzureDataLakeStorageClient : public DataLakeStorageClient { * @param buffer Buffer containing the data to be uploaded * @return URI of the file uploaded */ - std::string uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) override; + std::string uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) override; /** * Deletes a file on the Azure Data Lake Storage @@ -83,8 +84,8 @@ class AzureDataLakeStorageClient : public DataLakeStorageClient { return result_.Body->Length(); } - size_t read(gsl::span<std::byte> out_buffer) override { - return result_.Body->Read(out_buffer.as_span<uint8_t>().data(), out_buffer.size()); + size_t read(std::span<std::byte> out_buffer) override { + return result_.Body->Read(utils::as_span<uint8_t>(out_buffer).data(), out_buffer.size()); } private: diff --git a/extensions/azure/storage/BlobStorageClient.h b/extensions/azure/storage/BlobStorageClient.h index efa2f8dfc..ddbc9bf33 100644 --- a/extensions/azure/storage/BlobStorageClient.h +++ b/extensions/azure/storage/BlobStorageClient.h @@ -66,7 +66,7 @@ struct ListAzureBlobStorageParameters : public AzureBlobStorageParameters { class BlobStorageClient { public: virtual bool createContainerIfNotExists(const PutAzureBlobStorageParameters& params) = 0; - virtual Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) = 0; + virtual Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) = 0; virtual std::string getUrl(const AzureBlobStorageParameters& params) = 0; virtual bool deleteBlob(const DeleteAzureBlobStorageParameters& params) = 0; virtual std::unique_ptr<io::InputStream> fetchBlob(const FetchAzureBlobStorageParameters& params) = 0; diff --git a/extensions/azure/storage/DataLakeStorageClient.h b/extensions/azure/storage/DataLakeStorageClient.h index 17d43c0bb..4fd653daf 100644 --- a/extensions/azure/storage/DataLakeStorageClient.h +++ b/extensions/azure/storage/DataLakeStorageClient.h @@ -65,7 +65,7 @@ struct ListAzureDataLakeStorageParameters : public AzureDataLakeStorageParameter class DataLakeStorageClient { public: virtual bool createFile(const PutAzureDataLakeStorageParameters& params) = 0; - virtual std::string uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) = 0; + virtual std::string uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) = 0; virtual bool deleteFile(const DeleteAzureDataLakeStorageParameters& params) = 0; virtual std::unique_ptr<io::InputStream> fetchFile(const FetchAzureDataLakeStorageParameters& params) = 0; virtual std::vector<Azure::Storage::Files::DataLake::Models::PathItem> listDirectory(const ListAzureDataLakeStorageParameters& params) = 0; diff --git a/extensions/coap/controllerservice/CoapResponse.h b/extensions/coap/controllerservice/CoapResponse.h index 53145c645..f7d3f0ba0 100644 --- a/extensions/coap/controllerservice/CoapResponse.h +++ b/extensions/coap/controllerservice/CoapResponse.h @@ -54,7 +54,7 @@ class CoapResponse { CoapResponse(CoapResponse &&other) = default; ~CoapResponse() = default; - [[nodiscard]] gsl::span<const std::byte> getData() const noexcept { + [[nodiscard]] std::span<const std::byte> getData() const noexcept { return data_; } diff --git a/extensions/coap/protocols/CoapC2Protocol.cpp b/extensions/coap/protocols/CoapC2Protocol.cpp index 7e7968ac1..733065533 100644 --- a/extensions/coap/protocols/CoapC2Protocol.cpp +++ b/extensions/coap/protocols/CoapC2Protocol.cpp @@ -22,6 +22,7 @@ #include "io/OutputStream.h" #include "core/Resource.h" #include "utils/gsl.h" +#include "utils/span.h" namespace org::apache::nifi::minifi::coap::c2 { @@ -242,7 +243,7 @@ minifi::c2::C2Payload CoapProtocol::serialize(const minifi::c2::C2Payload &paylo size_t bsize = stream.size(); CoapMessage msg; - msg.data_ = const_cast<uint8_t *>(stream.getBuffer().as_span<const uint8_t>().data()); + msg.data_ = const_cast<uint8_t *>(utils::as_span<const uint8_t>(stream.getBuffer()).data()); msg.size_ = bsize; coap::controllers::CoapResponse message = coap_service_->sendPayload(COAP_REQUEST_POST, endpoint, &msg); diff --git a/extensions/gcp/processors/PutGCSObject.cpp b/extensions/gcp/processors/PutGCSObject.cpp index 52a3c433f..563661474 100644 --- a/extensions/gcp/processors/PutGCSObject.cpp +++ b/extensions/gcp/processors/PutGCSObject.cpp @@ -40,7 +40,7 @@ class UploadToGCSCallback { int64_t operator()(const std::shared_ptr<io::InputStream>& stream) { std::string content; content.resize(stream->size()); - const auto read_ret = stream->read(gsl::make_span(content).as_span<std::byte>()); + const auto read_ret = stream->read(as_writable_bytes(std::span(content))); if (io::isError(read_ret)) { return -1; } diff --git a/extensions/http-curl/client/HTTPCallback.h b/extensions/http-curl/client/HTTPCallback.h index 1a9281727..55751e468 100644 --- a/extensions/http-curl/client/HTTPCallback.h +++ b/extensions/http-curl/client/HTTPCallback.h @@ -85,7 +85,7 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba } void write(std::string content) override { - (void) processInner(utils::span_to<std::vector>(gsl::make_span(content).as_span<std::byte>())); + (void) processInner(utils::span_to<std::vector>(as_bytes(std::span(content)))); } std::byte* getBuffer(size_t pos) override { diff --git a/extensions/http-curl/client/HTTPStream.cpp b/extensions/http-curl/client/HTTPStream.cpp index 48ad3ad27..ca8b53b10 100644 --- a/extensions/http-curl/client/HTTPStream.cpp +++ b/extensions/http-curl/client/HTTPStream.cpp @@ -72,7 +72,7 @@ size_t HttpStream::write(const uint8_t* value, size_t size) { return size; } -size_t HttpStream::read(gsl::span<std::byte> buf) { +size_t HttpStream::read(std::span<std::byte> buf) { if (buf.empty()) { return 0; } if (!IsNullOrEmpty(buf)) { if (!started_) { diff --git a/extensions/http-curl/client/HTTPStream.h b/extensions/http-curl/client/HTTPStream.h index ada04beae..ed910cdf8 100644 --- a/extensions/http-curl/client/HTTPStream.h +++ b/extensions/http-curl/client/HTTPStream.h @@ -89,7 +89,7 @@ class HttpStream : public io::BaseStream { * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override; + size_t read(std::span<std::byte> buf) override; /** * writes value to stream diff --git a/extensions/http-curl/protocols/RESTSender.cpp b/extensions/http-curl/protocols/RESTSender.cpp index 0d188af84..382d311f2 100644 --- a/extensions/http-curl/protocols/RESTSender.cpp +++ b/extensions/http-curl/protocols/RESTSender.cpp @@ -140,7 +140,7 @@ C2Payload RESTSender::sendPayload(const std::string& url, const Direction direct io::BufferStream compressed_payload; bool compression_success = [&] { io::ZlibCompressStream compressor(gsl::make_not_null(&compressed_payload), io::ZlibCompressionFormat::GZIP, Z_BEST_COMPRESSION); - auto ret = compressor.write(gsl::span<const char>(data.value()).as_span<const std::byte>()); + auto ret = compressor.write(as_bytes(std::span(data.value()))); if (ret != data->length()) { return false; } diff --git a/extensions/http-curl/tests/C2CompressTest.cpp b/extensions/http-curl/tests/C2CompressTest.cpp index 673cdd55e..e0ea8974d 100644 --- a/extensions/http-curl/tests/C2CompressTest.cpp +++ b/extensions/http-curl/tests/C2CompressTest.cpp @@ -35,6 +35,7 @@ #include "range/v3/view/transform.hpp" #include "utils/IntegrationTestUtils.h" #include "utils/StringUtils.h" +#include "utils/span.h" #include "properties/Configuration.h" #include "io/ZlibStream.h" @@ -50,10 +51,10 @@ class CompressedHeartbeatHandler : public HeartbeatHandler { minifi::io::BufferStream output; { minifi::io::ZlibDecompressStream decompressor(gsl::make_not_null(&output)); - auto ret = decompressor.write(gsl::span<const char>(payload).as_span<const std::byte>()); + auto ret = decompressor.write(as_bytes(std::span(payload))); assert(ret == payload.size()); } - auto str_span = output.getBuffer().as_span<const char>(); + auto str_span = utils::as_span<const char>(output.getBuffer()); return {str_span.data(), str_span.size()}; } diff --git a/extensions/http-curl/tests/C2DebugBundleTest.cpp b/extensions/http-curl/tests/C2DebugBundleTest.cpp index 6001b3f99..b4d531255 100644 --- a/extensions/http-curl/tests/C2DebugBundleTest.cpp +++ b/extensions/http-curl/tests/C2DebugBundleTest.cpp @@ -168,7 +168,7 @@ int main() { while (auto info = decompressor->nextEntry()) { std::string file_content; file_content.resize(info->size); - assert(decompressor->read(gsl::make_span(file_content).as_span<std::byte>()) == + assert(decompressor->read(as_writable_bytes(std::span(file_content))) == file_content.length()); archive_content[info->filename] = std::move(file_content); } @@ -182,7 +182,7 @@ int main() { } std::string log_text; log_text.resize(log_stream->size()); - log_stream->read(gsl::make_span(log_text).as_span<std::byte>()); + log_stream->read(as_writable_bytes(std::span(log_text))); assert(log_text.find("Tis but a scratch") != std::string::npos); return true; }); diff --git a/extensions/http-curl/tests/CivetStream.h b/extensions/http-curl/tests/CivetStream.h index a963503ee..94acdd71a 100644 --- a/extensions/http-curl/tests/CivetStream.h +++ b/extensions/http-curl/tests/CivetStream.h @@ -43,7 +43,7 @@ class CivetStream : public io::InputStream { * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override { + size_t read(std::span<std::byte> buf) override { const auto ret = mg_read(conn, buf.data(), buf.size()); if (ret < 0) return STREAM_ERROR; return gsl::narrow<size_t>(ret); diff --git a/extensions/jni/jvm/JniReferenceObjects.h b/extensions/jni/jvm/JniReferenceObjects.h index 028089863..407555e7d 100644 --- a/extensions/jni/jvm/JniReferenceObjects.h +++ b/extensions/jni/jvm/JniReferenceObjects.h @@ -109,7 +109,7 @@ class JniByteInputStream { int read = 0; do { // JNI takes size as int, there's not much we can do here to support 2GB+ sizes - int actual = static_cast<int>(stream_->read(gsl::make_span(buffer_).subspan(0, std::min(remaining, buffer_.size())))); + int actual = static_cast<int>(stream_->read(std::span(buffer_).subspan(0, std::min(remaining, buffer_.size())))); if (actual <= 0) { if (read == 0) { stream_ = nullptr; diff --git a/extensions/libarchive/ReadArchiveStream.cpp b/extensions/libarchive/ReadArchiveStream.cpp index 556658403..afd3ac01d 100644 --- a/extensions/libarchive/ReadArchiveStream.cpp +++ b/extensions/libarchive/ReadArchiveStream.cpp @@ -65,7 +65,7 @@ std::optional<EntryInfo> ReadArchiveStreamImpl::nextEntry() { return EntryInfo{archive_entry_pathname(entry), entry_size_.value()}; } -size_t ReadArchiveStreamImpl::read(const gsl::span<std::byte> out_buffer) { +size_t ReadArchiveStreamImpl::read(const std::span<std::byte> out_buffer) { if (!arch_ || !entry_size_) { return STREAM_ERROR; } diff --git a/extensions/libarchive/ReadArchiveStream.h b/extensions/libarchive/ReadArchiveStream.h index 566a4c862..155463c44 100644 --- a/extensions/libarchive/ReadArchiveStream.h +++ b/extensions/libarchive/ReadArchiveStream.h @@ -42,7 +42,7 @@ class ReadArchiveStreamImpl : public ReadArchiveStream { public: explicit BufferedReader(std::shared_ptr<InputStream> input) : input_(std::move(input)) {} - std::optional<gsl::span<const std::byte>> readChunk() { + std::optional<std::span<const std::byte>> readChunk() { size_t result = input_->read(buffer_); if (io::isError(result)) { return std::nullopt; @@ -66,7 +66,7 @@ class ReadArchiveStreamImpl : public ReadArchiveStream { using InputStream::read; - size_t read(gsl::span<std::byte> out_buffer) override; + size_t read(std::span<std::byte> out_buffer) override; private: static la_ssize_t archive_read(struct archive* archive, void *context, const void **buff) { diff --git a/extensions/librdkafka/rdkafka_utils.cpp b/extensions/librdkafka/rdkafka_utils.cpp index 3532ab566..58b68ce58 100644 --- a/extensions/librdkafka/rdkafka_utils.cpp +++ b/extensions/librdkafka/rdkafka_utils.cpp @@ -22,11 +22,7 @@ #include "Exception.h" #include "utils/StringUtils.h" -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace utils { +namespace org::apache::nifi::minifi::utils { void setKafkaConfigurationField(rd_kafka_conf_t& configuration, const std::string& field_name, const std::string& value) { static std::array<char, 512U> errstr{}; @@ -55,7 +51,7 @@ std::string get_human_readable_kafka_message_timestamp(const rd_kafka_message_t& } else if (tstype == RD_KAFKA_TIMESTAMP_LOG_APPEND_TIME) { tsname = "log append time"; } - const int64_t seconds_since_timestamp = timestamp == -1 ? 0 : static_cast<int64_t>(time(NULL)) - static_cast<int64_t>(timestamp / 1000); + const int64_t seconds_since_timestamp = timestamp == -1 ? 0 : static_cast<int64_t>(time(nullptr)) - static_cast<int64_t>(timestamp / 1000); return {"[Timestamp](" + std::string(tsname) + " " + std::to_string(timestamp) + " (" + std::to_string(seconds_since_timestamp) + " s ago)"}; } @@ -64,7 +60,7 @@ std::string get_human_readable_kafka_message_headers(const rd_kafka_message_t& r const rd_kafka_resp_err_t get_header_response = rd_kafka_message_headers(&rkmessage, &hdrs); if (RD_KAFKA_RESP_ERR_NO_ERROR == get_header_response) { std::vector<std::string> header_list; - kafka_headers_for_each(*hdrs, [&] (const std::string& key, gsl::span<const char> val) { header_list.emplace_back(key + ": " + std::string{ val.data(), val.size() }); }); + kafka_headers_for_each(*hdrs, [&] (const std::string& key, std::span<const char> val) { header_list.emplace_back(key + ": " + std::string{ val.data(), val.size() }); }); return StringUtils::join(", ", header_list); } if (RD_KAFKA_RESP_ERR__NOENT == get_header_response) { @@ -114,8 +110,4 @@ std::optional<std::string> get_encoded_message_key(const rd_kafka_message_t& mes return get_encoded_string({reinterpret_cast<const char*>(message.key), message.key_len}, encoding); } -} // namespace utils -} // namespace minifi -} // namespace nifi -} // namespace apache -} // namespace org +} // namespace org::apache::nifi::minifi::utils diff --git a/extensions/librdkafka/rdkafka_utils.h b/extensions/librdkafka/rdkafka_utils.h index 7c2e1bfb6..8f89605ab 100644 --- a/extensions/librdkafka/rdkafka_utils.h +++ b/extensions/librdkafka/rdkafka_utils.h @@ -89,7 +89,7 @@ void kafka_headers_for_each(const rd_kafka_headers_t& headers, T key_value_handl const void *value; std::size_t size; for (std::size_t i = 0; RD_KAFKA_RESP_ERR_NO_ERROR == rd_kafka_header_get_all(&headers, i, &key, &value, &size); ++i) { - key_value_handle(std::string(key), gsl::span<const char>(static_cast<const char*>(value), size)); + key_value_handle(std::string(key), std::span<const char>(static_cast<const char*>(value), size)); } } diff --git a/extensions/lua/LuaInputStream.cpp b/extensions/lua/LuaInputStream.cpp index 050a7f355..9a6a9cb20 100644 --- a/extensions/lua/LuaInputStream.cpp +++ b/extensions/lua/LuaInputStream.cpp @@ -48,7 +48,7 @@ std::string LuaInputStream::read(size_t len) { // 0 <= n < s.size()." // // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf - const auto read = stream_->read(gsl::make_span(buffer).as_span<std::byte>()); + const auto read = stream_->read(as_writable_bytes(std::span(buffer))); if (!io::isError(read) && read != len) { buffer.resize(read); } diff --git a/extensions/opencv/MotionDetector.cpp b/extensions/opencv/MotionDetector.cpp index 75c7cf5be..ee46840d8 100644 --- a/extensions/opencv/MotionDetector.cpp +++ b/extensions/opencv/MotionDetector.cpp @@ -155,7 +155,7 @@ void MotionDetector::onTrigger(const std::shared_ptr<core::ProcessContext> &cont session->read(flow_file, [&frame](const std::shared_ptr<io::InputStream>& input_stream) -> int64_t { std::vector<uchar> image_buf; image_buf.resize(input_stream->size()); - const auto ret = input_stream->read(gsl::make_span(image_buf).as_span<std::byte>()); + const auto ret = input_stream->read(as_writable_bytes(std::span(image_buf))); if (io::isError(ret) || ret != input_stream->size()) { throw std::runtime_error("ImageReadCallback failed to fully read flow file input stream"); } diff --git a/extensions/rocksdb-repos/RocksDbRepository.cpp b/extensions/rocksdb-repos/RocksDbRepository.cpp index 02a735395..7fda56f8e 100644 --- a/extensions/rocksdb-repos/RocksDbRepository.cpp +++ b/extensions/rocksdb-repos/RocksDbRepository.cpp @@ -15,6 +15,7 @@ * limitations under the License. */ #include "RocksDbRepository.h" +#include "utils/span.h" using namespace std::literals::chrono_literals; @@ -71,7 +72,7 @@ bool RocksDbRepository::MultiPut(const std::vector<std::pair<std::string, std::u } auto batch = opendb->createWriteBatch(); for (const auto &item : data) { - const auto buf = item.second->getBuffer().as_span<const char>(); + const auto buf = utils::as_span<const char>(item.second->getBuffer()); rocksdb::Slice value(buf.data(), buf.size()); if (!batch.Put(item.first, value).ok()) { logger_->log_error("Failed to add item to batch operation"); diff --git a/extensions/rocksdb-repos/RocksDbStream.cpp b/extensions/rocksdb-repos/RocksDbStream.cpp index fdfe7e0bb..856132535 100644 --- a/extensions/rocksdb-repos/RocksDbStream.cpp +++ b/extensions/rocksdb-repos/RocksDbStream.cpp @@ -25,11 +25,8 @@ #include <string> #include <Exception.h> #include "io/validation.h" -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace io { + +namespace org::apache::nifi::minifi::io { RocksDbStream::RocksDbStream(std::string path, gsl::not_null<minifi::internal::RocksDatabase*> db, bool write_enable, minifi::internal::WriteBatch* batch) : BaseStream(), @@ -78,7 +75,7 @@ size_t RocksDbStream::write(const uint8_t *value, size_t size) { } } -size_t RocksDbStream::read(gsl::span<std::byte> buf) { +size_t RocksDbStream::read(std::span<std::byte> buf) { // The check have to be in this order for RocksDBStreamTest "Read zero bytes" to succeed if (!exists_) return STREAM_ERROR; if (buf.empty()) return 0; @@ -90,9 +87,4 @@ size_t RocksDbStream::read(gsl::span<std::byte> buf) { return amtToRead; } -} /* namespace io */ -} /* namespace minifi */ -} /* namespace nifi */ -} /* namespace apache */ -} /* namespace org */ - +} // namespace org::apache::nifi::minifi::io diff --git a/extensions/rocksdb-repos/RocksDbStream.h b/extensions/rocksdb-repos/RocksDbStream.h index d75493d1e..e8fbe7ff3 100644 --- a/extensions/rocksdb-repos/RocksDbStream.h +++ b/extensions/rocksdb-repos/RocksDbStream.h @@ -71,7 +71,7 @@ class RocksDbStream : public io::BaseStream { * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override; + size_t read(std::span<std::byte> buf) override; /** * writes value to stream diff --git a/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp b/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp index f1a85ac82..ffeead877 100644 --- a/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp +++ b/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp @@ -88,7 +88,7 @@ std::shared_ptr<rocksdb::Env> createEncryptingEnv(const utils::crypto::Encryptio rocksdb::Status AES256BlockCipher::Encrypt(char *data) { try { - cipher_impl_.encrypt({reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE}); + cipher_impl_.encrypt(std::span<unsigned char, Aes256EcbCipher::BLOCK_SIZE>{reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE}); return rocksdb::Status::OK(); } catch (const utils::crypto::CipherError& error) { logger_->log_error("Error while encrypting in database '%s': %s", database_, error.what()); @@ -98,7 +98,7 @@ rocksdb::Status AES256BlockCipher::Encrypt(char *data) { rocksdb::Status AES256BlockCipher::Decrypt(char *data) { try { - cipher_impl_.decrypt({reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE}); + cipher_impl_.decrypt(std::span<unsigned char, Aes256EcbCipher::BLOCK_SIZE>{reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE}); return rocksdb::Status::OK(); } catch (const utils::crypto::CipherError& error) { logger_->log_error("Error while decrypting in database '%s': %s", database_, error.what()); diff --git a/extensions/standard-processors/processors/ExecuteProcess.cpp b/extensions/standard-processors/processors/ExecuteProcess.cpp index a643f9be9..942f3ff1c 100644 --- a/extensions/standard-processors/processors/ExecuteProcess.cpp +++ b/extensions/standard-processors/processors/ExecuteProcess.cpp @@ -162,7 +162,7 @@ void ExecuteProcess::readOutputInBatches(core::ProcessSession& session) { } } -bool ExecuteProcess::writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) const { +bool ExecuteProcess::writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) const { if (!flow_file) { flow_file = session.create(); if (!flow_file) { diff --git a/extensions/standard-processors/processors/ExecuteProcess.h b/extensions/standard-processors/processors/ExecuteProcess.h index 38c0b06d6..2ca16b893 100644 --- a/extensions/standard-processors/processors/ExecuteProcess.h +++ b/extensions/standard-processors/processors/ExecuteProcess.h @@ -95,7 +95,7 @@ class ExecuteProcess : public core::Processor { void collectChildProcessOutput(core::ProcessSession& session); void readOutputInBatches(core::ProcessSession& session); void readOutput(core::ProcessSession& session); - bool writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) const; + bool writeToFlowFile(core::ProcessSession& session, std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) const; std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExecuteProcess>::getLogger(uuid_); std::string command_; diff --git a/extensions/standard-processors/processors/ExtractText.cpp b/extensions/standard-processors/processors/ExtractText.cpp index bb5d8a46b..f21748fe6 100644 --- a/extensions/standard-processors/processors/ExtractText.cpp +++ b/extensions/standard-processors/processors/ExtractText.cpp @@ -117,7 +117,7 @@ int64_t ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStr while (read_size < size_limit) { // Don't read more than config limit or the size of the buffer const auto length = std::min(size_limit - read_size, buffer.size()); - const auto ret = stream->read(gsl::make_span(buffer).subspan(0, length)); + const auto ret = stream->read(std::span(buffer).subspan(0, length)); if (io::isError(ret)) { return -1; // Stream error diff --git a/extensions/standard-processors/processors/PutTCP.cpp b/extensions/standard-processors/processors/PutTCP.cpp index c5c2d7717..19144d8fb 100644 --- a/extensions/standard-processors/processors/PutTCP.cpp +++ b/extensions/standard-processors/processors/PutTCP.cpp @@ -167,7 +167,8 @@ void PutTCP::onSchedule(core::ProcessContext* const context, core::ProcessSessio } } - delimiter_ = utils::span_to<std::vector>(gsl::make_span(context->getProperty(OutgoingMessageDelimiter).value_or(std::string{})).as_span<const std::byte>()); + const auto delimiter_str = context->getProperty(OutgoingMessageDelimiter).value_or(std::string{}); + delimiter_ = utils::span_to<std::vector>(as_bytes(std::span(delimiter_str))); if (auto max_size_of_socket_send_buffer = context->getProperty<core::DataSizeValue>(MaxSizeOfSocketSendBuffer)) max_size_of_socket_send_buffer_ = max_size_of_socket_send_buffer->getValue(); @@ -301,7 +302,7 @@ asio::awaitable<std::error_code> ConnectionHandler<SocketType>::send(const std:: std::vector<std::byte> data_chunk; data_chunk.resize(chunk_size); - gsl::span<std::byte> buffer{data_chunk}; + std::span<std::byte> buffer{data_chunk}; while (stream_to_send->tell() < stream_to_send->size()) { size_t num_read = stream_to_send->read(buffer); if (io::isError(num_read)) diff --git a/extensions/systemd/ConsumeJournald.cpp b/extensions/systemd/ConsumeJournald.cpp index b63ac1d2f..a617b2383 100644 --- a/extensions/systemd/ConsumeJournald.cpp +++ b/extensions/systemd/ConsumeJournald.cpp @@ -177,7 +177,7 @@ void ConsumeJournald::onTrigger(core::ProcessContext* const context, core::Proce state_manager_->set({{"cursor", std::move(cursor_and_messages.first)}}); } -std::optional<gsl::span<const char>> ConsumeJournald::enumerateJournalEntry(libwrapper::Journal& journal) { +std::optional<std::span<const char>> ConsumeJournald::enumerateJournalEntry(libwrapper::Journal& journal) { const void* data_ptr{}; size_t data_length{}; const auto status_code = journal.enumerateData(&data_ptr, &data_length); @@ -190,7 +190,7 @@ std::optional<gsl::span<const char>> ConsumeJournald::enumerateJournalEntry(libw } std::optional<ConsumeJournald::journal_field> ConsumeJournald::getNextField(libwrapper::Journal& journal) { - return enumerateJournalEntry(journal) | utils::map([](gsl::span<const char> field) { + return enumerateJournalEntry(journal) | utils::map([](std::span<const char> field) { const auto eq_pos = std::find(std::begin(field), std::end(field), '='); gsl_Ensures(eq_pos != std::end(field) && "field string must contain an equals sign"); const auto eq_idx = gsl::narrow<size_t>(eq_pos - std::begin(field)); diff --git a/extensions/systemd/ConsumeJournald.h b/extensions/systemd/ConsumeJournald.h index bf037e7dc..482d6c6bd 100644 --- a/extensions/systemd/ConsumeJournald.h +++ b/extensions/systemd/ConsumeJournald.h @@ -104,7 +104,7 @@ class ConsumeJournald final : public core::Processor { std::chrono::system_clock::time_point timestamp; }; - static std::optional<gsl::span<const char>> enumerateJournalEntry(libwrapper::Journal&); + static std::optional<std::span<const char>> enumerateJournalEntry(libwrapper::Journal&); static std::optional<journal_field> getNextField(libwrapper::Journal&); std::future<std::pair<std::string, std::vector<journal_message>>> getCursorAndMessageBatch(); std::string formatSyslogMessage(const journal_message&) const; diff --git a/libminifi/include/FlowFileRecord.h b/libminifi/include/FlowFileRecord.h index 141f3b4ba..928407e45 100644 --- a/libminifi/include/FlowFileRecord.h +++ b/libminifi/include/FlowFileRecord.h @@ -58,7 +58,7 @@ class FlowFileRecord : public core::FlowFile { //! Serialize and Persistent to the repository bool Persist(const std::shared_ptr<core::Repository>& flowRepository); - static std::shared_ptr<FlowFileRecord> DeSerialize(gsl::span<const std::byte> buffer, const std::shared_ptr<core::ContentRepository> &content_repo, utils::Identifier &container) { + static std::shared_ptr<FlowFileRecord> DeSerialize(std::span<const std::byte> buffer, const std::shared_ptr<core::ContentRepository> &content_repo, utils::Identifier &container) { io::BufferStream inStream{buffer}; return DeSerialize(inStream, content_repo, container); } diff --git a/libminifi/include/c2/C2Payload.h b/libminifi/include/c2/C2Payload.h index de8790a3a..decf9af46 100644 --- a/libminifi/include/c2/C2Payload.h +++ b/libminifi/include/c2/C2Payload.h @@ -29,6 +29,7 @@ #include "core/state/UpdateController.h" #include "utils/Enum.h" #include "utils/gsl.h" +#include "utils/span.h" namespace org { namespace apache { @@ -200,13 +201,16 @@ class C2Payload : public state::Update { */ void setRawData(const std::string&); void setRawData(const std::vector<char>&); - void setRawData(gsl::span<const std::byte>); + void setRawData(std::span<const std::byte>); /** * Returns raw data. */ [[nodiscard]] std::vector<std::byte> getRawData() const noexcept { return raw_data_; } - [[nodiscard]] std::string getRawDataAsString() const { return utils::span_to<std::string>(gsl::make_span(getRawData()).as_span<const char>()); } + [[nodiscard]] std::string getRawDataAsString() const { + const auto raw_data = getRawData(); + return utils::span_to<std::string>(utils::as_span<const char>(std::span(raw_data))); + } [[nodiscard]] std::vector<std::byte> moveRawData() && {return std::move(raw_data_);} /** diff --git a/libminifi/include/c2/protocols/RESTProtocol.h b/libminifi/include/c2/protocols/RESTProtocol.h index ebbeb9e4e..36c741278 100644 --- a/libminifi/include/c2/protocols/RESTProtocol.h +++ b/libminifi/include/c2/protocols/RESTProtocol.h @@ -43,7 +43,7 @@ class RESTProtocol : public HeartbeatJsonSerializer { protected: void initialize(core::controller::ControllerServiceProvider* controller, const std::shared_ptr<Configure> &configure); void serializeNestedPayload(rapidjson::Value& target, const C2Payload& payload, rapidjson::Document::AllocatorType& alloc) override; - static C2Payload parseJsonResponse(const C2Payload &payload, gsl::span<const std::byte> response); + static C2Payload parseJsonResponse(const C2Payload &payload, std::span<const std::byte> response); private: bool containsPayload(const C2Payload &o); diff --git a/libminifi/include/core/ConfigurableComponent.h b/libminifi/include/core/ConfigurableComponent.h index 895b6f49b..f92ac469c 100644 --- a/libminifi/include/core/ConfigurableComponent.h +++ b/libminifi/include/core/ConfigurableComponent.h @@ -104,7 +104,7 @@ class ConfigurableComponent { */ bool setProperty(const Property& prop, PropertyValue &value); - void setSupportedProperties(gsl::span<const core::Property> properties); + void setSupportedProperties(std::span<const core::Property> properties); /** * Gets whether or not this processor supports dynamic properties. diff --git a/libminifi/include/core/Connectable.h b/libminifi/include/core/Connectable.h index f4a3e305a..aa91f2893 100644 --- a/libminifi/include/core/Connectable.h +++ b/libminifi/include/core/Connectable.h @@ -54,13 +54,13 @@ class Connectable : public CoreComponent { Connectable& operator=(const Connectable &other) = delete; Connectable& operator=(Connectable&& other) = delete; - void setSupportedRelationships(gsl::span<const core::Relationship> relationships); + void setSupportedRelationships(std::span<const core::Relationship> relationships); bool isSupportedRelationship(const Relationship &relationship); std::vector<Relationship> getSupportedRelationships() const; - void setAutoTerminatedRelationships(gsl::span<const core::Relationship> relationships); + void setAutoTerminatedRelationships(std::span<const core::Relationship> relationships); bool isAutoTerminated(const Relationship &relationship); diff --git a/libminifi/include/core/ProcessSession.h b/libminifi/include/core/ProcessSession.h index 49d8efee7..2ba5f9cda 100644 --- a/libminifi/include/core/ProcessSession.h +++ b/libminifi/include/core/ProcessSession.h @@ -103,13 +103,13 @@ class ProcessSession : public ReferenceContainer { // Read and write the flow file at the same time (eg. for processing it line by line) int64_t readWrite(const std::shared_ptr<core::FlowFile> &flow, const io::InputOutputStreamCallback& callback); // Replace content with buffer - void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer); - void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const std::byte> buffer); + void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer); + void writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const std::byte> buffer); // Execute the given write/append callback against the content void append(const std::shared_ptr<core::FlowFile> &flow, const io::OutputStreamCallback& callback); // Append buffer to content - void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, gsl::span<const char> buffer); - void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, gsl::span<const std::byte> buffer); + void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, std::span<const char> buffer); + void appendBuffer(const std::shared_ptr<core::FlowFile>& flow, std::span<const std::byte> buffer); // Penalize the flow void penalize(const std::shared_ptr<core::FlowFile> &flow); diff --git a/libminifi/include/core/flow/Node.h b/libminifi/include/core/flow/Node.h index 1bd3ad7e2..12a9314b1 100644 --- a/libminifi/include/core/flow/Node.h +++ b/libminifi/include/core/flow/Node.h @@ -166,7 +166,7 @@ class Node { } // considers @keys to be a set of viable access paths, the first viable is returned - Node operator[](gsl::span<const std::string> keys) const { + Node operator[](std::span<const std::string> keys) const { for (auto& key : keys) { if (Node result = (*this)[key]) { return result; diff --git a/libminifi/include/core/repository/AtomicRepoEntries.h b/libminifi/include/core/repository/AtomicRepoEntries.h index 1c2437dd8..b81314c91 100644 --- a/libminifi/include/core/repository/AtomicRepoEntries.h +++ b/libminifi/include/core/repository/AtomicRepoEntries.h @@ -15,9 +15,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef LIBMINIFI_INCLUDE_CORE_REPOSITORY_ATOMICREPOENTRIES_H_ -#define LIBMINIFI_INCLUDE_CORE_REPOSITORY_ATOMICREPOENTRIES_H_ +#pragma once + +#include <span> #include <atomic> #include <chrono> #include <cstddef> @@ -115,7 +116,7 @@ noexcept : key_(std::move(other.key_)), [[nodiscard]] size_t size() const noexcept { return buffer_.size(); } - [[nodiscard]] gsl::span<const std::byte> getBuffer() const { + [[nodiscard]] std::span<const std::byte> getBuffer() const { return buffer_; } @@ -131,7 +132,7 @@ noexcept : key_(std::move(other.key_)), * Appends data to the end of buffer. * @param data data to add to buffer_ */ - void append(gsl::span<const std::byte> data) { + void append(std::span<const std::byte> data) { buffer_.insert(buffer_.end(), std::begin(data), std::end(data)); } @@ -390,7 +391,7 @@ class AtomicEntry { * Appends buffer onto this atomic entry if key matches * the current RepoValue's key. */ - bool insert(const T key, gsl::span<const std::byte> buffer) { + bool insert(const T key, std::span<const std::byte> buffer) { try_lock(); if (!has_value_) { @@ -453,5 +454,3 @@ class AtomicEntry { }; } // namespace org::apache::nifi::minifi::core::repository - -#endif // LIBMINIFI_INCLUDE_CORE_REPOSITORY_ATOMICREPOENTRIES_H_ diff --git a/libminifi/include/io/AtomicEntryStream.h b/libminifi/include/io/AtomicEntryStream.h index dc3dc0581..ecb5a2b26 100644 --- a/libminifi/include/io/AtomicEntryStream.h +++ b/libminifi/include/io/AtomicEntryStream.h @@ -80,7 +80,7 @@ class AtomicEntryStream : public BaseStream { * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override; + size_t read(std::span<std::byte> buf) override; /** * writes value to stream @@ -132,7 +132,7 @@ size_t AtomicEntryStream<T>::write(const uint8_t *value, size_t size) { } template<typename T> -size_t AtomicEntryStream<T>::read(gsl::span<std::byte> buf) { +size_t AtomicEntryStream<T>::read(std::span<std::byte> buf) { if (buf.empty()) { return 0; } diff --git a/libminifi/include/io/BufferStream.h b/libminifi/include/io/BufferStream.h index 987cdcaf9..eb00c5dc8 100644 --- a/libminifi/include/io/BufferStream.h +++ b/libminifi/include/io/BufferStream.h @@ -35,7 +35,7 @@ class BufferStream : public BaseStream { public: BufferStream() = default; - explicit BufferStream(gsl::span<const std::byte> buf) { + explicit BufferStream(std::span<const std::byte> buf) { write(buf); } @@ -56,7 +56,7 @@ class BufferStream : public BaseStream { size_t write(const uint8_t* value, size_t size) final; - size_t read(gsl::span<std::byte> buffer) override; + size_t read(std::span<std::byte> buffer) override; int initialize() override { buffer_.clear(); @@ -78,7 +78,7 @@ class BufferStream : public BaseStream { * Returns the underlying buffer * @return vector's array **/ - [[nodiscard]] gsl::span<const std::byte> getBuffer() const override { + [[nodiscard]] std::span<const std::byte> getBuffer() const override { return buffer_; } diff --git a/libminifi/include/io/CRCStream.h b/libminifi/include/io/CRCStream.h index 606f69275..7a0a41730 100644 --- a/libminifi/include/io/CRCStream.h +++ b/libminifi/include/io/CRCStream.h @@ -85,7 +85,7 @@ class InputCRCStream : public virtual CRCStreamBase<StreamType>, public InputStr public: using InputStream::read; - size_t read(gsl::span<std::byte> buf) override { + size_t read(std::span<std::byte> buf) override { const auto ret = child_stream_->read(buf); if (ret > 0 && !io::isError(ret)) { crc_ = crc32(crc_, reinterpret_cast<const unsigned char*>(buf.data()), gsl::narrow<uInt>(ret)); diff --git a/libminifi/include/io/ClientSocket.h b/libminifi/include/io/ClientSocket.h index 5838159e1..4c8e8b528 100644 --- a/libminifi/include/io/ClientSocket.h +++ b/libminifi/include/io/ClientSocket.h @@ -137,7 +137,7 @@ class Socket : public BaseStream { * @param buflen * @param retrieve_all_bytes determines if we should read all bytes before returning */ - size_t read(gsl::span<std::byte> buf) override { + size_t read(std::span<std::byte> buf) override { return read(buf, true); } @@ -147,7 +147,7 @@ class Socket : public BaseStream { * @param buflen * @param retrieve_all_bytes determines if we should read all bytes before returning */ - virtual size_t read(gsl::span<std::byte> buf, bool retrieve_all_bytes); + virtual size_t read(std::span<std::byte> buf, bool retrieve_all_bytes); protected: /** diff --git a/libminifi/include/io/DescriptorStream.h b/libminifi/include/io/DescriptorStream.h index e0e9bb224..cc12b0e2e 100644 --- a/libminifi/include/io/DescriptorStream.h +++ b/libminifi/include/io/DescriptorStream.h @@ -62,7 +62,7 @@ class DescriptorStream : public io::BaseStream { * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override; + size_t read(std::span<std::byte> buf) override; /** * writes value to stream diff --git a/libminifi/include/io/FileStream.h b/libminifi/include/io/FileStream.h index e30ee0836..b2cf40e14 100644 --- a/libminifi/include/io/FileStream.h +++ b/libminifi/include/io/FileStream.h @@ -74,7 +74,7 @@ class FileStream : public io::BaseStream { * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override; + size_t read(std::span<std::byte> buf) override; /** * writes value to stream diff --git a/libminifi/include/io/InputStream.h b/libminifi/include/io/InputStream.h index 2a9e89d05..f18c5655e 100644 --- a/libminifi/include/io/InputStream.h +++ b/libminifi/include/io/InputStream.h @@ -39,7 +39,7 @@ class InputStream : public virtual Stream { * @param len length to read * @return resulting read size or STREAM_ERROR on error or static_cast<size_t>(-2) on EAGAIN **/ - virtual size_t read(gsl::span<std::byte> out_buffer) = 0; + virtual size_t read(std::span<std::byte> out_buffer) = 0; /** * Read string from stream. Use isError (Stream.h) to check for errors. diff --git a/libminifi/include/io/OutputStream.h b/libminifi/include/io/OutputStream.h index 24d34e1b8..c180b3684 100644 --- a/libminifi/include/io/OutputStream.h +++ b/libminifi/include/io/OutputStream.h @@ -47,7 +47,7 @@ class OutputStream : public virtual Stream { **/ virtual size_t write(const uint8_t *value, size_t len) = 0; - size_t write(const gsl::span<const std::byte> buffer) { + size_t write(const std::span<const std::byte> buffer) { return write(reinterpret_cast<const uint8_t*>(buffer.data()), buffer.size()); } diff --git a/libminifi/include/io/Stream.h b/libminifi/include/io/Stream.h index 31547a3ea..048a475ca 100644 --- a/libminifi/include/io/Stream.h +++ b/libminifi/include/io/Stream.h @@ -18,6 +18,7 @@ #pragma once +#include <span> #include "utils/gsl.h" namespace org::apache::nifi::minifi::io { @@ -48,7 +49,7 @@ class Stream { return 1; } - [[nodiscard]] virtual gsl::span<const std::byte> getBuffer() const { + [[nodiscard]] virtual std::span<const std::byte> getBuffer() const { throw std::runtime_error("Not a buffered stream"); } diff --git a/libminifi/include/io/StreamSlice.h b/libminifi/include/io/StreamSlice.h index cb6976290..dbce76a8f 100644 --- a/libminifi/include/io/StreamSlice.h +++ b/libminifi/include/io/StreamSlice.h @@ -35,7 +35,7 @@ class StreamSlice : public InputStream { // from InputStream size_t size() const override { return slice_size_; } - size_t read(gsl::span<std::byte> out_buffer) override; + size_t read(std::span<std::byte> out_buffer) override; // from Stream void close() override { stream_->close(); } @@ -43,7 +43,7 @@ class StreamSlice : public InputStream { void seek(size_t offset) override; [[nodiscard]] size_t tell() const override; - [[nodiscard]] gsl::span<const std::byte> getBuffer() const override; + [[nodiscard]] std::span<const std::byte> getBuffer() const override; private: std::shared_ptr<io::InputStream> stream_; diff --git a/libminifi/include/io/tls/SecureDescriptorStream.h b/libminifi/include/io/tls/SecureDescriptorStream.h index d2a2416e1..66177d83b 100644 --- a/libminifi/include/io/tls/SecureDescriptorStream.h +++ b/libminifi/include/io/tls/SecureDescriptorStream.h @@ -71,7 +71,7 @@ class SecureDescriptorStream : public io::BaseStream { * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override; + size_t read(std::span<std::byte> buf) override; /** * writes value to stream diff --git a/libminifi/include/io/tls/TLSSocket.h b/libminifi/include/io/tls/TLSSocket.h index 2ed107b7f..9f648a789 100644 --- a/libminifi/include/io/tls/TLSSocket.h +++ b/libminifi/include/io/tls/TLSSocket.h @@ -131,14 +131,14 @@ class TLSSocket : public Socket { using Socket::read; using Socket::write; - size_t read(gsl::span<std::byte> buf, bool retrieve_all_bytes) override; + size_t read(std::span<std::byte> buf, bool retrieve_all_bytes) override; /** * Reads data and places it into buf * @param buf buffer in which we extract data * @param buflen */ - size_t read(gsl::span<std::byte> buf) override; + size_t read(std::span<std::byte> buf) override; /** * Write value to the stream using uint8_t ptr diff --git a/libminifi/include/sitetosite/Peer.h b/libminifi/include/sitetosite/Peer.h index 543dd52f2..860bd590d 100644 --- a/libminifi/include/sitetosite/Peer.h +++ b/libminifi/include/sitetosite/Peer.h @@ -289,7 +289,7 @@ class SiteToSitePeer : public org::apache::nifi::minifi::io::BaseStream { return stream_->write(data, len); } - size_t read(gsl::span<std::byte> data) override { + size_t read(std::span<std::byte> data) override { return stream_->read(data); } diff --git a/libminifi/include/utils/ByteArrayCallback.h b/libminifi/include/utils/ByteArrayCallback.h index 9d1fb4c85..12daf1526 100644 --- a/libminifi/include/utils/ByteArrayCallback.h +++ b/libminifi/include/utils/ByteArrayCallback.h @@ -51,7 +51,7 @@ class ByteInputCallback { virtual void seek(size_t) { } virtual void write(std::string content) { - vec = utils::span_to<std::vector>(gsl::make_span(content).as_span<std::byte>()); + vec = utils::span_to<std::vector>(as_bytes(std::span(content))); } void setBuffer(std::vector<std::byte> data) { diff --git a/libminifi/include/utils/JsonCallback.h b/libminifi/include/utils/JsonCallback.h index 4c37afce0..c455e6c34 100644 --- a/libminifi/include/utils/JsonCallback.h +++ b/libminifi/include/utils/JsonCallback.h @@ -39,7 +39,7 @@ class JsonInputCallback { int64_t operator()(const std::shared_ptr<io::InputStream>& stream) { std::string content; content.resize(stream->size()); - const auto read_ret = stream->read(gsl::make_span(content).as_span<std::byte>()); + const auto read_ret = stream->read(as_writable_bytes(std::span(content))); if (io::isError(read_ret)) { return -1; } diff --git a/libminifi/include/utils/StringUtils.h b/libminifi/include/utils/StringUtils.h index 2e6f7285c..9effff8ea 100644 --- a/libminifi/include/utils/StringUtils.h +++ b/libminifi/include/utils/StringUtils.h @@ -34,6 +34,7 @@ #endif #include "utils/FailurePolicy.h" #include "utils/gsl.h" +#include "utils/span.h" #include "utils/meta/detected.h" #include "range/v3/view/transform.hpp" #include "range/v3/range/conversion.hpp" @@ -361,7 +362,8 @@ class StringUtils { */ static std::vector<std::byte> from_hex(std::string_view hex); static std::string from_hex(std::string_view hex, as_string_tag_t) { - return utils::span_to<std::string>(gsl::make_span(from_hex(hex)).as_span<const char>()); + const auto decoded = from_hex(hex); + return utils::span_to<std::string>(utils::as_span<const char>(std::span(decoded))); } @@ -373,7 +375,7 @@ class StringUtils { * @param uppercase whether the hexencoded string should be upper case * @return the size of hexencoded bytes */ - static size_t to_hex(char* hex, gsl::span<const std::byte> data_to_be_transformed, bool uppercase); + static size_t to_hex(char* hex, std::span<const std::byte> data_to_be_transformed, bool uppercase); /** * Creates a hexencoded string from data @@ -382,7 +384,7 @@ class StringUtils { * @param uppercase whether the hexencoded string should be upper case * @return the hexencoded string */ - static std::string to_hex(gsl::span<const std::byte> data_to_be_transformed, bool uppercase = false); + static std::string to_hex(std::span<const std::byte> data_to_be_transformed, bool uppercase = false); /** * Hexencodes a string @@ -413,7 +415,8 @@ class StringUtils { */ static std::vector<std::byte> from_base64(std::string_view base64); static std::string from_base64(std::string_view base64, as_string_tag_t) { - return utils::span_to<std::string>(gsl::make_span(from_base64(base64)).as_span<const char>()); + const auto decoded = from_base64(base64); + return utils::span_to<std::string>(utils::as_span<const char>(std::span(decoded))); } /** @@ -424,7 +427,7 @@ class StringUtils { * @param padded if true, padding is added to the Base64 encoded string * @return the size of Base64 encoded bytes */ - static size_t to_base64(char* base64, gsl::span<const std::byte> raw_data, bool url, bool padded); + static size_t to_base64(char* base64, std::span<const std::byte> raw_data, bool url, bool padded); /** * Creates a Base64 encoded string from data @@ -433,7 +436,7 @@ class StringUtils { * @param padded if true, padding is added to the Base64 encoded string * @return the Base64 encoded string */ - static std::string to_base64(gsl::span<const std::byte> raw_data, bool url = false, bool padded = true); + static std::string to_base64(std::span<const std::byte> raw_data, bool url = false, bool padded = true); /** * Base64 encodes a string @@ -478,7 +481,7 @@ class StringUtils { return str; } - static std::string escapeUnprintableBytes(gsl::span<const std::byte> data); + static std::string escapeUnprintableBytes(std::span<const std::byte> data); /** * Returns whether sequence of patterns are found in given string in their incoming order diff --git a/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h b/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h index ebd201d2c..688cb2863 100644 --- a/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h +++ b/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h @@ -50,8 +50,8 @@ class Aes256EcbCipher { static constexpr size_t KEY_SIZE = 32; explicit Aes256EcbCipher(Bytes encryption_key); - void encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const; - void decrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const; + void encrypt(std::span<unsigned char, BLOCK_SIZE> data) const; + void decrypt(std::span<unsigned char, BLOCK_SIZE> data) const; static Bytes generateKey(); diff --git a/libminifi/include/utils/gsl.h b/libminifi/include/utils/gsl.h index efbf47645..9954eb357 100644 --- a/libminifi/include/utils/gsl.h +++ b/libminifi/include/utils/gsl.h @@ -26,23 +26,6 @@ namespace org::apache::nifi::minifi { namespace gsl = ::gsl_lite; namespace utils { -namespace detail { -template<typename T> -using remove_cvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type; -} // namespace detail - -template<typename Container, typename T> -Container span_to(gsl::span<T> span) { - static_assert(std::is_constructible<Container, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value, - "The destination container must have an iterator (pointer) range constructor"); - return Container(std::begin(span), std::end(span)); -} -template<template<typename...> class Container, typename T> -Container<detail::remove_cvref_t<T>> span_to(gsl::span<T> span) { - static_assert(std::is_constructible<Container<detail::remove_cvref_t<T>>, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value, - "The destination container must have an iterator (pointer) range constructor"); - return span_to<Container<detail::remove_cvref_t<T>>>(span); -} template<typename T> struct is_not_null : std::false_type {}; @@ -50,6 +33,7 @@ template<typename T> struct is_not_null<gsl::not_null<T>> : std::true_type {}; template<typename T> inline constexpr bool is_not_null_v = is_not_null<T>::value; + } // namespace utils } // namespace org::apache::nifi::minifi diff --git a/libminifi/include/utils/gsl.h b/libminifi/include/utils/span.h similarity index 59% copy from libminifi/include/utils/gsl.h copy to libminifi/include/utils/span.h index efbf47645..ef2b4932c 100644 --- a/libminifi/include/utils/gsl.h +++ b/libminifi/include/utils/span.h @@ -17,39 +17,32 @@ #pragma once -#include <type_traits> +#include <span> -#include <gsl-lite/gsl-lite.hpp> +namespace org::apache::nifi::minifi::utils { -namespace org::apache::nifi::minifi { - -namespace gsl = ::gsl_lite; - -namespace utils { namespace detail { template<typename T> using remove_cvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type; } // namespace detail template<typename Container, typename T> -Container span_to(gsl::span<T> span) { - static_assert(std::is_constructible<Container, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value, - "The destination container must have an iterator (pointer) range constructor"); +Container span_to(std::span<T> span) { + static_assert(std::is_constructible<Container, typename std::span<T>::iterator, typename std::span<T>::iterator>::value, + "The destination container must have an iterator (pointer) range constructor"); return Container(std::begin(span), std::end(span)); } template<template<typename...> class Container, typename T> -Container<detail::remove_cvref_t<T>> span_to(gsl::span<T> span) { - static_assert(std::is_constructible<Container<detail::remove_cvref_t<T>>, typename gsl::span<T>::iterator, typename gsl::span<T>::iterator>::value, - "The destination container must have an iterator (pointer) range constructor"); +Container<detail::remove_cvref_t<T>> span_to(std::span<T> span) { + static_assert(std::is_constructible<Container<detail::remove_cvref_t<T>>, typename std::span<T>::iterator, typename std::span<T>::iterator>::value, + "The destination container must have an iterator (pointer) range constructor"); return span_to<Container<detail::remove_cvref_t<T>>>(span); } -template<typename T> -struct is_not_null : std::false_type {}; -template<typename T> -struct is_not_null<gsl::not_null<T>> : std::true_type {}; -template<typename T> -inline constexpr bool is_not_null_v = is_not_null<T>::value; -} // namespace utils +// WARNING! check type aliasing rules for safe usage +template<typename T, typename U> +std::span<T> as_span(std::span<U> value) { + return std::span{reinterpret_cast<T*>(value.data()), value.size_bytes() / sizeof(T)}; +} -} // namespace org::apache::nifi::minifi +} // namespace org::apache::nifi::minifi::utils diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp index 434faf16b..8a7986242 100644 --- a/libminifi/src/c2/C2Agent.cpp +++ b/libminifi/src/c2/C2Agent.cpp @@ -943,7 +943,7 @@ void C2Agent::handleAssetUpdate(const C2ContentResponse& resp) { auto send_error = [&] (std::string_view error) { logger_->log_error("%s", std::string(error)); C2Payload response(Operation::ACKNOWLEDGE, state::UpdateState::SET_ERROR, resp.ident, true); - response.setRawData(gsl::span<const char>(error).as_span<const std::byte>()); + response.setRawData(as_bytes(std::span(error.begin(), error.end()))); enqueue_c2_response(std::move(response)); }; std::filesystem::path asset_dir = std::filesystem::path(configuration_->getHome()) / "asset"; diff --git a/libminifi/src/c2/C2Payload.cpp b/libminifi/src/c2/C2Payload.cpp index a6bae275e..3e5c2c462 100644 --- a/libminifi/src/c2/C2Payload.cpp +++ b/libminifi/src/c2/C2Payload.cpp @@ -22,11 +22,7 @@ #include <string> #include "utils/StringUtils.h" -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace c2 { +namespace org::apache::nifi::minifi::c2 { C2Payload::C2Payload(Operation op, std::string identifier, bool isRaw) : C2Payload(op, state::UpdateState::FULLY_APPLIED, std::move(identifier), isRaw) { @@ -72,7 +68,7 @@ void C2Payload::setRawData(const std::vector<char> &data) { setRawData(gsl::make_span(data).as_span<const std::byte>()); } -void C2Payload::setRawData(gsl::span<const std::byte> data) { +void C2Payload::setRawData(std::span<const std::byte> data) { raw_data_.reserve(raw_data_.size() + data.size()); raw_data_.insert(std::end(raw_data_), std::begin(data), std::end(data)); } @@ -147,8 +143,4 @@ std::ostream& operator<<(std::ostream& out, const AnnotatedValue& val) { return out; } -} /* namespace c2 */ -} /* namespace minifi */ -} /* namespace nifi */ -} /* namespace apache */ -} /* namespace org */ +} // namespace org::apache::nifi::minifi::c2 diff --git a/libminifi/src/c2/protocols/RESTProtocol.cpp b/libminifi/src/c2/protocols/RESTProtocol.cpp index 1e573eb58..ef3b6d35e 100644 --- a/libminifi/src/c2/protocols/RESTProtocol.cpp +++ b/libminifi/src/c2/protocols/RESTProtocol.cpp @@ -55,12 +55,11 @@ AnnotatedValue parseAnnotatedValue(const rapidjson::Value& jsonValue) { return result; } -C2Payload RESTProtocol::parseJsonResponse(const C2Payload &payload, gsl::span<const std::byte> response) { +C2Payload RESTProtocol::parseJsonResponse(const C2Payload &payload, std::span<const std::byte> response) { rapidjson::Document root; - const auto char_span = response.as_span<const char>(); try { - rapidjson::ParseResult ok = root.Parse(char_span.data(), char_span.size()); + rapidjson::ParseResult ok = root.Parse(reinterpret_cast<const char*>(response.data()), response.size()); if (ok) { std::string identifier; for (auto key : {"operationid", "operationId", "identifier"}) { diff --git a/libminifi/src/core/ConfigurableComponent.cpp b/libminifi/src/core/ConfigurableComponent.cpp index 135e9229b..4fd3f84ad 100644 --- a/libminifi/src/core/ConfigurableComponent.cpp +++ b/libminifi/src/core/ConfigurableComponent.cpp @@ -168,7 +168,7 @@ bool ConfigurableComponent::setProperty(const Property& prop, PropertyValue &val } } -void ConfigurableComponent::setSupportedProperties(gsl::span<const core::Property> properties) { +void ConfigurableComponent::setSupportedProperties(std::span<const core::Property> properties) { if (!canEdit()) { return; } diff --git a/libminifi/src/core/Connectable.cpp b/libminifi/src/core/Connectable.cpp index c3bc0803b..f97188c4d 100644 --- a/libminifi/src/core/Connectable.cpp +++ b/libminifi/src/core/Connectable.cpp @@ -41,7 +41,7 @@ Connectable::Connectable(std::string name) Connectable::~Connectable() = default; -void Connectable::setSupportedRelationships(gsl::span<const core::Relationship> relationships) { +void Connectable::setSupportedRelationships(std::span<const core::Relationship> relationships) { if (isRunning()) { logger_->log_warn("Can not set processor supported relationship while the process %s is running", name_); return; @@ -74,7 +74,7 @@ bool Connectable::isSupportedRelationship(const core::Relationship &relationship return relationships_.contains(relationship.getName()); } -void Connectable::setAutoTerminatedRelationships(gsl::span<const core::Relationship> relationships) { +void Connectable::setAutoTerminatedRelationships(std::span<const core::Relationship> relationships) { if (isRunning()) { logger_->log_warn("Can not set processor auto terminated relationship while the process %s is running", name_); return; diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp index 8bf30dc1c..5bd15cd4b 100644 --- a/libminifi/src/core/ProcessSession.cpp +++ b/libminifi/src/core/ProcessSession.cpp @@ -268,10 +268,10 @@ void ProcessSession::write(const std::shared_ptr<core::FlowFile> &flow, const io } } -void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) { - writeBuffer(flow_file, buffer.as_span<const std::byte>()); +void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) { + writeBuffer(flow_file, as_bytes(buffer)); } -void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const std::byte> buffer) { +void ProcessSession::writeBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const std::byte> buffer) { write(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) { const auto write_status = output_stream->write(buffer); return io::isError(write_status) ? -1 : gsl::narrow<int64_t>(write_status); @@ -319,10 +319,10 @@ void ProcessSession::append(const std::shared_ptr<core::FlowFile> &flow, const i throw; } } -void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const char> buffer) { - appendBuffer(flow_file, buffer.as_span<const std::byte>()); +void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const char> buffer) { + appendBuffer(flow_file, as_bytes(buffer)); } -void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, gsl::span<const std::byte> buffer) { +void ProcessSession::appendBuffer(const std::shared_ptr<core::FlowFile>& flow_file, std::span<const std::byte> buffer) { append(flow_file, [buffer](const std::shared_ptr<io::OutputStream>& output_stream) { const auto write_status = output_stream->write(buffer); return io::isError(write_status) ? -1 : gsl::narrow<int64_t>(write_status); diff --git a/libminifi/src/core/Repository.cpp b/libminifi/src/core/Repository.cpp index 2cf596108..c9f9d4f22 100644 --- a/libminifi/src/core/Repository.cpp +++ b/libminifi/src/core/Repository.cpp @@ -36,7 +36,7 @@ bool Repository::storeElement(const std::shared_ptr<core::SerializableComponent> element->serialize(stream); - if (!Put(element->getUUIDStr(), const_cast<uint8_t*>(stream.getBuffer().as_span<const uint8_t>().data()), stream.size())) { + if (!Put(element->getUUIDStr(), reinterpret_cast<const uint8_t*>(stream.getBuffer().data()), stream.size())) { logger_->log_error("NiFi Provenance Store event %s size %llu fail", element->getUUIDStr(), stream.size()); return false; } diff --git a/libminifi/src/core/repository/VolatileRepository.cpp b/libminifi/src/core/repository/VolatileRepository.cpp index 161f9f357..8201f7190 100644 --- a/libminifi/src/core/repository/VolatileRepository.cpp +++ b/libminifi/src/core/repository/VolatileRepository.cpp @@ -81,7 +81,7 @@ bool VolatileRepository::Put(const std::string& key, const uint8_t *buf, size_t bool VolatileRepository::MultiPut(const std::vector<std::pair<std::string, std::unique_ptr<io::BufferStream>>>& data) { for (const auto& item : data) { - if (!Put(item.first, item.second->getBuffer().template as_span<const uint8_t>().data(), item.second->size())) { + if (!Put(item.first, reinterpret_cast<const uint8_t*>(item.second->getBuffer().data()), item.second->size())) { return false; } } diff --git a/libminifi/src/io/BufferStream.cpp b/libminifi/src/io/BufferStream.cpp index b853f7b16..de52a5115 100644 --- a/libminifi/src/io/BufferStream.cpp +++ b/libminifi/src/io/BufferStream.cpp @@ -22,11 +22,7 @@ #include "io/BufferStream.h" #include "utils/gsl.h" -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace io { +namespace org::apache::nifi::minifi::io { size_t BufferStream::write(const uint8_t *value, size_t size) { size_t originalSize = buffer_.size(); @@ -35,7 +31,7 @@ size_t BufferStream::write(const uint8_t *value, size_t size) { return size; } -size_t BufferStream::read(gsl::span<std::byte> buf) { +size_t BufferStream::read(std::span<std::byte> buf) { const auto bytes_available_in_buffer = buffer_.size() - readOffset_; const auto readlen = std::min(buf.size(), gsl::narrow<size_t>(bytes_available_in_buffer)); const auto begin = buffer_.begin() + gsl::narrow<decltype(buffer_)::difference_type>(readOffset_); @@ -47,8 +43,4 @@ size_t BufferStream::read(gsl::span<std::byte> buf) { return readlen; } -} /* namespace io */ -} /* namespace minifi */ -} /* namespace nifi */ -} /* namespace apache */ -} /* namespace org */ +} // namespace org::apache::nifi::minifi::io diff --git a/libminifi/src/io/ClientSocket.cpp b/libminifi/src/io/ClientSocket.cpp index 0fe3fa411..c5fe134aa 100644 --- a/libminifi/src/io/ClientSocket.cpp +++ b/libminifi/src/io/ClientSocket.cpp @@ -468,7 +468,7 @@ size_t Socket::write(const uint8_t *value, size_t size) { return bytes; } -size_t Socket::read(gsl::span<std::byte> buf, bool retrieve_all_bytes) { +size_t Socket::read(std::span<std::byte> buf, bool retrieve_all_bytes) { size_t total_read = 0; while (!buf.empty()) { int16_t fd = select_descriptor(1000); diff --git a/libminifi/src/io/DescriptorStream.cpp b/libminifi/src/io/DescriptorStream.cpp index 041741cdd..be00e26cb 100644 --- a/libminifi/src/io/DescriptorStream.cpp +++ b/libminifi/src/io/DescriptorStream.cpp @@ -29,11 +29,7 @@ #include <unistd.h> #endif -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace io { +namespace org::apache::nifi::minifi::io { DescriptorStream::DescriptorStream(int fd) : fd_(fd) { @@ -72,7 +68,7 @@ size_t DescriptorStream::write(const uint8_t *value, size_t size) { } } -size_t DescriptorStream::read(gsl::span<std::byte> buf) { +size_t DescriptorStream::read(std::span<std::byte> buf) { if (buf.empty()) return 0; #ifdef WIN32 const auto size_read = _read(fd_, buf.data(), buf.size()); @@ -86,9 +82,4 @@ size_t DescriptorStream::read(gsl::span<std::byte> buf) { return gsl::narrow<size_t>(size_read); } -} /* namespace io */ -} /* namespace minifi */ -} /* namespace nifi */ -} /* namespace apache */ -} /* namespace org */ - +} // namespace org::apache::nifi::minifi::io diff --git a/libminifi/src/io/FileStream.cpp b/libminifi/src/io/FileStream.cpp index 0d128c942..302c25c9f 100644 --- a/libminifi/src/io/FileStream.cpp +++ b/libminifi/src/io/FileStream.cpp @@ -135,7 +135,7 @@ size_t FileStream::write(const uint8_t *value, size_t size) { return size; } -size_t FileStream::read(gsl::span<std::byte> buf) { +size_t FileStream::read(std::span<std::byte> buf) { if (buf.empty()) { return 0; } std::lock_guard<std::mutex> lock(file_lock_); if (file_stream_ == nullptr || !file_stream_->is_open()) { diff --git a/libminifi/src/io/StreamSlice.cpp b/libminifi/src/io/StreamSlice.cpp index a585cbafe..50fa91c37 100644 --- a/libminifi/src/io/StreamSlice.cpp +++ b/libminifi/src/io/StreamSlice.cpp @@ -26,7 +26,7 @@ StreamSlice::StreamSlice(std::shared_ptr<io::InputStream> stream, size_t offset, throw std::invalid_argument("StreamSlice is bigger than the Stream"); } -size_t StreamSlice::read(gsl::span<std::byte> out_buffer) { +size_t StreamSlice::read(std::span<std::byte> out_buffer) { const size_t max_size = std::min(out_buffer.size(), size() - tell()); return stream_->read(out_buffer.subspan(0, max_size)); } @@ -39,7 +39,7 @@ size_t StreamSlice::tell() const { return stream_->tell() - slice_offset_; } -gsl::span<const std::byte> StreamSlice::getBuffer() const { +std::span<const std::byte> StreamSlice::getBuffer() const { return stream_->getBuffer().subspan(slice_offset_, slice_size_); } diff --git a/libminifi/src/io/tls/SecureDescriptorStream.cpp b/libminifi/src/io/tls/SecureDescriptorStream.cpp index 5c32b7702..94cd26380 100644 --- a/libminifi/src/io/tls/SecureDescriptorStream.cpp +++ b/libminifi/src/io/tls/SecureDescriptorStream.cpp @@ -71,7 +71,7 @@ size_t SecureDescriptorStream::write(const uint8_t *value, size_t size) { return size; } -size_t SecureDescriptorStream::read(gsl::span<std::byte> buf) { +size_t SecureDescriptorStream::read(std::span<std::byte> buf) { if (buf.empty()) { return 0; } size_t total_read = 0; std::byte* writepos = buf.data(); diff --git a/libminifi/src/io/tls/TLSSocket.cpp b/libminifi/src/io/tls/TLSSocket.cpp index 9ac1cab5f..4019cc15c 100644 --- a/libminifi/src/io/tls/TLSSocket.cpp +++ b/libminifi/src/io/tls/TLSSocket.cpp @@ -347,7 +347,7 @@ int16_t TLSSocket::select_descriptor(const uint16_t msec) { return -1; } -size_t TLSSocket::read(gsl::span<std::byte> buffer, bool) { +size_t TLSSocket::read(std::span<std::byte> buffer, bool) { size_t total_read = 0; int status = 0; int loc = 0; @@ -416,7 +416,7 @@ size_t TLSSocket::write(const uint8_t *value, size_t size) { return writeData(value, size, fd); } -size_t TLSSocket::read(gsl::span<std::byte> buffer) { +size_t TLSSocket::read(std::span<std::byte> buffer) { size_t total_read = 0; int status = 0; auto* buf = buffer.data(); diff --git a/libminifi/src/utils/BaseHTTPClient.cpp b/libminifi/src/utils/BaseHTTPClient.cpp index 2124e285d..7f802efb5 100644 --- a/libminifi/src/utils/BaseHTTPClient.cpp +++ b/libminifi/src/utils/BaseHTTPClient.cpp @@ -250,8 +250,8 @@ size_t HTTPUploadByteArrayInputCallback::setPosition(int64_t offset) { size_t HTTPUploadStreamContentsCallback::getDataChunk(char *data, size_t size) { logger_->log_trace("HTTPUploadStreamContentsCallback is asked for up to %zu bytes", size); - gsl::span<char> buffer{data, size}; - size_t num_read = input_stream_->read(buffer.as_span<std::byte>()); + std::span<char> buffer{data, size}; + size_t num_read = input_stream_->read(as_writable_bytes(buffer)); if (io::isError(num_read)) { logger_->log_error("Error reading the input stream in HTTPUploadStreamContentsCallback"); diff --git a/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp b/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp index 9f11131d5..af2307e5c 100644 --- a/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp +++ b/libminifi/src/utils/LineByLineInputOutputStreamCallback.cpp @@ -18,6 +18,7 @@ #include "utils/LineByLineInputOutputStreamCallback.h" #include "utils/gsl.h" +#include "utils/span.h" namespace org::apache::nifi::minifi::utils { @@ -67,7 +68,7 @@ void LineByLineInputOutputStreamCallback::readLine() { if (end_of_line != input_.end()) { ++end_of_line; } current_line_ = next_line_; - next_line_ = utils::span_to<std::string>(gsl::make_span(&*current_pos_, &*end_of_line).as_span<char>()); + next_line_ = utils::span_to<std::string>(utils::as_span<char>(std::span(std::to_address(current_pos_), std::to_address(end_of_line)))); current_pos_ = end_of_line; } diff --git a/libminifi/src/utils/StringUtils.cpp b/libminifi/src/utils/StringUtils.cpp index 84b7a531b..0b0217569 100644 --- a/libminifi/src/utils/StringUtils.cpp +++ b/libminifi/src/utils/StringUtils.cpp @@ -318,7 +318,7 @@ std::vector<std::byte> StringUtils::from_hex(std::string_view hex) { return decoded; } -size_t StringUtils::to_hex(char* hex, gsl::span<const std::byte> data_to_be_transformed, bool uppercase) { +size_t StringUtils::to_hex(char* hex, std::span<const std::byte> data_to_be_transformed, bool uppercase) { if (data_to_be_transformed.size() > std::numeric_limits<size_t>::max() / 2) { throw std::length_error("Data is too large to be hexencoded"); } @@ -329,7 +329,7 @@ size_t StringUtils::to_hex(char* hex, gsl::span<const std::byte> data_to_be_tran return data_to_be_transformed.size() * 2; } -std::string StringUtils::to_hex(gsl::span<const std::byte> data_to_be_transformed, bool uppercase /*= false*/) { +std::string StringUtils::to_hex(std::span<const std::byte> data_to_be_transformed, bool uppercase /*= false*/) { if (data_to_be_transformed.size() > (std::numeric_limits<size_t>::max() / 2 - 1)) { throw std::length_error("Data is too large to be hexencoded"); } @@ -418,7 +418,7 @@ std::vector<std::byte> StringUtils::from_base64(const std::string_view base64) { return decoded; } -size_t StringUtils::to_base64(char* base64, const gsl::span<const std::byte> raw_data, bool url, bool padded) { +size_t StringUtils::to_base64(char* base64, const std::span<const std::byte> raw_data, bool url, bool padded) { gsl_Expects(base64); if (raw_data.size() > std::numeric_limits<size_t>::max() * 3 / 4 - 3) { throw std::length_error("Data is too large to be base64 encoded"); @@ -452,7 +452,7 @@ size_t StringUtils::to_base64(char* base64, const gsl::span<const std::byte> raw return base64_length; } -std::string StringUtils::to_base64(const gsl::span<const std::byte> raw_data, bool url /*= false*/, bool padded /*= true*/) { +std::string StringUtils::to_base64(const std::span<const std::byte> raw_data, bool url /*= false*/, bool padded /*= true*/) { std::string buf; buf.resize((raw_data.size() / 3 + 1) * 4); size_t base64_length = to_base64(buf.data(), raw_data, url, padded); @@ -461,7 +461,7 @@ std::string StringUtils::to_base64(const gsl::span<const std::byte> raw_data, bo return buf; } -std::string StringUtils::escapeUnprintableBytes(gsl::span<const std::byte> data) { +std::string StringUtils::escapeUnprintableBytes(std::span<const std::byte> data) { constexpr const char* hex_digits = "0123456789abcdef"; std::string result; for (auto byte : data) { diff --git a/libminifi/src/utils/crypto/EncryptionUtils.cpp b/libminifi/src/utils/crypto/EncryptionUtils.cpp index 2d0ceaf33..d04acc5ff 100644 --- a/libminifi/src/utils/crypto/EncryptionUtils.cpp +++ b/libminifi/src/utils/crypto/EncryptionUtils.cpp @@ -23,20 +23,16 @@ #include <string> #include "utils/StringUtils.h" +#include "utils/span.h" -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace utils { -namespace crypto { +namespace org::apache::nifi::minifi::utils::crypto { Bytes stringToBytes(const std::string& text) { - return utils::span_to<std::vector>(gsl::make_span(text).as_span<const Bytes::value_type>()); + return utils::span_to<std::vector>(utils::as_span<const Bytes::value_type>(std::span(text))); } std::string bytesToString(const Bytes& bytes) { - return utils::span_to<std::string>(gsl::make_span(bytes).as_span<const char>()); + return utils::span_to<std::string>(utils::as_span<const char>(std::span(bytes))); } Bytes generateKey() { @@ -135,9 +131,4 @@ bool isEncrypted(const std::string& input) { } } -} // namespace crypto -} // namespace utils -} // namespace minifi -} // namespace nifi -} // namespace apache -} // namespace org +} // namespace org::apache::nifi::minifi::utils::crypto diff --git a/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp b/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp index 0c11307f9..ccc8571b4 100644 --- a/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp +++ b/libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp @@ -23,12 +23,7 @@ #include "openssl/rand.h" #include "core/logging/LoggerConfiguration.h" -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace utils { -namespace crypto { +namespace org::apache::nifi::minifi::utils::crypto { using EVP_CIPHER_CTX_ptr = std::unique_ptr<EVP_CIPHER_CTX, decltype(&EVP_CIPHER_CTX_free)>; @@ -54,7 +49,7 @@ Bytes Aes256EcbCipher::generateKey() { return utils::crypto::randomBytes(KEY_SIZE); } -void Aes256EcbCipher::encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const { +void Aes256EcbCipher::encrypt(std::span<unsigned char, BLOCK_SIZE> data) const { gsl_Expects(data.size() == BLOCK_SIZE); EVP_CIPHER_CTX_ptr ctx(EVP_CIPHER_CTX_new(), EVP_CIPHER_CTX_free); if (!ctx) { @@ -74,12 +69,12 @@ void Aes256EcbCipher::encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) co int ciphertext_len = 0; int len; - if (1 != EVP_EncryptUpdate(ctx.get(), data.begin(), &len, data.begin(), data.size())) { + if (1 != EVP_EncryptUpdate(ctx.get(), data.data(), &len, data.data(), data.size())) { handleOpenSSLError("Could not update cipher content"); } ciphertext_len += len; - if (1 != EVP_EncryptFinal_ex(ctx.get(), data.begin() + len, &len)) { + if (1 != EVP_EncryptFinal_ex(ctx.get(), data.data() + len, &len)) { handleOpenSSLError("Could not finalize encryption"); } ciphertext_len += len; @@ -87,7 +82,7 @@ void Aes256EcbCipher::encrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) co gsl_Expects(ciphertext_len == BLOCK_SIZE); } -void Aes256EcbCipher::decrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) const { +void Aes256EcbCipher::decrypt(std::span<unsigned char, BLOCK_SIZE> data) const { gsl_Expects(data.size() == BLOCK_SIZE); EVP_CIPHER_CTX_ptr ctx(EVP_CIPHER_CTX_new(), EVP_CIPHER_CTX_free); if (!ctx) { @@ -106,12 +101,12 @@ void Aes256EcbCipher::decrypt(gsl::span<unsigned char /*, BLOCK_SIZE*/> data) co int plaintext_len = 0; int len; - if (1 != EVP_DecryptUpdate(ctx.get(), data.begin(), &len, data.begin(), data.size())) { + if (1 != EVP_DecryptUpdate(ctx.get(), data.data(), &len, data.data(), data.size())) { handleOpenSSLError("Could not update cipher content"); } plaintext_len += len; - if (1 != EVP_DecryptFinal_ex(ctx.get(), data.begin() + len, &len)) { + if (1 != EVP_DecryptFinal_ex(ctx.get(), data.data() + len, &len)) { handleOpenSSLError("Could not finalize decryption"); } plaintext_len += len; @@ -125,9 +120,4 @@ bool Aes256EcbCipher::operator==(const Aes256EcbCipher &other) const { return CRYPTO_memcmp(encryption_key_.data(), other.encryption_key_.data(), KEY_SIZE) == 0; } -} // namespace crypto -} // namespace utils -} // namespace minifi -} // namespace nifi -} // namespace apache -} // namespace org +} // namespace org::apache::nifi::minifi::utils::crypto diff --git a/libminifi/src/utils/file/FileUtils.cpp b/libminifi/src/utils/file/FileUtils.cpp index 0a8635a00..79f8df9a6 100644 --- a/libminifi/src/utils/file/FileUtils.cpp +++ b/libminifi/src/utils/file/FileUtils.cpp @@ -50,7 +50,7 @@ bool contains(const std::filesystem::path& file_path, std::string_view text_to_s gsl_Expects(text_to_search.size() <= 8_KiB); gsl_ExpectsAudit(std::filesystem::exists(file_path)); std::array<char, 16_KiB> buf{}; - gsl::span<char> view; + std::span<char> view; Searcher searcher(text_to_search.begin(), text_to_search.end()); @@ -58,7 +58,7 @@ bool contains(const std::filesystem::path& file_path, std::string_view text_to_s do { std::copy(buf.end() - text_to_search.size(), buf.end(), buf.begin()); ifs.read(buf.data() + text_to_search.size(), buf.size() - text_to_search.size()); - view = gsl::span<char>(buf.data(), text_to_search.size() + gsl::narrow<size_t>(ifs.gcount())); + view = std::span<char>(buf.data(), text_to_search.size() + gsl::narrow<size_t>(ifs.gcount())); if (std::search(view.begin(), view.end(), searcher) != view.end()) { return true; } diff --git a/libminifi/test/TestBase.cpp b/libminifi/test/TestBase.cpp index cb61f540f..79632ce98 100644 --- a/libminifi/test/TestBase.cpp +++ b/libminifi/test/TestBase.cpp @@ -35,6 +35,7 @@ #include "core/extension/ExtensionManager.h" #include "utils/Id.h" #include "utils/StringUtils.h" +#include "utils/span.h" #include "LogUtils.h" #include "spdlog/spdlog.h" @@ -645,7 +646,7 @@ std::string TestPlan::getContent(const minifi::core::FlowFile& file) const { auto content_stream = content_repo_->read(*content_claim); auto output_stream = std::make_shared<minifi::io::BufferStream>(); minifi::InputStreamPipe{*output_stream}(content_stream); - return utils::span_to<std::string>(output_stream->getBuffer().as_span<const char>()); + return utils::span_to<std::string>(utils::as_span<const char>(output_stream->getBuffer())); } TestController::TestController() diff --git a/libminifi/test/Utils.h b/libminifi/test/Utils.h index 4f37b399e..4e3145c1f 100644 --- a/libminifi/test/Utils.h +++ b/libminifi/test/Utils.h @@ -141,8 +141,8 @@ std::error_code sendUdpDatagram(const asio::const_buffer content, const asio::ip return err; } -std::error_code sendUdpDatagram(const gsl::span<std::byte const> content, const asio::ip::udp::endpoint& remote_endpoint) { - return sendUdpDatagram(asio::const_buffer(content.begin(), content.size()), remote_endpoint); +std::error_code sendUdpDatagram(const std::span<std::byte const> content, const asio::ip::udp::endpoint& remote_endpoint) { + return sendUdpDatagram(asio::const_buffer(content.data(), content.size()), remote_endpoint); } std::error_code sendUdpDatagram(const std::string_view content, const asio::ip::udp::endpoint& remote_endpoint) { diff --git a/libminifi/test/archive-tests/ArchiveStreamTests.cpp b/libminifi/test/archive-tests/ArchiveStreamTests.cpp index 42513335c..cbb13ac10 100644 --- a/libminifi/test/archive-tests/ArchiveStreamTests.cpp +++ b/libminifi/test/archive-tests/ArchiveStreamTests.cpp @@ -48,7 +48,7 @@ TEST_CASE("Create and read archive") { ++extracted_entries; std::string file_content; file_content.resize(info->size); - REQUIRE(decompressor.read(minifi::gsl::make_span(file_content).as_span<std::byte>()) == file_content.length()); + REQUIRE(decompressor.read(as_writable_bytes(std::span(file_content))) == file_content.length()); REQUIRE(files[info->filename] == file_content); } REQUIRE(extracted_entries == files.size()); diff --git a/libminifi/test/archive-tests/CompressContentTests.cpp b/libminifi/test/archive-tests/CompressContentTests.cpp index f33955905..086c51168 100644 --- a/libminifi/test/archive-tests/CompressContentTests.cpp +++ b/libminifi/test/archive-tests/CompressContentTests.cpp @@ -57,7 +57,7 @@ class ReadCallback { int64_t operator()(const std::shared_ptr<minifi::io::InputStream>& stream) { int64_t total_read = 0; do { - const auto ret = stream->read(gsl::make_span(buffer_).subspan(read_size_)); + const auto ret = stream->read(std::span(buffer_).subspan(read_size_)); if (ret == 0) break; if (minifi::io::isError(ret)) return -1; read_size_ += gsl::narrow<size_t>(ret); diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp b/libminifi/test/archive-tests/MergeFileTests.cpp index 19718465f..d0a2b7df1 100644 --- a/libminifi/test/archive-tests/MergeFileTests.cpp +++ b/libminifi/test/archive-tests/MergeFileTests.cpp @@ -41,6 +41,7 @@ #include "serialization/PayloadSerializer.h" #include "../Utils.h" #include "utils/gsl.h" +#include "utils/span.h" std::string FLOW_FILE; std::string EXPECT_MERGE_CONTENT_FIRST; @@ -88,7 +89,7 @@ class FixedBuffer { REQUIRE(size_ + len <= capacity_); int total_read = 0; do { - const size_t ret{input.read(gsl::make_span(end(), len).as_span<std::byte>())}; + const size_t ret{input.read(as_writable_bytes(std::span(end(), len)))}; if (ret == 0) break; if (minifi::io::isError(ret)) return -1; size_ += ret; @@ -111,7 +112,7 @@ std::vector<FixedBuffer> read_archives(const FixedBuffer& input) { class ArchiveEntryReader { public: explicit ArchiveEntryReader(archive* arch) : arch(arch) {} - size_t read(gsl::span<std::byte> out_buffer) { + size_t read(std::span<std::byte> out_buffer) { const auto ret = archive_read_data(arch, out_buffer.data(), out_buffer.size()); return ret < 0 ? minifi::io::STREAM_ERROR : gsl::narrow<size_t>(ret); } @@ -752,7 +753,7 @@ TEST_CASE("FlowFile serialization", "[testFlowFileSerialization]") { } writeString(footer, result); - const auto expected = utils::span_to<std::string>(result->getBuffer().as_span<const char>()); + const auto expected = utils::span_to<std::string>(utils::as_span<const char>(result->getBuffer())); auto factory = std::make_shared<core::ProcessSessionFactory>(context); merge_content_processor->onSchedule(context, factory); diff --git a/libminifi/test/azure-tests/MockBlobStorage.h b/libminifi/test/azure-tests/MockBlobStorage.h index 996fef1c8..fb7e8ec54 100644 --- a/libminifi/test/azure-tests/MockBlobStorage.h +++ b/libminifi/test/azure-tests/MockBlobStorage.h @@ -25,6 +25,7 @@ #include "storage/BlobStorageClient.h" #include "azure/core/io/body_stream.hpp" +#include "utils/span.h" class MockBlobStorage : public minifi::azure::storage::BlobStorageClient { public: @@ -41,13 +42,13 @@ class MockBlobStorage : public minifi::azure::storage::BlobStorageClient { return true; } - Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const minifi::azure::storage::PutAzureBlobStorageParameters& params, gsl::span<const std::byte> buffer) override { + Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const minifi::azure::storage::PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) override { put_params_ = params; if (upload_fails_) { throw std::runtime_error("error"); } - input_data_ = utils::span_to<std::string>(buffer.as_span<const char>()); + input_data_ = utils::span_to<std::string>(utils::as_span<const char>(buffer)); Azure::Storage::Blobs::Models::UploadBlockBlobResult result; result.ETag = Azure::ETag{ETAG}; diff --git a/libminifi/test/azure-tests/MockDataLakeStorageClient.h b/libminifi/test/azure-tests/MockDataLakeStorageClient.h index 5d6c42c3d..03a5f46b1 100644 --- a/libminifi/test/azure-tests/MockDataLakeStorageClient.h +++ b/libminifi/test/azure-tests/MockDataLakeStorageClient.h @@ -26,6 +26,7 @@ #include "storage/DataLakeStorageClient.h" #include "io/BufferStream.h" +#include "utils/span.h" class MockDataLakeStorageClient : public org::apache::nifi::minifi::azure::storage::DataLakeStorageClient { public: @@ -41,8 +42,9 @@ class MockDataLakeStorageClient : public org::apache::nifi::minifi::azure::stora return create_file_; } - std::string uploadFile(const org::apache::nifi::minifi::azure::storage::PutAzureDataLakeStorageParameters& params, gsl::span<const std::byte> buffer) override { - input_data_ = org::apache::nifi::minifi::utils::span_to<std::string>(buffer.as_span<const char>()); + std::string uploadFile(const org::apache::nifi::minifi::azure::storage::PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) override { + namespace utils = org::apache::nifi::minifi::utils; + input_data_ = utils::span_to<std::string>(utils::as_span<const char>(buffer)); put_params_ = params; if (upload_fails_) { diff --git a/libminifi/test/rocksdb-tests/EncryptionTests.cpp b/libminifi/test/rocksdb-tests/EncryptionTests.cpp index b544d7016..9dd6577f3 100644 --- a/libminifi/test/rocksdb-tests/EncryptionTests.cpp +++ b/libminifi/test/rocksdb-tests/EncryptionTests.cpp @@ -22,6 +22,7 @@ #include "utils/IntegrationTestUtils.h" #include "repository/VolatileContentRepository.h" #include "FlowFileRecord.h" +#include "utils/span.h" using core::repository::FlowFileRepository; @@ -43,7 +44,7 @@ class FFRepoFixture : public TestController { static void putFlowFile(const std::shared_ptr<minifi::FlowFileRecord>& flowfile, const std::shared_ptr<core::repository::FlowFileRepository>& repo) { minifi::io::BufferStream buffer; flowfile->Serialize(buffer); - const auto buf = buffer.getBuffer().as_span<const uint8_t>(); + const auto buf = utils::as_span<const uint8_t>(buffer.getBuffer()); REQUIRE(repo->Put(flowfile->getUUIDStr(), buf.data(), buf.size())); } diff --git a/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp b/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp index e6c8d01ec..63830b23a 100644 --- a/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp +++ b/libminifi/test/rocksdb-tests/RocksDBStreamTests.cpp @@ -75,9 +75,9 @@ TEST_CASE_METHOD(RocksDBStreamTest, "Read zero bytes") { minifi::io::RocksDbStream stream("one", gsl::make_not_null(db.get())); std::byte fake_buffer[1]; - REQUIRE(stream.read(gsl::make_span(fake_buffer).subspan(0, 0)) == 0); + REQUIRE(stream.read(std::span(fake_buffer).subspan(0, 0)) == 0); minifi::io::RocksDbStream nonExistingStream("two", gsl::make_not_null(db.get())); - REQUIRE(minifi::io::isError(nonExistingStream.read(gsl::make_span(fake_buffer).subspan(0, 0)))); + REQUIRE(minifi::io::isError(nonExistingStream.read(std::span(fake_buffer).subspan(0, 0)))); } diff --git a/libminifi/test/rocksdb-tests/SwapTests.cpp b/libminifi/test/rocksdb-tests/SwapTests.cpp index 07d0219df..3bfa19542 100644 --- a/libminifi/test/rocksdb-tests/SwapTests.cpp +++ b/libminifi/test/rocksdb-tests/SwapTests.cpp @@ -57,7 +57,7 @@ class OutputProcessor : public core::Processor { auto ff = session->create(); ff->addAttribute("index", id); session->write(ff, [&] (const std::shared_ptr<minifi::io::OutputStream>& output) -> int64_t { - auto ret = output->write(gsl::span<const char>(id.data(), id.size()).as_span<const std::byte>()); + auto ret = output->write(as_bytes(std::span(id))); if (minifi::io::isError(ret)) { return -1; } diff --git a/libminifi/test/unit/FileStreamTests.cpp b/libminifi/test/unit/FileStreamTests.cpp index 7032be269..314f2ba8e 100644 --- a/libminifi/test/unit/FileStreamTests.cpp +++ b/libminifi/test/unit/FileStreamTests.cpp @@ -228,7 +228,7 @@ TEST_CASE("Read zero bytes") { auto dir = testController.createTempDirectory(); minifi::io::FileStream stream(dir / "test.txt", 0, true); std::byte fake_buffer[1]; - REQUIRE(stream.read(gsl::make_span(fake_buffer).subspan(0, 0)) == 0); + REQUIRE(stream.read(std::span(fake_buffer).subspan(0, 0)) == 0); } TEST_CASE("Non-existing file read/write test") { diff --git a/libminifi/test/unit/FileSystemRepositoryTests.cpp b/libminifi/test/unit/FileSystemRepositoryTests.cpp index 5aa652e54..f21dafd1b 100644 --- a/libminifi/test/unit/FileSystemRepositoryTests.cpp +++ b/libminifi/test/unit/FileSystemRepositoryTests.cpp @@ -61,9 +61,9 @@ TEST_CASE("Test Physical memory usage", "[testphysicalmemoryusage]") { auto resource_id = content_session->create(); auto stream = content_session->write(resource_id); size_t file_size = 20_MB; - gsl::span<const char> fragment = "well, hello there"; + std::span<const char> fragment = "well, hello there"; for (size_t i = 0; i < file_size / fragment.size() + 1; ++i) { - stream->write(fragment.as_span<const std::byte>()); + stream->write(as_bytes(fragment)); } using org::apache::nifi::minifi::utils::verifyEventHappenedInPollTime; diff --git a/libminifi/test/unit/FlowFileSerializationTests.cpp b/libminifi/test/unit/FlowFileSerializationTests.cpp index b623f4887..04c58bd19 100644 --- a/libminifi/test/unit/FlowFileSerializationTests.cpp +++ b/libminifi/test/unit/FlowFileSerializationTests.cpp @@ -25,6 +25,7 @@ #include "../TestBase.h" #include "../Catch.h" #include "utils/gsl.h" +#include "utils/span.h" #include "FlowFile.h" #include "FlowFileRecord.h" @@ -50,7 +51,7 @@ TEST_CASE("Payload Serializer", "[testPayload]") { return cb(contentStream); }); serializer.serialize(flowFile, result); - const auto serialized = utils::span_to<std::string>(result->getBuffer().as_span<const char>()); + const auto serialized = utils::span_to<std::string>(utils::as_span<const char>(result->getBuffer())); REQUIRE(serialized == content); } @@ -70,7 +71,7 @@ TEST_CASE("FFv3 Serializer", "[testFFv3]") { return cb(contentStream); }); serializer.serialize(flowFile, result); - const auto serialized = utils::span_to<std::string>(result->getBuffer().as_span<const char>()); + const auto serialized = utils::span_to<std::string>(utils::as_span<const char>(result->getBuffer())); std::string expected = "NiFiFF3"; expected += std::string("\x00\x02", 2); // number of attributes diff --git a/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp b/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp index 74e59f1c6..1e1abd80e 100644 --- a/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp +++ b/libminifi/test/unit/LineByLineInputOutputStreamCallbackTests.cpp @@ -21,6 +21,7 @@ #include "core/logging/LoggerConfiguration.h" #include "io/BufferStream.h" #include "spdlog/spdlog.h" +#include "utils/span.h" using minifi::utils::LineByLineInputOutputStreamCallback; @@ -71,7 +72,7 @@ TEST_CASE("LineByLineInputOutputStreamCallback can process a stream line by line LineByLineInputOutputStreamCallback line_by_line_input_output_stream_callback{line_processor}; line_by_line_input_output_stream_callback(input_stream, output_stream); - const auto output_data = utils::span_to<std::string>(output_stream->getBuffer().as_span<const char>()); + const auto output_data = utils::span_to<std::string>(utils::as_span<const char>(output_stream->getBuffer())); CHECK(output_data == expected_output); } @@ -92,7 +93,7 @@ TEST_CASE("LineByLineInputOutputStreamCallback can handle Windows line endings", LineByLineInputOutputStreamCallback line_by_line_input_output_stream_callback{line_processor}; line_by_line_input_output_stream_callback(input_stream, output_stream); - const auto output_data = utils::span_to<std::string>(output_stream->getBuffer().as_span<const char>()); + const auto output_data = utils::span_to<std::string>(utils::as_span<const char>(output_stream->getBuffer())); CHECK(output_data == expected_output); } diff --git a/libminifi/test/unit/LoggerTests.cpp b/libminifi/test/unit/LoggerTests.cpp index 1fef27fa1..7a2e2ec65 100644 --- a/libminifi/test/unit/LoggerTests.cpp +++ b/libminifi/test/unit/LoggerTests.cpp @@ -26,6 +26,7 @@ #include "io/ZlibStream.h" #include "StreamPipe.h" #include "utils/IntegrationTestUtils.h" +#include "utils/span.h" using namespace std::literals::chrono_literals; @@ -193,7 +194,7 @@ std::string decompress(const std::shared_ptr<InputStream>& input) { auto decompressor = std::make_shared<ZlibDecompressStream>(gsl::make_not_null(output.get())); minifi::internal::pipe(*input, *decompressor); decompressor->close(); - return utils::span_to<std::string>(output->getBuffer().as_span<const char>()); + return utils::span_to<std::string>(utils::as_span<const char>(output->getBuffer())); } TEST_CASE("Test Compression", "[ttl9]") { diff --git a/libminifi/test/unit/ProvenanceTestHelper.h b/libminifi/test/unit/ProvenanceTestHelper.h index 3f5a16c72..ec979e172 100644 --- a/libminifi/test/unit/ProvenanceTestHelper.h +++ b/libminifi/test/unit/ProvenanceTestHelper.h @@ -65,8 +65,7 @@ class TestRepositoryBase : public T_BaseRepository { bool MultiPut(const std::vector<std::pair<std::string, std::unique_ptr<org::apache::nifi::minifi::io::BufferStream>>>& data) override { for (const auto& item : data) { - const auto buf = item.second->getBuffer().as_span<const uint8_t>(); - if (!Put(item.first, buf.data(), buf.size())) { + if (!Put(item.first, reinterpret_cast<const uint8_t*>(item.second->getBuffer().data()), item.second->size())) { return false; } } diff --git a/libminifi/test/unit/SiteToSiteHelper.h b/libminifi/test/unit/SiteToSiteHelper.h index ed98ba76e..1a8c52423 100644 --- a/libminifi/test/unit/SiteToSiteHelper.h +++ b/libminifi/test/unit/SiteToSiteHelper.h @@ -62,7 +62,7 @@ class SiteToSiteResponder : public minifi::io::BaseStream { * @param len length to read * @return resulting read size **/ - size_t read(gsl::span<std::byte> out_buffer) override { + size_t read(std::span<std::byte> out_buffer) override { return server_responses_.read(out_buffer); } }; diff --git a/libminifi/test/unit/GslTest.cpp b/libminifi/test/unit/SpanTests.cpp similarity index 77% rename from libminifi/test/unit/GslTest.cpp rename to libminifi/test/unit/SpanTests.cpp index b85255486..4b648c8e4 100644 --- a/libminifi/test/unit/GslTest.cpp +++ b/libminifi/test/unit/SpanTests.cpp @@ -20,12 +20,12 @@ #include <string> #include "../TestBase.h" #include "../Catch.h" -#include "utils/gsl.h" +#include "utils/span.h" namespace utils = org::apache::nifi::minifi::utils; -TEST_CASE("span to", "[span to]") { - const auto test_span = gsl::make_span("test text", 9); +TEST_CASE("span_to") { + const auto test_span = std::span("test text", 9); const auto string = utils::span_to<std::string>(test_span); const auto vector = utils::span_to<std::vector>(test_span); @@ -33,3 +33,11 @@ TEST_CASE("span to", "[span to]") { REQUIRE('t' == vector[0]); REQUIRE(9 == vector.size()); } + +TEST_CASE("as_span") { + const auto test_span = as_bytes(std::span("test text", 9)); + const auto char_span = utils::as_span<const char>(test_span); + + REQUIRE(char_span.size() == test_span.size()); + REQUIRE(char_span[0] == 't'); +} diff --git a/libminifi/test/unit/StreamTests.cpp b/libminifi/test/unit/StreamTests.cpp index dc77c5438..a104ac74c 100644 --- a/libminifi/test/unit/StreamTests.cpp +++ b/libminifi/test/unit/StreamTests.cpp @@ -27,6 +27,7 @@ #include "../Catch.h" #include "io/BaseStream.h" #include "io/StreamSlice.h" +#include "utils/span.h" TEST_CASE("TestReadData", "[testread]") { auto base = std::make_shared<minifi::io::BufferStream>(); @@ -76,7 +77,7 @@ TEST_CASE("TestWrite1", "[testwrite]") { auto base = std::make_shared<minifi::io::BufferStream>(); base->write((uint64_t)0x0102030405060708); std::string bytes(8, '\0'); - REQUIRE(8 == base->read(gsl::make_span(bytes).as_span<std::byte>())); + REQUIRE(8 == base->read(as_writable_bytes(std::span(bytes)))); REQUIRE(bytes == "\x01\x02\x03\x04\x05\x06\x07\x08"); } @@ -102,5 +103,5 @@ TEST_CASE("StreamSliceTest1", "[teststreamslice]") { REQUIRE(stream_slice->read(buffer2) == 4); buffer2.resize(4); REQUIRE(buffer == buffer2); - REQUIRE(utils::span_to<std::vector>(gsl::make_span(buffer).as_span<uint8_t>()) == std::vector<uint8_t>({3, 4, 5, 6})); + REQUIRE(utils::span_to<std::vector>(utils::as_span<uint8_t>(std::span(buffer))) == std::vector<uint8_t>({3, 4, 5, 6})); } diff --git a/libminifi/test/unit/StringUtilsTests.cpp b/libminifi/test/unit/StringUtilsTests.cpp index 2b64b5af5..a63c963fb 100644 --- a/libminifi/test/unit/StringUtilsTests.cpp +++ b/libminifi/test/unit/StringUtilsTests.cpp @@ -369,34 +369,24 @@ TEST_CASE("TestStringUtils::testBase64Encode", "[test base64 encode]") { REQUIRE("b29vb28" == StringUtils::to_base64("ooooo", false /*url*/, false /*padded*/)); REQUIRE("b29vb29v" == StringUtils::to_base64("oooooo", false /*url*/, false /*padded*/)); + std::vector<uint8_t> message{ + 0x00, 0x10, 0x83, 0x10, + 0x51, 0x87, 0x20, 0x92, + 0x8b, 0x30, 0xd3, 0x8f, + 0x41, 0x14, 0x93, 0x51, + 0x55, 0x97, 0x61, 0x96, + 0x9b, 0x71, 0xd7, 0x9f, + 0x82, 0x18, 0xa3, 0x92, + 0x59, 0xa7, 0xa2, 0x9a, + 0xab, 0xb2, 0xdb, 0xaf, + 0xc3, 0x1c, 0xb3, 0xd3, + 0x5d, 0xb7, 0xe3, 0x9e, + 0xbb, 0xf3, 0xdf, 0xbf}; + REQUIRE("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" == - StringUtils::to_base64(gsl::make_span(std::vector<uint8_t>{ - 0x00, 0x10, 0x83, 0x10, - 0x51, 0x87, 0x20, 0x92, - 0x8b, 0x30, 0xd3, 0x8f, - 0x41, 0x14, 0x93, 0x51, - 0x55, 0x97, 0x61, 0x96, - 0x9b, 0x71, 0xd7, 0x9f, - 0x82, 0x18, 0xa3, 0x92, - 0x59, 0xa7, 0xa2, 0x9a, - 0xab, 0xb2, 0xdb, 0xaf, - 0xc3, 0x1c, 0xb3, 0xd3, - 0x5d, 0xb7, 0xe3, 0x9e, - 0xbb, 0xf3, 0xdf, 0xbf}).as_span<const std::byte>())); + StringUtils::to_base64(as_bytes(std::span(message)))); REQUIRE("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" == - StringUtils::to_base64(gsl::make_span(std::vector<uint8_t>{ - 0x00, 0x10, 0x83, 0x10, - 0x51, 0x87, 0x20, 0x92, - 0x8b, 0x30, 0xd3, 0x8f, - 0x41, 0x14, 0x93, 0x51, - 0x55, 0x97, 0x61, 0x96, - 0x9b, 0x71, 0xd7, 0x9f, - 0x82, 0x18, 0xa3, 0x92, - 0x59, 0xa7, 0xa2, 0x9a, - 0xab, 0xb2, 0xdb, 0xaf, - 0xc3, 0x1c, 0xb3, 0xd3, - 0x5d, 0xb7, 0xe3, 0x9e, - 0xbb, 0xf3, 0xdf, 0xbf}).as_span<const std::byte>(), true /*url*/)); + StringUtils::to_base64(as_bytes(std::span(message)), true /*url*/)); } TEST_CASE("TestStringUtils::testBase64Decode", "[test base64 decode]") { @@ -536,8 +526,8 @@ TEST_CASE("StringUtils::removeFramingCharacters works correctly", "[removeFramin // ignore terminating \0 character template<size_t N> -gsl::span<const std::byte> from_cstring(const char (&str)[N]) { - return gsl::span<const char>(str, N-1).as_span<const std::byte>(); +std::span<const std::byte> from_cstring(const char (&str)[N]) { + return as_bytes(std::span<const char>(str, N-1)); } TEST_CASE("StringUtils::escapeUnprintableBytes", "[escapeUnprintableBytes]") { diff --git a/libminifi/test/unit/ZlibStreamTests.cpp b/libminifi/test/unit/ZlibStreamTests.cpp index 9d5cfcbce..c69db9871 100644 --- a/libminifi/test/unit/ZlibStreamTests.cpp +++ b/libminifi/test/unit/ZlibStreamTests.cpp @@ -24,6 +24,7 @@ #include "io/ZlibStream.h" #include "utils/gsl.h" #include "utils/StringUtils.h" +#include "utils/span.h" namespace io = org::apache::nifi::minifi::io; @@ -75,7 +76,7 @@ TEST_CASE("gzip compression and decompression", "[basic]") { decompressStream.write(compressBuffer.getBuffer()); REQUIRE(decompressStream.isFinished()); - REQUIRE(original == utils::span_to<std::string>(decompressBuffer.getBuffer().as_span<const char>())); + REQUIRE(original == utils::span_to<std::string>(utils::as_span<const char>(decompressBuffer.getBuffer()))); } TEST_CASE("gzip compression and decompression pipeline", "[basic]") { @@ -114,5 +115,5 @@ TEST_CASE("gzip compression and decompression pipeline", "[basic]") { compressStream.close(); REQUIRE(decompressStream.isFinished()); - REQUIRE(original == utils::span_to<std::string>(output.getBuffer().as_span<const char>())); + REQUIRE(original == utils::span_to<std::string>(utils::as_span<const char>(output.getBuffer()))); } diff --git a/nanofi/tests/CSite2SiteTests.cpp b/nanofi/tests/CSite2SiteTests.cpp index 5a6d6df87..2aabc0881 100644 --- a/nanofi/tests/CSite2SiteTests.cpp +++ b/nanofi/tests/CSite2SiteTests.cpp @@ -134,7 +134,7 @@ void accept_transfer(minifi::io::BaseStream* stream, const std::string& crcstr, void sunny_path_bootstrap(minifi::io::BaseStream* stream, TransferState& transfer_state, S2SReceivedData& s2s_data) { // Verify the magic string s2s_data.magic_string.resize(4); - stream->read(gsl::make_span(s2s_data.magic_string).as_span<std::byte>()); + stream->read(as_writable_bytes(std::span(s2s_data.magic_string))); uint8_t success = 0x14; stream->write(&success, 1); send_response_code(stream, 0x1); @@ -145,7 +145,7 @@ void sunny_path_bootstrap(minifi::io::BaseStream* stream, TransferState& transfe size_t read_len = 0; std::array<std::byte, 1000> handshake_data{}; while (!found_codec) { - const auto actual_len = stream->read(gsl::make_span(handshake_data).subspan(read_len)); + const auto actual_len = stream->read(std::span(handshake_data).subspan(read_len)); if(actual_len == 0 || minifi::io::isError(actual_len)) { continue; }
