Some EapHost peer helper classes introduced

This commit is contained in:
Simon Rozman 2016-09-30 15:19:43 +02:00
parent d029358086
commit 129b9c9a10
2 changed files with 138 additions and 0 deletions

View File

@ -21,6 +21,7 @@
#include "Common.h" #include "Common.h"
#include <Windows.h> #include <Windows.h>
#include <eaphostpeerconfigapis.h>
#include <eaptypes.h> // Must include after <Windows.h> #include <eaptypes.h> // Must include after <Windows.h>
namespace winstd namespace winstd
@ -38,6 +39,16 @@ namespace winstd
/// ///
enum eap_type_t; enum eap_type_t;
///
/// Deleter for unique_ptr using EapHostPeerFreeMemory
///
struct WINSTD_API EapHostPeerFreeMemory_delete;
///
/// Deleter for unique_ptr to EAP_ERROR using EapHostPeerFreeEapError
///
struct WINSTD_API EapHostPeerFreeErrorMemory_delete;
/// ///
/// EAP_ATTRIBUTE wrapper class /// EAP_ATTRIBUTE wrapper class
/// ///
@ -53,6 +64,11 @@ namespace winstd
/// ///
class WINSTD_API eap_packet; class WINSTD_API eap_packet;
///
/// EAP_METHOD_INFO_ARRAY wrapper class
///
class WINSTD_API eap_method_info_array;
/// @} /// @}
} }
@ -87,6 +103,40 @@ namespace winstd
}; };
struct WINSTD_API EapHostPeerFreeMemory_delete
{
///
/// Default constructor
///
EapHostPeerFreeMemory_delete() {}
///
/// Delete a pointer
///
void operator()(BYTE *_Ptr) const
{
EapHostPeerFreeMemory(_Ptr);
}
};
struct WINSTD_API EapHostPeerFreeErrorMemory_delete
{
///
/// Default constructor
///
EapHostPeerFreeErrorMemory_delete() {}
///
/// Delete a pointer
///
void operator()(EAP_ERROR *_Ptr) const
{
EapHostPeerFreeErrorMemory(_Ptr);
}
};
class WINSTD_API __declspec(novtable) eap_attr : public EAP_ATTRIBUTE class WINSTD_API __declspec(novtable) eap_attr : public EAP_ATTRIBUTE
{ {
public: public:
@ -304,4 +354,60 @@ namespace winstd
/// ///
virtual handle_type duplicate_internal(_In_ handle_type h) const; virtual handle_type duplicate_internal(_In_ handle_type h) const;
}; };
class WINSTD_API __declspec(novtable) eap_method_info_array : public EAP_METHOD_INFO_ARRAY
{
WINSTD_NONCOPYABLE(eap_method_info_array)
public:
///
/// Constructs an empty array
///
inline eap_method_info_array()
{
dwNumberOfMethods = 0;
pEapMethods = NULL;
}
///
/// Move constructor
///
/// \param[inout] other A rvalue reference of another object
///
inline eap_method_info_array(_Inout_ eap_method_info_array &&other)
{
dwNumberOfMethods = other.dwNumberOfMethods;
pEapMethods = other.pEapMethods;
other.dwNumberOfMethods = 0;
other.pEapMethods = NULL;
}
///
/// Destructor
///
~eap_method_info_array();
///
/// Move assignment
///
/// \param[inout] other A rvalue reference of another object
///
inline eap_method_info_array& operator=(_Inout_ eap_method_info_array &&other)
{
if (this != std::addressof(other)) {
if (pEapMethods)
free_internal();
dwNumberOfMethods = other.dwNumberOfMethods;
pEapMethods = other.pEapMethods;
other.dwNumberOfMethods = 0;
other.pEapMethods = NULL;
}
return *this;
}
protected:
void free_internal();
static void free_internal(_In_ EAP_METHOD_INFO *pMethodInfo);
};
} }

View File

@ -20,6 +20,8 @@
#include "StdAfx.h" #include "StdAfx.h"
#pragma comment(lib, "Eappcfg.lib")
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// winstd::eap_attr // winstd::eap_attr
@ -99,3 +101,33 @@ winstd::eap_packet::handle_type winstd::eap_packet::duplicate_internal(_In_ hand
return h2; return h2;
} }
//////////////////////////////////////////////////////////////////////
// winstd::eap_method_info_array
//////////////////////////////////////////////////////////////////////
winstd::eap_method_info_array::~eap_method_info_array()
{
if (pEapMethods)
free_internal();
}
void winstd::eap_method_info_array::free_internal()
{
for (DWORD i = 0; i < dwNumberOfMethods; i++)
free_internal(pEapMethods + i);
EapHostPeerFreeMemory((BYTE*)pEapMethods);
}
void winstd::eap_method_info_array::free_internal(_In_ EAP_METHOD_INFO *pMethodInfo)
{
if (pMethodInfo->pInnerMethodInfo)
free_internal(pMethodInfo->pInnerMethodInfo);
EapHostPeerFreeMemory((BYTE*)pMethodInfo->pwszAuthorName);
EapHostPeerFreeMemory((BYTE*)pMethodInfo->pwszFriendlyName);
}