diff options
| -rw-r--r-- | Swiften/JID/JID.cpp | 38 | ||||
| -rw-r--r-- | Swiften/SConscript | 1 | ||||
| -rw-r--r-- | Swiften/StringPrep/SConscript | 9 | ||||
| -rw-r--r-- | Swiften/StringPrep/StringPrep.cpp | 31 | ||||
| -rw-r--r-- | Swiften/StringPrep/StringPrep.h | 17 | 
5 files changed, 62 insertions, 34 deletions
| diff --git a/Swiften/JID/JID.cpp b/Swiften/JID/JID.cpp index dcd6dd1..3be8386 100644 --- a/Swiften/JID/JID.cpp +++ b/Swiften/JID/JID.cpp @@ -3,40 +3,10 @@  #include <iostream>  #include "Swiften/JID/JID.h" +#include "Swiften/StringPrep/StringPrep.h"  namespace Swift { - -class StringPrepper { -	private: -		static const int MAX_STRINGPREP_SIZE = 1024; - -	public: -		static String getNamePrepped(const String& name) { -			return getStringPrepped(name, stringprep_nameprep); -		} - -		static String getNodePrepped(const String& node) { -			return getStringPrepped(node, stringprep_xmpp_nodeprep); -		} - -		static String getResourcePrepped(const String& resource) { -			return getStringPrepped(resource, stringprep_xmpp_resourceprep); -		} - -		static String getStringPrepped(const String& s, const Stringprep_profile profile[]) { -			std::vector<char> input(s.getUTF8String().begin(), s.getUTF8String().end()); -			input.resize(MAX_STRINGPREP_SIZE); -			if (stringprep(&input[0], MAX_STRINGPREP_SIZE, static_cast<Stringprep_profile_flags>(0), profile) == 0) { -				return String(&input[0]); -			} -			else { -				return ""; -			} -		} -}; - -  JID::JID(const char* jid) {  	initializeFromString(String(jid));  } @@ -80,9 +50,9 @@ void JID::initializeFromString(const String& jid) {  void JID::nameprepAndSetComponents(const String& node, const String& domain, const String& resource) { -	node_ = StringPrepper::getNamePrepped(node); -	domain_ = StringPrepper::getNodePrepped(domain); -	resource_ = StringPrepper::getResourcePrepped(resource); +	node_ = StringPrep::getPrepared(node, StringPrep::NamePrep); +	domain_ = StringPrep::getPrepared(domain, StringPrep::XMPPNodePrep); +	resource_ = StringPrep::getPrepared(resource, StringPrep::XMPPResourcePrep);  }  String JID::toString() const { diff --git a/Swiften/SConscript b/Swiften/SConscript index 3b37f90..af3ac97 100644 --- a/Swiften/SConscript +++ b/Swiften/SConscript @@ -94,6 +94,7 @@ if myenv.get("HAVE_OPENSSL", 0) :  SConscript(dirs = [  		"Base", +		"StringPrep",  		"Application",  		"EventLoop",  		"Parser", diff --git a/Swiften/StringPrep/SConscript b/Swiften/StringPrep/SConscript new file mode 100644 index 0000000..480d81a --- /dev/null +++ b/Swiften/StringPrep/SConscript @@ -0,0 +1,9 @@ +Import("swiften_env") + +myenv = swiften_env.Clone() +myenv.MergeFlags(swiften_env["LIBIDN_FLAGS"]) + +objects = myenv.StaticObject([ +			"StringPrep.cpp" +		]) +swiften_env.Append(SWIFTEN_OBJECTS = [objects]) diff --git a/Swiften/StringPrep/StringPrep.cpp b/Swiften/StringPrep/StringPrep.cpp new file mode 100644 index 0000000..3e85177 --- /dev/null +++ b/Swiften/StringPrep/StringPrep.cpp @@ -0,0 +1,31 @@ +#include "Swiften/StringPrep/StringPrep.h" + +#include <stringprep.h> +#include <vector> + +namespace Swift { + +static const int MAX_STRINGPREP_SIZE = 1024; + +const Stringprep_profile* getLibIDNProfile(StringPrep::Profile profile) { +	switch(profile) { +		case StringPrep::NamePrep: return stringprep_nameprep; break; +		case StringPrep::XMPPNodePrep: return stringprep_xmpp_nodeprep; break; +		case StringPrep::XMPPResourcePrep: return stringprep_xmpp_resourceprep; break; +		case StringPrep::SASLPrep: return stringprep_saslprep; break; +	} +} + +String StringPrep::getPrepared(const String& s, Profile profile) { +	 +	std::vector<char> input(s.getUTF8String().begin(), s.getUTF8String().end()); +	input.resize(MAX_STRINGPREP_SIZE); +	if (stringprep(&input[0], MAX_STRINGPREP_SIZE, static_cast<Stringprep_profile_flags>(0), getLibIDNProfile(profile)) == 0) { +		return String(&input[0]); +	} +	else { +		return ""; +	} +} + +} diff --git a/Swiften/StringPrep/StringPrep.h b/Swiften/StringPrep/StringPrep.h new file mode 100644 index 0000000..7dbb03a --- /dev/null +++ b/Swiften/StringPrep/StringPrep.h @@ -0,0 +1,17 @@ +#pragma once + +#include "Swiften/Base/String.h" + +namespace Swift { +	class StringPrep { +		public: +			enum Profile { +				NamePrep, +				XMPPNodePrep, +				XMPPResourcePrep, +				SASLPrep, +			}; + +			static String getPrepared(const String& s, Profile profile); +	}; +} | 
 Swift
 Swift