]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Convert all core ExtensionItem code away from {un,}serialize.
authorPeter Powell <petpow@saberuk.com>
Wed, 7 Aug 2019 18:37:27 +0000 (19:37 +0100)
committerPeter Powell <petpow@saberuk.com>
Wed, 7 Aug 2019 18:37:27 +0000 (19:37 +0100)
12 files changed:
include/extensible.h
include/modules/cap.h
include/modules/invite.h
src/base.cpp
src/coremods/core_channel/invite.cpp
src/coremods/core_channel/invite.h
src/modules/m_callerid.cpp
src/modules/m_cap.cpp
src/modules/m_monitor.cpp
src/modules/m_services_account.cpp
src/modules/m_sslinfo.cpp
src/modules/m_topiclock.cpp

index 588f882b468918aa213b83c538233f2ab565dc88..9df6d3e187c9a38ea5f4f91d3ca5a0c1ae5c72c3 100644 (file)
@@ -191,8 +191,6 @@ class CoreExport LocalExtItem : public ExtensionItem
  public:
        LocalExtItem(const std::string& key, ExtensibleType exttype, Module* owner);
        virtual ~LocalExtItem();
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE;
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE;
        void free(Extensible* container, void* item) CXX11_OVERRIDE = 0;
 };
 
@@ -248,8 +246,8 @@ class CoreExport LocalStringExt : public SimpleExtItem<std::string>
  public:
        LocalStringExt(const std::string& key, ExtensibleType exttype, Module* owner);
        virtual ~LocalStringExt();
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE;
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE;
+       std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE;
+       void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE;
 };
 
 class CoreExport LocalIntExt : public LocalExtItem
@@ -257,8 +255,8 @@ class CoreExport LocalIntExt : public LocalExtItem
  public:
        LocalIntExt(const std::string& key, ExtensibleType exttype, Module* owner);
        virtual ~LocalIntExt();
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE;
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE;
+       std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE;
+       void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE;
        intptr_t get(const Extensible* container) const;
        intptr_t set(Extensible* container, intptr_t value);
        void unset(Extensible* container) { set(container, 0); }
@@ -271,8 +269,8 @@ class CoreExport StringExtItem : public ExtensionItem
        StringExtItem(const std::string& key, ExtensibleType exttype, Module* owner);
        virtual ~StringExtItem();
        std::string* get(const Extensible* container) const;
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE;
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE;
+       std::string ToNetwork(const Extensible* container, void* item) const CXX11_OVERRIDE;
+       void FromNetwork(Extensible* container, const std::string& value) CXX11_OVERRIDE;
        void set(Extensible* container, const std::string& value);
        void unset(Extensible* container);
        void free(Extensible* container, void* item) CXX11_OVERRIDE;
index 6dcb9f3bc4d037d5a9055cfe7472824e8adcb190..5f63b58ce29d24de185cfdee3f0c890a3800c00f 100644 (file)
@@ -32,8 +32,9 @@ namespace Cap
        {
         public:
                ExtItem(Module* mod);
-               std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE;
-               void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE;
+               void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE;
+               std::string ToHuman(const Extensible* container, void* item) const CXX11_OVERRIDE;
+               std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE;
        };
 
        class Capability;
index e53d5202f71aa7f3e9adf88d560683714ab63187..abd48324751e313a438d42cecbbd542748531343 100644 (file)
@@ -101,11 +101,11 @@ class Invite::Invite : public insp::intrusive_list_node<Invite, LocalUser>, publ
        bool IsTimed() const { return (expiretimer != NULL); }
 
        /** Serialize this object
-        * @param format Serialization format
+        * @param human Whether to serialize for human consumption or not.
         * @param show_chans True to include channel in the output, false to include the nick/uuid
         * @param out Output will be appended to this string
         */
-       void Serialize(SerializeFormat format, bool show_chans, std::string& out);
+       void Serialize(bool human, bool show_chans, std::string& out);
 
        friend class APIImpl;
 
index 8cb336985ecd1608378df5a79d17dd0e2ee88a5f..afd561ff231d2f528068faa793a90e9f070dc084 100644 (file)
@@ -293,15 +293,6 @@ LocalExtItem::~LocalExtItem()
 {
 }
 
