/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _AUTHIF_H_
#define _AUTHIF_H_

typedef enum _RADIUS_ATTRIBUTE_TYPE {
  ratMinimum = 0,ratUserName = 1,ratUserPassword = 2,ratCHAPPassword = 3,ratNASIPAddress = 4,ratNASPort = 5,ratServiceType = 6,
  ratFramedProtocol = 7,ratFramedIPAddress = 8,ratFramedIPNetmask = 9,ratFramedRouting = 10,ratFilterId = 11,ratFramedMTU = 12,
  ratFramedCompression = 13,ratLoginIPHost = 14,ratLoginService = 15,ratLoginPort = 16,ratReplyMessage = 18,ratCallbackNumber = 19,
  ratCallbackId = 20,ratFramedRoute = 22,ratFramedIPXNetwork = 23,ratState = 24,ratClass = 25,ratVendorSpecific = 26,ratSessionTimeout = 27,
  ratIdleTimeout = 28,ratTerminationAction = 29,ratCalledStationId = 30,ratCallingStationId = 31,ratNASIdentifier = 32,ratProxyState = 33,
  ratLoginLATService = 34,ratLoginLATNode = 35,ratLoginLATGroup = 36,ratFramedAppleTalkLink = 37,ratFramedAppleTalkNetwork = 38,
  ratFramedAppleTalkZone = 39,ratAcctStatusType = 40,ratAcctDelayTime = 41,ratAcctInputOctets = 42,ratAcctOutputOctets = 43,ratAcctSessionId = 44,
  ratAcctAuthentic = 45,ratAcctSessionTime = 46,ratAcctInputPackets = 47,ratAcctOutputPackets = 48,ratAcctTerminationCause = 49,ratCHAPChallenge = 60,
  ratNASPortType = 61,ratPortLimit = 62,ratTunnelType = 64,ratMediumType = 65,ratTunnelPassword = 69,ratTunnelPrivateGroupID = 81,ratCode = 262,
  ratIdentifier = 263,ratAuthenticator = 264,ratSrcIPAddress = 265,ratSrcPort = 266,ratProvider = 267,ratStrippedUserName = 268,ratFQUserName = 269,
  ratPolicyName = 270,ratUniqueId = 271,ratExtensionState = 272,ratEAPTLV = 273,ratRejectReasonCode = 274,ratCRPPolicyName = 275,ratProviderName = 276,
  ratClearTextPassword = 277,
} RADIUS_ATTRIBUTE_TYPE;

typedef enum _RADIUS_CODE {
  rcUnknown = 0,rcAccessRequest = 1,rcAccessAccept = 2,rcAccessReject = 3,rcAccountingRequest = 4,rcAccountingResponse = 5,rcAccessChallenge = 11,
  rcDiscard = 256
} RADIUS_CODE;

typedef enum _RADIUS_AUTHENTICATION_PROVIDER {
  rapUnknown,rapUsersFile,rapProxy,rapWindowsNT,rapMCIS,rapODBC,rapNone
} RADIUS_AUTHENTICATION_PROVIDER;

typedef enum _RADIUS_REJECT_REASON_CODE {
  rrrcUndefined = 0,rrrcAccountUnknown = 1,rrrcAccountDisabled = 2,rrrcAccountExpired = 3,rrrcAuthenticationFailure = 4,
} RADIUS_REJECT_REASON_CODE;

typedef enum _RADIUS_DATA_TYPE {
  rdtUnknown,rdtString,rdtAddress,rdtInteger,rdtTime
} RADIUS_DATA_TYPE;

typedef struct _RADIUS_ATTRIBUTE {
  DWORD dwAttrType;
  RADIUS_DATA_TYPE fDataType;
  DWORD cbDataLength;
  __C89_NAMELESS union {
    DWORD dwValue;
    PCSTR lpValue;
  };
} RADIUS_ATTRIBUTE,*PRADIUS_ATTRIBUTE;

typedef struct _RADIUS_VSA_FORMAT {
  BYTE VendorId[4];
  BYTE VendorType;
  BYTE VendorLength;
  BYTE AttributeSpecific[1];
} RADIUS_VSA_FORMAT;

typedef enum _RADIUS_ACTION {
  raContinue,raReject,raAccept
} RADIUS_ACTION,*PRADIUS_ACTION;

