]> git.meshlink.io Git - catta/commitdiff
Add new flag AVAHI_PUBLISH_IS_PROXY and activate it for static services with a host...
authorLennart Poettering <lennart@poettering.net>
Thu, 29 Sep 2005 22:37:27 +0000 (22:37 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 29 Sep 2005 22:37:27 +0000 (22:37 +0000)
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@658 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe

avahi-common/defs.h
avahi-core/server.c
avahi-daemon/static-services.c

index 06b48a6acee1673be5538eb2e92adb96c40f5c93..4da597cf9ca8ff51087c03a0ef8792b08ae5f26c 100644 (file)
@@ -156,11 +156,12 @@ typedef enum {
 typedef enum {
     AVAHI_PUBLISH_NULL = 0,          
     AVAHI_PUBLISH_UNIQUE = 1,           /**< For raw records: The RRset is intended to be unique */
-    AVAHI_PUBLISH_NO_PROBE = 2,          /**< For raw records: Though the RRset is intended to be unique no probes shall be sent */
-    AVAHI_PUBLISH_NO_ANNOUNCE = 4,       /**< For raw records: Do not announce this RR to other hosts */
-    AVAHI_PUBLISH_ALLOW_MULTIPLE = 8,     /**< For raw records: Allow multiple local records of this type, even if they are intended to be unique */
+    AVAHI_PUBLISH_NO_PROBE = 2,         /**< For raw records: Though the RRset is intended to be unique no probes shall be sent */
+    AVAHI_PUBLISH_NO_ANNOUNCE = 4,      /**< For raw records: Do not announce this RR to other hosts */
+    AVAHI_PUBLISH_ALLOW_MULTIPLE = 8,   /**< For raw records: Allow multiple local records of this type, even if they are intended to be unique */
     AVAHI_PUBLISH_NO_REVERSE = 16,      /**< For address records: don't create a reverse (PTR) entry */
-    AVAHI_PUBLISH_NO_COOKIE = 32        /**< For service records: do not implicitly add the local service cookie to TXT data */
+    AVAHI_PUBLISH_NO_COOKIE = 32,       /**< For service records: do not implicitly add the local service cookie to TXT data */
+    AVAHI_PUBLISH_IS_PROXY = 64         /**< For service records: this is a proxy for another host. This modifies behaviour of avahi_server_is_service_local() */
 } AvahiPublishFlags;
 
 /** Some flags for lookup functions */
@@ -186,7 +187,7 @@ typedef enum {
     AVAHI_BROWSER_REMOVE,            /**< The object has been removed from the network */
     AVAHI_BROWSER_CACHE_EXHAUSTED,   /**< One-time event, to notify the user that all entries from the caches have been send */
     AVAHI_BROWSER_ALL_FOR_NOW,       /**< One-time event, to notify the user that more records will probably not show up in the near future, i.e. all cache entries have been read and all static servers been queried */
-    AVAHI_BROWSER_NOT_FOUND,      /**< Issued when using wide area DNS-SD to inform that a record is not existing */
+    AVAHI_BROWSER_NOT_FOUND,         /**< Issued when using wide area DNS-SD to inform that a record is not existing */
     AVAHI_BROWSER_FAILURE            /**< Issued when using wide area DNS-SD to inform about server failures */
 } AvahiBrowserEvent;
 
index cdf31e82d2e448a8173513c303eae2e1bd1ae16e..6d076d01e23a7e248f359af4fa3c72970d16823a 100644 (file)
@@ -1582,7 +1582,7 @@ int avahi_server_add(
     if (!AVAHI_PROTO_VALID(protocol))
         return avahi_server_set_errno(s, AVAHI_ERR_INVALID_PROTOCOL);
     
-    if (!AVAHI_FLAGS_VALID(flags, AVAHI_PUBLISH_NO_ANNOUNCE|AVAHI_PUBLISH_NO_PROBE|AVAHI_PUBLISH_UNIQUE|AVAHI_PUBLISH_ALLOW_MULTIPLE))
+    if (!AVAHI_FLAGS_VALID(flags, AVAHI_PUBLISH_NO_ANNOUNCE|AVAHI_PUBLISH_NO_PROBE|AVAHI_PUBLISH_UNIQUE|AVAHI_PUBLISH_ALLOW_MULTIPLE|AVAHI_PUBLISH_IS_PROXY))
         return avahi_server_set_errno(s, AVAHI_ERR_INVALID_FLAGS);
     
     if (!avahi_is_valid_domain_name(r->key->name))
@@ -1962,7 +1962,7 @@ static int server_add_service_strlst_nocopy(
     if (!AVAHI_PROTO_VALID(protocol))
         return avahi_server_set_errno(s, AVAHI_ERR_INVALID_PROTOCOL);
     
-    if (!AVAHI_FLAGS_VALID(flags, AVAHI_PUBLISH_NO_COOKIE))
+    if (!AVAHI_FLAGS_VALID(flags, AVAHI_PUBLISH_NO_COOKIE|AVAHI_PUBLISH_IS_PROXY))
         return avahi_server_set_errno(s, AVAHI_ERR_INVALID_FLAGS);
 
     if (!avahi_is_valid_service_name(name))
@@ -1995,7 +1995,7 @@ static int server_add_service_strlst_nocopy(
     snprintf(ptr_name, sizeof(ptr_name), "%s.%s", t, d);
     snprintf(svc_name, sizeof(svc_name), "%s.%s.%s", ename, t, d);
 
-    if ((ret = avahi_server_add_ptr(s, g, interface, protocol, 0, AVAHI_DEFAULT_TTL, ptr_name, svc_name)) < 0)
+    if ((ret = avahi_server_add_ptr(s, g, interface, protocol, flags & AVAHI_PUBLISH_IS_PROXY, AVAHI_DEFAULT_TTL, ptr_name, svc_name)) < 0)
         goto fail;
 
     if (!(r = avahi_record_new_full(svc_name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_SRV, AVAHI_DEFAULT_TTL_HOST_NAME))) {
@@ -2008,7 +2008,7 @@ static int server_add_service_strlst_nocopy(
     r->data.srv.port = port;
     r->data.srv.name = h;
     h = NULL;
-    ret = avahi_server_add(s, g, interface, protocol, AVAHI_PUBLISH_UNIQUE, r);
+    ret = avahi_server_add(s, g, interface, protocol, (flags & AVAHI_PUBLISH_IS_PROXY) | AVAHI_PUBLISH_UNIQUE, r);
     avahi_record_unref(r);
 
     if (ret < 0)
@@ -2017,14 +2017,14 @@ static int server_add_service_strlst_nocopy(
     if (!(flags & AVAHI_PUBLISH_NO_COOKIE))
         strlst = add_magic_cookie(s, strlst);
     
-    ret = server_add_txt_strlst_nocopy(s, g, interface, protocol, AVAHI_PUBLISH_UNIQUE, AVAHI_DEFAULT_TTL, svc_name, strlst);
+    ret = server_add_txt_strlst_nocopy(s, g, interface, protocol, (flags & AVAHI_PUBLISH_IS_PROXY) | AVAHI_PUBLISH_UNIQUE, AVAHI_DEFAULT_TTL, svc_name, strlst);
     strlst = NULL;
 
     if (ret < 0)
         goto fail;
 
     snprintf(enum_ptr, sizeof(enum_ptr), "_services._dns-sd._udp.%s", d);
-    ret = avahi_server_add_ptr(s, g, interface, protocol, 0, AVAHI_DEFAULT_TTL, enum_ptr, ptr_name);
+    ret = avahi_server_add_ptr(s, g, interface, protocol, (flags & AVAHI_PUBLISH_IS_PROXY), AVAHI_DEFAULT_TTL, enum_ptr, ptr_name);
 
 fail:
     
@@ -2620,7 +2620,8 @@ int avahi_server_is_service_local(AvahiServer *s, AvahiIfIndex interface, AvahiP
     for (e = avahi_hashmap_lookup(s->entries_by_key, key); e; e = e->by_key_next) {
 
         if ((e->interface == interface || e->interface <= 0 || interface <= 0) &&
-            (e->protocol == protocol || e->protocol == AVAHI_PROTO_UNSPEC || protocol == AVAHI_PROTO_UNSPEC)) {
+            (e->protocol == protocol || e->protocol == AVAHI_PROTO_UNSPEC || protocol == AVAHI_PROTO_UNSPEC) &&
+            !(e->flags & AVAHI_PUBLISH_IS_PROXY)) {
             ret = 1;
             break;
         }
index 09777cca847224808f06e21f021a7a8f6161a5d0..36f1608b7556accffe72f4dd9ca860a3a12ad3db 100644 (file)
@@ -222,7 +222,7 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) {
                 avahi_server,
                 g->entry_group,
                 AVAHI_IF_UNSPEC, s->protocol,
-                0, 
+                s->host_name ? AVAHI_PUBLISH_IS_PROXY : 0, 
                 g->chosen_name, s->type, 
                 s->domain_name, s->host_name, s->port,
                 s->txt_records) < 0) {