diff options
Diffstat (limited to 'cast/standalone_receiver/cast_service.cc')
-rw-r--r-- | cast/standalone_receiver/cast_service.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/cast/standalone_receiver/cast_service.cc b/cast/standalone_receiver/cast_service.cc index 0e3d9c9c..92ffce93 100644 --- a/cast/standalone_receiver/cast_service.cc +++ b/cast/standalone_receiver/cast_service.cc @@ -4,12 +4,16 @@ #include "cast/standalone_receiver/cast_service.h" +#include <stdint.h> + +#include <array> #include <utility> #include "discovery/common/config.h" #include "platform/api/tls_connection_factory.h" #include "platform/base/interface_info.h" #include "platform/base/tls_listen_options.h" +#include "util/crypto/random_bytes.h" #include "util/osp_logging.h" #include "util/stringprintf.h" @@ -19,6 +23,7 @@ namespace cast { namespace { constexpr uint16_t kDefaultCastServicePort = 8010; +constexpr int kCastUniqueIdLength = 6; constexpr int kDefaultMaxBacklogSize = 64; const TlsListenOptions kDefaultListenOptions{kDefaultMaxBacklogSize}; @@ -69,8 +74,16 @@ CastService::CastService(CastService::Configuration config) if (discovery_publisher_) { ReceiverInfo info; info.port = local_endpoint_.port; - info.unique_id = HexEncode(config.interface.hardware_address.data(), - config.interface.hardware_address.size()); + if (config.interface.HasHardwareAddress()) { + info.unique_id = HexEncode(config.interface.hardware_address.data(), + config.interface.hardware_address.size()); + } else { + OSP_LOG_WARN << "Hardware address for interface " << config.interface.name + << " is empty. Generating a random unique_id."; + std::array<uint8_t, kCastUniqueIdLength> random_bytes; + GenerateRandomBytes(random_bytes.data(), kCastUniqueIdLength); + info.unique_id = HexEncode(random_bytes.data(), kCastUniqueIdLength); + } info.friendly_name = config.friendly_name; info.model_name = config.model_name; info.capabilities = kHasVideoOutput | kHasAudioOutput; |