/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    faxreg.h

Abstract:

    This header defines all of the fax service
    registry data structures and access functions.

Author:

    Wesley Witt (wesw) 9-June-1996


Revision History:

--*/

#ifndef _FAXREG_
#define _FAXREG_


typedef struct _REG_DEVICE_PROVIDER {

    LPTSTR                  FriendlyName;
    LPTSTR                  ImageName;
    LPTSTR                  ProviderName;

} REG_DEVICE_PROVIDER, *PREG_DEVICE_PROVIDER;


typedef struct _REG_ROUTING_METHOD {

    LPTSTR                  FriendlyName;
    LPTSTR                  FunctionName;
    LPTSTR                  Guid;
    LPTSTR                  InternalName;
    DWORD                   Priority;

} REG_ROUTING_METHOD, *PREG_ROUTING_METHOD;


typedef struct _REG_ROUTING_EXTENSION {

    LPTSTR                  FriendlyName;
    LPTSTR                  ImageName;
    LPTSTR                  InternalName;
    DWORD                   RoutingMethodsCount;
    PREG_ROUTING_METHOD     RoutingMethods;

} REG_ROUTING_EXTENSION, *PREG_ROUTING_EXTENSION;


typedef struct _REG_DEVICE {

    DWORD                   PermanentLineID;
    LPTSTR                  Name;
    LPTSTR                  Provider;
    DWORD                   Priority;
    DWORD                   Flags;
    DWORD                   Rings;
    LPTSTR                  Csid;
    LPTSTR                  Tsid;
    BOOL                    DeviceInstalled; // this is not stored, but is used to validate currently 
                                             // installed tapi devices with the devices in the registry

} REG_DEVICE, *PREG_DEVICE;

typedef struct _REG_DEVICE_CACHE {

    DWORD                   PermanentLineID;
    LPTSTR                  Name;
    LPTSTR                  Provider;
    //DWORD                   Priority;
    DWORD                   Flags;
    DWORD                   Rings;
    LPTSTR                  Csid;
    LPTSTR                  Tsid;
    DWORD                   RoutingMask;
    LPTSTR                  Printer;
    LPTSTR                  Profile;
    LPTSTR                  StoreDir;

} REG_DEVICE_CACHE, *PREG_DEVICE_CACHE;


typedef struct _REG_ROUTING_INFO {   

    DWORD                   RoutingMask;
    LPTSTR                  Printer;
    LPTSTR                  Profile;
    LPTSTR                  StoreDir;

} REG_ROUTING_INFO, *PREG_ROUTING_INFO;



typedef struct _REG_CATEGORY {

    LPTSTR                  CategoryName;
    DWORD                   Number;
    DWORD                   Level;

} REG_CATEGORY, *PREG_CATEGORY;

typedef struct _REG_SETUP {

    DWORD                   Installed;
    DWORD                   InstallType;
    DWORD                   InstalledPlatforms;
    LPTSTR                  Csid;
    LPTSTR                  Tsid;
    LPTSTR                  Printer;
    LPTSTR                  StoreDir;
    LPTSTR                  Profile;
    DWORD                   Mask;
    DWORD                   Rings;

} REG_SETUP, *PREG_SETUP;

typedef struct _REG_FAX_SERVICE {

    DWORD                   Retries;
    DWORD                   RetryDelay;
    DWORD                   DirtyDays;
    BOOL                    QueuePaused;
    BOOL                    NextJobNumber;
    BOOL                    Branding;
    BOOL                    UseDeviceTsid;
    BOOL                    ServerCp;
    BOOL                    ForceReceive;
    DWORD                   TerminationDelay;
    FAX_TIME                StartCheapTime;
    FAX_TIME                StopCheapTime;
    BOOL                    ArchiveOutgoingFaxes;
    LPTSTR                  ArchiveDirectory;
    LPTSTR                  InboundProfile;
    PREG_DEVICE_PROVIDER    DeviceProviders;
    DWORD                   DeviceProviderCount;
    PREG_ROUTING_EXTENSION  RoutingExtensions;
    DWORD                   RoutingExtensionsCount;
    PREG_DEVICE             Devices;
    DWORD                   DeviceCount;
    PREG_DEVICE_CACHE       DevicesCache;
    DWORD                   DeviceCacheCount;
    PREG_CATEGORY           Logging;
    DWORD                   LoggingCount;

} REG_FAX_SERVICE, *PREG_FAX_SERVICE;

