diff options
author | Kevin Smith <git@kismith.co.uk> | 2011-03-04 10:56:07 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2011-03-04 10:58:16 (GMT) |
commit | 37bfeaf6f2e0145731c32f79291ff3d48ae0e1b1 (patch) | |
tree | e6455b4f21b3a5ba716526916a67cfd4b7e55051 /Swiften/Serializer/PayloadSerializers | |
parent | 12024229138787d7df91cb8101d0986996880e3d (diff) | |
download | swift-37bfeaf6f2e0145731c32f79291ff3d48ae0e1b1.zip swift-37bfeaf6f2e0145731c32f79291ff3d48ae0e1b1.tar.bz2 |
Upgrade XEP-0258 support to match 0.6.
Resolves: #183
Release-Notes: Security labels (XEP-0258) support has been updated to match the latest version of the specification.
Diffstat (limited to 'Swiften/Serializer/PayloadSerializers')
-rw-r--r-- | Swiften/Serializer/PayloadSerializers/SecurityLabelsCatalogSerializer.cpp | 16 | ||||
-rw-r--r-- | Swiften/Serializer/PayloadSerializers/UnitTest/SecurityLabelsCatalogSerializerTest.cpp | 45 |
2 files changed, 43 insertions, 18 deletions
diff --git a/Swiften/Serializer/PayloadSerializers/SecurityLabelsCatalogSerializer.cpp b/Swiften/Serializer/PayloadSerializers/SecurityLabelsCatalogSerializer.cpp index 5e4d8e4..7424c98 100644 --- a/Swiften/Serializer/PayloadSerializers/SecurityLabelsCatalogSerializer.cpp +++ b/Swiften/Serializer/PayloadSerializers/SecurityLabelsCatalogSerializer.cpp @@ -16,7 +16,7 @@ SecurityLabelsCatalogSerializer::SecurityLabelsCatalogSerializer() : GenericPayl } std::string SecurityLabelsCatalogSerializer::serializePayload(boost::shared_ptr<SecurityLabelsCatalog> catalog) const { - XMLElement element("catalog", "urn:xmpp:sec-label:catalog:0"); + XMLElement element("catalog", "urn:xmpp:sec-label:catalog:2"); if (!catalog->getName().empty()) { element.setAttribute("name", catalog->getName()); } @@ -26,9 +26,17 @@ std::string SecurityLabelsCatalogSerializer::serializePayload(boost::shared_ptr< if (!catalog->getDescription().empty()) { element.setAttribute("desc", catalog->getDescription()); } - foreach (const SecurityLabel& label, catalog->getLabels()) { - std::string serializedLabel = SecurityLabelSerializer().serialize(boost::shared_ptr<SecurityLabel>(new SecurityLabel(label))); - element.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(serializedLabel))); + foreach (const SecurityLabelsCatalog::Item& item, catalog->getItems()) { + boost::shared_ptr<XMLElement> itemElement(new XMLElement("item")); + itemElement->setAttribute("selector", item.getSelector()); + if (item.getIsDefault()) { + itemElement->setAttribute("default", "true"); + } + if (item.getLabel()) { + std::string serializedLabel = SecurityLabelSerializer().serialize(item.getLabel()); + itemElement->addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(serializedLabel))); + } + element.addNode(itemElement); } return element.serialize(); } diff --git a/Swiften/Serializer/PayloadSerializers/UnitTest/SecurityLabelsCatalogSerializerTest.cpp b/Swiften/Serializer/PayloadSerializers/UnitTest/SecurityLabelsCatalogSerializerTest.cpp index 928f209..a7bf1b9 100644 --- a/Swiften/Serializer/PayloadSerializers/UnitTest/SecurityLabelsCatalogSerializerTest.cpp +++ b/Swiften/Serializer/PayloadSerializers/UnitTest/SecurityLabelsCatalogSerializerTest.cpp @@ -27,30 +27,47 @@ class SecurityLabelsCatalogSerializerTest : public CppUnit::TestFixture catalog->setName("Default"); catalog->setDescription("an example set of labels"); - SecurityLabel securityLabel1; - securityLabel1.setDisplayMarking("SECRET"); - securityLabel1.setForegroundColor("black"); - securityLabel1.setBackgroundColor("red"); - securityLabel1.setLabel("<esssecuritylabel xmlns=\"urn:xmpp:sec-label:ess:0\">MQYCAQQGASk=</esssecuritylabel>"); - catalog->addLabel(securityLabel1); - - SecurityLabel securityLabel2; - securityLabel2.setDisplayMarking("CONFIDENTIAL"); - securityLabel2.setForegroundColor("black"); - securityLabel2.setBackgroundColor("navy"); - securityLabel2.setLabel("<esssecuritylabel xmlns=\"urn:xmpp:sec-label:ess:0\">MQMGASk=</esssecuritylabel>"); - catalog->addLabel(securityLabel2); + SecurityLabelsCatalog::Item item1; + boost::shared_ptr<SecurityLabel> securityLabel1(new SecurityLabel()); + item1.setLabel(securityLabel1); + securityLabel1->setDisplayMarking("SECRET"); + securityLabel1->setForegroundColor("black"); + securityLabel1->setBackgroundColor("red"); + item1.setIsDefault(false); + item1.setSelector("Classified|SECRET"); + securityLabel1->setLabel("<esssecuritylabel xmlns=\"urn:xmpp:sec-label:ess:0\">MQYCAQQGASk=</esssecuritylabel>"); + catalog->addItem(item1); + + SecurityLabelsCatalog::Item item2; + boost::shared_ptr<SecurityLabel> securityLabel2(new SecurityLabel()); + item2.setLabel(securityLabel2); + securityLabel2->setDisplayMarking("CONFIDENTIAL"); + securityLabel2->setForegroundColor("black"); + securityLabel2->setBackgroundColor("navy"); + item2.setIsDefault(true); + item2.setSelector("Classified|CONFIDENTIAL"); + securityLabel2->setLabel("<esssecuritylabel xmlns=\"urn:xmpp:sec-label:ess:0\">MQMGASk=</esssecuritylabel>"); + catalog->addItem(item2); + + SecurityLabelsCatalog::Item item3; + item3.setSelector("Unclassified|UNCLASSIFIED"); + catalog->addItem(item3); CPPUNIT_ASSERT_EQUAL(std::string( - "<catalog desc=\"an example set of labels\" name=\"Default\" to=\"example.com\" xmlns=\"urn:xmpp:sec-label:catalog:0\">" + "<catalog desc=\"an example set of labels\" name=\"Default\" to=\"example.com\" xmlns=\"urn:xmpp:sec-label:catalog:2\">" + "<item selector=\"Classified|SECRET\">" "<securitylabel xmlns=\"urn:xmpp:sec-label:0\">" "<displaymarking bgcolor=\"red\" fgcolor=\"black\">SECRET</displaymarking>" "<label><esssecuritylabel xmlns=\"urn:xmpp:sec-label:ess:0\">MQYCAQQGASk=</esssecuritylabel></label>" "</securitylabel>" + "</item>" + "<item default=\"true\" selector=\"Classified|CONFIDENTIAL\">" "<securitylabel xmlns=\"urn:xmpp:sec-label:0\">" "<displaymarking bgcolor=\"navy\" fgcolor=\"black\">CONFIDENTIAL</displaymarking>" "<label><esssecuritylabel xmlns=\"urn:xmpp:sec-label:ess:0\">MQMGASk=</esssecuritylabel></label>" "</securitylabel>" + "</item>" + "<item selector=\"Unclassified|UNCLASSIFIED\"/>" "</catalog>"), testling.serialize(catalog)); } }; |