eap::config split to eap::config and eap::packable

This commit is contained in:
Simon Rozman 2017-02-07 09:33:29 +01:00
parent 527d4271b1
commit 66dd2bf283
10 changed files with 136 additions and 130 deletions

View File

@ -31,36 +31,6 @@ namespace eap
class config_connection; class config_connection;
} }
/// \addtogroup EAPBaseStream
/// @{
///
/// Packs a configuration
///
/// \param[inout] cursor Memory cursor
/// \param[in] val Configuration to pack
///
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const eap::config &val);
///
/// Returns packed size of a configuration
///
/// \param[in] val Configuration to pack
///
/// \returns Size of data when packed (in bytes)
///
inline size_t pksizeof(_In_ const eap::config &val);
///
/// Unpacks a configuration
///
/// \param[inout] cursor Memory cursor
/// \param[out] val Configuration to unpack to
///
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ eap::config &val);
/// @}
#pragma once #pragma once
#include "Module.h" #include "Module.h"
@ -89,9 +59,9 @@ namespace eap
/// @{ /// @{
/// ///
/// Base class for configuration storage /// Base class for packable and XML-exportable storage
/// ///
class config class config : public packable
{ {
public: public:
/// ///
@ -160,32 +130,6 @@ namespace eap
/// @} /// @}
/// \name BLOB management
/// @{
///
/// Packs this object
///
/// \param[inout] cursor Memory cursor
///
virtual void operator<<(_Inout_ cursor_out &cursor) const;
///
/// Returns packed size of this object
///
/// \returns Size of data when packed (in bytes)
///
virtual size_t get_pk_size() const;
///
/// Unpacks this object
///
/// \param[inout] cursor Memory cursor
///
virtual void operator>>(_Inout_ cursor_in &cursor);
/// @}
public: public:
module &m_module; ///< EAP module module &m_module; ///< EAP module
@ -530,24 +474,6 @@ namespace eap
} }
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const eap::config &val)
{
val.operator<<(cursor);
}
inline size_t pksizeof(_In_ const eap::config &val)
{
return val.get_pk_size();
}
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ eap::config &val)
{
val.operator>>(cursor);
}
/// \addtogroup EAPBaseStream /// \addtogroup EAPBaseStream
/// @{ /// @{

View File

@ -80,6 +80,8 @@ namespace eap
struct cursor_out; struct cursor_out;
struct cursor_in; struct cursor_in;
class packable;
template<size_t N> struct WINSTD_NOVTABLE sanitizing_blob_f; template<size_t N> struct WINSTD_NOVTABLE sanitizing_blob_f;
template<size_t N> struct WINSTD_NOVTABLE sanitizing_blob_zf; template<size_t N> struct WINSTD_NOVTABLE sanitizing_blob_zf;
@ -499,6 +501,31 @@ inline size_t pksizeof(_In_ const EAP_METHOD_TYPE &val);
/// ///
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ EAP_METHOD_TYPE &val); inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ EAP_METHOD_TYPE &val);
///
/// Packs a packable object
///
/// \param[inout] cursor Memory cursor
/// \param[in] val Object to pack
///
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const eap::packable &val);
///
/// Returns packed size of a packable object
///
/// \param[in] val Object to pack
///
/// \returns Size of data when packed (in bytes)
///
inline size_t pksizeof(_In_ const eap::packable &val);
///
/// Unpacks a packable object
///
/// \param[inout] cursor Memory cursor
/// \param[out] val Object to unpack to
///
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ eap::packable &val);
/// @} /// @}
/// ///
@ -574,6 +601,45 @@ namespace eap
ptr_type ptr_end; ///< Pointer to the end of BLOB ptr_type ptr_end; ///< Pointer to the end of BLOB
}; };
///
/// Base class for all packable data classes
///
class packable
{
public:
///
/// Constructs configuration
///
packable();
/// \name BLOB management
/// @{
///
/// Packs this object
///
/// \param[inout] cursor Memory cursor
///
virtual void operator<<(_Inout_ cursor_out &cursor) const;
///
/// Returns packed size of this object
///
/// \returns Size of data when packed (in bytes)
///
virtual size_t get_pk_size() const;
///
/// Unpacks this object
///
/// \param[inout] cursor Memory cursor
///
virtual void operator>>(_Inout_ cursor_in &cursor);
/// @}
};
/// @} /// @}
/// \addtogroup EAPBaseSanitizing /// \addtogroup EAPBaseSanitizing
@ -1198,6 +1264,24 @@ inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ EAP_METHOD_TYPE &va
} }
inline void operator<<(_Inout_ eap::cursor_out &cursor, _In_ const eap::packable &val)
{
val.operator<<(cursor);
}
inline size_t pksizeof(_In_ const eap::packable &val)
{
return val.get_pk_size();
}
inline void operator>>(_Inout_ eap::cursor_in &cursor, _Out_ eap::packable &val)
{
val.operator>>(cursor);
}
#ifndef htonll #ifndef htonll
inline unsigned __int64 htonll(unsigned __int64 val) inline unsigned __int64 htonll(unsigned __int64 val)

