User interaction and EAP response attributes management delegated to eap::method

This commit is contained in:
Simon Rozman 2016-10-14 10:34:14 +02:00
parent 3f75ef83bb
commit bafbdec9d3
5 changed files with 196 additions and 22 deletions

View File

@ -130,6 +130,55 @@ namespace eap
/// @} /// @}
/// \name User Interaction
/// @{
///
/// Obtains the user interface context from the EAP method.
///
/// \note This function is always followed by the `EapPeerInvokeInteractiveUI()` function, which is followed by the `EapPeerSetUIContext()` function.
///
/// \sa [EapPeerGetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363612.aspx)
///
virtual void get_ui_context(
_Inout_ BYTE **ppUIContextData,
_Inout_ DWORD *pdwUIContextDataSize);
///
/// Provides a user interface context to the EAP method.
///
/// \note This function is called after the UI has been raised through the `EapPeerGetUIContext()` function.
///
/// \sa [EapPeerSetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363626.aspx)
///
virtual void set_ui_context(
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput);
/// @}
/// \name EAP Response Attributes
/// @{
///
/// Obtains an array of EAP response attributes from the EAP method.
///
/// \sa [EapPeerGetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363609.aspx)
///
virtual void get_response_attributes(_Inout_ EapAttributes *pAttribs);
///
/// Provides an updated array of EAP response attributes to the EAP method.
///
/// \sa [EapPeerSetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363625.aspx)
///
virtual void set_response_attributes(
_In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput);
/// @}
public: public:
module &m_module; ///< EAP module module &m_module; ///< EAP module
config_method &m_cfg; ///< Connection configuration config_method &m_cfg; ///< Connection configuration

View File

@ -109,6 +109,55 @@ void eap::method::get_result(
} }
void eap::method::get_ui_context(
_Inout_ BYTE **ppUIContextData,
_Inout_ DWORD *pdwUIContextDataSize)
{
assert(ppUIContextData);
assert(pdwUIContextDataSize);
// Default implementation returns blank context data.
*ppUIContextData = NULL;
*pdwUIContextDataSize = 0;
}
void eap::method::set_ui_context(
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput)
{
UNREFERENCED_PARAMETER(pUIContextData);
UNREFERENCED_PARAMETER(dwUIContextDataSize);
UNREFERENCED_PARAMETER(pEapOutput);
// Default implementation does nothing with context data.
}
void eap::method::get_response_attributes(_Inout_ EapAttributes *pAttribs)
{
assert(pAttribs);
// Default implementation returns no EAP attributes.
pAttribs->dwNumberOfAttributes = 0;
pAttribs->pAttribs = NULL;
}
void eap::method::set_response_attributes(
_In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput)
{
UNREFERENCED_PARAMETER(pAttribs);
assert(pEapOutput);
// Default implementation discards the EAP attributes.
pEapOutput->action = EapPeerMethodResponseActionDiscard;
pEapOutput->fAllowNotifications = FALSE;
}
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// eap::method_noneap // eap::method_noneap
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////

View File

@ -119,6 +119,55 @@ namespace eap
/// @} /// @}
/// \name User Interaction
/// @{
///
/// Obtains the user interface context from the EAP method.
///
/// \note This function is always followed by the `EapPeerInvokeInteractiveUI()` function, which is followed by the `EapPeerSetUIContext()` function.
///
/// \sa [EapPeerGetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363612.aspx)
///
virtual void get_ui_context(
_Inout_ BYTE **ppUIContextData,
_Inout_ DWORD *pdwUIContextDataSize);
///
/// Provides a user interface context to the EAP method.
///
/// \note This function is called after the UI has been raised through the `EapPeerGetUIContext()` function.
///
/// \sa [EapPeerSetUIContext function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363626.aspx)
///
virtual void set_ui_context(
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput);
/// @}
/// \name EAP Response Attributes
/// @{
///
/// Obtains an array of EAP response attributes from the EAP method.
///
/// \sa [EapPeerGetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363609.aspx)
///
virtual void get_response_attributes(_Inout_ EapAttributes *pAttribs);
///
/// Provides an updated array of EAP response attributes to the EAP method.
///
/// \sa [EapPeerSetResponseAttributes function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363625.aspx)
///
virtual void set_response_attributes(
_In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput);
/// @}
protected: protected:
/// ///
/// Generates master session key /// Generates master session key

View File

