22#if !defined(DB88FC1DC9B0497C965F3CFB916FA93A)
23#define DB88FC1DC9B0497C965F3CFB916FA93A
25#if defined(HAVE_LIBCURL)
29#include <unordered_map>
33#include <miktex/Core/Debug>
34#include <miktex/Core/Session>
35#include <miktex/Trace/TraceStream>
37#include "CurlWebSession.h"
40MPM_INTERNAL_BEGIN_NAMESPACE;
43# pragma push_macro("min")
52 capacity = 10 * CURL_MAX_WRITE_SIZE;
53 buffer =
new unsigned char[capacity];
71 void Write(
const void* data, std::size_t count)
77 std::size_t num1 = std::min(count, capacity - tail);
78 std::size_t num2 = count - num1;
79 memcpy(buffer + tail, data, num1);
80 memcpy(buffer,
reinterpret_cast<const unsigned char*
>(data) + num1, num2);
81 tail = (tail + count) % capacity;
86 void Read(
void* data, std::size_t count)
92 std::size_t num1 = std::min(count, capacity - head);
93 std::size_t num2 = count - num1;
94 memcpy(data, buffer + head, num1);
95 memcpy(
reinterpret_cast<unsigned char*
>(data) + num1, buffer, num2);
96 head = (head + count) % capacity;
101 bool CanWrite(std::size_t n)
const
103 return size + n <= capacity;
107 std::size_t GetSize()
const
113 void Reserve(std::size_t newCapacity)
115 MIKTEX_ASSERT(newCapacity >= capacity);
116 unsigned char* newBuffer =
new unsigned char[newCapacity];
117 std::size_t oldSize = size;
118 Read(newBuffer, size);
121 capacity = newCapacity;
128 std::size_t GetCapacity()
const
134 bool CanRead(std::size_t n)
const
140 std::size_t capacity = 0;
141 std::size_t size = 0;
142 std::size_t head = 0;
143 std::size_t tail = 0;
144 unsigned char* buffer =
nullptr;
148# pragma pop_macro("min")
155 CurlWebFile(std::shared_ptr<CurlWebSession> webSession,
const std::string& url,
const std::unordered_map<std::string, std::string>& formData);
158 ~CurlWebFile()
override;
161 std::size_t
Read(
void* data, std::size_t n)
override;
164 void Close()
override;
167 static std::size_t WriteCallback(
char* data, std::size_t elemSize, std::size_t numElements,
void* pv);
173 bool initialized =
false;
176 std::shared_ptr<CurlWebSession> webSession;
182 std::string urlEncodedpostFields;
185 CircularBuffer buffer;
188 std::unique_ptr<MiKTeX::Trace::TraceStream> trace_mpm;
191MPM_INTERNAL_END_NAMESPACE;
@ Write
Write access.
Definition File.h:77
@ Read
Read access.
Definition File.h:75