diff options
author | Christopher Wiley <wiley@chromium.org> | 2014-10-20 07:15:03 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-10-21 00:44:17 +0000 |
commit | cbfcb791091ba16f989cbb3466a9dffe95078ef9 (patch) | |
tree | fee3939d25e7d6777030c379e53d0d4212fb05b3 | |
parent | c5ca71f90957a73e666bd6dba7143ce0444dbdd9 (diff) | |
download | peerd-cbfcb791091ba16f989cbb3466a9dffe95078ef9.tar.gz |
peerd: Add constants related to mDNS service discovery
Also move some constants we reuse in a couple different places out of
service.h and into constants.h. While there, expose the logic to check
if service info is valid. We use this when validating mDNS records.
BUG=chromium:418736
TEST=Exiting unittests pass.
Change-Id: Idcdf87b76efb4d61387e34cc24d5adb7de4106e4
Reviewed-on: https://chromium-review.googlesource.com/224312
Tested-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Christopher Wiley <wiley@chromium.org>
-rw-r--r-- | avahi_service_publisher.cc | 14 | ||||
-rw-r--r-- | constants.cc | 29 | ||||
-rw-r--r-- | constants.h | 33 | ||||
-rw-r--r-- | dbus_constants.cc | 14 | ||||
-rw-r--r-- | dbus_constants.h | 13 | ||||
-rw-r--r-- | manager.cc | 1 | ||||
-rw-r--r-- | manager_unittest.cc | 1 | ||||
-rw-r--r-- | peerd.gyp | 1 | ||||
-rw-r--r-- | service.cc | 6 | ||||
-rw-r--r-- | service.h | 14 |
10 files changed, 106 insertions, 20 deletions
diff --git a/avahi_service_publisher.cc b/avahi_service_publisher.cc index 7cd7584..bff9451 100644 --- a/avahi_service_publisher.cc +++ b/avahi_service_publisher.cc @@ -12,6 +12,7 @@ #include <chromeos/strings/string_utils.h> #include <dbus/bus.h> +#include "peerd/constants.h" #include "peerd/dbus_constants.h" #include "peerd/service.h" @@ -19,7 +20,9 @@ using chromeos::Error; using chromeos::ErrorPtr; using chromeos::dbus_utils::CallMethodAndBlock; using chromeos::dbus_utils::ExtractMethodCallResults; +using chromeos::string_utils::Join; using peerd::constants::kSerbusServiceId; +using peerd::constants::mdns::kSerbusServiceDelimiter; using std::vector; namespace peerd { @@ -235,11 +238,12 @@ bool AvahiServicePublisher::UpdateRootService(ErrorPtr* error) { return success; } Service::ServiceInfo service_info{ - {"ver", "1.0"}, - {"id", uuid_}, - {"note", note_}, - {"name", friendly_name_}, - {"services", chromeos::string_utils::Join('.', services)}, + {constants::mdns::kSerbusVersion, "1.0"}, + {constants::mdns::kSerbusPeerId, uuid_}, + {constants::mdns::kSerbusNote, note_}, + {constants::mdns::kSerbusName, friendly_name_}, + {constants::mdns::kSerbusServiceList, Join(kSerbusServiceDelimiter, + services)}, }; return UpdateGroup(error, kSerbusServiceId, service_info); } diff --git a/constants.cc b/constants.cc new file mode 100644 index 0000000..88f5bdc --- /dev/null +++ b/constants.cc @@ -0,0 +1,29 @@ +// Copyright 2014 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "peerd/constants.h" + +namespace peerd { + +namespace constants { + +const char kSerbusServiceId[] = "serbus"; + +namespace mdns { + +const char kSerbusServiceType[] = "_serbus._tcp"; + +const char kSerbusVersion[] = "ver"; +const char kSerbusPeerId[] = "id"; +const char kSerbusName[] = "name"; +const char kSerbusNote[] = "note"; +const char kSerbusServiceList[] = "services"; + +const char kSerbusServiceDelimiter = '.'; + +} // namespace mdns + +} // namespace constants + +} // namespace peerd diff --git a/constants.h b/constants.h new file mode 100644 index 0000000..9442898 --- /dev/null +++ b/constants.h @@ -0,0 +1,33 @@ +// Copyright 2014 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef PEERD_CONSTANTS_H_ +#define PEERD_CONSTANTS_H_ + +namespace peerd { + +namespace constants { + +extern const char kSerbusServiceId[]; + +namespace mdns { + +// The record type of a serbus record. +extern const char kSerbusServiceType[]; +// Keys inside the Serbus TXT record. +extern const char kSerbusVersion[]; +extern const char kSerbusPeerId[]; +extern const char kSerbusName[]; +extern const char kSerbusNote[]; +extern const char kSerbusServiceList[]; + +extern const char kSerbusServiceDelimiter; + +} // namespace mdns + +} // namespace constants + +} // namespace peerd + +#endif // PEERD_CONSTANTS_H_ diff --git a/dbus_constants.cc b/dbus_constants.cc index e7ce74a..559834d 100644 --- a/dbus_constants.cc +++ b/dbus_constants.cc @@ -48,6 +48,8 @@ const char kServiceName[] = "org.freedesktop.Avahi"; const char kServerInterface[] = "org.freedesktop.Avahi.Server"; const char kServerPath[] = "/"; const char kServerMethodEntryGroupNew[] = "EntryGroupNew"; +const char kServerMethodServiceBrowserNew[] = "ServiceBrowserNew"; +const char kServerMethodServiceResolverNew[] = "ServiceResolverNew"; const char kServerMethodGetHostName[] = "GetHostName"; const char kServerMethodGetState[] = "GetState"; const char kServerSignalStateChanged[] = "StateChanged"; @@ -59,6 +61,18 @@ const char kGroupMethodCommit[] = "Commit"; const char kGroupMethodFree[] = "Free"; const char kGroupMethodReset[]= "Reset"; +const char kServiceBrowserInterface[] = "org.freedesktop.Avahi.ServiceBrowser"; +const char kServiceBrowserMethodFree[] = "Free"; +const char kServiceBrowserSignalItemNew[] = "ItemNew"; +const char kServiceBrowserSignalItemRemove[] = "ItemRemove"; +const char kServiceBrowserSignalFailure[] = "Failure"; + +const char kServiceResolverInterface[] = + "org.freedesktop.Avahi.ServiceResolver"; +const char kServiceResolverMethodFree[] = "Free"; +const char kServiceResolverSignalFound[] = "Found"; +const char kServiceResolverSignalFailure[] = "Failure"; + } // namespace avahi } // namespace dbus_constants diff --git a/dbus_constants.h b/dbus_constants.h index 50f15eb..c202e43 100644 --- a/dbus_constants.h +++ b/dbus_constants.h @@ -57,6 +57,8 @@ extern const char kServiceName[]; extern const char kServerInterface[]; extern const char kServerPath[]; extern const char kServerMethodEntryGroupNew[]; +extern const char kServerMethodServiceBrowserNew[]; +extern const char kServerMethodServiceResolverNew[]; extern const char kServerMethodGetHostName[]; extern const char kServerMethodGetState[]; extern const char kServerSignalStateChanged[]; @@ -68,6 +70,17 @@ extern const char kGroupMethodCommit[]; extern const char kGroupMethodFree[]; extern const char kGroupMethodReset[]; +extern const char kServiceBrowserInterface[]; +extern const char kServiceBrowserMethodFree[]; +extern const char kServiceBrowserSignalItemNew[]; +extern const char kServiceBrowserSignalItemRemove[]; +extern const char kServiceBrowserSignalFailure[]; + +extern const char kServiceResolverInterface[]; +extern const char kServiceResolverMethodFree[]; +extern const char kServiceResolverSignalFound[]; +extern const char kServiceResolverSignalFailure[]; + } // namespace avahi } // namespace dbus_constants @@ -12,6 +12,7 @@ #include <chromeos/dbus/exported_object_manager.h> #include <dbus/object_path.h> +#include "peerd/constants.h" #include "peerd/dbus_constants.h" #include "peerd/ip_addr.h" #include "peerd/peer_manager_impl.h" diff --git a/manager_unittest.cc b/manager_unittest.cc index 912b7d6..8927d9e 100644 --- a/manager_unittest.cc +++ b/manager_unittest.cc @@ -10,6 +10,7 @@ #include <dbus/mock_bus.h> #include <dbus/object_path.h> +#include "peerd/constants.h" #include "peerd/mock_avahi_client.h" #include "peerd/mock_peer_manager.h" #include "peerd/mock_published_peer.h" @@ -15,6 +15,7 @@ 'sources': [ 'avahi_client.cc', 'avahi_service_publisher.cc', + 'constants.cc', 'dbus_constants.cc', 'dbus_data_serialization.cc', 'discovered_peer.cc', @@ -36,12 +36,6 @@ const char kValidServiceInfoKeyCharacters[] = "abcdefghijklmnopqrstuvwxyz" namespace peerd { -namespace constants { - -const char kSerbusServiceId[] = "serbus"; - -} // namespace constants - namespace errors { namespace service { @@ -20,10 +20,6 @@ namespace peerd { -namespace constants { -extern const char kSerbusServiceId[]; -} // namespace constants - namespace errors { namespace service { @@ -40,6 +36,11 @@ class Service { using ServiceInfo = std::map<std::string, std::string>; using IpAddresses = std::vector<ip_addr>; + static bool IsValidServiceId(chromeos::ErrorPtr* error, + const std::string& service_id); + static bool IsValidServiceInfo(chromeos::ErrorPtr* error, + const ServiceInfo& service_info); + // For mDNS we'll encode each key/value pair as an entry in the TXT // record. The max length there is 254 bytes + 1 byte to encode the // length of the key/value. @@ -70,11 +71,6 @@ class Service { const ServiceInfo& info); private: - static bool IsValidServiceId(chromeos::ErrorPtr* error, - const std::string& service_id); - static bool IsValidServiceInfo(chromeos::ErrorPtr* error, - const ServiceInfo& service_info); - chromeos::dbus_utils::ExportedProperty<std::string> service_id_; chromeos::dbus_utils::ExportedProperty<IpAddresses> ip_addresses_; chromeos::dbus_utils::ExportedProperty<ServiceInfo> service_info_; |