diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-05-09 23:03:00 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-05-09 23:03:00 -0300 |
| commit | c375b1c69665ae7c16ffa3f17264386dfc257d8e (patch) | |
| tree | c0a45b370512ae6d4b4a9500c244419567a357ef /src/HandlerManager.cpp | |
| parent | 921de259fa441fb562aec701f0c8c14310f126e4 (diff) | |
| download | RNT-c375b1c69665ae7c16ffa3f17264386dfc257d8e.tar.gz RNT-c375b1c69665ae7c16ffa3f17264386dfc257d8e.zip | |
FOL VM with cursor mocked storage
Diffstat (limited to 'src/HandlerManager.cpp')
| -rw-r--r-- | src/HandlerManager.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/HandlerManager.cpp b/src/HandlerManager.cpp index 7d7015d..8149ff2 100644 --- a/src/HandlerManager.cpp +++ b/src/HandlerManager.cpp @@ -11,18 +11,24 @@ namespace nt delete handle; } + HandlerManager::HandlerManager(ObjectManager& objects, + PermissionsManager& permissions, + IdentityManager& identities, + LifecycleManager& lifecycles) + : objects_(objects) + , permissions_(permissions) + , identities_(identities) + , lifecycles_(lifecycles) + {} + struct HandlerManager::handle* HandlerManager::Open(std::vector<std::string> object_path, void* connection_context) { - ObjectManager objects; - PermissionsManager permissions; - IdentityManager identities; - LifecycleManager lifecycles; - ObjectManager::registry* retrieved_object = objects.Find((const std::vector<std::string>)object_path); - if (permissions.Access(retrieved_object, (const void*)connection_context) - && identities.CanOpen(retrieved_object) - && lifecycles.Contention(retrieved_object)) { + ObjectManager::registry* retrieved_object = objects_.Find((const std::vector<std::string>)object_path); + if (permissions_.Access(retrieved_object, (const void*)connection_context) + && identities_.CanOpen(retrieved_object) + && lifecycles_.Contention(retrieved_object)) { // Starts monitoring this guy - lifecycles.Monitor(retrieved_object); + lifecycles_.Monitor(retrieved_object); return new handle{ retrieved_object, connection_context }; // Return a successful handle } else { @@ -36,22 +42,19 @@ namespace nt if (handle == nullptr) { return false; } - PermissionsManager permissions; - IdentityManager identities; - LifecycleManager lifecycles; // Somehow grab the object pointer and connection (maybe drop it...) from the handle ObjectManager::registry* object = handle->object; void* connection_context = handle->connection_context; // Checking for permissions here may be relevant. // What if we have a handle but no permission? Spooky - if (permissions.Access(object, connection_context) - && identities.CanClose(object) + if (permissions_.Access(object, connection_context) + && identities_.CanClose(object) // TODO: I think that in this case we do not need to worry about contention. // But be careful to evaluate this scenario later. - //&& LifecycleManager::Contention(retrieved_object) + //&& lifecycles_.Contention(object) ) { // Stops monitoring this guy - lifecycles.Unmonitor(object); + lifecycles_.Unmonitor(object); DeallocateHandle(handle); return true; // Return a successful handle } |
