11#ifndef RTI_SERVICE_REQUEST_INTERCEPTOR_HPP_
12#define RTI_SERVICE_REQUEST_INTERCEPTOR_HPP_
14#include "routingservice/routingservice_remote_config.h"
16#include "rti/apputils/log/LogConfig.hpp"
18namespace rti {
namespace service {
namespace admin {
24const char* to_native_string(
const RTI_Service_Admin_CommandActionKind command_kind)
26 switch (command_kind) {
27 case RTI_SERVICE_COMMAND_ACTION_UPDATE:
29 case RTI_SERVICE_COMMAND_ACTION_GET:
31 case RTI_SERVICE_COMMAND_ACTION_CREATE:
33 case RTI_SERVICE_COMMAND_ACTION_DELETE:
44const std::string to_string(
const RTI_Service_Admin_CommandActionKind command_kind)
46 switch (command_kind) {
47 case RTI_SERVICE_COMMAND_ACTION_UPDATE:
49 case RTI_SERVICE_COMMAND_ACTION_GET:
51 case RTI_SERVICE_COMMAND_ACTION_CREATE:
53 case RTI_SERVICE_COMMAND_ACTION_DELETE:
56 std::ostringstream string_stream;
57 string_stream << (int) command_kind;
58 return string_stream.str();
62class RequestInterceptor {
65 virtual void on_command(
66 const RTI_Service_Admin_CommandRequest& incoming_request,
67 const DDS_SampleInfo& request_info,
68 RTI_RoutingServiceAdminReplier& replier) = 0;
70 virtual ~RequestInterceptor() {}
74class RequestInterceptorForwarder {
77 typedef RTI_RoutingServiceConfigInterceptor native;
79 static native create(RequestInterceptor *interceptor)
81 native native_interceptor;
82 native_interceptor.on_command_request = on_request_forwarder;
83 native_interceptor.interceptor_data =
static_cast<void*
>(interceptor);
85 return native_interceptor;
89 static void on_request_forwarder(
90 void *interceptor_data,
91 const RTI_Service_Admin_CommandRequest *incoming_request,
92 const DDS_SampleInfo *request_info,
93 RTI_RoutingServiceAdminReplier *replier)
95 RequestInterceptor *interceptor =
96 static_cast<RequestInterceptor *
>(interceptor_data);
98 interceptor->on_command(*incoming_request, *request_info, *replier);
99 }
catch (rti::apputils::ServiceException& ex) {
100 SERVICELog_fromException(ex);
102 SERVICELog_exception(&RTI_LOG_UNEXPECTED_EXCEPTION);