View File

@ -43,17 +43,16 @@ namespace eap
/// ///
/// UI context /// UI context
/// ///
class ui_context : public config class ui_context : public packable
{ {
public: public:
/// ///
/// Constructs context /// Constructs context
/// ///
/// \param[in] mod EAP module to use for global services
/// \param[in] cfg Connection configuration /// \param[in] cfg Connection configuration
/// \param[in] cred Connection credentials /// \param[in] cred Connection credentials
/// ///
ui_context(_In_ module &mod, _In_ config_connection &cfg, _In_ credentials_connection &cred); ui_context(_In_ config_connection &cfg, _In_ credentials_connection &cred);
/// ///
/// Copies context /// Copies context

View File

@ -77,24 +77,6 @@ void eap::config::load(_In_ IXMLDOMNode *pConfigRoot)
} }
void eap::config::operator<<(_Inout_ cursor_out &cursor) const
{
UNREFERENCED_PARAMETER(cursor);
}
size_t eap::config::get_pk_size() const
{
return 0;
}
void eap::config::operator>>(_Inout_ cursor_in &cursor)
{
UNREFERENCED_PARAMETER(cursor);
}
const bstr eap::config::namespace_eapmetadata(L"urn:ietf:params:xml:ns:yang:ietf-eap-metadata"); const bstr eap::config::namespace_eapmetadata(L"urn:ietf:params:xml:ns:yang:ietf-eap-metadata");

View File

@ -20,10 +20,39 @@
#include "StdAfx.h" #include "StdAfx.h"
#pragma comment(lib, "Ws2_32.lib")
using namespace std; using namespace std;
using namespace winstd; using namespace winstd;
//////////////////////////////////////////////////////////////////////
// eap::packable
//////////////////////////////////////////////////////////////////////
eap::packable::packable()
{
}
void eap::packable::operator<<(_Inout_ cursor_out &cursor) const
{
UNREFERENCED_PARAMETER(cursor);
}
size_t eap::packable::get_pk_size() const
{
return 0;
}
void eap::packable::operator>>(_Inout_ cursor_in &cursor)
{
UNREFERENCED_PARAMETER(cursor);
}
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// eap::diameter_avp_append // eap::diameter_avp_append
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////

View File