#define RADIUS_EXTENSION_INIT "RadiusExtensionInit"
typedef DWORD (WINAPI *PRADIUS_EXTENSION_INIT)(VOID);

#define RADIUS_EXTENSION_TERM "RadiusExtensionTerm"
typedef VOID (WINAPI *PRADIUS_EXTENSION_TERM)(VOID);

#define RADIUS_EXTENSION_PROCESS "RadiusExtensionProcess"
typedef DWORD (WINAPI *PRADIUS_EXTENSION_PROCESS)(const RADIUS_ATTRIBUTE *pAttrs,PRADIUS_ACTION pfAction);

#define RADIUS_EXTENSION_PROCESS_EX "RadiusExtensionProcessEx"
typedef DWORD (WINAPI *PRADIUS_EXTENSION_PROCESS_EX)(const RADIUS_ATTRIBUTE *pInAttrs,PRADIUS_ATTRIBUTE *pOutAttrs,PRADIUS_ACTION pfAction);

#define RADIUS_EXTENSION_FREE_ATTRIBUTES "RadiusExtensionFreeAttributes"
typedef VOID (WINAPI *PRADIUS_EXTENSION_FREE_ATTRIBUTES)(PRADIUS_ATTRIBUTE pAttrs);

#define AUTHSRV_PARAMETERS_KEY_W L"System\\CurrentControlSet\\Services\\AuthSrv\\Parameters"
#define AUTHSRV_EXTENSIONS_VALUE_W L"ExtensionDLLs"
#define AUTHSRV_AUTHORIZATION_VALUE_W L"AuthorizationDLLs"

#define RADIUS_EXTENSION_VERSION (1)

typedef enum _RADIUS_EXTENSION_POINT {
  repAuthentication,repAuthorization
} RADIUS_EXTENSION_POINT;

typedef struct _RADIUS_ATTRIBUTE_ARRAY {
  DWORD cbSize;
  DWORD (WINAPI *Add)(struct _RADIUS_ATTRIBUTE_ARRAY *This,const RADIUS_ATTRIBUTE *pAttr);
  const RADIUS_ATTRIBUTE *(WINAPI *AttributeAt)(const struct _RADIUS_ATTRIBUTE_ARRAY *This,DWORD dwIndex);
  DWORD (WINAPI *GetSize)(const struct _RADIUS_ATTRIBUTE_ARRAY *This);
  DWORD (WINAPI *InsertAt)(struct _RADIUS_ATTRIBUTE_ARRAY *This,DWORD dwIndex,const RADIUS_ATTRIBUTE *pAttr);
  DWORD (WINAPI *RemoveAt)(struct _RADIUS_ATTRIBUTE_ARRAY *This,DWORD dwIndex);
  DWORD (WINAPI *SetAt)(struct _RADIUS_ATTRIBUTE_ARRAY *This,DWORD dwIndex,const RADIUS_ATTRIBUTE *pAttr);
} RADIUS_ATTRIBUTE_ARRAY,*PRADIUS_ATTRIBUTE_ARRAY;

typedef struct _RADIUS_EXTENSION_CONTROL_BLOCK {
  DWORD cbSize;
  DWORD dwVersion;
  RADIUS_EXTENSION_POINT repPoint;
  RADIUS_CODE rcRequestType;
  RADIUS_CODE rcResponseType;
  PRADIUS_ATTRIBUTE_ARRAY (WINAPI *GetRequest)(struct _RADIUS_EXTENSION_CONTROL_BLOCK *This);
  PRADIUS_ATTRIBUTE_ARRAY (WINAPI *GetResponse)(struct _RADIUS_EXTENSION_CONTROL_BLOCK *This,RADIUS_CODE rcResponseType);
  DWORD (WINAPI *SetResponseType)(struct _RADIUS_EXTENSION_CONTROL_BLOCK *This,RADIUS_CODE rcResponseType);
} RADIUS_EXTENSION_CONTROL_BLOCK,*PRADIUS_EXTENSION_CONTROL_BLOCK;

#define RADIUS_EXTENSION_PROCESS2 "RadiusExtensionProcess2"
typedef DWORD (WINAPI *PRADIUS_EXTENSION_PROCESS_2)(PRADIUS_EXTENSION_CONTROL_BLOCK pECB);

#endif
