Update service/client construction/destruction API return codes. (#247)

Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com>
This commit is contained in:
Michel Hidalgo 2020-09-24 15:04:13 -03:00 committed by Alejandro Hernández Cordero
parent 6a8004e033
commit b8620312dc

View file

@ -3756,10 +3756,32 @@ static rmw_ret_t rmw_init_cs(
const char * service_name, const rmw_qos_profile_t * qos_policies, const char * service_name, const rmw_qos_profile_t * qos_policies,
bool is_service) bool is_service)
{ {
RET_NULL(node); RMW_CHECK_ARGUMENT_FOR_NULL(node, RMW_RET_INVALID_ARGUMENT);
RET_WRONG_IMPLID(node); RMW_CHECK_TYPE_IDENTIFIERS_MATCH(
RET_NULL_OR_EMPTYSTR(service_name); node,
RET_NULL(qos_policies); node->implementation_identifier,
eclipse_cyclonedds_identifier,
return RMW_RET_INCORRECT_RMW_IMPLEMENTATION);
RMW_CHECK_ARGUMENT_FOR_NULL(type_supports, RMW_RET_INVALID_ARGUMENT);
RMW_CHECK_ARGUMENT_FOR_NULL(service_name, RMW_RET_INVALID_ARGUMENT);
if (0 == strlen(service_name)) {
RMW_SET_ERROR_MSG("service_name argument is an empty string");
return RMW_RET_INVALID_ARGUMENT;
}
RMW_CHECK_ARGUMENT_FOR_NULL(qos_policies, RMW_RET_INVALID_ARGUMENT);
if (!qos_policies->avoid_ros_namespace_conventions) {
int validation_result = RMW_TOPIC_VALID;
rmw_ret_t ret = rmw_validate_full_topic_name(service_name, &validation_result, nullptr);
if (RMW_RET_OK != ret) {
return ret;
}
if (RMW_TOPIC_VALID != validation_result) {
const char * reason = rmw_full_topic_name_validation_result_string(validation_result);
RMW_SET_ERROR_MSG_WITH_FORMAT_STRING("service_name argument is invalid: %s", reason);
return RMW_RET_INVALID_ARGUMENT;
}
}
const rosidl_service_type_support_t * type_support = get_service_typesupport(type_supports); const rosidl_service_type_support_t * type_support = get_service_typesupport(type_supports);
RET_NULL(type_support); RET_NULL(type_support);
@ -3822,10 +3844,13 @@ static rmw_ret_t rmw_init_cs(
RMW_SET_ERROR_MSG("failed to create topic"); RMW_SET_ERROR_MSG("failed to create topic");
goto fail_subtopic; goto fail_subtopic;
} }
// before proceeding to outright ignore given QoS policies, sanity check them
dds_qos_t * qos; dds_qos_t * qos;
if ((qos = dds_create_qos()) == nullptr) { if ((qos = create_readwrite_qos(qos_policies, false)) == nullptr) {
goto fail_qos; goto fail_qos;
} }
dds_reset_qos(qos);
dds_qset_reliability(qos, DDS_RELIABILITY_RELIABLE, DDS_SECS(1)); dds_qset_reliability(qos, DDS_RELIABILITY_RELIABLE, DDS_SECS(1));
dds_qset_history(qos, DDS_HISTORY_KEEP_ALL, DDS_LENGTH_UNLIMITED); dds_qset_history(qos, DDS_HISTORY_KEEP_ALL, DDS_LENGTH_UNLIMITED);
@ -3890,10 +3915,18 @@ static void rmw_fini_cs(CddsCS * cs)
static rmw_ret_t destroy_client(const rmw_node_t * node, rmw_client_t * client) static rmw_ret_t destroy_client(const rmw_node_t * node, rmw_client_t * client)
{ {
RET_NULL(node); RMW_CHECK_ARGUMENT_FOR_NULL(node, RMW_RET_INVALID_ARGUMENT);
RET_WRONG_IMPLID(node); RMW_CHECK_TYPE_IDENTIFIERS_MATCH(
RET_NULL(client); node,
RET_WRONG_IMPLID(client); node->implementation_identifier,
eclipse_cyclonedds_identifier,
return RMW_RET_INCORRECT_RMW_IMPLEMENTATION);
RMW_CHECK_ARGUMENT_FOR_NULL(client, RMW_RET_INVALID_ARGUMENT);
RMW_CHECK_TYPE_IDENTIFIERS_MATCH(
client,
client->implementation_identifier,
eclipse_cyclonedds_identifier,
return RMW_RET_INCORRECT_RMW_IMPLEMENTATION);
auto info = static_cast<CddsClient *>(client->data); auto info = static_cast<CddsClient *>(client->data);
clean_waitset_caches(); clean_waitset_caches();
@ -3984,10 +4017,18 @@ extern "C" rmw_ret_t rmw_destroy_client(rmw_node_t * node, rmw_client_t * client
static rmw_ret_t destroy_service(const rmw_node_t * node, rmw_service_t * service) static rmw_ret_t destroy_service(const rmw_node_t * node, rmw_service_t * service)
{ {
RET_NULL(node); RMW_CHECK_ARGUMENT_FOR_NULL(node, RMW_RET_INVALID_ARGUMENT);
RET_WRONG_IMPLID(node); RMW_CHECK_TYPE_IDENTIFIERS_MATCH(
RET_NULL(service); node,
RET_WRONG_IMPLID(service); node->implementation_identifier,
eclipse_cyclonedds_identifier,
return RMW_RET_INCORRECT_RMW_IMPLEMENTATION);
RMW_CHECK_ARGUMENT_FOR_NULL(service, RMW_RET_INVALID_ARGUMENT);
RMW_CHECK_TYPE_IDENTIFIERS_MATCH(
service,
service->implementation_identifier,
eclipse_cyclonedds_identifier,
return RMW_RET_INCORRECT_RMW_IMPLEMENTATION);
auto info = static_cast<CddsService *>(service->data); auto info = static_cast<CddsService *>(service->data);
clean_waitset_caches(); clean_waitset_caches();