|
12 | 12 | #include "runtime-common/core/runtime-core.h" |
13 | 13 | #include "runtime-light/core/globals/php-script-globals.h" |
14 | 14 | #include "runtime-light/server/rpc/rpc-server-state.h" |
| 15 | +#include "runtime-light/tl/tl-core.h" |
15 | 16 | #include "runtime-light/tl/tl-functions.h" |
16 | 17 | #include "runtime-light/tl/tl-types.h" |
17 | 18 | #include "runtime-light/utils/logs.h" |
@@ -79,64 +80,48 @@ void process_rpc_invoke_req_extra(const tl::rpcInvokeReqExtra& extra, PhpScriptB |
79 | 80 | } |
80 | 81 | } |
81 | 82 |
|
82 | | -void process_dest_actor(const tl::rpcDestActor& dest_actor, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
83 | | - superglobals.v$_SERVER.set_value(string{RPC_ACTOR_ID.data(), RPC_ACTOR_ID.size()}, dest_actor.actor_id.value); |
84 | | -} |
85 | | - |
86 | | -void process_dest_flags(const tl::rpcDestFlags& dest_flags, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
87 | | - superglobals.v$_SERVER.set_value(string{RPC_EXTRA_FLAGS.data(), RPC_EXTRA_FLAGS.size()}, static_cast<int64_t>(dest_flags.flags.value)); |
88 | | - process_rpc_invoke_req_extra(dest_flags.extra, superglobals); |
89 | | -} |
90 | | - |
91 | | -void process_dest_actor_flags(const tl::rpcDestActorFlags& dest_actor_flags, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
92 | | - superglobals.v$_SERVER.set_value(string{RPC_ACTOR_ID.data(), RPC_ACTOR_ID.size()}, dest_actor_flags.actor_id.value); |
93 | | - superglobals.v$_SERVER.set_value(string{RPC_EXTRA_FLAGS.data(), RPC_EXTRA_FLAGS.size()}, static_cast<int64_t>(dest_actor_flags.flags.value)); |
94 | | - process_rpc_invoke_req_extra(dest_actor_flags.extra, superglobals); |
95 | | -} |
96 | | - |
97 | | -void process_rpc_invoke_req(const tl::rpcInvokeReq& rpc_invoke_req, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
98 | | - if (rpc_invoke_req.opt_dest_actor) { |
99 | | - process_dest_actor((*rpc_invoke_req.opt_dest_actor).inner, superglobals); |
100 | | - } |
101 | | - if (rpc_invoke_req.opt_dest_flags) { |
102 | | - process_dest_flags((*rpc_invoke_req.opt_dest_flags).inner, superglobals); |
103 | | - } |
104 | | - if (rpc_invoke_req.opt_dest_actor_flags) { |
105 | | - process_dest_actor_flags((*rpc_invoke_req.opt_dest_actor_flags).inner, superglobals); |
106 | | - } |
107 | | - RpcServerInstanceState::get().buffer.store_bytes(rpc_invoke_req.query); |
108 | | -} |
109 | | - |
110 | 83 | } // namespace |
111 | 84 |
|
112 | 85 | namespace kphp::rpc { |
113 | 86 |
|
114 | | -void init_server(tl::K2InvokeRpc invoke_rpc) noexcept { |
115 | | - auto& net_pid{invoke_rpc.net_pid}; |
116 | | - auto& rpc_invoke_req{invoke_rpc.rpc_invoke_req.inner}; |
| 87 | +void init_server(tl::TLBuffer& tlb) noexcept { |
| 88 | + tl::K2InvokeRpc invoke_rpc{}; |
| 89 | + if (!invoke_rpc.fetch(tlb)) [[unlikely]] { |
| 90 | + kphp::log::error("erroneous rpc request"); |
| 91 | + } |
| 92 | + |
117 | 93 | auto& rpc_server_instance_st{RpcServerInstanceState::get()}; |
118 | | - auto& superglobals{PhpScriptMutableGlobals::current().get_superglobals()}; |
| 94 | + rpc_server_instance_st.query_id = invoke_rpc.query_id.value; |
| 95 | + rpc_server_instance_st.buffer.store_bytes(invoke_rpc.query); |
119 | 96 |
|
120 | | - rpc_server_instance_st.query_id = rpc_invoke_req.query_id.value; |
| 97 | + const auto opt_magic{rpc_server_instance_st.buffer.lookup_trivial<uint32_t>()}; |
| 98 | + if (!opt_magic) [[unlikely]] { |
| 99 | + kphp::log::error("erroneous rpc request"); |
| 100 | + } |
121 | 101 |
|
122 | | - superglobals.v$_SERVER.set_value(string{RPC_REQUEST_ID.data(), RPC_REQUEST_ID.size()}, rpc_invoke_req.query_id.value); |
123 | | - superglobals.v$_SERVER.set_value(string{RPC_REMOTE_IP.data(), RPC_REMOTE_IP.size()}, static_cast<int64_t>(net_pid.get_ip())); |
124 | | - superglobals.v$_SERVER.set_value(string{RPC_REMOTE_PORT.data(), RPC_REMOTE_PORT.size()}, static_cast<int64_t>(net_pid.get_port())); |
125 | | - superglobals.v$_SERVER.set_value(string{RPC_REMOTE_PID.data(), RPC_REMOTE_PID.size()}, static_cast<int64_t>(net_pid.get_pid())); |
126 | | - superglobals.v$_SERVER.set_value(string{RPC_REMOTE_UTIME.data(), RPC_REMOTE_UTIME.size()}, static_cast<int64_t>(net_pid.get_utime())); |
127 | | - process_rpc_invoke_req(rpc_invoke_req, superglobals); |
| 102 | + auto& superglobals{PhpScriptMutableGlobals::current().get_superglobals()}; |
| 103 | + superglobals.v$_SERVER.set_value(string{RPC_REQUEST_ID.data(), RPC_REQUEST_ID.size()}, invoke_rpc.query_id.value); |
| 104 | + superglobals.v$_SERVER.set_value(string{RPC_REMOTE_IP.data(), RPC_REMOTE_IP.size()}, static_cast<int64_t>(invoke_rpc.net_pid.get_ip())); |
| 105 | + superglobals.v$_SERVER.set_value(string{RPC_REMOTE_PORT.data(), RPC_REMOTE_PORT.size()}, static_cast<int64_t>(invoke_rpc.net_pid.get_port())); |
| 106 | + superglobals.v$_SERVER.set_value(string{RPC_REMOTE_PID.data(), RPC_REMOTE_PID.size()}, static_cast<int64_t>(invoke_rpc.net_pid.get_pid())); |
| 107 | + superglobals.v$_SERVER.set_value(string{RPC_REMOTE_UTIME.data(), RPC_REMOTE_UTIME.size()}, static_cast<int64_t>(invoke_rpc.net_pid.get_utime())); |
| 108 | + if (invoke_rpc.opt_actor_id) { |
| 109 | + superglobals.v$_SERVER.set_value(string{RPC_ACTOR_ID.data(), RPC_ACTOR_ID.size()}, (*invoke_rpc.opt_actor_id).value); |
| 110 | + } |
| 111 | + if (invoke_rpc.opt_extra) { |
| 112 | + superglobals.v$_SERVER.set_value(string{RPC_EXTRA_FLAGS.data(), RPC_EXTRA_FLAGS.size()}, static_cast<int64_t>((*invoke_rpc.opt_extra).flags.value)); |
| 113 | + process_rpc_invoke_req_extra(*invoke_rpc.opt_extra, superglobals); |
| 114 | + } |
128 | 115 | kphp::log::info("rpc server initialized with: " |
129 | 116 | "remote pid -> {}, " |
130 | 117 | "remote port -> {}, " |
131 | 118 | "query_id -> {}, " |
132 | | - "dest_actor -> {}, " |
133 | | - "dest_flags -> {:#b}, " |
134 | | - "dest_actor_flags -> actor_id {}, flags {:#b}", |
135 | | - net_pid.get_pid(), net_pid.get_port(), rpc_invoke_req.query_id.value, |
136 | | - rpc_invoke_req.opt_dest_actor.has_value() ? (*rpc_invoke_req.opt_dest_actor).inner.actor_id.value : 0, |
137 | | - rpc_invoke_req.opt_dest_flags.has_value() ? (*rpc_invoke_req.opt_dest_flags).inner.flags.value : 0, |
138 | | - rpc_invoke_req.opt_dest_actor_flags.has_value() ? (*rpc_invoke_req.opt_dest_actor_flags).inner.actor_id.value : 0, |
139 | | - rpc_invoke_req.opt_dest_actor_flags.has_value() ? (*rpc_invoke_req.opt_dest_actor_flags).inner.flags.value : 0); |
| 119 | + "actor_id -> {}, " |
| 120 | + "extra -> {:#b}, " |
| 121 | + "request -> {:#x}", |
| 122 | + invoke_rpc.net_pid.get_pid(), invoke_rpc.net_pid.get_port(), invoke_rpc.query_id.value, |
| 123 | + invoke_rpc.opt_actor_id.has_value() ? (*invoke_rpc.opt_actor_id).value : 0, |
| 124 | + invoke_rpc.opt_extra.has_value() ? (*invoke_rpc.opt_extra).flags.value : 0, *opt_magic); |
140 | 125 | } |
141 | 126 |
|
142 | 127 | } // namespace kphp::rpc |
0 commit comments