/*---------------------------------------------------------------------- | PLT_HttpHelper::IsBodyStreamSeekable +---------------------------------------------------------------------*/ bool PLT_HttpHelper::IsBodyStreamSeekable(NPT_HttpMessage& message) { NPT_HttpEntity* entity = message.GetEntity(); NPT_InputStreamReference stream; if (!entity || NPT_FAILED(entity->GetInputStream(stream))) return true; // try to get current position and seek there NPT_Position position; if (NPT_FAILED(stream->Tell(position)) || NPT_FAILED(stream->Seek(position))) { return false; } return true; }
/*---------------------------------------------------------------------- | NPT_HttpMessage::SetBody +---------------------------------------------------------------------*/ NPT_Result PLT_HttpHelper::SetBody(NPT_HttpMessage& message, NPT_InputStreamReference stream, NPT_HttpEntity** entity /* = NULL */) { // get the entity NPT_HttpEntity* _entity = message.GetEntity(); if (_entity == NULL) { // no entity yet, create one message.SetEntity(_entity = new NPT_HttpEntity()); } if (entity) *entity =_entity; // set the entity body return _entity->SetInputStream(stream, true); }
/*---------------------------------------------------------------------- | PLT_HttpHelper::GetBody +---------------------------------------------------------------------*/ NPT_Result PLT_HttpHelper::GetBody(NPT_HttpMessage& message, NPT_String& body) { NPT_Result res; NPT_InputStreamReference stream; // get stream NPT_HttpEntity* entity = message.GetEntity(); if (!entity || NPT_FAILED(entity->GetInputStream(stream))) { return NPT_FAILURE; } // extract body NPT_StringOutputStream* output_stream = new NPT_StringOutputStream(&body); res = NPT_StreamToStreamCopy(*stream, *output_stream, 0, entity->GetContentLength()); delete output_stream; return res; }
/*---------------------------------------------------------------------- | NPT_HttpMessage::SetBody +---------------------------------------------------------------------*/ NPT_Result PLT_HttpHelper::SetBody(NPT_HttpMessage& message, NPT_InputStreamReference& stream, NPT_LargeSize len) { if (len == 0) { NPT_CHECK_SEVERE(stream->GetAvailable(len)); } // get the entity NPT_HttpEntity* entity = message.GetEntity(); if (entity == NULL) { // no entity yet, create one message.SetEntity(entity = new NPT_HttpEntity()); } // set the entity body entity->SetInputStream(stream); entity->SetContentLength(len); return NPT_SUCCESS; }