From 4b809245dd6a1236dda99ab780485599434a419a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Mon, 27 Jul 2009 20:33:30 +0200
Subject: Add beginnings of AvahiQuerier.


diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.cpp b/Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.cpp
new file mode 100644
index 0000000..55ccede
--- /dev/null
+++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.cpp
@@ -0,0 +1,59 @@
+#include "Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.h"
+
+#include <iostream>
+
+//#include "Swiften/LinkLocal/DNSSD/Avahi/AvahiBrowseQuery.h"
+//#include "Swiften/LinkLocal/DNSSD/Avahi/AvahiRegisterQuery.h"
+//#include "Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveServiceQuery.h"
+//#include "Swiften/LinkLocal/DNSSD/Avahi/AvahiResolveHostnameQuery.h"
+//#include "Swiften/Base/foreach.h"
+
+namespace Swift {
+
+AvahiQuerier::AvahiQuerier() : client(NULL), threadedPoll(NULL) {
+}
+
+AvahiQuerier::~AvahiQuerier() {
+}
+
+boost::shared_ptr<DNSSDBrowseQuery> AvahiQuerier::createBrowseQuery() {
+	//return boost::shared_ptr<DNSSDBrowseQuery>(new AvahiBrowseQuery(shared_from_this()));
+}
+
+boost::shared_ptr<DNSSDRegisterQuery> AvahiQuerier::createRegisterQuery(const String& name, int port, const ByteArray& info) {
+	//return boost::shared_ptr<DNSSDRegisterQuery>(new AvahiRegisterQuery(name, port, info, shared_from_this()));
+}
+
+boost::shared_ptr<DNSSDResolveServiceQuery> AvahiQuerier::createResolveServiceQuery(const DNSSDServiceID& service) {
+	//return boost::shared_ptr<DNSSDResolveServiceQuery>(new AvahiResolveServiceQuery(service, shared_from_this()));
+}
+
+boost::shared_ptr<DNSSDResolveHostnameQuery> AvahiQuerier::createResolveHostnameQuery(const String& hostname, int interfaceIndex) {
+	//return boost::shared_ptr<DNSSDResolveHostnameQuery>(new AvahiResolveHostnameQuery(hostname, interfaceIndex, shared_from_this()));
+}
+
+void AvahiQuerier::start() {
+	assert(!threadedPoll);
+	threadedPoll = avahi_threaded_poll_new();
+	int error;
+	assert(!client);
+	client = avahi_client_new(
+			avahi_threaded_poll_get(threadedPoll), 
+			static_cast<AvahiClientFlags>(0), NULL, this, &error); // TODO
+	if (!client) {
+		// TODO
+		std::cerr << "Avahi Error: " << avahi_strerror(error) << std::endl;
+		return;
+	}
+	avahi_threaded_poll_start(threadedPoll);
+}
+
+void AvahiQuerier::stop() {
+	assert(threadedPoll);
+	avahi_threaded_poll_stop(threadedPoll);
+	assert(client);
+	avahi_client_free(client);
+	avahi_threaded_poll_free(threadedPoll);
+}
+
+}
diff --git a/Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.h b/Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.h
new file mode 100644
index 0000000..ca45384
--- /dev/null
+++ b/Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <boost/shared_ptr.hpp>
+#include <boost/enable_shared_from_this.hpp>
+#include <avahi-client/client.h>
+#include <avahi-client/lookup.h>
+#include <avahi-common/thread-watch.h>
+#include <avahi-common/watch.h>
+#include <avahi-common/malloc.h>
+#include <avahi-common/error.h>
+
+#include "Swiften/LinkLocal/DNSSD/DNSSDQuerier.h"
+
+namespace Swift {
+	class ByteArray;
+
+	class AvahiQuerier : 
+			public DNSSDQuerier, 
+			public boost::enable_shared_from_this<AvahiQuerier> {
+		public:
+			AvahiQuerier();
+			~AvahiQuerier();
+
+			boost::shared_ptr<DNSSDBrowseQuery> createBrowseQuery();
+			boost::shared_ptr<DNSSDRegisterQuery> createRegisterQuery(
+					const String& name, int port, const ByteArray& info);
+			boost::shared_ptr<DNSSDResolveServiceQuery> createResolveServiceQuery(
+					const DNSSDServiceID&);
+			boost::shared_ptr<DNSSDResolveHostnameQuery> createResolveHostnameQuery(
+					const String& hostname, int interfaceIndex);
+
+			void start();
+			void stop();
+
+		private:
+			AvahiClient* client;
+			AvahiThreadedPoll* threadedPoll;
+	};
+}
diff --git a/Swiften/LinkLocal/DNSSD/Avahi/Makefile.inc b/Swiften/LinkLocal/DNSSD/Avahi/Makefile.inc
new file mode 100644
index 0000000..6150dc1
--- /dev/null
+++ b/Swiften/LinkLocal/DNSSD/Avahi/Makefile.inc
@@ -0,0 +1,2 @@
+SWIFTEN_SOURCES += \
+	Swiften/LinkLocal/DNSSD/Avahi/AvahiQuerier.cpp
diff --git a/Swiften/LinkLocal/DNSSD/Makefile.inc b/Swiften/LinkLocal/DNSSD/Makefile.inc
index 3d2c969..f6997ef 100644
--- a/Swiften/LinkLocal/DNSSD/Makefile.inc
+++ b/Swiften/LinkLocal/DNSSD/Makefile.inc
@@ -10,6 +10,7 @@ ifeq ($(HAVE_BONJOUR),yes)
 include Swiften/LinkLocal/DNSSD/Bonjour/Makefile.inc
 endif
 ifeq ($(HAVE_AVAHI),yes)
+include Swiften/LinkLocal/DNSSD/Avahi/Makefile.inc
 endif
 
 include Swiften/LinkLocal/DNSSD/Fake/Makefile.inc
-- 
cgit v0.10.2-6-g49f6