summaryrefslogtreecommitdiff
path: root/src/access.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-11-08 17:29:16 -0500
committerAdam <Adam@anope.org>2011-11-08 17:29:16 -0500
commitb5ff856f47d8e54d12c568462a06351633c29610 (patch)
treea4e2f96c59ee49aa5e6cacdfd30db6155151ad36 /src/access.cpp
parent97b9055f92f21cd91af44a3d5dacce0024536cff (diff)
Windows
Diffstat (limited to 'src/access.cpp')
-rw-r--r--src/access.cpp36
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();