diff options
Diffstat (limited to 'Swiften/Disco/CapsInfoGenerator.cpp')
-rw-r--r-- | Swiften/Disco/CapsInfoGenerator.cpp | 77 |
1 files changed, 38 insertions, 39 deletions
diff --git a/Swiften/Disco/CapsInfoGenerator.cpp b/Swiften/Disco/CapsInfoGenerator.cpp index d2354ea..961ef43 100644 --- a/Swiften/Disco/CapsInfoGenerator.cpp +++ b/Swiften/Disco/CapsInfoGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -8,16 +8,15 @@ #include <algorithm> -#include <Swiften/Base/foreach.h> +#include <Swiften/Crypto/CryptoProvider.h> #include <Swiften/Elements/DiscoInfo.h> #include <Swiften/Elements/FormField.h> -#include <Swiften/Crypto/CryptoProvider.h> #include <Swiften/StringCodecs/Base64.h> namespace { - bool compareFields(Swift::FormField::ref f1, Swift::FormField::ref f2) { - return f1->getName() < f2->getName(); - } + bool compareFields(Swift::FormField::ref f1, Swift::FormField::ref f2) { + return f1->getName() < f2->getName(); + } } namespace Swift { @@ -26,39 +25,39 @@ CapsInfoGenerator::CapsInfoGenerator(const std::string& node, CryptoProvider* cr } CapsInfo CapsInfoGenerator::generateCapsInfo(const DiscoInfo& discoInfo) const { - std::string serializedCaps; - - std::vector<DiscoInfo::Identity> identities(discoInfo.getIdentities()); - std::sort(identities.begin(), identities.end()); - foreach (const DiscoInfo::Identity& identity, identities) { - serializedCaps += identity.getCategory() + "/" + identity.getType() + "/" + identity.getLanguage() + "/" + identity.getName() + "<"; - } - - std::vector<std::string> features(discoInfo.getFeatures()); - std::sort(features.begin(), features.end()); - foreach (const std::string& feature, features) { - serializedCaps += feature + "<"; - } - - foreach(Form::ref extension, discoInfo.getExtensions()) { - serializedCaps += extension->getFormType() + "<"; - std::vector<FormField::ref> fields(extension->getFields()); - std::sort(fields.begin(), fields.end(), &compareFields); - foreach(FormField::ref field, fields) { - if (field->getName() == "FORM_TYPE") { - continue; - } - serializedCaps += field->getName() + "<"; - std::vector<std::string> values(field->getValues()); - std::sort(values.begin(), values.end()); - foreach(const std::string& value, values) { - serializedCaps += value + "<"; - } - } - } - - std::string version(Base64::encode(crypto_->getSHA1Hash(createByteArray(serializedCaps)))); - return CapsInfo(node_, version, "sha-1"); + std::string serializedCaps; + + std::vector<DiscoInfo::Identity> identities(discoInfo.getIdentities()); + std::sort(identities.begin(), identities.end()); + for (const auto& identity : identities) { + serializedCaps += identity.getCategory() + "/" + identity.getType() + "/" + identity.getLanguage() + "/" + identity.getName() + "<"; + } + + std::vector<std::string> features(discoInfo.getFeatures()); + std::sort(features.begin(), features.end()); + for (const auto& feature : features) { + serializedCaps += feature + "<"; + } + + for (const auto& extension : discoInfo.getExtensions()) { + serializedCaps += extension->getFormType() + "<"; + std::vector<FormField::ref> fields(extension->getFields()); + std::sort(fields.begin(), fields.end(), &compareFields); + for (const auto& field : fields) { + if (field->getName() == "FORM_TYPE") { + continue; + } + serializedCaps += field->getName() + "<"; + std::vector<std::string> values(field->getValues()); + std::sort(values.begin(), values.end()); + for (const auto& value : values) { + serializedCaps += value + "<"; + } + } + } + + std::string version(Base64::encode(crypto_->getSHA1Hash(createByteArray(serializedCaps)))); + return CapsInfo(node_, version, "sha-1"); } } |