Updated and working.

This commit is contained in:
Brad Arant committed 2022-01-24 14:03:58 -08:00
1 parent d4148b0ab4
commit a37c4e6829
30 files changed
+422 -226

No files matched your search

+38 -41
View File
@@ -6,41 +6,48 @@
namespace coreutils {
IMFMessage::IMFMessage() : ZString() {
}
IMFMessage::IMFMessage() : ZString() {}
IMFMessage::IMFMessage(ZString &in) : ZString(in) {
while (!in.ifNext("\r\n")) {
headers.emplace_back(in);
}
while (!in.ifNext("\r\n"))
headers.emplace_back(in);
ZString type = getHeader("Content-Type");
int len = getHeader("Content-Length").asInteger();
if(len > 0) {
ZString block = in.readBlock(len);
if(type.equals("multipart/form-data"))
body = new IMFMultipart(block, getHeaderKeyPairValue("Content-Type", "boundary"));
else if(type.equals("text/plain"))
body = new IMFPlainText(block);
else
body = new IMFBody(block);
block = in.readBlock(len);
if(type.equals("multipart/form-data")) {
ZString boundary(getHeaderKeyPairValue("Content-Type", "boundary"));
multipart = IMFMultipart(block, boundary);
}
}
}
IMFMessage::~IMFMessage() {}
void IMFMessage::output(std::stringstream &out) {
for(IMFHeader header: headers) {
out << header.getKey() << ": " << header.getValue() << "\r\n";
}
out << "\r\n";
// for(IMFHeader header: headers) {
// out << header.getKey() << ": " << header.getValue() << "\r\n";
// }
out << newHeaders.str() << "\r\n";
}
void IMFMessage::addHeader(ZString key, ZString value) {
headers.emplace_back(key, value);
void IMFMessage::addHeader(const char *key, const char *value) {
newHeaders << key << ": " << value << "\r\n";
}
void IMFMessage::addHeader(const char *key, ZString value) {
headers.emplace_back(ZString(key), value);
void IMFMessage::addHeader(const char *key, std::string &value) {
newHeaders << key << ": " << value << "\r\n";
}
void IMFMessage::addHeader(ZString &key, ZString &value) {
newHeaders << key << ": " << value << "\r\n";
}
void IMFMessage::addHeader(const char *key, ZString &value) {
newHeaders << key << ": " << value << "\r\n";
}
ZString IMFMessage::getHeader(ZString key, bool valueOnly) {
@@ -51,7 +58,7 @@ namespace coreutils {
std::vector<ZString> split = ZString(value).split(";");
value = split[0];
}
return value;
return value;
}
}
return ZString();
@@ -64,37 +71,27 @@ namespace coreutils {
ZString IMFMessage::getHeaderKeyPairValue(ZString headerKey, ZString key) {
ZString value;
ZString psource(getHeader(headerKey, false));
std::vector<ZString> sourcep = psource.split(";");
for(ZString work: sourcep) {
for(ZString work: psource.split(";")) {
work.skipWhitespace();
ZString token = work.getTokenExclude("=");
if(work.ifNext((char *)"=")) {
if(work.ifNext("=")) {
if(token.equals(key)) {
if(work.ifNext((char *)"\"")) {
value = work.getTokenExclude((char *)"\"");
return value;
}
else {
value = work;
return value;
}
if(work.ifNext("\""))
value = work.getTokenExclude("\"");
else
value = work;
return value;
}
else
continue;
} else if (work.ifNext((char *)";") || work.ifNext((char *)" ")) {
} else if (work.ifNext(";") || work.ifNext(" ")) {
if(token.equals(key))
return ZString((char *)"true");
return ZString("true");
else
continue;
}
}
return ZString((char *)"false");
}
IMFBody * IMFMessage::getBody() {
return body;
return ZString();
}
}