summaryrefslogtreecommitdiffstats
path: root/Sluift
diff options
context:
space:
mode:
Diffstat (limited to 'Sluift')
-rw-r--r--Sluift/Examples/RemoveUnreachableContacts.lua37
-rw-r--r--Sluift/sluift.cpp6
2 files changed, 40 insertions, 3 deletions
diff --git a/Sluift/Examples/RemoveUnreachableContacts.lua b/Sluift/Examples/RemoveUnreachableContacts.lua
new file mode 100644
index 0000000..90122df
--- /dev/null
+++ b/Sluift/Examples/RemoveUnreachableContacts.lua
@@ -0,0 +1,37 @@
+--
+-- Copyright (c) 2010 Remko Tronçon
+-- Licensed under the GNU General Public License v3.
+-- See Documentation/Licenses/GPLv3.txt for more information.
+--
+
+-- This script logs into an XMPP server, iterates over all roster items,
+-- and checks if their server is still alive. If not, the script asks you
+-- whether it should remove the contact from your contact list.
+--
+-- The following environment variables are used:
+-- * SLUIFT_JID, SWIFT_PASS: JID and password to log in with
+-- * SLUIFT_DEBUG: Sets whether debugging should be turned on
+
+require "sluift"
+sluift.debug = os.getenv("SLUIFT_DEBUG")
+
+print "Connecting ..."
+c = sluift.new_client(os.getenv("SLUIFT_JID"), os.getenv("SLUIFT_PASS"))
+c:connect()
+
+print "Checking for unreachable contacts ..."
+for jid, _ in pairs(c:get_contacts()) do
+ _, err = c:get_version(sluift.jid_domain(jid), 10000)
+ if err == "Remote server not found" or err == "Timeout" then
+ print("Delete " .. jid .. " (" .. err .. ") ? [y/n/q]")
+ answer = io.read()
+ if answer == "y" then
+ c:remove_contact(jid)
+ elseif answer == "q" then
+ break
+ end
+ end
+end
+
+print "Done. Exiting ..."
+c:disconnect()
diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp
index abfde24..0545089 100644
--- a/Sluift/sluift.cpp
+++ b/Sluift/sluift.cpp
@@ -300,7 +300,7 @@ static int sluift_client_get_version(lua_State *L) {
ResponseSink<SoftwareVersion> sink;
GetSoftwareVersionRequest::ref request = GetSoftwareVersionRequest::create(std::string(luaL_checkstring(L, 2)), client->getClient()->getIQRouter());
- request->onResponse.connect(boost::ref(sink));
+ boost::signals::scoped_connection c = request->onResponse.connect(boost::ref(sink));
request->send();
Watchdog watchdog(timeout, networkFactories.getTimerFactory());
@@ -580,7 +580,7 @@ static int sluift_client_add_contact(lua_State* L) {
ResponseSink<RosterPayload> sink;
SetRosterRequest::ref request = SetRosterRequest::create(roster, client->getClient()->getIQRouter());
- request->onResponse.connect(boost::ref(sink));
+ boost::signals::scoped_connection c = request->onResponse.connect(boost::ref(sink));
request->send();
while (!sink.hasResponse()) {
eventLoop.runUntilEvents();
@@ -609,7 +609,7 @@ static int sluift_client_remove_contact(lua_State* L) {
roster->addItem(RosterItemPayload(JID(luaL_checkstring(L, 2)), "", RosterItemPayload::Remove));
ResponseSink<RosterPayload> sink;
SetRosterRequest::ref request = SetRosterRequest::create(roster, client->getClient()->getIQRouter());
- request->onResponse.connect(boost::ref(sink));
+ boost::signals::scoped_connection c = request->onResponse.connect(boost::ref(sink));
request->send();
while (!sink.hasResponse()) {
eventLoop.runUntilEvents();