diff --git a/EAPMethods/src/Main.cpp b/EAPMethods/src/Main.cpp
index be4bba0..77ff83a 100644
--- a/EAPMethods/src/Main.cpp
+++ b/EAPMethods/src/Main.cpp
@@ -236,18 +236,12 @@ DWORD APIENTRY EapPeerGetIdentity(
else if (!ppwszIdentity)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppwszIdentity is NULL.")));
else {
- if (!g_peer.get_identity(
- dwFlags,
- dwConnectionDataSize,
- pConnectionData,
- dwUserDataSize,
- pUserData,
- hTokenImpersonateUser,
- pfInvokeUI,
- pdwUserDataOutSize,
- ppUserDataOut,
- ppwszIdentity,
- ppEapError))
+ _EAPMETHOD_PEER::config_type cfg(g_peer);
+ _EAPMETHOD_PEER::identity_type usr(g_peer);
+ if (!g_peer.unpack(cfg, pConnectionData, dwConnectionDataSize, ppEapError) ||
+ !g_peer.unpack(usr, pUserData, dwUserDataSize, ppEapError) ||
+ !g_peer.get_identity(dwFlags, cfg, usr, hTokenImpersonateUser, pfInvokeUI, ppwszIdentity, ppEapError) ||
+ !g_peer.pack(usr, ppUserDataOut, pdwUserDataOutSize, ppEapError))
{
if (*ppEapError) {
g_peer.log_error(*ppEapError);
@@ -307,7 +301,10 @@ DWORD APIENTRY EapPeerBeginSession(
}
// Begin the session.
- if (!session->begin(dwFlags, pAttributeArray, hTokenImpersonateUser, dwConnectionDataSize, pConnectionData, dwUserDataSize, pUserData, dwMaxSendPacketSize, ppEapError)) {
+ if (!g_peer.unpack(session->m_cfg, pConnectionData, dwConnectionDataSize, ppEapError) ||
+ !g_peer.unpack(session->m_id, pUserData, dwUserDataSize, ppEapError) ||
+ !session->begin(dwFlags, pAttributeArray, hTokenImpersonateUser, dwMaxSendPacketSize, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
return dwResult = (*ppEapError)->dwWinError;
@@ -508,7 +505,10 @@ DWORD APIENTRY EapPeerGetUIContext(
else if (!ppUIContextData)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppUIContextData is NULL.")));
else {
- if (!static_cast<_EAPMETHOD_SESSION*>(hSession)->get_ui_context(pdwUIContextDataSize, ppUIContextData, ppEapError)) {
+ _EAPMETHOD_SESSION::interactive_request_type req;
+ if (!static_cast<_EAPMETHOD_SESSION*>(hSession)->get_ui_context(req, ppEapError) ||
+ !g_peer.pack(req, ppUIContextData, pdwUIContextDataSize, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
dwResult = (*ppEapError)->dwWinError;
@@ -554,7 +554,10 @@ DWORD APIENTRY EapPeerSetUIContext(
else if (!pEapOutput)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pEapOutput is NULL.")));
else {
- if (!static_cast<_EAPMETHOD_SESSION*>(hSession)->set_ui_context(dwUIContextDataSize, pUIContextData, pEapOutput, ppEapError)) {
+ _EAPMETHOD_SESSION::interactive_response_type res;
+ if (!g_peer.unpack(res, pUIContextData, dwUIContextDataSize, ppEapError) ||
+ !static_cast<_EAPMETHOD_SESSION*>(hSession)->set_ui_context(res, pEapOutput, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
dwResult = (*ppEapError)->dwWinError;
@@ -681,16 +684,18 @@ DWORD WINAPI EapPeerGetMethodProperties(
else if (!pMethodPropertyArray)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" pMethodPropertyArray is NULL.")));
else {
- if (!g_peer.get_method_properties(
- dwVersion,
- dwFlags,
- hUserImpersonationToken,
- dwEapConnDataSize,
- pEapConnData,
- dwUserDataSize,
- pUserData,
- pMethodPropertyArray,
- ppEapError))
+ _EAPMETHOD_PEER::config_type cfg(g_peer);
+ _EAPMETHOD_PEER::identity_type usr(g_peer);
+ if (!g_peer.unpack(cfg, pEapConnData, dwEapConnDataSize, ppEapError) ||
+ !g_peer.unpack(usr, pUserData, dwUserDataSize, ppEapError) ||
+ !g_peer.get_method_properties(
+ dwVersion,
+ dwFlags,
+ hUserImpersonationToken,
+ cfg,
+ usr,
+ pMethodPropertyArray,
+ ppEapError))
{
if (*ppEapError) {
g_peer.log_error(*ppEapError);
@@ -757,29 +762,16 @@ DWORD WINAPI EapPeerCredentialsXml2Blob(
// Load credentials.
pCredentialsDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
- _EAPMETHOD_PEER::identity_type cred(g_peer);
- if (!cred.load(pXmlElCredentials, ppEapError)) {
+ _EAPMETHOD_PEER::identity_type usr(g_peer);
+ if (!usr.load(pXmlElCredentials, ppEapError) ||
+ !g_peer.pack(usr, ppCredentialsOut, pdwCredentialsOutSize, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
return dwResult = (*ppEapError)->dwWinError;
} else
return dwResult = ERROR_INVALID_DATA;
}
-
- // Allocate BLOB for credentials.
- assert(ppCredentialsOut);
- assert(pdwCredentialsOutSize);
- *pdwCredentialsOutSize = (DWORD)eapserial::get_pk_size(cred);
- *ppCredentialsOut = g_peer.alloc_memory(*pdwCredentialsOutSize);
- if (!*ppCredentialsOut) {
- g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_OUTOFMEMORY, tstring_printf(_T(__FUNCTION__) _T(" Error allocating memory for configuration BLOB (%uB)."), *pdwCredentialsOutSize).c_str()));
- return dwResult;
- }
-
- // Pack BLOB to output.
- unsigned char *cursor = *ppCredentialsOut;
- eapserial::pack(cursor, cred);
- assert(cursor - *ppCredentialsOut <= (ptrdiff_t)*pdwCredentialsOutSize);
}
return dwResult;
diff --git a/EAPMethods/src/Main_UI.cpp b/EAPMethods/src/Main_UI.cpp
index 252580c..509d736 100644
--- a/EAPMethods/src/Main_UI.cpp
+++ b/EAPMethods/src/Main_UI.cpp
@@ -143,28 +143,15 @@ DWORD WINAPI EapPeerConfigXml2Blob(
// Load configuration.
pConfigDoc->setProperty(bstr(L"SelectionNamespaces"), variant(L"xmlns:eap-metadata=\"urn:ietf:params:xml:ns:yang:ietf-eap-metadata\""));
_EAPMETHOD_PEER_UI::config_type cfg(g_peer);
- if (!cfg.load(pXmlElConfig, ppEapError)) {
+ if (!cfg.load(pXmlElConfig, ppEapError) ||
+ !g_peer.pack(cfg, ppConfigOut, pdwConfigOutSize, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
return dwResult = (*ppEapError)->dwWinError;
} else
return dwResult = ERROR_INVALID_DATA;
}
-
- // Allocate BLOB for configuration.
- assert(ppConfigOut);
- assert(pdwConfigOutSize);
- *pdwConfigOutSize = (DWORD)eapserial::get_pk_size(cfg);
- *ppConfigOut = g_peer.alloc_memory(*pdwConfigOutSize);
- if (!*ppConfigOut) {
- g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_OUTOFMEMORY, tstring_printf(_T(__FUNCTION__) _T(" Error allocating memory for configuration BLOB (%uB)."), *pdwConfigOutSize).c_str()));
- return dwResult;
- }
-
- // Pack BLOB to output.
- unsigned char *cursor = *ppConfigOut;
- eapserial::pack(cursor, cfg);
- assert(cursor - *ppConfigOut <= (ptrdiff_t)*pdwConfigOutSize);
}
return dwResult;
@@ -212,10 +199,12 @@ DWORD WINAPI EapPeerConfigBlob2Xml(
// Unpack configuration.
_EAPMETHOD_PEER_UI::config_type cfg(g_peer);
- if (pConfigIn || !dwConfigInSize) {
- const unsigned char *cursor = pConfigIn;
- eapserial::unpack(cursor, cfg);
- assert(cursor - pConfigIn <= (ptrdiff_t)dwConfigInSize);
+ if (!g_peer.unpack(cfg, pConfigIn, dwConfigInSize, ppEapError)) {
+ if (*ppEapError) {
+ g_peer.log_error(*ppEapError);
+ return dwResult = (*ppEapError)->dwWinError;
+ } else
+ return dwResult = ERROR_INVALID_DATA;
}
// Create configuration XML document.
@@ -305,36 +294,17 @@ DWORD WINAPI EapPeerInvokeConfigUI(
else if (!ppConnectionDataOut)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppConnectionDataOut is NULL.")));
else {
- // Unpack configuration.
_EAPMETHOD_PEER_UI::config_type cfg(g_peer);
- if (pConnectionDataIn || !dwConnectionDataInSize) {
- const unsigned char *cursor = pConnectionDataIn;
- eapserial::unpack(cursor, cfg);
- assert(cursor - pConnectionDataIn <= (ptrdiff_t)dwConnectionDataInSize);
- }
-
- if (!g_peer.invoke_config_ui(hwndParent, cfg, ppEapError)) {
+ if (!g_peer.unpack(cfg, pConnectionDataIn, dwConnectionDataInSize, ppEapError) ||
+ !g_peer.invoke_config_ui(hwndParent, cfg, ppEapError) ||
+ !g_peer.pack(cfg, ppConnectionDataOut, pdwConnectionDataOutSize, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
return dwResult = (*ppEapError)->dwWinError;
} else
return dwResult = ERROR_INVALID_DATA;
}
-
- // Allocate BLOB for configuration.
- assert(ppConnectionDataOut);
- assert(pdwConnectionDataOutSize);
- *pdwConnectionDataOutSize = (DWORD)eapserial::get_pk_size(cfg);
- *ppConnectionDataOut = g_peer.alloc_memory(*pdwConnectionDataOutSize);
- if (!*ppConnectionDataOut) {
- g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_OUTOFMEMORY, tstring_printf(_T(__FUNCTION__) _T(" Error allocating memory for configuration BLOB (%uB)."), *pdwConnectionDataOutSize).c_str()));
- return dwResult;
- }
-
- // Pack BLOB to output.
- unsigned char *cursor = *ppConnectionDataOut;
- eapserial::pack(cursor, cfg);
- assert(cursor - *ppConnectionDataOut <= (ptrdiff_t)*pdwConnectionDataOutSize);
}
return dwResult;
@@ -389,44 +359,19 @@ DWORD WINAPI EapPeerInvokeIdentityUI(
else if (!ppwszIdentity)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppwszIdentity is NULL.")));
else {
- // Unpack configuration.
_EAPMETHOD_PEER_UI::config_type cfg(g_peer);
- if (pConnectionData || !dwConnectionDataSize) {
- const unsigned char *cursor = pConnectionData;
- eapserial::unpack(cursor, cfg);
- assert(cursor - pConnectionData <= (ptrdiff_t)dwConnectionDataSize);
- }
-
- // Unpack configuration.
_EAPMETHOD_PEER_UI::identity_type usr(g_peer);
- if (pUserData || !dwUserDataSize) {
- const unsigned char *cursor = pUserData;
- eapserial::unpack(cursor, usr);
- assert(cursor - pUserData <= (ptrdiff_t)dwUserDataSize);
- }
-
- if (!g_peer.invoke_identity_ui(hwndParent, dwFlags, cfg, usr, ppwszIdentity, ppEapError)) {
+ if (!g_peer.unpack(cfg, pConnectionData, dwConnectionDataSize, ppEapError) ||
+ !g_peer.unpack(usr, pUserData, dwUserDataSize, ppEapError) ||
+ !g_peer.invoke_identity_ui(hwndParent, dwFlags, cfg, usr, ppwszIdentity, ppEapError) ||
+ !g_peer.pack(usr, ppUserDataOut, pdwUserDataOutSize, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
return dwResult = (*ppEapError)->dwWinError;
} else
return dwResult = ERROR_INVALID_DATA;
}
-
- // Allocate BLOB for user data.
- assert(ppUserDataOut);
- assert(pdwUserDataOutSize);
- *pdwUserDataOutSize = (DWORD)eapserial::get_pk_size(usr);
- *ppUserDataOut = g_peer.alloc_memory(*pdwUserDataOutSize);
- if (!*ppUserDataOut) {
- g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_OUTOFMEMORY, tstring_printf(_T(__FUNCTION__) _T(" Error allocating memory for configuration BLOB (%uB)."), *pdwUserDataOutSize).c_str()));
- return dwResult;
- }
-
- // Pack BLOB to output.
- unsigned char *cursor = *ppUserDataOut;
- eapserial::pack(cursor, usr);
- assert(cursor - *ppUserDataOut <= (ptrdiff_t)*pdwUserDataOutSize);
}
return dwResult;
@@ -473,37 +418,18 @@ DWORD WINAPI EapPeerInvokeInteractiveUI(
else if (!ppDataFromInteractiveUI)
g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_INVALID_PARAMETER, _T(__FUNCTION__) _T(" ppDataFromInteractiveUI is NULL.")));
else {
- // Unpack request.
_EAPMETHOD_PEER_UI::interactive_request_type req;
- if (pUIContextData || !dwUIContextDataSize) {
- const unsigned char *cursor = pUIContextData;
- eapserial::unpack(cursor, req);
- assert(cursor - pUIContextData <= (ptrdiff_t)dwUIContextDataSize);
- }
-
_EAPMETHOD_PEER_UI::interactive_response_type res;
- if (!g_peer.invoke_interactive_ui(hwndParent, req, res, ppEapError)) {
+ if (!g_peer.unpack(req, pUIContextData, dwUIContextDataSize, ppEapError) ||
+ !g_peer.invoke_interactive_ui(hwndParent, req, res, ppEapError) ||
+ !g_peer.pack(res, ppDataFromInteractiveUI, pdwDataFromInteractiveUISize, ppEapError))
+ {
if (*ppEapError) {
g_peer.log_error(*ppEapError);
return dwResult = (*ppEapError)->dwWinError;
} else
return dwResult = ERROR_INVALID_DATA;
}
-
- // Allocate BLOB for user data.
- assert(ppDataFromInteractiveUI);
- assert(pdwDataFromInteractiveUISize);
- *pdwDataFromInteractiveUISize = (DWORD)eapserial::get_pk_size(res);
- *ppDataFromInteractiveUI = g_peer.alloc_memory(*pdwDataFromInteractiveUISize);
- if (!*ppDataFromInteractiveUI) {
- g_peer.log_error(*ppEapError = g_peer.make_error(dwResult = ERROR_OUTOFMEMORY, tstring_printf(_T(__FUNCTION__) _T(" Error allocating memory for interactive response (%uB)."), *pdwDataFromInteractiveUISize).c_str()));
- return dwResult;
- }
-
- // Pack BLOB to output.
- unsigned char *cursor = *ppDataFromInteractiveUI;
- eapserial::pack(cursor, res);
- assert(cursor - *ppDataFromInteractiveUI <= (ptrdiff_t)*pdwDataFromInteractiveUISize);
}
return dwResult;
diff --git a/lib/EAPBase/build/EAPBase.vcxproj b/lib/EAPBase/build/EAPBase.vcxproj
index ca023e8..c1356db 100644
--- a/lib/EAPBase/build/EAPBase.vcxproj
+++ b/lib/EAPBase/build/EAPBase.vcxproj
@@ -92,7 +92,6 @@
-
Create
Create
diff --git a/lib/EAPBase/build/EAPBase.vcxproj.filters b/lib/EAPBase/build/EAPBase.vcxproj.filters
index 9dadc8e..520ae1d 100644
--- a/lib/EAPBase/build/EAPBase.vcxproj.filters
+++ b/lib/EAPBase/build/EAPBase.vcxproj.filters
@@ -40,9 +40,6 @@
Source Files
-
- Source Files
-
Source Files
diff --git a/lib/EAPBase/include/Module.h b/lib/EAPBase/include/Module.h
index 170fac1..f99f074 100644
--- a/lib/EAPBase/include/Module.h
+++ b/lib/EAPBase/include/Module.h
@@ -46,8 +46,9 @@ namespace eap
#include "EAP.h"
-#include
+#include
#include
+#include
#include
#include // Must include after
@@ -452,6 +453,104 @@ namespace eap
/// @}
+ /// \name BLOB management
+ /// @{
+
+ ///
+ /// Unencrypts and unpacks the BLOB
+ ///
+ /// \param[inout] record Object to unpack to
+ /// \param[in ] pDataIn Pointer to encrypted BLOB
+ /// \param[in ] dwDataInSize Size of \p pDataIn
+ /// \param[out ] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
+ ///
+ /// \returns
+ /// - \c true if succeeded
+ /// - \c false otherwise. See \p ppEapError for details.
+ ///
+ template
+ bool unpack(
+ _Inout_ T &record,
+ _In_count_(dwDataInSize) const BYTE *pDataIn,
+ _In_ DWORD dwDataInSize,
+ _Out_ EAP_ERROR **ppEapError)
+ {
+ // Prepare cryptographics provider.
+ winstd::crypt_prov cp;
+ if (!cp.create(NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
+ *ppEapError = make_error(GetLastError(), _T(__FUNCTION__) _T(" CryptAcquireContext failed."));
+ return false;
+ }
+
+ // Decrypt data.
+ vector > data;
+ if (!decrypt_md5(cp, pDataIn, dwDataInSize, data, ppEapError))
+ return false;
+
+ const unsigned char *cursor = data.data();
+ eapserial::unpack(cursor, record);
+ assert(cursor - data.data() <= (ptrdiff_t)data.size());
+
+ return true;
+ }
+
+
+ ///
+ /// Packs and encrypts to the BLOB
+ ///
+ /// \param[in ] record Object to pack
+ /// \param[out] ppDataOut Pointer to pointer to receive encrypted BLOB. Pointer must be freed using `module::free_memory()`.
+ /// \param[out] pdwDataOutSize Pointer to \p ppDataOut size
+ /// \param[out] ppEapError Pointer to error descriptor in case of failure. Free using `module::free_error_memory()`.
+ ///
+ /// \returns
+ /// - \c true if succeeded
+ /// - \c false otherwise. See \p ppEapError for details.
+ ///
+ template
+ bool pack(
+ _In_ const T &record,
+ _Out_ BYTE **ppDataOut,
+ _Out_ DWORD *pdwDataOutSize,
+ _Out_ EAP_ERROR **ppEapError)
+ {
+ // Allocate BLOB.
+ std::vector > data;
+ data.resize(eapserial::get_pk_size(record));
+
+ // Pack to BLOB.
+ unsigned char *cursor = data.data();
+ eapserial::pack(cursor, record);
+ data.resize(cursor - data.data());
+
+ // Prepare cryptographics provider.
+ winstd::crypt_prov cp;
+ if (!cp.create(NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
+ *ppEapError = make_error(GetLastError(), _T(__FUNCTION__) _T(" CryptAcquireContext failed."));
+ return false;
+ }
+
+ // Encrypt BLOB.
+ std::vector data_enc;
+ if (!encrypt_md5(cp, data.data(), data.size(), data_enc, ppEapError))
+ return false;
+
+ // Copy encrypted BLOB to output.
+ assert(ppDataOut);
+ assert(pdwDataOutSize);
+ *pdwDataOutSize = (DWORD)data_enc.size();
+ *ppDataOut = alloc_memory(*pdwDataOutSize);
+ if (!*ppDataOut) {
+ log_error(*ppEapError = g_peer.make_error(ERROR_OUTOFMEMORY, tstring_printf(_T(__FUNCTION__) _T(" Error allocating memory for BLOB (%uB)."), *pdwDataOutSize).c_str()));
+ return false;
+ }
+ memcpy(*ppDataOut, data_enc.data(), *pdwDataOutSize);
+
+ return true;
+ }
+
+ /// @}
+
public:
HINSTANCE m_instance; ///< Windows module instance
const type_t m_eap_method; ///< EAP method type
@@ -540,17 +639,13 @@ namespace eap
/// - \c false otherwise. See \p ppEapError for details.
///
virtual bool get_identity(
- _In_ DWORD dwFlags,
- _In_ DWORD dwConnectionDataSize,
- _In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _In_ HANDLE hTokenImpersonateUser,
- _Out_ BOOL *pfInvokeUI,
- _Out_ DWORD *pdwUserDataOutSize,
- _Out_ BYTE **ppUserDataOut,
- _Out_ WCHAR **ppwszIdentity,
- _Out_ EAP_ERROR **ppEapError) = 0;
+ _In_ DWORD dwFlags,
+ _In_ const config_type &cfg,
+ _Inout_ identity_type &usr,
+ _In_ HANDLE hTokenImpersonateUser,
+ _Out_ BOOL *pfInvokeUI,
+ _Out_ WCHAR **ppwszIdentity,
+ _Out_ EAP_ERROR **ppEapError) = 0;
///
/// Defines the implementation of an EAP method-specific function that retrieves the properties of an EAP method given the connection and user data.
@@ -562,15 +657,13 @@ namespace eap
/// - \c false otherwise. See \p ppEapError for details.
///
virtual bool get_method_properties(
- _In_ DWORD dwVersion,
- _In_ DWORD dwFlags,
- _In_ HANDLE hUserImpersonationToken,
- _In_ DWORD dwEapConnDataSize,
- _In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
- _Out_ EAP_ERROR **ppEapError) const = 0;
+ _In_ DWORD dwVersion,
+ _In_ DWORD dwFlags,
+ _In_ HANDLE hUserImpersonationToken,
+ _In_ const config_type &cfg,
+ _In_ const identity_type &usr,
+ _Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
+ _Out_ EAP_ERROR **ppEapError) const = 0;
///
/// Defines the implementation of an EAP method-specific function that obtains the EAP Single-Sign-On (SSO) credential input fields for an EAP method.
diff --git a/lib/EAPBase/include/Session.h b/lib/EAPBase/include/Session.h
index 3f39987..85586b0 100644
--- a/lib/EAPBase/include/Session.h
+++ b/lib/EAPBase/include/Session.h
@@ -23,7 +23,7 @@ namespace eap
///
/// EAP session
///
- class session;
+ template class session;
}
#pragma once
@@ -40,29 +40,74 @@ extern "C" {
namespace eap
{
+ template
class session
{
+ public:
+ ///
+ /// Provider configuration data type
+ ///
+ typedef config_provider<_Tcfg> provider_config_type;
+
+ ///
+ /// Configuration data type
+ ///
+ typedef config_providers config_type;
+
+ ///
+ /// Identity data type
+ ///
+ typedef _Tid identity_type;
+
+ ///
+ /// Interactive request data type
+ ///
+ typedef _Tint interactive_request_type;
+
+ ///
+ /// Interactive response data type
+ ///
+ typedef _Tintres interactive_response_type;
+
public:
///
/// Constructs a session
///
/// \param[in] mod Reference of the EAP module to use for global services
///
- session(_In_ module &mod);
+ session(_In_ module &mod) :
+ m_module(mod),
+ m_cfg(mod),
+ m_id(mod)
+ {
+ }
+
///
/// Copies session
///
/// \param[in] other Session to copy from
///
- session(_In_ const session &other);
+ session(_In_ const session &other) :
+ m_module(other.m_module),
+ m_cfg(other.m_cfg),
+ m_id(other.m_id)
+ {
+ }
+
///
/// Moves session
///
/// \param[in] other Session to move from
///
- session(_Inout_ session &&other);
+ session(_Inout_ session &&other) :
+ m_module(other.m_module),
+ m_cfg(std::move(other.m_cfg)),
+ m_id(std::move(other.m_id))
+ {
+ }
+
///
/// Copies session
@@ -71,7 +116,16 @@ namespace eap
///
/// \returns Reference to this object
///
- session& operator=(_In_ const session &other);
+ session& operator=(_In_ const session &other)
+ {
+ if (this != std::addressof(other)) {
+ assert(std::addressof(m_module) ==std::addressof(other.m_module)); // Copy session within same module only!
+ m_cfg = other.m_cfg;
+ m_id = other.m_id;
+ }
+ return *this;
+ }
+
///
/// Moves session
@@ -80,7 +134,16 @@ namespace eap
///
/// \returns Reference to this object
///
- session& operator=(_Inout_ session &&other);
+ session& operator=(_Inout_ session &&other)
+ {
+ if (this != std::addressof(other)) {
+ assert(std::addressof(m_module) ==std::addressof(other.m_module)); // Move session within same module only!
+ m_cfg = std::move(other.m_cfg);
+ m_id = std::move(other.m_id);
+ }
+ return *this;
+ }
+
/// \name Session start/end
/// @{
@@ -95,15 +158,21 @@ namespace eap
/// - \c false otherwise. See \p ppEapError for details.
///
virtual bool begin(
- _In_ DWORD dwFlags,
- _In_ const EapAttributes *pAttributeArray,
- _In_ HANDLE hTokenImpersonateUser,
- _In_ DWORD dwConnectionDataSize,
- _In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _In_ DWORD dwMaxSendPacketSize,
- _Out_ EAP_ERROR **ppEapError);
+ _In_ DWORD dwFlags,
+ _In_ const EapAttributes *pAttributeArray,
+ _In_ HANDLE hTokenImpersonateUser,
+ _In_ DWORD dwMaxSendPacketSize,
+ _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(dwFlags);
+ UNREFERENCED_PARAMETER(pAttributeArray);
+ UNREFERENCED_PARAMETER(hTokenImpersonateUser);
+ UNREFERENCED_PARAMETER(dwMaxSendPacketSize);
+ UNREFERENCED_PARAMETER(ppEapError);
+
+ return true;
+ }
+
///
/// Ends an EAP authentication session for the EAP method.
@@ -114,7 +183,12 @@ namespace eap
/// - \c true if succeeded
/// - \c false otherwise. See \p ppEapError for details.
///
- virtual bool end(_Out_ EAP_ERROR **ppEapError);
+ virtual bool end(_Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(ppEapError);
+
+ return true;
+ }
/// @}
@@ -134,7 +208,17 @@ namespace eap
_In_ DWORD dwReceivedPacketSize,
_In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
_Out_ EapPeerMethodOutput *pEapOutput,
- _Out_ EAP_ERROR **ppEapError);
+ _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(dwReceivedPacketSize);
+ UNREFERENCED_PARAMETER(pReceivedPacket);
+ UNREFERENCED_PARAMETER(pEapOutput);
+ assert(ppEapError);
+
+ *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
+ return false;
+ }
+
///
/// Obtains a response packet from the EAP method.
@@ -148,7 +232,16 @@ namespace eap
virtual bool get_response_packet(
_Inout_ DWORD *pdwSendPacketSize,
_Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
- _Out_ EAP_ERROR **ppEapError);
+ _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(pdwSendPacketSize);
+ UNREFERENCED_PARAMETER(pSendPacket);
+ assert(ppEapError);
+
+ *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
+ return false;
+ }
+
///
/// Obtains the result of an authentication session from the EAP method.
@@ -159,7 +252,15 @@ namespace eap
/// - \c true if succeeded
/// - \c false otherwise. See \p ppEapError for details.
///
- virtual bool get_result(_In_ EapPeerMethodResultReason reason, _Out_ EapPeerMethodResult *ppResult, _Out_ EAP_ERROR **ppEapError);
+ virtual bool get_result(_In_ EapPeerMethodResultReason reason, _Out_ EapPeerMethodResult *ppResult, _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(reason);
+ UNREFERENCED_PARAMETER(ppResult);
+ assert(ppEapError);
+
+ *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
+ return false;
+ }
/// @}
@@ -178,9 +279,16 @@ namespace eap
/// - \c false otherwise. See \p ppEapError for details.
///
virtual bool get_ui_context(
- _Out_ DWORD *pdwUIContextDataSize,
- _Out_ BYTE **ppUIContextData,
- _Out_ EAP_ERROR **ppEapError);
+ _Out_ interactive_request_type &req,
+ _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(req);
+ assert(ppEapError);
+
+ *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
+ return false;
+ }
+
///
/// Provides a user interface context to the EAP method.
@@ -194,10 +302,17 @@ namespace eap
/// - \c false otherwise. See \p ppEapError for details.
///
virtual bool set_ui_context(
- _In_ DWORD dwUIContextDataSize,
- _In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
- _In_ const EapPeerMethodOutput *pEapOutput,
- _Out_ EAP_ERROR **ppEapError);
+ _In_ const interactive_response_type &res,
+ _In_ const EapPeerMethodOutput *pEapOutput,
+ _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(res);
+ UNREFERENCED_PARAMETER(pEapOutput);
+ assert(ppEapError);
+
+ *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
+ return false;
+ }
/// @}
@@ -213,7 +328,15 @@ namespace eap
/// - \c true if succeeded
/// - \c false otherwise. See \p ppEapError for details.
///
- virtual bool get_response_attributes(_Out_ EapAttributes *pAttribs, _Out_ EAP_ERROR **ppEapError);
+ virtual bool get_response_attributes(_Out_ EapAttributes *pAttribs, _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(pAttribs);
+ assert(ppEapError);
+
+ *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
+ return false;
+ }
+
///
/// Provides an updated array of EAP response attributes to the EAP method.
@@ -224,11 +347,21 @@ namespace eap
/// - \c true if succeeded
/// - \c false otherwise. See \p ppEapError for details.
///
- virtual bool set_response_attributes(const _In_ EapAttributes *pAttribs, _Out_ EapPeerMethodOutput *pEapOutput, _Out_ EAP_ERROR **ppEapError);
+ virtual bool set_response_attributes(const _In_ EapAttributes *pAttribs, _Out_ EapPeerMethodOutput *pEapOutput, _Out_ EAP_ERROR **ppEapError)
+ {
+ UNREFERENCED_PARAMETER(pAttribs);
+ UNREFERENCED_PARAMETER(pEapOutput);
+ assert(ppEapError);
+
+ *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
+ return false;
+ }
/// @}
public:
module &m_module; ///< Reference of the EAP module
+ config_type m_cfg; ///< Session configuration
+ identity_type m_id; ///< User identity
};
}
diff --git a/lib/EAPBase/src/Session.cpp b/lib/EAPBase/src/Session.cpp
deleted file mode 100644
index 58ab296..0000000
--- a/lib/EAPBase/src/Session.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- Copyright 2015-2016 Amebis
- Copyright 2016 GÉANT
-
- This file is part of GÉANTLink.
-
- GÉANTLink is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- GÉANTLink is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GÉANTLink. If not, see .
-*/
-
-#include "StdAfx.h"
-
-using namespace std;
-using namespace winstd;
-
-
-//////////////////////////////////////////////////////////////////////
-// eap::session
-//////////////////////////////////////////////////////////////////////
-
-eap::session::session(_In_ module &mod) :
- m_module(mod)
-{
-}
-
-
-eap::session::session(_In_ const session &other) :
- m_module(other.m_module)
-{
-}
-
-
-eap::session::session(_Inout_ session &&other) :
- m_module(other.m_module)
-{
-}
-
-
-eap::session& eap::session::operator=(_In_ const session &other)
-{
- UNREFERENCED_PARAMETER(other);
- assert(&m_module == &other.m_module); // Copy session within same module only!
- return *this;
-}
-
-
-eap::session& eap::session::operator=(_Inout_ session &&other)
-{
- UNREFERENCED_PARAMETER(other);
- assert(&m_module == &other.m_module); // Move session within same module only!
- return *this;
-}
-
-
-bool eap::session::begin(
- _In_ DWORD dwFlags,
- _In_ const EapAttributes *pAttributeArray,
- _In_ HANDLE hTokenImpersonateUser,
- _In_ DWORD dwConnectionDataSize,
- _In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _In_ DWORD dwMaxSendPacketSize,
- _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(dwFlags);
- UNREFERENCED_PARAMETER(pAttributeArray);
- UNREFERENCED_PARAMETER(hTokenImpersonateUser);
- UNREFERENCED_PARAMETER(dwConnectionDataSize);
- UNREFERENCED_PARAMETER(pConnectionData);
- UNREFERENCED_PARAMETER(dwUserDataSize);
- UNREFERENCED_PARAMETER(pUserData);
- UNREFERENCED_PARAMETER(dwMaxSendPacketSize);
- UNREFERENCED_PARAMETER(ppEapError);
-
- return true;
-}
-
-
-bool eap::session::end(_Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(ppEapError);
-
- return true;
-}
-
-
-bool eap::session::process_request_packet(
- _In_ DWORD dwReceivedPacketSize,
- _In_bytecount_(dwReceivedPacketSize) const EapPacket *pReceivedPacket,
- _Out_ EapPeerMethodOutput *pEapOutput,
- _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(dwReceivedPacketSize);
- UNREFERENCED_PARAMETER(pReceivedPacket);
- UNREFERENCED_PARAMETER(pEapOutput);
- assert(ppEapError);
-
- *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
- return false;
-}
-
-
-bool eap::session::get_response_packet(
- _Inout_ DWORD *pdwSendPacketSize,
- _Inout_bytecap_(*dwSendPacketSize) EapPacket *pSendPacket,
- _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(pdwSendPacketSize);
- UNREFERENCED_PARAMETER(pSendPacket);
- assert(ppEapError);
-
- *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
- return false;
-}
-
-
-bool eap::session::get_result(_In_ EapPeerMethodResultReason reason, _Out_ EapPeerMethodResult *ppResult, _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(reason);
- UNREFERENCED_PARAMETER(ppResult);
- assert(ppEapError);
-
- *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
- return false;
-}
-
-
-bool eap::session::get_ui_context(
- _Out_ DWORD *pdwUIContextDataSize,
- _Out_ BYTE **ppUIContextData,
- _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(pdwUIContextDataSize);
- UNREFERENCED_PARAMETER(ppUIContextData);
- assert(ppEapError);
-
- *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
- return false;
-}
-
-
-bool eap::session::set_ui_context(
- _In_ DWORD dwUIContextDataSize,
- _In_count_(dwUIContextDataSize) const BYTE *pUIContextData,
- _In_ const EapPeerMethodOutput *pEapOutput,
- _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(dwUIContextDataSize);
- UNREFERENCED_PARAMETER(pUIContextData);
- UNREFERENCED_PARAMETER(pEapOutput);
- assert(ppEapError);
-
- *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
- return false;
-}
-
-
-bool eap::session::get_response_attributes(_Out_ EapAttributes *pAttribs, _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(pAttribs);
- assert(ppEapError);
-
- *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
- return false;
-}
-
-
-bool eap::session::set_response_attributes(const _In_ EapAttributes *pAttribs, _Out_ EapPeerMethodOutput *pEapOutput, _Out_ EAP_ERROR **ppEapError)
-{
- UNREFERENCED_PARAMETER(pAttribs);
- UNREFERENCED_PARAMETER(pEapOutput);
- assert(ppEapError);
-
- *ppEapError = m_module.make_error(ERROR_NOT_SUPPORTED, _T(__FUNCTION__) _T(" Not supported."));
- return false;
-}
diff --git a/lib/TTLS/include/Module.h b/lib/TTLS/include/Module.h
index 851e551..236dbb2 100644
--- a/lib/TTLS/include/Module.h
+++ b/lib/TTLS/include/Module.h
@@ -35,7 +35,7 @@ namespace eap
namespace eap
{
- class peer_ttls : public peer
+ class peer_ttls : public peer
{
public:
///
@@ -75,17 +75,13 @@ namespace eap
/// - \c false otherwise. See \p ppEapError for details.
///
virtual bool get_identity(
- _In_ DWORD dwFlags,
- _In_ DWORD dwConnectionDataSize,
- _In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _In_ HANDLE hTokenImpersonateUser,
- _Out_ BOOL *pfInvokeUI,
- _Out_ DWORD *pdwUserDataOutSize,
- _Out_ BYTE **ppUserDataOut,
- _Out_ WCHAR **ppwszIdentity,
- _Out_ EAP_ERROR **ppEapError);
+ _In_ DWORD dwFlags,
+ _In_ const config_type &cfg,
+ _Inout_ identity_type &usr,
+ _In_ HANDLE hTokenImpersonateUser,
+ _Out_ BOOL *pfInvokeUI,
+ _Out_ WCHAR **ppwszIdentity,
+ _Out_ EAP_ERROR **ppEapError);
///
/// Defines the implementation of an EAP method-specific function that retrieves the properties of an EAP method given the connection and user data.
@@ -97,14 +93,12 @@ namespace eap
/// - \c false otherwise. See \p ppEapError for details.
///
virtual bool get_method_properties(
- _In_ DWORD dwVersion,
- _In_ DWORD dwFlags,
- _In_ HANDLE hUserImpersonationToken,
- _In_ DWORD dwEapConnDataSize,
- _In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
- _Out_ EAP_ERROR **ppEapError) const;
+ _In_ DWORD dwVersion,
+ _In_ DWORD dwFlags,
+ _In_ HANDLE hUserImpersonationToken,
+ _In_ const config_type &cfg,
+ _In_ const identity_type &usr,
+ _Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
+ _Out_ EAP_ERROR **ppEapError) const;
};
}
diff --git a/lib/TTLS/include/Session.h b/lib/TTLS/include/Session.h
index da0cf17..1b34674 100644
--- a/lib/TTLS/include/Session.h
+++ b/lib/TTLS/include/Session.h
@@ -33,7 +33,7 @@ namespace eap
namespace eap
{
- class session_ttls : public session
+ class session_ttls : public session
{
public:
///
diff --git a/lib/TTLS/src/Module.cpp b/lib/TTLS/src/Module.cpp
index 2ced734..4a658d2 100644
--- a/lib/TTLS/src/Module.cpp
+++ b/lib/TTLS/src/Module.cpp
@@ -59,27 +59,19 @@ bool eap::peer_ttls::shutdown(_Out_ EAP_ERROR **ppEapError)
bool eap::peer_ttls::get_identity(
- _In_ DWORD dwFlags,
- _In_ DWORD dwConnectionDataSize,
- _In_count_(dwConnectionDataSize) const BYTE *pConnectionData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _In_ HANDLE hTokenImpersonateUser,
- _Out_ BOOL *pfInvokeUI,
- _Out_ DWORD *pdwUserDataOutSize,
- _Out_ BYTE **ppUserDataOut,
- _Out_ WCHAR **ppwszIdentity,
- _Out_ EAP_ERROR **ppEapError)
+ _In_ DWORD dwFlags,
+ _In_ const config_type &cfg,
+ _Inout_ identity_type &usr,
+ _In_ HANDLE hTokenImpersonateUser,
+ _Out_ BOOL *pfInvokeUI,
+ _Out_ WCHAR **ppwszIdentity,
+ _Out_ EAP_ERROR **ppEapError)
{
UNREFERENCED_PARAMETER(dwFlags);
- UNREFERENCED_PARAMETER(dwConnectionDataSize);
- UNREFERENCED_PARAMETER(pConnectionData);
- UNREFERENCED_PARAMETER(dwUserDataSize);
- UNREFERENCED_PARAMETER(pUserData);
+ UNREFERENCED_PARAMETER(cfg);
+ UNREFERENCED_PARAMETER(usr);
UNREFERENCED_PARAMETER(hTokenImpersonateUser);
UNREFERENCED_PARAMETER(pfInvokeUI);
- UNREFERENCED_PARAMETER(pdwUserDataOutSize);
- UNREFERENCED_PARAMETER(ppUserDataOut);
UNREFERENCED_PARAMETER(ppwszIdentity);
UNREFERENCED_PARAMETER(ppEapError);
@@ -89,23 +81,19 @@ bool eap::peer_ttls::get_identity(
bool eap::peer_ttls::get_method_properties(
- _In_ DWORD dwVersion,
- _In_ DWORD dwFlags,
- _In_ HANDLE hUserImpersonationToken,
- _In_ DWORD dwEapConnDataSize,
- _In_count_(dwEapConnDataSize) const BYTE *pEapConnData,
- _In_ DWORD dwUserDataSize,
- _In_count_(dwUserDataSize) const BYTE *pUserData,
- _Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
- _Out_ EAP_ERROR **ppEapError) const
+ _In_ DWORD dwVersion,
+ _In_ DWORD dwFlags,
+ _In_ HANDLE hUserImpersonationToken,
+ _In_ const config_type &cfg,
+ _In_ const identity_type &usr,
+ _Out_ EAP_METHOD_PROPERTY_ARRAY *pMethodPropertyArray,
+ _Out_ EAP_ERROR **ppEapError) const
{
UNREFERENCED_PARAMETER(dwVersion);
UNREFERENCED_PARAMETER(dwFlags);
UNREFERENCED_PARAMETER(hUserImpersonationToken);
- UNREFERENCED_PARAMETER(dwEapConnDataSize);
- UNREFERENCED_PARAMETER(pEapConnData);
- UNREFERENCED_PARAMETER(dwUserDataSize);
- UNREFERENCED_PARAMETER(pUserData);
+ UNREFERENCED_PARAMETER(cfg);
+ UNREFERENCED_PARAMETER(usr);
UNREFERENCED_PARAMETER(pMethodPropertyArray);
UNREFERENCED_PARAMETER(ppEapError);
diff --git a/lib/TTLS/src/Session.cpp b/lib/TTLS/src/Session.cpp
index b5f68ee..1b461ac 100644
--- a/lib/TTLS/src/Session.cpp
+++ b/lib/TTLS/src/Session.cpp
@@ -28,19 +28,19 @@ using namespace winstd;
// eap::session_ttls
//////////////////////////////////////////////////////////////////////
-eap::session_ttls::session_ttls(_In_ module &mod) : session(mod)
+eap::session_ttls::session_ttls(_In_ module &mod) : session(mod)
{
}
eap::session_ttls::session_ttls(_In_ const session_ttls &other) :
- session(other)
+ session(other)
{
}
eap::session_ttls::session_ttls(_Inout_ session_ttls &&other) :
- session(std::move(other))
+ session(std::move(other))
{
}
@@ -48,7 +48,7 @@ eap::session_ttls::session_ttls(_Inout_ session_ttls &&other) :
eap::session_ttls& eap::session_ttls::operator=(_In_ const session_ttls &other)
{
if (this != &other)
- (session&)*this = other;
+ (session&)*this = other;
return *this;
}
@@ -57,7 +57,7 @@ eap::session_ttls& eap::session_ttls::operator=(_In_ const session_ttls &other)
eap::session_ttls& eap::session_ttls::operator=(_Inout_ session_ttls &&other)
{
if (this != &other)
- (session&)*this = std::move(other);
+ (session&)*this = std::move(other);
return *this;
}