#include <new>
#include <stdlib.h>
#include <string.h>
#include "RequestBufferReplacer.h"
RequestBufferReplacer::RequestBufferReplacer()
: fBuffer(NULL),
fBufferSize(0)
{
}
RequestBufferReplacer::~RequestBufferReplacer()
{
}
status_t
RequestBufferReplacer::ReplaceBuffer(Request* request)
{
if (!request)
return B_BAD_VALUE;
fBuffer = NULL;
fBufferSize = 0;
request->ShowAround(this);
if (fBufferSize == 0)
return B_OK;
RequestBuffer* requestBuffer = RequestBuffer::Create(fBufferSize);
if (!requestBuffer)
return B_NO_MEMORY;
fBuffer = (char*)requestBuffer->GetData();
request->ShowAround(this);
request->AttachBuffer(requestBuffer);
return B_OK;
}
void
RequestBufferReplacer::Visit(RequestMember* member, bool& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, int8& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, uint8& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, int16& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, uint16& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, int32& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, uint32& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, int64& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, uint64& data)
{
}
void
RequestBufferReplacer::Visit(RequestMember* member, Data& data)
{
int32 size = data.GetSize();
if (fBuffer) {
if (size > 0) {
memcpy(fBuffer, data.GetData(), size);
data.SetTo(fBuffer, size);
fBuffer += size;
}
} else
fBufferSize += size;
}
void
RequestBufferReplacer::Visit(RequestMember* member, StringData& data)
{
Visit(member, static_cast<Data&>(data));
}
void
RequestBufferReplacer::Visit(RequestMember* member, RequestMember& subMember)
{
subMember.ShowAround(this);
}
void
RequestBufferReplacer::Visit(RequestMember* member,
FlattenableRequestMember& subMember)
{
subMember.ShowAround(this);
}