namespace ldp_serialized {
+template <typename T>
+struct type_helper;
+
class StorageBackendSerialized::StorageBackendSerializedImpl {
int fd{-1};
uint8_t *mem{nullptr};
void printContent() const;
- template <typename T>
- T *getPolicySet();
+ template <typename T, typename M = typename type_helper<T>::policy_set_type>
+ const M *getPolicySet();
};
void StorageBackendSerialized::StorageBackendSerializedImpl::release() {
close(fd);
return;
}
+// TODO: decide - do we need verification?
// for verification:
//
// if (!VerifyFileBuffer(Verifier(mem, length)))
}
/*************************************************/
-template <typename T>
-struct type_helper;
#define TYPE_HELPER(T, t) \
template <> \
- struct type_helper<const ldp_xml_parser::MatchItem##T> { \
+ struct type_helper<ldp_xml_parser::MatchItem##T> { \
typedef FB::T##Set policy_set_type; \
typedef FB::Policy##T policy_type; \
}; \
template <> \
- auto StorageBackendSerialized::StorageBackendSerializedImpl::getPolicySet() \
- -> const typename type_helper<const ldp_xml_parser::MatchItem##T>::policy_set_type * { \
+ auto StorageBackendSerialized::StorageBackendSerializedImpl::getPolicySet<ldp_xml_parser::MatchItem##T>() \
+ -> const typename type_helper<ldp_xml_parser::MatchItem##T>::policy_set_type * { \
assert(file); \
return file->m_##t##_set(); \
}
}
template <typename T, typename I>
-bool match(const T &t, const I *i) {
- // TODO!!!!
- return true;
+bool match(const T &match, const I *i) {
+ return match.match(makeMessageType(i->type()), i->interface()->c_str(), i->path()->c_str(),
+ i->member()->c_str(), i->name()->c_str(), i->is_name_prefix());
+}
+
+template <> bool match(const ldp_xml_parser::MatchItemAccess &match, const FB::ItemAccess *item) {
+ return match.match(makeBusAccessType(item->type()), item->uid(), item->gid());
}
template <typename T, typename P = typename type_helper<T>::policy_type>
}
template <typename T, typename P = typename type_helper<T>::policy_type>
-ldp_xml_parser::DecisionItem getDecisionItemMaybeNull(const T &item, const P *policy) {
- if (nullptr == policy)
+ldp_xml_parser::DecisionItem getDecisionItemMaybeNull(const T &item, const P *policyPair) {
+ if (nullptr == policyPair)
return ldp_xml_parser::Decision::ANY;
- return getDecisionItem(item, policy);
+ return getDecisionItem(item, policyPair->policy());
}
template <typename T>
}
#define T_INSTANTIATION(T) \
- template <> ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemContextMandatory(const ldp_xml_parser::MatchItem##T &item) const; \
- template <> ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemContextDefault(const ldp_xml_parser::MatchItem##T &item) const;
+ template ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemContextMandatory(const ldp_xml_parser::MatchItem##T &item) const; \
+ template ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemContextDefault(const ldp_xml_parser::MatchItem##T &item) const;
T_INSTANTIATION(Own)
T_INSTANTIATION(Send)
T_INSTANTIATION(Receive)
T_INSTANTIATION(Access)
+#undef T_INSTANTIATION
+
#define T_INSTANTIATION2(T) \
- template <> ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemUser(uid_t uid, const ldp_xml_parser::MatchItem##T &item) const; \
- template <> ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemGroup(gid_t gid, const ldp_xml_parser::MatchItem##T &item) const;
+ template ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemUser(uid_t uid, const ldp_xml_parser::MatchItem##T &item) const; \
+ template ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemGroup(gid_t gid, const ldp_xml_parser::MatchItem##T &item) const;
T_INSTANTIATION2(Own)
T_INSTANTIATION2(Send)
T_INSTANTIATION2(Receive)
-#undef T_INSTANTIATION
#undef T_INSTANTIATION2
StorageBackendSerialized::StorageBackendSerialized()