summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-08-13 21:25:09 +0000
committerLennart Poettering <lennart@poettering.net>2005-08-13 21:25:09 +0000
commit4f0a5e7572a4257894b4bfede42c26d65152609e (patch)
tree21e3d5ee20716739590e5931859a4c2052161395 /examples
parentd6d7d3769441b73ffb5b7af34fef823b41e66312 (diff)
* strip glib from avahi-core
* implement glib memory allocator * add new documentation file MALLOC * initialize pseudo-RNG from /dev/urandom in avahi-daemon * remove some gcc 4.0 warnings * beef up watch system with real timeouts * move GCC __attribute__ macros into its own header avahi-common/gccmacro.h * make use of GCC's sentinel attribute where it make sense * add malloc() implementations that abort on OOM and enable them by default git-svn-id: file:///home/lennart/svn/public/avahi/trunk@308 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'examples')
-rw-r--r--examples/browse-services.c104
-rw-r--r--examples/publish-service.c87
2 files changed, 120 insertions, 71 deletions
diff --git a/examples/browse-services.c b/examples/browse-services.c
index f2707fd..472b053 100644
--- a/examples/browse-services.c
+++ b/examples/browse-services.c
@@ -23,46 +23,74 @@
#include <config.h>
#endif
-#include <avahi-core/core.h>
-
-static GMainLoop *main_loop = NULL;
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <time.h>
-static void resolve_callback(AvahiServiceResolver *r, AvahiIfIndex interface, AvahiProtocol protocol, AvahiResolverEvent event, const gchar *name,const gchar *type,const gchar *domain, const gchar *host_name, const AvahiAddress *address, guint16 port, AvahiStringList *txt, gpointer userdata) {
- g_assert(r);
+#include <avahi-core/core.h>
+#include <avahi-common/simple-watch.h>
+#include <avahi-common/malloc.h>
+
+static AvahiSimplePoll *simple_poll = NULL;
+
+static void resolve_callback(
+ AvahiServiceResolver *r,
+ AvahiIfIndex interface,
+ AvahiProtocol protocol,
+ AvahiResolverEvent event,
+ const char *name,
+ const char *type,
+ const char *domain,
+ const char *host_name,
+ const AvahiAddress *address,
+ uint16_t port,
+ AvahiStringList *txt,
+ void* userdata) {
+
+ assert(r);
/* Called whenever a service has been resolved successfully or timed out */
if (event == AVAHI_RESOLVER_TIMEOUT)
- g_message("Failed to resolve service '%s' of type '%s' in domain '%s'.", name, type, domain);
+ fprintf(stderr, "Failed to resolve service '%s' of type '%s' in domain '%s'.\n", name, type, domain);
else {
- gchar a[128], *t;
+ char a[128], *t;
- g_assert(event == AVAHI_RESOLVER_FOUND);
+ assert(event == AVAHI_RESOLVER_FOUND);
- g_message("Service '%s' of type '%s' in domain '%s':", name, type, domain);
+ fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain);
avahi_address_snprint(a, sizeof(a), address);
t = avahi_string_list_to_string(txt);
- g_message("\t%s:%u (%s) TXT=%s", host_name, port, a, t);
- g_free(t);
+ fprintf(stderr, "\t%s:%u (%s) TXT=%s\n", host_name, port, a, t);
+ avahi_free(t);
}
avahi_service_resolver_free(r);
}
-static void browse_callback(AvahiServiceBrowser *b, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const gchar *name, const gchar *type, const gchar *domain, gpointer userdata) {
- g_assert(b);
+static void browse_callback(
+ AvahiServiceBrowser *b,
+ AvahiIfIndex interface,
+ AvahiProtocol protocol,
+ AvahiBrowserEvent event,
+ const char *name,
+ const char *type,
+ const char *domain,
+ void* userdata) {
AvahiServer *s = userdata;
+ assert(b);
/* Called whenever a new services becomes available on the LAN or is removed from the LAN */
- g_message("%s: service '%s' of type '%s' in domain '%s'",
- event == AVAHI_BROWSER_NEW ? "NEW" : "REMOVED",
- name,
- type,
- domain);
-
+ fprintf(stderr, "%s: service '%s' of type '%s' in domain '%s'\n",
+ event == AVAHI_BROWSER_NEW ? "NEW" : "REMOVED",
+ name,
+ type,
+ domain);
+
/* If it's new, let's resolve it */
if (event == AVAHI_BROWSER_NEW)
@@ -71,45 +99,55 @@ static void browse_callback(AvahiServiceBrowser *b, AvahiIfIndex interface, Avah
function is called the server will free the resolver for us. */
if (!(avahi_service_resolver_new(s, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, resolve_callback, s)))
- g_message("Failed to resolve service '%s': %s", name, avahi_strerror(avahi_server_errno(s)));
+ fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_server_errno(s)));
}
int main(int argc, char*argv[]) {
AvahiServerConfig config;
AvahiServer *server = NULL;
AvahiServiceBrowser *sb;
- gint error;
+ int error;
int ret = 1;
+ /* Initialize the psuedo-RNG */
+ srand(time(NULL));
+
+ /* Allocate main loop object */
+ if (!(simple_poll = avahi_simple_poll_new())) {
+ fprintf(stderr, "Failed to create simple poll object.\n");
+ goto fail;
+ }
+
/* Do not publish any local records */
avahi_server_config_init(&config);
- config.publish_hinfo = FALSE;
- config.publish_addresses = FALSE;
- config.publish_workstation = FALSE;
- config.publish_domain = FALSE;
+ config.publish_hinfo = 0;
+ config.publish_addresses = 0;
+ config.publish_workstation = 0;
+ config.publish_domain = 0;
/* Allocate a new server */
- server = avahi_server_new(NULL, &config, NULL, NULL, &error);
+ server = avahi_server_new(avahi_simple_poll_get(simple_poll), &config, NULL, NULL, &error);
/* Free the configuration data */
avahi_server_config_free(&config);
/* Check wether creating the server object succeeded */
if (!server) {
- g_message("Failed to create server: %s", avahi_strerror(error));
+ fprintf(stderr, "Failed to create server: %s\n", avahi_strerror(error));
goto fail;
}
/* Create the service browser */
if (!(sb = avahi_service_browser_new(server, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, browse_callback, server))) {
- g_message("Failed to create service browser: %s", avahi_strerror(avahi_server_errno(server)));
+ fprintf(stderr, "Failed to create service browser: %s\n", avahi_strerror(avahi_server_errno(server)));
goto fail;
}
/* Run the main loop */
- main_loop = g_main_loop_new(NULL, FALSE);
- g_main_loop_run(main_loop);
-
+ for (;;)
+ if (avahi_simple_poll_iterate(simple_poll, -1) != 0)
+ break;
+
ret = 0;
fail:
@@ -121,8 +159,8 @@ fail:
if (server)
avahi_server_free(server);
- if (main_loop)
- g_main_loop_unref(main_loop);
+ if (simple_poll)
+ avahi_simple_poll_free(simple_poll);
return ret;
}
diff --git a/examples/publish-service.c b/examples/publish-service.c
index 37ecc02..4a78402 100644
--- a/examples/publish-service.c
+++ b/examples/publish-service.c
@@ -26,34 +26,37 @@
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
+#include <assert.h>
#include <avahi-core/core.h>
+#include <avahi-common/simple-watch.h>
+#include <avahi-common/malloc.h>
static AvahiEntryGroup *group = NULL;
-static GMainLoop *main_loop = NULL;
-static gchar *name = NULL;
+static AvahiSimplePoll *simple_poll = NULL;
+static char *name = NULL;
static void create_services(AvahiServer *s);
-static void entry_group_callback(AvahiServer *s, AvahiEntryGroup *g, AvahiEntryGroupState state, gpointer userdata) {
- g_assert(s);
- g_assert(g == group);
+static void entry_group_callback(AvahiServer *s, AvahiEntryGroup *g, AvahiEntryGroupState state, void *userdata) {
+ assert(s);
+ assert(g == group);
/* Called whenever the entry group state changes */
if (state == AVAHI_ENTRY_GROUP_ESTABLISHED)
/* The entry group has been established successfully */
- g_message("Service '%s' successfully established.", name);
+ fprintf(stderr, "Service '%s' successfully established.\n", name);
else if (state == AVAHI_ENTRY_GROUP_COLLISION) {
- gchar *n;
+ char *n;
/* A service name collision happened. Let's pick a new name */
n = avahi_alternative_service_name(name);
- g_free(name);
+ avahi_free(name);
name = n;
- g_message("Service name collision, renaming service to '%s'", name);
+ fprintf(stderr, "Service name collision, renaming service to '%s'\n", name);
/* And recreate the services */
create_services(s);
@@ -61,50 +64,50 @@ static void entry_group_callback(AvahiServer *s, AvahiEntryGroup *g, AvahiEntryG
}
static void create_services(AvahiServer *s) {
- gchar r[128];
- gint ret;
- g_assert(s);
+ char r[128];
+ int ret;
+ assert(s);
/* If this is the first time we're called, let's create a new entry group */
if (!group) {
if (!(group = avahi_entry_group_new(s, entry_group_callback, NULL))) {
- g_message("avahi_entry_group_new() failed: %s", avahi_strerror(avahi_server_errno(s)));
+ fprintf(stderr, "avahi_entry_group_new() failed: %s\n", avahi_strerror(avahi_server_errno(s)));
goto fail;
}
}
- g_message("Adding service '%s'", name);
+ fprintf(stderr, "Adding service '%s'\n", name);
/* Create some random TXT data */
snprintf(r, sizeof(r), "random=%i", rand());
/* Add the service for IPP */
if ((ret = avahi_server_add_service(s, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, name, "_ipp._tcp", NULL, NULL, 651, "test=blah", r, NULL)) < 0) {
- g_message("Failed to add _ipp._tcp service: %s", avahi_strerror(ret));
+ fprintf(stderr, "Failed to add _ipp._tcp service: %s\n", avahi_strerror(ret));
goto fail;
}
/* Add the same service for BSD LPR */
if ((ret = avahi_server_add_service(s, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, name, "_printer._tcp", NULL, NULL, 515, NULL)) < 0) {
- g_message("Failed to add _printer._tcp service: %s", avahi_strerror(ret));
+ fprintf(stderr, "Failed to add _printer._tcp service: %s\n", avahi_strerror(ret));
goto fail;
}
/* Tell the server to register the service */
if ((ret = avahi_entry_group_commit(group)) < 0) {
- g_message("Failed to commit entry_group: %s", avahi_strerror(ret));
+ fprintf(stderr, "Failed to commit entry_group: %s\n", avahi_strerror(ret));
goto fail;
}
return;
fail:
- g_main_loop_quit(main_loop);
+ avahi_simple_poll_quit(simple_poll);
return;
}
-static void server_callback(AvahiServer *s, AvahiServerState state, gpointer userdata) {
- g_assert(s);
+static void server_callback(AvahiServer *s, AvahiServerState state, void * userdata) {
+ assert(s);
/* Called whenever the server state changes */
@@ -114,19 +117,19 @@ static void server_callback(AvahiServer *s, AvahiServerState state, gpointer use
create_services(s);
else if (state == AVAHI_SERVER_COLLISION) {
- gchar *n;
- gint r;
+ char *n;
+ int r;
/* A host name collision happened. Let's pick a new name for the server */
n = avahi_alternative_host_name(avahi_server_get_host_name(s));
- g_message("Host name collision, retrying with '%s'", n);
+ fprintf(stderr, "Host name collision, retrying with '%s'\n", n);
r = avahi_server_set_host_name(s, n);
- g_free(n);
+ avahi_free(n);
if (r < 0) {
- g_message("Failed to set new host name: %s", avahi_strerror(r));
+ fprintf(stderr, "Failed to set new host name: %s\n", avahi_strerror(r));
- g_main_loop_quit(main_loop);
+ avahi_simple_poll_quit(simple_poll);
return;
}
@@ -141,34 +144,42 @@ static void server_callback(AvahiServer *s, AvahiServerState state, gpointer use
int main(int argc, char*argv[]) {
AvahiServerConfig config;
AvahiServer *server = NULL;
- gint error;
+ int error;
int ret = 1;
+ /* Initialize the pseudo-RNG */
srand(time(NULL));
+
+ /* Allocate main loop object */
+ if (!(simple_poll = avahi_simple_poll_new())) {
+ fprintf(stderr, "Failed to create simple poll object.\n");
+ goto fail;
+ }
- name = g_strdup("MegaPrinter");
+ name = avahi_strdup("MegaPrinter");
/* Let's set the host name for this server. */
avahi_server_config_init(&config);
- config.host_name = g_strdup("gurkiman");
- config.publish_workstation = FALSE;
+ config.host_name = avahi_strdup("gurkiman");
+ config.publish_workstation = 0;
/* Allocate a new server */
- server = avahi_server_new(NULL, &config, server_callback, NULL, &error);
+ server = avahi_server_new(avahi_simple_poll_get(simple_poll), &config, server_callback, NULL, &error);
/* Free the configuration data */
avahi_server_config_free(&config);
/* Check wether creating the server object succeeded */
if (!server) {
- g_message("Failed to create server: %s", avahi_strerror(error));
+ fprintf(stderr, "Failed to create server: %s", avahi_strerror(error));
goto fail;
}
/* Run the main loop */
- main_loop = g_main_loop_new(NULL, FALSE);
- g_main_loop_run(main_loop);
-
+ for (;;)
+ if (avahi_simple_poll_iterate(simple_poll, -1) != 0)
+ break;
+
ret = 0;
fail:
@@ -180,10 +191,10 @@ fail:
if (server)
avahi_server_free(server);
- if (main_loop)
- g_main_loop_unref(main_loop);
+ if (simple_poll)
+ avahi_simple_poll_free(simple_poll);
- g_free(name);
+ avahi_free(name);
return ret;
}