summaryrefslogtreecommitdiffstats
path: root/Sluift
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2014-01-22 20:20:55 (GMT)
committerRemko Tronçon <git@el-tramo.be>2014-01-22 21:25:50 (GMT)
commitfe460ca46bff4f9e735db86ca072eafb3a5c8f2d (patch)
tree82ac0b3c1c29ec13dd66a7f328a93d0b14db895a /Sluift
parent4c83aa02da939ee3dc59b6febf70cab87e85f758 (diff)
downloadswift-fe460ca46bff4f9e735db86ca072eafb3a5c8f2d.zip
swift-fe460ca46bff4f9e735db86ca072eafb3a5c8f2d.tar.bz2
Sluift: Add SecurityLabel convertor
Change-Id: I59357bda2cbfcb044b5c27b41fe0c91c194e7381
Diffstat (limited to 'Sluift')
-rw-r--r--Sluift/ElementConvertors/ElementConvertors.ipp2
-rw-r--r--Sluift/ElementConvertors/SConscript1
-rw-r--r--Sluift/ElementConvertors/SecurityLabelConvertor.cpp101
-rw-r--r--Sluift/ElementConvertors/SecurityLabelConvertor.h29
4 files changed, 133 insertions, 0 deletions
diff --git a/Sluift/ElementConvertors/ElementConvertors.ipp b/Sluift/ElementConvertors/ElementConvertors.ipp
index da25eb6..a30967a 100644
--- a/Sluift/ElementConvertors/ElementConvertors.ipp
+++ b/Sluift/ElementConvertors/ElementConvertors.ipp
@@ -40,6 +40,7 @@
#include <Sluift/ElementConvertors/PubSubSubscriptionsConvertor.h>
#include <Sluift/ElementConvertors/PubSubEventAssociateConvertor.h>
#include <Sluift/ElementConvertors/PubSubSubscriptionConvertor.h>
+#include <Sluift/ElementConvertors/SecurityLabelConvertor.h>
#include <Sluift/ElementConvertors/PubSubEventConfigurationConvertor.h>
void LuaElementConvertors::registerConvertors() {
@@ -79,5 +80,6 @@ void LuaElementConvertors::registerConvertors() {
convertors.push_back(boost::make_shared<PubSubSubscriptionsConvertor>(this));
convertors.push_back(boost::make_shared<PubSubEventAssociateConvertor>(this));
convertors.push_back(boost::make_shared<PubSubSubscriptionConvertor>(this));
+ convertors.push_back(boost::make_shared<SecurityLabelConvertor>(this));
convertors.push_back(boost::make_shared<PubSubEventConfigurationConvertor>(this));
}
diff --git a/Sluift/ElementConvertors/SConscript b/Sluift/ElementConvertors/SConscript
index 921e325..a2de5a0 100644
--- a/Sluift/ElementConvertors/SConscript
+++ b/Sluift/ElementConvertors/SConscript
@@ -38,6 +38,7 @@ convertors = [
env.File("PubSubSubscriptionsConvertor.cpp"),
env.File("PubSubEventAssociateConvertor.cpp"),
env.File("PubSubSubscriptionConvertor.cpp"),
+ env.File("SecurityLabelConvertor.cpp"),
env.File("PubSubEventConfigurationConvertor.cpp")
]
Return('convertors')
diff --git a/Sluift/ElementConvertors/SecurityLabelConvertor.cpp b/Sluift/ElementConvertors/SecurityLabelConvertor.cpp
new file mode 100644
index 0000000..0bebac1
--- /dev/null
+++ b/Sluift/ElementConvertors/SecurityLabelConvertor.cpp
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2010-2014 Remko Tronçon
+ * Licensed under the GNU General Public License.
+ * See the COPYING file for more information.
+ */
+
+#include <Sluift/ElementConvertors/SecurityLabelConvertor.h>
+
+#include <lua.hpp>
+#include <boost/smart_ptr/make_shared.hpp>
+#include <boost/numeric/conversion/cast.hpp>
+
+#include <Swiften/Base/foreach.h>
+
+#pragma clang diagnostic ignored "-Wunused-private-field"
+
+using namespace Swift;
+
+SecurityLabelConvertor::SecurityLabelConvertor(LuaElementConvertors* convertors) :
+ GenericLuaElementConvertor<SecurityLabel>("security_label"),
+ convertors(convertors) {
+}
+
+SecurityLabelConvertor::~SecurityLabelConvertor() {
+}
+
+boost::shared_ptr<SecurityLabel> SecurityLabelConvertor::doConvertFromLua(lua_State* L) {
+ boost::shared_ptr<SecurityLabel> result = boost::make_shared<SecurityLabel>();
+ lua_getfield(L, -1, "equivalent_labels");
+ if (lua_type(L, -1) == LUA_TTABLE) {
+ std::vector< std::string > items;
+ for(size_t i = 0; i < lua_objlen(L, -1); ++i) {
+ lua_pushnumber(L, i + 1);
+ lua_gettable(L, -2);
+ if (lua_isstring(L, -1)) {
+ items.push_back(std::string(lua_tostring(L, -1)));
+ }
+ lua_pop(L, 1);
+ }
+
+ result->setEquivalentLabels(items);
+ }
+ lua_pop(L, 1);
+ lua_getfield(L, -1, "foreground_color");
+ if (lua_isstring(L, -1)) {
+ result->setForegroundColor(std::string(lua_tostring(L, -1)));
+ }
+ lua_pop(L, 1);
+ lua_getfield(L, -1, "display_marking");
+ if (lua_isstring(L, -1)) {
+ result->setDisplayMarking(std::string(lua_tostring(L, -1)));
+ }
+ lua_pop(L, 1);
+ lua_getfield(L, -1, "background_color");
+ if (lua_isstring(L, -1)) {
+ result->setBackgroundColor(std::string(lua_tostring(L, -1)));
+ }
+ lua_pop(L, 1);
+ lua_getfield(L, -1, "label");
+ if (lua_isstring(L, -1)) {
+ result->setLabel(std::string(lua_tostring(L, -1)));
+ }
+ lua_pop(L, 1);
+ return result;
+}
+
+void SecurityLabelConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<SecurityLabel> payload) {
+ lua_createtable(L, 0, 0);
+ if (!payload->getEquivalentLabels().empty()) {
+ lua_createtable(L, boost::numeric_cast<int>(payload->getEquivalentLabels().size()), 0);
+ {
+ int i = 0;
+ foreach(const std::string& item, payload->getEquivalentLabels()) {
+ lua_pushstring(L, item.c_str());
+ lua_rawseti(L, -2, boost::numeric_cast<int>(i+1));
+ ++i;
+ }
+ }
+ lua_setfield(L, -2, "equivalent_labels");
+ }
+ lua_pushstring(L, payload->getForegroundColor().c_str());
+ lua_setfield(L, -2, "foreground_color");
+ lua_pushstring(L, payload->getDisplayMarking().c_str());
+ lua_setfield(L, -2, "display_marking");
+ lua_pushstring(L, payload->getBackgroundColor().c_str());
+ lua_setfield(L, -2, "background_color");
+ lua_pushstring(L, payload->getLabel().c_str());
+ lua_setfield(L, -2, "label");
+}
+
+boost::optional<LuaElementConvertor::Documentation> SecurityLabelConvertor::getDocumentation() const {
+ return Documentation(
+ "SecurityLabel",
+ "This table has the following fields:\n\n"
+ "- `equivalent_labels`: array<string>\n"
+ "- `foreground_color`: string\n"
+ "- `display_marking`: string\n"
+ "- `background_color`: string\n"
+ "- `label`: string\n"
+ );
+}
diff --git a/Sluift/ElementConvertors/SecurityLabelConvertor.h b/Sluift/ElementConvertors/SecurityLabelConvertor.h
new file mode 100644
index 0000000..ac95429
--- /dev/null
+++ b/Sluift/ElementConvertors/SecurityLabelConvertor.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010-2014 Remko Tronçon
+ * Licensed under the GNU General Public License.
+ * See the COPYING file for more information.
+ */
+
+#pragma once
+
+#include <Swiften/Base/Override.h>
+
+#include <Sluift/GenericLuaElementConvertor.h>
+#include <Swiften/Elements/SecurityLabel.h>
+
+namespace Swift {
+ class LuaElementConvertors;
+
+ class SecurityLabelConvertor : public GenericLuaElementConvertor<SecurityLabel> {
+ public:
+ SecurityLabelConvertor(LuaElementConvertors* convertors);
+ virtual ~SecurityLabelConvertor();
+
+ virtual boost::shared_ptr<SecurityLabel> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
+ virtual void doConvertToLua(lua_State*, boost::shared_ptr<SecurityLabel>) SWIFTEN_OVERRIDE;
+ virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
+
+ private:
+ LuaElementConvertors* convertors;
+ };
+}