34 StringSpan contentDisposition;
35 StringSpan contentType;
40 Result addHeader(StringSpan name, StringSpan value);
42 [[nodiscard]] StringSpan fieldName()
const {
return disposition.name; }
43 [[nodiscard]] StringSpan fileName()
const {
return disposition.fileName; }
44 [[nodiscard]]
bool isFormData()
const {
return disposition.isFormData(); }
45 [[nodiscard]]
bool hasFieldName()
const {
return disposition.hasName; }
46 [[nodiscard]]
bool hasFileName()
const {
return disposition.hasFileName; }
47 [[nodiscard]]
bool isField()
const {
return isFormData() and hasFieldName() and not hasFileName(); }
48 [[nodiscard]]
bool isFile()
const {
return isFormData() and hasFieldName() and hasFileName(); }
49 [[nodiscard]]
bool hasSafeFileName()
const;
50 [[nodiscard]]
bool isSafeFile()
const {
return isFile() and hasSafeFileName(); }
89 Result
parse(Span<const char> data,
size_t& readBytes, Span<const char>& parsedData);
92 char boundaryStorage[71] = {0};
93 char boundaryBuffer[128] = {0};
95 size_t tokenStart = 0;
96 size_t tokenLength = 0;
97 size_t globalStart = 0;
98 size_t globalLength = 0;
99 size_t matchIndex = 0;
101 int topLevelCoroutine = 0;
102 int nestedParserCoroutine = 0;
104 uint8_t boundaryMatchIndex = 0;
105 size_t boundaryCandidateLength = 0;
106 bool emitBoundaryCandidate =
false;
111 [[nodiscard]]
bool parseBoundary(
char currentChar);
112 [[nodiscard]]
bool parseHeaders(
char currentChar);
113 [[nodiscard]]
bool parseBody(
char currentChar);
116 [[nodiscard]]
bool parsePreamble(
char currentChar);
117 [[nodiscard]]
bool parseBoundaryLine(
char currentChar);
118 [[nodiscard]]
bool parseHeaderName(
char currentChar);
119 [[nodiscard]]
bool parseHeaderValue(
char currentChar);
120 [[nodiscard]]
bool parseBodyUntilBoundary(
char currentChar);
122 template <
bool (HttpMultipartParser::*Func)(
char), Token currentResult>
123 Result process(Span<const char>& data,
size_t& readBytes, Span<const char>& parsedData);
Zero-copy view of a Content-Disposition multipart header value.
Definition HttpMultipartParser.h:19
Result parse(Span< const char > data, size_t &readBytes, Span< const char > &parsedData)
Parse an incoming chunk of bytes, returning actually parsed span.