@@ -76,7 +76,6 @@ Napi::Value CreateSubscription(const Napi::CallbackInfo& info) {
7676 subscription_ops.qos = *qos_profile;
7777 }
7878
79- #if ROS_VERSION >= 2205 // 2205 => Humble+
8079 if (options.Has (" contentFilter" )) {
8180 // configure content-filter
8281 Napi::Value contentFilterVal = options.Get (" contentFilter" );
@@ -123,7 +122,6 @@ Napi::Value CreateSubscription(const Napi::CallbackInfo& info) {
123122 }
124123 }
125124 }
126- #endif
127125
128126 const rosidl_message_type_support_t * ts =
129127 GetMessageTypeSupport (package_name, message_sub_folder, message_name);
@@ -201,9 +199,6 @@ Napi::Value GetSubscriptionTopic(const Napi::CallbackInfo& info) {
201199}
202200
203201Napi::Value HasContentFilter (const Napi::CallbackInfo& info) {
204- #if ROS_VERSION < 2205 // 2205 => Humble+
205- return Napi::Boolean::New (info.Env (), false );
206- #else
207202 Napi::Env env = info.Env ();
208203
209204 RclHandle* subscription_handle =
@@ -213,13 +208,9 @@ Napi::Value HasContentFilter(const Napi::CallbackInfo& info) {
213208
214209 bool is_valid = rcl_subscription_is_cft_enabled (subscription);
215210 return Napi::Boolean::New (env, is_valid);
216- #endif
217211}
218212
219213Napi::Value SetContentFilter (const Napi::CallbackInfo& info) {
220- #if ROS_VERSION < 2205 // 2205 => Humble+
221- return Napi::Boolean::New (info.Env (), false );
222- #else
223214 Napi::Env env = info.Env ();
224215
225216 RclHandle* subscription_handle =
@@ -272,13 +263,9 @@ Napi::Value SetContentFilter(const Napi::CallbackInfo& info) {
272263 }
273264
274265 return Napi::Boolean::New (env, true );
275- #endif
276266}
277267
278268Napi::Value ClearContentFilter (const Napi::CallbackInfo& info) {
279- #if ROS_VERSION < 2205 // 2205 => Humble+
280- return Napi::Boolean::New (info.Env (), false );
281- #else
282269 Napi::Env env = info.Env ();
283270
284271 RclHandle* subscription_handle =
@@ -301,7 +288,56 @@ Napi::Value ClearContentFilter(const Napi::CallbackInfo& info) {
301288 rcl_get_error_string ().str );
302289
303290 return Napi::Boolean::New (env, true );
304- #endif
291+ }
292+
293+ Napi::Value GetContentFilter (const Napi::CallbackInfo& info) {
294+ Napi::Env env = info.Env ();
295+
296+ RclHandle* subscription_handle =
297+ RclHandle::Unwrap (info[0 ].As <Napi::Object>());
298+ rcl_subscription_t * subscription =
299+ reinterpret_cast <rcl_subscription_t *>(subscription_handle->ptr ());
300+
301+ rcl_subscription_content_filter_options_t options =
302+ rcl_get_zero_initialized_subscription_content_filter_options ();
303+
304+ rcl_ret_t ret = rcl_subscription_get_content_filter (subscription, &options);
305+ if (ret != RCL_RET_OK ) {
306+ Napi::Error::New (env, rcl_get_error_string ().str )
307+ .ThrowAsJavaScriptException ();
308+ rcl_reset_error ();
309+ return env.Undefined ();
310+ }
311+
312+ // Create result object
313+ Napi::Object result = Napi::Object::New (env);
314+ result.Set (
315+ " expression" ,
316+ Napi::String::New (
317+ env,
318+ options.rmw_subscription_content_filter_options .filter_expression ));
319+
320+ size_t param_count = options.rmw_subscription_content_filter_options
321+ .expression_parameters .size ;
322+ Napi::Array parameters = Napi::Array::New (env, param_count);
323+ for (size_t i = 0 ; i < param_count; ++i) {
324+ parameters[i] =
325+ Napi::String::New (env, options.rmw_subscription_content_filter_options
326+ .expression_parameters .data [i]);
327+ }
328+ result.Set (" parameters" , parameters);
329+
330+ // Cleanup
331+ rcl_ret_t fini_ret =
332+ rcl_subscription_content_filter_options_fini (subscription, &options);
333+ if (fini_ret != RCL_RET_OK ) {
334+ Napi::Error::New (env, rcl_get_error_string ().str )
335+ .ThrowAsJavaScriptException ();
336+ rcl_reset_error ();
337+ return env.Undefined ();
338+ }
339+
340+ return result;
305341}
306342
307343Napi::Value GetPublisherCount (const Napi::CallbackInfo& info) {
@@ -327,6 +363,7 @@ Napi::Object InitSubscriptionBindings(Napi::Env env, Napi::Object exports) {
327363 Napi::Function::New (env, GetSubscriptionTopic));
328364 exports.Set (" hasContentFilter" , Napi::Function::New (env, HasContentFilter));
329365 exports.Set (" setContentFilter" , Napi::Function::New (env, SetContentFilter));
366+ exports.Set (" getContentFilter" , Napi::Function::New (env, GetContentFilter));
330367 exports.Set (" clearContentFilter" ,
331368 Napi::Function::New (env, ClearContentFilter));
332369 exports.Set (" getPublisherCount" , Napi::Function::New (env, GetPublisherCount));
0 commit comments