-std::string LocalExtItem::serialize(SerializeFormat format, const Extensible* container, void* item) const
-{
-       return "";
-}
-
-void LocalExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
-{
-}
-
 LocalStringExt::LocalStringExt(const std::string& Key, ExtensibleType exttype, Module* Owner)
        : SimpleExtItem<std::string>(Key, exttype, Owner)
 {
@@ -311,17 +302,14 @@ LocalStringExt::~LocalStringExt()
 {
 }
 
-std::string LocalStringExt::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string LocalStringExt::ToInternal(const Extensible* container, void* item) const
 {
-       if ((item) && (format != FORMAT_NETWORK))
-               return *static_cast<std::string*>(item);
-       return "";
+       return item ? *static_cast<std::string*>(item) : std::string(); 
 }
 
-void LocalStringExt::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+void LocalStringExt::FromInternal(Extensible* container, const std::string& value)
 {
-       if (format != FORMAT_NETWORK)
-               set(container, value);
+       set(container, value);
 }
 
 LocalIntExt::LocalIntExt(const std::string& Key, ExtensibleType exttype, Module* mod)
@@ -333,17 +321,14 @@ LocalIntExt::~LocalIntExt()
 {
 }
 
-std::string LocalIntExt::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string LocalIntExt::ToInternal(const Extensible* container, void* item) const
 {
-       if (format == FORMAT_NETWORK)
-               return "";
        return ConvToStr(reinterpret_cast<intptr_t>(item));
 }
 
-void LocalIntExt::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+void LocalIntExt::FromInternal(Extensible* container, const std::string& value)
 {
-       if (format != FORMAT_NETWORK)
-               set(container, ConvToNum<intptr_t>(value));
+       set(container, ConvToNum<intptr_t>(value));
 }
 
 intptr_t LocalIntExt::get(const Extensible* container) const
@@ -377,12 +362,12 @@ std::string* StringExtItem::get(const Extensible* container) const
        return static_cast<std::string*>(get_raw(container));
 }
 
-std::string StringExtItem::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string StringExtItem::ToNetwork(const Extensible* container, void* item) const
 {
-       return item ? *static_cast<std::string*>(item) : "";
+       return item ? *static_cast<std::string*>(item) : std::string();
 }
 
-void StringExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+void StringExtItem::FromNetwork(Extensible* container, const std::string& value)
 {
        if (value.empty())
                unset(container);
index 51fb638f8e308d4c321a19068fe06c22cb7d1607..d96045fc4a1777dc7c6922f97da7ff46dca3f1ec 100644 (file)
@@ -179,12 +179,12 @@ Invite::Invite::~Invite()
        ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Invite::~ %p", (void*) this);
 }
 
-void Invite::Invite::Serialize(SerializeFormat format, bool show_chans, std::string& out)
+void Invite::Invite::Serialize(bool human, bool show_chans, std::string& out)
 {
        if (show_chans)
                out.append(this->chan->name);
        else
-               out.append((format == FORMAT_USER) ? user->nick : user->uuid);
+               out.append(human ? user->nick : user->uuid);
        out.push_back(' ');
 
        if (expiretimer)
index 19e3861f88940595ad0fe725aba7debd9fff4f64..357acd846e4ee88325ce331156f15bedbaf490bc 100644 (file)
@@ -45,6 +45,21 @@ extern void UnserializeInvite(LocalUser* user, const std::string& value);
 template<typename T, ExtensionItem::ExtensibleType ExtType>
 class Invite::ExtItem : public ExtensionItem
 {
+ private:
+       static std::string ToString(void* item, bool human)
+       {
+               std::string ret;
+               Store<T>* store = static_cast<Store<T>*>(item);
+               for (typename insp::intrusive_list<Invite, T>::iterator i = store->invites.begin(); i != store->invites.end(); ++i)
+               {
+                       Invite* inv = *i;
+                       inv->Serialize(human, (ExtType == ExtensionItem::EXT_USER), ret);
+               }
+               if (!ret.empty())
+                       ret.erase(ret.length()-1);
+               return ret;
+       }
+
  public:
        ExtItem(Module* owner, const char* extname)
                : ExtensionItem(extname, ExtType, owner)
@@ -83,26 +98,19 @@ class Invite::ExtItem : public ExtensionItem
                delete store;
        }
 
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE
+       std::string ToHuman(const Extensible* container, void* item) const CXX11_OVERRIDE
        {
-               if (format == FORMAT_NETWORK)
-                       return std::string();
+               return ToString(item, true);
+       }
 
-               std::string ret;
-               Store<T>* store = static_cast<Store<T>*>(item);
-               for (typename insp::intrusive_list<Invite, T>::iterator i = store->invites.begin(); i != store->invites.end(); ++i)
-               {
-                       Invite* inv = *i;
-                       inv->Serialize(format, (ExtType == ExtensionItem::EXT_USER), ret);
-               }
-               if (!ret.empty())
-                       ret.erase(ret.length()-1);
-               return ret;
+       std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE
+       {
+               return ToString(item, false);
        }
 
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE
+       void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE
        {
-               if ((ExtType != ExtensionItem::EXT_CHANNEL) && (format != FORMAT_NETWORK))
+               if (ExtType != ExtensionItem::EXT_CHANNEL)
                        UnserializeInvite(static_cast<LocalUser*>(container), value);
        }
 };
