lib/curl: use std::span
This commit is contained in:
parent
062df65b1e
commit
1da09f5b1b
@ -132,7 +132,7 @@ private:
|
||||
|
||||
/* virtual methods from CurlResponseHandler */
|
||||
void OnHeaders(unsigned status, Curl::Headers &&headers) override;
|
||||
void OnData(ConstBuffer<void> data) override;
|
||||
void OnData(std::span<const std::byte> data) override;
|
||||
void OnEnd() override;
|
||||
void OnError(std::exception_ptr e) noexcept override;
|
||||
|
||||
@ -296,21 +296,21 @@ CurlInputStream::OnHeaders(unsigned status,
|
||||
}
|
||||
|
||||
void
|
||||
CurlInputStream::OnData(ConstBuffer<void> data)
|
||||
CurlInputStream::OnData(std::span<const std::byte> data)
|
||||
{
|
||||
assert(data.size > 0);
|
||||
assert(!data.empty());
|
||||
|
||||
const std::scoped_lock<Mutex> protect(mutex);
|
||||
|
||||
if (IsSeekPending())
|
||||
SeekDone();
|
||||
|
||||
if (data.size > GetBufferSpace()) {
|
||||
if (data.size() > GetBufferSpace()) {
|
||||
AsyncInputStream::Pause();
|
||||
throw CurlResponseHandler::Pause{};
|
||||
}
|
||||
|
||||
AppendToBuffer(data.data, data.size);
|
||||
AppendToBuffer(data.data(), data.size());
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -168,7 +168,7 @@ CurlResponseHandlerAdapter::DataReceived(const void *ptr,
|
||||
|
||||
try {
|
||||
FinishHeaders();
|
||||
handler.OnData({ptr, received_size});
|
||||
handler.OnData({(const std::byte *)ptr, received_size});
|
||||
return received_size;
|
||||
} catch (CurlResponseHandler::Pause) {
|
||||
return CURL_WRITEFUNC_PAUSE;
|
||||
|
@ -41,7 +41,7 @@ DelegateCurlResponseHandler::OnHeaders(unsigned status, Curl::Headers &&headers)
|
||||
}
|
||||
|
||||
void
|
||||
DelegateCurlResponseHandler::OnData(ConstBuffer<void> data)
|
||||
DelegateCurlResponseHandler::OnData(std::span<const std::byte> data)
|
||||
{
|
||||
parser->OnData(data);
|
||||
}
|
||||
|
@ -64,6 +64,6 @@ protected:
|
||||
|
||||
public:
|
||||
void OnHeaders(unsigned status, Curl::Headers &&headers) final;
|
||||
void OnData(ConstBuffer<void> data) final;
|
||||
void OnData(std::span<const std::byte> data) final;
|
||||
void OnEnd() final;
|
||||
};
|
||||
|
@ -30,9 +30,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "Headers.hxx"
|
||||
#include "util/ConstBuffer.hxx"
|
||||
|
||||
#include <cstddef>
|
||||
#include <exception>
|
||||
#include <span>
|
||||
|
||||
/**
|
||||
* Asynchronous response handler for a #CurlRequest.
|
||||
@ -58,7 +59,7 @@ public:
|
||||
*
|
||||
* May throw #Pause (but nothing else).
|
||||
*/
|
||||
virtual void OnData(ConstBuffer<void> data) = 0;
|
||||
virtual void OnData(std::span<const std::byte> data) = 0;
|
||||
|
||||
/**
|
||||
* The response has ended. The method is allowed to delete the
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2018 Max Kellermann <max.kellermann@gmail.com>
|
||||
* Copyright 2008-2022 Max Kellermann <max.kellermann@gmail.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -27,16 +27,15 @@
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef CURL_PARSER_HXX
|
||||
#define CURL_PARSER_HXX
|
||||
#pragma once
|
||||
|
||||
#include <span>
|
||||
|
||||
template<typename T> struct ConstBuffer;
|
||||
|
||||
class CurlResponseParser {
|
||||
public:
|
||||
virtual ~CurlResponseParser() = default;
|
||||
virtual void OnData(ConstBuffer<void> data) = 0;
|
||||
virtual void OnData(std::span<const std::byte> data) = 0;
|
||||
virtual void OnEnd() = 0;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "event/Call.hxx"
|
||||
#include "util/DeleteDisposer.hxx"
|
||||
#include "util/ScopeExit.hxx"
|
||||
#include "util/SpanCast.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
|
||||
#include <upnptools.h>
|
||||
@ -64,9 +65,9 @@ UPnPDeviceDirectory::Downloader::OnHeaders(unsigned status,
|
||||
}
|
||||
|
||||
void
|
||||
UPnPDeviceDirectory::Downloader::OnData(ConstBuffer<void> _data)
|
||||
UPnPDeviceDirectory::Downloader::OnData(std::span<const std::byte> src)
|
||||
{
|
||||
data.append((const char *)_data.data, _data.size);
|
||||
data.append(ToStringView(src));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -114,7 +114,7 @@ class UPnPDeviceDirectory final : UpnpCallback {
|
||||
|
||||
/* virtual methods from CurlResponseHandler */
|
||||
void OnHeaders(unsigned status, Curl::Headers &&headers) override;
|
||||
void OnData(ConstBuffer<void> data) override;
|
||||
void OnData(std::span<const std::byte> data) override;
|
||||
void OnEnd() override;
|
||||
void OnError(std::exception_ptr e) noexcept override;
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2018 Max Kellermann <max.kellermann@gmail.com>
|
||||
* Copyright 2008-2022 Max Kellermann <max.kellermann@gmail.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -31,9 +31,9 @@
|
||||
#include "util/ConstBuffer.hxx"
|
||||
|
||||
void
|
||||
YajlResponseParser::OnData(ConstBuffer<void> data)
|
||||
YajlResponseParser::OnData(std::span<const std::byte> data)
|
||||
{
|
||||
handle.Parse((const unsigned char *)data.data, data.size);
|
||||
handle.Parse((const unsigned char *)data.data(), data.size());
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2018 Max Kellermann <max.kellermann@gmail.com>
|
||||
* Copyright 2008-2022 Max Kellermann <max.kellermann@gmail.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -27,8 +27,7 @@
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef YAJL_RESPONSE_PARSER_HXX
|
||||
#define YAJL_RESPONSE_PARSER_HXX
|
||||
#pragma once
|
||||
|
||||
#include "Handle.hxx"
|
||||
#include "lib/curl/Parser.hxx"
|
||||
@ -45,8 +44,6 @@ public:
|
||||
:handle(std::forward<Args>(args)...) {}
|
||||
|
||||
/* virtual methods fro CurlResponseParser */
|
||||
void OnData(ConstBuffer<void> data) final;
|
||||
void OnData(std::span<const std::byte> data) final;
|
||||
void OnEnd() override;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "time/Parser.hxx"
|
||||
#include "util/ASCII.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
#include "util/SpanCast.hxx"
|
||||
#include "util/StringCompare.hxx"
|
||||
#include "util/StringFormat.hxx"
|
||||
#include "util/StringView.hxx"
|
||||
@ -307,9 +308,9 @@ private:
|
||||
throw std::runtime_error("Unexpected Content-Type from WebDAV server");
|
||||
}
|
||||
|
||||
void OnData(ConstBuffer<void> _data) final {
|
||||
const auto data = ConstBuffer<char>::FromVoid(_data);
|
||||
Parse(data.data, data.size);
|
||||
void OnData(std::span<const std::byte> _src) final {
|
||||
auto src = ToStringView(_src);
|
||||
Parse(src.data(), src.size());
|
||||
}
|
||||
|
||||
void OnEnd() final {
|
||||
|
@ -48,9 +48,9 @@ public:
|
||||
i.first.c_str(), i.second.c_str());
|
||||
}
|
||||
|
||||
void OnData(ConstBuffer<void> data) override {
|
||||
void OnData(std::span<const std::byte> data) override {
|
||||
try {
|
||||
if (fwrite(data.data, data.size, 1, stdout) != 1)
|
||||
if (fwrite(data.data(), data.size(), 1, stdout) != 1)
|
||||
throw std::runtime_error("Failed to write");
|
||||
} catch (...) {
|
||||
OnError(std::current_exception());
|
||||
|
Loading…
Reference in New Issue
Block a user