windows-nt/Source/XPSP1/NT/admin/pchealth/upload/common/serializer.cpp

377 lines
10 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/******************************************************************************
Copyright (c) 1999 Microsoft Corporation
Module Name:
Serializer.cpp
Abstract:
This file contains the implementation of various Serializer In/Out operators.
Revision History:
Davide Massarenti (Dmassare) 04/20/99
created
******************************************************************************/
#include <stdafx.h>
/////////////////////////////////////////////////////////////////////////
namespace UploadLibrary
{
MPC::Serializer* SelectStream( MPC::Serializer& stream, MPC::Serializer_Text& streamText )
{
switch(stream.get_Flags())
{
case UPLOAD_LIBRARY_PROTOCOL_VERSION_CLT__TEXTONLY:
case UPLOAD_LIBRARY_PROTOCOL_VERSION_SRV__TEXTONLY: return &streamText;
}
return &stream;
}
////////////////////////////////////////////////////////////////////////////////
bool RequestHeader::VerifyClient() const
{
if(dwSignature == UPLOAD_LIBRARY_PROTOCOL_SIGNATURE)
{
switch(dwVersion)
{
case UPLOAD_LIBRARY_PROTOCOL_VERSION_CLT:
case UPLOAD_LIBRARY_PROTOCOL_VERSION_CLT__TEXTONLY: return true;
}
}
return false;
}
bool RequestHeader::VerifyServer() const
{
if(dwSignature == UPLOAD_LIBRARY_PROTOCOL_SIGNATURE)
{
switch(dwVersion)
{
case UPLOAD_LIBRARY_PROTOCOL_VERSION_SRV:
case UPLOAD_LIBRARY_PROTOCOL_VERSION_SRV__TEXTONLY: return true;
}
}
return false;
}
//
// In/Out operators for RequestHeader
//
HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ struct RequestHeader& rhVal )
{
__ULT_FUNC_ENTRY( "operator>> struct RequestHeader" );
HRESULT hr;
__MPC_EXIT_IF_METHOD_FAILS(hr, stream >> rhVal.dwSignature);
__MPC_EXIT_IF_METHOD_FAILS(hr, stream >> rhVal.dwVersion ); stream.put_Flags( rhVal.dwVersion );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in]*/ const struct RequestHeader& rhVal )
{
__ULT_FUNC_ENTRY( "operator<< struct RequestHeader" );
HRESULT hr;
__MPC_EXIT_IF_METHOD_FAILS(hr, stream << rhVal.dwSignature);
__MPC_EXIT_IF_METHOD_FAILS(hr, stream << rhVal.dwVersion ); stream.put_Flags( rhVal.dwVersion );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
//
// In/Out operators for Signature
//
HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ struct Signature& sigVal )
{
__ULT_FUNC_ENTRY( "operator>> struct Signature" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, pstream->read( &sigVal, sizeof(sigVal) ));
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in] */ const struct Signature& sigVal )
{
__ULT_FUNC_ENTRY( "operator<< struct Signature" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, pstream->write( &sigVal, sizeof(sigVal) ));
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
bool ServerResponse::MatchVersion( /*[in]*/ const ClientRequest& cr )
{
rhProlog.dwVersion = UPLOAD_LIBRARY_PROTOCOL_VERSION_SRV; // Set the version to the old default.
if(cr.rhProlog.VerifyClient())
{
switch(cr.rhProlog.dwVersion)
{
case UPLOAD_LIBRARY_PROTOCOL_VERSION_CLT : rhProlog.dwVersion = UPLOAD_LIBRARY_PROTOCOL_VERSION_SRV ; break;
case UPLOAD_LIBRARY_PROTOCOL_VERSION_CLT__TEXTONLY: rhProlog.dwVersion = UPLOAD_LIBRARY_PROTOCOL_VERSION_SRV__TEXTONLY; break;
default : return false; // Just in case...
}
return true;
}
return false;
}
//
// In/Out operators for ServerResponse
//
HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ struct ServerResponse& srVal )
{
__ULT_FUNC_ENTRY( "operator>> struct ServerResponse" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream;
__MPC_EXIT_IF_METHOD_FAILS(hr, stream >> srVal.rhProlog);
pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> srVal.fResponse );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> srVal.dwPosition );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in]*/ const struct ServerResponse& srVal )
{
__ULT_FUNC_ENTRY( "operator<< struct ServerResponse" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream;
__MPC_EXIT_IF_METHOD_FAILS(hr, stream << srVal.rhProlog);
pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << srVal.fResponse );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << srVal.dwPosition );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
//
// In/Out operators for ClientRequest
//
HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ struct ClientRequest& crVal )
{
__ULT_FUNC_ENTRY( "operator>> struct ClientRequest" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream;
__MPC_EXIT_IF_METHOD_FAILS(hr, stream >> crVal.rhProlog);
pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crVal.sigClient );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crVal.dwCommand );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in]*/ const struct ClientRequest& crVal )
{
__ULT_FUNC_ENTRY( "operator<< struct ClientRequest" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream;
__MPC_EXIT_IF_METHOD_FAILS(hr, stream << crVal.rhProlog);
pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crVal.sigClient );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crVal.dwCommand );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
//
// In/Out operators for ClientRequest_OpenSession
//
HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ struct ClientRequest_OpenSession& crosVal )
{
__ULT_FUNC_ENTRY( "operator>> struct ClientRequest_OpenSession" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crosVal.szJobID );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crosVal.szProviderID );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crosVal.szUsername );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crosVal.dwSize );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crosVal.dwSizeOriginal);
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crosVal.dwCRC );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crosVal.fCompressed );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in]*/ const struct ClientRequest_OpenSession& crosVal )
{
__ULT_FUNC_ENTRY( "operator<< struct ClientRequest_OpenSession" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crosVal.szJobID );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crosVal.szProviderID );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crosVal.szUsername );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crosVal.dwSize );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crosVal.dwSizeOriginal);
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crosVal.dwCRC );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crosVal.fCompressed );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
//
// In/Out operators for ClientRequest_WriteSession
//
HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ struct ClientRequest_WriteSession& crwsVal )
{
__ULT_FUNC_ENTRY( "operator>> struct ClientRequest_WriteSession" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crwsVal.szJobID );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crwsVal.dwOffset);
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) >> crwsVal.dwSize );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in]*/ const struct ClientRequest_WriteSession& crwsVal )
{
__ULT_FUNC_ENTRY( "operator<< struct ClientRequest_WriteSession" );
HRESULT hr;
MPC::Serializer_Text streamText( stream );
MPC::Serializer* pstream = SelectStream( stream, streamText );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crwsVal.szJobID );
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crwsVal.dwOffset);
__MPC_EXIT_IF_METHOD_FAILS(hr, (*pstream) << crwsVal.dwSize );
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
/////////////////////////////////////////////////////////////////////////
}; // namespace