@@ -385,40 +385,67 @@ Napi::Value GetNodeNames(const Napi::CallbackInfo& info) {
385385
386386 RclHandle* node_handle = RclHandle::Unwrap (info[0 ].As <Napi::Object>());
387387 rcl_node_t * node = reinterpret_cast <rcl_node_t *>(node_handle->ptr ());
388+ bool get_enclaves = info[1 ].As <Napi::Boolean>().Value ();
388389 rcutils_string_array_t node_names =
389390 rcutils_get_zero_initialized_string_array ();
390391 rcutils_string_array_t node_namespaces =
391392 rcutils_get_zero_initialized_string_array ();
393+ rcutils_string_array_t enclaves = rcutils_get_zero_initialized_string_array ();
392394 rcl_allocator_t allocator = rcl_get_default_allocator ();
393395
394- THROW_ERROR_IF_NOT_EQUAL (
395- RCL_RET_OK,
396- rcl_get_node_names (node, allocator, &node_names, &node_namespaces),
397- " Failed to get_node_names." );
396+ if (get_enclaves) {
397+ THROW_ERROR_IF_NOT_EQUAL (
398+ RCL_RET_OK,
399+ rcl_get_node_names_with_enclaves (node, allocator, &node_names,
400+ &node_namespaces, &enclaves),
401+ " Failed to get_node_names." );
402+ } else {
403+ THROW_ERROR_IF_NOT_EQUAL (
404+ RCL_RET_OK,
405+ rcl_get_node_names (node, allocator, &node_names, &node_namespaces),
406+ " Failed to get_node_names." );
407+ }
398408
399409 Napi::Array result_list = Napi::Array::New (env, node_names.size );
400410
401411 for (size_t i = 0 ; i < node_names.size ; ++i) {
402412 Napi::Object item = Napi::Object::New (env);
403-
404413 item.Set (" name" , Napi::String::New (env, node_names.data [i]));
405414 item.Set (" namespace" , Napi::String::New (env, node_namespaces.data [i]));
406-
415+ if (get_enclaves) {
416+ item.Set (" enclave" , Napi::String::New (env, enclaves.data [i]));
417+ }
407418 result_list.Set (i, item);
408419 }
409420
410421 rcutils_ret_t fini_names_ret = rcutils_string_array_fini (&node_names);
411422 rcutils_ret_t fini_namespaces_ret =
412423 rcutils_string_array_fini (&node_namespaces);
413-
424+ rcutils_ret_t fini_enclaves_ret = rcutils_string_array_fini (&enclaves);
414425 THROW_ERROR_IF_NOT_EQUAL (RCL_RET_OK, fini_names_ret,
415426 " Failed to destroy node_names" );
416427 THROW_ERROR_IF_NOT_EQUAL (RCL_RET_OK, fini_namespaces_ret,
417428 " Failed to destroy node_namespaces" );
418-
429+ THROW_ERROR_IF_NOT_EQUAL (RCL_RET_OK, fini_enclaves_ret,
430+ " Failed to fini enclaves string array" );
419431 return result_list;
420432}
421433
434+ Napi::Value GetFullyQualifiedName (const Napi::CallbackInfo& info) {
435+ Napi::Env env = info.Env ();
436+
437+ RclHandle* node_handle = RclHandle::Unwrap (info[0 ].As <Napi::Object>());
438+ rcl_node_t * node = reinterpret_cast <rcl_node_t *>(node_handle->ptr ());
439+ const char * fully_qualified_node_name =
440+ rcl_node_get_fully_qualified_name (node);
441+ if (!fully_qualified_node_name) {
442+ Napi::Error::New (env, " Fully qualified name not set" )
443+ .ThrowAsJavaScriptException ();
444+ return env.Undefined ();
445+ }
446+ return Napi::String::New (env, fully_qualified_node_name);
447+ }
448+
422449Napi::Object InitNodeBindings (Napi::Env env, Napi::Object exports) {
423450 exports.Set (" getParameterOverrides" ,
424451 Napi::Function::New (env, GetParameterOverrides));
@@ -439,6 +466,8 @@ Napi::Object InitNodeBindings(Napi::Env env, Napi::Object exports) {
439466 exports.Set (" countServices" , Napi::Function::New (env, CountServices));
440467#endif
441468 exports.Set (" getNodeNames" , Napi::Function::New (env, GetNodeNames));
469+ exports.Set (" getFullyQualifiedName" ,
470+ Napi::Function::New (env, GetFullyQualifiedName));
442471 return exports;
443472}
444473
0 commit comments