Leaked source code of windows server 2003
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.
 
 
 
 
 
 

181 lines
4.0 KiB

#include <windows.h>
#include <assert.h>
#include <wmimsg.h>
#include <rcvtest.h>
#include <rcvtest_i.c>
#include <stdio.h>
BOOL g_bVerbose = FALSE;
ULONG g_ulNumMsgs = 1;
LPCWSTR g_wszTarget = NULL;
LPCWSTR g_wszPrincipal = NULL;
DWORD g_dwFlags = 0;
BOOL g_bKill = FALSE;
BOOL ParseArg( LPWSTR wszArg )
{
WCHAR* pCurr = wszArg;
if ( *pCurr != '/' && *pCurr != '-' )
{
g_wszTarget = pCurr;
return TRUE;
}
pCurr++; // remove the / or -
if ( wbem_wcsicmp( pCurr, L"txn" ) == 0 )
{
g_dwFlags &= ~WMIMSG_MASK_QOS;
g_dwFlags |= WMIMSG_FLAG_QOS_XACT;
}
else if ( wbem_wcsicmp( pCurr, L"express" ) == 0 )
{
g_dwFlags &= ~WMIMSG_MASK_QOS;
g_dwFlags |= WMIMSG_FLAG_QOS_EXPRESS;
}
else if ( wbem_wcsicmp( pCurr, L"guaranteed" ) == 0 )
{
g_dwFlags &= ~WMIMSG_MASK_QOS;
g_dwFlags |= WMIMSG_FLAG_QOS_GUARANTEED;
}
else if ( wbem_wcsicmp( pCurr, L"sync" ) == 0 )
{
g_dwFlags &= ~WMIMSG_MASK_QOS;
g_dwFlags |= WMIMSG_FLAG_QOS_SYNCHRONOUS;
}
else if ( wbem_wcsicmp( pCurr, L"ack" ) == 0 )
{
g_dwFlags |= WMIMSG_FLAG_RCVR_ACK;
}
else if ( wbem_wcsicmp( pCurr, L"verify" ) == 0 )
{
g_dwFlags |= WMIMSG_FLAG_RCVR_PRIV_VERIFY;
}
else if ( wbem_wcsicmp( pCurr, L"secure" ) == 0 )
{
g_dwFlags |= WMIMSG_FLAG_RCVR_SECURE_ONLY;
}
else if ( wbem_wcsnicmp( pCurr, L"nummsgs", 7 ) == 0 )
{
pCurr += 7;
if ( *pCurr++ != ':' )
{
return FALSE;
}
g_ulNumMsgs = _wtol( pCurr );
}
else if ( wbem_wcsnicmp( pCurr, L"svrprinc", 8 ) == 0 )
{
pCurr += 8;
if ( *pCurr++ != ':' )
{
return FALSE;
}
g_wszPrincipal = pCurr;
}
else if ( wbem_wcsicmp( pCurr, L"verbose" ) == 0 )
{
g_bVerbose = TRUE;
}
else if ( wbem_wcsicmp( pCurr, L"kill" ) == 0 )
{
g_bKill = TRUE;
}
else
{
return FALSE;
}
return TRUE;
}
BOOL ParseArgs( int nArgs, LPWSTR* awszArgs )
{
if ( nArgs < 2 )
{
return FALSE;
}
for( int i=1; i < nArgs; i++ )
{
if ( !ParseArg( awszArgs[i] ) )
{
return FALSE;
}
}
return TRUE;
}
extern "C" int __cdecl wmain( int argc, wchar_t* argv[] )
{
if ( !ParseArgs( argc, argv ) )
{
wprintf( L"Usage: msgrcv [-sync|-express|-guaranteed|-txn] \n"
L" [-nummsgs:#] [-ack] [-verify] \n"
L" [-verbose] [-svrprinc:principal] endpoint\n" );
return 1;
}
HRESULT hr;
CoInitialize( NULL );
IReceiveTest* pRcvTest;
hr = CoCreateInstance( CLSID_ReceiveTest,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IReceiveTest,
(void**)&pRcvTest );
if ( FAILED(hr) )
{
printf( "Could not CoCI MsgSvr obj. HR = 0x%x\n", hr );
return 1;
}
if ( g_bKill )
{
hr = pRcvTest->Kill();
if ( FAILED(hr) )
{
printf("Failed to Kill MsgSvr. HR = 0x%x\n", hr );
return 1;
}
printf("Killed MsgSvr\n");
return 0;
}
ULONG ulElapsed;
hr = pRcvTest->RunTest( g_wszTarget,
g_dwFlags,
g_wszPrincipal,
g_ulNumMsgs,
&ulElapsed );
pRcvTest->Release();
if ( FAILED(hr) )
{
printf( "Test Failed. HR = 0x%x\n", hr );
return 1;
}
printf( "Test Succeeded in %d msec.\n", ulElapsed );
printf( "Rate is %f msg/sec\n", g_ulNumMsgs * 1000.0 / ulElapsed );
CoUninitialize();
return 0;
}