index a13d4d613fb36e2f4ba728959365a0789550e1ac..d772b4c6800a0f94724caec7c07b5558ef7948a6 100644 (file)
@@ -54,7 +54,7 @@ class callerid_data
 
        callerid_data() : lastnotify(0) { }
 
-       std::string ToString(SerializeFormat format) const
+       std::string ToString(bool human) const
        {
                std::ostringstream oss;
                oss << lastnotify;
@@ -62,7 +62,7 @@ class callerid_data
                {
                        User* u = *i;
                        // Encode UIDs.
-                       oss << "," << (format == FORMAT_USER ? u->nick : u->uuid);
+                       oss << "," << (human ? u->nick : u->uuid);
                }
                return oss.str();
        }
@@ -75,22 +75,20 @@ struct CallerIDExtInfo : public ExtensionItem
        {
        }
 
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE
+       std::string ToHuman(const Extensible* container, void* item) const CXX11_OVERRIDE
        {
-               std::string ret;
-               if (format != FORMAT_NETWORK)
-               {
-                       callerid_data* dat = static_cast<callerid_data*>(item);
-                       ret = dat->ToString(format);
-               }
-               return ret;
+               callerid_data* dat = static_cast<callerid_data*>(item);
+               return dat->ToString(true);
        }
 
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE
+       std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE
        {
-               if (format == FORMAT_NETWORK)
-                       return;
+               callerid_data* dat = static_cast<callerid_data*>(item);
+               return dat->ToString(false);
+       }
 
+       void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE
+       {
                void* old = get_raw(container);
                if (old)
                        this->free(NULL, old);
index 6e3033bf27edd28e9cd164ef7040697519e5deaa..8829d5ef34748a8b4c1e7094dbc8d415f94660bf 100644 (file)
@@ -291,42 +291,52 @@ class Cap::ManagerImpl : public Cap::Manager, public ReloadModule::EventListener
        }
 };
 
+namespace
+{
+       std::string SerializeCaps(const Extensible* container, void* item, bool human)
+       {
+               // XXX: Cast away the const because IS_LOCAL() doesn't handle it
+               LocalUser* user = IS_LOCAL(const_cast<User*>(static_cast<const User*>(container)));
+               if (!user)
+                       return std::string();
+
+               // List requested caps
+               std::string ret;
+               managerimpl->HandleList(ret, user, false, false);
+
+               // Serialize cap protocol version. If building a human-readable string append a new token, otherwise append only a single character indicating the version.
+               Cap::Protocol protocol = managerimpl->GetProtocol(user);
+               if (human)
+                       ret.append("capversion=3.");
+               else if (!ret.empty())
+                       ret.erase(ret.length()-1);
+
+               if (protocol == Cap::CAP_302)
+                       ret.push_back('2');
+               else
+                       ret.push_back('1');
+
+               return ret;
+       }
+}
+
 Cap::ExtItem::ExtItem(Module* mod)
        : LocalIntExt("caps", ExtensionItem::EXT_USER, mod)
 {
 }
 
-std::string Cap::ExtItem::serialize(SerializeFormat format, const Extensible* container, void* item) const
+std::string Cap::ExtItem::ToHuman(const Extensible* container, void* item) const
 {
-       std::string ret;
-       // XXX: Cast away the const because IS_LOCAL() doesn't handle it
-       LocalUser* user = IS_LOCAL(const_cast<User*>(static_cast<const User*>(container)));
-       if ((format == FORMAT_NETWORK) || (!user))
-               return ret;
-
-       // List requested caps
-       managerimpl->HandleList(ret, user, false, false);
-
-       // Serialize cap protocol version. If building a human-readable string append a new token, otherwise append only a single character indicating the version.
-       Protocol protocol = managerimpl->GetProtocol(user);
-       if (format == FORMAT_USER)
-               ret.append("capversion=3.");
-       else if (!ret.empty())
-               ret.erase(ret.length()-1);
-
-       if (protocol == CAP_302)
-               ret.push_back('2');
-       else
-               ret.push_back('1');
-
-       return ret;
+       return SerializeCaps(container, item, true);
 }
 
