#include <arpa/inet.h>
#include <stdlib.h>
-#include "core.h"
-#include "alternative.h"
+#include <avahi-core/core.h>
static AvahiEntryGroup *group = NULL;
static AvahiServer *server = NULL;
return TRUE;
}
-static void subscription(AvahiSubscription *s, AvahiRecord *r, gint interface, guchar protocol, AvahiSubscriptionEvent event, gpointer userdata) {
+static void record_browser_callback(AvahiRecordBrowser *r, gint interface, guchar protocol, AvahiBrowserEvent event, AvahiRecord *record, gpointer userdata) {
gchar *t;
- g_assert(s);
g_assert(r);
+ g_assert(record);
g_assert(interface > 0);
g_assert(protocol != AF_UNSPEC);
- g_message("SUBSCRIPTION: record [%s] on %i.%i is %s", t = avahi_record_to_string(r), interface, protocol,
- event == AVAHI_SUBSCRIPTION_NEW ? "new" : "removed");
+ g_message("SUBSCRIPTION: record [%s] on %i.%i is %s", t = avahi_record_to_string(record), interface, protocol,
+ event == AVAHI_BROWSER_NEW ? "new" : "remove");
g_free(t);
}
-
static void remove_entries(void);
static void create_entries(gboolean new_name);
avahi_entry_group_commit(group);
}
+
+static void hnr_callback(AvahiHostNameResolver *r, gint iface, guchar protocol, AvahiBrowserEvent event, const gchar *hostname, const AvahiAddress *a, gpointer userdata) {
+ gchar t[64];
+
+ if (a)
+ avahi_address_snprint(t, sizeof(t), a);
+
+ g_message("HNR: (%i.%i) <%s> -> %s [%s]", iface, protocol, hostname, a ? t : "n/a", event == AVAHI_RESOLVER_FOUND ? "found" : "timeout");
+}
+
+static void ar_callback(AvahiAddressResolver *r, gint iface, guchar protocol, AvahiBrowserEvent event, const AvahiAddress *a, const gchar *hostname, gpointer userdata) {
+ gchar t[64];
+
+ avahi_address_snprint(t, sizeof(t), a);
+
+ g_message("AR: (%i.%i) %s -> <%s> [%s]", iface, protocol, t, hostname ? hostname : "n/a", event == AVAHI_RESOLVER_FOUND ? "found" : "timeout");
+}
+
+static void db_callback(AvahiDomainBrowser *b, gint iface, guchar protocol, AvahiBrowserEvent event, const gchar *domain, gpointer userdata) {
+
+ g_message("DB: (%i.%i) <%s> [%s]", iface, protocol, domain, event == AVAHI_BROWSER_NEW ? "new" : "remove");
+}
+
+static void stb_callback(AvahiServiceTypeBrowser *b, gint iface, guchar protocol, AvahiBrowserEvent event, const gchar *service_type, const gchar *domain, gpointer userdata) {
+
+ g_message("STB: (%i.%i) %s in <%s> [%s]", iface, protocol, service_type, domain, event == AVAHI_BROWSER_NEW ? "new" : "remove");
+}
+
+static void sb_callback(AvahiServiceBrowser *b, gint iface, guchar protocol, AvahiBrowserEvent event, const gchar *name, const gchar *service_type, const gchar *domain, gpointer userdata) {
+ g_message("SB: (%i.%i) <%s> as %s in <%s> [%s]", iface, protocol, name, service_type, domain, event == AVAHI_BROWSER_NEW ? "new" : "remove");
+}
+
+
+static void sr_callback(AvahiServiceResolver *r, gint iface, guchar protocol, AvahiBrowserEvent event, const gchar *service_name, const gchar*service_type, const gchar*domain_name, const gchar*hostname, const AvahiAddress *a, guint16 port, AvahiStringList *txt, gpointer userdata) {
+
+ if (event == AVAHI_RESOLVER_TIMEOUT)
+ g_message("SR: (%i.%i) <%s> as %s in <%s> [timeout]", iface, protocol, service_name, service_type, domain_name);
+ else {
+ gchar t[64], *s;
+
+ avahi_address_snprint(t, sizeof(t), a);
+
+ s = avahi_string_list_to_string(txt);
+ g_message("SR: (%i.%i) <%s> as %s in <%s>: %s/%s:%i (%s) [found]", iface, protocol, service_name, service_type, domain_name, hostname, t, port, s);
+ g_free(s);
+ }
+}
+
int main(int argc, char *argv[]) {
GMainLoop *loop = NULL;
- AvahiSubscription *s;
+ AvahiRecordBrowser *r;
+ AvahiHostNameResolver *hnr;
+ AvahiAddressResolver *ar;
AvahiKey *k;
AvahiServerConfig config;
+ AvahiAddress a;
+ AvahiDomainBrowser *db;
+ AvahiServiceTypeBrowser *stb;
+ AvahiServiceBrowser *sb;
+ AvahiServiceResolver *sr;
avahi_server_config_init(&config);
- config.host_name = g_strdup("test");
+/* config.host_name = g_strdup("test"); */
server = avahi_server_new(NULL, &config, server_callback, NULL);
avahi_server_config_free(&config);
k = avahi_key_new("_http._tcp.local", AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_PTR);
- s = avahi_subscription_new(server, k, 0, AF_UNSPEC, subscription, NULL);
+ r = avahi_record_browser_new(server, -1, AF_UNSPEC, k, record_browser_callback, NULL);
avahi_key_unref(k);
+ hnr = avahi_host_name_resolver_new(server, -1, AF_UNSPEC, "codes-CompUTER.local", AF_UNSPEC, hnr_callback, NULL);
+
+ ar = avahi_address_resolver_new(server, -1, AF_UNSPEC, avahi_address_parse("192.168.50.15", AF_INET, &a), ar_callback, NULL);
+
+ db = avahi_domain_browser_new(server, -1, AF_UNSPEC, NULL, AVAHI_DOMAIN_BROWSER_BROWSE, db_callback, NULL);
+
+ stb = avahi_service_type_browser_new(server, -1, AF_UNSPEC, NULL, stb_callback, NULL);
+
+ sb = avahi_service_browser_new(server, -1, AF_UNSPEC, "_http._tcp", NULL, sb_callback, NULL);
+
+ sr = avahi_service_resolver_new(server, -1, AF_UNSPEC, "Ecstasy HTTP", "_http._tcp", "local", AF_UNSPEC, sr_callback, NULL);
+
loop = g_main_loop_new(NULL, FALSE);
-/* g_timeout_add(1000*5, dump_timeout, server); */
-/* g_timeout_add(1000*30, quit_timeout, loop); */
+ g_timeout_add(1000*5, dump_timeout, server);
+ g_timeout_add(1000*30, quit_timeout, loop);
g_main_loop_run(loop);
g_main_loop_unref(loop);
- avahi_subscription_free(s);
+ avahi_record_browser_free(r);
+ avahi_host_name_resolver_free(hnr);
+ avahi_address_resolver_free(ar);
+ avahi_service_type_browser_free(stb);
+ avahi_service_browser_free(sb);
+ avahi_service_resolver_free(sr);
if (group)
avahi_entry_group_free(group);