Project import generated by Copybara.
GitOrigin-RevId: 7f0284f66b5c113e0e0c1fec8f9f130c10c8fd34
diff --git a/avahi-core/domain-util.c b/avahi-core/domain-util.c
index 936bc07..65aea80 100644
--- a/avahi-core/domain-util.c
+++ b/avahi-core/domain-util.c
@@ -28,6 +28,7 @@
#include <ctype.h>
#include <sys/utsname.h>
#include <stdio.h>
+#include <inttypes.h>
#include <avahi-common/malloc.h>
@@ -84,14 +85,20 @@
}
#endif
-uint32_t random_host_id() {
- static uint32_t random_id = 0;
+// Returns a randomized MAC address.
+uint64_t random_host_id() {
+ const uint64_t kMacAddressMask = 0xFFFFFFFFFFFF;
+ const uint64_t kMacMulticastBit = 0x010000000000;
+ const uint64_t kMacLocalBit = 0x020000000000;
+ static uint64_t random_id = 0;
+
if (!random_id) {
// The random seed has been initialized in avahi-daemon/main.c
- random_id = (uint32_t) rand();
+ random_id = (((uint64_t) rand()) << 32) | (uint64_t) rand();
if (!random_id) {
random_id = 1;
}
+ random_id = (random_id | kMacLocalBit) & (kMacAddressMask & ~kMacMulticastBit);
}
return random_id;
}
@@ -100,55 +107,8 @@
assert(ret_s);
assert(size > 0);
- if (gethostname(ret_s, size) >= 0) {
- ret_s[size-1] = 0;
- strip_bad_chars(ret_s);
- } else
- *ret_s = 0;
-
- if (strcmp(ret_s, "localhost") == 0 || strncmp(ret_s, "localhost.", 10) == 0) {
- *ret_s = 0;
- avahi_log_warn("System host name is set to 'localhost'. This is not a suitable mDNS host name, looking for alternatives.");
- }
-
- if (*ret_s == 0) {
- /* No hostname was set, so let's take the OS name */
-
-#ifdef __linux__
-
- /* Try LSB distribution name first */
- if (load_lsb_distrib_id(ret_s, size) >= 0) {
- strip_bad_chars(ret_s);
- avahi_strdown(ret_s);
- }
-
- if (*ret_s == 0)
-#endif
-
- {
- /* Try uname() second */
- struct utsname utsname;
-
- if (uname(&utsname) >= 0) {
- snprintf(ret_s, size, "%s", utsname.sysname);
- strip_bad_chars(ret_s);
- avahi_strdown(ret_s);
- }
-
- /* Give up */
- if (*ret_s == 0)
- snprintf(ret_s, size, "unnamed");
- }
- }
-
- /* Append random host ID */
- {
- size_t len;
- len = strlen(ret_s);
- if (size > len) {
- snprintf(ret_s + len, size - len, "-%x", random_host_id());
- }
- }
+ // For Matter spec compliance, we use a host name in the form of a MAC address.
+ snprintf(ret_s, size, "%012" PRIX64 , random_host_id());
if (size >= AVAHI_LABEL_MAX)
ret_s[AVAHI_LABEL_MAX-1] = 0;
diff --git a/avahi-glib/Android.mk b/avahi-glib/Android.mk
new file mode 100644
index 0000000..eb26e48
--- /dev/null
+++ b/avahi-glib/Android.mk
@@ -0,0 +1,55 @@
+LOCAL_PATH:=$(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:=libavahi-glib
+
+LOCAL_SRC_FILES := \
+ glib-watch.c \
+ glib-malloc.c
+
+LOCAL_SHARED_LIBRARIES:=\
+ libavahi-common \
+ libglib
+
+LOCAL_CFLAGS := \
+ -DHAVE_CONFIG_H \
+ -g \
+ -O2 \
+ -fstack-protector \
+ -std=c99 \
+ -Wall \
+ -W \
+ -Wextra \
+ -pedantic \
+ -pipe \
+ -Wformat \
+ -Wold-style-definition \
+ -Wdeclaration-after-statement \
+ -Wfloat-equal \
+ -Wmissing-declarations \
+ -Wmissing-prototypes \
+ -Wstrict-prototypes \
+ -Wredundant-decls \
+ -Wmissing-noreturn \
+ -Wshadow \
+ -Wendif-labels \
+ -Wpointer-arith \
+ -Wbad-function-cast \
+ -Wcast-qual \
+ -Wcast-align \
+ -Wwrite-strings \
+ -fdiagnostics-show-option \
+ -Wno-cast-qual \
+ -fno-strict-aliasing \
+ -DDEBUG_TRAP=__asm__\(\"int\ $3\"\)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH) \
+ external/avahi \
+ /usr/include/glib
+
+LOCAL_PRELINK_MODULE := false
+
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/..
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/avahi-glib/NOTICE b/avahi-glib/NOTICE
new file mode 120000
index 0000000..7e1b82f
--- /dev/null
+++ b/avahi-glib/NOTICE
@@ -0,0 +1 @@
+../NOTICE
\ No newline at end of file