/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_EAPPAPIS
#define _INC_EAPPAPIS
#if (_WIN32_WINNT >= 0x0600)
#include <eaptypes.h>
#include <eaphostpeertypes.h>
#ifdef __cplusplus
extern "C" {
#endif

DWORD APIENTRY EapHostPeerGetResult(
  EAP_SESSIONID sessionHandle,
  EapHostPeerMethodResultReason reason,
  EapHostPeerMethodResult *ppResult,
  EAP_ERROR **ppEapError
);

DWORD WINAPI EapHostPeerProcessReceivedPacket(
  EAP_SESSIONID sessionHandle,
  DWORD cbReceivePacket,
  const BYTE *pReceivePacket,
  EapHostPeerResponseAction *pEapOutput,
  EAP_ERROR **ppEapError
);

VOID APIENTRY EapHostPeerFreeEapError(
  EAP_ERROR *ppEapError
);

DWORD APIENTRY EapHostPeerClearConnection(
  GUID *pConnectionId,
  EAP_ERROR **ppEapError
);

DWORD APIENTRY EapHostPeerEndSession(
  EAP_SESSIONID sessionHandle,
  EAP_ERROR **ppEapError
);

DWORD APIENTRY EapHostPeerGetAuthStatus(
  EAP_SESSIONID sessionHandle,
  EapHostPeerAuthParams authParam,
  DWORD *pcbAuthData,
  BYTE **ppAuthData,
  EAP_ERROR **ppEapError
);

DWORD APIENTRY EapHostPeerGetResponseAttributes(
  EAP_SESSIONID sessionHandle,
  EapAttributes *pAttribs,
  EAP_ERROR **ppEapError
);

DWORD WINAPI EapHostPeerGetSendPacket(
  EAP_SESSIONID sessionHandle,
  DWORD *pcbSendPacket,
  BYTE **ppSendPacket,
  EAP_ERROR **ppEapError
);

DWORD APIENTRY EapHostPeerGetUIContext(
  EAP_SESSIONID sessionHandle,
  DWORD *pdwSizeOfUIContextData,
  BYTE **ppUIContextData,
  EAP_ERROR **ppEapError
);

DWORD APIENTRY EapHostPeerSetResponseAttributes(
  EAP_SESSIONID sessionHandle,
  const EapAttributes *pAttribs,
  EapHostPeerResponseAction *pEapOutput,
  EAP_ERROR **ppEapError
);

DWORD APIENTRY EapHostPeerSetUIContext(
  EAP_SESSIONID sessionHandle,
  DWORD dwSizeOfUIContextData,
  const BYTE *pUIContextData,
  EapHostPeerResponseAction *pEapOutput,
  EAP_ERROR **ppEapError
);

typedef VOID ( CALLBACK *NotificationHandler )(
  GUID connectionId,
  VOID *pContextData
);

DWORD APIENTRY EapHostPeerBeginSession(
  DWORD dwFlags,
  EAP_METHOD_TYPE eapType,
  const EapAttributes *pAttributeArray,
  HANDLE hTokenImpersonateUser,
  DWORD dwSizeOfConnectionData,
  const BYTE *pConnectionData,
  DWORD dwSizeOfUserData,
  const BYTE *pUserData,
  DWORD dwMaxSendPacketSize,
  const GUID *pConnectionId,
  NotificationHandler func,
  VOID *pContextData,
  EAP_SESSIONID *pSessionId,
  EAP_ERROR **ppEapError
);

VOID WINAPI  EapHostPeerFreeRuntimeMemory(
  BYTE *pData
);

DWORD WINAPI EapHostPeerGetIdentity(
  DWORD dwVersion,
  DWORD dwFlags,
  EAP_METHOD_TYPE eapMethodType,
  DWORD dwSizeofConnectionData,
  const BYTE *pConnectionData,
  DWORD dwSizeofUserData,
  const  BYTE *pUserData,
  HANDLE hTokenImpersonateUser,
  WINBOOL *pfInvokeUI,
  DWORD *pdwSizeofUserDataOut,
  BYTE **ppUserDataOut,
  LPWSTR *ppwszIdentity,
  EAP_ERROR **ppEapError,
  BYTE **ppvReserved
);

DWORD WINAPI EapHostPeerInitialize(void);
void WINAPI EapHostPeerUninitialize(void);

#ifdef __cplusplus
}
#endif
#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_EAPPAPIS*/