|
|
|
@@ -46,8 +46,8 @@ class remote_server_base : public remote_open_file_table,
|
|
|
|
|
public virtual remote_fuse::i_remote_instance {
|
|
|
|
|
public:
|
|
|
|
|
using handler_callback = std::function<packet::error_type(
|
|
|
|
|
std::uint32_t, std::string_view, std::uint64_t, std::string_view,
|
|
|
|
|
packet *, packet &)>;
|
|
|
|
|
std::uint32_t, std::string, std::uint64_t, std::string, packet *,
|
|
|
|
|
packet &)>;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
remote_server_base(const remote_server_base &) = delete;
|
|
|
|
@@ -103,463 +103,461 @@ private:
|
|
|
|
|
std::unique_ptr<packet_server> packet_server_;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
const std::unordered_map<std::string_view, handler_callback> handler_lookup_ =
|
|
|
|
|
const std::unordered_map<std::string, handler_callback> handler_lookup_ = {
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
"::check",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */,
|
|
|
|
|
auto && /* response */) -> auto { return 0; },
|
|
|
|
|
"::check",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */,
|
|
|
|
|
auto && /* response */) -> auto { return 0; },
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_access",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_access(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_access",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_access(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_chflags",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_chflags(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_chflags",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_chflags(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_chmod",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_chmod(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_chmod",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_chmod(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_chown",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_chown(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_chown",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_chown(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_create",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_create(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_create",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_create(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_destroy",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_destroy();
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_destroy",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_destroy();
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_fgetattr",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_fgetattr(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_fgetattr",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_fgetattr(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_fsetattr_x",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_fsetattr_x(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_fsetattr_x",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_fsetattr_x(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_fsync",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_fsync(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_fsync",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_fsync(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_ftruncate",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_ftruncate(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_ftruncate",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_ftruncate(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_getattr",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_getattr(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_getattr",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_getattr(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_getxtimes",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_getxtimes(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_getxtimes",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_getxtimes(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_init",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_init();
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_init",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_init();
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_mkdir",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_mkdir(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_mkdir",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_mkdir(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_open",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_open(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_open",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_open(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_opendir",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_opendir(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_opendir",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_opendir(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_read",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_read(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_read",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_read(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_readdir",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_readdir(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_readdir",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_readdir(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_release",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_release(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_release",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_release(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_releasedir",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_releasedir(client_id, request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_releasedir",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_releasedir(client_id, request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_rename",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_rename(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_rename",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_rename(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_rmdir",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_rmdir(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_rmdir",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_rmdir(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setattr_x",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setattr_x(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setattr_x",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setattr_x(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setbkuptime",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setbkuptime(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setbkuptime",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setbkuptime(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setchgtime",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setchgtime(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setchgtime",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setchgtime(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setcrtime",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setcrtime(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setcrtime",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setcrtime(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setvolname",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setvolname(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_setvolname",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_setvolname(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_statfs",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_statfs(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_statfs",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_statfs(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_statfs_x",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_statfs_x(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_statfs_x",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_fuse_statfs_x(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_truncate",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_truncate(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_truncate",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_truncate(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_unlink",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_unlink(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_unlink",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_unlink(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_utimens",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_utimens(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_utimens",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_utimens(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_write",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_write(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_write",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_write(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_write_base64",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_write_base64(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::fuse_write_base64",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_fuse_write_base64(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::json_create_directory_snapshot",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_json_create_directory_snapshot(
|
|
|
|
|
client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::json_create_directory_snapshot",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_json_create_directory_snapshot(
|
|
|
|
|
client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::json_read_directory_snapshot",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_json_read_directory_snapshot(client_id, request,
|
|
|
|
|
response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::json_read_directory_snapshot",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_json_read_directory_snapshot(
|
|
|
|
|
client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::json_release_directory_snapshot",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_json_release_directory_snapshot(client_id,
|
|
|
|
|
request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::json_release_directory_snapshot",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_json_release_directory_snapshot(client_id,
|
|
|
|
|
request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_can_delete",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_can_delete(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_can_delete",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_can_delete(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_cleanup",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_cleanup(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_cleanup",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_cleanup(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_close",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_close(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_close",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_close(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_create",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_create(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_create",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_create(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_flush",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_flush(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_flush",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_flush(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_get_file_info",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_get_file_info(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_get_file_info",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_get_file_info(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_get_security_by_name",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_get_security_by_name(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_get_security_by_name",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_get_security_by_name(request,
|
|
|
|
|
response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_get_volume_info",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_get_volume_info(response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_get_volume_info",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto && /* request */, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_get_volume_info(response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_mounted",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_mounted(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_mounted",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_mounted(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_open",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_open(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_open",
|
|
|
|
|
[this](auto && /* service_flags */, auto &&client_id,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_open(client_id, request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_overwrite",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_overwrite(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_overwrite",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_overwrite(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_read",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_read(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_read",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_read(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_read_directory",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_read_directory(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_read_directory",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_read_directory(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_rename",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_rename(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_rename",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_rename(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_set_basic_info",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_set_basic_info(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_set_basic_info",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_set_basic_info(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_set_file_size",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_set_file_size(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_set_file_size",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_set_file_size(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_unmounted",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_unmounted(request);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_unmounted",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto && /* response */) -> auto {
|
|
|
|
|
return this->handle_winfsp_unmounted(request);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_write",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */, auto &&request,
|
|
|
|
|
auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_write(request, response);
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"::winfsp_write",
|
|
|
|
|
[this](auto && /* service_flags */, auto && /* client_id */,
|
|
|
|
|
auto && /* thread_id */, auto && /* method */,
|
|
|
|
|
auto &&request, auto &&response) -> auto {
|
|
|
|
|
return this->handle_winfsp_write(request, response);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void closed_handler(std::string_view client_id) {
|
|
|
|
|
void closed_handler(std::string client_id) {
|
|
|
|
|
client_pool_.remove_client(client_id);
|
|
|
|
|
close_all(client_id);
|
|
|
|
|
}
|
|
|
|
@@ -1615,14 +1613,13 @@ private:
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
message_handler(std::uint32_t service_flags, std::string_view client_id,
|
|
|
|
|
std::uint64_t thread_id, std::string_view method,
|
|
|
|
|
packet *request, packet &response,
|
|
|
|
|
message_handler(std::uint32_t service_flags, std::string client_id,
|
|
|
|
|
std::uint64_t thread_id, std::string method, packet *request,
|
|
|
|
|
packet &response,
|
|
|
|
|
packet_server::message_complete_callback message_complete) {
|
|
|
|
|
auto idx{method.find_last_of("::")};
|
|
|
|
|
auto lookup_method_name{
|
|
|
|
|
((idx == std::string::npos) ? "::" + std::string{method}
|
|
|
|
|
: method.substr(idx - 1)),
|
|
|
|
|
((idx == std::string::npos) ? "::" + method : method.substr(idx - 1)),
|
|
|
|
|
};
|
|
|
|
|
if (handler_lookup_.find(lookup_method_name) == handler_lookup_.end()) {
|
|
|
|
|
message_complete(static_cast<packet::error_type>(STATUS_NOT_IMPLEMENTED));
|
|
|
|
|