#include "MemBuf.h"
#include "Parsing.h"
-ChunkedCodingParser::Step ChunkedCodingParser::psChunkSize = &ChunkedCodingParser::parseChunkSize;
-ChunkedCodingParser::Step ChunkedCodingParser::psUnusedChunkExtension = &ChunkedCodingParser::parseUnusedChunkExtension;
-ChunkedCodingParser::Step ChunkedCodingParser::psLastChunkExtension = &ChunkedCodingParser::parseLastChunkExtension;
-ChunkedCodingParser::Step ChunkedCodingParser::psChunkBody = &ChunkedCodingParser::parseChunkBody;
-ChunkedCodingParser::Step ChunkedCodingParser::psChunkEnd = &ChunkedCodingParser::parseChunkEnd;
-ChunkedCodingParser::Step ChunkedCodingParser::psTrailer = &ChunkedCodingParser::parseTrailer;
-ChunkedCodingParser::Step ChunkedCodingParser::psMessageEnd = &ChunkedCodingParser::parseMessageEnd;
-
-ChunkedCodingParser::ChunkedCodingParser()
+Http::One::ChunkedCodingParser::Step Http::One::ChunkedCodingParser::psChunkSize = &Http::One::ChunkedCodingParser::parseChunkSize;
+Http::One::ChunkedCodingParser::Step Http::One::ChunkedCodingParser::psUnusedChunkExtension = &Http::One::ChunkedCodingParser::parseUnusedChunkExtension;
+Http::One::ChunkedCodingParser::Step Http::One::ChunkedCodingParser::psLastChunkExtension = &Http::One::ChunkedCodingParser::parseLastChunkExtension;
+Http::One::ChunkedCodingParser::Step Http::One::ChunkedCodingParser::psChunkBody = &Http::One::ChunkedCodingParser::parseChunkBody;
+Http::One::ChunkedCodingParser::Step Http::One::ChunkedCodingParser::psChunkEnd = &Http::One::ChunkedCodingParser::parseChunkEnd;
+Http::One::ChunkedCodingParser::Step Http::One::ChunkedCodingParser::psTrailer = &Http::One::ChunkedCodingParser::parseTrailer;
+Http::One::ChunkedCodingParser::Step Http::One::ChunkedCodingParser::psMessageEnd = &Http::One::ChunkedCodingParser::parseMessageEnd;
+
+Http::One::ChunkedCodingParser::ChunkedCodingParser()
{
reset();
}
-void ChunkedCodingParser::reset()
+void
+Http::One::ChunkedCodingParser::reset()
{
theStep = psChunkSize;
theChunkSize = theLeftBodySize = 0;
inQuoted = inSlashed = false;
}
-bool ChunkedCodingParser::parse(MemBuf *rawData, MemBuf *parsedContent)
+bool
+Http::One::ChunkedCodingParser::parse(MemBuf *rawData, MemBuf *parsedContent)
{
Must(rawData && parsedContent);
theIn = rawData;
return theStep == psMessageEnd;
}
-bool ChunkedCodingParser::needsMoreData() const
+bool
+Http::One::ChunkedCodingParser::needsMoreData() const
{
return doNeedMoreData;
}
-bool ChunkedCodingParser::needsMoreSpace() const
+bool
+Http::One::ChunkedCodingParser::needsMoreSpace() const
{
assert(theOut);
return theStep == psChunkBody && !theOut->hasPotentialSpace();
}
-bool ChunkedCodingParser::mayContinue() const
+bool
+Http::One::ChunkedCodingParser::mayContinue() const
{
return !needsMoreData() && !needsMoreSpace() && theStep != psMessageEnd;
}
-void ChunkedCodingParser::parseChunkSize()
+void
+Http::One::ChunkedCodingParser::parseChunkSize()
{
Must(theChunkSize <= 0); // Should(), really
throw TexcHere("corrupted chunk size");
}
-void ChunkedCodingParser::parseUnusedChunkExtension()
+void
+Http::One::ChunkedCodingParser::parseUnusedChunkExtension()
{
size_t crlfBeg = 0;
size_t crlfEnd = 0;
}
}
-void ChunkedCodingParser::parseChunkBody()
+void
+Http::One::ChunkedCodingParser::parseChunkBody()
{
Must(theLeftBodySize > 0); // Should, really
Must(needsMoreData() || needsMoreSpace());
}
-void ChunkedCodingParser::parseChunkEnd()
+void
+Http::One::ChunkedCodingParser::parseChunkEnd()
{
Must(theLeftBodySize == 0); // Should(), really
doNeedMoreData = true;
}
-void ChunkedCodingParser::parseTrailer()
+void
+Http::One::ChunkedCodingParser::parseTrailer()
{
Must(theChunkSize == 0); // Should(), really
parseTrailerHeader();
}
-void ChunkedCodingParser::parseTrailerHeader()
+void
+Http::One::ChunkedCodingParser::parseTrailerHeader()
{
size_t crlfBeg = 0;
size_t crlfEnd = 0;
doNeedMoreData = true;
}
-void ChunkedCodingParser::parseMessageEnd()
+void
+Http::One::ChunkedCodingParser::parseMessageEnd()
{
// termination step, should not be called
Must(false); // Should(), really
}
/// Finds next CRLF. Does not store parsing state.
-bool ChunkedCodingParser::findCrlf(size_t &crlfBeg, size_t &crlfEnd)
+bool
+Http::One::ChunkedCodingParser::findCrlf(size_t &crlfBeg, size_t &crlfEnd)
{
bool quoted = false;
bool slashed = false;
/// Finds next CRLF. Parsing state stored in quoted and slashed
/// parameters. Incremental: can resume when more data is available.
-bool ChunkedCodingParser::findCrlf(size_t &crlfBeg, size_t &crlfEnd, bool "ed, bool &slashed)
+bool
+Http::One::ChunkedCodingParser::findCrlf(size_t &crlfBeg, size_t &crlfEnd, bool "ed, bool &slashed)
{
// XXX: This code was copied, with permission, from another software.
// There is a similar and probably better code inside httpHeaderParse
}
// chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
-void ChunkedCodingParser::parseLastChunkExtension()
+void
+Http::One::ChunkedCodingParser::parseLastChunkExtension()
{
size_t crlfBeg = 0;
size_t crlfEnd = 0;
* Please see the COPYING and CONTRIBUTORS files for details.
*/
-#ifndef SQUID_CHUNKEDCODINGPARSER_H
-#define SQUID_CHUNKEDCODINGPARSER_H
+#ifndef SQUID_SRC_HTTP_ONE_CHUNKEDCODINGPARSER_H
+#define SQUID_SRC_HTTP_ONE_CHUNKEDCODINGPARSER_H
+
+#include "http/one/forward.h"
class MemBuf;
+namespace Http
+{
+namespace One
+{
+
/**
- \ingroup ChunkEncodingAPI Chunked Encoding API
- \par
* ChunkedCodingParser is an incremental parser for chunked transfer coding
- * used by HTTP and ICAP. The parser shovels content bytes from the raw
+ * defined in RFC 7230 section 4.1.
+ * http://tools.ietf.org/html/rfc7230#section-4.1
+ *
+ * The parser shovels content bytes from the raw
* input buffer into the content output buffer, both caller-supplied.
* Ignores chunk extensions except for ICAP's ieof.
* Has a trailer-handling placeholder.
bool needsMoreSpace() const;
private:
- typedef void (ChunkedCodingParser::*Step)();
+ typedef void (Http1::ChunkedCodingParser::*Step)();
private:
bool mayContinue() const;
int64_t useOriginBody;
};
-#endif /* SQUID_CHUNKEDCODINGPARSER_H */
+} // namespace One
+} // namespace Http
+
+#endif /* SQUID_SRC_HTTP_ONE_CHUNKEDCODINGPARSER_H */