diff options
183 files changed, 1265 insertions, 648 deletions
| diff --git a/BuildTools/CLang/.gitignore b/BuildTools/CLang/.gitignore new file mode 100644 index 0000000..df682c0 --- /dev/null +++ b/BuildTools/CLang/.gitignore @@ -0,0 +1,4 @@ +CLangDiagnosticsFlags +CLangDiagnosticsFlagsTool.sh +CLangDiagnosticsFlagsTool +clang-diagnostics-overview.* diff --git a/BuildTools/CLang/CLangDiagnosticsFlagsTool.cpp b/BuildTools/CLang/CLangDiagnosticsFlagsTool.cpp new file mode 100644 index 0000000..82cc902 --- /dev/null +++ b/BuildTools/CLang/CLangDiagnosticsFlagsTool.cpp @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <iostream> +#include <set> +#include <vector> +#include <cassert> +#include <boost/algorithm/string/predicate.hpp> +#include <boost/graph/graph_traits.hpp> +#include <boost/graph/adjacency_list.hpp> +#include <boost/graph/topological_sort.hpp> +#include <boost/graph/topological_sort.hpp> +#include <boost/graph/graphviz.hpp> + +// ----------------------------------------------------------------------------- +// Include diagnostics data from CLang +// ----------------------------------------------------------------------------- + +#define DIAG(name, a, b, c, d, e, f, g) name, +	 +namespace diag { +	enum LexKinds { +#include <clang/Basic/DiagnosticLexKinds.inc> +#include <clang/Basic/DiagnosticParseKinds.inc> +#include <clang/Basic/DiagnosticCommonKinds.inc> +#include <clang/Basic/DiagnosticDriverKinds.inc> +#include <clang/Basic/DiagnosticFrontendKinds.inc> +#include <clang/Basic/DiagnosticSemaKinds.inc> +	}; +} + +#define GET_DIAG_ARRAYS +#include <clang/Basic/DiagnosticGroups.inc> +#undef GET_DIAG_ARRAYS + +struct DiagTableEntry { +	const char* name; +	const short* array; +	const short* group; +}; + +static const DiagTableEntry diagnostics[] = { +#define GET_DIAG_TABLE +#include <clang/Basic/DiagnosticGroups.inc> +#undef GET_DIAG_TABLE +}; +static const size_t diagnostics_count = sizeof(diagnostics) / sizeof(diagnostics[0]); + +// ----------------------------------------------------------------------------- + +using namespace boost; + +struct Properties { +	Properties() : missing(false), redundant(false) { +	} + +	std::string name; +	bool have; +	bool implicitHave; +	bool dontWant; +	bool implicitDontWant; +	bool ignored; +	bool available; +	bool missing; +	bool redundant; +	bool alreadyCovered; +}; + +class GraphVizLabelWriter { +	public: +		GraphVizLabelWriter(const std::vector<Properties>& properties) : properties(properties) { +		}	 +		 +		template <class VertexOrEdge> +		void operator()(std::ostream& out, const VertexOrEdge& v) const { +			std::string color; +			if (properties[v].missing) { +				color = "orange"; +			} +			else if (properties[v].redundant) { +				color = "lightblue"; +			} +			else if (properties[v].have) { +				color = "darkgreen"; +			} +			else if (properties[v].implicitHave) { +				color = "green"; +			} +			else if (properties[v].dontWant) { +				color = "red"; +			} +			else if (properties[v].implicitDontWant) { +				color = "pink"; +			} +			else if (properties[v].ignored) { +				color = "white"; +			} +			else if (properties[v].available) { +				color = "yellow"; +			} +			else { +				assert(false); +			} +			out << "[label=" << escape_dot_string(properties[v].name) << " fillcolor=\"" << color << "\" style=filled]"; +		} + +	private: +		const std::vector<Properties> properties; +}; + +int main(int argc, char* argv[]) { +	// Parse command-line arguments +	std::set<std::string> have; +	std::set<std::string> dontWant; +	std::string outputDir; +	for (int i = 1; i < argc; ++i) { +		std::string arg(argv[i]); +		if (starts_with(arg, "-W")) { +			have.insert(arg.substr(2, arg.npos)); +		} +		else if (starts_with(arg, "-w")) { +			dontWant.insert(arg.substr(2, arg.npos)); +		} +		else if (starts_with(arg, "-O")) { +			outputDir = arg.substr(2, arg.npos) + "/"; +		} +	} + +	// Build the graph and initialize properties +	typedef adjacency_list<vecS, vecS, bidirectionalS> Graph; +	typedef graph_traits<Graph>::vertex_descriptor Vertex; +	Graph g(diagnostics_count); +	std::vector<Properties> properties(num_vertices(g)); +	for (size_t i = 0; i < diagnostics_count; ++i) { +		std::string name(diagnostics[i].name); +		properties[i].name = name; +		properties[i].implicitHave = properties[i].have = have.find(name) != have.end(); +		properties[i].implicitDontWant = properties[i].dontWant = dontWant.find(name) != dontWant.end(); +		properties[i].ignored = diagnostics[i].group == 0 && diagnostics[i].array == 0; +		properties[i].alreadyCovered = false; +		properties[i].available = true; +		for (const short* j = diagnostics[i].group; j && *j != -1; ++j) { +			add_edge(i, *j, g); +		} +	} + +	// Sort the diagnostics +	std::list<Vertex> sortedDiagnostics; +	boost::topological_sort(g, std::front_inserter(sortedDiagnostics)); + +	// Propagate dontWant and have properties down +	for(std::list<Vertex>::const_iterator i = sortedDiagnostics.begin(); i != sortedDiagnostics.end(); ++i) { +		graph_traits<Graph>::adjacency_iterator adjacentIt, adjacentEnd; +		for (tie(adjacentIt, adjacentEnd) = adjacent_vertices(*i, g); adjacentIt != adjacentEnd; ++adjacentIt) { +			properties[*adjacentIt].implicitDontWant = properties[*i].implicitDontWant || properties[*adjacentIt].implicitDontWant; +			properties[*adjacentIt].implicitHave = properties[*i].implicitHave || properties[*adjacentIt].implicitHave; +		} +	} + +	// Propagate 'available' property upwards +	for(std::list<Vertex>::const_reverse_iterator i = sortedDiagnostics.rbegin(); i != sortedDiagnostics.rend(); ++i) { +		properties[*i].available = properties[*i].available && !properties[*i].implicitDontWant; +		graph_traits<Graph>::in_edge_iterator edgesIt, edgesEnd; +		graph_traits<Graph>::edge_descriptor edge; +		for (tie(edgesIt, edgesEnd) = in_edges(*i, g); edgesIt != edgesEnd; ++edgesIt) { +			properties[source(*edgesIt, g)].available = properties[source(*edgesIt, g)].available && properties[*i].available; +		} +	} + +	// Collect missing & redundant flags +	std::set<std::string> missing; +	std::set<std::string> redundant; +	for(std::list<Vertex>::const_iterator i = sortedDiagnostics.begin(); i != sortedDiagnostics.end(); ++i) { +		bool markChildrenCovered = true; +		if (properties[*i].alreadyCovered) { +			if (properties[*i].have) { +				properties[*i].redundant = true; +				redundant.insert(properties[*i].name); +			} +		} +		else { +			if (properties[*i].available) { +				if (!properties[*i].implicitHave && !properties[*i].ignored) { +					properties[*i].missing = true; +					missing.insert(properties[*i].name); +				} +			} +			else { +				markChildrenCovered = false; +			} +		} +		if (markChildrenCovered) { +			graph_traits<Graph>::adjacency_iterator adjacentIt, adjacentEnd; +			for (tie(adjacentIt, adjacentEnd) = adjacent_vertices(*i, g); adjacentIt != adjacentEnd; ++adjacentIt) { +				properties[*adjacentIt].alreadyCovered = true; +			} +		} +	} + +	// Write information +	if (!missing.empty()) { +		std::cout << "Missing diagnostic flags: "; +		for(std::set<std::string>::const_iterator i = missing.begin(); i != missing.end(); ++i) { +			std::cout << "-W" << *i << " "; +		} +		std::cout<< std::endl; +	} + +	if (!redundant.empty()) { +		std::cout << "Redundant diagnostic flags: "; +		for(std::set<std::string>::const_iterator i = redundant.begin(); i != redundant.end(); ++i) { +			std::cout << "-W" << *i << " "; +		} +		std::cout<< std::endl; +	} + +	// Write graphviz file +	if (!outputDir.empty()) { +		std::ofstream f((outputDir + "clang-diagnostics-overview.dot").c_str()); +		write_graphviz(f, g, GraphVizLabelWriter(properties)); +		f.close(); +	} + +	return 0; +} diff --git a/BuildTools/CLang/SConscript b/BuildTools/CLang/SConscript new file mode 100644 index 0000000..850c35c --- /dev/null +++ b/BuildTools/CLang/SConscript @@ -0,0 +1,15 @@ +Import("env") + +#myenv = Environment() +#myenv.Append(CPPPATH = ["."]) +#myenv.Program("CLangDiagnosticsFlagsTool", ["CLangDiagnosticsFlagsTool.cpp"]) +# +#disabledDiagnostics = ["-wunreachable-code", "-wunused-macros", "-wmissing-noreturn", "-wlong-long", "-wcast-align", "-wglobal-constructors", "-wmissing-prototypes", "-wpadded", "-wshadow"] +#clangDiagnosticsFlagsToolCommand = "BuildTools/CLang/CLangDiagnosticsFlagsTool -O" + env.Dir(".").abspath + " " + " ".join(disabledDiagnostics) + " " +#clangDiagnosticsFlagsToolCommand += " ".join([flag for flag in env["CXXFLAGS"] if flag.startswith("-W")]) +#clangDiagnosticsFlagsToolCommand += "\n" +#clangDiagnosticsFlagsToolCommand += "dot -Tpng " + env.Dir(".").abspath + "/clang-diagnostics-overview.dot > " + env.Dir(".").abspath + "/clang-diagnostics-overview.png\n" +#v = env.WriteVal("#/BuildTools/CLang/CLangDiagnosticsFlagsTool.sh", env.Value(clangDiagnosticsFlagsToolCommand)) +#env.AddPostAction(v, Chmod(v[0], 0755)) +# +# diff --git a/BuildTools/CheckHeaders.py b/BuildTools/CheckHeaders.py new file mode 100755 index 0000000..73f49db --- /dev/null +++ b/BuildTools/CheckHeaders.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +import os, sys + +foundBadHeaders = False + +for (path, dirs, files) in os.walk(".") : +  if "3rdParty" in path or ".sconf" in path or ".framework" in path : +    continue +  if not "Swiften" in path : +    continue + +  for filename in [os.path.join(path, file) for file in files if file.endswith(".h")] : +    file = open(filename, "r") +    for line in file.readlines() : +      for include in ["iostream", "algorithm", "cassert", "boost/bind.hpp", "boost/filesystem.hpp", "Base/foreach.h", "Base/Log.h", "boost/date_time/date_time.hpp", "boost/filesystem/filesystem.hpp"] : +        if "#include" in line and include in line and not "Base/Log" in filename : +          print "Found " + include + " include in " + filename +          foundBadHeaders = True + +sys.exit(foundBadHeaders) diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct index bd40f1f..43b6df0 100644 --- a/BuildTools/SCons/SConstruct +++ b/BuildTools/SCons/SConstruct @@ -178,7 +178,14 @@ else :  		env.Append(CXXFLAGS = ["-Werror"])  	gccVersion = env["CCVERSION"].split(".")  	if gccVersion >= ["4", "5", "0"] : -		env.Append(CCFLAGS = ["-Wlogical-op"]) +		env.Append(CXXFLAGS = ["-Wlogical-op"]) +	if "clang" in env["CC"] : +		env.Append(CXXFLAGS = ["-W#warnings", "-W-Wc++0x-compat", "-Wc++0x-compat", "-Waddress-of-temporary", "-Wambiguous-member-template", "-Warray-bounds", "-Watomic-properties", "-Wbind-to-temporary-copy", "-Wbuiltin-macro-redefined", "-Wc++-compat", "-Wc++0x-extensions", "-Wcomments", "-Wconditional-uninitialized", "-Wconstant-logical-operand", "-Wdeclaration-after-statement", "-Wdeprecated", "-Wdeprecated-implementations", "-Wdeprecated-writable-strings", "-Wduplicate-method-arg", "-Wempty-body", "-Wendif-labels", "-Wenum-compare", "-Wformat=2", "-Wfour-char-constants", "-Wgnu", "-Wincomplete-implementation", "-Winvalid-noreturn", "-Winvalid-offsetof", "-Winvalid-token-paste", "-Wlocal-type-template-args", "-Wmethod-signatures", "-Wmicrosoft", "-Wmissing-declarations", "-Wnon-pod-varargs", "-Wnonfragile-abi2", "-Wnull-dereference", "-Wout-of-line-declaration", "-Woverlength-strings", "-Wpacked", "-Wpointer-arith", "-Wpointer-sign", "-Wprotocol", "-Wreadonly-setter-attrs", "-Wselector", "-Wshift-overflow", "-Wshift-sign-overflow", "-Wstrict-selector-match", "-Wsuper-class-method-mismatch", "-Wtautological-compare", "-Wtypedef-redefinition", "-Wundeclared-selector", "-Wunknown-attributes", "-Wunknown-warning-option", "-Wunnamed-type-template-args", "-Wunused-exception-parameter", "-Wunused-member-function", "-Wused-but-marked-unused", "-Wvariadic-macros"]) +# To enable:  +# "-Wheader-hygiene" +#	"-Wnon-gcc", +# "-Wweak-vtables", +# "-Wlarge-by-value-copy",  if env.get("coverage", 0) :  	assert(env["PLATFORM"] != "win32") @@ -621,6 +628,9 @@ if env.Dir("#/.git").exists() :  # Project files  ################################################################################ +# Build tools +env.SConscript(dirs = ["#/BuildTools/CLang"]) +  # Modules  modules = []  for dir in os.listdir(Dir("#/3rdParty").abspath) : diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayload.h b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayload.h index 7533a1e..62ea495 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayload.h +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayload.h @@ -8,9 +8,8 @@  #include <Swiften/Swiften.h> -using namespace Swift;  //... -class EchoPayload : public Payload { +class EchoPayload : public Swift::Payload {  	public:  		EchoPayload() {} diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadParserFactory.h b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadParserFactory.h index 9cbb795..33a8c41 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadParserFactory.h +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadParserFactory.h @@ -9,9 +9,7 @@  #include <Swiften/Swiften.h>  #include "EchoPayload.h" -using namespace Swift; - -class EchoPayloadParser : public GenericPayloadParser<EchoPayload> { +class EchoPayloadParser : public Swift::GenericPayloadParser<EchoPayload> {  	public:  		EchoPayloadParser() : currentDepth(0) {} @@ -36,7 +34,7 @@ class EchoPayloadParser : public GenericPayloadParser<EchoPayload> {  		std::string currentText;  }; -class EchoPayloadParserFactory : public GenericPayloadParserFactory<EchoPayloadParser> { +class EchoPayloadParserFactory : public Swift::GenericPayloadParserFactory<EchoPayloadParser> {  	public:  		EchoPayloadParserFactory() :  			GenericPayloadParserFactory<EchoPayloadParser>("echo", "http://swift.im/echo") {} diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadSerializer.h b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadSerializer.h index 85e8e67..068113c 100644 --- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadSerializer.h +++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoPayloadSerializer.h @@ -9,9 +9,7 @@  #include <Swiften/Swiften.h>  #include "EchoPayload.h" -using namespace Swift; - -class EchoPayloadSerializer : public GenericPayloadSerializer<EchoPayload> { +class EchoPayloadSerializer : public Swift::GenericPayloadSerializer<EchoPayload> {  	public:  		std::string serializePayload(boost::shared_ptr<EchoPayload> payload) const {  			XMLElement element("echo", "http://swift.im/protocol/echo"); diff --git a/Slimber/Server.cpp b/Slimber/Server.cpp index 380ce6a..809c56a 100644 --- a/Slimber/Server.cpp +++ b/Slimber/Server.cpp @@ -8,7 +8,9 @@  #include <string>  #include <boost/bind.hpp> +#include <iostream> +#include <Swiften/Base/foreach.h>  #include "Swiften/Base/String.h"  #include "Swiften/LinkLocal/LinkLocalConnector.h"  #include "Swiften/Network/Connection.h" diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index 49cfec4..2ef5f9e 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -14,6 +14,7 @@ extern "C" {  #include <deque>  #include <boost/assign/list_of.hpp> +#include <Swiften/Base/foreach.h>  #include <Swiften/Swiften.h>  #include "Watchdog.h" diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index 94d4b9a..5f51ac6 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -8,6 +8,7 @@  #include <boost/bind.hpp> +#include <Swiften/Base/foreach.h>  #include "Swift/Controllers/Chat/ChatController.h"  #include "Swift/Controllers/Chat/MUCSearchController.h"  #include "Swift/Controllers/XMPPEvents/EventController.h" diff --git a/Swift/Controllers/Chat/MUCSearchController.cpp b/Swift/Controllers/Chat/MUCSearchController.cpp index 743aabb..2d5c7e7 100644 --- a/Swift/Controllers/Chat/MUCSearchController.cpp +++ b/Swift/Controllers/Chat/MUCSearchController.cpp @@ -11,6 +11,7 @@  #include <boost/bind.hpp>  #include <boost/shared_ptr.hpp> +#include <Swiften/Base/foreach.h>  #include <Swiften/Disco/GetDiscoItemsRequest.h>  #include <Swiften/Base/Log.h>  #include <Swiften/Base/String.h> diff --git a/Swift/Controllers/Chat/UserSearchController.cpp b/Swift/Controllers/Chat/UserSearchController.cpp index b3403d7..deac2f9 100644 --- a/Swift/Controllers/Chat/UserSearchController.cpp +++ b/Swift/Controllers/Chat/UserSearchController.cpp @@ -9,9 +9,9 @@  #include <boost/bind.hpp>  #include <boost/shared_ptr.hpp> +#include <Swiften/Base/foreach.h>  #include <Swiften/Disco/GetDiscoInfoRequest.h>  #include <Swiften/Disco/GetDiscoItemsRequest.h> -  #include <Swift/Controllers/DiscoServiceWalker.h>  #include <Swift/Controllers/UIEvents/UIEventStream.h>  #include <Swift/Controllers/UIEvents/RequestChatWithUserDialogUIEvent.h> diff --git a/Swift/Controllers/DiscoServiceWalker.cpp b/Swift/Controllers/DiscoServiceWalker.cpp index ce29927..6aed6eb 100644 --- a/Swift/Controllers/DiscoServiceWalker.cpp +++ b/Swift/Controllers/DiscoServiceWalker.cpp @@ -6,6 +6,7 @@  #include <Swift/Controllers/DiscoServiceWalker.h>  #include <Swiften/Base/Log.h> +#include <Swiften/Base/foreach.h>  #include <boost/bind.hpp> diff --git a/Swift/Controllers/ProfileSettingsProvider.h b/Swift/Controllers/ProfileSettingsProvider.h index 74bcd12..8ba250c 100644 --- a/Swift/Controllers/ProfileSettingsProvider.h +++ b/Swift/Controllers/ProfileSettingsProvider.h @@ -7,6 +7,7 @@  #pragma once  #include "Swift/Controllers/Settings/SettingsProvider.h" +#include <Swiften/Base/foreach.h>  namespace Swift { diff --git a/Swift/Controllers/Roster/ContactRosterItem.cpp b/Swift/Controllers/Roster/ContactRosterItem.cpp index c6064d6..7146040 100644 --- a/Swift/Controllers/Roster/ContactRosterItem.cpp +++ b/Swift/Controllers/Roster/ContactRosterItem.cpp @@ -7,6 +7,8 @@  #include "Swift/Controllers/Roster/ContactRosterItem.h"  #include "Swift/Controllers/Roster/GroupRosterItem.h" +#include <Swiften/Base/foreach.h> +  namespace Swift { diff --git a/Swift/Controllers/Roster/RosterGroupExpandinessPersister.cpp b/Swift/Controllers/Roster/RosterGroupExpandinessPersister.cpp index c1045ee..0a242ae 100644 --- a/Swift/Controllers/Roster/RosterGroupExpandinessPersister.cpp +++ b/Swift/Controllers/Roster/RosterGroupExpandinessPersister.cpp @@ -9,6 +9,7 @@  #include <boost/bind.hpp>  #include <vector> +#include <Swiften/Base/foreach.h>  #include "Swiften/Base/String.h"  #include "Swift/Controllers/Roster/GroupRosterItem.h" diff --git a/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp b/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp index 16f2745..ca74dbb 100644 --- a/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp +++ b/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp @@ -8,6 +8,7 @@  #include <cppunit/extensions/HelperMacros.h>  #include <cppunit/extensions/TestFactoryRegistry.h> +#include <Swiften/Base/foreach.h>  #include "Swift/Controllers/Roster/RosterController.h"  #include "Swift/Controllers/UnitTest/MockMainWindowFactory.h"  // #include "Swiften/Elements/Payload.h" diff --git a/Swift/Controllers/XMPPEvents/EventController.cpp b/Swift/Controllers/XMPPEvents/EventController.cpp index 7f8f216..98fd634 100644 --- a/Swift/Controllers/XMPPEvents/EventController.cpp +++ b/Swift/Controllers/XMPPEvents/EventController.cpp @@ -9,6 +9,7 @@  #include <boost/bind.hpp>  #include <algorithm> +#include <Swiften/Base/foreach.h>  #include "Swift/Controllers/XMPPEvents/MessageEvent.h"  #include "Swift/Controllers/XMPPEvents/ErrorEvent.h"  #include "Swift/Controllers/XMPPEvents/SubscriptionRequestEvent.h" diff --git a/Swiften/Avatars/AvatarFileStorage.cpp b/Swiften/Avatars/AvatarFileStorage.cpp index 4f76c80..9effc16 100644 --- a/Swiften/Avatars/AvatarFileStorage.cpp +++ b/Swiften/Avatars/AvatarFileStorage.cpp @@ -8,6 +8,7 @@  #include <iostream>  #include <boost/filesystem/fstream.hpp> +#include <boost/filesystem.hpp>  #include <Swiften/Base/foreach.h>  #include <Swiften/Base/String.h> @@ -58,7 +59,7 @@ void AvatarFileStorage::addAvatar(const std::string& hash, const ByteArray& avat  		}  	}  	boost::filesystem::ofstream file(avatarPath, boost::filesystem::ofstream::binary|boost::filesystem::ofstream::out); -	file.write(reinterpret_cast<const char*>(avatar.getData()), avatar.getSize()); +	file.write(reinterpret_cast<const char*>(avatar.getData()), static_cast<std::streamsize>(avatar.getSize()));  	file.close();  } diff --git a/Swiften/Avatars/AvatarFileStorage.h b/Swiften/Avatars/AvatarFileStorage.h index e736230..b7e73f5 100644 --- a/Swiften/Avatars/AvatarFileStorage.h +++ b/Swiften/Avatars/AvatarFileStorage.h @@ -8,7 +8,7 @@  #include <map>  #include <string> -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include <Swiften/JID/JID.h>  #include "Swiften/Base/ByteArray.h" diff --git a/Swiften/Avatars/AvatarManager.h b/Swiften/Avatars/AvatarManager.h index e1af451..3461973 100644 --- a/Swiften/Avatars/AvatarManager.h +++ b/Swiften/Avatars/AvatarManager.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include <Swiften/Base/boost_bsignals.h>  #include <Swiften/Base/ByteArray.h> diff --git a/Swiften/Avatars/AvatarProvider.h b/Swiften/Avatars/AvatarProvider.h index 0f66904..d2d408e 100644 --- a/Swiften/Avatars/AvatarProvider.h +++ b/Swiften/Avatars/AvatarProvider.h @@ -6,9 +6,10 @@  #pragma once -#include "Swiften/Base/boost_bsignals.h"  #include <string> +#include <Swiften/Base/boost_bsignals.h> +  namespace Swift {  	class JID; diff --git a/Swiften/Avatars/AvatarStorage.h b/Swiften/Avatars/AvatarStorage.h index 48fc885..d1aff39 100644 --- a/Swiften/Avatars/AvatarStorage.h +++ b/Swiften/Avatars/AvatarStorage.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include <string>  namespace Swift { diff --git a/Swiften/Avatars/VCardAvatarManager.h b/Swiften/Avatars/VCardAvatarManager.h index 3f99dad..6c02ace 100644 --- a/Swiften/Avatars/VCardAvatarManager.h +++ b/Swiften/Avatars/VCardAvatarManager.h @@ -6,11 +6,8 @@  #pragma once -#include <map> -  #include "Swiften/Avatars/AvatarProvider.h"  #include "Swiften/JID/JID.h" -#include "Swiften/Elements/VCard.h"  namespace Swift {  	class MUCRegistry; diff --git a/Swiften/Base/ByteArray.h b/Swiften/Base/ByteArray.h index ad2c1e5..2059052 100644 --- a/Swiften/Base/ByteArray.h +++ b/Swiften/Base/ByteArray.h @@ -6,11 +6,9 @@  #pragma once -#include <cstring>  #include <vector> -#include <iostream> -  #include <string> +#include <cstring> // for memcpy  namespace Swift {  	class ByteArray @@ -24,7 +22,7 @@ namespace Swift {  			ByteArray(const char* c) {  				while (*c) { -					data_.push_back(*c); +					data_.push_back(static_cast<unsigned char>(*c));  					++c;  				}  			} @@ -75,7 +73,7 @@ namespace Swift {  			}  			void resize(size_t size, char c) { -				return data_.resize(size, c); +				return data_.resize(size, static_cast<unsigned char>(c));  			}  			friend ByteArray operator+(const ByteArray& a, const ByteArray&b) { @@ -87,7 +85,7 @@ namespace Swift {  			friend ByteArray operator+(const ByteArray& a, char b) {  				ByteArray x;  				x.resize(1); -				x[0] = b; +				x[0] = static_cast<unsigned char>(b);  				return a + x;  			} @@ -97,7 +95,7 @@ namespace Swift {  			}  			ByteArray& operator+=(char c) { -				data_.push_back(c); +				data_.push_back(static_cast<unsigned char>(c));  				return *this;  			} diff --git a/Swiften/Base/IDGenerator.h b/Swiften/Base/IDGenerator.h index 4b6289b..d536dcc 100644 --- a/Swiften/Base/IDGenerator.h +++ b/Swiften/Base/IDGenerator.h @@ -4,8 +4,7 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_IDGenerator_H -#define SWIFTEN_IDGenerator_H +#pragma once  #include <string> @@ -20,5 +19,3 @@ namespace Swift {  			std::string currentID_;  	};  } - -#endif diff --git a/Swiften/Base/Paths.h b/Swiften/Base/Paths.h index 06c6aeb..8ac4640 100644 --- a/Swiften/Base/Paths.h +++ b/Swiften/Base/Paths.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  namespace Swift {  	class Paths { diff --git a/Swiften/Base/Platform.h b/Swiften/Base/Platform.h index 32e2671..6cdb667 100644 --- a/Swiften/Base/Platform.h +++ b/Swiften/Base/Platform.h @@ -4,8 +4,7 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_Platform_H -#define SWIFTEN_Platform_H +#pragma once  // Base platforms  #if defined(linux) || defined(__linux) || defined(__linux__) @@ -46,5 +45,3 @@  #elif defined(BOOST_BIG_ENDIAN)  #define SWIFTEN_BIG_ENDIAN  #endif - -#endif diff --git a/Swiften/Base/String.h b/Swiften/Base/String.h index 192d53b..0de6cac 100644 --- a/Swiften/Base/String.h +++ b/Swiften/Base/String.h @@ -6,7 +6,6 @@  #pragma once -#include <map>  #include <string>  #include <vector> diff --git a/Swiften/Base/foreach.h b/Swiften/Base/foreach.h index 05366d6..87f6147 100644 --- a/Swiften/Base/foreach.h +++ b/Swiften/Base/foreach.h @@ -4,12 +4,9 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_FOREACH_H -#define SWIFTEN_FOREACH_H +#pragma once  #include <boost/foreach.hpp>  #undef foreach  #define foreach BOOST_FOREACH - -#endif diff --git a/Swiften/Base/sleep.h b/Swiften/Base/sleep.h index c2bc601..a95e907 100644 --- a/Swiften/Base/sleep.h +++ b/Swiften/Base/sleep.h @@ -4,11 +4,8 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_sleep_H -#define SWIFTEN_sleep_H +#pragma once  namespace Swift {  	void sleep(unsigned int msecs);  } - -#endif diff --git a/Swiften/Chat/UnitTest/ChatStateNotifierTest.cpp b/Swiften/Chat/UnitTest/ChatStateNotifierTest.cpp index 5d7961b..aa16892 100644 --- a/Swiften/Chat/UnitTest/ChatStateNotifierTest.cpp +++ b/Swiften/Chat/UnitTest/ChatStateNotifierTest.cpp @@ -8,6 +8,7 @@  #include <cppunit/extensions/TestFactoryRegistry.h>  #include <boost/bind.hpp> +#include <Swiften/Base/foreach.h>  #include "Swiften/Chat/ChatStateNotifier.h"  #include "Swiften/Client/DummyStanzaChannel.h"  #include "Swiften/Disco/DummyEntityCapsProvider.h" diff --git a/Swiften/Client/Client.h b/Swiften/Client/Client.h index 083b8a0..05c1e6e 100644 --- a/Swiften/Client/Client.h +++ b/Swiften/Client/Client.h @@ -6,7 +6,7 @@  #pragma once -#include "Swiften/Client/CoreClient.h" +#include <Swiften/Client/CoreClient.h>  namespace Swift {  	class SoftwareVersionResponder; @@ -85,12 +85,12 @@ namespace Swift {  			/**  			 * Returns the last received presence for the given (full) JID.  			 */ -			Presence::ref getLastPresence(const JID& jid) const; +			boost::shared_ptr<Presence> getLastPresence(const JID& jid) const;  			/**  			 * Returns the presence with the highest priority received for the given JID.  			 */ -			Presence::ref getHighestPriorityPresence(const JID& bareJID) const; +			boost::shared_ptr<Presence> getHighestPriorityPresence(const JID& bareJID) const;  			PresenceOracle* getPresenceOracle() const {  				return presenceOracle; @@ -142,7 +142,7 @@ namespace Swift {  			/**  			 * This signal is emitted when a JID changes presence.  			 */ -			boost::signal<void (Presence::ref)> onPresenceChange; +			boost::signal<void (boost::shared_ptr<Presence>)> onPresenceChange;  		private:  			Storages* getStorages() const; diff --git a/Swiften/Client/ClientSessionStanzaChannel.cpp b/Swiften/Client/ClientSessionStanzaChannel.cpp index 6b32b3d..85d9dec 100644 --- a/Swiften/Client/ClientSessionStanzaChannel.cpp +++ b/Swiften/Client/ClientSessionStanzaChannel.cpp @@ -7,6 +7,7 @@  #include "Swiften/Client/ClientSessionStanzaChannel.h"  #include <boost/bind.hpp> +#include <iostream>  namespace Swift { diff --git a/Swiften/Client/ClientXMLTracer.cpp b/Swiften/Client/ClientXMLTracer.cpp new file mode 100644 index 0000000..a26ce66 --- /dev/null +++ b/Swiften/Client/ClientXMLTracer.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Client/ClientXMLTracer.h> + +#include <iostream> +#include <boost/bind.hpp> + +namespace Swift { + +ClientXMLTracer::ClientXMLTracer(CoreClient* client) { +	client->onDataRead.connect(boost::bind(&ClientXMLTracer::printData, '<', _1)); +	client->onDataWritten.connect(boost::bind(&ClientXMLTracer::printData, '>', _1)); +} + +void ClientXMLTracer::printData(char direction, const std::string& data) { +	printLine(direction); +	std::cerr << data << std::endl; +} + +void ClientXMLTracer::printLine(char c) { +	for (unsigned int i = 0; i < 80; ++i) { +		std::cerr << c; +	} +	std::cerr << std::endl; +} + +} diff --git a/Swiften/Client/ClientXMLTracer.h b/Swiften/Client/ClientXMLTracer.h index bca2a54..617c53f 100644 --- a/Swiften/Client/ClientXMLTracer.h +++ b/Swiften/Client/ClientXMLTracer.h @@ -6,29 +6,15 @@  #pragma once -#include <boost/bind.hpp> -  #include <Swiften/Client/CoreClient.h>  namespace Swift {  	class ClientXMLTracer {  		public: -			ClientXMLTracer(CoreClient* client) { -				client->onDataRead.connect(boost::bind(&ClientXMLTracer::printData, '<', _1)); -				client->onDataWritten.connect(boost::bind(&ClientXMLTracer::printData, '>', _1)); -			} +			ClientXMLTracer(CoreClient* client);  		private: -			static void printData(char direction, const std::string& data) { -				printLine(direction); -				std::cerr << data << std::endl; -			} - -			static void printLine(char c) { -				for (unsigned int i = 0; i < 80; ++i) { -					std::cerr << c; -				} -				std::cerr << std::endl; -			} +			static void printData(char direction, const std::string& data); +			static void printLine(char c);  	};  } diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp index f0c5333..8e51c8e 100644 --- a/Swiften/Client/CoreClient.cpp +++ b/Swiften/Client/CoreClient.cpp @@ -283,5 +283,25 @@ void CoreClient::setUseTLS(UseTLS b) {  	useTLS = b;  } +bool CoreClient::isAvailable() const { +	return stanzaChannel_->isAvailable(); +} + +bool CoreClient::getStreamManagementEnabled() const { +	return stanzaChannel_->getStreamManagementEnabled(); +} + +StanzaChannel* CoreClient::getStanzaChannel() const { +	return stanzaChannel_; +} + +const JID& CoreClient::getJID() const { +	if (session_) { +		return session_->getLocalJID(); +	} +	else { +		return jid_; +	} +}  } diff --git a/Swiften/Client/CoreClient.h b/Swiften/Client/CoreClient.h index eb9c42c..060c699 100644 --- a/Swiften/Client/CoreClient.h +++ b/Swiften/Client/CoreClient.h @@ -6,35 +6,32 @@  #pragma once -#include "Swiften/Base/boost_bsignals.h" +#include <string>  #include <boost/shared_ptr.hpp> +#include <Swiften/Base/boost_bsignals.h> -#include "Swiften/Network/PlatformDomainNameResolver.h" -#include "Swiften/Network/Connector.h" -#include "Swiften/Base/Error.h" -#include "Swiften/Client/ClientSession.h" -#include "Swiften/Client/ClientError.h" -#include "Swiften/Elements/Presence.h" -#include "Swiften/Elements/Message.h" -#include "Swiften/JID/JID.h" -#include <string> -#include "Swiften/Client/StanzaChannel.h" -#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" -#include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h"  #include <Swiften/Entity/Entity.h> - -#include "Swiften/Client/ClientSessionStanzaChannel.h" +#include <Swiften/JID/JID.h> +#include <Swiften/Client/ClientError.h>  namespace Swift { +	class Connector; +	class Message; +	class Presence; +	class Error;  	class IQRouter;  	class TLSContextFactory;  	class ConnectionFactory; +	class Connection;  	class TimerFactory;  	class ClientSession; +	class StanzaChannel; +	class Stanza;  	class BasicSessionStream;  	class PlatformTLSFactories;  	class CertificateTrustChecker;  	class NetworkFactories; +	class ClientSessionStanzaChannel;  	/**   	 * The central class for communicating with an XMPP server. @@ -80,12 +77,12 @@ namespace Swift {  			/**  			 * Sends a message.  			 */ -			void sendMessage(Message::ref); +			void sendMessage(boost::shared_ptr<Message>);  			/**  			 * Sends a presence stanza.  			 */ -			void sendPresence(Presence::ref); +			void sendPresence(boost::shared_ptr<Presence>);  			/**  			 * Sends raw, unchecked data. @@ -103,9 +100,7 @@ namespace Swift {  			 * Checks whether the client is connected to the server,  			 * and stanzas can be sent.  			 */ -			bool isAvailable() const { -				return stanzaChannel_->isAvailable(); -			} +			bool isAvailable() const;  			/**  			 * Checks whether the client is active. @@ -118,14 +113,7 @@ namespace Swift {  			 * Returns the JID of the client.   			 * After the session was initialized, this returns the bound JID.  			 */ -			const JID& getJID() const { -				if (session_) { -					return session_->getLocalJID(); -				} -				else { -					return jid_; -				} -			} +			const JID& getJID() const;  			/**  			 * Checks whether stream management is enabled. @@ -135,13 +123,9 @@ namespace Swift {  			 *  			 * \see onStanzaAcked  			 */ -			bool getStreamManagementEnabled() const { -				return stanzaChannel_->getStreamManagementEnabled(); -			} +			bool getStreamManagementEnabled() const; -			StanzaChannel* getStanzaChannel() const { -				return stanzaChannel_; -			} +			StanzaChannel* getStanzaChannel() const;  			/**  			 * Sets the certificate trust checker. @@ -197,12 +181,12 @@ namespace Swift {  			/**  			 * Emitted when a message is received.  			 */ -			boost::signal<void (Message::ref)> onMessageReceived; +			boost::signal<void (boost::shared_ptr<Message>)> onMessageReceived;  			/**  			 * Emitted when a presence stanza is received.  			 */ -			boost::signal<void (Presence::ref) > onPresenceReceived; +			boost::signal<void (boost::shared_ptr<Presence>) > onPresenceReceived;  			/**  			 * Emitted when the server acknowledges receipt of a @@ -210,7 +194,7 @@ namespace Swift {  			 *  			 * \see getStreamManagementEnabled()  			 */ -			boost::signal<void (Stanza::ref)> onStanzaAcked; +			boost::signal<void (boost::shared_ptr<Stanza>)> onStanzaAcked;  		private:  			void handleConnectorFinished(boost::shared_ptr<Connection>); @@ -219,9 +203,9 @@ namespace Swift {  			void handleNeedCredentials();  			void handleDataRead(const std::string&);  			void handleDataWritten(const std::string&); -			void handlePresenceReceived(Presence::ref); -			void handleMessageReceived(Message::ref); -			void handleStanzaAcked(Stanza::ref); +			void handlePresenceReceived(boost::shared_ptr<Presence>); +			void handleMessageReceived(boost::shared_ptr<Message>); +			void handleStanzaAcked(boost::shared_ptr<Stanza>);  		private:  			JID jid_; @@ -231,7 +215,7 @@ namespace Swift {  			UseTLS useTLS;  			ClientSessionStanzaChannel* stanzaChannel_;  			IQRouter* iqRouter_; -			Connector::ref connector_; +			boost::shared_ptr<Connector> connector_;  			PlatformTLSFactories* tlsFactories;  			boost::shared_ptr<Connection> connection_;  			boost::shared_ptr<BasicSessionStream> sessionStream_; diff --git a/Swiften/Client/FileStorages.h b/Swiften/Client/FileStorages.h index 451105f..fc05c86 100644 --- a/Swiften/Client/FileStorages.h +++ b/Swiften/Client/FileStorages.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include "Swiften/Client/Storages.h" diff --git a/Swiften/Client/NickResolver.h b/Swiften/Client/NickResolver.h index 881362a..bf373fa 100644 --- a/Swiften/Client/NickResolver.h +++ b/Swiften/Client/NickResolver.h @@ -5,9 +5,9 @@   */  #include <map> -#include <boost/signals.hpp>  #include <boost/shared_ptr.hpp> +#include <Swiften/Base/boost_bsignals.h>  #include <string>  #include "Swiften/JID/JID.h"  #include "Swiften/Elements/VCard.h" diff --git a/Swiften/Component/ComponentSessionStanzaChannel.cpp b/Swiften/Component/ComponentSessionStanzaChannel.cpp index b9fecb2..b342714 100644 --- a/Swiften/Component/ComponentSessionStanzaChannel.cpp +++ b/Swiften/Component/ComponentSessionStanzaChannel.cpp @@ -7,6 +7,7 @@  #include "Swiften/Component/ComponentSessionStanzaChannel.h"  #include <boost/bind.hpp> +#include <iostream>  namespace Swift { diff --git a/Swiften/Component/ComponentXMLTracer.cpp b/Swiften/Component/ComponentXMLTracer.cpp new file mode 100644 index 0000000..b952c29 --- /dev/null +++ b/Swiften/Component/ComponentXMLTracer.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Component/ComponentXMLTracer.h> + +#include <iostream> +#include <boost/bind.hpp> + +namespace Swift { + +ComponentXMLTracer::ComponentXMLTracer(CoreComponent* client) { +	client->onDataRead.connect(boost::bind(&ComponentXMLTracer::printData, '<', _1)); +	client->onDataWritten.connect(boost::bind(&ComponentXMLTracer::printData, '>', _1)); +} + +void ComponentXMLTracer::printData(char direction, const std::string& data) { +	printLine(direction); +	std::cerr << data << std::endl; +} + +void ComponentXMLTracer::printLine(char c) { +	for (unsigned int i = 0; i < 80; ++i) { +		std::cerr << c; +	} +	std::cerr << std::endl; +} + +} diff --git a/Swiften/Component/ComponentXMLTracer.h b/Swiften/Component/ComponentXMLTracer.h index 70a617b..d7e2b46 100644 --- a/Swiften/Component/ComponentXMLTracer.h +++ b/Swiften/Component/ComponentXMLTracer.h @@ -6,29 +6,15 @@  #pragma once -#include <boost/bind.hpp> -  #include "Swiften/Component/Component.h"  namespace Swift {  	class ComponentXMLTracer {  		public: -			ComponentXMLTracer(Component* component) { -				component->onDataRead.connect(boost::bind(&ComponentXMLTracer::printData, '<', _1)); -				component->onDataWritten.connect(boost::bind(&ComponentXMLTracer::printData, '>', _1)); -			} +			ComponentXMLTracer(CoreComponent* component);  		private: -			static void printData(char direction, const std::string& data) { -				printLine(direction); -				std::cerr << data << std::endl; -			} - -			static void printLine(char c) { -				for (unsigned int i = 0; i < 80; ++i) { -					std::cerr << c; -				} -				std::cerr << std::endl; -			} +			static void printData(char direction, const std::string& data); +			static void printLine(char c);  	};  } diff --git a/Swiften/Component/CoreComponent.cpp b/Swiften/Component/CoreComponent.cpp index e79d735..f995ab0 100644 --- a/Swiften/Component/CoreComponent.cpp +++ b/Swiften/Component/CoreComponent.cpp @@ -7,6 +7,7 @@  #include "Swiften/Component/CoreComponent.h"  #include <boost/bind.hpp> +#include <iostream>  #include "Swiften/Component/ComponentSession.h"  #include "Swiften/Network/Connector.h" diff --git a/Swiften/Component/SConscript b/Swiften/Component/SConscript index 0a9f250..ef5700c 100644 --- a/Swiften/Component/SConscript +++ b/Swiften/Component/SConscript @@ -7,6 +7,7 @@ sources = [  		"ComponentSessionStanzaChannel.cpp",  		"CoreComponent.cpp",  		"Component.cpp", +		"ComponentXMLTracer.cpp",  	]  swiften_env.Append(SWIFTEN_OBJECTS = swiften_env.SwiftenObject(sources)) diff --git a/Swiften/Compress/ZLibCompressor.cpp b/Swiften/Compress/ZLibCompressor.cpp index 7e3116e..b740c68 100644 --- a/Swiften/Compress/ZLibCompressor.cpp +++ b/Swiften/Compress/ZLibCompressor.cpp @@ -6,6 +6,8 @@  #include "Swiften/Compress/ZLibCompressor.h" +#include <cassert> +  #pragma GCC diagnostic ignored "-Wold-style-cast"  namespace Swift { diff --git a/Swiften/Compress/ZLibCompressor.h b/Swiften/Compress/ZLibCompressor.h index 7fe5387..e0b4759 100644 --- a/Swiften/Compress/ZLibCompressor.h +++ b/Swiften/Compress/ZLibCompressor.h @@ -6,8 +6,6 @@  #pragma once -#include <cassert> -  #include "Swiften/Compress/ZLibCodecompressor.h"  #include "Swiften/Base/ByteArray.h" diff --git a/Swiften/Compress/ZLibDecompressor.cpp b/Swiften/Compress/ZLibDecompressor.cpp index af7349b..78e9846 100644 --- a/Swiften/Compress/ZLibDecompressor.cpp +++ b/Swiften/Compress/ZLibDecompressor.cpp @@ -6,6 +6,8 @@  #include "Swiften/Compress/ZLibDecompressor.h" +#include <cassert> +  #pragma GCC diagnostic ignored "-Wold-style-cast"  namespace Swift { diff --git a/Swiften/Compress/ZLibDecompressor.h b/Swiften/Compress/ZLibDecompressor.h index ec08a4f..917e1b7 100644 --- a/Swiften/Compress/ZLibDecompressor.h +++ b/Swiften/Compress/ZLibDecompressor.h @@ -6,8 +6,6 @@  #pragma once -#include <cassert> -  #include "Swiften/Compress/ZLibCodecompressor.h"  #include "Swiften/Base/ByteArray.h" diff --git a/Swiften/Config/swiften-config.cpp b/Swiften/Config/swiften-config.cpp index b3875cb..0c46cf0 100644 --- a/Swiften/Config/swiften-config.cpp +++ b/Swiften/Config/swiften-config.cpp @@ -11,6 +11,7 @@  #include <boost/program_options/variables_map.hpp>  #include <boost/program_options.hpp>  #include <boost/version.hpp> +#include <boost/filesystem.hpp>  #include <string>  #include <Swiften/Base/Platform.h> diff --git a/Swiften/Disco/CapsFileStorage.cpp b/Swiften/Disco/CapsFileStorage.cpp index 1e53854..17fe37b 100644 --- a/Swiften/Disco/CapsFileStorage.cpp +++ b/Swiften/Disco/CapsFileStorage.cpp @@ -8,6 +8,7 @@  #include <iostream>  #include <boost/filesystem/fstream.hpp> +#include <boost/filesystem.hpp>  #include "Swiften/Base/ByteArray.h"  #include "Swiften/Serializer/PayloadSerializers/DiscoInfoSerializer.h" diff --git a/Swiften/Disco/CapsFileStorage.h b/Swiften/Disco/CapsFileStorage.h index 5faf08b..b3757e0 100644 --- a/Swiften/Disco/CapsFileStorage.h +++ b/Swiften/Disco/CapsFileStorage.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include "Swiften/Disco/CapsStorage.h"  #include <string> diff --git a/Swiften/Disco/CapsManager.cpp b/Swiften/Disco/CapsManager.cpp index 63166e6..6eb7c17 100644 --- a/Swiften/Disco/CapsManager.cpp +++ b/Swiften/Disco/CapsManager.cpp @@ -7,6 +7,7 @@  #include "Swiften/Disco/CapsManager.h"  #include <boost/bind.hpp> +#include <iostream>  #include "Swiften/Client/StanzaChannel.h"  #include "Swiften/Disco/CapsStorage.h" diff --git a/Swiften/Disco/DummyEntityCapsProvider.cpp b/Swiften/Disco/DummyEntityCapsProvider.cpp new file mode 100644 index 0000000..a906652 --- /dev/null +++ b/Swiften/Disco/DummyEntityCapsProvider.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Disco/DummyEntityCapsProvider.h> + +#include <iostream> + +namespace Swift { + +DiscoInfo::ref DummyEntityCapsProvider::getCaps(const JID& jid) const { +	std::map<JID, DiscoInfo::ref>::const_iterator i = caps.find(jid); +	if (i != caps.end()) { +		return i->second; +	} +	return DiscoInfo::ref(); +} + +} diff --git a/Swiften/Disco/DummyEntityCapsProvider.h b/Swiften/Disco/DummyEntityCapsProvider.h index 68cef2f..1bd4bb9 100644 --- a/Swiften/Disco/DummyEntityCapsProvider.h +++ b/Swiften/Disco/DummyEntityCapsProvider.h @@ -7,7 +7,7 @@  #pragma once  #include <map> -#include <iostream> +  #include "Swiften/Disco/EntityCapsProvider.h"  namespace Swift { @@ -16,13 +16,7 @@ namespace Swift {  			DummyEntityCapsProvider() {  			} -			DiscoInfo::ref getCaps(const JID& jid) const { -				std::map<JID, DiscoInfo::ref>::const_iterator i = caps.find(jid); -				if (i != caps.end()) { -					return i->second; -				} -				return DiscoInfo::ref(); -			} +			DiscoInfo::ref getCaps(const JID& jid) const;  			std::map<JID, DiscoInfo::ref> caps;  	}; diff --git a/Swiften/Disco/SConscript b/Swiften/Disco/SConscript index 9982192..a4b47db 100644 --- a/Swiften/Disco/SConscript +++ b/Swiften/Disco/SConscript @@ -5,6 +5,7 @@ objects = swiften_env.SwiftenObject([  			"CapsManager.cpp",  			"EntityCapsManager.cpp",  			"EntityCapsProvider.cpp", +			"DummyEntityCapsProvider.cpp",  			"CapsStorage.cpp",  			"CapsFileStorage.cpp",  			"ClientDiscoManager.cpp", diff --git a/Swiften/Elements/Body.h b/Swiften/Elements/Body.h index 2887390..a2497f7 100644 --- a/Swiften/Elements/Body.h +++ b/Swiften/Elements/Body.h @@ -6,14 +6,13 @@  #pragma once -#include "Swiften/Elements/Payload.h"  #include <string> +#include <Swiften/Elements/Payload.h> +  namespace Swift {  	class Body : public Payload {  		public: -			typedef boost::shared_ptr<Body> ref; -  			Body(const std::string& text = "") : text_(text) {  			} diff --git a/Swiften/Elements/Bytestreams.h b/Swiften/Elements/Bytestreams.h index b493375..211396b 100644 --- a/Swiften/Elements/Bytestreams.h +++ b/Swiften/Elements/Bytestreams.h @@ -9,9 +9,9 @@  #include <vector>  #include <boost/optional.hpp>  #include <boost/shared_ptr.hpp> +#include <string>  #include "Swiften/JID/JID.h" -#include <string>  #include "Swiften/Elements/Payload.h"  namespace Swift { diff --git a/Swiften/Elements/CapsInfo.h b/Swiften/Elements/CapsInfo.h index ccad278..f1e2c37 100644 --- a/Swiften/Elements/CapsInfo.h +++ b/Swiften/Elements/CapsInfo.h @@ -7,8 +7,8 @@  #pragma once  #include <boost/shared_ptr.hpp> -  #include <string> +  #include "Swiften/Elements/Payload.h"  namespace Swift { diff --git a/Swiften/Elements/ChatState.h b/Swiften/Elements/ChatState.h index 2896877..ddeed79 100644 --- a/Swiften/Elements/ChatState.h +++ b/Swiften/Elements/ChatState.h @@ -7,6 +7,7 @@  #pragma once  #include <string> +  #include "Swiften/Elements/Payload.h"  namespace Swift { diff --git a/Swiften/Elements/Command.h b/Swiften/Elements/Command.h index f4059a8..4a9c2a3 100644 --- a/Swiften/Elements/Command.h +++ b/Swiften/Elements/Command.h @@ -7,8 +7,8 @@  #pragma once  #include <boost/shared_ptr.hpp> -  #include <string> +  #include "Swiften/Elements/Payload.h"  #include "Swiften/Elements/Form.h" diff --git a/Swiften/Elements/ComponentHandshake.h b/Swiften/Elements/ComponentHandshake.h index 6047eab..3fe0457 100644 --- a/Swiften/Elements/ComponentHandshake.h +++ b/Swiften/Elements/ComponentHandshake.h @@ -7,9 +7,9 @@  #pragma once  #include <boost/shared_ptr.hpp> +#include <string>  #include "Swiften/Elements/Element.h" -#include <string>  namespace Swift {  	class ComponentHandshake : public Element { diff --git a/Swiften/Elements/Delay.h b/Swiften/Elements/Delay.h index 3213037..85d167b 100644 --- a/Swiften/Elements/Delay.h +++ b/Swiften/Elements/Delay.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/date_time/posix_time/posix_time.hpp> +#include <boost/date_time/posix_time/posix_time_types.hpp>  #include <boost/optional.hpp>  #include "Swiften/Elements/Payload.h" diff --git a/Swiften/Elements/DiscoInfo.cpp b/Swiften/Elements/DiscoInfo.cpp index f0e728e..158ea66 100644 --- a/Swiften/Elements/DiscoInfo.cpp +++ b/Swiften/Elements/DiscoInfo.cpp @@ -6,6 +6,8 @@  #include "Swiften/Elements/DiscoInfo.h" +#include <algorithm> +  namespace Swift {  const std::string DiscoInfo::ChatStatesFeature = std::string("http://jabber.org/protocol/chatstates"); @@ -33,4 +35,8 @@ bool DiscoInfo::Identity::operator<(const Identity& other) const {  	}  } +bool DiscoInfo::hasFeature(const std::string& feature) const { +	return std::find(features_.begin(), features_.end(), feature) != features_.end(); +} +  } diff --git a/Swiften/Elements/DiscoInfo.h b/Swiften/Elements/DiscoInfo.h index d5bf64a..6144b16 100644 --- a/Swiften/Elements/DiscoInfo.h +++ b/Swiften/Elements/DiscoInfo.h @@ -7,11 +7,9 @@  #pragma once  #include <vector> -#include <algorithm> - -#include "Swiften/Elements/Payload.h"  #include <string> +#include "Swiften/Elements/Payload.h"  #include "Swiften/Elements/Form.h"  namespace Swift { @@ -82,9 +80,7 @@ namespace Swift {  				features_.push_back(feature);  			} -			bool hasFeature(const std::string& feature) const { -				return std::find(features_.begin(), features_.end(), feature) != features_.end(); -			} +			bool hasFeature(const std::string& feature) const;  			void addExtension(Form::ref form) {  				extensions_.push_back(form); diff --git a/Swiften/Elements/DiscoItems.h b/Swiften/Elements/DiscoItems.h index cc5a583..1b7063b 100644 --- a/Swiften/Elements/DiscoItems.h +++ b/Swiften/Elements/DiscoItems.h @@ -7,10 +7,9 @@  #pragma once  #include <vector> -#include <algorithm> +#include <string>  #include "Swiften/Elements/Payload.h" -#include <string>  #include "Swiften/JID/JID.h"  namespace Swift { diff --git a/Swiften/Elements/Element.h b/Swiften/Elements/Element.h index aded528..1e6a9d0 100644 --- a/Swiften/Elements/Element.h +++ b/Swiften/Elements/Element.h @@ -4,8 +4,7 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_ELEMENT_H -#define SWIFTEN_ELEMENT_H +#pragma once  namespace Swift {  	class Element { @@ -13,5 +12,3 @@ namespace Swift {  			virtual ~Element();  	};  } - -#endif diff --git a/Swiften/Elements/ErrorPayload.h b/Swiften/Elements/ErrorPayload.h index 12ad574..cece81f 100644 --- a/Swiften/Elements/ErrorPayload.h +++ b/Swiften/Elements/ErrorPayload.h @@ -7,9 +7,9 @@  #pragma once  #include <boost/shared_ptr.hpp> +#include <string>  #include "Swiften/Elements/Payload.h" -#include <string>  namespace Swift {  	class ErrorPayload : public Payload { diff --git a/Swiften/Elements/Form.h b/Swiften/Elements/Form.h index 1c50f0c..4e6e9f1 100644 --- a/Swiften/Elements/Form.h +++ b/Swiften/Elements/Form.h @@ -7,11 +7,10 @@  #pragma once  #include <vector> +#include <string>  #include "Swiften/Elements/Payload.h"  #include "Swiften/Elements/FormField.h" -#include <string> -  #include "Swiften/JID/JID.h"  namespace Swift { diff --git a/Swiften/Elements/FormField.h b/Swiften/Elements/FormField.h index f455303..35e05ac 100644 --- a/Swiften/Elements/FormField.h +++ b/Swiften/Elements/FormField.h @@ -11,8 +11,8 @@  #include <vector>  #include <boost/shared_ptr.hpp> -  #include <string> +  #include "Swiften/JID/JID.h"  namespace Swift { diff --git a/Swiften/Elements/IBB.h b/Swiften/Elements/IBB.h index 55f2c4f..faee71d 100644 --- a/Swiften/Elements/IBB.h +++ b/Swiften/Elements/IBB.h @@ -7,8 +7,8 @@  #pragma once  #include <boost/shared_ptr.hpp> -  #include <string> +  #include "Swiften/Base/ByteArray.h"  #include "Swiften/Elements/Payload.h" diff --git a/Swiften/Elements/InBandRegistrationPayload.h b/Swiften/Elements/InBandRegistrationPayload.h index e4e1e6f..6e0f741 100644 --- a/Swiften/Elements/InBandRegistrationPayload.h +++ b/Swiften/Elements/InBandRegistrationPayload.h @@ -8,10 +8,10 @@  #include <boost/shared_ptr.hpp>  #include <boost/optional.hpp> +#include <string>  #include "Swiften/Elements/Payload.h"  #include "Swiften/Elements/Form.h" -#include <string>  namespace Swift {  	class InBandRegistrationPayload : public Payload { diff --git a/Swiften/Elements/JingleContent.h b/Swiften/Elements/JingleContent.h index 4ae908b..97b071f 100644 --- a/Swiften/Elements/JingleContent.h +++ b/Swiften/Elements/JingleContent.h @@ -8,13 +8,12 @@  #include <vector>  #include <boost/optional.hpp> -  #include <string> +  #include <Swiften/JID/JID.h>  #include <Swiften/Elements/Payload.h>  #include <Swiften/Elements/JingleDescription.h>  #include <Swiften/Elements/JingleTransport.h> -#include <Swiften/Base/foreach.h>  namespace Swift {  	class JingleContent : public Payload { @@ -49,18 +48,18 @@ namespace Swift {  				descriptions.push_back(description);  			} -			const std::vector<JingleTransport::ref>& getTransports() const { +			const std::vector<boost::shared_ptr<JingleTransportPayload> >& getTransports() const {  				return transports;  			} -			void addTransport(JingleTransport::ref transport) { +			void addTransport(boost::shared_ptr<JingleTransportPayload>  transport) {  				transports.push_back(transport);  			}  			template<typename T>  			boost::shared_ptr<T> getDescription() const { -				foreach (JingleDescription::ref i, descriptions) { -					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(i)); +				for (size_t i = 0; i < descriptions.size(); ++i) { +					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(descriptions[i]));  					if (result) {  						return result;  					} @@ -70,8 +69,8 @@ namespace Swift {  			template<typename T>  			boost::shared_ptr<T> getTransport() const { -				foreach (JingleTransport::ref i, transports) { -					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(i)); +				for (size_t i = 0; i < transports.size(); ++i) { +					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(transports[i]));  					if (result) {  						return result;  					} @@ -84,6 +83,10 @@ namespace Swift {  			std::string name;  			//Senders senders;  			std::vector<JingleDescription::ref> descriptions; +<<<<<<< HEAD:Swiften/Elements/JingleContent.h  			std::vector<JingleTransport::ref> transports; +======= +			std::vector<boost::shared_ptr<JingleTransportPayload> > transports; +>>>>>>> 7c05f3f... Cleaned up headers.:Swiften/Elements/JingleContentPayload.h  	};  } diff --git a/Swiften/Elements/JingleTransport.h b/Swiften/Elements/JingleTransport.h index ecd2a34..7a9ea29 100644 --- a/Swiften/Elements/JingleTransport.h +++ b/Swiften/Elements/JingleTransport.h @@ -6,9 +6,13 @@  #pragma once +#include <boost/shared_ptr.hpp> +  #include <Swiften/Elements/Payload.h>  namespace Swift { -	class JingleTransport : public Payload { +	class JingleTransportPayload : public Payload { +		public: +			typedef boost::shared_ptr<JingleTransportPayload> ref;  	};  } diff --git a/Swiften/Elements/MUCPayload.h b/Swiften/Elements/MUCPayload.h index c372360..eb3baeb 100644 --- a/Swiften/Elements/MUCPayload.h +++ b/Swiften/Elements/MUCPayload.h @@ -7,7 +7,7 @@  #pragma once  #include <boost/optional.hpp> -#include <boost/date_time/posix_time/posix_time.hpp> +#include <boost/date_time/posix_time/posix_time_types.hpp>  #include "Swiften/JID/JID.h"  #include <string> diff --git a/Swiften/Elements/Payload.h b/Swiften/Elements/Payload.h index c87b899..8b6d44a 100644 --- a/Swiften/Elements/Payload.h +++ b/Swiften/Elements/Payload.h @@ -6,13 +6,9 @@  #pragma once -#include <boost/shared_ptr.hpp> -  namespace Swift {  	class Payload {  		public: -			typedef boost::shared_ptr<Payload> ref; -  			virtual ~Payload();  	};  } diff --git a/Swiften/Elements/Presence.cpp b/Swiften/Elements/Presence.cpp new file mode 100644 index 0000000..6cde567 --- /dev/null +++ b/Swiften/Elements/Presence.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Elements/Presence.h> + +#include <Swiften/Elements/Priority.h> +#include <Swiften/Elements/Status.h> + +namespace Swift { + +Presence::Presence() : type_(Available) /*, showType_(Online)*/ { +} + +Presence::Presence(const std::string& status) : type_(Available) { +	setStatus(status); +} + +Presence::~Presence() { +} + +int Presence::getPriority() const { +	boost::shared_ptr<Priority> priority(getPayload<Priority>()); +	return (priority ? priority->getPriority() : 0); +} + +void Presence::setPriority(int priority) { +	updatePayload(boost::shared_ptr<Priority>(new Priority(priority))); +} + +std::string Presence::getStatus() const {  +	boost::shared_ptr<Status> status(getPayload<Status>()); +	if (status) { +		return status->getText(); +	} +	return ""; +} + +void Presence::setStatus(const std::string& status) {  +	updatePayload(boost::shared_ptr<Status>(new Status(status))); +} + + +} diff --git a/Swiften/Elements/Presence.h b/Swiften/Elements/Presence.h index 7f957ba..5ae482b 100644 --- a/Swiften/Elements/Presence.h +++ b/Swiften/Elements/Presence.h @@ -6,11 +6,8 @@  #pragma once - -#include "Swiften/Elements/Stanza.h" -#include "Swiften/Elements/Status.h" -#include "Swiften/Elements/StatusShow.h" -#include "Swiften/Elements/Priority.h" +#include <Swiften/Elements/Stanza.h> +#include <Swiften/Elements/StatusShow.h>  namespace Swift {  	class Presence : public Stanza { @@ -19,10 +16,9 @@ namespace Swift {  			enum Type { Available, Error, Probe, Subscribe, Subscribed, Unavailable, Unsubscribe, Unsubscribed }; -			Presence() : type_(Available) /*, showType_(Online)*/ {} -			Presence(const std::string& status) : type_(Available) { -				setStatus(status); -			} +			Presence(); +			Presence(const std::string& status); +			virtual ~Presence();  			static ref create() {  				return ref(new Presence()); @@ -51,26 +47,11 @@ namespace Swift {  				updatePayload(boost::shared_ptr<StatusShow>(new StatusShow(show)));  			} -			std::string getStatus() const {  -				boost::shared_ptr<Status> status(getPayload<Status>()); -				if (status) { -					return status->getText(); -				} -				return ""; -			} +			std::string getStatus() const; +			void setStatus(const std::string& status); -			void setStatus(const std::string& status) {  -				updatePayload(boost::shared_ptr<Status>(new Status(status))); -			} - -			int getPriority() const { -				boost::shared_ptr<Priority> priority(getPayload<Priority>()); -				return (priority ? priority->getPriority() : 0); -			} - -			void setPriority(int priority) { -				updatePayload(boost::shared_ptr<Priority>(new Priority(priority))); -			} +			int getPriority() const; +			void setPriority(int priority);  			boost::shared_ptr<Presence> clone() const {  				return boost::shared_ptr<Presence>(new Presence(*this)); diff --git a/Swiften/Elements/Priority.h b/Swiften/Elements/Priority.h index 12181d4..2c0cb9b 100644 --- a/Swiften/Elements/Priority.h +++ b/Swiften/Elements/Priority.h @@ -6,13 +6,11 @@  #pragma once -#include "Swiften/Elements/Payload.h" +#include <Swiften/Elements/Payload.h>  namespace Swift {  	class Priority : public Payload {  		public: -			typedef boost::shared_ptr<Priority> ref; -  			Priority(int priority = 0) : priority_(priority) {  			} diff --git a/Swiften/Elements/SecurityLabelsCatalog.h b/Swiften/Elements/SecurityLabelsCatalog.h index 10ef459..cd84b0b 100644 --- a/Swiften/Elements/SecurityLabelsCatalog.h +++ b/Swiften/Elements/SecurityLabelsCatalog.h @@ -4,13 +4,13 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_SecurityLabelsCatalog_H -#define SWIFTEN_SecurityLabelsCatalog_H +#pragma once  #include <vector> +#include <string> +#include <boost/shared_ptr.hpp>  #include "Swiften/JID/JID.h" -#include <string>  #include "Swiften/Elements/Payload.h"  #include "Swiften/Elements/SecurityLabel.h" @@ -85,5 +85,3 @@ namespace Swift {  			std::vector<Item> items_;  	};  } - -#endif diff --git a/Swiften/Elements/SoftwareVersion.h b/Swiften/Elements/SoftwareVersion.h index 5863b38..887c6e9 100644 --- a/Swiften/Elements/SoftwareVersion.h +++ b/Swiften/Elements/SoftwareVersion.h @@ -6,8 +6,10 @@  #pragma once -#include "Swiften/Elements/Payload.h"  #include <string> +#include <boost/shared_ptr.hpp> + +#include "Swiften/Elements/Payload.h"  namespace Swift {  	class SoftwareVersion : public Payload { diff --git a/Swiften/Elements/Stanza.cpp b/Swiften/Elements/Stanza.cpp index d15d778..607dfd1 100644 --- a/Swiften/Elements/Stanza.cpp +++ b/Swiften/Elements/Stanza.cpp @@ -9,8 +9,13 @@  #include <typeinfo> +#include <Swiften/Base/foreach.h> +  namespace Swift { +Stanza::Stanza() { +} +	  Stanza::~Stanza() {  	payloads_.clear();  } diff --git a/Swiften/Elements/Stanza.h b/Swiften/Elements/Stanza.h index 9b934e4..9e082cc 100644 --- a/Swiften/Elements/Stanza.h +++ b/Swiften/Elements/Stanza.h @@ -7,27 +7,28 @@  #pragma once  #include <vector> +#include <string>  #include <boost/shared_ptr.hpp> -#include <boost/optional.hpp> -#include <boost/date_time/posix_time/posix_time.hpp> +#include <boost/optional/optional_fwd.hpp> +#include <boost/date_time/posix_time/ptime.hpp> -#include "Swiften/Elements/Element.h" -#include "Swiften/Elements/Payload.h" -#include <string> -#include "Swiften/Base/foreach.h" -#include "Swiften/JID/JID.h" +#include <Swiften/Elements/Element.h> +#include <Swiften/JID/JID.h>  namespace Swift { +	class Payload; +  	class Stanza : public Element {  		public:  			typedef boost::shared_ptr<Stanza> ref; +			Stanza();  			virtual ~Stanza();  			template<typename T>   			boost::shared_ptr<T> getPayload() const { -				foreach (const boost::shared_ptr<Payload>& i, payloads_) { -					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(i)); +				for (size_t i = 0; i < payloads_.size(); ++i) { +					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(payloads_[i]));  					if (result) {  						return result;  					} @@ -38,8 +39,8 @@ namespace Swift {  			template<typename T>   			std::vector< boost::shared_ptr<T> > getPayloads() const {  				std::vector< boost::shared_ptr<T> > results; -				foreach (const boost::shared_ptr<Payload>& i, payloads_) { -					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(i)); +				for (size_t i = 0; i < payloads_.size(); ++i) { +					boost::shared_ptr<T> result(boost::dynamic_pointer_cast<T>(payloads_[i]));  					if (result) {  						results.push_back(result);  					} @@ -78,8 +79,6 @@ namespace Swift {  			std::string id_;  			JID from_;  			JID to_; - -			typedef std::vector< boost::shared_ptr<Payload> > Payloads; -			Payloads payloads_; +			std::vector< boost::shared_ptr<Payload> > payloads_;  	};  } diff --git a/Swiften/Elements/Status.h b/Swiften/Elements/Status.h index 3ef6401..bb9b6e9 100644 --- a/Swiften/Elements/Status.h +++ b/Swiften/Elements/Status.h @@ -4,8 +4,7 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_Status_H -#define SWIFTEN_Status_H +#pragma once  #include "Swiften/Elements/Payload.h"  #include <string> @@ -28,5 +27,3 @@ namespace Swift {  			std::string text_;  	};  } - -#endif diff --git a/Swiften/Elements/StatusShow.h b/Swiften/Elements/StatusShow.h index a158239..6ea8385 100644 --- a/Swiften/Elements/StatusShow.h +++ b/Swiften/Elements/StatusShow.h @@ -4,11 +4,9 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_StatusShow_H -#define SWIFTEN_StatusShow_H +#pragma once -#include "Swiften/Elements/Payload.h" -#include <string> +#include <Swiften/Elements/Payload.h>  namespace Swift {  	class StatusShow : public Payload { @@ -32,19 +30,16 @@ namespace Swift {  			 */  			static int typeToAvailabilityOrdering(Type type) {  				switch (type) { -				case Online: return 4; -				case FFC: return 5; -				case Away: return 2; -				case XA: return 1; -				case DND: return 3; -				case None: return 0; +					case Online: return 4; +					case FFC: return 5; +					case Away: return 2; +					case XA: return 1; +					case DND: return 3; +					case None: return 0;  				} -				return -1;  			}  		private:  			Type type_;  	};  } - -#endif diff --git a/Swiften/Elements/StreamFeatures.cpp b/Swiften/Elements/StreamFeatures.cpp new file mode 100644 index 0000000..c6f6c04 --- /dev/null +++ b/Swiften/Elements/StreamFeatures.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Elements/StreamFeatures.h> + +#include <algorithm> + +namespace Swift { + +bool StreamFeatures::hasCompressionMethod(const std::string& mechanism) const { +	return std::find(compressionMethods_.begin(), compressionMethods_.end(), mechanism) != compressionMethods_.end(); +} + +bool StreamFeatures::hasAuthenticationMechanism(const std::string& mechanism) const { +	return std::find(authenticationMechanisms_.begin(), authenticationMechanisms_.end(), mechanism) != authenticationMechanisms_.end(); +} + +} diff --git a/Swiften/Elements/StreamFeatures.h b/Swiften/Elements/StreamFeatures.h index fbc0bb8..4bb21f0 100644 --- a/Swiften/Elements/StreamFeatures.h +++ b/Swiften/Elements/StreamFeatures.h @@ -7,9 +7,9 @@  #pragma once  #include <vector> -#include <algorithm> -  #include <string> +#include <boost/shared_ptr.hpp> +  #include "Swiften/Elements/Element.h"  namespace Swift { @@ -51,9 +51,7 @@ namespace Swift {  				compressionMethods_.push_back(mechanism);  			} -			bool hasCompressionMethod(const std::string& mechanism) const { -				return std::find(compressionMethods_.begin(), compressionMethods_.end(), mechanism) != compressionMethods_.end(); -			} +			bool hasCompressionMethod(const std::string& mechanism) const;  			const std::vector<std::string>& getAuthenticationMechanisms() const {  				return authenticationMechanisms_; @@ -63,9 +61,7 @@ namespace Swift {  				authenticationMechanisms_.push_back(mechanism);  			} -			bool hasAuthenticationMechanism(const std::string& mechanism) const { -				return std::find(authenticationMechanisms_.begin(), authenticationMechanisms_.end(), mechanism) != authenticationMechanisms_.end(); -			} +			bool hasAuthenticationMechanism(const std::string& mechanism) const;  			bool hasAuthenticationMechanisms() const {  				return !authenticationMechanisms_.empty(); diff --git a/Swiften/Elements/UnitTest/StanzaTest.cpp b/Swiften/Elements/UnitTest/StanzaTest.cpp index 4020f8b..4669f16 100644 --- a/Swiften/Elements/UnitTest/StanzaTest.cpp +++ b/Swiften/Elements/UnitTest/StanzaTest.cpp @@ -7,6 +7,7 @@  #include <cppunit/extensions/HelperMacros.h>  #include <cppunit/extensions/TestFactoryRegistry.h>  #include <boost/shared_ptr.hpp> +#include <boost/date_time/posix_time/posix_time.hpp>  #include "Swiften/Elements/Stanza.h"  #include "Swiften/Elements/Payload.h" diff --git a/Swiften/Entity/Entity.cpp b/Swiften/Entity/Entity.cpp index da2ecaf..dea47b0 100644 --- a/Swiften/Entity/Entity.cpp +++ b/Swiften/Entity/Entity.cpp @@ -6,26 +6,45 @@  #include "Swiften/Entity/Entity.h" +#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" +#include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" + +  namespace Swift { +Entity::Entity() { +	payloadParserFactories = new FullPayloadParserFactoryCollection(); +	payloadSerializers = new FullPayloadSerializerCollection(); +} +  Entity::~Entity() { +	delete payloadSerializers; +	delete payloadParserFactories;  }  void Entity::addPayloadParserFactory(PayloadParserFactory* payloadParserFactory) { -	payloadParserFactories.addFactory(payloadParserFactory); +	payloadParserFactories->addFactory(payloadParserFactory);  }  void Entity::removePayloadParserFactory(PayloadParserFactory* payloadParserFactory) { -	payloadParserFactories.removeFactory(payloadParserFactory); +	payloadParserFactories->removeFactory(payloadParserFactory);  }  void Entity::addPayloadSerializer(PayloadSerializer* payloadSerializer) { -	payloadSerializers.addSerializer(payloadSerializer); +	payloadSerializers->addSerializer(payloadSerializer);  }  void Entity::removePayloadSerializer(PayloadSerializer* payloadSerializer) { -	payloadSerializers.removeSerializer(payloadSerializer); +	payloadSerializers->removeSerializer(payloadSerializer); +} + +PayloadParserFactoryCollection* Entity::getPayloadParserFactories() { +	return payloadParserFactories; +} + +PayloadSerializerCollection* Entity::getPayloadSerializers() { +	return payloadSerializers;  }  } diff --git a/Swiften/Entity/Entity.h b/Swiften/Entity/Entity.h index 20d02ba..65480d0 100644 --- a/Swiften/Entity/Entity.h +++ b/Swiften/Entity/Entity.h @@ -6,21 +6,20 @@  #pragma once -#include <Swiften/Base/boost_bsignals.h> -#include <boost/shared_ptr.hpp> - -#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" -#include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" -  namespace Swift {  	class PayloadParserFactory;  	class PayloadSerializer; +	class FullPayloadParserFactoryCollection; +	class FullPayloadSerializerCollection; +	class PayloadParserFactoryCollection; +	class PayloadSerializerCollection;  	/**   	 * The base class for XMPP entities (Clients, Components).  	 */  	class Entity  {  		public:  +			Entity();  			virtual ~Entity();  			void addPayloadParserFactory(PayloadParserFactory* payloadParserFactory); @@ -30,16 +29,11 @@ namespace Swift {  			void removePayloadSerializer(PayloadSerializer* payloadSerializer);  		protected: -			PayloadParserFactoryCollection* getPayloadParserFactories() { -				return &payloadParserFactories; -			} - -			PayloadSerializerCollection* getPayloadSerializers() { -				return &payloadSerializers; -			} +			PayloadParserFactoryCollection* getPayloadParserFactories(); +			PayloadSerializerCollection* getPayloadSerializers();  		private: -			FullPayloadParserFactoryCollection payloadParserFactories; -			FullPayloadSerializerCollection payloadSerializers; +			FullPayloadParserFactoryCollection* payloadParserFactories; +			FullPayloadSerializerCollection* payloadSerializers;  	};  } diff --git a/Swiften/EventLoop/DummyEventLoop.cpp b/Swiften/EventLoop/DummyEventLoop.cpp new file mode 100644 index 0000000..3741eec --- /dev/null +++ b/Swiften/EventLoop/DummyEventLoop.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/EventLoop/DummyEventLoop.h> + +#include <iostream> + +namespace Swift { + +DummyEventLoop::DummyEventLoop() { +} + +DummyEventLoop::~DummyEventLoop() { +	if (!events_.empty()) { +		std::cerr << "DummyEventLoop: Unhandled events at destruction time" << std::endl; +	} +	events_.clear(); +} + + +} diff --git a/Swiften/EventLoop/DummyEventLoop.h b/Swiften/EventLoop/DummyEventLoop.h index b7ef516..68f9b85 100644 --- a/Swiften/EventLoop/DummyEventLoop.h +++ b/Swiften/EventLoop/DummyEventLoop.h @@ -7,24 +7,14 @@  #pragma once  #include <deque> -#include <iostream> -#include <boost/function.hpp>  #include "Swiften/EventLoop/EventLoop.h" -#include "Swiften/Base/foreach.h"  namespace Swift {  	class DummyEventLoop : public EventLoop {  		public: -			DummyEventLoop() { -			} - -			~DummyEventLoop() { -				if (!events_.empty()) { -					std::cerr << "DummyEventLoop: Unhandled events at destruction time" << std::endl; -				} -				events_.clear(); -			} +			DummyEventLoop(); +			~DummyEventLoop();  			void processEvents() {  				while (!events_.empty()) { diff --git a/Swiften/EventLoop/SConscript b/Swiften/EventLoop/SConscript index 21ae8b9..e448f43 100644 --- a/Swiften/EventLoop/SConscript +++ b/Swiften/EventLoop/SConscript @@ -5,6 +5,7 @@ sources = [  		"EventOwner.cpp",  		"Event.cpp",  		"SimpleEventLoop.cpp", +		"DummyEventLoop.cpp",  	]  objects = swiften_env.SwiftenObject(sources) diff --git a/Swiften/Examples/BenchTool/BenchTool.cpp b/Swiften/Examples/BenchTool/BenchTool.cpp index 9e54ed9..1fb6601 100644 --- a/Swiften/Examples/BenchTool/BenchTool.cpp +++ b/Swiften/Examples/BenchTool/BenchTool.cpp @@ -6,6 +6,7 @@  #include <boost/bind.hpp>  #include <boost/thread.hpp> +#include <iostream>  #include "Swiften/Client/Client.h"  #include "Swiften/Network/TimerFactory.h" diff --git a/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp b/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp index fda203a..3b66d96 100644 --- a/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp +++ b/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp @@ -6,6 +6,7 @@  #include <boost/bind.hpp>  #include <boost/thread.hpp> +#include <iostream>  #include "Swiften/Client/Client.h"  #include "Swiften/Network/Timer.h" diff --git a/Swiften/Examples/SendFile/ReceiveFile.cpp b/Swiften/Examples/SendFile/ReceiveFile.cpp index b46d790..effa1b7 100644 --- a/Swiften/Examples/SendFile/ReceiveFile.cpp +++ b/Swiften/Examples/SendFile/ReceiveFile.cpp @@ -7,7 +7,10 @@  #include <boost/bind.hpp>  #include <boost/filesystem.hpp>  #include <boost/smart_ptr/make_shared.hpp> +#include <iostream> +#include <Swiften/Elements/Presence.h> +#include <Swiften/Base/foreach.h>  #include <Swiften/Client/Client.h>  #include <Swiften/Network/BoostNetworkFactories.h>  #include <Swiften/EventLoop/SimpleEventLoop.h> diff --git a/Swiften/Examples/SendFile/SendFile.cpp b/Swiften/Examples/SendFile/SendFile.cpp index 5ec00a9..565c51f 100644 --- a/Swiften/Examples/SendFile/SendFile.cpp +++ b/Swiften/Examples/SendFile/SendFile.cpp @@ -6,8 +6,10 @@  #include <boost/bind.hpp>  #include <boost/filesystem.hpp> +#include <iostream>  #include "Swiften/Client/Client.h" +#include <Swiften/Elements/Presence.h>  #include "Swiften/Network/BoostTimer.h"  #include "Swiften/Network/TimerFactory.h"  #include "Swiften/Network/BoostNetworkFactories.h" diff --git a/Swiften/Examples/SendMessage/SendMessage.cpp b/Swiften/Examples/SendMessage/SendMessage.cpp index d7f7333..ad75318 100644 --- a/Swiften/Examples/SendMessage/SendMessage.cpp +++ b/Swiften/Examples/SendMessage/SendMessage.cpp @@ -6,8 +6,10 @@  #include <boost/bind.hpp>  #include <boost/thread.hpp> +#include <iostream>  #include "Swiften/Client/Client.h" +#include "Swiften/Elements/Message.h"  #include "Swiften/Network/BoostNetworkFactories.h"  #include "Swiften/Network/TimerFactory.h"  #include "Swiften/EventLoop/EventLoop.h" diff --git a/Swiften/FileTransfer/FileReadBytestream.h b/Swiften/FileTransfer/FileReadBytestream.h index 055e194..4027c43 100644 --- a/Swiften/FileTransfer/FileReadBytestream.h +++ b/Swiften/FileTransfer/FileReadBytestream.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include <boost/filesystem/fstream.hpp>  #include "Swiften/FileTransfer/ReadBytestream.h" diff --git a/Swiften/FileTransfer/FileWriteBytestream.h b/Swiften/FileTransfer/FileWriteBytestream.h index c6f7b39..16f4b1f 100644 --- a/Swiften/FileTransfer/FileWriteBytestream.h +++ b/Swiften/FileTransfer/FileWriteBytestream.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include <boost/filesystem/fstream.hpp>  #include "Swiften/FileTransfer/WriteBytestream.h" diff --git a/Swiften/FileTransfer/IBBReceiveSession.cpp b/Swiften/FileTransfer/IBBReceiveSession.cpp index 5c90757..f980c47 100644 --- a/Swiften/FileTransfer/IBBReceiveSession.cpp +++ b/Swiften/FileTransfer/IBBReceiveSession.cpp @@ -7,6 +7,7 @@  #include "Swiften/FileTransfer/IBBReceiveSession.h"  #include <boost/bind.hpp> +#include <iostream>  #include "Swiften/Queries/IQRouter.h"  #include "Swiften/FileTransfer/IBBRequest.h" diff --git a/Swiften/FileTransfer/IBBSendSession.cpp b/Swiften/FileTransfer/IBBSendSession.cpp index 0fb47d3..52949c4 100644 --- a/Swiften/FileTransfer/IBBSendSession.cpp +++ b/Swiften/FileTransfer/IBBSendSession.cpp @@ -44,7 +44,7 @@ void IBBSendSession::handleIBBResponse(IBB::ref, ErrorPayload::ref error) {  				request->onResponse.connect(boost::bind(&IBBSendSession::handleIBBResponse, this, _1, _2));  				request->send();  			} -			catch (const BytestreamException& e) { +			catch (const BytestreamException&) {  				finish(FileTransferError(FileTransferError::ReadError));  			}  		} diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerSession.cpp b/Swiften/FileTransfer/SOCKS5BytestreamServerSession.cpp index 9951f7a..268ba4c 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamServerSession.cpp +++ b/Swiften/FileTransfer/SOCKS5BytestreamServerSession.cpp @@ -7,6 +7,7 @@  #include "Swiften/FileTransfer/SOCKS5BytestreamServerSession.h"  #include <boost/bind.hpp> +#include <iostream>  #include "Swiften/Base/ByteArray.h"  #include "Swiften/FileTransfer/SOCKS5BytestreamRegistry.h" @@ -98,7 +99,7 @@ void SOCKS5BytestreamServerSession::sendData() {  		try {  			connection->write(bytestream->read(chunkSize));  		} -		catch (const BytestreamException& e) { +		catch (const BytestreamException&) {  			finish(true);  		}  	} diff --git a/Swiften/JID/JID.h b/Swiften/JID/JID.h index 63e063d..9f447db 100644 --- a/Swiften/JID/JID.h +++ b/Swiften/JID/JID.h @@ -7,7 +7,7 @@  #pragma once  #include <string> -#include <ostream> +#include <iosfwd>  namespace Swift {  	class JID { diff --git a/Swiften/Jingle/JingleSession.h b/Swiften/Jingle/JingleSession.h index c00492d..b57701b 100644 --- a/Swiften/Jingle/JingleSession.h +++ b/Swiften/Jingle/JingleSession.h @@ -12,7 +12,6 @@  #include <string>  #include <Swiften/Elements/JinglePayload.h>  #include <Swiften/Elements/JingleContent.h> -#include <Swiften/Base/foreach.h>  namespace Swift {  	class JingleSession { @@ -29,9 +28,9 @@ namespace Swift {  			template<typename T>  			JingleContent::ref getContentWithDescription() const { -				foreach (JingleContent::ref content, contents) { -					if (content->getDescription<T>()) { -						return content; +				for (size_t i = 0; i < contents.size(); ++i) { +					if (contents[i]->getDescription<T>()) { +						return contents[i];  					}  				}  				return JingleContent::ref(); diff --git a/Swiften/Jingle/JingleSessionManager.cpp b/Swiften/Jingle/JingleSessionManager.cpp index e60449b..af512e8 100644 --- a/Swiften/Jingle/JingleSessionManager.cpp +++ b/Swiften/Jingle/JingleSessionManager.cpp @@ -7,6 +7,7 @@  #include <Swiften/Jingle/JingleSessionManager.h>  #include <Swiften/Jingle/JingleResponder.h>  #include <Swiften/Jingle/IncomingJingleSessionHandler.h> +#include <Swiften/Base/foreach.h>  namespace Swift { diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.cpp b/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.cpp new file mode 100644 index 0000000..e31bf87 --- /dev/null +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h> + +#include <boost/bind.hpp> +#include <iostream> + +#include <Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.h> + +namespace Swift { + +void AvahiBrowseQuery::startBrowsing() { +	std::cout << "Start browsing" << std::endl; +	assert(!browser); +	avahi_threaded_poll_lock(querier->getThreadedPoll()); +	browser = avahi_service_browser_new(querier->getClient(), AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_presence._tcp", NULL, static_cast<AvahiLookupFlags>(0), &handleServiceDiscoveredStatic, this); +	if (!browser) { +		std::cout << "Error" << std::endl; +		eventLoop->postEvent(boost::bind(boost::ref(onError)), shared_from_this()); +	} +	avahi_threaded_poll_unlock(querier->getThreadedPoll()); +} + +void AvahiBrowseQuery::stopBrowsing() { +	std::cout << "Stop browsing" << std::endl; +	avahi_threaded_poll_lock(querier->getThreadedPoll()); +	avahi_service_browser_free(browser); +	browser = NULL; +	avahi_threaded_poll_unlock(querier->getThreadedPoll()); +} + +void AvahiBrowseQuery::handleServiceDiscovered(AvahiServiceBrowser *, AvahiIfIndex interfaceIndex, AvahiProtocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags) { +	switch (event) { +		case AVAHI_BROWSER_FAILURE:	 +			std::cout << "Service browse error" << std::endl; +			eventLoop->postEvent(boost::bind(boost::ref(onError)), shared_from_this()); +			break; +		case AVAHI_BROWSER_NEW: { +			DNSSDServiceID service(name, domain, type, interfaceIndex); +			std::cout << "Service discovered " << name << " " << domain << " " << type << " " << interfaceIndex << std::endl; +			eventLoop->postEvent(boost::bind(boost::ref(onServiceAdded), service), shared_from_this()); +			break; +		} +		case AVAHI_BROWSER_REMOVE: { +			std::cout << "Service went away " << name << " " << domain << " " << type << " " << interfaceIndex << std::endl; +			DNSSDServiceID service(name, domain, type, interfaceIndex); +			eventLoop->postEvent(boost::bind(boost::ref(onServiceRemoved), service), shared_from_this()); +			break; +		} +		case AVAHI_BROWSER_ALL_FOR_NOW: +		case AVAHI_BROWSER_CACHE_EXHAUSTED: +			break; +	} +} + +} diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h b/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h index 163a5f6..7641712 100644 --- a/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/bind.hpp> +#include <avahi-client/lookup.h>  #include "Swiften/LinkLocal/DNSSD/Avahi/AvahiQuery.h"  #include "Swiften/LinkLocal/DNSSD/DNSSDBrowseQuery.h" @@ -20,54 +20,15 @@ namespace Swift {  			AvahiBrowseQuery(boost::shared_ptr<AvahiQuerier> q, EventLoop* eventLoop) : AvahiQuery(q, eventLoop), browser(NULL) {  			} -			void startBrowsing() { -				std::cout << "Start browsing" << std::endl; -				assert(!browser); -				avahi_threaded_poll_lock(querier->getThreadedPoll()); -				browser = avahi_service_browser_new(querier->getClient(), AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_presence._tcp", NULL, static_cast<AvahiLookupFlags>(0), &handleServiceDiscoveredStatic, this); -				if (!browser) { -					std::cout << "Error" << std::endl; -					eventLoop->postEvent(boost::bind(boost::ref(onError)), shared_from_this()); -				} -				avahi_threaded_poll_unlock(querier->getThreadedPoll()); -			} - -			void stopBrowsing() { -				std::cout << "Stop browsing" << std::endl; -				avahi_threaded_poll_lock(querier->getThreadedPoll()); -				avahi_service_browser_free(browser); -				browser = NULL; -				avahi_threaded_poll_unlock(querier->getThreadedPoll()); -			} +			void startBrowsing(); +			void stopBrowsing();  		private:  			static void handleServiceDiscoveredStatic(AvahiServiceBrowser *b, AvahiIfIndex interfaceIndex, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags flags, void* context) {  				static_cast<AvahiBrowseQuery*>(context)->handleServiceDiscovered(b, interfaceIndex, protocol, event, name, type, domain, flags);  			} -			void handleServiceDiscovered(AvahiServiceBrowser *, AvahiIfIndex interfaceIndex, AvahiProtocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags) { -				switch (event) { -					case AVAHI_BROWSER_FAILURE:	 -						std::cout << "Service browse error" << std::endl; -						eventLoop->postEvent(boost::bind(boost::ref(onError)), shared_from_this()); -						break; -					case AVAHI_BROWSER_NEW: { -						DNSSDServiceID service(name, domain, type, interfaceIndex); -						std::cout << "Service discovered " << name << " " << domain << " " << type << " " << interfaceIndex << std::endl; -						eventLoop->postEvent(boost::bind(boost::ref(onServiceAdded), service), shared_from_this()); -						break; -					} -					case AVAHI_BROWSER_REMOVE: { -						std::cout << "Service went away " << name << " " << domain << " " << type << " " << interfaceIndex << std::endl; -						DNSSDServiceID service(name, domain, type, interfaceIndex); -						eventLoop->postEvent(boost::bind(boost::ref(onServiceRemoved), service), shared_from_this()); -						break; -					} -					case AVAHI_BROWSER_ALL_FOR_NOW: -					case AVAHI_BROWSER_CACHE_EXHAUSTED: -						break; -				} -			} +			void handleServiceDiscovered(AvahiServiceBrowser *, AvahiIfIndex interfaceIndex, AvahiProtocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags);  		private:  			AvahiServiceBrowser* browser; diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.cpp b/Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.cpp new file mode 100644 index 0000000..7975e7b --- /dev/null +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.h> + +#include <iostream> +#include <boost/bind.hpp> + +#include <Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.h> + +namespace Swift { + +void AvahiRegisterQuery::registerService() { +	std::cout << "Registering service " << name << ":" << port << std::endl; +	avahi_threaded_poll_lock(querier->getThreadedPoll()); +	if (!group) { +		std::cout << "Creating entry group" << std::endl; +		group = avahi_entry_group_new(querier->getClient(), handleEntryGroupChange, this); +		if (!group) { +			std::cout << "Error ceating entry group" << std::endl; +			eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>()), shared_from_this()); +		} +	} + +	doRegisterService(); +	avahi_threaded_poll_unlock(querier->getThreadedPoll()); +} + +void AvahiRegisterQuery::unregisterService() { +	if (group) { +		avahi_entry_group_free(group); +		group = NULL; +	} +} + +void AvahiRegisterQuery::updateServiceInfo(const ByteArray& txtRecord) { +	this->txtRecord = txtRecord; +	avahi_threaded_poll_lock(querier->getThreadedPoll()); +	assert(group); +	avahi_entry_group_reset(group); +	doRegisterService(); +	avahi_threaded_poll_unlock(querier->getThreadedPoll()); +} + +void AvahiRegisterQuery::doRegisterService() { +	AvahiStringList* txtList; +	avahi_string_list_parse(txtRecord.getData(), txtRecord.getSize(), &txtList); + +	int result = avahi_entry_group_add_service_strlst(group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, static_cast<AvahiPublishFlags>(0), name.c_str(), "_presence._tcp", NULL, NULL, port, txtList); +	if (result < 0) { +		std::cout << "Error registering service: " << avahi_strerror(result) << std::endl; +		eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>()), shared_from_this()); +	} +	result = avahi_entry_group_commit(group); +	if (result < 0) { +		std::cout << "Error registering service: " << avahi_strerror(result) << std::endl; +	} +} + +void AvahiRegisterQuery::handleEntryGroupChange(AvahiEntryGroup* g, AvahiEntryGroupState state) { +	std::cout << "ENtry group callback: " << state << std::endl; +	switch (state) { +		case AVAHI_ENTRY_GROUP_ESTABLISHED : +			// Domain is a hack! +			eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>(DNSSDServiceID(name, "local", "_presence._tcp", 0))), shared_from_this()); +			std::cout << "Entry group established" << std::endl; +			break; +	case AVAHI_ENTRY_GROUP_COLLISION : { +			std::cout << "Entry group collision" << std::endl; +			/*char *n; +			n = avahi_alternative_service_name(name); +			avahi_free(name); +			name = n;*/ +			break; +	} + +	case AVAHI_ENTRY_GROUP_FAILURE : +			std::cout << "Entry group failure " << avahi_strerror(avahi_client_errno(avahi_entry_group_get_client(g))) << std::endl; +			break; + +	case AVAHI_ENTRY_GROUP_UNCOMMITED: +	case AVAHI_ENTRY_GROUP_REGISTERING: +			; + +	/* +	DNSServiceErrorType result = DNSServiceRegister( +			&sdRef, 0, 0, name.c_str(), "_presence._tcp", NULL, NULL, port,  +			txtRecord.getSize(), txtRecord.getData(),  +			&AvahiRegisterQuery::handleServiceRegisteredStatic, this); +	if (result != kDNSServiceErr_NoError) { +		sdRef = NULL; +	}*/ +	//eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>()), shared_from_this()); +	} +} + + +} diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.h b/Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.h index 07966af..3303f1b 100644 --- a/Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.h +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.h @@ -21,94 +21,18 @@ namespace Swift {  			AvahiRegisterQuery(const std::string& name, int port, const ByteArray& txtRecord, boost::shared_ptr<AvahiQuerier> querier, EventLoop* eventLoop) : AvahiQuery(querier, eventLoop), name(name), port(port), txtRecord(txtRecord), group(0) {  			} -			void registerService() { -				std::cout << "Registering service " << name << ":" << port << std::endl; -				avahi_threaded_poll_lock(querier->getThreadedPoll()); -				if (!group) { -					std::cout << "Creating entry group" << std::endl; -					group = avahi_entry_group_new(querier->getClient(), handleEntryGroupChange, this); -					if (!group) { -						std::cout << "Error ceating entry group" << std::endl; -						eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>()), shared_from_this()); -					} -				} - -				doRegisterService(); -				avahi_threaded_poll_unlock(querier->getThreadedPoll()); -			} - -			void unregisterService() { -				if (group) { -					avahi_entry_group_free(group); -					group = NULL; -				} -			} - -			void updateServiceInfo(const ByteArray& txtRecord) { -				this->txtRecord = txtRecord; -				avahi_threaded_poll_lock(querier->getThreadedPoll()); -				assert(group); -				avahi_entry_group_reset(group); -				doRegisterService(); -				avahi_threaded_poll_unlock(querier->getThreadedPoll()); -			} +			void registerService(); +			void unregisterService(); +			void updateServiceInfo(const ByteArray& txtRecord);  		private: -			void doRegisterService() { -				AvahiStringList* txtList; -				avahi_string_list_parse(txtRecord.getData(), txtRecord.getSize(), &txtList); - -				int result = avahi_entry_group_add_service_strlst(group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, static_cast<AvahiPublishFlags>(0), name.c_str(), "_presence._tcp", NULL, NULL, port, txtList); -				if (result < 0) { -					std::cout << "Error registering service: " << avahi_strerror(result) << std::endl; -					eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>()), shared_from_this()); -				} -				result = avahi_entry_group_commit(group); -				if (result < 0) { -					std::cout << "Error registering service: " << avahi_strerror(result) << std::endl; -				} -			} +			void doRegisterService();  			static void handleEntryGroupChange(AvahiEntryGroup *g, AvahiEntryGroupState state, void *userdata) {  				static_cast<AvahiRegisterQuery*>(userdata)->handleEntryGroupChange(g, state);  			} -			void handleEntryGroupChange(AvahiEntryGroup* g, AvahiEntryGroupState state) { -				std::cout << "ENtry group callback: " << state << std::endl; -				switch (state) { -					case AVAHI_ENTRY_GROUP_ESTABLISHED : -						// Domain is a hack! -						eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>(DNSSDServiceID(name, "local", "_presence._tcp", 0))), shared_from_this()); -						std::cout << "Entry group established" << std::endl; -						break; -				case AVAHI_ENTRY_GROUP_COLLISION : { -						std::cout << "Entry group collision" << std::endl; -						/*char *n; -						n = avahi_alternative_service_name(name); -						avahi_free(name); -						name = n;*/ -						break; -				} - -				case AVAHI_ENTRY_GROUP_FAILURE : -						std::cout << "Entry group failure " << avahi_strerror(avahi_client_errno(avahi_entry_group_get_client(g))) << std::endl; -						break; - -				case AVAHI_ENTRY_GROUP_UNCOMMITED: -				case AVAHI_ENTRY_GROUP_REGISTERING: -						; - -				/* -				DNSServiceErrorType result = DNSServiceRegister( -						&sdRef, 0, 0, name.c_str(), "_presence._tcp", NULL, NULL, port,  -						txtRecord.getSize(), txtRecord.getData(),  -						&AvahiRegisterQuery::handleServiceRegisteredStatic, this); -				if (result != kDNSServiceErr_NoError) { -					sdRef = NULL; -				}*/ -				//eventLoop->postEvent(boost::bind(boost::ref(onRegisterFinished), boost::optional<DNSSDServiceID>()), shared_from_this()); -			} -		} +			void handleEntryGroupChange(AvahiEntryGroup* g, AvahiEntryGroupState state);  /*  			static void handleServiceRegisteredStatic(DNSServiceRef, DNSServiceFlags, DNSServiceErrorType errorCode, const char *name, const char *regtype, const char *domain, void *context) { diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.cpp b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.cpp new file mode 100644 index 0000000..d9a1c5c --- /dev/null +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.h> + +#include <iostream> +#include <boost/bind.hpp> + +namespace Swift { + +AvahiResolveHostnameQuery::AvahiResolveHostnameQuery(const std::string& hostname, int, boost::shared_ptr<AvahiQuerier> querier, EventLoop* eventLoop) : AvahiQuery(querier, eventLoop), hostname(hostname) { +	std::cout << "Resolving hostname " << hostname << std::endl; +} + +void AvahiResolveHostnameQuery::run() { +		eventLoop->postEvent(boost::bind(boost::ref(onHostnameResolved), boost::optional<HostAddress>(HostAddress(hostname))), shared_from_this()); +} + +} diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.h b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.h index 00712f1..acc1897 100644 --- a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.h +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.h @@ -19,13 +19,9 @@ namespace Swift {  	class AvahiResolveHostnameQuery : public DNSSDResolveHostnameQuery, public AvahiQuery {  		public:  -			AvahiResolveHostnameQuery(const std::string& hostname, int, boost::shared_ptr<AvahiQuerier> querier, EventLoop* eventLoop) : AvahiQuery(querier, eventLoop), hostname(hostname) { -				std::cout << "Resolving hostname " << hostname << std::endl; -			} +			AvahiResolveHostnameQuery(const std::string& hostname, int, boost::shared_ptr<AvahiQuerier> querier, EventLoop* eventLoop); -			void run() { -					eventLoop->postEvent(boost::bind(boost::ref(onHostnameResolved), boost::optional<HostAddress>(HostAddress(hostname))), shared_from_this()); -			} +			void run();  			void finish() {  			} diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.cpp b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.cpp new file mode 100644 index 0000000..24fe067 --- /dev/null +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h> + +#include <boost/bind.hpp> +#include <iostream> + +#include <Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.h> + +namespace Swift { + +void AvahiResolveServiceQuery::start() { +	std::cout << "Start resolving " << service.getName() << " " << service.getType() << " " << service.getDomain() << std::endl; +	avahi_threaded_poll_lock(querier->getThreadedPoll()); +	assert(!resolver); +	resolver = avahi_service_resolver_new(querier->getClient(), service.getNetworkInterfaceID(), AVAHI_PROTO_UNSPEC, service.getName().c_str(), service.getType().c_str(), service.getDomain().c_str(), AVAHI_PROTO_UNSPEC, static_cast<AvahiLookupFlags>(0), handleServiceResolvedStatic, this); +	if (!resolver) { +		std::cout << "Error starting resolver" << std::endl; +		eventLoop->postEvent(boost::bind(boost::ref(onServiceResolved), boost::optional<Result>()), shared_from_this()); +	} +	avahi_threaded_poll_unlock(querier->getThreadedPoll()); +} + +void AvahiResolveServiceQuery::stop() { +	std::cout << "Stop resolving" << std::endl; +	avahi_threaded_poll_lock(querier->getThreadedPoll()); +	avahi_service_resolver_free(resolver); +	resolver = NULL; +	avahi_threaded_poll_unlock(querier->getThreadedPoll()); +} + +void AvahiResolveServiceQuery::handleServiceResolved(AvahiServiceResolver* resolver, AvahiIfIndex, AvahiProtocol, AvahiResolverEvent event, const char *name, const char * type, const char* domain, const char * /*host_name*/, const AvahiAddress *address, uint16_t port, AvahiStringList *txt, AvahiLookupResultFlags) { +	std::cout << "Resolve finished" << std::endl; +	switch(event) { +		case AVAHI_RESOLVER_FAILURE: +			std::cout << "Resolve error " << avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(resolver))) << std::endl; +			eventLoop->postEvent(boost::bind(boost::ref(onServiceResolved), boost::optional<Result>()), shared_from_this()); +			break; +		case AVAHI_RESOLVER_FOUND: { +			std::cout << "Success" << std::endl; +			char a[AVAHI_ADDRESS_STR_MAX]; +			avahi_address_snprint(a, sizeof(a), address); + +			ByteArray txtRecord; +			txtRecord.resize(1024); +			avahi_string_list_serialize(txt, txtRecord.getData(), txtRecord.getSize()); + +			// FIXME: Probably not accurate +			std::string fullname = std::string(name) + "." + std::string(type) + "." + std::string(domain) + "."; +			std::cout << "Result: " << fullname << "->" << std::string(a) << ":" << port << std::endl; +			eventLoop->postEvent( +					boost::bind( +						boost::ref(onServiceResolved),  +						Result(fullname, std::string(a), port, txtRecord)), +					shared_from_this()); +			break; +		} +	} +} + +} diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h index e9c4db1..be48409 100644 --- a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h +++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h @@ -6,6 +6,8 @@  #pragma once +#include <avahi-client/lookup.h> +  #include "Swiften/LinkLocal/DNSSD/Avahi/AvahiQuery.h"  #include "Swiften/LinkLocal/DNSSD/DNSSDResolveServiceQuery.h"  #include "Swiften/LinkLocal/LinkLocalServiceInfo.h" @@ -20,59 +22,15 @@ namespace Swift {  			AvahiResolveServiceQuery(const DNSSDServiceID& service, boost::shared_ptr<AvahiQuerier> querier, EventLoop* eventLoop) : AvahiQuery(querier, eventLoop), service(service), resolver(NULL) {  			} -			void start() { -				std::cout << "Start resolving " << service.getName() << " " << service.getType() << " " << service.getDomain() << std::endl; -				avahi_threaded_poll_lock(querier->getThreadedPoll()); -				assert(!resolver); -				resolver = avahi_service_resolver_new(querier->getClient(), service.getNetworkInterfaceID(), AVAHI_PROTO_UNSPEC, service.getName().c_str(), service.getType().c_str(), service.getDomain().c_str(), AVAHI_PROTO_UNSPEC, static_cast<AvahiLookupFlags>(0), handleServiceResolvedStatic, this); -				if (!resolver) { -					std::cout << "Error starting resolver" << std::endl; -					eventLoop->postEvent(boost::bind(boost::ref(onServiceResolved), boost::optional<Result>()), shared_from_this()); -				} -				avahi_threaded_poll_unlock(querier->getThreadedPoll()); -			} - -			void stop() { -				std::cout << "Stop resolving" << std::endl; -				avahi_threaded_poll_lock(querier->getThreadedPoll()); -				avahi_service_resolver_free(resolver); -				resolver = NULL; -				avahi_threaded_poll_unlock(querier->getThreadedPoll()); -			} +			void start(); +			void stop();  		private:  			static void handleServiceResolvedStatic(AvahiServiceResolver* resolver, AvahiIfIndex interfaceIndex, AvahiProtocol protocol, AvahiResolverEvent event, const char *name, const char *type, const char *domain, const char *host_name, const AvahiAddress *address, uint16_t port, AvahiStringList *txt, AvahiLookupResultFlags flags, void* context) {  				static_cast<AvahiResolveServiceQuery*>(context)->handleServiceResolved(resolver, interfaceIndex, protocol, event, name, type, domain, host_name, address, port, txt, flags);  			} -			void handleServiceResolved(AvahiServiceResolver* resolver, AvahiIfIndex, AvahiProtocol, AvahiResolverEvent event, const char *name, const char * type, const char* domain, const char * /*host_name*/, const AvahiAddress *address, uint16_t port, AvahiStringList *txt, AvahiLookupResultFlags) { -				std::cout << "Resolve finished" << std::endl; -				switch(event) { -					case AVAHI_RESOLVER_FAILURE: -						std::cout << "Resolve error " << avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(resolver))) << std::endl; -						eventLoop->postEvent(boost::bind(boost::ref(onServiceResolved), boost::optional<Result>()), shared_from_this()); -						break; -					case AVAHI_RESOLVER_FOUND: { -						std::cout << "Success" << std::endl; -						char a[AVAHI_ADDRESS_STR_MAX]; -						avahi_address_snprint(a, sizeof(a), address); - -						ByteArray txtRecord; -						txtRecord.resize(1024); -						avahi_string_list_serialize(txt, txtRecord.getData(), txtRecord.getSize()); - -						// FIXME: Probably not accurate -						std::string fullname = std::string(name) + "." + std::string(type) + "." + std::string(domain) + "."; -						std::cout << "Result: " << fullname << "->" << std::string(a) << ":" << port << std::endl; -						eventLoop->postEvent( -								boost::bind( -									boost::ref(onServiceResolved),  -									Result(fullname, std::string(a), port, txtRecord)), -								shared_from_this()); -						break; -					} -				} -			} +			void handleServiceResolved(AvahiServiceResolver* resolver, AvahiIfIndex, AvahiProtocol, AvahiResolverEvent event, const char *name, const char * type, const char* domain, const char * /*host_name*/, const AvahiAddress *address, uint16_t port, AvahiStringList *txt, AvahiLookupResultFlags);  		private:  			DNSSDServiceID service; diff --git a/Swiften/LinkLocal/DNSSD/Bonjour/BonjourQuerier.h b/Swiften/LinkLocal/DNSSD/Bonjour/BonjourQuerier.h index edd3056..c342247 100644 --- a/Swiften/LinkLocal/DNSSD/Bonjour/BonjourQuerier.h +++ b/Swiften/LinkLocal/DNSSD/Bonjour/BonjourQuerier.h @@ -9,7 +9,7 @@  #include <boost/shared_ptr.hpp>  #include <boost/enable_shared_from_this.hpp>  #include <list> -#include <boost/thread.hpp> +#include <boost/thread/thread.hpp>  #include <boost/thread/mutex.hpp>  #include "Swiften/LinkLocal/DNSSD/DNSSDQuerier.h" diff --git a/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.cpp b/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.cpp index d7d0228..b13b0c4 100644 --- a/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.cpp +++ b/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.cpp @@ -7,7 +7,9 @@  #include "Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h"  #include <boost/bind.hpp> +#include <iostream> +#include <Swiften/Base/foreach.h>  #include "Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDBrowseQuery.h"  #include "Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDRegisterQuery.h"  #include "Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDResolveServiceQuery.h" diff --git a/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h b/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h index b2871c9..9aef6a5 100644 --- a/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h +++ b/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h @@ -11,7 +11,6 @@  #include <list>  #include <set> -#include "Swiften/Base/foreach.h"  #include <string>  #include "Swiften/EventLoop/EventOwner.h"  #include "Swiften/LinkLocal/DNSSD/DNSSDQuerier.h" @@ -63,8 +62,8 @@ namespace Swift {  			template<typename T>  			std::vector< boost::shared_ptr<T> > getAllQueriesEverRun() const {  				std::vector< boost::shared_ptr<T> > result; -				foreach(const boost::shared_ptr<FakeDNSSDQuery>& query, allQueriesEverRun) { -					if (boost::shared_ptr<T> resultQuery = boost::dynamic_pointer_cast<T>(query)) { +				for (QueryList::const_iterator i = allQueriesEverRun.begin(); i != allQueriesEverRun.end(); ++i) { +					if (boost::shared_ptr<T> resultQuery = boost::dynamic_pointer_cast<T>(*i)) {  						result.push_back(resultQuery);  					}  				} @@ -75,8 +74,8 @@ namespace Swift {  			template<typename T>  			std::vector< boost::shared_ptr<T> > getQueries() const {  				std::vector< boost::shared_ptr<T> > result; -				foreach(const boost::shared_ptr<FakeDNSSDQuery>& query, runningQueries) { -					if (boost::shared_ptr<T> resultQuery = boost::dynamic_pointer_cast<T>(query)) { +				for (QueryList::const_iterator i = runningQueries.begin(); i != runningQueries.end(); ++i) { +					if (boost::shared_ptr<T> resultQuery = boost::dynamic_pointer_cast<T>(*i)) {  						result.push_back(resultQuery);  					}  				} @@ -86,8 +85,9 @@ namespace Swift {  		private:  			std::string domain;  			EventLoop* eventLoop; -			std::list< boost::shared_ptr<FakeDNSSDQuery> > runningQueries; -			std::list< boost::shared_ptr<FakeDNSSDQuery> > allQueriesEverRun; +			typedef std::list< boost::shared_ptr<FakeDNSSDQuery> > QueryList; +			QueryList runningQueries; +			QueryList allQueriesEverRun;  			std::set<DNSSDServiceID> services;  			typedef std::map<DNSSDServiceID,DNSSDResolveServiceQuery::Result> ServiceInfoMap;  			ServiceInfoMap serviceInfo; diff --git a/Swiften/LinkLocal/OutgoingLinkLocalSession.cpp b/Swiften/LinkLocal/OutgoingLinkLocalSession.cpp index 65542d2..d13032d 100644 --- a/Swiften/LinkLocal/OutgoingLinkLocalSession.cpp +++ b/Swiften/LinkLocal/OutgoingLinkLocalSession.cpp @@ -8,6 +8,7 @@  #include <boost/bind.hpp> +#include <Swiften/Base/foreach.h>  #include "Swiften/StreamStack/XMPPLayer.h"  #include "Swiften/Elements/ProtocolHeader.h"  #include "Swiften/Elements/StreamFeatures.h" diff --git a/Swiften/LinkLocal/SConscript b/Swiften/LinkLocal/SConscript index 6edf993..29ea692 100644 --- a/Swiften/LinkLocal/SConscript +++ b/Swiften/LinkLocal/SConscript @@ -31,7 +31,11 @@ elif myenv.get("HAVE_AVAHI", 0) :  	myenv.Append(CPPDEFINES = ["HAVE_AVAHI"])  	sources += [  			"DNSSD/Avahi/AvahiQuerier.cpp", -			"DNSSD/Avahi/AvahiQuery.cpp" +			"DNSSD/Avahi/AvahiQuery.cpp", +			"DNSSD/Avahi/AvahiResolveHostnameQuery.cpp", +			"DNSSD/Avahi/AvahiResolveServiceQuery.cpp", +			"DNSSD/Avahi/AvahiRegisterQuery.cpp", +			"DNSSD/Avahi/AvahiBrowseQuery.cpp",  		]  objects = myenv.SwiftenObject(sources) diff --git a/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp b/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp index 98deed1..a2e8280 100644 --- a/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp +++ b/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp @@ -7,6 +7,8 @@  #include <cppunit/extensions/HelperMacros.h>  #include <cppunit/extensions/TestFactoryRegistry.h> +#include <boost/bind.hpp> +  #include "Swiften/LinkLocal/LinkLocalConnector.h"  #include "Swiften/LinkLocal/LinkLocalService.h"  #include "Swiften/LinkLocal/DNSSD/DNSSDServiceID.h" diff --git a/Swiften/MUC/MUC.cpp b/Swiften/MUC/MUC.cpp index 68a5a86..553e49d 100644 --- a/Swiften/MUC/MUC.cpp +++ b/Swiften/MUC/MUC.cpp @@ -10,6 +10,7 @@  #include <boost/shared_ptr.hpp>  #include <boost/smart_ptr/make_shared.hpp> +#include <Swiften/Base/foreach.h>  #include "Swiften/Presence/DirectedPresenceSender.h"  #include "Swiften/Client/StanzaChannel.h"  #include "Swiften/Queries/IQRouter.h" diff --git a/Swiften/MUC/MUCBookmarkManager.cpp b/Swiften/MUC/MUCBookmarkManager.cpp index d0855cd..65e15e3 100644 --- a/Swiften/MUC/MUCBookmarkManager.cpp +++ b/Swiften/MUC/MUCBookmarkManager.cpp @@ -9,6 +9,7 @@  #include <boost/bind.hpp>  #include <iostream> +#include <Swiften/Base/foreach.h>  #include "Swiften/Queries/IQRouter.h"  #include "Swiften/Queries/Requests/GetPrivateStorageRequest.h"  #include "Swiften/Queries/Requests/SetPrivateStorageRequest.h" diff --git a/Swiften/Network/BoostConnection.cpp b/Swiften/Network/BoostConnection.cpp index f7ff8c4..c0faad9 100644 --- a/Swiften/Network/BoostConnection.cpp +++ b/Swiften/Network/BoostConnection.cpp @@ -9,6 +9,8 @@  #include <iostream>  #include <boost/bind.hpp>  #include <boost/thread.hpp> +#include <boost/asio/placeholders.hpp> +#include <boost/asio/write.hpp>  #include <Swiften/Base/Log.h>  #include "Swiften/EventLoop/EventLoop.h" diff --git a/Swiften/Network/BoostConnection.h b/Swiften/Network/BoostConnection.h index 506eedf..16e587d 100644 --- a/Swiften/Network/BoostConnection.h +++ b/Swiften/Network/BoostConnection.h @@ -6,7 +6,8 @@  #pragma once -#include <boost/asio.hpp> +#include <boost/asio/io_service.hpp> +#include <boost/asio/ip/tcp.hpp>  #include <boost/enable_shared_from_this.hpp>  #include <boost/thread/mutex.hpp> diff --git a/Swiften/Network/BoostConnectionFactory.h b/Swiften/Network/BoostConnectionFactory.h index ea9d656..bf1bc6c 100644 --- a/Swiften/Network/BoostConnectionFactory.h +++ b/Swiften/Network/BoostConnectionFactory.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/asio.hpp> +#include <boost/asio/io_service.hpp>  #include "Swiften/Network/ConnectionFactory.h"  #include "Swiften/Network/BoostConnection.h" diff --git a/Swiften/Network/BoostConnectionServer.cpp b/Swiften/Network/BoostConnectionServer.cpp index 4c6403c..e5fb8c0 100644 --- a/Swiften/Network/BoostConnectionServer.cpp +++ b/Swiften/Network/BoostConnectionServer.cpp @@ -8,6 +8,7 @@  #include <boost/bind.hpp>  #include <boost/system/system_error.hpp> +#include <boost/asio/placeholders.hpp>  #include "Swiften/EventLoop/EventLoop.h" diff --git a/Swiften/Network/BoostConnectionServer.h b/Swiften/Network/BoostConnectionServer.h index a45e598..3424720 100644 --- a/Swiften/Network/BoostConnectionServer.h +++ b/Swiften/Network/BoostConnectionServer.h @@ -7,8 +7,9 @@  #pragma once  #include <boost/shared_ptr.hpp> +#include <boost/asio/io_service.hpp> +#include <boost/asio/ip/tcp.hpp>  #include <boost/enable_shared_from_this.hpp> -#include <boost/asio.hpp>  #include "Swiften/Base/boost_bsignals.h"  #include "Swiften/Network/BoostConnection.h" diff --git a/Swiften/Network/BoostIOServiceThread.h b/Swiften/Network/BoostIOServiceThread.h index 1f72049..ea04b02 100644 --- a/Swiften/Network/BoostIOServiceThread.h +++ b/Swiften/Network/BoostIOServiceThread.h @@ -6,8 +6,8 @@  #pragma once -#include <boost/asio.hpp> -#include <boost/thread.hpp> +#include <boost/asio/io_service.hpp> +#include <boost/thread/thread.hpp>  #include <boost/shared_ptr.hpp>  namespace Swift { diff --git a/Swiften/Network/BoostTimer.cpp b/Swiften/Network/BoostTimer.cpp index 12d06c1..27e4b34 100644 --- a/Swiften/Network/BoostTimer.cpp +++ b/Swiften/Network/BoostTimer.cpp @@ -8,6 +8,7 @@  #include <boost/date_time/posix_time/posix_time.hpp>  #include <boost/asio.hpp> +#include <boost/bind.hpp>  #include "Swiften/EventLoop/EventLoop.h" diff --git a/Swiften/Network/BoostTimer.h b/Swiften/Network/BoostTimer.h index 1139dcf..614698d 100644 --- a/Swiften/Network/BoostTimer.h +++ b/Swiften/Network/BoostTimer.h @@ -6,8 +6,8 @@  #pragma once -#include <boost/asio.hpp> -#include <boost/thread.hpp> +#include <boost/asio/io_service.hpp> +#include <boost/asio/deadline_timer.hpp>  #include <boost/enable_shared_from_this.hpp>  #include "Swiften/EventLoop/EventOwner.h" diff --git a/Swiften/Network/BoostTimerFactory.h b/Swiften/Network/BoostTimerFactory.h index c0e9ef7..789ba24 100644 --- a/Swiften/Network/BoostTimerFactory.h +++ b/Swiften/Network/BoostTimerFactory.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/asio.hpp> +#include <boost/asio/io_service.hpp>  #include "Swiften/Network/TimerFactory.h"  #include "Swiften/Network/BoostTimer.h" diff --git a/Swiften/Network/CAresDomainNameResolver.h b/Swiften/Network/CAresDomainNameResolver.h index a630b61..f0973b9 100644 --- a/Swiften/Network/CAresDomainNameResolver.h +++ b/Swiften/Network/CAresDomainNameResolver.h @@ -7,7 +7,7 @@  #pragma once  #include <ares.h> -#include <boost/thread.hpp> +#include <boost/thread/thread.hpp>  #include <boost/thread/mutex.hpp>  #include <list> diff --git a/Swiften/Network/Connection.h b/Swiften/Network/Connection.h index 529dd82..fdbbef6 100644 --- a/Swiften/Network/Connection.h +++ b/Swiften/Network/Connection.h @@ -7,13 +7,13 @@  #pragma once  #include <boost/shared_ptr.hpp> +#include <Swiften/Base/boost_bsignals.h> -#include "Swiften/Base/boost_bsignals.h" -#include "Swiften/Base/ByteArray.h" -#include <string> -#include "Swiften/Network/HostAddressPort.h" +#include <Swiften/Base/ByteArray.h>  namespace Swift { +	class HostAddressPort; +  	class Connection {  		public:  			typedef boost::shared_ptr<Connection> ref; diff --git a/Swiften/Network/DummyConnection.cpp b/Swiften/Network/DummyConnection.cpp new file mode 100644 index 0000000..ffc6dc2 --- /dev/null +++ b/Swiften/Network/DummyConnection.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Network/DummyConnection.h> + +#include <boost/bind.hpp> +#include <cassert> + +namespace Swift { + +DummyConnection::DummyConnection(EventLoop* eventLoop) : eventLoop(eventLoop) { +} + +void DummyConnection::receive(const ByteArray& data) { +	eventLoop->postEvent(boost::bind(boost::ref(onDataRead), ByteArray(data)), shared_from_this()); +} + +void DummyConnection::listen() { +	assert(false); +} + +void DummyConnection::connect(const HostAddressPort&) { +	assert(false); +} + + +} diff --git a/Swiften/Network/DummyConnection.h b/Swiften/Network/DummyConnection.h index 6b426b1..e8cc48b 100644 --- a/Swiften/Network/DummyConnection.h +++ b/Swiften/Network/DummyConnection.h @@ -6,26 +6,20 @@  #pragma once -#include <cassert> -#include <boost/bind.hpp>  #include <boost/enable_shared_from_this.hpp>  #include "Swiften/Network/Connection.h" +#include "Swiften/Network/HostAddressPort.h"  #include "Swiften/EventLoop/EventLoop.h"  #include "Swiften/EventLoop/EventOwner.h"  namespace Swift {  	class DummyConnection : public Connection, public EventOwner,	public boost::enable_shared_from_this<DummyConnection> {  		public: -			DummyConnection(EventLoop* eventLoop) : eventLoop(eventLoop) {} +			DummyConnection(EventLoop* eventLoop); -			void listen() { -				assert(false); -			} - -			void connect(const HostAddressPort&) { -				assert(false); -			} +			void listen(); +			void connect(const HostAddressPort&);  			void disconnect() {  				//assert(false); @@ -36,9 +30,7 @@ namespace Swift {  				onDataSent(data);  			} -			void receive(const ByteArray& data) { -				eventLoop->postEvent(boost::bind(boost::ref(onDataRead), ByteArray(data)), shared_from_this()); -			} +			void receive(const ByteArray& data);  			HostAddressPort getLocalAddress() const {  				return localAddress; diff --git a/Swiften/Network/FakeConnection.cpp b/Swiften/Network/FakeConnection.cpp new file mode 100644 index 0000000..be5555c --- /dev/null +++ b/Swiften/Network/FakeConnection.cpp @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Network/FakeConnection.h> + +#include <boost/bind.hpp> + +namespace Swift { + +FakeConnection::FakeConnection(EventLoop* eventLoop) : eventLoop(eventLoop), state(Initial), delayConnect(false) { +} + +FakeConnection::~FakeConnection() { +} + +void FakeConnection::listen() { +	assert(false); +} + +void FakeConnection::setError(const Error& e) { +	error = boost::optional<Error>(e); +	state = DisconnectedWithError; +	if (connectedTo) { +		eventLoop->postEvent( +				boost::bind(boost::ref(onDisconnected), error), +				shared_from_this()); +	} +} + +void FakeConnection::connect(const HostAddressPort& address) { +	if (delayConnect) { +		state = Connecting; +	} +	else { +		if (!error) { +			connectedTo = address; +			state = Connected; +		} +		else { +			state = DisconnectedWithError; +		} +		eventLoop->postEvent( +				boost::bind(boost::ref(onConnectFinished), error), +				shared_from_this()); +	} +} + +void FakeConnection::disconnect() { +	if (!error) { +		state = Disconnected; +	} +	else { +		state = DisconnectedWithError; +	} +	connectedTo.reset(); +	eventLoop->postEvent( +			boost::bind(boost::ref(onDisconnected), error), +			shared_from_this()); +} + +} diff --git a/Swiften/Network/FakeConnection.h b/Swiften/Network/FakeConnection.h index 4e2e960..693dabf 100644 --- a/Swiften/Network/FakeConnection.h +++ b/Swiften/Network/FakeConnection.h @@ -7,7 +7,6 @@  #pragma once  #include <boost/optional.hpp> -#include <boost/bind.hpp>  #include <boost/enable_shared_from_this.hpp>  #include <vector> @@ -30,56 +29,17 @@ namespace Swift {  				DisconnectedWithError  			}; -			FakeConnection(EventLoop* eventLoop) : eventLoop(eventLoop), state(Initial), delayConnect(false) {} - -			virtual void listen() { -				assert(false); -			} +			FakeConnection(EventLoop* eventLoop); +			~FakeConnection(); +			virtual void listen();  			virtual HostAddressPort getLocalAddress() const {  				return HostAddressPort();  			} -			void setError(const Error& e) { -				error = boost::optional<Error>(e); -				state = DisconnectedWithError; -				if (connectedTo) { -					eventLoop->postEvent( -							boost::bind(boost::ref(onDisconnected), error), -							shared_from_this()); -				} -			} - -			virtual void connect(const HostAddressPort& address) { -				if (delayConnect) { -					state = Connecting; -				} -				else { -					if (!error) { -						connectedTo = address; -						state = Connected; -					} -					else { -						state = DisconnectedWithError; -					} -					eventLoop->postEvent( -							boost::bind(boost::ref(onConnectFinished), error), -							shared_from_this()); -				} -			} - -			virtual void disconnect() { -				if (!error) { -					state = Disconnected; -				} -				else { -					state = DisconnectedWithError; -				} -				connectedTo.reset(); -				eventLoop->postEvent( -						boost::bind(boost::ref(onDisconnected), error), -						shared_from_this()); -			} +			void setError(const Error& e); +			virtual void connect(const HostAddressPort& address); +			virtual void disconnect();  			virtual void write(const ByteArray& data) {  				dataWritten.push_back(data); diff --git a/Swiften/Network/HostAddress.cpp b/Swiften/Network/HostAddress.cpp index 7acd407..331a233 100644 --- a/Swiften/Network/HostAddress.cpp +++ b/Swiften/Network/HostAddress.cpp @@ -24,7 +24,7 @@ HostAddress::HostAddress(const std::string& address) {  	try {  		address_ = boost::asio::ip::address::from_string(address);  	} -	catch (const std::exception& t) { +	catch (const std::exception&) {  	}  } diff --git a/Swiften/Network/HostAddress.h b/Swiften/Network/HostAddress.h index 34ccd24..3e9c8a6 100644 --- a/Swiften/Network/HostAddress.h +++ b/Swiften/Network/HostAddress.h @@ -7,12 +7,9 @@  #pragma once  #include <string> -#include <vector> -#include <boost/asio.hpp> +#include <boost/asio/ip/address.hpp>  namespace Swift { -	 -  	class HostAddress {  		public:  			HostAddress(); diff --git a/Swiften/Network/HostAddressPort.h b/Swiften/Network/HostAddressPort.h index 6883380..c99ca65 100644 --- a/Swiften/Network/HostAddressPort.h +++ b/Swiften/Network/HostAddressPort.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/asio.hpp> +#include <boost/asio/ip/tcp.hpp>  #include "Swiften/Network/HostAddress.h" diff --git a/Swiften/Network/PlatformDomainNameAddressQuery.cpp b/Swiften/Network/PlatformDomainNameAddressQuery.cpp index 1832255..ec7e663 100644 --- a/Swiften/Network/PlatformDomainNameAddressQuery.cpp +++ b/Swiften/Network/PlatformDomainNameAddressQuery.cpp @@ -6,6 +6,8 @@  #include <Swiften/Network/PlatformDomainNameAddressQuery.h> +#include <boost/asio/ip/tcp.hpp> +  #include <Swiften/Network/PlatformDomainNameResolver.h>  #include <Swiften/EventLoop/EventLoop.h> diff --git a/Swiften/Network/PlatformDomainNameAddressQuery.h b/Swiften/Network/PlatformDomainNameAddressQuery.h index c2854ac..e1dc05f 100644 --- a/Swiften/Network/PlatformDomainNameAddressQuery.h +++ b/Swiften/Network/PlatformDomainNameAddressQuery.h @@ -6,7 +6,7 @@  #pragma once -#include <boost/asio.hpp> +#include <boost/asio/io_service.hpp>  #include <boost/enable_shared_from_this.hpp>  #include <Swiften/Network/DomainNameAddressQuery.h> diff --git a/Swiften/Network/PlatformDomainNameResolver.h b/Swiften/Network/PlatformDomainNameResolver.h index e681331..295ecc5 100644 --- a/Swiften/Network/PlatformDomainNameResolver.h +++ b/Swiften/Network/PlatformDomainNameResolver.h @@ -7,7 +7,7 @@  #pragma once  #include <deque> -#include <boost/thread.hpp> +#include <boost/thread/thread.hpp>  #include <boost/thread/mutex.hpp>  #include <boost/thread/condition_variable.hpp> diff --git a/Swiften/Network/SConscript b/Swiften/Network/SConscript index fa186fa..420dff5 100644 --- a/Swiften/Network/SConscript +++ b/Swiften/Network/SConscript @@ -12,6 +12,8 @@ sourceList = [  			"BoostIOServiceThread.cpp",  			"ConnectionFactory.cpp",  			"ConnectionServer.cpp", +			"DummyConnection.cpp", +			"FakeConnection.cpp",   			"Connector.cpp",  			"TimerFactory.cpp",  			"DummyTimerFactory.cpp", diff --git a/Swiften/Parser/PayloadParser.h b/Swiften/Parser/PayloadParser.h index 423a2bb..3dc04df 100644 --- a/Swiften/Parser/PayloadParser.h +++ b/Swiften/Parser/PayloadParser.h @@ -44,6 +44,6 @@ namespace Swift {  			/**  			 * Retrieve a pointer to the payload.  			 */ -			virtual Payload::ref getPayload() const = 0; +			virtual boost::shared_ptr<Payload> getPayload() const = 0;  	};  } diff --git a/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp b/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp index 35db9ec..3de11ac 100644 --- a/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp +++ b/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp @@ -27,7 +27,7 @@ void BytestreamsParser::handleStartElement(const std::string& element, const std  			try {  				getPayloadInternal()->addStreamHost(Bytestreams::StreamHost(attributes.getAttribute("host"), JID(attributes.getAttribute("jid")), boost::lexical_cast<int>(attributes.getAttribute("port"))));  			} -			catch (boost::bad_lexical_cast& e) { +			catch (boost::bad_lexical_cast&) {  			}  		}  		else if (element == "streamhost-used") { diff --git a/Swiften/Parser/PayloadParsers/DelayParser.cpp b/Swiften/Parser/PayloadParsers/DelayParser.cpp index 3425b84..0ab2d7b 100644 --- a/Swiften/Parser/PayloadParsers/DelayParser.cpp +++ b/Swiften/Parser/PayloadParsers/DelayParser.cpp @@ -9,6 +9,7 @@  #include <locale>  #include <boost/date_time/time_facet.hpp> +#include <boost/date_time/posix_time/posix_time.hpp>  namespace Swift { diff --git a/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp b/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp index 19d0530..48841d2 100644 --- a/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp +++ b/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp @@ -6,6 +6,7 @@  #include <Swiften/Parser/PayloadParsers/DelayParserFactory.h> +#include <boost/date_time/posix_time/posix_time.hpp>  #include <boost/date_time/time_facet.hpp>  namespace Swift { diff --git a/Swiften/Parser/PayloadParsers/IBBParser.cpp b/Swiften/Parser/PayloadParsers/IBBParser.cpp index f36dc43..308f4ab 100644 --- a/Swiften/Parser/PayloadParsers/IBBParser.cpp +++ b/Swiften/Parser/PayloadParsers/IBBParser.cpp @@ -27,7 +27,7 @@ void IBBParser::handleStartElement(const std::string& element, const std::string  			try {  				getPayloadInternal()->setSequenceNumber(boost::lexical_cast<int>(attributes.getAttribute("seq")));  			} -			catch (boost::bad_lexical_cast& e) { +			catch (boost::bad_lexical_cast&) {  			}  		}  		else if (element == "open") { @@ -42,7 +42,7 @@ void IBBParser::handleStartElement(const std::string& element, const std::string  			try {  				getPayloadInternal()->setBlockSize(boost::lexical_cast<int>(attributes.getAttribute("block-size")));  			} -			catch (boost::bad_lexical_cast& e) { +			catch (boost::bad_lexical_cast&) {  			}  		}  		else if (element == "close") { diff --git a/Swiften/Parser/PayloadParsers/PriorityParser.cpp b/Swiften/Parser/PayloadParsers/PriorityParser.cpp index bcbf67f..553a2b1 100644 --- a/Swiften/Parser/PayloadParsers/PriorityParser.cpp +++ b/Swiften/Parser/PayloadParsers/PriorityParser.cpp @@ -24,7 +24,7 @@ void PriorityParser::handleEndElement(const std::string&, const std::string&) {  		try {  			priority = boost::lexical_cast<int>(text_);  		} -		catch (boost::bad_lexical_cast& e) { +		catch (boost::bad_lexical_cast&) {  		}  		getPayloadInternal()->setPriority(priority);  	} diff --git a/Swiften/Parser/PayloadParsers/StreamInitiationParser.cpp b/Swiften/Parser/PayloadParsers/StreamInitiationParser.cpp index 1cf7fcf..0d4a407 100644 --- a/Swiften/Parser/PayloadParsers/StreamInitiationParser.cpp +++ b/Swiften/Parser/PayloadParsers/StreamInitiationParser.cpp @@ -42,7 +42,7 @@ void StreamInitiationParser::handleStartElement(const std::string& element, cons  			try {  				currentFile.size = boost::lexical_cast<int>(attributes.getAttribute("size"));  			} -			catch (boost::bad_lexical_cast& e) { +			catch (boost::bad_lexical_cast&) {  			}  		}  		else if (element == "feature" && ns == FEATURE_NEG_NS) { diff --git a/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp b/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp index 68a2e4f..e2b8be2 100644 --- a/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp +++ b/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp @@ -24,7 +24,7 @@ class PriorityParserTest : public CppUnit::TestFixture {  			CPPUNIT_ASSERT(parser.parse("<priority>-120</priority>")); -			Priority::ref payload = boost::dynamic_pointer_cast<Priority>(parser.getPayload()); +			boost::shared_ptr<Priority> payload = boost::dynamic_pointer_cast<Priority>(parser.getPayload());  			CPPUNIT_ASSERT_EQUAL(-120, payload->getPriority());  		} @@ -33,7 +33,7 @@ class PriorityParserTest : public CppUnit::TestFixture {  			CPPUNIT_ASSERT(parser.parse("<priority>invalid</priority>")); -			Priority::ref payload = boost::dynamic_pointer_cast<Priority>(parser.getPayload()); +			boost::shared_ptr<Priority> payload = boost::dynamic_pointer_cast<Priority>(parser.getPayload());  			CPPUNIT_ASSERT_EQUAL(0, payload->getPriority());  		}  }; diff --git a/Swiften/Presence/PayloadAddingPresenceSender.cpp b/Swiften/Presence/PayloadAddingPresenceSender.cpp index c3d1638..43071b3 100644 --- a/Swiften/Presence/PayloadAddingPresenceSender.cpp +++ b/Swiften/Presence/PayloadAddingPresenceSender.cpp @@ -34,7 +34,7 @@ bool PayloadAddingPresenceSender::isAvailable() const {  	return sender->isAvailable();  } -void PayloadAddingPresenceSender::setPayload(Payload::ref payload) { +void PayloadAddingPresenceSender::setPayload(boost::shared_ptr<Payload> payload) {  	this->payload = payload;  	if (lastSentPresence) {  		sendPresence(lastSentPresence); diff --git a/Swiften/Presence/PayloadAddingPresenceSender.h b/Swiften/Presence/PayloadAddingPresenceSender.h index ae82970..ba891a8 100644 --- a/Swiften/Presence/PayloadAddingPresenceSender.h +++ b/Swiften/Presence/PayloadAddingPresenceSender.h @@ -21,7 +21,7 @@ namespace Swift {  		public:  			PayloadAddingPresenceSender(PresenceSender*); -			void sendPresence(Presence::ref); +			void sendPresence(boost::shared_ptr<Presence>);  			bool isAvailable() const;  			/** @@ -30,11 +30,11 @@ namespace Swift {  			 * with an updated payload. Initial presence is reset when unavailable presence is  			 * sent.  			 */ -			void setPayload(Payload::ref); +			void setPayload(boost::shared_ptr<Payload>);  		private: -			Presence::ref lastSentPresence; +			boost::shared_ptr<Presence> lastSentPresence;  			PresenceSender* sender; -			Payload::ref payload; +			boost::shared_ptr<Payload> payload;  	};  } diff --git a/Swiften/QA/ClientTest/ClientTest.cpp b/Swiften/QA/ClientTest/ClientTest.cpp index 35bb096..09d357c 100644 --- a/Swiften/QA/ClientTest/ClientTest.cpp +++ b/Swiften/QA/ClientTest/ClientTest.cpp @@ -6,6 +6,7 @@  #include <boost/bind.hpp>  #include <boost/thread.hpp> +#include <iostream>  #include "Swiften/Client/Client.h"  #include "Swiften/Network/TimerFactory.h" diff --git a/Swiften/Queries/RawRequest.h b/Swiften/Queries/RawRequest.h index 477952f..e5b3a1d 100644 --- a/Swiften/Queries/RawRequest.h +++ b/Swiften/Queries/RawRequest.h @@ -31,7 +31,7 @@ namespace Swift {  			RawRequest(IQ::Type type, const JID& receiver, const std::string& data, IQRouter* router) : Request(type, receiver, boost::make_shared<RawXMLPayload>(data), router) {  			} -			virtual void handleResponse(Payload::ref payload, ErrorPayload::ref error) { +			virtual void handleResponse(boost::shared_ptr<Payload> payload, ErrorPayload::ref error) {  				if (error) {  					onResponse(ErrorSerializer().serializePayload(error));  				} diff --git a/Swiften/Queries/Request.h b/Swiften/Queries/Request.h index eee89e9..88eda63 100644 --- a/Swiften/Queries/Request.h +++ b/Swiften/Queries/Request.h @@ -4,8 +4,7 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_Request_H -#define SWIFTEN_Request_H +#pragma once  #include <boost/shared_ptr.hpp>  #include <boost/optional.hpp> @@ -48,15 +47,15 @@ namespace Swift {  					const JID& receiver,   					IQRouter* router); -			virtual void setPayload(Payload::ref payload) { +			virtual void setPayload(boost::shared_ptr<Payload> payload) {  				payload_ = payload;  			} -			Payload::ref getPayload() const { +			boost::shared_ptr<Payload> getPayload() const {  				return payload_;  			} -			virtual void handleResponse(Payload::ref, ErrorPayload::ref) = 0; +			virtual void handleResponse(boost::shared_ptr<Payload>, boost::shared_ptr<ErrorPayload>) = 0;  		private:  			bool handleIQ(boost::shared_ptr<IQ>); @@ -70,5 +69,3 @@ namespace Swift {  			bool sent_;  	};  } - -#endif diff --git a/Swiften/Queries/Requests/SubmitInBandRegistrationFormRequest.h b/Swiften/Queries/Requests/SubmitInBandRegistrationFormRequest.h index 0700c65..5dd19b5 100644 --- a/Swiften/Queries/Requests/SubmitInBandRegistrationFormRequest.h +++ b/Swiften/Queries/Requests/SubmitInBandRegistrationFormRequest.h @@ -26,11 +26,11 @@ namespace Swift {  			SetInBandRegistrationRequest(const JID& to, InBandRegistrationPayload::ref payload, IQRouter* router) : Request(IQ::Set, to, InBandRegistrationPayload::ref(payload), router) {  			} -			virtual void handleResponse(Payload::ref payload, ErrorPayload::ref error) { +			virtual void handleResponse(boost::shared_ptr<Payload> payload, ErrorPayload::ref error) {  				onResponse(payload, error);  			}  		public: -			boost::signal<void (Payload::ref, ErrorPayload::ref)> onResponse; +			boost::signal<void (boost::shared_ptr<Payload>, ErrorPayload::ref)> onResponse;  	};  } diff --git a/Swiften/Roster/UnitTest/XMPPRosterSignalHandler.cpp b/Swiften/Roster/UnitTest/XMPPRosterSignalHandler.cpp new file mode 100644 index 0000000..983bc22 --- /dev/null +++ b/Swiften/Roster/UnitTest/XMPPRosterSignalHandler.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2010-2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Roster/UnitTest/XMPPRosterSignalHandler.h> + +#include <boost/bind.hpp> +#include <cassert> + +using namespace Swift; + +XMPPRosterSignalHandler::XMPPRosterSignalHandler(Swift::XMPPRoster* roster) { +	lastEvent_ = None; +	roster->onJIDAdded.connect(boost::bind(&XMPPRosterSignalHandler::handleJIDAdded, this, _1)); +	roster->onJIDRemoved.connect(boost::bind(&XMPPRosterSignalHandler::handleJIDRemoved, this, _1)); +	roster->onJIDUpdated.connect(boost::bind(&XMPPRosterSignalHandler::handleJIDUpdated, this, _1, _2, _3)); +} + +void XMPPRosterSignalHandler::handleJIDUpdated(const Swift::JID& jid, const std::string& oldName, const std::vector<std::string>& oldGroups) { +	assert(lastEvent_ == None); +	lastJID_ = jid; +	lastOldName_ = oldName; +	lastOldGroups_ = oldGroups; +	lastEvent_ = Update; +} diff --git a/Swiften/Roster/UnitTest/XMPPRosterSignalHandler.h b/Swiften/Roster/UnitTest/XMPPRosterSignalHandler.h index 1bbd8e9..c59b4c6 100644 --- a/Swiften/Roster/UnitTest/XMPPRosterSignalHandler.h +++ b/Swiften/Roster/UnitTest/XMPPRosterSignalHandler.h @@ -3,34 +3,25 @@   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ +  #pragma once -#include <boost/shared_ptr.hpp> -#include <boost/bind.hpp> +#include <boost/shared_ptr.hpp>  #include <vector> -  #include "Swiften/Roster/XMPPRosterImpl.h" -using namespace Swift; - -  enum XMPPRosterEvents {None, Add, Remove, Update};  class XMPPRosterSignalHandler {  public: -	XMPPRosterSignalHandler(XMPPRoster* roster) { -		lastEvent_ = None; -		roster->onJIDAdded.connect(boost::bind(&XMPPRosterSignalHandler::handleJIDAdded, this, _1)); -		roster->onJIDRemoved.connect(boost::bind(&XMPPRosterSignalHandler::handleJIDRemoved, this, _1)); -		roster->onJIDUpdated.connect(boost::bind(&XMPPRosterSignalHandler::handleJIDUpdated, this, _1, _2, _3)); -	} +	XMPPRosterSignalHandler(Swift::XMPPRoster* roster);  	XMPPRosterEvents getLastEvent() {  		return lastEvent_;  	} -	JID getLastJID() { +	Swift::JID getLastJID() {  		return lastJID_;  	} @@ -47,26 +38,20 @@ public:  	}  private: -	void handleJIDAdded(const JID& jid) { +	void handleJIDAdded(const Swift::JID& jid) {  		lastJID_ = jid;  		lastEvent_ = Add;  	} -	void handleJIDRemoved(const JID& jid) { +	void handleJIDRemoved(const Swift::JID& jid) {  		lastJID_ = jid;  		lastEvent_ = Remove;  	} -	void handleJIDUpdated(const JID& jid, const std::string& oldName, const std::vector<std::string>& oldGroups) { -		CPPUNIT_ASSERT_EQUAL(None, lastEvent_); -		lastJID_ = jid; -		lastOldName_ = oldName; -		lastOldGroups_ = oldGroups; -		lastEvent_ = Update; -	} +	void handleJIDUpdated(const Swift::JID& jid, const std::string& oldName, const std::vector<std::string>& oldGroups);  	XMPPRosterEvents lastEvent_; -	JID lastJID_; +	Swift::JID lastJID_;  	std::string lastOldName_;  	std::vector<std::string> lastOldGroups_; diff --git a/Swiften/SConscript b/Swiften/SConscript index 8a2972a..8961d09 100644 --- a/Swiften/SConscript +++ b/Swiften/SConscript @@ -55,6 +55,7 @@ if env["SCONS_STAGE"] == "build" :  			"Client/ClientSessionStanzaChannel.cpp",  			"Client/CoreClient.cpp",  			"Client/Client.cpp", +			"Client/ClientXMLTracer.cpp",  			"Client/ClientSession.cpp",  			"Client/MemoryStorages.cpp",  			"Client/FileStorages.cpp", @@ -65,7 +66,9 @@ if env["SCONS_STAGE"] == "build" :  			"Compress/ZLibDecompressor.cpp",  			"Compress/ZLibCompressor.cpp",  			"Elements/DiscoInfo.cpp", +			"Elements/Presence.cpp",  			"Elements/Form.cpp", +			"Elements/StreamFeatures.cpp",  			"Elements/Element.cpp",  			"Elements/IQ.cpp",  			"Elements/Payload.cpp", @@ -138,6 +141,7 @@ if env["SCONS_STAGE"] == "build" :  			"Server/SimpleUserRegistry.cpp",  			"Server/UserRegistry.cpp",  			"Session/Session.cpp", +			"Session/SessionTracer.cpp",  			"Session/SessionStream.cpp",  			"Session/BasicSessionStream.cpp",  			"StringCodecs/Base64.cpp", @@ -260,6 +264,7 @@ if env["SCONS_STAGE"] == "build" :  			File("Queries/UnitTest/ResponderTest.cpp"),  			File("Roster/UnitTest/XMPPRosterImplTest.cpp"),  			File("Roster/UnitTest/XMPPRosterControllerTest.cpp"), +			File("Roster/UnitTest/XMPPRosterSignalHandler.cpp"),  			File("Serializer/PayloadSerializers/UnitTest/PayloadsSerializer.cpp"),  			File("Serializer/PayloadSerializers/UnitTest/CapsInfoSerializerTest.cpp"),  			File("Serializer/PayloadSerializers/UnitTest/FormSerializerTest.cpp"), @@ -318,7 +323,7 @@ if env["SCONS_STAGE"] == "build" :  				swiften_includes.append(include)  				if root.endswith("OpenSSL") :  					continue -				if file.startswith("CAres") or file.startswith("LibXML") or file.startswith("Expat") : +				if file.startswith("CAres") or file.startswith("LibXML") or file.startswith("Expat") or file.startswith("foreach") or file.startswith("Log.h") or file.startswith("format.h") :  					continue  				swiften_header += "#include <" + include + ">\n"  				swiften_includes.append(include) diff --git a/Swiften/Serializer/IQSerializer.h b/Swiften/Serializer/IQSerializer.h index 21ec300..784ce09 100644 --- a/Swiften/Serializer/IQSerializer.h +++ b/Swiften/Serializer/IQSerializer.h @@ -7,8 +7,6 @@  #ifndef SWIFTEN_IQSerializer_H  #define SWIFTEN_IQSerializer_H -#include <cassert> -  #include "Swiften/Serializer/GenericStanzaSerializer.h"  #include "Swiften/Elements/IQ.h"  #include "Swiften/Serializer/XML/XMLElement.h" diff --git a/Swiften/Serializer/PayloadSerializer.h b/Swiften/Serializer/PayloadSerializer.h index 34e6679..c4ad23b 100644 --- a/Swiften/Serializer/PayloadSerializer.h +++ b/Swiften/Serializer/PayloadSerializer.h @@ -4,15 +4,14 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#ifndef SWIFTEN_PAYLOADSERIALIZER_H -#define SWIFTEN_PAYLOADSERIALIZER_H - -#include <boost/shared_ptr.hpp> +#pragma once  #include <string> -#include "Swiften/Elements/Payload.h" +#include <boost/shared_ptr.hpp>  namespace Swift { +	class Payload; +  	class PayloadSerializer {  		public:  			virtual ~PayloadSerializer(); @@ -21,5 +20,3 @@ namespace Swift {  			virtual std::string serialize(boost::shared_ptr<Payload>) const = 0;  	};  } - -#endif diff --git a/Swiften/Serializer/PayloadSerializers/DelaySerializer.cpp b/Swiften/Serializer/PayloadSerializers/DelaySerializer.cpp index 4922042..bdf5505 100644 --- a/Swiften/Serializer/PayloadSerializers/DelaySerializer.cpp +++ b/Swiften/Serializer/PayloadSerializers/DelaySerializer.cpp @@ -7,6 +7,7 @@  #include "Swiften/Serializer/PayloadSerializers/DelaySerializer.h"  #include <boost/shared_ptr.hpp> +#include <boost/date_time/posix_time/posix_time.hpp>  #include <Swiften/Base/String.h>  #include "Swiften/Serializer/XML/XMLElement.h" diff --git a/Swiften/Serializer/PayloadSerializers/MUCPayloadSerializer.cpp b/Swiften/Serializer/PayloadSerializers/MUCPayloadSerializer.cpp index d7e1613..f19874a 100644 --- a/Swiften/Serializer/PayloadSerializers/MUCPayloadSerializer.cpp +++ b/Swiften/Serializer/PayloadSerializers/MUCPayloadSerializer.cpp @@ -6,6 +6,9 @@  #include "Swiften/Serializer/PayloadSerializers/MUCPayloadSerializer.h" +#include <boost/lexical_cast.hpp> +#include <boost/date_time/posix_time/posix_time.hpp> +  #include "Swiften/Serializer/XML/XMLElement.h"  #include <Swiften/Base/String.h> diff --git a/Swiften/Serializer/PayloadSerializers/StreamInitiationSerializer.cpp b/Swiften/Serializer/PayloadSerializers/StreamInitiationSerializer.cpp index 70fb2ac..ee9f279 100644 --- a/Swiften/Serializer/PayloadSerializers/StreamInitiationSerializer.cpp +++ b/Swiften/Serializer/PayloadSerializers/StreamInitiationSerializer.cpp @@ -49,7 +49,7 @@ std::string StreamInitiationSerializer::serializePayload(boost::shared_ptr<Strea  		siElement.addNode(fileElement);  	} -	boost::shared_ptr<XMLElement> featureElement(new XMLElement("feature", "http://jabber.org/protocol/feature-neg")); +	boost::shared_ptr<XMLElement> featureElement(new XMLElement("feature", FEATURE_NEG_NS));  	if (streamInitiation->getProvidedMethods().size() > 0) {  		Form::ref form(new Form(Form::FormType));  		ListSingleFormField::ref field = ListSingleFormField::create(); diff --git a/Swiften/Serializer/PresenceSerializer.h b/Swiften/Serializer/PresenceSerializer.h index 3cb9aab..be31597 100644 --- a/Swiften/Serializer/PresenceSerializer.h +++ b/Swiften/Serializer/PresenceSerializer.h @@ -7,8 +7,6 @@  #ifndef SWIFTEN_PresenceSerializer_H  #define SWIFTEN_PresenceSerializer_H -#include <cassert> -  #include "Swiften/Serializer/GenericStanzaSerializer.h"  #include "Swiften/Elements/Presence.h" diff --git a/Swiften/Serializer/StanzaSerializer.cpp b/Swiften/Serializer/StanzaSerializer.cpp index cfc9a43..6bd2ef0 100644 --- a/Swiften/Serializer/StanzaSerializer.cpp +++ b/Swiften/Serializer/StanzaSerializer.cpp @@ -10,6 +10,7 @@  #include <typeinfo>  #include <iostream> +#include <Swiften/Base/foreach.h>  #include "Swiften/Serializer/XML/XMLElement.h"  #include "Swiften/Serializer/XML/XMLRawTextNode.h"  #include "Swiften/Serializer/PayloadSerializer.h" diff --git a/Swiften/Session/SessionTracer.cpp b/Swiften/Session/SessionTracer.cpp new file mode 100644 index 0000000..6d41e40 --- /dev/null +++ b/Swiften/Session/SessionTracer.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Session/SessionTracer.h> + +#include <iostream> +#include <boost/bind.hpp> + +namespace Swift { + +SessionTracer::SessionTracer(boost::shared_ptr<Session> session) : session(session) { +	session->onDataRead.connect(boost::bind(&SessionTracer::printData, this, '<', _1)); +	session->onDataWritten.connect(boost::bind(&SessionTracer::printData, this, '>', _1)); +} + +void SessionTracer::printData(char direction, const ByteArray& data) { +	std::cerr << direction << direction << " " << session->getLocalJID() << " "; +	for (unsigned int i = 0; i < 72 - session->getLocalJID().toString().size() - session->getRemoteJID().toString().size(); ++i) { +		std::cerr << direction; +	} +	std::cerr << " " << session->getRemoteJID()<< " " << direction << direction << std::endl; +	std::cerr << data.toString() << std::endl; +} + +} diff --git a/Swiften/Session/SessionTracer.h b/Swiften/Session/SessionTracer.h index cce45eb..51b8d16 100644 --- a/Swiften/Session/SessionTracer.h +++ b/Swiften/Session/SessionTracer.h @@ -6,29 +6,18 @@  #pragma once -#include <iostream> +#include <string>  #include "Swiften/Session/Session.h" -#include <string>  #include "Swiften/Base/ByteArray.h"  namespace Swift {  	class SessionTracer {  		public: -			SessionTracer(boost::shared_ptr<Session> session) : session(session) { -				session->onDataRead.connect(boost::bind(&SessionTracer::printData, this, '<', _1)); -				session->onDataWritten.connect(boost::bind(&SessionTracer::printData, this, '>', _1)); -			} +			SessionTracer(boost::shared_ptr<Session> session);  		private: -			void printData(char direction, const ByteArray& data) { -				std::cerr << direction << direction << " " << session->getLocalJID() << " "; -				for (unsigned int i = 0; i < 72 - session->getLocalJID().toString().size() - session->getRemoteJID().toString().size(); ++i) { -					std::cerr << direction; -				} -				std::cerr << " " << session->getRemoteJID()<< " " << direction << direction << std::endl; -				std::cerr << data.toString() << std::endl; -			} +			void printData(char direction, const ByteArray& data);  			boost::shared_ptr<Session> session;  	}; diff --git a/Swiften/StreamManagement/StanzaAckRequester.cpp b/Swiften/StreamManagement/StanzaAckRequester.cpp index f7d603b..4b626c9 100644 --- a/Swiften/StreamManagement/StanzaAckRequester.cpp +++ b/Swiften/StreamManagement/StanzaAckRequester.cpp @@ -7,6 +7,7 @@  #include "Swiften/StreamManagement/StanzaAckRequester.h"  #include <boost/numeric/conversion/cast.hpp> +#include <iostream>  #include "Swiften/Elements/Message.h" diff --git a/Swiften/StreamStack/CompressionLayer.h b/Swiften/StreamStack/CompressionLayer.h index b8293a8..7d8656e 100644 --- a/Swiften/StreamStack/CompressionLayer.h +++ b/Swiften/StreamStack/CompressionLayer.h @@ -27,7 +27,7 @@ namespace Swift {  				try {  					writeDataToChildLayer(compressor_.process(data));  				} -				catch (const ZLibException& e) { +				catch (const ZLibException&) {  					onError();  				}  			} @@ -36,7 +36,7 @@ namespace Swift {  				try {  					writeDataToParentLayer(decompressor_.process(data));  				} -				catch (const ZLibException& e) { +				catch (const ZLibException&) {  					onError();  				}  			} diff --git a/Swiften/StreamStack/ConnectionLayer.cpp b/Swiften/StreamStack/ConnectionLayer.cpp new file mode 100644 index 0000000..00b4289 --- /dev/null +++ b/Swiften/StreamStack/ConnectionLayer.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/StreamStack/ConnectionLayer.h> +#include <boost/bind.hpp> + +namespace Swift { + +ConnectionLayer::ConnectionLayer(boost::shared_ptr<Connection> connection) : connection(connection) { +	connection->onDataRead.connect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); +} + +ConnectionLayer::~ConnectionLayer() { +	connection->onDataRead.disconnect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); +} + + +} diff --git a/Swiften/StreamStack/ConnectionLayer.h b/Swiften/StreamStack/ConnectionLayer.h index 0da0900..bd9c093 100644 --- a/Swiften/StreamStack/ConnectionLayer.h +++ b/Swiften/StreamStack/ConnectionLayer.h @@ -6,9 +6,7 @@  #pragma once -#include "Swiften/Base/boost_bsignals.h"  #include <boost/shared_ptr.hpp> -#include <boost/bind.hpp>  #include "Swiften/StreamStack/LowLayer.h"  #include "Swiften/Network/Connection.h" @@ -16,13 +14,8 @@  namespace Swift {  	class ConnectionLayer : public LowLayer {  		public: -			ConnectionLayer(boost::shared_ptr<Connection> connection) : connection(connection) { -				connection->onDataRead.connect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); -			} - -			~ConnectionLayer() { -				connection->onDataRead.disconnect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); -			} +			ConnectionLayer(boost::shared_ptr<Connection> connection); +			~ConnectionLayer();  			void writeData(const ByteArray& data) {  				connection->write(data); diff --git a/Swiften/StreamStack/SConscript b/Swiften/StreamStack/SConscript index 022c695..06fcc03 100644 --- a/Swiften/StreamStack/SConscript +++ b/Swiften/StreamStack/SConscript @@ -6,6 +6,7 @@ sources = [  		"HighLayer.cpp",  		"LowLayer.cpp",  		"StreamStack.cpp", +		"ConnectionLayer.cpp",  		"TLSLayer.cpp",  		"WhitespacePingLayer.cpp",  		"XMPPLayer.cpp", diff --git a/Swiften/StreamStack/StreamStack.h b/Swiften/StreamStack/StreamStack.h index 562245e..c9ebecd 100644 --- a/Swiften/StreamStack/StreamStack.h +++ b/Swiften/StreamStack/StreamStack.h @@ -11,7 +11,6 @@  #include <vector>  #include "Swiften/Elements/Stanza.h" -#include "Swiften/Base/foreach.h"  namespace Swift {  	class XMPPLayer; @@ -30,8 +29,8 @@ namespace Swift {  			}  			template<typename T> T* getLayer() { -				foreach(StreamLayer* streamLayer, layers_) { -					T* layer = dynamic_cast<T*>(streamLayer); +				for (size_t i = 0; i < layers_.size(); ++i) { +					T* layer = dynamic_cast<T*>(layers_[i]);  					if (layer) {  						return layer;  					} diff --git a/Swiften/VCards/VCardFileStorage.cpp b/Swiften/VCards/VCardFileStorage.cpp index a246838..ec676e1 100644 --- a/Swiften/VCards/VCardFileStorage.cpp +++ b/Swiften/VCards/VCardFileStorage.cpp @@ -7,6 +7,8 @@  #include "Swiften/VCards/VCardFileStorage.h"  #include <boost/filesystem/fstream.hpp> +#include <boost/filesystem.hpp> +#include <iostream>  #include <Swiften/Base/String.h>  #include <Swiften/StringCodecs/Hexify.h> diff --git a/Swiften/VCards/VCardFileStorage.h b/Swiften/VCards/VCardFileStorage.h index 26bf4b2..ba422f4 100644 --- a/Swiften/VCards/VCardFileStorage.h +++ b/Swiften/VCards/VCardFileStorage.h @@ -7,7 +7,7 @@  #pragma once  #include <boost/shared_ptr.hpp> -#include <boost/filesystem.hpp> +#include <boost/filesystem/path.hpp>  #include <string>  #include <map> diff --git a/Swiftob/Commands.cpp b/Swiftob/Commands.cpp index e39d23e..0e44a23 100644 --- a/Swiftob/Commands.cpp +++ b/Swiftob/Commands.cpp @@ -6,6 +6,7 @@  #include "Swiftob/Commands.h" +#include <Swiften/Base/foreach.h>  #include <iostream>  #include <boost/bind.hpp> diff --git a/Swiftob/LuaCommands.cpp b/Swiftob/LuaCommands.cpp index 7be818e..3843fb3 100644 --- a/Swiftob/LuaCommands.cpp +++ b/Swiftob/LuaCommands.cpp @@ -9,7 +9,9 @@  #include <boost/bind.hpp>  #include <vector>  #include <algorithm> +#include <iostream> +#include <Swiften/Base/foreach.h>  #include <Swiften/Client/Client.h>  #include <Swiften/Network/TimerFactory.h> diff --git a/Swiftob/MUCs.cpp b/Swiftob/MUCs.cpp index 55bf313..0f9d7d2 100644 --- a/Swiftob/MUCs.cpp +++ b/Swiftob/MUCs.cpp @@ -6,6 +6,10 @@  #include "Swiftob/MUCs.h" +#include <boost/bind.hpp> +#include <boost/date_time/posix_time/posix_time.hpp> + +#include <Swiften/Base/foreach.h>  #include <Swiften/Client/Client.h>  #include <Swiften/MUC/MUC.h>  #include <Swiften/MUC/MUCManager.h> diff --git a/Swiftob/Users.cpp b/Swiftob/Users.cpp index 55ba4eb..e9344a0 100644 --- a/Swiftob/Users.cpp +++ b/Swiftob/Users.cpp @@ -8,6 +8,7 @@  #include <iostream> +#include <Swiften/Base/foreach.h>  #include <Swiften/Client/Client.h>  #include "Swiftob/MUCs.h" | 
 Swift
 Swift