windows-nt/Source/XPSP1/NT/printscan/fax/service/stattest/stattest.c
2020-09-26 16:20:57 +08:00

187 lines
4.6 KiB
C

#include <windows.h>
#include <stdio.h>
#include "faxutil.h"
#include "winfax.h"
typedef struct _EVENT_STRINGS {
DWORD EventId;
LPWSTR EventStr;
} EVENT_STRINGS, *PEVENT_STRINGS;
EVENT_STRINGS EventStrings[] =
{
FEI_DIALING, L"Dialing",
FEI_SENDING, L"Sending",
FEI_RECEIVING, L"Receiving",
FEI_COMPLETED, L"Completed",
FEI_BUSY, L"Busy",
FEI_NO_ANSWER, L"No Answer",
FEI_BAD_ADDRESS, L"Bad Address",
FEI_NO_DIAL_TONE, L"No Dial Tone",
FEI_DISCONNECTED, L"Disconnected",
FEI_FATAL_ERROR, L"Fatal Error",
FEI_NOT_FAX_CALL, L"Not a Fax Call",
FEI_CALL_DELAYED, L"Call Delayed",
FEI_CALL_BLACKLISTED, L"Call Blacklisted",
FEI_RINGING, L"Ringing",
FEI_ABORTING, L"Aborting",
FEI_ROUTING, L"Routing",
FEI_MODEM_POWERED_ON, L"Modem Powered Off",
FEI_MODEM_POWERED_OFF, L"Modem Powered On",
FEI_IDLE, L"Idle",
FEI_FAXSVC_ENDED, L"Fax Service Ended",
0, L"Unknown Event"
};
#define NumEventStrings ((sizeof(EventStrings)/sizeof(EVENT_STRINGS))-1)
HANDLE CompletionPort;
BOOL
ConsoleHandlerRoutine(
DWORD CtrlType
)
{
if (CtrlType == CTRL_C_EVENT) {
PostQueuedCompletionStatus( CompletionPort, 0, (DWORD) -1, 0 );
return TRUE;
}
return FALSE;
}
PFAX_PORT_INFO_1
MyFaxEnumPorts(
HFAX hFaxSvc,
LPDWORD pcPorts
)
{
PVOID pSvcPorts = NULL;
DWORD cb;
if (!FaxEnumPorts(hFaxSvc, (LPBYTE*) &pSvcPorts, &cb, 1, pcPorts))
{
pSvcPorts = NULL;
}
return pSvcPorts;
}
int _cdecl
wmain(
int argc,
wchar_t *argv[]
)
{
HFAX hFax = NULL;
PFAX_EVENT FaxEvent;
BOOL Rval;
DWORD Bytes;
DWORD CompletionKey;
SYSTEMTIME EvtTime;
PFAX_PORT_INFO_1 PortInfo;
DWORD PortCount;
DWORD i;
FAX_PORT_HANDLE FaxPortHandle = 0;
LPWSTR ComputerName = NULL;
HeapInitialize(NULL,NULL,NULL,0);
if (argc > 1) {
ComputerName = argv[1];
}
if( !FaxConnectFaxServer( ComputerName, &hFax ) ){
wprintf( L"FaxConnectFaxServer failed ec = %d\n", GetLastError() );
return -1;
}
CompletionPort = CreateIoCompletionPort(
INVALID_HANDLE_VALUE,
NULL,
0,
1
);
if (!CompletionPort) {
wprintf( L"CreateIoCompletionPort() failed, ec=0x%08x\n", GetLastError() );
return -1;
}
PortInfo = MyFaxEnumPorts( hFax, &PortCount );
if (!PortInfo) {
wprintf( L"MyFaxEnumPorts() failed, ec=0x%08x\n", GetLastError() );
return -1;
}
for (i=0; i<PortCount; i++) {
Rval = FaxOpenPort( hFax, PortInfo[i].DeviceId, PORT_OPEN_EVENTS, &FaxPortHandle );
if (!Rval) {
wprintf( L"FaxOpenPort() failed, ec=0x%08x\n", GetLastError() );
}
}
if (!FaxInitializeEventQueue( hFax, CompletionPort, 0 )) {
wprintf( L"FaxInitializeEvent() failed, ec=0x%08x\n", GetLastError() );
return -1;
}
SetConsoleCtrlHandler( ConsoleHandlerRoutine, TRUE );
while (TRUE) {
Rval = GetQueuedCompletionStatus(
CompletionPort,
&Bytes,
&CompletionKey,
(LPOVERLAPPED*) &FaxEvent,
INFINITE
);
if (!Rval) {
wprintf( L"GetQueuedCompletionStatus() failed, ec=0x%08x\n", GetLastError() );
return -1;
}
if (CompletionKey == (DWORD)-1) {
wprintf( L"\n\n-----------------------------------------\n" );
wprintf( L"Control-C pressed\n" );
wprintf( L"StatTest Ending\n" );
wprintf( L"-----------------------------------------\n" );
break;
}
FileTimeToSystemTime( &FaxEvent->TimeStamp, &EvtTime );
for (i=0; i<NumEventStrings; i++) {
if (FaxEvent->EventId == EventStrings[i].EventId) {
break;
}
}
wprintf( L"%02d:%02d:%02d.%03d hServer=0x%08x, hPort=0x%08x, device=0x%08x, event=0x%08x %ws\n",
EvtTime.wHour,
EvtTime.wMinute,
EvtTime.wSecond,
EvtTime.wMilliseconds,
FaxEvent->FaxServerHandle,
FaxEvent->FaxPortHandle,
FaxEvent->DeviceId,
FaxEvent->EventId,
EventStrings[i].EventStr
);
LocalFree( FaxEvent );
}
if (hFax) {
Rval = FaxDisconnectFaxServer( hFax );
}
return -1;
}