mirror of
https://github.com/Telecominfraproject/wlan-cloud-owprov.git
synced 2025-10-30 02:02:36 +00:00
52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
//
|
|
// Created by stephane bourque on 2022-10-26.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include "Poco/CountingStream.h"
|
|
#include "Poco/Net/MessageHeader.h"
|
|
#include "Poco/Net/PartHandler.h"
|
|
#include "Poco/NullStream.h"
|
|
#include "Poco/StreamCopier.h"
|
|
#include <string>
|
|
|
|
namespace OpenWifi {
|
|
class RESTAPI_PartHandler : public Poco::Net::PartHandler {
|
|
public:
|
|
RESTAPI_PartHandler() : _length(0) {}
|
|
|
|
inline void handlePart(const Poco::Net::MessageHeader &header,
|
|
std::istream &stream) override {
|
|
_type = header.get("Content-Type", "(unspecified)");
|
|
if (header.has("Content-Disposition")) {
|
|
std::string disp;
|
|
Poco::Net::NameValueCollection params;
|
|
Poco::Net::MessageHeader::splitParameters(header["Content-Disposition"], disp,
|
|
params);
|
|
_name = params.get("name", "(unnamed)");
|
|
_fileName = params.get("filename", "(unnamed)");
|
|
}
|
|
|
|
Poco::CountingInputStream istr(stream);
|
|
Poco::NullOutputStream ostr;
|
|
Poco::StreamCopier::copyStream(istr, ostr);
|
|
_length = (int)istr.chars();
|
|
}
|
|
|
|
[[nodiscard]] inline int length() const { return _length; }
|
|
|
|
[[nodiscard]] inline const std::string &name() const { return _name; }
|
|
|
|
[[nodiscard]] inline const std::string &fileName() const { return _fileName; }
|
|
|
|
[[nodiscard]] inline const std::string &contentType() const { return _type; }
|
|
|
|
private:
|
|
int _length;
|
|
std::string _type;
|
|
std::string _name;
|
|
std::string _fileName;
|
|
};
|
|
} // namespace OpenWifi
|