virtual status_t FlushPendingData(void* output, size_t outputSize, size_t& bytesProduced) { size_t bytesConsumed; return _ProcessData(NULL, 0, output, outputSize, bytesConsumed, bytesProduced, true); }
virtual status_t ProcessData(const void* input, size_t inputSize, void* output, size_t outputSize, size_t& bytesConsumed, size_t& bytesProduced) { return _ProcessData(input, inputSize, output, outputSize, bytesConsumed, bytesProduced, false); }
void MPFD::Parser::AcceptSomeData(const char *data, const long length) { if (Boundary.length() > 0) { if(IsExternalDataBuffer){ throw MPFD::Exception("Accepting data, but external data was used."); } // Append data to existing accumulator if (DataCollector == NULL) { DataCollector = new char[length]; memcpy(DataCollector, data, length); DataCollectorLength = length; } else { DataCollector = (char*) realloc(DataCollector, DataCollectorLength + length); memcpy(DataCollector + DataCollectorLength, data, length); DataCollectorLength += length; } if (DataCollectorLength > MaxDataCollectorLength) { throw Exception("Maximum data collector length reached."); } _ProcessData(); } else { throw MPFD::Exception("Accepting data, but content type was not set."); } }
void MPFD::Parser::SetExternalDataBuffer(const char *data, const long length) { if (Boundary.length() > 0) { if(!IsExternalDataBuffer && DataCollectorLength > 0){ throw MPFD::Exception("Accepting data, but internal data was used."); } DataCollector = (char*)data; DataCollectorLength = length; _ProcessData(); } else { throw MPFD::Exception("Accepting data, but content type was not set."); } }