diff options
author | Adam <Adam@anope.org> | 2011-11-08 17:29:16 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-11-08 17:29:16 -0500 |
commit | b5ff856f47d8e54d12c568462a06351633c29610 (patch) | |
tree | a4e2f96c59ee49aa5e6cacdfd30db6155151ad36 /src/access.cpp | |
parent | 97b9055f92f21cd91af44a3d5dacce0024536cff (diff) |
Windows
Diffstat (limited to 'src/access.cpp')
-rw-r--r-- | src/access.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/access.cpp b/src/access.cpp index 74a376b3d..626176e7b 100644 --- a/src/access.cpp +++ b/src/access.cpp @@ -71,7 +71,7 @@ AccessProvider::~AccessProvider() { } -ChanAccess::ChanAccess(AccessProvider *p) : provider(p) +ChanAccess::ChanAccess(AccessProvider *p) : Serializable("ChanAccess"), provider(p) { } @@ -79,6 +79,40 @@ ChanAccess::~ChanAccess() { } +Serializable::serialized_data ChanAccess::serialize() +{ + serialized_data data; + + data["provider"] << this->provider->name; + data["ci"] << this->ci->name; + data["mask"] << this->mask; + data["creator"] << this->creator; + data["last_seen"].setType(Serialize::DT_INT) << this->last_seen; + data["created"].setType(Serialize::DT_INT) << this->created; + data["data"] << this->Serialize(); + + return data; +} + +void ChanAccess::unserialize(serialized_data &data) +{ + service_reference<AccessProvider> aprovider(data["provider"].astr()); + ChannelInfo *ci = cs_findchan(data["ci"].astr()); + if (!aprovider || !ci) + return; + + ChanAccess *access = aprovider->Create(); + access->provider = aprovider; + access->ci = ci; + data["mask"] >> access->mask; + data["creator"] >> access->creator; + data["last_seen"] >> access->last_seen; + data["created"] >> access->created; + access->Unserialize(data["data"].astr()); + + ci->AddAccess(access); +} + bool ChanAccess::operator>(ChanAccess &other) { const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges(); |