@ -28,8 +28,7 @@ using namespace winstd;
// eap::ui_context // eap::ui_context
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
eap::ui_context::ui_context(_In_ module &mod, _In_ config_connection &cfg, _In_ credentials_connection &cred) : eap::ui_context::ui_context(_In_ config_connection &cfg, _In_ credentials_connection &cred) :
config(mod),
m_cfg(cfg), m_cfg(cfg),
m_cred(cred) m_cred(cred)
{ {
@ -37,17 +36,17 @@ eap::ui_context::ui_context(_In_ module &mod, _In_ config_connection &cfg, _In_
eap::ui_context::ui_context(_In_ const ui_context &other) : eap::ui_context::ui_context(_In_ const ui_context &other) :
m_cfg (other.m_cfg ), m_cfg (other.m_cfg ),
m_cred(other.m_cred), m_cred (other.m_cred),
config(other ) packable(other )
{ {
} }
eap::ui_context::ui_context(_Inout_ ui_context &&other) : eap::ui_context::ui_context(_Inout_ ui_context &&other) :
m_cfg ( other.m_cfg ), m_cfg ( other.m_cfg ),
m_cred( other.m_cred ), m_cred ( other.m_cred ),
config(std::move(other )) packable(std::move(other ))
{ {
} }
@ -57,7 +56,7 @@ eap::ui_context& eap::ui_context::operator=(_In_ const ui_context &other)
if (this != &other) { if (this != &other) {
assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Copy context within same configuration only! assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Copy context within same configuration only!
assert(std::addressof(m_cred) == std::addressof(other.m_cred)); // Copy context within same credentials only! assert(std::addressof(m_cred) == std::addressof(other.m_cred)); // Copy context within same credentials only!
(config&)*this = other; (packable&)*this = other;
} }
return *this; return *this;
@ -69,7 +68,7 @@ eap::ui_context& eap::ui_context::operator=(_Inout_ ui_context &&other)
if (this != &other) { if (this != &other) {
assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Move context within same configuration only! assert(std::addressof(m_cfg ) == std::addressof(other.m_cfg )); // Move context within same configuration only!
assert(std::addressof(m_cred) == std::addressof(other.m_cred)); // Move context within same credentials only! assert(std::addressof(m_cred) == std::addressof(other.m_cred)); // Move context within same credentials only!
(config&)*this = std::move(other); (packable&)*this = std::move(other);
} }
return *this; return *this;
@ -78,7 +77,7 @@ eap::ui_context& eap::ui_context::operator=(_Inout_ ui_context &&other)
void eap::ui_context::operator<<(_Inout_ cursor_out &cursor) const void eap::ui_context::operator<<(_Inout_ cursor_out &cursor) const
{ {
config::operator<<(cursor); packable::operator<<(cursor);
cursor << m_cfg ; cursor << m_cfg ;
cursor << m_cred; cursor << m_cred;
} }
@ -87,7 +86,7 @@ void eap::ui_context::operator<<(_Inout_ cursor_out &cursor) const
size_t eap::ui_context::get_pk_size() const size_t eap::ui_context::get_pk_size() const
{ {
return return
config::get_pk_size() + packable::get_pk_size() +
pksizeof(m_cfg ) + pksizeof(m_cfg ) +
pksizeof(m_cred); pksizeof(m_cred);
} }
@ -95,7 +94,7 @@ size_t eap::ui_context::get_pk_size() const
void eap::ui_context::operator>>(_Inout_ cursor_in &cursor) void eap::ui_context::operator>>(_Inout_ cursor_in &cursor)
{ {
config::operator>>(cursor); packable::operator>>(cursor);
cursor >> m_cfg ; cursor >> m_cfg ;
cursor >> m_cred; cursor >> m_cred;
} }

View File

@ -44,11 +44,10 @@ namespace eap
/// ///
/// Constructs context /// Constructs context
/// ///
/// \param[in] mod EAP module to use for global services
/// \param[in] cfg Connection configuration /// \param[in] cfg Connection configuration
/// \param[in] cred Connection credentials /// \param[in] cred Connection credentials
/// ///
ui_context_ttls(_In_ module &mod, _In_ config_connection &cfg, _In_ credentials_connection &cred); ui_context_ttls(_In_ config_connection &cfg, _In_ credentials_connection &cred);
/// ///
/// Copies context /// Copies context
@ -82,13 +81,6 @@ namespace eap
/// ///
ui_context_ttls& operator=(_Inout_ ui_context_ttls &&other); ui_context_ttls& operator=(_Inout_ ui_context_ttls &&other);
///
/// Clones this object
///
/// \returns Pointer to cloned object with identical data
///
virtual config* clone() const;
/// \name BLOB management /// \name BLOB management
/// @{ /// @{
virtual void operator<<(_Inout_ cursor_out &cursor) const; virtual void operator<<(_Inout_ cursor_out &cursor) const;

View File

@ -367,7 +367,7 @@ void eap::peer_ttls::get_ui_context(
auto s = static_cast<session*>(hSession); auto s = static_cast<session*>(hSession);
// Get context data from method. // Get context data from method.
ui_context_ttls ctx(*this, s->m_cfg, s->m_cred); ui_context_ttls ctx(s->m_cfg, s->m_cred);
s->m_method->get_ui_context(ctx.m_data); s->m_method->get_ui_context(ctx.m_data);
// Pack context data. // Pack context data.

View File

@ -28,14 +28,15 @@ using namespace winstd;
// eap::ui_context_ttls // eap::ui_context_ttls
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
eap::ui_context_ttls::ui_context_ttls(_In_ module &mod, _In_ config_connection &cfg, _In_ credentials_connection &cred) : eap::ui_context_ttls::ui_context_ttls(_In_ config_connection &cfg, _In_ credentials_connection &cred) :
ui_context(mod, cfg, cred) ui_context(cfg, cred)
{ {
} }
eap::ui_context_ttls::ui_context_ttls(_In_ const ui_context_ttls &other) : eap::ui_context_ttls::ui_context_ttls(_In_ const ui_context_ttls &other) :
ui_context(other) m_data (other.m_data),
ui_context(other )
{ {
} }
@ -69,12 +70,6 @@ eap::ui_context_ttls& eap::ui_context_ttls::operator=(_Inout_ ui_context_ttls &&
} }
eap::config* eap::ui_context_ttls::clone() const
{
return new ui_context_ttls(*this);
}
void eap::ui_context_ttls::operator<<(_Inout_ cursor_out &cursor) const void eap::ui_context_ttls::operator<<(_Inout_ cursor_out &cursor) const
{ {
ui_context::operator<<(cursor); ui_context::operator<<(cursor);

View File

@ -393,7 +393,7 @@ void eap::peer_ttls_ui::invoke_interactive_ui(
// Unpack context data. // Unpack context data.
config_connection cfg(*this); config_connection cfg(*this);
credentials_connection cred(*this, cfg); credentials_connection cred(*this, cfg);
ui_context_ttls ctx(*this, cfg, cred); ui_context_ttls ctx(cfg, cred);
unpack(ctx, pUIContextData, dwUIContextDataSize); unpack(ctx, pUIContextData, dwUIContextDataSize);
// Look-up the provider. // Look-up the provider.