diff --git a/lib/EAPBase/include/Config.h b/lib/EAPBase/include/Config.h index 93c49d1..673c02b 100644 --- a/lib/EAPBase/include/Config.h +++ b/lib/EAPBase/include/Config.h @@ -31,36 +31,6 @@ namespace eap 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 #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: /// @@ -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: 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 /// @{ diff --git a/lib/EAPBase/include/EAP.h b/lib/EAPBase/include/EAP.h index ada5370..8256201 100644 --- a/lib/EAPBase/include/EAP.h +++ b/lib/EAPBase/include/EAP.h @@ -80,6 +80,8 @@ namespace eap struct cursor_out; struct cursor_in; + class packable; + template struct WINSTD_NOVTABLE sanitizing_blob_f; template 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); +/// +/// 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 }; + + /// + /// 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 @@ -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 inline unsigned __int64 htonll(unsigned __int64 val) diff --git a/lib/EAPBase/src/Config.cpp b/lib/EAPBase/src/Config.cpp index 5aeb4d6..1e87c3c 100644 --- a/lib/EAPBase/src/Config.cpp +++ b/lib/EAPBase/src/Config.cpp @@ -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"); diff --git a/lib/EAPBase/src/EAP.cpp b/lib/EAPBase/src/EAP.cpp index 16c6b45..6eebc5e 100644 --- a/lib/EAPBase/src/EAP.cpp +++ b/lib/EAPBase/src/EAP.cpp @@ -20,10 +20,39 @@ #include "StdAfx.h" +#pragma comment(lib, "Ws2_32.lib") + using namespace std; 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 //////////////////////////////////////////////////////////////////////