RTI Routing Service Version 7.2.0
RequestInterceptor.hpp
1/*
2 * (c) Copyright, Real-Time Innovations, 2017.
3 * All rights reserved.
4 *
5 * No duplications, whole or partial, manual or electronic, may be made
6 * without express written permission. Any such copies, or
7 * revisions thereof, must display this notice unaltered.
8 * This code contains trade secrets of Real-Time Innovations, Inc.
9 */
10
11#ifndef RTI_SERVICE_REQUEST_INTERCEPTOR_HPP_
12#define RTI_SERVICE_REQUEST_INTERCEPTOR_HPP_
13
14#include "routingservice/routingservice_remote_config.h"
15
16#include "rti/apputils/log/LogConfig.hpp"
17
18namespace rti { namespace service { namespace admin {
19
20/*
21 * @brief string representation of EntityStateKind
22 */
23inline
24const char* to_native_string(const RTI_Service_Admin_CommandActionKind command_kind)
25{
26 switch (command_kind) {
27 case RTI_SERVICE_COMMAND_ACTION_UPDATE:
28 return "UPDATE";
29 case RTI_SERVICE_COMMAND_ACTION_GET:
30 return "GET";
31 case RTI_SERVICE_COMMAND_ACTION_CREATE:
32 return "CREATE";
33 case RTI_SERVICE_COMMAND_ACTION_DELETE:
34 return "DELETE";
35 default:
36 return "";
37 }
38}
39
40/*
41 * @brief string representation of EntityStateKind
42 */
43inline
44const std::string to_string(const RTI_Service_Admin_CommandActionKind command_kind)
45{
46 switch (command_kind) {
47 case RTI_SERVICE_COMMAND_ACTION_UPDATE:
48 return "UPDATE";
49 case RTI_SERVICE_COMMAND_ACTION_GET:
50 return "GET";
51 case RTI_SERVICE_COMMAND_ACTION_CREATE:
52 return "CREATE";
53 case RTI_SERVICE_COMMAND_ACTION_DELETE:
54 return "DELETE";
55 default:
56 std::ostringstream string_stream;
57 string_stream << (int) command_kind;
58 return string_stream.str();
59 }
60}
61
62class RequestInterceptor {
63public:
64
65 virtual void on_command(
66 const RTI_Service_Admin_CommandRequest& incoming_request,
67 const DDS_SampleInfo& request_info,
68 RTI_RoutingServiceAdminReplier& replier) = 0;
69
70 virtual ~RequestInterceptor() {}
71
72};
73
74class RequestInterceptorForwarder {
75public:
76
77 typedef RTI_RoutingServiceConfigInterceptor native;
78
79 static native create(RequestInterceptor *interceptor)
80 {
81 native native_interceptor;
82 native_interceptor.on_command_request = on_request_forwarder;
83 native_interceptor.interceptor_data = static_cast<void*>(interceptor);
84
85 return native_interceptor;
86 }
87
88private:
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)
94 {
95 RequestInterceptor *interceptor =
96 static_cast<RequestInterceptor *>(interceptor_data);
97 try {
98 interceptor->on_command(*incoming_request, *request_info, *replier);
99 } catch (rti::apputils::ServiceException& ex) {
100 SERVICELog_fromException(ex);
101 } catch (...) {
102 SERVICELog_exception(&RTI_LOG_UNEXPECTED_EXCEPTION);
103 }
104 }
105
106};
107
108}}}
109
110
111#endif // RTI_SERVICE_REQUEST_INTERCEPTOR_HPP_