]> git.meshlink.io Git - catta/commitdiff
* doxygen documentation updates
authorLennart Poettering <lennart@poettering.net>
Sun, 14 Aug 2005 02:33:41 +0000 (02:33 +0000)
committerLennart Poettering <lennart@poettering.net>
Sun, 14 Aug 2005 02:33:41 +0000 (02:33 +0000)
* make AvahiPoll objects const
* make poll() functions pluggable in AvahiSimplePoll

git-svn-id: file:///home/lennart/svn/public/avahi/trunk@314 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe

16 files changed:
avahi-common/alternative.h
avahi-common/gccmacro.h
avahi-common/simple-watch.c
avahi-common/simple-watch.h
avahi-common/watch-test.c
avahi-common/watch.h
avahi-core/core.h
avahi-core/netlink.c
avahi-core/netlink.h
avahi-core/server.c
avahi-core/server.h
avahi-core/timeeventq.c
avahi-core/timeeventq.h
avahi-glib/glib-watch-test.c
avahi-glib/glib-watch.c
avahi-glib/glib-watch.h

index 3d7b2fe70549ce12bc8cc939ecba8fb10c587e5a..fa45d96192abe76fb0afa9b02e58c0cac640acd4 100644 (file)
   USA.
 ***/
 
-#include <avahi-common/cdecl.h>
-
 /** \file alternative.h Functions to find alternative names for hosts and services in the case of name collision */
 
+#include <avahi-common/cdecl.h>
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_BEGIN
+#endif
 
 /** Find an alternative for the specified host name. If called with an
  * original host name, "2" is appended, Afterwards the number is
  * increased on each call. (i.e. "foo" becomes "foo2" becomes "foo3"
- * and so on.) g_free() the result. */
+ * and so on.) avahi_free() the result. */
 char *avahi_alternative_host_name(const char *s);
 
 /** Find an alternative for the specified service name. If called with
     an original service name, " #2" is appended. Afterwards the number
     is increased on each call (i.e. "foo" becomes "foo #2" becomes
-    "foo #3" and so on.) g_free() the result. */
+    "foo #3" and so on.) avahi_free() the result. */
 char *avahi_alternative_service_name(const char *s);
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_END
+#endif
 
 #endif
index 42fb15341cc54d124ec99282d32ba39c3c820842..2ac6c1d811c79377562dd5a3a6ba6606cbeea3da 100644 (file)
   USA.
 ***/
 
+/** \file gccmacro.h Defines some macros for GCC extensions */
+
 #ifdef __GNUC__
 #define AVAHI_GCC_SENTINEL __attribute__ ((sentinel))
 #else
+/** Macro for usage of GCC's sentinel compilation warnings */
 #define AVAHI_GCC_SENTINEL
 #endif
 
 #define AVAHI_GCC_PRINTF_ATTR(a,b)
 #endif
 
+/** Same as AVAHI_GCC_PRINTF_ATTR but hard coded to arguments 1 and 2 */
 #define AVAHI_GCC_PRINTF_ATTR12 AVAHI_GCC_PRINTF_ATTR(1,2)
+
+/** Same as AVAHI_GCC_PRINTF_ATTR but hard coded to arguments 2 and 3 */
 #define AVAHI_GCC_PRINTF_ATTR23 AVAHI_GCC_PRINTF_ATTR(2,3)
 
 #ifdef __GNUC__
 #define AVAHI_GCC_NORETURN __attribute__((noreturn))
 #else
+/** Macro for no-return functions */
 #define AVAHI_GCC_NORETURN
 #endif
 