typedef struct _REG_FAX_DEVICES {

    DWORD                   DeviceCount;
    PREG_DEVICE             Devices;

} REG_FAX_DEVICES, *PREG_FAX_DEVICES;

typedef struct _REG_FAX_DEVICES_CACHE {

    DWORD                   DeviceCount;
    PREG_DEVICE_CACHE       Devices;

} REG_FAX_DEVICES_CACHE, *PREG_FAX_DEVICES_CACHE;

typedef struct _REG_FAX_LOGGING {

    DWORD                   LoggingCount;
    PREG_CATEGORY           Logging;

} REG_FAX_LOGGING, *PREG_FAX_LOGGING;



//
// function prototypes
//

PREG_FAX_SERVICE
GetFaxRegistry(
    VOID
    );

VOID
FreeFaxRegistry(
    PREG_FAX_SERVICE FaxReg
    );

BOOL
CreateFaxEventSource(
    PREG_FAX_SERVICE FaxReg,
    PFAX_LOG_CATEGORY DefaultCategories,
    int DefaultCategoryCount
    );

BOOL
SetFaxRegistry(
    PREG_FAX_SERVICE FaxReg
    );

PREG_FAX_DEVICES
GetFaxDevicesRegistry(
    VOID
    );

PREG_FAX_DEVICES_CACHE
GetFaxDevicesCacheRegistry(
    VOID
    );

PREG_ROUTING_INFO
RegGetRoutingInfo(
    DWORD PermanentLineID 
    );

VOID
FreeRegRoutingInfo(
    PREG_ROUTING_INFO RoutingInfo
    );

BOOL
SetFaxRoutingInfo(
    LPTSTR ExtensionName,
    LPTSTR MethodName,
    LPTSTR Guid,
    DWORD  Priority,
    LPTSTR FunctionName,
    LPTSTR FriendlyName
    ) ;

VOID
FreeFaxDevicesRegistry(
    PREG_FAX_DEVICES FaxReg
    );

VOID
FreeFaxDevicesCacheRegistry(
    PREG_FAX_DEVICES_CACHE FaxReg
    );

BOOL
SetFaxDeviceFlags(
    DWORD PermanentLineID,
    DWORD Flags
    );

BOOL
DeleteFaxDevice(
    DWORD PermanentLineID
    );

BOOL 
DeleteCachedFaxDevice(
    LPTSTR DeviceName
    );

BOOL
GetInstallationInfo(
    LPDWORD Installed,
    LPDWORD InstallType,
    LPDWORD InstalledPlatforms,
    LPDWORD ProductType
    );

BOOL
IsModemClass1(
    LPSTR SubKey,
    LPBOOL Class1Fax
    );

BOOL
SaveModemClass(
    LPSTR SubKey,
    BOOL Class1Fax
    );

DWORD
RegAddNewFaxDevice(
    LPTSTR DeviceName,
    LPTSTR ProviderName,
    LPTSTR Csid,
    LPTSTR Tsid,
    DWORD Priority,
    DWORD PermanentLineID,
    DWORD Flags,
    DWORD Rings,
    LONG RoutingMask,             // -1 means don't set routing
    LPTSTR RoutePrinterName,
    LPTSTR RouteDir,
    LPTSTR RouteProfile
    );

BOOL
RegAddNewFaxDeviceCache(
    LPTSTR DeviceName,
    LPTSTR ProviderName,
    LPTSTR Csid,
    LPTSTR Tsid,
    DWORD PermanentLineID,
    DWORD Flags,
    DWORD Rings,
    DWORD RoutingMask,
    LPTSTR RoutePrinterName,
    LPTSTR RouteDir,
    LPTSTR RouteProfile
    ) ;

BOOL
GetOrigSetupData(
    PREG_SETUP RegSetup
    );

VOID
FreeOrigSetupData(
    PREG_SETUP RegSetup
    );

BOOL
SetFaxGlobalsRegistry(
    PFAX_CONFIGURATION FaxConfig
    );

BOOL
GetLoggingCategoriesRegistry(
    PREG_FAX_LOGGING FaxRegLogging
    );

BOOL
SetLoggingCategoriesRegistry(
    PREG_FAX_LOGGING FaxRegLogging
    );

BOOL
SetFaxJobNumberRegistry(
    DWORD NextJobNumber
    );

#endif