@ -144,6 +144,49 @@ void eap::method_ttls::get_result(
} }
void eap::method_ttls::get_ui_context(
_Inout_ BYTE **ppUIContextData,
_Inout_ DWORD *pdwUIContextDataSize)
{
UNREFERENCED_PARAMETER(ppUIContextData);
UNREFERENCED_PARAMETER(pdwUIContextDataSize);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
}
void eap::method_ttls::set_ui_context(
_In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
_In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput)
{
UNREFERENCED_PARAMETER(pUIContextData);
UNREFERENCED_PARAMETER(dwUIContextDataSize);
UNREFERENCED_PARAMETER(pEapOutput);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
}
void eap::method_ttls::get_response_attributes(_Inout_ EapAttributes *pAttribs)
{
UNREFERENCED_PARAMETER(pAttribs);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
}
void eap::method_ttls::set_response_attributes(
_In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput)
{
UNREFERENCED_PARAMETER(pAttribs);
UNREFERENCED_PARAMETER(pEapOutput);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
}
void eap::method_ttls::derive_msk() void eap::method_ttls::derive_msk()
{ {
const unsigned char *_key_block; const unsigned char *_key_block;

View File

@ -241,7 +241,7 @@ void eap::peer_ttls::end_session(_In_ EAP_SESSION_HANDLE hSession)
assert(hSession); assert(hSession);
// End the session. // End the session.
session *s = static_cast<session*>(hSession); auto s = static_cast<session*>(hSession);
//s->end(ppEapError); //s->end(ppEapError);
delete s; delete s;
} }
@ -272,7 +272,7 @@ void eap::peer_ttls::get_result(
_In_ EapPeerMethodResultReason reason, _In_ EapPeerMethodResultReason reason,
_Inout_ EapPeerMethodResult *ppResult) _Inout_ EapPeerMethodResult *ppResult)
{ {
session *s = static_cast<session*>(hSession); auto s = static_cast<session*>(hSession);
s->m_method->get_result(reason, ppResult); s->m_method->get_result(reason, ppResult);
s->m_eap_attr_desc.dwNumberOfAttributes = (DWORD)s->m_method->m_eap_attr.size(); s->m_eap_attr_desc.dwNumberOfAttributes = (DWORD)s->m_method->m_eap_attr.size();
@ -308,11 +308,7 @@ void eap::peer_ttls::get_ui_context(
_Inout_ BYTE **ppUIContextData, _Inout_ BYTE **ppUIContextData,
_Inout_ DWORD *pdwUIContextDataSize) _Inout_ DWORD *pdwUIContextDataSize)
{ {
UNREFERENCED_PARAMETER(hSession); static_cast<session*>(hSession)->m_method->get_ui_context(ppUIContextData, pdwUIContextDataSize);
UNREFERENCED_PARAMETER(ppUIContextData);
UNREFERENCED_PARAMETER(pdwUIContextDataSize);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
} }
@ -322,12 +318,7 @@ void eap::peer_ttls::set_ui_context(
_In_ DWORD dwUIContextDataSize, _In_ DWORD dwUIContextDataSize,
_In_ const EapPeerMethodOutput *pEapOutput) _In_ const EapPeerMethodOutput *pEapOutput)
{ {
UNREFERENCED_PARAMETER(hSession); static_cast<session*>(hSession)->m_method->set_ui_context(pUIContextData, dwUIContextDataSize, pEapOutput);
UNREFERENCED_PARAMETER(pUIContextData);
UNREFERENCED_PARAMETER(dwUIContextDataSize);
UNREFERENCED_PARAMETER(pEapOutput);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
} }
@ -335,10 +326,7 @@ void eap::peer_ttls::get_response_attributes(
_In_ EAP_SESSION_HANDLE hSession, _In_ EAP_SESSION_HANDLE hSession,
_Inout_ EapAttributes *pAttribs) _Inout_ EapAttributes *pAttribs)
{ {
UNREFERENCED_PARAMETER(hSession); static_cast<session*>(hSession)->m_method->get_response_attributes(pAttribs);
UNREFERENCED_PARAMETER(pAttribs);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
} }
@ -347,11 +335,7 @@ void eap::peer_ttls::set_response_attributes(
_In_ const EapAttributes *pAttribs, _In_ const EapAttributes *pAttribs,
_Inout_ EapPeerMethodOutput *pEapOutput) _Inout_ EapPeerMethodOutput *pEapOutput)
{ {
UNREFERENCED_PARAMETER(hSession); static_cast<session*>(hSession)->m_method->set_response_attributes(pAttribs, pEapOutput);
UNREFERENCED_PARAMETER(pAttribs);
UNREFERENCED_PARAMETER(pEapOutput);
throw win_runtime_error(ERROR_NOT_SUPPORTED, __FUNCTION__ " Not supported.");
} }