From 11f396a749dc2efde90f606c32ccf0973427fe78 Mon Sep 17 00:00:00 2001 From: brad Arant Date: Fri, 21 Feb 2025 13:22:57 -0800 Subject: [PATCH] worked on IMF smartbuffers. --- IMFFormData.cpp | 15 +++------------ IMFFormData.h | 9 +++------ IMFHeader.cpp | 30 ++++-------------------------- IMFHeader.h | 18 +++++------------- IMFMultipart.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++- IMFMultipart.h | 23 ++++++++++++----------- 6 files changed, 72 insertions(+), 69 deletions(-) diff --git a/IMFFormData.cpp b/IMFFormData.cpp index 1b36b42..eed1231 100644 --- a/IMFFormData.cpp +++ b/IMFFormData.cpp @@ -4,18 +4,9 @@ namespace coreutils { - IMFFormData::IMFFormData() {} - - IMFFormData::IMFFormData(ZString &in, ZString &boundary) : IMFMultipart(in, boundary) {} - - ZString IMFFormData::getByName(ZString &name) { - for(ZString section: sections) { - IMFMessage message(section); - if(message.getHeaderKeyPairValue("Content-Disposition", ("name")).equals(name)) { - return message.multipart; - } - } - return ZString(); + IMFFormData::IMFFormData(int fd, ZString boundary) { + IMFHeader header(fd); + IMFText text(fd, boundary); } } diff --git a/IMFFormData.h b/IMFFormData.h index 9718888..6d93e67 100644 --- a/IMFFormData.h +++ b/IMFFormData.h @@ -1,17 +1,14 @@ #ifndef __IMFFormData_h__ # define __IMFFormData_h__ -# include "IMFMultipart.h" +#include "ZString.h" namespace coreutils { - class IMFFormData: public IMFMultipart { + class IMFFormData { public: - IMFFormData(); - IMFFormData(ZString &in, ZString &boundary); - - ZString getByName(ZString &name); + IMFFormData(int fd, ZString boundary); }; diff --git a/IMFHeader.cpp b/IMFHeader.cpp index aff6421..71daaec 100644 --- a/IMFHeader.cpp +++ b/IMFHeader.cpp @@ -5,33 +5,11 @@ namespace coreutils { - IMFHeader::IMFHeader(ZString &in) : ZString(in) { - - key = in.getTokenInclude("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_0123456789"); - std::cout << "key: [" << key << "]" << std::endl; - if(key.getLength() != 0) { - if(!in.ifNext(":")) - throw coreutils::Exception("Invalid character in expected header token."); - in.skipWhitespace(); - value = in.goeolwithContinuation(); - std::cout << "header: [" << value << "]" << std::endl; + IMFHeader::IMFHeader(int fd) { + while(1) { + headers.emplace(fd); } - else if(in.skipWhitespace() > 0) {} - else if(in.str() == "") {} - } - - IMFHeader::IMFHeader(ZString key, ZString value) : ZString(), key(key), value(value) {} - - ZString IMFHeader::getKey() { - return key; - } - - ZString IMFHeader::getValue() { - return value; - } - - void IMFHeader::output(std::stringstream &out) { - out << key << ": " << value << "\r\n"; + } } \ No newline at end of file diff --git a/IMFHeader.h b/IMFHeader.h index 9b8bc38..505ac70 100644 --- a/IMFHeader.h +++ b/IMFHeader.h @@ -1,26 +1,18 @@ #ifndef __IMFHeader_h__ #define __IMFHeader_h__ -#include "ZString.h" -#include +#include namespace coreutils { - class IMFHeader : public ZString { + class IMFHeader { public: - IMFHeader(ZString &in); - IMFHeader(ZString key, ZString value); - - ZString getKey(); - ZString getValue(); - - void output(std::stringstream &out); + IMFHeader(int fd); private: - ZString key; - ZString value; - + std::vector headers; + }; } diff --git a/IMFMultipart.cpp b/IMFMultipart.cpp index a81057b..61a7ec2 100644 --- a/IMFMultipart.cpp +++ b/IMFMultipart.cpp @@ -3,8 +3,52 @@ namespace coreutils { - IMFMultipart::IMFMultipart() {} + IMFMultipart::IMFMultipart(int fd, int length) { + int ch = 0; + int rc = 0; + while((ch != '\r') && (ch != '\n')) { + rc = ::read(fd, &ch, 1); + --length; + if((ch != '\r') && (ch != '\n')) + boundary.write(ch); + } + if(ch == '\r') { + rc = ::read(fd, &ch, 1); + --length; + } + while(1) { + sections.emplace_back(fd, boundary); + rc = ::read(fd, &ch, 1); + --length; + if(ch == '-') { + rc = ::read(fd, &ch, 1); + --length; + if(ch == '-') { + break; + } + } + + } + rc = ::read(fd, &ch, 1); + --length; + if(ch == '\r') { + rc = ::read(fd, &ch, 1); + --length; + if(ch == '\n') { + } + } + + } + + + + + + + + + IMFMultipart::IMFMultipart(ZString &in, ZString &boundary) { Log(LOG_DEBUG_1) << in; std::stringstream temp; diff --git a/IMFMultipart.h b/IMFMultipart.h index e8d4a59..92d642f 100644 --- a/IMFMultipart.h +++ b/IMFMultipart.h @@ -1,26 +1,27 @@ #ifndef __IMFMultipart_h__ #define __IMFMultipart_h__ -#include "ZString.h" +#include "MString.h" +#include namespace coreutils { - class IMFMultipart: public ZString { + class IMFMultipart { public: - IMFMultipart(); - IMFMultipart(ZString &in, ZString &boundary); + IMFMultipart(int fd, int length); - std::string toString(); - int getCount(); - ZString getSectionAt(int index); +// std::string toString(); +// int getCount(); +// ZString getSectionAt(int index); - protected: - std::vector sections; +// protected: +// std::vector sections; private: - char *boundary; - + MString boundary; + std::vector sections; + }; }