Introduces StreamReader to accumulate socket data delivered in arbitrary chunks into one buffer, so a Parser can build an object (a line, a header block, a MIME boundary) that spans any number of packets without losing its place. Parser is redesigned around this: no longer inherits MString (was redundant with its own buffer member), takes a StreamReader&, and drives a resumable COMPLETE/INCOMPLETE/DATA_AVAIL state-machine protocol via doParse(). LineParser, IMFHeader, and IMFBoundary are rewritten as real, working resumable parsers against the shared buffer instead of the previous non-compiling stubs (mismatched constructors/return types, a syntax error, checkParse() never implemented). IMFFormData is left as the stub it already was, just restored to compiling against the new IMFHeader signature - fully wiring it up needs IMFMultipart/IMFText migrated to StreamReader too, out of scope here. Verified with real runtime tests (not just compilation) covering data split mid-line, mid-CRLF, mid-header-fold, and mid-boundary-marker across separate feed() calls, plus StreamReader::compact(). Along the way fixed a header-value bug (space after ':' wasn't skipped) and a double cursor-offset subtraction bug in two places caused by forgetting that ZString::getLength() is already cursor-relative, not the raw buffer size. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
19 lines
700 B
C++
19 lines
700 B
C++
#include "IMFFormData.h"
|
|
#include "IMFMessage.h"
|
|
#include "IMFText.h"
|
|
|
|
namespace coreutils {
|
|
|
|
IMFFormData::IMFFormData(int fd, ZString boundary) {
|
|
// TODO: IMFHeader now reads through a StreamReader (see the Parser/
|
|
// StreamReader redesign) instead of a raw fd. This constructor - and
|
|
// IMFMultipart, which still constructs IMFFormData from a bare fd -
|
|
// needs migrating to StreamReader together before header parsing can
|
|
// be wired back in here. Out of scope for that redesign pass; this
|
|
// class was already an unfinished stub (constructed objects were
|
|
// discarded, nothing was stored) before this change.
|
|
IMFText text(fd, boundary);
|
|
}
|
|
|
|
}
|