diff options
Diffstat (limited to 'Swiften')
25 files changed, 110 insertions, 106 deletions
diff --git a/Swiften/.gitignore b/Swiften/.gitignore index 9eca6c8..c21d6aa 100644 --- a/Swiften/.gitignore +++ b/Swiften/.gitignore @@ -1,2 +1,3 @@ *.a *.o +Swiften.h diff --git a/Swiften/Client/Client.h b/Swiften/Client/Client.h index 7e55289..5432920 100644 --- a/Swiften/Client/Client.h +++ b/Swiften/Client/Client.h @@ -22,6 +22,7 @@ #include "Swiften/Client/StanzaChannel.h" #include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" #include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" +#include "Swiften/Base/Shared.h" namespace Swift { class IQRouter; diff --git a/Swiften/Client/ClientXMLTracer.h b/Swiften/Client/ClientXMLTracer.h index 8bcb6e7..f3cfd08 100644 --- a/Swiften/Client/ClientXMLTracer.h +++ b/Swiften/Client/ClientXMLTracer.h @@ -6,6 +6,8 @@ #pragma once +#include <boost/bind.hpp> + #include "Swiften/Client/Client.h" namespace Swift { diff --git a/Swiften/Disco/CapsManager.cpp b/Swiften/Disco/CapsManager.cpp index a5023d3..a9920a2 100644 --- a/Swiften/Disco/CapsManager.cpp +++ b/Swiften/Disco/CapsManager.cpp @@ -69,7 +69,7 @@ void CapsManager::handleDiscoInfoReceived(const JID& from, const String& hash, D } void CapsManager::requestDiscoInfo(const JID& jid, const String& node, const String& hash) { - boost::shared_ptr<GetDiscoInfoRequest> request(new GetDiscoInfoRequest(jid, node + "#" + hash, iqRouter)); + GetDiscoInfoRequest::ref request = GetDiscoInfoRequest::create(jid, node + "#" + hash, iqRouter); request->onResponse.connect(boost::bind(&CapsManager::handleDiscoInfoReceived, this, jid, hash, _1, _2)); requestedDiscoInfos.insert(hash); request->send(); diff --git a/Swiften/Elements/Presence.h b/Swiften/Elements/Presence.h index 7297339..45638b9 100644 --- a/Swiften/Elements/Presence.h +++ b/Swiften/Elements/Presence.h @@ -22,6 +22,18 @@ namespace Swift { setStatus(status); } + static ref create() { + return ref(new Presence()); + } + + static ref create(const String& status) { + return ref(new Presence(status)); + } + + static ref create(Presence::ref presence) { + return ref(new Presence(*presence)); + } + Type getType() const { return type_; } void setType(Type type) { type_ = type; } diff --git a/Swiften/Elements/RosterPayload.h b/Swiften/Elements/RosterPayload.h index 58c5726..0c987c4 100644 --- a/Swiften/Elements/RosterPayload.h +++ b/Swiften/Elements/RosterPayload.h @@ -4,17 +4,17 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ -#ifndef SWIFTEN_RosterPayload_H -#define SWIFTEN_RosterPayload_H +#pragma once #include <vector> #include <boost/optional.hpp> #include "Swiften/Elements/RosterItemPayload.h" #include "Swiften/Elements/Payload.h" +#include "Swiften/Base/Shared.h" namespace Swift { - class RosterPayload : public Payload { + class RosterPayload : public Payload, public Shared<RosterPayload> { public: typedef std::vector<RosterItemPayload> RosterItemPayloads; @@ -35,5 +35,3 @@ namespace Swift { RosterItemPayloads items_; }; } - -#endif diff --git a/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp b/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp index af08a9c..3d814a8 100644 --- a/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp +++ b/Swiften/Examples/ConnectivityTest/ConnectivityTest.cpp @@ -41,7 +41,7 @@ void handleServerDiscoInfoResponse(boost::shared_ptr<DiscoInfo> /*info*/, const void handleConnected() { exitCode = NO_RESPONSE; - boost::shared_ptr<GetDiscoInfoRequest> discoInfoRequest(new GetDiscoInfoRequest(JID(), client->getIQRouter())); + GetDiscoInfoRequest::ref discoInfoRequest = GetDiscoInfoRequest::create(JID(), client->getIQRouter()); discoInfoRequest->onResponse.connect(handleServerDiscoInfoResponse); discoInfoRequest->send(); } diff --git a/Swiften/Examples/EchoBot/.gitignore b/Swiften/Examples/EchoBot/.gitignore deleted file mode 100644 index 9200f42..0000000 --- a/Swiften/Examples/EchoBot/.gitignore +++ /dev/null @@ -1 +0,0 @@ -EchoBot diff --git a/Swiften/Examples/EchoBot/EchoBot.cpp b/Swiften/Examples/EchoBot/EchoBot.cpp deleted file mode 100644 index 0474287..0000000 --- a/Swiften/Examples/EchoBot/EchoBot.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2010 Remko Tronçon - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. - */ - -#include <boost/bind.hpp> -#include <iostream> - -#include "Swiften/Client/Client.h" -#include "Swiften/EventLoop/SimpleEventLoop.h" -#include "Swiften/Queries/Requests/GetRosterRequest.h" - -using namespace Swift; -using namespace boost; - -class EchoBot { - public: - EchoBot(const JID& jid, const String& pass) { - client = new Client(jid, pass); - client->onConnected.connect(bind(&EchoBot::handleConnected, this)); - client->onMessageReceived.connect(bind(&EchoBot::handleMessageReceived, this, _1)); - client->connect(); - } - - ~EchoBot() { - delete client; - } - - private: - void handleConnected() { - shared_ptr<GetRosterRequest> rosterRequest(new GetRosterRequest(client->getIQRouter())); - rosterRequest->onResponse.connect(bind(&EchoBot::handleRosterReceived, this, _2)); - rosterRequest->send(); - } - - void handleRosterReceived(const optional<ErrorPayload>& error) { - if (error) { - std::cerr << "Error receiving roster. Continuing anyway."; - } - client->sendPresence(shared_ptr<Presence>(new Presence("Send me a message"))); - } - - void handleMessageReceived(shared_ptr<Message> message) { - message->setTo(message->getFrom()); - message->setFrom(JID()); - client->sendMessage(message); - } - - private: - Client* client; -}; - -int main(int argc, char* argv[]) { - if (argc != 3) { - std::cerr << "Usage: " << argv[0] << " <jid> <pass>" << std::endl; - return -1; - } - SimpleEventLoop eventLoop; - EchoBot bot(JID(argv[1]), argv[2]); - eventLoop.run(); - return 0; -} diff --git a/Swiften/Examples/EchoBot/SConscript b/Swiften/Examples/EchoBot/SConscript deleted file mode 100644 index fb7749d..0000000 --- a/Swiften/Examples/EchoBot/SConscript +++ /dev/null @@ -1,14 +0,0 @@ -Import("env") - -myenv = env.Clone() -myenv.MergeFlags(myenv["SWIFTEN_FLAGS"]) -myenv.MergeFlags(myenv["LIBIDN_FLAGS"]) -myenv.MergeFlags(myenv["BOOST_FLAGS"]) -myenv.MergeFlags(myenv.get("SQLITE_FLAGS", {})) -myenv.MergeFlags(myenv["ZLIB_FLAGS"]) -myenv.MergeFlags(myenv["OPENSSL_FLAGS"]) -myenv.MergeFlags(myenv.get("LIBXML_FLAGS", "")) -myenv.MergeFlags(myenv.get("EXPAT_FLAGS", "")) -myenv.MergeFlags(myenv["PLATFORM_FLAGS"]) - -myenv.Program("EchoBot", ["EchoBot.cpp"]) diff --git a/Swiften/Examples/SConscript b/Swiften/Examples/SConscript index 64d1859..61bedfb 100644 --- a/Swiften/Examples/SConscript +++ b/Swiften/Examples/SConscript @@ -6,6 +6,5 @@ SConscript(dirs = [ "SendMessage", "ConnectivityTest", "LinkLocalTool", - "EchoBot", "ParserTester", ]) diff --git a/Swiften/MUC/MUCBookmarkManager.cpp b/Swiften/MUC/MUCBookmarkManager.cpp index 64615e4..0f5f3bb 100644 --- a/Swiften/MUC/MUCBookmarkManager.cpp +++ b/Swiften/MUC/MUCBookmarkManager.cpp @@ -19,7 +19,7 @@ namespace Swift { MUCBookmarkManager::MUCBookmarkManager(IQRouter* iqRouter) { iqRouter_ = iqRouter; ready_ = false; - boost::shared_ptr<GetPrivateStorageRequest<Storage> > request(new GetPrivateStorageRequest<Storage>(iqRouter_)); + GetPrivateStorageRequest<Storage>::ref request = GetPrivateStorageRequest<Storage>::create(iqRouter_); request->onResponse.connect(boost::bind(&MUCBookmarkManager::handleBookmarksReceived, this, _1, _2)); request->send(); } @@ -106,7 +106,7 @@ void MUCBookmarkManager::flush() { } // Send an iq to save the storage element - boost::shared_ptr<SetPrivateStorageRequest<Storage> > request(new SetPrivateStorageRequest<Storage>(storage, iqRouter_)); + SetPrivateStorageRequest<Storage>::ref request = SetPrivateStorageRequest<Storage>::create(storage, iqRouter_); // FIXME: We should care about the result //request->onResponse.connect(boost::bind(&MUCBookmarkManager::handleBookmarksSet, this, _1, _2)); request->send(); diff --git a/Swiften/Queries/Request.h b/Swiften/Queries/Request.h index 450e311..9184dea 100644 --- a/Swiften/Queries/Request.h +++ b/Swiften/Queries/Request.h @@ -21,6 +21,9 @@ namespace Swift { class Request : public IQHandler, public boost::enable_shared_from_this<Request> { public: + void send(); + + protected: Request( IQ::Type type, const JID& receiver, @@ -31,9 +34,6 @@ namespace Swift { const JID& receiver, IQRouter* router); - void send(); - - protected: virtual void setPayload(boost::shared_ptr<Payload> p) { payload_ = p; } diff --git a/Swiften/Queries/Requests/GetDiscoInfoRequest.h b/Swiften/Queries/Requests/GetDiscoInfoRequest.h index 9ec1050..d1ed279 100644 --- a/Swiften/Queries/Requests/GetDiscoInfoRequest.h +++ b/Swiften/Queries/Requests/GetDiscoInfoRequest.h @@ -10,8 +10,17 @@ #include "Swiften/Elements/DiscoInfo.h" namespace Swift { - class GetDiscoInfoRequest : public GenericRequest<DiscoInfo> { + class GetDiscoInfoRequest : public GenericRequest<DiscoInfo>, public Shared<GetDiscoInfoRequest> { public: + static ref create(const JID& jid, IQRouter* router) { + return ref(new GetDiscoInfoRequest(jid, router)); + } + + static ref create(const JID& jid, const String& node, IQRouter* router) { + return ref(new GetDiscoInfoRequest(jid, node, router)); + } + + private: GetDiscoInfoRequest(const JID& jid, IQRouter* router) : GenericRequest<DiscoInfo>(IQ::Get, jid, boost::shared_ptr<DiscoInfo>(new DiscoInfo()), router) { } diff --git a/Swiften/Queries/Requests/GetDiscoItemsRequest.h b/Swiften/Queries/Requests/GetDiscoItemsRequest.h index 453eab4..ed565ac 100644 --- a/Swiften/Queries/Requests/GetDiscoItemsRequest.h +++ b/Swiften/Queries/Requests/GetDiscoItemsRequest.h @@ -10,8 +10,13 @@ #include "Swiften/Elements/DiscoItems.h" namespace Swift { - class GetDiscoItemsRequest : public GenericRequest<DiscoItems> { + class GetDiscoItemsRequest : public GenericRequest<DiscoItems>, public Shared<GetDiscoItemsRequest> { public: + static ref create(const JID& jid, IQRouter* router) { + return ref(new GetDiscoItemsRequest(jid, router)); + } + + private: GetDiscoItemsRequest(const JID& jid, IQRouter* router) : GenericRequest<DiscoItems>(IQ::Get, jid, boost::shared_ptr<DiscoItems>(new DiscoItems()), router) { } diff --git a/Swiften/Queries/Requests/GetPrivateStorageRequest.h b/Swiften/Queries/Requests/GetPrivateStorageRequest.h index d44d5d8..b593495 100644 --- a/Swiften/Queries/Requests/GetPrivateStorageRequest.h +++ b/Swiften/Queries/Requests/GetPrivateStorageRequest.h @@ -17,6 +17,13 @@ namespace Swift { template<typename PAYLOAD_TYPE> class GetPrivateStorageRequest : public Request { public: + typedef boost::shared_ptr<GetPrivateStorageRequest<PAYLOAD_TYPE> > ref; + + static ref create(IQRouter* router) { + return ref(new GetPrivateStorageRequest(router)); + } + + private: GetPrivateStorageRequest(IQRouter* router) : Request(IQ::Get, JID(), boost::shared_ptr<PrivateStorage>(new PrivateStorage(boost::shared_ptr<Payload>(new PAYLOAD_TYPE()))), router) { } diff --git a/Swiften/Queries/Requests/GetRosterRequest.h b/Swiften/Queries/Requests/GetRosterRequest.h index 59cefe4..271b2fb 100644 --- a/Swiften/Queries/Requests/GetRosterRequest.h +++ b/Swiften/Queries/Requests/GetRosterRequest.h @@ -8,10 +8,16 @@ #include "Swiften/Queries/GenericRequest.h" #include "Swiften/Elements/RosterPayload.h" +#include "Swiften/Base/Shared.h" namespace Swift { - class GetRosterRequest : public GenericRequest<RosterPayload> { + class GetRosterRequest : public GenericRequest<RosterPayload>, public Shared<GetRosterRequest> { public: + static ref create(IQRouter* router) { + return ref(new GetRosterRequest(router)); + } + + private: GetRosterRequest(IQRouter* router) : GenericRequest<RosterPayload>(IQ::Get, JID(), boost::shared_ptr<Payload>(new RosterPayload()), router) { } diff --git a/Swiften/Queries/Requests/GetSecurityLabelsCatalogRequest.h b/Swiften/Queries/Requests/GetSecurityLabelsCatalogRequest.h index 41225fb..ec04f80 100644 --- a/Swiften/Queries/Requests/GetSecurityLabelsCatalogRequest.h +++ b/Swiften/Queries/Requests/GetSecurityLabelsCatalogRequest.h @@ -8,10 +8,16 @@ #include "Swiften/Queries/GenericRequest.h" #include "Swiften/Elements/SecurityLabelsCatalog.h" +#include "Swiften/Base/Shared.h" namespace Swift { - class GetSecurityLabelsCatalogRequest : public GenericRequest<SecurityLabelsCatalog> { + class GetSecurityLabelsCatalogRequest : public GenericRequest<SecurityLabelsCatalog>, public Shared<GetSecurityLabelsCatalogRequest> { public: + static ref create(const JID& recipient, IQRouter* router) { + return ref(new GetSecurityLabelsCatalogRequest(recipient, router)); + } + + private: GetSecurityLabelsCatalogRequest( const JID& recipient, IQRouter* router) : diff --git a/Swiften/Queries/Requests/GetVCardRequest.h b/Swiften/Queries/Requests/GetVCardRequest.h index f369cdc..2c40cd1 100644 --- a/Swiften/Queries/Requests/GetVCardRequest.h +++ b/Swiften/Queries/Requests/GetVCardRequest.h @@ -13,6 +13,11 @@ namespace Swift { class GetVCardRequest : public GenericRequest<VCard>, public Shared<GetVCardRequest> { public: + static ref create(const JID& jid, IQRouter* router) { + return ref(new GetVCardRequest(jid, router)); + } + + private: GetVCardRequest(const JID& jid, IQRouter* router) : GenericRequest<VCard>(IQ::Get, jid, boost::shared_ptr<Payload>(new VCard()), router) { } }; diff --git a/Swiften/Queries/Requests/SetPrivateStorageRequest.h b/Swiften/Queries/Requests/SetPrivateStorageRequest.h index ebdfca8..1931f3a 100644 --- a/Swiften/Queries/Requests/SetPrivateStorageRequest.h +++ b/Swiften/Queries/Requests/SetPrivateStorageRequest.h @@ -17,6 +17,13 @@ namespace Swift { template<typename PAYLOAD_TYPE> class SetPrivateStorageRequest : public Request { public: + typedef boost::shared_ptr<SetPrivateStorageRequest<PAYLOAD_TYPE> > ref; + + static ref create(boost::shared_ptr<PAYLOAD_TYPE> payload, IQRouter* router) { + return ref(new SetPrivateStorageRequest<PAYLOAD_TYPE>(payload, router)); + } + + private: SetPrivateStorageRequest(boost::shared_ptr<PAYLOAD_TYPE> payload, IQRouter* router) : Request(IQ::Set, JID(), boost::shared_ptr<PrivateStorage>(new PrivateStorage(payload)), router) { } diff --git a/Swiften/Queries/Requests/SetRosterRequest.h b/Swiften/Queries/Requests/SetRosterRequest.h index 1f47cfe..7b1bf8c 100644 --- a/Swiften/Queries/Requests/SetRosterRequest.h +++ b/Swiften/Queries/Requests/SetRosterRequest.h @@ -11,10 +11,16 @@ #include "Swiften/Queries/Request.h" #include "Swiften/Elements/RosterPayload.h" +#include "Swiften/Base/Shared.h" namespace Swift { - class SetRosterRequest : public Request { + class SetRosterRequest : public Request, public Shared<SetRosterRequest> { public: + static ref create(RosterPayload::ref payload, IQRouter* router) { + return ref(new SetRosterRequest(payload, router)); + } + + private: SetRosterRequest(boost::shared_ptr<RosterPayload> payload, IQRouter* router) : Request(IQ::Set, JID(), boost::shared_ptr<RosterPayload>(payload), router) { } diff --git a/Swiften/Queries/Requests/UnitTest/GetPrivateStorageRequestTest.cpp b/Swiften/Queries/Requests/UnitTest/GetPrivateStorageRequestTest.cpp index d90a114..fe8b0a0 100644 --- a/Swiften/Queries/Requests/UnitTest/GetPrivateStorageRequestTest.cpp +++ b/Swiften/Queries/Requests/UnitTest/GetPrivateStorageRequestTest.cpp @@ -45,8 +45,8 @@ class GetPrivateStorageRequestTest : public CppUnit::TestFixture } void testSend() { - GetPrivateStorageRequest<MyPayload> request(router); - request.send(); + GetPrivateStorageRequest<MyPayload>::ref request = GetPrivateStorageRequest<MyPayload>::create(router); + request->send(); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(channel->iqs_.size())); CPPUNIT_ASSERT_EQUAL(JID(), channel->iqs_[0]->getTo()); @@ -58,9 +58,9 @@ class GetPrivateStorageRequestTest : public CppUnit::TestFixture } void testHandleResponse() { - GetPrivateStorageRequest<MyPayload> testling(router); - testling.onResponse.connect(boost::bind(&GetPrivateStorageRequestTest::handleResponse, this, _1, _2)); - testling.send(); + GetPrivateStorageRequest<MyPayload>::ref testling = GetPrivateStorageRequest<MyPayload>::create(router); + testling->onResponse.connect(boost::bind(&GetPrivateStorageRequestTest::handleResponse, this, _1, _2)); + testling->send(); channel->onIQReceived(createResponse("test-id", "foo")); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(responses.size())); @@ -68,9 +68,9 @@ class GetPrivateStorageRequestTest : public CppUnit::TestFixture } void testHandleResponse_Error() { - GetPrivateStorageRequest<MyPayload> testling(router); - testling.onResponse.connect(boost::bind(&GetPrivateStorageRequestTest::handleResponse, this, _1, _2)); - testling.send(); + GetPrivateStorageRequest<MyPayload>::ref testling = GetPrivateStorageRequest<MyPayload>::create(router); + testling->onResponse.connect(boost::bind(&GetPrivateStorageRequestTest::handleResponse, this, _1, _2)); + testling->send(); channel->onIQReceived(createError("test-id")); CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(responses.size())); diff --git a/Swiften/Roster/XMPPRosterController.cpp b/Swiften/Roster/XMPPRosterController.cpp index dca74c0..7743ec8 100644 --- a/Swiften/Roster/XMPPRosterController.cpp +++ b/Swiften/Roster/XMPPRosterController.cpp @@ -29,7 +29,7 @@ XMPPRosterController::XMPPRosterController(IQRouter* iqRouter, XMPPRoster* xmppR void XMPPRosterController::requestRoster() { xmppRoster_->clear(); - boost::shared_ptr<GetRosterRequest> rosterRequest(new GetRosterRequest(iqRouter_)); + GetRosterRequest::ref rosterRequest = GetRosterRequest::create(iqRouter_); rosterRequest->onResponse.connect(boost::bind(&XMPPRosterController::handleRosterReceived, this, _1)); rosterRequest->send(); } diff --git a/Swiften/SConscript b/Swiften/SConscript index c5ad9a6..7665fb0 100644 --- a/Swiften/SConscript +++ b/Swiften/SConscript @@ -1,3 +1,5 @@ +import os + Import("env") ################################################################################ @@ -244,3 +246,19 @@ if env["SCONS_STAGE"] == "build" : File("StringCodecs/UnitTest/PBKDF2Test.cpp"), File("VCards/UnitTest/VCardManagerTest.cpp"), ]) + + # Generate the Swiften header + swiften_header = "#pragma once\n" + top_path = env.Dir("..").abspath + public_dirs = ["Queries", "Client", "Elements"] + for public_dir in public_dirs : + for root, dirs, files in os.walk(env.Dir(public_dir).abspath) : + if root.endswith("UnitTest") : + continue + for file in files : + if not file.endswith(".h") : + continue + swiften_header += "#include \"" + os.path.relpath(os.path.join(root, file), top_path) + "\"\n" + for file in ["EventLoop/SimpleEventLoop.h"] : + swiften_header += "#include \"Swiften/" + file + "\"\n" + swiften_env.WriteVal("Swiften.h", swiften_env.Value(swiften_header))
\ No newline at end of file diff --git a/Swiften/VCards/VCardManager.cpp b/Swiften/VCards/VCardManager.cpp index 673b937..c189717 100644 --- a/Swiften/VCards/VCardManager.cpp +++ b/Swiften/VCards/VCardManager.cpp @@ -34,7 +34,7 @@ void VCardManager::requestVCard(const JID& requestedJID) { if (requestedVCards.find(jid) != requestedVCards.end()) { return; } - GetVCardRequest::ref request(new GetVCardRequest(jid, iqRouter)); + GetVCardRequest::ref request = GetVCardRequest::create(jid, iqRouter); request->onResponse.connect(boost::bind(&VCardManager::handleVCardReceived, this, jid, _1, _2)); request->send(); requestedVCards.insert(jid); |