From 26c9854be9df706c550c0eec7e64708b5bf5cd81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Sat, 24 Apr 2010 00:07:28 +0200
Subject: Add beginnings of LinkLocalTool.


diff --git a/Swiften/Examples/LinkLocalTool/.gitignore b/Swiften/Examples/LinkLocalTool/.gitignore
new file mode 100644
index 0000000..684ef0b
--- /dev/null
+++ b/Swiften/Examples/LinkLocalTool/.gitignore
@@ -0,0 +1 @@
+LinkLocalTool
diff --git a/Swiften/Examples/LinkLocalTool/SConscript b/Swiften/Examples/LinkLocalTool/SConscript
new file mode 100644
index 0000000..0feceae
--- /dev/null
+++ b/Swiften/Examples/LinkLocalTool/SConscript
@@ -0,0 +1,16 @@
+Import("env")
+
+myenv = env.Clone()
+myenv.MergeFlags(myenv["SWIFTEN_FLAGS"])
+myenv.MergeFlags(myenv["LIBIDN_FLAGS"])
+myenv.MergeFlags(myenv["BOOST_FLAGS"])
+myenv.MergeFlags(myenv["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.get("AVAHI_FLAGS", {}))
+
+linkLocalTool = myenv.Program("LinkLocalTool", [
+		"main.cpp"
+	])
diff --git a/Swiften/Examples/LinkLocalTool/main.cpp b/Swiften/Examples/LinkLocalTool/main.cpp
new file mode 100644
index 0000000..ccecd1a
--- /dev/null
+++ b/Swiften/Examples/LinkLocalTool/main.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+// FIXME: This example is not complete yet
+
+#include <iostream>
+
+#include "Swiften/EventLoop/SimpleEventLoop.h"
+#include "Swiften/LinkLocal/DNSSD/PlatformDNSSDQuerierFactory.h"
+#include "Swiften/LinkLocal/DNSSD/DNSSDQuerier.h"
+#include "Swiften/LinkLocal/DNSSD/DNSSDBrowseQuery.h"
+#include "Swiften/LinkLocal/DNSSD/DNSSDResolveServiceQuery.h"
+
+using namespace Swift;
+
+int main(int argc, char* argv[]) {
+	if (argc < 2) {
+		std::cerr << "Invalid parameters" << std::endl;
+		return -1;
+	}
+
+	SimpleEventLoop eventLoop;
+	PlatformDNSSDQuerierFactory factory;
+	boost::shared_ptr<DNSSDQuerier> querier = factory.createQuerier();
+	querier->start();
+
+	if (String(argv[1]) == "browse") {
+		boost::shared_ptr<DNSSDBrowseQuery> browseQuery = querier->createBrowseQuery();
+		browseQuery->startBrowsing();
+		eventLoop.run();
+		browseQuery->stopBrowsing();
+	}
+	else if (String(argv[1]) == "resolve-service") {
+		if (argc < 5) {
+			std::cerr << "Invalid parameters" << std::endl;
+			return -1;
+		}
+		boost::shared_ptr<DNSSDResolveServiceQuery> resolveQuery = querier->createResolveServiceQuery(DNSSDServiceID(argv[2], argv[3], argv[4]));
+		resolveQuery->start();
+		eventLoop.run();
+		std::cerr << "Done running" << std::endl;
+		resolveQuery->stop();
+	}
+
+	querier->stop();
+}
diff --git a/Swiften/Examples/SConscript b/Swiften/Examples/SConscript
index 4c9b853..07e4e15 100644
--- a/Swiften/Examples/SConscript
+++ b/Swiften/Examples/SConscript
@@ -5,5 +5,6 @@ myenv = swiften_env.Clone()
 if myenv["target"] == "native":
    SConscript(dirs = [
 		"SendMessage",
-		"ConnectivityTest"
+		"ConnectivityTest",
+		"LinkLocalTool",
 	])
diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h b/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h
index 44a82ee..7b641c5 100644
--- a/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h
+++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h
@@ -53,12 +53,12 @@ namespace Swift {
 						break;
 					case AVAHI_BROWSER_NEW: {
 						DNSSDServiceID service(name, domain, type, interfaceIndex);
-						std::cout << "Service discovered " << name << " " << type << " " << domain << " " << interfaceIndex << std::endl;
+						std::cout << "Service discovered " << name << " " << domain << " " << type << " " << interfaceIndex << std::endl;
 						MainEventLoop::postEvent(boost::bind(boost::ref(onServiceAdded), service), shared_from_this());
 						break;
 					}
 					case AVAHI_BROWSER_REMOVE: {
-						std::cout << "Service went away " << name << " " << type << " " << domain << std::endl;
+						std::cout << "Service went away " << name << " " << domain << " " << type << " " << interfaceIndex << std::endl;
 						DNSSDServiceID service(name, domain, type, interfaceIndex);
 						MainEventLoop::postEvent(boost::bind(boost::ref(onServiceRemoved), service), shared_from_this());
 						break;
diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h
index b173b9a..f86780a 100644
--- a/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h
+++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h
@@ -21,7 +21,7 @@ namespace Swift {
 			}
 
 			void start() {
-				std::cout << "Start resolving " << service.getName() << std::endl;
+				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().getUTF8Data(), service.getType().getUTF8Data(), service.getDomain().getUTF8Data(), AVAHI_PROTO_UNSPEC, (AvahiLookupFlags) 0, handleServiceResolvedStatic, this);
diff --git a/Swiften/LinkLocal/DNSSD/DNSSDServiceID.h b/Swiften/LinkLocal/DNSSD/DNSSDServiceID.h
index 58aafdf..1a720a0 100644
--- a/Swiften/LinkLocal/DNSSD/DNSSDServiceID.h
+++ b/Swiften/LinkLocal/DNSSD/DNSSDServiceID.h
@@ -17,7 +17,7 @@ namespace Swift {
 				const String& name, 
 				const String& domain, 
 				const String& type = PresenceServiceType, 
-				int networkInterface = 0) : 
+				int networkInterface = -1) : 
 					name(name), 
 					domain(domain), 
 					type(type), 
-- 
cgit v0.10.2-6-g49f6