From dfd9a5fac3176cc223fb572f31d5892033936fd7 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 11 Jul 2009 15:15:42 +0200 Subject: Konzept aktualisiert --- Konzept/Design.txt | 22 ++++---- Konzept/Klassen.txt | 138 +++++++++++++++++++++++++++------------------------ Konzept/Netzwerk.txt | 78 ++++++++--------------------- 3 files changed, 105 insertions(+), 133 deletions(-) diff --git a/Konzept/Design.txt b/Konzept/Design.txt index 5bcb8ff..e1f1b96 100644 --- a/Konzept/Design.txt +++ b/Konzept/Design.txt @@ -3,12 +3,6 @@ Grundlegendes Design: Netzwerk-Stack * Server-Connection und Client-Connection-Klassen * Server-Connections werden von einer Listener-Klasse erzeugt -* Nicht-blockierende Sockets (Implementierung ohne Multithreading möglich) -+ implementiert - -Initializable: -* Verwaltet Informationen über die Reihenfolge der Initialisierungen von Objekten -* Wird beim Beenden die Objekte in umgekehrter Reihenfolge deinitialisieren + implementiert ConfigManager @@ -26,7 +20,7 @@ RequestManager ThreadManager: * Erstellt einen Worker-Thread, der die meiste Arbeit übernimmt; bei längeren Arbeiten kann ein neuer Worker-Thread den alten ersetzen -+ teilweise implementiert ++ implementiert ModuleManager: * Erlaubt es, Module zu laden @@ -39,16 +33,20 @@ LogManager * Ausgabe in eigenem Thread + implementiert +UserManager +* Stellt ein Backend-unabhängiges Interface zur Benutzer-Verwaltung zur Verfügung +* Auf den Clients leitet ein Network-Backend Anfragen an den UserManager des Servers weiter +* Ein Cache speichert Benutzerlisten für die Backends ++ implementiert + Server-Design: ConnectionManager -* Wartet auf Verbindungen von Dämonen und Clients (implementiert) +* Wartet auf Verbindungen von Dämonen und Clients * Verwaltet Liste mit Dämonen ++ implementiert -UserManager -* Stellt ein Backend-unabhängiges Interface zur Benutzer-Verwaltung zur Verfügung - -Backends (Module) +User-Backends (Module) - MySQL - Dateisystem - Kerberos-Verwaltung diff --git a/Konzept/Klassen.txt b/Konzept/Klassen.txt index 799ffc9..67d5c29 100644 --- a/Konzept/Klassen.txt +++ b/Konzept/Klassen.txt @@ -1,75 +1,85 @@ -M läuft im Main-Thread -W läuft im Worker-Thread T ist Thread-safe D sind Datenstrukturen -? TODO +M läuft nur im Main-Thread +? TODO/? -? Client::CommandManager -? Client::CommandParser -? Client::InformationManager -W Client::Requests::DaemonCommandRequest -W Client::Requests::DaemonFSInfoRequest -W Client::Requests::DaemonListRequest -W Client::Requests::DaemonStatusRequest +T Client::Application +M Client::CommandParser +T Client::InformationManager +T Client::Requests::DaemonCommandRequest +T Client::Requests::DaemonFSInfoRequest +T Client::Requests::DaemonListRequest +T Client::Requests::DaemonStatusRequest +M Client::SystemCommands +M Client::UserCommands +T Common::Application +T Common::Backends::NetworkUserBackend +T Common::Base64Encoder T Common::ClientConnection -D Common::ConfigEntry -? Common::ConfigManager -? Common::Configurable -T Common::Connection -D Common::Exception +? Common::Connection +D Common::GroupInfo D Common::HostInfo -? Common::Initializable -T Common::LoggerBase -T Common::Logger -T Common::LogManager -? Common::ModuleManager -T Common::RemoteLogger -W Common::Request -W Common::RequestHandler -W Common::RequestHandlers::DisconnectRequestHandler -W Common::RequestHandlers::FSInfoRequestHandler -W Common::RequestHandlers::StatusRequestHandler +D Common::Module +T Common::ModuleManager +? Common::Request +? Common::RequestHandler +T Common::RequestHandlerGroup +T Common::RequestHandlers::DisconnectRequestHandler +T Common::RequestHandlers::FSInfoRequestHandler +T Common::RequestHandlers::SimpleRequestHandler +T Common::RequestHandlers::SimpleRequestHandlerGroup +T Common::RequestHandlers::StatusRequestHandler ? Common::RequestManager -W Common::Requests::DisconnectRequest -W Common::Requests::FSInfoRequest -W Common::Requests::GSSAPIAuthRequest -W Common::Requests::SimpleRequest -W Common::Requests::StatusRequest -W Common::Requests::UserInfoRequest -W Common::Requests::UserListRequest -W Common::SystemBackend -W Common::SystemManager -T Common::ThreadManager -D Common::Tokenizer +T Common::Requests::DisconnectRequest +T Common::Requests::FSInfoRequest +T Common::Requests::IdentifyRequest +T Common::Requests::SimpleRequest +T Common::Requests::StatusRequest +T Common::SystemBackend +T Common::SystemManager +T Common::UserBackend +T Common::UserCache D Common::UserInfo +T Common::UserManager D Common::XmlPacket -? Daemon::Backends::NetworkLogger -W Daemon::RequestHandlers::CommandRequestHandler -W Daemon::Requests::IdentifyRequest -W Daemon::Requests::LogRequest -? modules::FileLogger -? modules::SystemBackendPosix -? modules::SystemBackendProc -? modules::UserBackendMysql -? Net::ClientConnection -? Net::Connection -? Net::FdManager -D Net::IPAddress -? Net::Listener +T Core::Application +D Core::ConfigEntry +? Core::ConfigManager +T Core::Configurable +D Core::Exception +T Core::Logger +T Core::LoggerBase +T Core::LogManager +T Core::RemoteLogger +T Core::Signals::Connection +T Core::Signals::GenericSignal +T Core::Signals::Signal0 +T Core::Signals::Signal1 +T Core::Signals::Signal2 +T Core::Signals::SignalBase +T Core::ThreadManager +T Core::Tokenizer +T Daemon::Application +T Daemon::Backends::NetworkLogger +T Daemon::RequestHandlers::CommandRequestHandler +T Daemon::Requests::LogRequest +? modules::FileLogger::FileLogger +T modules::FileLogger::Module +T modules::SystemBackendPosix::Module +? modules::SystemBackendPosix::SystemBackendPosix +T modules::SystemBackendProc::Module +? modules::SystemBackendProc::SystemBackendProc +T modules::UserBackendMysql::Module +T modules::UserBackendMysql::UserBackendMysql +T Net::ClientConnection +T Net::Connection +T Net::Listener D Net::Packet -? Net::ServerConnection +T Server::Application ? Server::ConnectionManager -W Server::RequestHandlers::DaemonCommandRequestHandler -W Server::RequestHandlers::DaemonFSInfoRequestHandler -W Server::RequestHandlers::DaemonListRequestHandler -W Server::RequestHandlers::DaemonStatusRequestHandler -W Server::RequestHandlers::GSSAPIAuthRequestHandler -W Server::RequestHandlers::IdentifyRequestHandler -W Server::RequestHandlers::LogRequestHandler -W Server::RequestHandlers::UserInfoRequestHandler -W Server::RequestHandlers::UserListRequestHandler -W Server::Requests::CommandRequest -W Server::Requests::DaemonStateUpdateRequest -W Server::UserBackend -W Server::UserManager +T Server::RequestHandlers::ConnectionRequestHandlerGroup +T Server::RequestHandlers::DaemonRequestHandlerGroup +T Server::RequestHandlers::UserRequestHandlerGroup +T Server::Requests::CommandRequest +T Server::Requests::DaemonStateUpdateRequest diff --git a/Konzept/Netzwerk.txt b/Konzept/Netzwerk.txt index 53cd9a1..852316d 100644 --- a/Konzept/Netzwerk.txt +++ b/Konzept/Netzwerk.txt @@ -1,57 +1,21 @@ -Ideen zum Netzwerkstack: - - -Alles TLS-verschlüsselt. - - -Initalisierung der Verbindung: - -Client/Dämon -> Server -+---+---+---+-------+-------+---------------------+---------------------+ -| 1 | 2 | 3 | 4 | 5 - 6 | 7 | 8 | -+---+---+---+-------+-------+---------------------+---------------------+ -|'M'|'A'|'D'|'C'/'D'|Version|min. Protokollversion|max. Protokollversion| -+---+---+---+-------+-------+---------------------+---------------------+ - -Server -> Client/Dämon -+---+---+---+---+-------+----------------+---+ -| 1 | 2 | 3 | 4 | 5 - 6 | 7 | 8 | -+---+---+---+---+-------+----------------+---+ -|'M'|'A'|'D'| 0 |Version|Protokollversion| 0 | -+---+---+---+---+-------+----------------+---+ - - -Datenpakete: - -+-------------------+----------+-------+-------------------+----- -| 1 - 2 | 3 - 4 | 5 - 6 | 7 - 8 | 9 - ... -+-------------------+----------+-------+-------------------+----- -|Typ des Datenpakets|Request-ID| 0 |Größe der Nutzdaten|Nutzdaten -+-------------------+----------+-------+-------------------+----- - -Jeder Client/Dämon und der Kern verwalten ihre eigenen Request-IDs, und insgesamt wird ein Request durch Quelle und ID identifiziert. -Damit es nicht zu Konflikten zwischen vom Kern und von Clients/Dämonen generierten IDs kommt, ist bei Client/Dämon-IDs das letzte Bit gesetzt, bei Kern-IDs nicht. - - -Implementierte Pakettypen: - -0000: OK (leeres Paket) -0001: Error (Fehlerinformationen) -0002: Disconnect (leeres Paket) -0010: Identify request (bisher: enthält den Namen des identifizierenden Dämons) -0011: Identify reply (bisher: leer) - -Mögliche Pakettypen: - -* Zertifikat-Anfrage -* Zertifikat-Antwort -* Login-Anfrage -> Übertragung von Kerberos-Daten -* Login-Antwort -* Dämon-Discovery -* Status-Anfrage (an Kern/Dämon) -* Status-Antwort -* Kommando (Shutdown, etc.) -* Kommando-Antwort -* Verbindung trennen - Anfrage und Antwort (implementiert) -+ weitere Anfragen und Antworten... - +Netzwerk-Protokoll: + +OpenSSL-verschlüsseltes XML-basiertes Protokoll + +Format: + + + + ... + + + + values/lists... + + ... + + ... + + +value-Typen: + int, uint, int64, uint64, float, double, longdouble, string, binary (base64-codierte Binärdaten) -- cgit v1.2.3