You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
888 lines
25 KiB
888 lines
25 KiB
/***************************************************************************
|
|
*
|
|
* Copyright (C) 2001-2002 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: spcallbackobj.cpp
|
|
*
|
|
* Content: Interprocess communication object object class.
|
|
*
|
|
* History:
|
|
* Date By Reason
|
|
* ======== ======== =========
|
|
* 04/25/01 VanceO Created.
|
|
*
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#include "dp8simi.h"
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// Defines
|
|
//=============================================================================
|
|
#define REGKEY_DP8SIM L"Software\\Microsoft\\DirectPlay\\DP8Sim"
|
|
#define REGKEY_VALUE_DEFAULTSENDPARAMETERS L"DefaultSendParameters"
|
|
#define REGKEY_VALUE_DEFAULTRECEIVEPARAMETERS L"DefaultReceiveParameters"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::CDP8SimIPC"
|
|
//=============================================================================
|
|
// CDP8SimIPC constructor
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Initializes the new CDP8SimIPC object.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: None (the object).
|
|
//=============================================================================
|
|
CDP8SimIPC::CDP8SimIPC(void)
|
|
{
|
|
this->m_Sig[0] = 'S';
|
|
this->m_Sig[1] = 'I';
|
|
this->m_Sig[2] = 'M';
|
|
this->m_Sig[3] = 'I';
|
|
|
|
this->m_hMutex = NULL;
|
|
this->m_hFileMapping = NULL;
|
|
this->m_pdp8ssm = NULL;
|
|
} // CDP8SimIPC::CDP8SimIPC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::~CDP8SimIPC"
|
|
//=============================================================================
|
|
// CDP8SimIPC destructor
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Frees the CDP8SimIPC object.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
CDP8SimIPC::~CDP8SimIPC(void)
|
|
{
|
|
DNASSERT(this->m_hMutex == NULL);
|
|
DNASSERT(this->m_hFileMapping == NULL);
|
|
DNASSERT(this->m_pdp8ssm == NULL);
|
|
|
|
|
|
//
|
|
// For grins, change the signature before deleting the object.
|
|
//
|
|
this->m_Sig[3] = 'c';
|
|
} // CDP8SimIPC::~CDP8SimIPC
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::Initialize"
|
|
//=============================================================================
|
|
// CDP8SimIPC::Initialize
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Establishes the IPC connection.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: HRESULT
|
|
//=============================================================================
|
|
HRESULT CDP8SimIPC::Initialize(void)
|
|
{
|
|
HRESULT hr = DP8SIM_OK;
|
|
DP8SIM_PARAMETERS dp8spSend;
|
|
DP8SIM_PARAMETERS dp8spReceive;
|
|
BOOL fLockedSharedMemory = FALSE;
|
|
|
|
|
|
DPFX(DPFPREP, 5, "(0x%p) Enter", this);
|
|
|
|
|
|
//
|
|
// Validate (actually assert) the object.
|
|
//
|
|
DNASSERT(this->IsValidObject());
|
|
|
|
|
|
DNASSERT(this->m_hMutex == NULL);
|
|
DNASSERT(this->m_hFileMapping == NULL);
|
|
|
|
|
|
//
|
|
// This defaults to having every option turned off and setting the packet
|
|
// header size to IP + UDP.
|
|
//
|
|
|
|
ZeroMemory(&dp8spSend, sizeof(dp8spSend));
|
|
dp8spSend.dwSize = sizeof(dp8spSend);
|
|
//dp8spSend.dwFlags = 0;
|
|
dp8spSend.dwPacketHeaderSize = DP8SIMPACKETHEADERSIZE_IP_UDP;
|
|
//dp8spSend.dwBandwidthBPS = 0;
|
|
//dp8spSend.fPacketLossPercent = 0.0;
|
|
//dp8spSend.dwMinLatencyMS = 0;
|
|
//dp8spSend.dwMaxLatencyMS = 0;
|
|
|
|
ZeroMemory(&dp8spReceive, sizeof(dp8spReceive));
|
|
dp8spReceive.dwSize = sizeof(dp8spReceive);
|
|
//dp8spReceive.dwFlags = 0;
|
|
dp8spReceive.dwPacketHeaderSize = DP8SIMPACKETHEADERSIZE_IP_UDP;
|
|
//dp8spReceive.dwBandwidthBPS = 0;
|
|
//dp8spReceive.fPacketLossPercent = 0.0;
|
|
//dp8spReceive.dwMinLatencyMS = 0;
|
|
//dp8spReceive.dwMaxLatencyMS = 0;
|
|
|
|
|
|
//
|
|
// Try overriding with registry settings.
|
|
//
|
|
this->LoadDefaultParameters(&dp8spSend, &dp8spReceive);
|
|
|
|
|
|
//
|
|
// Create/open the IPC mutex.
|
|
//
|
|
if (DNGetOSType() == VER_PLATFORM_WIN32_NT)
|
|
{
|
|
this->m_hMutex = CreateMutex(DNGetNullDacl(), FALSE, _T("Global\\") DP8SIM_IPC_MUTEXNAME);
|
|
}
|
|
else
|
|
{
|
|
this->m_hMutex = CreateMutex(DNGetNullDacl(), FALSE, DP8SIM_IPC_MUTEXNAME);
|
|
}
|
|
if (this->m_hMutex == NULL)
|
|
{
|
|
hr = GetLastError();
|
|
DPFX(DPFPREP, 0, "Couldn't create shared memory mutex!");
|
|
goto Failure;
|
|
}
|
|
|
|
|
|
//
|
|
// Create/open the IPC memory mapped file.
|
|
//
|
|
if (DNGetOSType() == VER_PLATFORM_WIN32_NT)
|
|
{
|
|
this->m_hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE,
|
|
DNGetNullDacl(),
|
|
PAGE_READWRITE,
|
|
0,
|
|
sizeof(DP8SIM_SHAREDMEMORY),
|
|
_T("Global\\") DP8SIM_IPC_FILEMAPPINGNAME);
|
|
}
|
|
else
|
|
{
|
|
this->m_hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE,
|
|
DNGetNullDacl(),
|
|
PAGE_READWRITE,
|
|
0,
|
|
sizeof(DP8SIM_SHAREDMEMORY),
|
|
DP8SIM_IPC_FILEMAPPINGNAME);
|
|
}
|
|
if (this->m_hFileMapping == NULL)
|
|
{
|
|
hr = GetLastError();
|
|
DPFX(DPFPREP, 0, "Couldn't create shared memory mapped file!");
|
|
goto Failure;
|
|
}
|
|
|
|
|
|
//
|
|
// Create a view of the memory mapped file.
|
|
//
|
|
this->m_pdp8ssm = (DP8SIM_SHAREDMEMORY*) MapViewOfFile(this->m_hFileMapping,
|
|
(FILE_MAP_READ | FILE_MAP_WRITE),
|
|
0,
|
|
0,
|
|
0);
|
|
if (this->m_pdp8ssm == NULL)
|
|
{
|
|
hr = GetLastError();
|
|
DPFX(DPFPREP, 0, "Couldn't map view of shared memory!");
|
|
goto Failure;
|
|
}
|
|
|
|
|
|
|
|
this->LockSharedMemory();
|
|
fLockedSharedMemory = TRUE;
|
|
|
|
//
|
|
// Determine whether we need to initialize the shared memory or not.
|
|
//
|
|
if (this->m_pdp8ssm->dwVersion == 0)
|
|
{
|
|
this->m_pdp8ssm->dwVersion = DP8SIM_IPC_VERSION;
|
|
CopyMemory(&(this->m_pdp8ssm->dp8spSend), &dp8spSend, sizeof(dp8spSend));
|
|
CopyMemory(&(this->m_pdp8ssm->dp8spReceive), &dp8spReceive, sizeof(dp8spReceive));
|
|
|
|
//ZeroMemory(&(this->m_pdp8ssm->dp8ssSend), sizeof(this->m_pdp8ssm->dp8ssSend));
|
|
this->m_pdp8ssm->dp8ssSend.dwSize = sizeof(this->m_pdp8ssm->dp8ssSend);
|
|
//ZeroMemory(&(this->m_pdp8ssm->dp8ssReceive), sizeof(this->m_pdp8ssm->dp8ssReceive));
|
|
this->m_pdp8ssm->dp8ssReceive.dwSize = sizeof(this->m_pdp8ssm->dp8ssReceive);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// It's already initialized. Make sure we know how to play with the
|
|
// format given.
|
|
//
|
|
if (this->m_pdp8ssm->dwVersion != DP8SIM_IPC_VERSION)
|
|
{
|
|
DPFX(DPFPREP, 0, "Shared memory was initialized by a different version!");
|
|
hr = DP8SIMERR_MISMATCHEDVERSION;
|
|
goto Failure;
|
|
}
|
|
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8spSend.dwSize = sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(this->m_pdp8ssm->dp8spReceive.dwSize = sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(this->m_pdp8ssm->dp8ssSend.dwSize = sizeof(DP8SIM_STATISTICS));
|
|
DNASSERT(this->m_pdp8ssm->dp8ssReceive.dwSize = sizeof(DP8SIM_STATISTICS));
|
|
}
|
|
|
|
this->UnlockSharedMemory();
|
|
fLockedSharedMemory = FALSE;
|
|
|
|
|
|
Exit:
|
|
|
|
DPFX(DPFPREP, 5, "(0x%p) Returning: [0x%lx]", this, hr);
|
|
|
|
return hr;
|
|
|
|
|
|
Failure:
|
|
|
|
if (fLockedSharedMemory)
|
|
{
|
|
this->UnlockSharedMemory();
|
|
fLockedSharedMemory = FALSE;
|
|
}
|
|
|
|
if (this->m_pdp8ssm != NULL)
|
|
{
|
|
UnmapViewOfFile(this->m_pdp8ssm);
|
|
this->m_pdp8ssm = NULL;
|
|
}
|
|
|
|
if (this->m_hFileMapping != NULL)
|
|
{
|
|
CloseHandle(this->m_hFileMapping);
|
|
this->m_hFileMapping = NULL;
|
|
}
|
|
|
|
if (this->m_hMutex != NULL)
|
|
{
|
|
CloseHandle(this->m_hMutex);
|
|
this->m_hMutex = NULL;
|
|
}
|
|
|
|
goto Exit;
|
|
} // CDP8SimIPC::Initialize
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::Close"
|
|
//=============================================================================
|
|
// CDP8SimIPC::Close
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Closes the IPC connection.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::Close(void)
|
|
{
|
|
DPFX(DPFPREP, 5, "(0x%p) Enter", this);
|
|
|
|
|
|
if (this->m_pdp8ssm != NULL)
|
|
{
|
|
//
|
|
// Try overriding with registry settings.
|
|
//
|
|
this->SaveDefaultParameters(&(this->m_pdp8ssm->dp8spSend),
|
|
&(this->m_pdp8ssm->dp8spReceive));
|
|
|
|
|
|
UnmapViewOfFile(this->m_pdp8ssm);
|
|
this->m_pdp8ssm = NULL;
|
|
}
|
|
|
|
if (this->m_hFileMapping != NULL)
|
|
{
|
|
CloseHandle(this->m_hFileMapping);
|
|
this->m_hFileMapping = NULL;
|
|
}
|
|
|
|
if (this->m_hMutex != NULL)
|
|
{
|
|
CloseHandle(this->m_hMutex);
|
|
this->m_hMutex = NULL;
|
|
}
|
|
|
|
|
|
DPFX(DPFPREP, 5, "(0x%p) Leave", this);
|
|
} // CDP8SimIPC::Close
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::GetAllParameters"
|
|
//=============================================================================
|
|
// CDP8SimIPC::GetAllParameters
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Retrieves the current send and receive settings.
|
|
//
|
|
// Arguments:
|
|
// DP8SIM_PARAMETERS * pdp8spSend - Place to store send parameters
|
|
// retrieved.
|
|
// DP8SIM_PARAMETERS * pdp8spReceive - Place to store receive parameters
|
|
// retrieved.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::GetAllParameters(DP8SIM_PARAMETERS * const pdp8spSend,
|
|
DP8SIM_PARAMETERS * const pdp8spReceive)
|
|
{
|
|
DNASSERT(pdp8spSend != NULL);
|
|
DNASSERT(pdp8spSend->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(pdp8spReceive != NULL);
|
|
DNASSERT(pdp8spReceive->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8spSend.dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
CopyMemory(pdp8spSend, &(this->m_pdp8ssm->dp8spSend), sizeof(DP8SIM_PARAMETERS));
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8spReceive.dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
CopyMemory(pdp8spReceive, &(this->m_pdp8ssm->dp8spReceive), sizeof(DP8SIM_PARAMETERS));
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::GetAllParameters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::GetAllSendParameters"
|
|
//=============================================================================
|
|
// CDP8SimIPC::GetAllSendParameters
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Retrieves the current send settings.
|
|
//
|
|
// Arguments:
|
|
// DP8SIM_PARAMETERS * pdp8sp - Place to store parameters retrieved.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::GetAllSendParameters(DP8SIM_PARAMETERS * const pdp8sp)
|
|
{
|
|
DNASSERT(pdp8sp != NULL);
|
|
DNASSERT(pdp8sp->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8spSend.dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
CopyMemory(pdp8sp, &(this->m_pdp8ssm->dp8spSend), sizeof(DP8SIM_PARAMETERS));
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::GetAllSendParameters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::GetAllReceiveParameters"
|
|
//=============================================================================
|
|
// CDP8SimIPC::GetAllReceiveParameters
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Retrieves the current receive settings.
|
|
//
|
|
// Arguments:
|
|
// DP8SIM_PARAMETERS * pdp8sp - Place to store parameters retrieved.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::GetAllReceiveParameters(DP8SIM_PARAMETERS * const pdp8sp)
|
|
{
|
|
DNASSERT(pdp8sp != NULL);
|
|
DNASSERT(pdp8sp->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8spReceive.dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
CopyMemory(pdp8sp, &(this->m_pdp8ssm->dp8spReceive), sizeof(DP8SIM_PARAMETERS));
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::GetAllReceiveParameters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::SetAllParameters"
|
|
//=============================================================================
|
|
// CDP8SimIPC::SetAllParameters
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Stores the send and receive settings.
|
|
//
|
|
// Arguments:
|
|
// DP8SIM_PARAMETERS * pdp8spSend - New send parameters.
|
|
// DP8SIM_PARAMETERS * pdp8spReceive - New receive parameters.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::SetAllParameters(const DP8SIM_PARAMETERS * const pdp8spSend,
|
|
const DP8SIM_PARAMETERS * const pdp8spReceive)
|
|
{
|
|
DNASSERT(pdp8spSend != NULL);
|
|
DNASSERT(pdp8spSend->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(pdp8spReceive != NULL);
|
|
DNASSERT(pdp8spReceive->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8spSend.dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
CopyMemory(&(this->m_pdp8ssm->dp8spSend), pdp8spSend, sizeof(DP8SIM_PARAMETERS));
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8spReceive.dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
CopyMemory(&(this->m_pdp8ssm->dp8spReceive), pdp8spReceive, sizeof(DP8SIM_PARAMETERS));
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::SetAllParameters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::GetAllStatistics"
|
|
//=============================================================================
|
|
// CDP8SimIPC::GetAllStatistics
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Retrieves the current send and receive statistics.
|
|
//
|
|
// Arguments:
|
|
// DP8SIM_STATISTICS * pdp8ssSend - Place to store send statistics
|
|
// retrieved.
|
|
// DP8SIM_STATISTICS * pdp8ssReceive - Place to store receive statistics
|
|
// retrieved.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::GetAllStatistics(DP8SIM_STATISTICS * const pdp8ssSend,
|
|
DP8SIM_STATISTICS * const pdp8ssReceive)
|
|
{
|
|
DNASSERT(pdp8ssSend != NULL);
|
|
DNASSERT(pdp8ssSend->dwSize == sizeof(DP8SIM_STATISTICS));
|
|
DNASSERT(pdp8ssReceive != NULL);
|
|
DNASSERT(pdp8ssReceive->dwSize == sizeof(DP8SIM_STATISTICS));
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssSend.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
CopyMemory(pdp8ssSend, &(this->m_pdp8ssm->dp8ssSend), sizeof(DP8SIM_STATISTICS));
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssReceive.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
CopyMemory(pdp8ssReceive, &(this->m_pdp8ssm->dp8ssReceive), sizeof(DP8SIM_STATISTICS));
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::GetAllStatistics
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::ClearAllStatistics"
|
|
//=============================================================================
|
|
// CDP8SimIPC::ClearAllStatistics
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Clears the current send and receive statistics.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::ClearAllStatistics(void)
|
|
{
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssSend.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
ZeroMemory(&(this->m_pdp8ssm->dp8ssSend), sizeof(DP8SIM_STATISTICS));
|
|
this->m_pdp8ssm->dp8ssSend.dwSize = sizeof(DP8SIM_STATISTICS);
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssReceive.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
ZeroMemory(&(this->m_pdp8ssm->dp8ssReceive), sizeof(DP8SIM_STATISTICS));
|
|
this->m_pdp8ssm->dp8ssReceive.dwSize = sizeof(DP8SIM_STATISTICS);
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::GetAllStatistics
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::IncrementStatsSendTransmitted"
|
|
//=============================================================================
|
|
// CDP8SimIPC::IncrementStatsSendTransmitted
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Increments the sends transmitted counters.
|
|
//
|
|
// Arguments:
|
|
// DWORD dwBytes - Size of send, in bytes.
|
|
// DWORD dwDelay - Amount the send was delayed, in milliseconds.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::IncrementStatsSendTransmitted(DWORD dwBytes, DWORD dwDelay)
|
|
{
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssSend.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
this->m_pdp8ssm->dp8ssSend.dwTransmittedPackets++;
|
|
this->m_pdp8ssm->dp8ssSend.dwTransmittedBytes += dwBytes;
|
|
this->m_pdp8ssm->dp8ssSend.dwTotalDelayMS += dwDelay;
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::IncrementStatsSendTransmitted
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::IncrementStatsSendDropped"
|
|
//=============================================================================
|
|
// CDP8SimIPC::IncrementStatsSendDropped
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Increments the sends dropped counters.
|
|
//
|
|
// Arguments:
|
|
// DWORD dwBytes - Size of send, in bytes.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::IncrementStatsSendDropped(DWORD dwBytes)
|
|
{
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssSend.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
this->m_pdp8ssm->dp8ssSend.dwDroppedPackets++;
|
|
this->m_pdp8ssm->dp8ssSend.dwDroppedBytes += dwBytes;
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::IncrementStatsSendDropped
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::IncrementStatsReceiveTransmitted"
|
|
//=============================================================================
|
|
// CDP8SimIPC::IncrementStatsReceiveTransmitted
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Increments the receives indicated counters.
|
|
//
|
|
// Arguments:
|
|
// DWORD dwBytes - Size of receive, in bytes.
|
|
// DWORD dwDelay - Amount the receive was delayed, in milliseconds.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::IncrementStatsReceiveTransmitted(DWORD dwBytes, DWORD dwDelay)
|
|
{
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssReceive.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
this->m_pdp8ssm->dp8ssReceive.dwTransmittedPackets++;
|
|
this->m_pdp8ssm->dp8ssReceive.dwTransmittedBytes += dwBytes;
|
|
this->m_pdp8ssm->dp8ssReceive.dwTotalDelayMS += dwDelay;
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::IncrementStatsReceiveTransmitted
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::IncrementStatsReceiveDropped"
|
|
//=============================================================================
|
|
// CDP8SimIPC::IncrementStatsReceiveDropped
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Increments the receives dropped counters.
|
|
//
|
|
// Arguments:
|
|
// DWORD dwBytes - Size of receive, in bytes.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::IncrementStatsReceiveDropped(DWORD dwBytes)
|
|
{
|
|
DNASSERT(this->m_pdp8ssm != NULL);
|
|
|
|
|
|
this->LockSharedMemory();
|
|
|
|
DNASSERT(this->m_pdp8ssm->dp8ssReceive.dwSize == sizeof(DP8SIM_STATISTICS));
|
|
this->m_pdp8ssm->dp8ssReceive.dwDroppedPackets++;
|
|
this->m_pdp8ssm->dp8ssReceive.dwDroppedBytes += dwBytes;
|
|
|
|
this->UnlockSharedMemory();
|
|
} // CDP8SimIPC::IncrementStatsReceiveDropped
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::LoadDefaultParameters"
|
|
//=============================================================================
|
|
// CDP8SimIPC::LoadDefaultParameters
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Loads the default send and receive parameters from the registry
|
|
// if possible.
|
|
//
|
|
// Arguments:
|
|
// DP8SIM_PARAMETERS * pdp8spSend - Place to store default send
|
|
// parameters.
|
|
// DP8SIM_PARAMETERS * pdp8spReceive - Place to store default receive
|
|
// parameters.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::LoadDefaultParameters(DP8SIM_PARAMETERS * const pdp8spSend,
|
|
DP8SIM_PARAMETERS * const pdp8spReceive)
|
|
{
|
|
CRegistry RegObject;
|
|
DP8SIM_PARAMETERS dp8spTemp;
|
|
DWORD dwSize;
|
|
|
|
|
|
DPFX(DPFPREP, 5, "(0x%p) Parameters: (0x%p, 0x%p)",
|
|
this, pdp8spSend, pdp8spReceive);
|
|
|
|
|
|
DNASSERT(pdp8spSend != NULL);
|
|
DNASSERT(pdp8spSend->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
|
|
|
|
DNASSERT(pdp8spReceive != NULL);
|
|
DNASSERT(pdp8spReceive->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
|
|
|
|
if (RegObject.Open(HKEY_CURRENT_USER, REGKEY_DP8SIM, TRUE, FALSE))
|
|
{
|
|
//
|
|
// Try to read the default send parameters
|
|
//
|
|
dwSize = sizeof(dp8spTemp);
|
|
if (RegObject.ReadBlob(REGKEY_VALUE_DEFAULTSENDPARAMETERS, (BYTE*) (&dp8spTemp), &dwSize))
|
|
{
|
|
//
|
|
// Successfully read the parameters. Make sure they match the
|
|
// expected values.
|
|
//
|
|
if ((dwSize == sizeof(dp8spTemp)) &&
|
|
(dp8spTemp.dwSize == sizeof(dp8spTemp)))
|
|
{
|
|
DPFX(DPFPREP, 2, "Successfully read default send parameters from registry.");
|
|
memcpy(pdp8spSend, &dp8spTemp, sizeof(dp8spTemp));
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Default send parameters are unusable, leave the values set
|
|
// as they are.
|
|
//
|
|
DPFX(DPFPREP, 0, "Default send parameters stored in registry are invalid! Ignoring.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Couldn't read the default send parameters, leave the values set
|
|
// as they are.
|
|
//
|
|
DPFX(DPFPREP, 2, "Couldn't read default send parameters from registry, ignoring.");
|
|
}
|
|
|
|
|
|
//
|
|
// Try to read the default receive parameters
|
|
//
|
|
dwSize = sizeof(dp8spTemp);
|
|
if (RegObject.ReadBlob(REGKEY_VALUE_DEFAULTRECEIVEPARAMETERS, (BYTE*) (&dp8spTemp), &dwSize))
|
|
{
|
|
//
|
|
// Successfully read the parameters. Make sure they match the
|
|
// expected values.
|
|
//
|
|
if ((dwSize == sizeof(dp8spTemp)) &&
|
|
(dp8spTemp.dwSize == sizeof(dp8spTemp)))
|
|
{
|
|
DPFX(DPFPREP, 2, "Successfully read default receive parameters from registry.");
|
|
memcpy(pdp8spReceive, &dp8spTemp, sizeof(dp8spTemp));
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Default receive parameters are unusable, leave the values set
|
|
// as they are.
|
|
//
|
|
DPFX(DPFPREP, 0, "Default receive parameters stored in registry are invalid! Ignoring.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Couldn't read the default send parameters, leave the values set
|
|
// as they are.
|
|
//
|
|
DPFX(DPFPREP, 2, "Couldn't read default send parameters from registry, ignoring.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Couldn't open the registry key, leave the values set as they are.
|
|
//
|
|
DPFX(DPFPREP, 2, "Couldn't open DP8Sim registry key, ignoring.");
|
|
}
|
|
|
|
DPFX(DPFPREP, 5, "(0x%p) Leave", this);
|
|
} // CDP8SimIPC::LoadDefaultParameters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CDP8SimIPC::SaveDefaultParameters"
|
|
//=============================================================================
|
|
// CDP8SimIPC::SaveDefaultParameters
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description: Writes the given send and receive parameters as the default
|
|
// values in the registry.
|
|
//
|
|
// Arguments:
|
|
// DP8SIM_PARAMETERS * pdp8spSend - New default send parameters.
|
|
// DP8SIM_PARAMETERS * pdp8spReceive - New default receive parameters.
|
|
//
|
|
// Returns: None.
|
|
//=============================================================================
|
|
void CDP8SimIPC::SaveDefaultParameters(const DP8SIM_PARAMETERS * const pdp8spSend,
|
|
const DP8SIM_PARAMETERS * const pdp8spReceive)
|
|
{
|
|
CRegistry RegObject;
|
|
|
|
|
|
DPFX(DPFPREP, 5, "(0x%p) Parameters: (0x%p, 0x%p)",
|
|
this, pdp8spSend, pdp8spReceive);
|
|
|
|
|
|
DNASSERT(pdp8spSend != NULL);
|
|
DNASSERT(pdp8spSend->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
|
|
|
|
DNASSERT(pdp8spReceive != NULL);
|
|
DNASSERT(pdp8spReceive->dwSize == sizeof(DP8SIM_PARAMETERS));
|
|
|
|
|
|
if (RegObject.Open(HKEY_CURRENT_USER, REGKEY_DP8SIM, FALSE, TRUE))
|
|
{
|
|
//
|
|
// Write the default send and receive parameters, ignoring failure.
|
|
//
|
|
|
|
RegObject.WriteBlob(REGKEY_VALUE_DEFAULTSENDPARAMETERS,
|
|
(BYTE*) pdp8spSend,
|
|
sizeof(*pdp8spSend));
|
|
|
|
RegObject.WriteBlob(REGKEY_VALUE_DEFAULTRECEIVEPARAMETERS,
|
|
(BYTE*) pdp8spReceive,
|
|
sizeof(*pdp8spReceive));
|
|
}
|
|
else
|
|
{
|
|
DPFX(DPFPREP, 0, "Couldn't open DP8Sim registry key for writing!");
|
|
}
|
|
|
|
DPFX(DPFPREP, 5, "(0x%p) Leave", this);
|
|
} // CDP8SimIPC::SaveDefaultParameters
|