-void Cap::ExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+std::string Cap::ExtItem::ToInternal(const Extensible* container, void* item) const
 {
-       if (format == FORMAT_NETWORK)
-               return;
+       return SerializeCaps(container, item, false);
+}
 
+void Cap::ExtItem::FromInternal(Extensible* container, const std::string& value)
+{
        LocalUser* user = IS_LOCAL(static_cast<User*>(container));
        if (!user)
                return; // Can't happen
index b82dbcc7d9310ac457b1de70a3d745a44060e4ec..cebd69fc27db4873d347faca489ebf044ac84d4d 100644 (file)
@@ -82,12 +82,9 @@ class IRCv3::Monitor::Manager
                        free(container, unset_raw(container));
                }
 
-               std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE
+               std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE
                {
                        std::string ret;
-                       if (format == FORMAT_NETWORK)
-                               return ret;
-
                        const ExtData* extdata = static_cast<ExtData*>(item);
                        for (WatchedList::const_iterator i = extdata->list.begin(); i != extdata->list.end(); ++i)
                        {
@@ -99,7 +96,7 @@ class IRCv3::Monitor::Manager
                        return ret;
                }
 
-               void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE;
+               void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE;
 
                void free(Extensible* container, void* item) CXX11_OVERRIDE
                {
@@ -245,12 +242,8 @@ class IRCv3::Monitor::Manager
        WatchedList emptywatchedlist;
 };
 
-// inline is needed in static builds to support m_watch including the Manager code from this file
-inline void IRCv3::Monitor::Manager::ExtItem::unserialize(SerializeFormat format, Extensible* container, const std::string& value)
+void IRCv3::Monitor::Manager::ExtItem::FromInternal(Extensible* container, const std::string& value)
 {
-       if (format == FORMAT_NETWORK)
-               return;
-
        irc::spacesepstream ss(value);
        for (std::string nick; ss.GetToken(nick); )
                manager.Watch(static_cast<LocalUser*>(container), nick, UINT_MAX);
index 72cd925abea7037d39662cfde8d987fa49600b94..78d20a6e91150c017f765582a67f3ae149f6e468 100644 (file)
@@ -109,16 +109,16 @@ class AccountExtItemImpl : public AccountExtItem
        {
        }
 
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE
+       void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE
        {
-               User* user = static_cast<User*>(container);
-
-               StringExtItem::unserialize(format, container, value);
+               StringExtItem::FromInternal(container, value);
+       }
 
-               // If we are being reloaded then don't send the numeric or run the event
-               if (format == FORMAT_INTERNAL)
-                       return;
+       void FromNetwork(Extensible* container, const std::string& value) CXX11_OVERRIDE
+       {
+               StringExtItem::FromNetwork(container, value);
 
+               User* user = static_cast<User*>(container);
                if (IS_LOCAL(user))
                {
                        if (value.empty())
index a759718e6c7688f9945a24a0e6cf234faa6a7fdd..548f4c5524fee9b64e317f15fba1ad2131f0dead 100644 (file)
@@ -58,12 +58,12 @@ class SSLCertExt : public ExtensionItem
                free(container, unset_raw(container));
        }
 
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE
+       std::string ToNetwork(const Extensible* container, void* item) const CXX11_OVERRIDE
        {
                return static_cast<ssl_cert*>(item)->GetMetaLine();
        }
 
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE
+       void FromNetwork(Extensible* container, const std::string& value) CXX11_OVERRIDE
        {
                ssl_cert* cert = new ssl_cert;
                set(container, cert);
index b0d004b1cf1c25ce957aa4ccae3356e7ead3eca8..b4fc8dedcc3b4aa9b3c631b478df648324d153f7 100644 (file)
@@ -73,6 +73,7 @@ class CommandSVSTOPIC : public Command
        }
 };
 
+// TODO: add a BoolExtItem to replace this.
 class FlagExtItem : public ExtensionItem
 {
  public:
@@ -86,15 +87,18 @@ class FlagExtItem : public ExtensionItem
                return (get_raw(container) != NULL);
        }
 
-       std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE
+       std::string ToHuman(const Extensible* container, void* item) const CXX11_OVERRIDE
        {
-               if (format == FORMAT_USER)
-                       return "true";
+               // Make the human version more readable.
+               return "true";
+       }
 
+       std::string ToNetwork(const Extensible* container, void* item) const CXX11_OVERRIDE
+       {
                return "1";
        }
 
-       void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE
+       void FromNetwork(Extensible* container, const std::string& value) CXX11_OVERRIDE
        {
                if (value == "1")
                        set_raw(container, this);