This class provides different utilities related with topics. More...
#include <gz/transport/TopicUtils.hh>
Static Public Member Functions | |
static std::string | AsValidTopic (const std::string &_topic) |
Convert a topic name to a valid topic. The input topic is modified by: | |
static std::string | CreateLivelinessToken (const std::string &_fullyQualifiedTopic, const std::string &_pUuid, const std::string &_nUuid, const std::string &_entityType, const std::string &_reqTypeName, const std::string &_repTypeName) |
Create a liveliness token. | |
static std::string | CreateLivelinessToken (const std::string &_fullyQualifiedTopic, const std::string &_pUuid, const std::string &_nUuid, const std::string &_entityType, const std::string &_typeName) |
Create a liveliness token. | |
static std::string | CreateLivelinessTokenHelper (const std::string &_fullyQualifiedTopic, const std::string &_pUuid, const std::string &_nUuid, const std::string &_entityType) |
Create a partial liveliness token. | |
static bool | DecomposeFullyQualifiedTopic (const std::string &_fullyQualifiedName, std::string &_partition, std::string &_namespaceAndTopic) |
Decompose a fully qualified topic name into its partition and topic strings. Note that if the topic is preceded by a namespace, then the namespace and topic name will remain together as one string. | |
static bool | DecomposeLivelinessToken (const std::string &_token, std::string &_prefix, std::string &_partition, std::string &_namespaceAndTopic, std::string &_pUUID, std::string &_nUUID, std::string &_entityType, std::string &_reqType, std::string &_repType) |
Decompose a Zenoh liveliness token into its components. | |
static bool | DecomposeLivelinessToken (const std::string &_token, std::string &_prefix, std::string &_partition, std::string &_namespaceAndTopic, std::string &_pUUID, std::string &_nUUID, std::string &_entityType, std::string &_typeName) |
Decompose a Zenoh liveliness token into its components. | |
static bool | DecomposeLivelinessTokenHelper (const std::string &_token, std::string &_prefix, std::string &_partition, std::string &_namespaceAndTopic, std::string &_pUUID, std::string &_nUUID, std::string &_entityType, std::string &_remainingToken) |
Partially decompose a Zenoh liveliness token into its components. | |
static std::string | DemangleName (const std::string &_input) |
Recompose a previously mangled name. | |
static bool | DemangleType (const std::string &_input, std::vector< std::string > &_output) |
Recompose a previously mangled type. | |
static bool | FullyQualifiedName (const std::string &_partition, const std::string &_ns, const std::string &_topic, std::string &_name) |
Get the full topic path given a namespace and a topic name. A fully qualified topic name's length must not exceed kMaxNameLength. The fully qualified name follows the next syntax: @<PARTITION>@<NAMESPACE>/<TOPIC> where: <PARTITION>: The name of the partition or empty string. A "/" will be prefixed to the partition name unless is empty or it already starts with slash. A trailing slash will always be removed. <NAMESPACE>: The namespace or empty string. A namespace is a prefix applied to the topic name. If not empty, it will always start with a "/". A trailing slash will always be removed <TOPIC>: The topic name. A trailing slash will always be removed. | |
static bool | IsValidNamespace (const std::string &_ns) |
Determines if a namespace is valid. A namespace's length must not exceed kMaxNameLength. The following symbols are not allowed as part of the namespace: '@', ':=', '~'. | |
static bool | IsValidPartition (const std::string &_partition) |
Determines if a partition is valid. The same rules to validate a topic name applies to a partition with the addition of the empty string, which is a valid partition (meaning no partition is used). A partition name's length must not exceed kMaxNameLength. | |
static bool | IsValidTopic (const std::string &_topic) |
Determines if a topic name is valid. A topic name is any non-empty alphanumeric string. The symbol '/' is also allowed as part of a topic name. The following symbols are not allowed as part of the topic name: '@', ':=', '~'. A topic name's length must not exceed kMaxNameLength. Examples of valid topics: abc, /abc, /abc/de, /abc/de/. | |
static std::string | MangleName (const std::string &_input) |
Replace "/" instances with "%". | |
static bool | MangleType (const std::vector< std::string > &_input, std::string &_output) |
Mangle multiple types into a single string using "&" as delimiter. | |
Static Public Attributes | |
static const uint16_t | kMaxNameLength = 65535 |
The kMaxNameLength specifies the maximum number of characters allowed in a namespace, a partition name, a topic name, and a fully qualified topic name. | |
static const char | kSlashReplacement |
A replacement for the slash when mangling names. | |
static const char | kTokenPrefix [] |
A common prefix for all liveliness tokens. | |
static const char | kTokenSeparator [] |
The separator used within the liveliness token. | |
static const char | kTypeSeparator [] |
The separator used to concatenate type names. | |
Detailed Description
This class provides different utilities related with topics.
Member Function Documentation
◆ AsValidTopic()
|
static |
Convert a topic name to a valid topic. The input topic is modified by:
- turning white space into
_
. - removing special characters and combinations.
- Parameters
-
[in] _topic Input topic, which may be invalid.
- Returns
- A valid topic, or empty string if not possible to convert.
◆ CreateLivelinessToken() [1/2]
|
static |
Create a liveliness token.
We're using the ROS 2 liveliness token convention. https://github.com/ros2/rmw_zenoh/blob/rolling/docs/design.md#graph-cache
- Parameters
-
[in] _fullyQualifiedTopic The fully qualified topic. [in] _pUuid The process UUID. [in] _nUuid The node UUID. [in] _entityType The entity type. - MP for a message publisher.
- MS for a message subscription.
- SS for a service server.
[in] _reqTypeName The service request type. [in] _repTypeName The service response type.
- Returns
- The liveliness token.
◆ CreateLivelinessToken() [2/2]
|
static |
Create a liveliness token.
We're using the ROS 2 liveliness token convention. https://github.com/ros2/rmw_zenoh/blob/rolling/docs/design.md#graph-cache
- Parameters
-
[in] _fullyQualifiedTopic The fully qualified topic. [in] _pUuid The process UUID. [in] _nUuid The node UUID. [in] _entityType The entity type. - MP for a message publisher.
- MS for a message subscription.
- SS for a service server.
[in] _typeName The message type.
- Returns
- The liveliness token.
◆ CreateLivelinessTokenHelper()
|
static |
Create a partial liveliness token.
We're using the ROS 2 liveliness token convention. https://github.com/ros2/rmw_zenoh/blob/rolling/docs/design.md#graph-cache
- Parameters
-
[in] _fullyQualifiedTopic The fully qualified topic. [in] _pUuid The process UUID. [in] _nUuid The node UUID. [in] _entityType The entity type. - MP for a message publisher.
- MS for a message subscription.
- SS for a service server.
- Returns
- A partial liveliness token.
◆ DecomposeFullyQualifiedTopic()
|
static |
Decompose a fully qualified topic name into its partition and topic strings. Note that if the topic is preceded by a namespace, then the namespace and topic name will remain together as one string.
Given a fully qualified topic name with the following syntax:
@<PARTITION>@<NAMESPACE>/<TOPIC>
The _partition output argument will be set to <PARTITION>, and the _namespaceAndTopic output argument will be set to <NAMESPACE>/<TOPIC>.
- Parameters
-
[in] _fullyQualifiedName The fully qualified topic name. [out] _partition The partition component of the fully qualified topic name. [out] _namespaceAndTopic The namespace and topic name component. Note that there is no way to distinguish between where a namespace ends and a topic name begins, since topic names may contain slashes.
- Returns
- True if the topic and partition were set.
- See also
- FullyQualifiedName
◆ DecomposeLivelinessToken() [1/2]
|
static |
Decompose a Zenoh liveliness token into its components.
Given a Zenoh liveliness token with the following syntax:
<prefix>/<partition>/<session_id>/<node_id>/<entity_id>/ <entity_kind>/<mangled_enclave>/<mangled_namespace>/<node_name>/ <mangled_qualified_name>/<type_name>/<type_hash>/<qos>
The _prefix output argument will be set from <prefix>, the _partition output argument will be set from <partition>, the _namespaceAndTopic output argument will be set and unmangled from <mangled_namespace>/<mangled_qualified_name>, the _pUUID output argument will be set from <session_id>, the _nUUID output argument will be set from <node_id>, the _entityType output argument will be set from <entity_kind>, the _reqType and _reptype output arguments will be set from unmangling <type_name>.
We're using the ROS 2 liveliness token convention. https://github.com/ros2/rmw_zenoh/blob/rolling/docs/design.md#graph-cache
- Parameters
-
[in] _token The Zenoh liveliness token. [out] _prefix The prefix component. [out] _partition The partition component. [out] _namespaceAndTopic The namespace and topic name component. Note that there is no way to distinguish between where a namespace ends and a topic name begins, since topic names may contain slashes. [out] _pUUID The process UUID component. [out] _nUUID The node UUID component. [out] _entityType The entity type. - MP for a message publisher.
- MS for a message subscription.
- SS for a service server.
[out] _reqType The service request message type. [out] _repType The service response message type.
- Returns
- True if all the components were set.
◆ DecomposeLivelinessToken() [2/2]
|
static |
Decompose a Zenoh liveliness token into its components.
Given a Zenoh liveliness token with the following syntax:
<prefix>/<partition>/<session_id>/<node_id>/<entity_id>/ <entity_kind>/<mangled_enclave>/<mangled_namespace>/<node_name>/ <mangled_qualified_name>/<type_name>/<type_hash>/<qos>
The _prefix output argument will be set from <prefix>, the _partition output argument will be set from <partition>, the _namespaceAndTopic output argument will be set and unmangled from <mangled_namespace>/<mangled_qualified_name>, the _pUUID output argument will be set from <session_id>, the _nUUID output argument will be set from <node_id>, the _entityType output argument will be set from <entity_kind>, the _msgType output argument will be set from <type_name>.
We're using the ROS 2 liveliness token convention. https://github.com/ros2/rmw_zenoh/blob/rolling/docs/design.md#graph-cache
- Parameters
-
[in] _token The Zenoh liveliness token. [out] _prefix The prefix component. [out] _partition The partition component. [out] _namespaceAndTopic The namespace and topic name component. Note that there is no way to distinguish between where a namespace ends and a topic name begins, since topic names may contain slashes. [out] _pUUID The process UUID component. [out] _nUUID The node UUID component. [out] _entityType The entity type. - MP for a message publisher.
- MS for a message subscription.
- SS for a service server.
[out] _typeName The message type component.
- Returns
- True if all the components were set.
◆ DecomposeLivelinessTokenHelper()
|
static |
Partially decompose a Zenoh liveliness token into its components.
Given a Zenoh liveliness token with the following syntax:
<prefix>/<partition>/<session_id>/<node_id>/<entity_id>/ <entity_kind>/<mangled_enclave>/<mangled_namespace>/<node_name>/ <mangled_qualified_name>/<type_name>/<type_hash>/<qos>
The _prefix output argument will be set from <prefix>, the _partition output argument will be set from <partition>, the _namespaceAndTopic output argument will be set and unmangled from <mangled_namespace>/<mangled_qualified_name>, the _pUUID output argument will be set from <session_id>, the _nUUID output argument will be set from <node_id>, the _entityType output argument will be set from <entity_kind>, the _remainingToken output argument will be set from the remaining token to be processed afterwards.
We're using the ROS 2 liveliness token convention. https://github.com/ros2/rmw_zenoh/blob/rolling/docs/design.md#graph-cache
- Parameters
-
[in] _token The Zenoh liveliness token. [out] _prefix The prefix component. [out] _partition The partition component. [out] _namespaceAndTopic The namespace and topic name component. Note that there is no way to distinguish between where a namespace ends and a topic name begins, since topic names may contain slashes. [out] _pUUID The process UUID component. [out] _nUUID The node UUID component. [out] _entityType The entity type (pub, sub) component. [out] _remainingToken The part of the token unprocessed.
- Returns
- True if all the components were set.
◆ DemangleName()
|
static |
Recompose a previously mangled name.
- Parameters
-
[in] _input Input mangled name.
- Returns
- The unmangled name.
◆ DemangleType()
|
static |
Recompose a previously mangled type.
- Parameters
-
[in] _input Input mangled type. [out] _output The unmangled vector with types.
- Returns
- True if the demanged worked succesfully.
◆ FullyQualifiedName()
|
static |
Get the full topic path given a namespace and a topic name. A fully qualified topic name's length must not exceed kMaxNameLength. The fully qualified name follows the next syntax: @<PARTITION>@<NAMESPACE>/<TOPIC> where: <PARTITION>: The name of the partition or empty string. A "/" will be prefixed to the partition name unless is empty or it already starts with slash. A trailing slash will always be removed. <NAMESPACE>: The namespace or empty string. A namespace is a prefix applied to the topic name. If not empty, it will always start with a "/". A trailing slash will always be removed <TOPIC>: The topic name. A trailing slash will always be removed.
Note: Intuitively, you can imagine the fully qualified name as a UNIX absolute path, where the partition is always surrounded by "@". A namespace, if present, corresponds with the directories of the path, and you can imagine the topic as the filename.
E.g.: Only topic: @/topic No partition: @/namespace/topic1 No namespace: @/partition@/topic1 Partition+namespace+topic: @/my_partition@/name/space/topic
- Parameters
-
[in] _partition Partition name. [in] _ns Namespace. [in] _topic Topic name. [out] _name Fully qualified topic name.
- Returns
- True if the fully qualified name is valid (if partition, namespace and topic are correct).
Referenced by FullyQualifiedTopic::FullyQualifiedTopic().
◆ IsValidNamespace()
|
static |
Determines if a namespace is valid. A namespace's length must not exceed kMaxNameLength. The following symbols are not allowed as part of the namespace: '@', ':=', '~'.
- Parameters
-
[in] _ns Namespace to be checked.
- Returns
- true if the namespace is valid.
◆ IsValidPartition()
|
static |
Determines if a partition is valid. The same rules to validate a topic name applies to a partition with the addition of the empty string, which is a valid partition (meaning no partition is used). A partition name's length must not exceed kMaxNameLength.
- Parameters
-
[in] _partition Partition to be checked.
- Returns
- true if the partition is valid.
◆ IsValidTopic()
|
static |
Determines if a topic name is valid. A topic name is any non-empty alphanumeric string. The symbol '/' is also allowed as part of a topic name. The following symbols are not allowed as part of the topic name: '@', ':=', '~'. A topic name's length must not exceed kMaxNameLength. Examples of valid topics: abc, /abc, /abc/de, /abc/de/.
- Parameters
-
[in] _topic Topic name to be checked.
- Returns
- true if the topic name is valid.
◆ MangleName()
|
static |
Replace "/" instances with "%".
- Parameters
-
[in] _input Input name.
- Returns
- The mangled name.
◆ MangleType()
|
static |
Mangle multiple types into a single string using "&" as delimiter.
- Parameters
-
[in] _input Input vector with types. [out] _output The mangled string.
- Returns
- True if the mangled worked succesfully.
Member Data Documentation
◆ kMaxNameLength
|
static |
The kMaxNameLength specifies the maximum number of characters allowed in a namespace, a partition name, a topic name, and a fully qualified topic name.
◆ kSlashReplacement
|
static |
A replacement for the slash when mangling names.
◆ kTokenPrefix
|
static |
A common prefix for all liveliness tokens.
◆ kTokenSeparator
|
static |
The separator used within the liveliness token.
◆ kTypeSeparator
|
static |
The separator used to concatenate type names.
The documentation for this class was generated from the following file: