예제 #1
0
	virtual status_t FlushPendingData(void* output, size_t outputSize,
		size_t& bytesProduced)
	{
		size_t bytesConsumed;
		return _ProcessData(NULL, 0, output, outputSize,
			bytesConsumed, bytesProduced, true);
	}
예제 #2
0
	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);
	}
예제 #3
0
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.");
    }
}
예제 #4
0
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.");
    }
}