index 3caf3718357febb30ea90cb5bc83af9e664935b7..5e03fe44219d60921b347e99bd614356b037264d 100644 (file)
@@ -46,6 +46,7 @@ struct AvahiWatch {
 
 struct AvahiSimplePoll {
     AvahiPoll api;
+    AvahiPollFunc poll_func;
 
     struct pollfd* pollfds;
     int n_pollfds, max_pollfds, rebuild_pollfds;
@@ -62,7 +63,7 @@ struct AvahiSimplePoll {
     AVAHI_LLIST_HEAD(AvahiWatch, watches);
 };
 
-static AvahiWatch* watch_new(AvahiPoll *api, int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void *userdata) {
+static AvahiWatch* watch_new(const AvahiPoll *api, int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void *userdata) {
     AvahiWatch *w;
     AvahiSimplePoll *s;
     
@@ -142,7 +143,7 @@ static void watch_free(AvahiWatch *w) {
     w->simple_poll->req_cleanup = 1;
 }
 
-static void set_wakeup(AvahiPoll *api, const struct timeval *tv, AvahiWakeupCallback callback, void *userdata) {
+static void set_wakeup(const AvahiPoll *api, const struct timeval *tv, AvahiWakeupCallback callback, void *userdata) {
     AvahiSimplePoll *s;
 
     assert(api);
@@ -207,6 +208,8 @@ AvahiSimplePoll *avahi_simple_poll_new(void) {
     s->n_watches = 0;
     s->req_cleanup = 0;
 
+    avahi_simple_poll_set_func(s, NULL);
+
     AVAHI_LLIST_HEAD_INIT(AvahiWatch, s->watches);
 
     return s;
@@ -315,7 +318,7 @@ int avahi_simple_poll_iterate(AvahiSimplePoll *s, int timeout) {
             timeout = t;
     }
 
-    if ((r = poll(s->pollfds, s->n_pollfds, timeout)) < 0)
+    if ((r = s->poll_func(s->pollfds, s->n_pollfds, timeout)) < 0)
         return -1;
 
     /* Check whether the wakeup time has been reached now */
@@ -359,8 +362,14 @@ void avahi_simple_poll_quit(AvahiSimplePoll *w) {
     w->quit = 1;
 }
 
-AvahiPoll* avahi_simple_poll_get(AvahiSimplePoll *s) {
+const AvahiPoll* avahi_simple_poll_get(AvahiSimplePoll *s) {
     assert(s);
     
     return &s->api;
 }
+
+void avahi_simple_poll_set_func(AvahiSimplePoll *s, AvahiPollFunc func) {
+    assert(s);
+
+    s->poll_func = func ? func : (AvahiPollFunc) poll;
+}
index 127ddc540d28607ce4a2ff09592f075b8de76594..c8234f20cf340e735859c08daf39c0bba4293724 100644 (file)
   USA.
 ***/
 
+/** \file simple-watch.h Simple poll() based main loop implementation */
+
+#include <sys/poll.h>
 #include <avahi-common/cdecl.h>
 
 #include "watch.h"
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_BEGIN
+#endif
 
+/** A main loop object. Main loops of this type aren't very flexible
+ * since they only support a single wakeup type. Nevertheless it
+ * should suffice for small test and example applications.  */
 typedef struct AvahiSimplePoll AvahiSimplePoll;
 
+/** Create a new main loop object */
 AvahiSimplePoll *avahi_simple_poll_new(void);
+
+/** Free a main loop object */
 void avahi_simple_poll_free(AvahiSimplePoll *s);
 
-AvahiPoll* avahi_simple_poll_get(AvahiSimplePoll *s);
+/** Return the abstracted poll API object for this main loop
+ * object. The is will return the same pointer each time it is
+ * called. */
+const AvahiPoll* avahi_simple_poll_get(AvahiSimplePoll *s);
 
+/** Run a single main loop iteration of this main loop. If sleep_time
+is < 0 this will block until any of the registered events happens,
+then it will execute the attached callback function. If sleep_time is
+0 the routine just checks if any event is pending. If yes the attached
+callback function is called, otherwise the function returns
+immediately. If sleep_time > 0 the function will block for at most the
+specified time in msecs. Returns -1 on error, 0 on success and 1 if a
+quit request has been scheduled. Usually this function should be called
+in a loop until it returns a non-zero value*/
 int avahi_simple_poll_iterate(AvahiSimplePoll *s, int sleep_time);
 
+/** Request that the main loop quits. If this is called the next
+ call to avahi_simple_poll_iterate() will return 1 */
 void avahi_simple_poll_quit(AvahiSimplePoll *s);
 
+/** Prototype for a poll() type function */
+typedef int (*AvahiPollFunc)(struct pollfd *ufds, unsigned int nfds, int timeout);
+
+/** Replace the internally used poll() function. By default the system's poll() will be used */
+void avahi_simple_poll_set_func(AvahiSimplePoll *s, AvahiPollFunc func);
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_END
+#endif
 
 #endif
index af46805cdde0fd3739747f57f2889aeb29ad7ef8..a9e3e0285c8d0fca272f059607fed6c820855afb 100644 (file)
@@ -33,7 +33,7 @@
 #include "simple-watch.h"
 #include "timeval.h"
 
-static AvahiPoll *api = NULL;
+static const AvahiPoll *api = NULL;
 static AvahiSimplePoll *simple_poll = NULL;
 
 static void callback(AvahiWatch *w, int fd, AvahiWatchEvent event, void *userdata) {
index 70dedb73c806de36197af35ec6f039638ffaf57c..75f53b36db2a1bad0a982a5ee53c6db4818416f9 100644 (file)
   USA.
 ***/
 
+/** \file watch.h Simplistic main loop abstraction */
+
 #include <sys/poll.h>
 #include <avahi-common/cdecl.h>
 
 #include "timeval.h"
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_BEGIN
+#endif
 
+/** An I/O watch object */
 typedef struct AvahiWatch AvahiWatch;
+
+/** An event polling abstraction object */
 typedef struct AvahiPoll AvahiPoll;
 
+/** Type of watch events */
 typedef enum {
-    AVAHI_WATCH_IN = POLLIN,
-    AVAHI_WATCH_OUT = POLLOUT,
-    AVAHI_WATCH_ERR = POLLERR,
-    AVAHI_WATCH_HUP = POLLHUP
+    AVAHI_WATCH_IN = POLLIN,      /** Input event */
+    AVAHI_WATCH_OUT = POLLOUT,    /** Output event */
+    AVAHI_WATCH_ERR = POLLERR,    /** Error event */
+    AVAHI_WATCH_HUP = POLLHUP     /** Hangup event */
 } AvahiWatchEvent;
 
+/** Called whenever an I/O event happens  on an I/O watch */
 typedef void (*AvahiWatchCallback)(AvahiWatch *w, int fd, AvahiWatchEvent event, void *userdata);
+
+/** Called when the wakeup time is reached */
 typedef void (*AvahiWakeupCallback)(AvahiPoll *api, void *userdata);
 
+/** Defines an abstracted event polling API. This may be used to
+ connect Avahi to other main loops. This is losely based on Unix
+ poll(2). A consumer will call watch_new() for all file descriptors it
+ wants to listen for events on. In addition he can call set_wakeup()
+ to define a single wakeup time.*/
 struct AvahiPoll {
-    void* userdata;
-    
-    AvahiWatch* (*watch_new)(AvahiPoll *api, int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void *userdata);
+
+    /** Some abstract user data usable by the implementor of the API */
+    void* userdata; 
+
+    /** Create a new watch for the specified file descriptor and for
+     * the specified events. The API will call the callback function
+     * whenever any of the events happens. */
+    AvahiWatch* (*watch_new)(const AvahiPoll *api, int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void *userdata);
+
+    /** Update the events to wait for. */
     void (*watch_update)(AvahiWatch *w, AvahiWatchEvent event);
+
+    /** Free a watch */
     void (*watch_free)(AvahiWatch *w);
-    
-    void (*set_wakeup)(AvahiPoll *api, const struct timeval *tv, AvahiWakeupCallback callback, void *userdata);
+
+    /** Set a wakeup time for the polling loop. The API will call the
+    callback function when the absolute time *tv is reached. If *tv is
+    NULL, the callback will be called in the next main loop
+    iteration. If callback is NULL the wakeup time is disabled. */
+    void (*set_wakeup)(const AvahiPoll *api, const struct timeval *tv, AvahiWakeupCallback callback, void *userdata);
 };
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_END
+#endif
 
 #endif
 
index 1f2dda951c627ef33538673ecd41304cec0261fb..b8ee91a646f9373ae174399953f236211793e8f2 100644 (file)
@@ -91,7 +91,7 @@ typedef struct AvahiServerConfig {
 
 /** Allocate a new mDNS responder object. */
 AvahiServer *avahi_server_new(
-    AvahiPoll *api,                /**< The main loop adapter */
+    const AvahiPoll *api,          /**< The main loop adapter */
     const AvahiServerConfig *sc,   /**< If non-NULL a pointer to a configuration structure for the server. The server makes an internal deep copy of this structure, so you may free it using avahi_server_config_done() immediately after calling this function. */
     AvahiServerCallback callback,  /**< A callback which is called whenever the state of the server changes */
     void* userdata,                /**< An opaque pointer which is passed to the callback function */
index 92d614fc8df7bea8941a74bccf415d515f5b9dde..c5afde90df5b1b15978993f0e3ca68bf17543293 100644 (file)
@@ -41,7 +41,7 @@ struct AvahiNetlink {
     uint8_t* buffer;
     size_t buffer_length;
 
-    AvahiPoll *poll_api;
+    const AvahiPoll *poll_api;
     AvahiWatch *watch;
 };
 
@@ -93,7 +93,7 @@ static void socket_event(AvahiWatch *w, int fd, AvahiWatchEvent event, void *use
     avahi_netlink_work(nl, 0);
 }
 
-AvahiNetlink *avahi_netlink_new(AvahiPoll *poll_api, uint32_t groups, void (*cb) (AvahiNetlink *nl, struct nlmsghdr *n, void* userdata), void* userdata) {
+AvahiNetlink *avahi_netlink_new(const AvahiPoll *poll_api, uint32_t groups, void (*cb) (AvahiNetlink *nl, struct nlmsghdr *n, void* userdata), void* userdata) {
     int fd = -1;
     struct sockaddr_nl addr;
     AvahiNetlink *nl = NULL;
index 4768b6e963cddc5cd1ee21411e2c2b446ac97664..78f92d81dff9f2f40a226ae049788262b4baae65 100644 (file)
@@ -32,7 +32,7 @@ typedef struct AvahiNetlink AvahiNetlink;
 
 typedef void (*AvahiNetlinkCallback)(AvahiNetlink *n, struct nlmsghdr *m, void* userdata);
 
-AvahiNetlink *avahi_netlink_new(AvahiPoll *poll_api, uint32_t groups, AvahiNetlinkCallback callback, void* userdata);
+AvahiNetlink *avahi_netlink_new(const AvahiPoll *poll_api, uint32_t groups, AvahiNetlinkCallback callback, void* userdata);
 void avahi_netlink_free(AvahiNetlink *n);
 int avahi_netlink_send(AvahiNetlink *n, struct nlmsghdr *m, unsigned *ret_seq);
 int avahi_netlink_work(AvahiNetlink *n, int block);
index ca5da5d1161940cc06b3f94d5264efbdf9850a1f..40ef6166d8d911006b4aad2748aafc826033660a 100644 (file)
@@ -1301,7 +1301,7 @@ static int setup_sockets(AvahiServer *s) {
     return 0;
 }
 
-AvahiServer *avahi_server_new(AvahiPoll *poll_api, const AvahiServerConfig *sc, AvahiServerCallback callback, void* userdata, int *error) {
+AvahiServer *avahi_server_new(const AvahiPoll *poll_api, const AvahiServerConfig *sc, AvahiServerCallback callback, void* userdata, int *error) {
     AvahiServer *s;
     int e;
     
index 3630d1e7fe18f8967e24b34ef0a9633264a98199..6ceab429c771db674a60ca016d2af1667f5e8397 100644 (file)
@@ -90,7 +90,7 @@ struct AvahiSEntryGroup {
 };
 
 struct AvahiServer {
-    AvahiPoll *poll_api;
+    const AvahiPoll *poll_api;
     
     AvahiInterfaceMonitor *monitor;
     AvahiServerConfig config;
index b069ffd14cb2ea23a0441ffd5a5a2b6b2ad1167f..bb9a5cd4e6c439c579c4745fcb77a4ee313d9e69 100644 (file)
@@ -42,7 +42,7 @@ struct AvahiTimeEvent {
 };
 
 struct AvahiTimeEventQueue {
-    AvahiPoll *poll_api;
+    const AvahiPoll *poll_api;
     AvahiPrioQueue *prioq;
 };
 
@@ -105,7 +105,7 @@ static void fix_expiry_time(AvahiTimeEvent *e) {
         e->expiry = now;
 }
 
-AvahiTimeEventQueue* avahi_time_event_queue_new(AvahiPoll *poll_api) {
+AvahiTimeEventQueue* avahi_time_event_queue_new(const AvahiPoll *poll_api) {
     AvahiTimeEventQueue *q;
 
     if (!(q = avahi_new(AvahiTimeEventQueue, 1))) {
index b99c81f0e4378b0e22a48c693878145573abc55d..5705eb9c1a533f882281367e84dde5dcb55e42f2 100644 (file)
@@ -33,7 +33,7 @@ typedef struct AvahiTimeEvent AvahiTimeEvent;
 
 typedef void (*AvahiTimeEventCallback)(AvahiTimeEvent *e, void* userdata);
 
-AvahiTimeEventQueue* avahi_time_event_queue_new(AvahiPoll *poll_api);
+AvahiTimeEventQueue* avahi_time_event_queue_new(const AvahiPoll *poll_api);
 void avahi_time_event_queue_free(AvahiTimeEventQueue *q);
 
 AvahiTimeEvent* avahi_time_event_new(
index bd111dd77aa16f21506e8ef947f6df333461f94e..17b334d8ab7381358cd5f6d89789a12fae492aea 100644 (file)
@@ -33,7 +33,7 @@
 #include <avahi-common/timeval.h>
 #include "glib-watch.h"
 
-static AvahiPoll *api = NULL;
+static const AvahiPoll *api = NULL;
 static GMainLoop *loop = NULL;
 
 static void callback(AvahiWatch *w, int fd, AvahiWatchEvent event, void *userdata) {
index 4af23907f301c2bebc8cef2ff0653ca179e095de..f099e5a187904039666fb303a11c1261d1c6d614 100644 (file)
@@ -78,7 +78,7 @@ static void cleanup(AvahiGLibPoll *g, int all) {
     g->req_cleanup = 0;
 }
 
-static AvahiWatch* watch_new(AvahiPoll *api, int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void *userdata) {
+static AvahiWatch* watch_new(const AvahiPoll *api, int fd, AvahiWatchEvent event, AvahiWatchCallback callback, void *userdata) {
     AvahiWatch *w;
     AvahiGLibPoll *g;
     
@@ -132,7 +132,7 @@ static void watch_free(AvahiWatch *w) {
     w->glib_poll->req_cleanup = 1;
 }
 
-static void set_wakeup(AvahiPoll *api, const struct timeval *tv, AvahiWakeupCallback callback, void *userdata) {
+static void set_wakeup(const AvahiPoll *api, const struct timeval *tv, AvahiWakeupCallback callback, void *userdata) {
     AvahiGLibPoll *g;
 
     assert(api);
@@ -299,7 +299,7 @@ void avahi_glib_poll_free(AvahiGLibPoll *g) {
 /*     g_message("AFTER"); */
 }
 
-AvahiPoll* avahi_glib_poll_get(AvahiGLibPoll *g) {
+const AvahiPoll* avahi_glib_poll_get(AvahiGLibPoll *g) {
     assert(g);
 
     return &g->api;
index 9e6bd68b9dff6c331f8a2dba46672f9602e137cc..4fa8a3bf058377ebeee93e8a33fbf3d62195b482 100644 (file)
   USA.
 ***/
 
+/** \file glib-watch.h GLib's memory allocator for Avahi */
+
 #include <glib.h>
 
 #include <avahi-common/cdecl.h>
 #include <avahi-common/watch.h>
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_BEGIN
+#endif
 
+/** GLib main loop adapter */
 typedef struct AvahiGLibPoll AvahiGLibPoll;
 
+/** Create a new GLib main loop adapter attached to the specified
+ context. If context is NULL, the default main loop context is
+ used. You can attach as many AvahiGLibPoll objects to the same context
+ as you want. */
 AvahiGLibPoll *avahi_glib_poll_new(GMainContext *context);
+
+/** Free  GLib main loop adapter */
 void avahi_glib_poll_free(AvahiGLibPoll *g);
-AvahiPoll* avahi_glib_poll_get(AvahiGLibPoll *g);
 
+/** Return the abstract poll API structure for this object. This will
+ * return the same pointer to a internally allocated structure on each
+ * call */
+const AvahiPoll *avahi_glib_poll_get(AvahiGLibPoll *g);
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 AVAHI_C_DECL_END
+#endif
 
 #endif