|
|
#include "faxrtp.h"
#pragma hdrstop
LIST_ENTRY RoutingListHead; CRITICAL_SECTION CsRouting; LPCWSTR InboundProfileName;
DWORD GetMaskBit( LPCWSTR RoutingGuid ) { if (_tcsicmp( RoutingGuid, REGVAL_RM_EMAIL_GUID ) == 0) { return LR_EMAIL; } else if (_tcsicmp( RoutingGuid, REGVAL_RM_FOLDER_GUID ) == 0) { return LR_STORE; } else if (_tcsicmp( RoutingGuid, REGVAL_RM_INBOX_GUID ) == 0) { return LR_INBOX; } else if (_tcsicmp( RoutingGuid, REGVAL_RM_PRINTING_GUID ) == 0) { return LR_PRINT; } return 0; }
BOOL AddNewDeviceToRoutingTable( DWORD DeviceId, LPCWSTR DeviceName, LPCWSTR Csid, LPCWSTR Tsid, LPCWSTR PrinterName, LPCWSTR StoreDir, LPCWSTR ProfileName, DWORD Mask ) { PROUTING_TABLE RoutingEntry = (PROUTING_TABLE) MemAlloc( sizeof(ROUTING_TABLE) ); if (!RoutingEntry) { return FALSE; }
RoutingEntry->DeviceId = DeviceId; RoutingEntry->DeviceName = DeviceName; RoutingEntry->Csid = Csid; RoutingEntry->Tsid = Tsid; RoutingEntry->PrinterName = PrinterName; RoutingEntry->StoreDir = StoreDir; RoutingEntry->ProfileName = ProfileName; RoutingEntry->Mask = Mask;
InsertTailList( &RoutingListHead, &RoutingEntry->ListEntry );
return TRUE; }
BOOL FaxDeviceEnumerator( HKEY hSubKey, LPWSTR SubKeyName, DWORD Index, PVOID Context ) { if (!SubKeyName) { return TRUE; }
//
// try to enumerate the routing information under a device node.
// NOTE: if we fail to enumerate the routing information, we return TRUE, instead of
// FALSE, as would be expected. This means that we will still initialize our routing
// extension correctly, but we just won't be able to route to certain (probably bogus)
// devices
HKEY hKeyRouting = OpenRegistryKey( hSubKey, REGKEY_ROUTING, FALSE, KEY_READ ); if (!hKeyRouting) { DebugPrint(( TEXT("InitializeRoutingTable(): could not open routing registry key") )); return TRUE; }
AddNewDeviceToRoutingTable( GetRegistryDword ( hSubKey, REGVAL_PERMANENT_LINEID ), GetRegistryString( hSubKey, REGVAL_DEVICE_NAME, EMPTY_STRING ), GetRegistryString( hSubKey, REGVAL_ROUTING_CSID, EMPTY_STRING ), GetRegistryString( hSubKey, REGVAL_ROUTING_TSID, EMPTY_STRING ), GetRegistryString( hKeyRouting, REGVAL_ROUTING_PRINTER, EMPTY_STRING ), GetRegistryString( hKeyRouting, REGVAL_ROUTING_DIR, EMPTY_STRING ), GetRegistryString( hKeyRouting, REGVAL_ROUTING_PROFILE, EMPTY_STRING ), GetRegistryDword ( hKeyRouting, REGVAL_ROUTING_MASK ) );
RegCloseKey( hKeyRouting );
return TRUE; }
BOOL InitializeRoutingTable( VOID ) { InitializeListHead( &RoutingListHead ); InitializeCriticalSection( &CsRouting );
HKEY hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_FAXSERVER, FALSE, KEY_READ ); if (!hKey) { DebugPrint(( TEXT("InitializeRoutingTable(): could not open registry key") )); return FALSE; }
InboundProfileName = GetRegistryString( hKey, REGVAL_INBOUND_PROFILE, EMPTY_STRING ); if (!InboundProfileName) { DebugPrint(( TEXT("InitializeRoutingTable(): could not read inbound profile name") )); }
RegCloseKey( hKey );
if (!EnumerateRegistryKeys( HKEY_LOCAL_MACHINE, REGKEY_FAX_DEVICES, FALSE, FaxDeviceEnumerator, NULL )) { DebugPrint(( TEXT("InitializeRoutingTable(): could not enumerate fax devices") )); return FALSE; }
return TRUE; }
BOOL UpdateRoutingInfoRegistry( PROUTING_TABLE RoutingEntry ) { WCHAR KeyName[256];
swprintf( KeyName, L"%s\\%08d\\%s", REGKEY_FAX_DEVICES, RoutingEntry->DeviceId, REGKEY_ROUTING );
HKEY hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, KeyName, TRUE, KEY_ALL_ACCESS ); if (!hKey) { Assert(( ! TEXT("InitializeRoutingTable(): could not open registry key") )); return FALSE; }
SetRegistryString( hKey, REGVAL_ROUTING_PRINTER, RoutingEntry->PrinterName ); SetRegistryString( hKey, REGVAL_ROUTING_DIR, RoutingEntry->StoreDir ); SetRegistryString( hKey, REGVAL_ROUTING_PROFILE, RoutingEntry->ProfileName );
SetRegistryDword( hKey, REGVAL_ROUTING_MASK, RoutingEntry->Mask );
RegCloseKey( hKey );
return TRUE; }
PROUTING_TABLE GetRoutingEntry( DWORD DeviceId ) { PLIST_ENTRY Next; PROUTING_TABLE RoutingEntry;
Next = RoutingListHead.Flink; if (Next) { while (Next != &RoutingListHead) { RoutingEntry = CONTAINING_RECORD( Next, ROUTING_TABLE, ListEntry ); Next = RoutingEntry->ListEntry.Flink; if (RoutingEntry->DeviceId == DeviceId) { return RoutingEntry; } } }
return NULL; }
|