summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Wiley <wiley@chromium.org>2014-10-20 07:15:03 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-10-21 00:44:17 +0000
commitcbfcb791091ba16f989cbb3466a9dffe95078ef9 (patch)
treefee3939d25e7d6777030c379e53d0d4212fb05b3
parentc5ca71f90957a73e666bd6dba7143ce0444dbdd9 (diff)
downloadpeerd-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.cc14
-rw-r--r--constants.cc29
-rw-r--r--constants.h33
-rw-r--r--dbus_constants.cc14
-rw-r--r--dbus_constants.h13
-rw-r--r--manager.cc1
-rw-r--r--manager_unittest.cc1
-rw-r--r--peerd.gyp1
-rw-r--r--service.cc6
-rw-r--r--service.h14
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
diff --git a/manager.cc b/manager.cc
index 965a1a9..1134675 100644
--- a/manager.cc
+++ b/manager.cc
@@ -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"
diff --git a/peerd.gyp b/peerd.gyp
index 52879df..0710307 100644
--- a/peerd.gyp
+++ b/peerd.gyp
@@ -15,6 +15,7 @@
'sources': [
'avahi_client.cc',
'avahi_service_publisher.cc',
+ 'constants.cc',
'dbus_constants.cc',
'dbus_data_serialization.cc',
'discovered_peer.cc',
diff --git a/service.cc b/service.cc
index 7b62ce8..77dea71 100644
--- a/service.cc
+++ b/service.cc
@@ -36,12 +36,6 @@ const char kValidServiceInfoKeyCharacters[] = "abcdefghijklmnopqrstuvwxyz"
namespace peerd {
-namespace constants {
-
-const char kSerbusServiceId[] = "serbus";
-
-} // namespace constants
-
namespace errors {
namespace service {
diff --git a/service.h b/service.h
index b849285..f99add4 100644
--- a/service.h
+++ b/service.h
@@ -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_;