RPC procedures are now identified via a struct containing a string name.
[invirt/third/libt4.git] / rpc / rpc_protocol.h
index 80089ff..4f03937 100644 (file)
@@ -38,10 +38,15 @@ namespace rpc_protocol {
         MEMBERS(xid, ret)
     };
 
-    template <typename Signature>
     struct proc_t {
-        using signature = Signature;
         proc_id_t id;
+        const char * name;
+    };
+
+    template <typename Signature>
+    struct proc_checked_t : proc_t {
+        using signature = Signature;
+        constexpr inline proc_checked_t(proc_id_t id, const char * name) : proc_t{id, name} {}
     };
 
     union header_t { request_header req; reply_header rep; };
@@ -49,8 +54,11 @@ namespace rpc_protocol {
     const size_t DEFAULT_RPC_SZ = 1024; // size of initial buffer allocation
     const size_t MAX_PDU = 10<<20; // maximum PDF is 10M
 
-#define REMOTE_PROCEDURE_BASE(_base_) static constexpr rpc_protocol::proc_id_t base = _base_
-#define REMOTE_PROCEDURE(_offset_, _name_, _args_) static constexpr rpc_protocol::proc_t<status _args_> _name_{base + _offset_}
+#define REMOTE_PROCEDURE_BASE(_base_) \
+    static constexpr rpc_protocol::proc_id_t base = _base_
+
+#define REMOTE_PROCEDURE(_offset_, _name_, _args_) \
+    static constexpr rpc_protocol::proc_checked_t<status _args_> _name_{base + _offset_, #_name_}
 
     REMOTE_PROCEDURE_BASE(0);
     REMOTE_PROCEDURE(1, bind, (nonce_t &)); // handler number reserved for bind