#ifndef Server_H #define Server_H #include #include "Network.h" #ifndef HEADER_OPENSSL_TYPES_H struct ssl_ctx_st; struct ssl_st; #endif namespace Framework { namespace Encryption { class Key; } class Text; } // namespace Framework using namespace Framework; namespace Network { class Server; // aus dieser Datei class SKlient; // aus dieser Datei class Server : public virtual ReferenceCounter { private: SOCKET sock; SOCKADDR_IN addresse; int klients; public: // Konstruktor __declspec(dllexport) Server(); // Destruktor __declspec(dllexport) ~Server(); // nicht constant __declspec(dllexport) bool verbinde( unsigned short port, int warteschlangenLen); // Öffnet das Socket __declspec(dllexport) SKlient* getKlient(); // nimmt Klient an __declspec(dllexport) int getKlients( bool reset); // gibt die Anzahl der Klients zurück __declspec(dllexport) bool trenne(); // beendet den Server // constant __declspec( dllexport) unsigned short getPort() const; // gibt den Port zurück __declspec(dllexport) bool isConnected() const; // giebt 1 zurück, falls der Server verbunden ist }; class SKlient : public EncryptedVerbindung, public virtual ReferenceCounter { private: SOCKET sock; sockaddr_in clientAddr; Encryption::Key* sendeKey; Encryption::Key* empfangKey; int downStreamBytes; int upStreamBytes; public: // Konstruktor __declspec(dllexport) SKlient(sockaddr_in client, SOCKET sock); // Destruktor __declspec(dllexport) ~SKlient(); // nicht constant __declspec(dllexport) void setEmpfangTimeout( int miliseconds); // Setzt ein timeout fürs empfangen von daten __declspec(dllexport) void setSendeKeyZ( Encryption::Key* key); // Setzt den Schlüssel fürs Senden __declspec(dllexport) void setEmpfangKeyZ( Encryption::Key* key); // Setzt den Schlüssel fürs Empfangen __declspec(dllexport) void setSendeKey( const char* key, int len); // Setzt den Schlüssel fürs Senden __declspec(dllexport) void setEmpfangKey( const char* key, int len); // Setzt den Schlüssel fürs Empfangen __declspec(dllexport) bool sende( const char* nachricht, int len) override; // sendet zum Klient __declspec(dllexport) bool getNachricht( char* nachricht, int len) override; // empfängt Nachricht von Klient __declspec(dllexport) bool sendeEncrypted( const char* nachricht, int len) override; // sendet zum Server __declspec(dllexport) bool getNachrichtEncrypted( char* nachricht, int len) override; // empfängt Nachricht __declspec(dllexport) int getDownloadBytes( bool reset); // gibt die anzahl von empfangen bytes zurück __declspec(dllexport) int getUploadBytes( bool reset); // gibt die anzahl von versendeter bytes zurück __declspec(dllexport) bool trenne(); // trennt die Verbindung zum Klient // constant __declspec(dllexport) bool hatNachricht( int zeit) const; // Wartet eine Zeit Lang auf eine Nachricht __declspec( dllexport) unsigned short getPort() const; // gibt den Port zurück __declspec(dllexport) const char* getIp() const; // gibt die Ip des Klients zurück __declspec(dllexport) bool waitForNextMessage() const; // wartet bis es etwas zu empfangen gibt }; class SSLSKlient; class SSLServer : public virtual ReferenceCounter { private: SOCKET s; SOCKADDR_IN addr; ssl_ctx_st* ctx; Text* passw; int klients; public: // Konstruktor __declspec(dllexport) SSLServer(); // Destruktor __declspec(dllexport) ~SSLServer(); // nicht constant // Setzt den Pfad zur Datei, in dem das Certifikat gespeichert ist __declspec(dllexport) bool setCertificateFile(const char* file); // Setzt den Pfad zur Datei, in dem der private Schlüssel gespeichert // ist __declspec(dllexport) bool setPrivateKeyFile(const char* file); // setzt das passwort des private keys (muss vor setPrivateKeyFile // aufgerufen werden) __declspec(dllexport) void setPrivateKeyPassword(const char* password); // Öffnet das Socket __declspec(dllexport) bool verbinde( unsigned short port, int warteschlangenLen); // nimmt Klient an __declspec(dllexport) SSLSKlient* getKlient(); // gibt die Anzahl der Klients zurück __declspec(dllexport) int getKlients(bool reset); // beendet den Server __declspec(dllexport) bool trenne(); // constant // gibt den Port zurück __declspec(dllexport) unsigned short getPort() const; // giebt 1 zurück, falls der Server verbunden ist __declspec(dllexport) bool isConnected() const; }; class SSLSKlient : public Verbindung, public virtual ReferenceCounter { private: SOCKET s; ssl_st* ssl; sockaddr_in clientAddr; int downStreamBytes; int upStreamBytes; public: // Konstruktor __declspec(dllexport) SSLSKlient(sockaddr_in client, ssl_st* ssl, SOCKET s); // Destruktor __declspec(dllexport) ~SSLSKlient(); // nicht constant __declspec(dllexport) void setEmpfangTimeout( int miliseconds); // Setzt ein timeout fürs empfangen von daten __declspec(dllexport) bool sende( const char* nachricht, int len) override; // sendet zum Klient __declspec(dllexport) bool getNachricht( char* nachricht, int len) override; // empfängt Nachricht von Klient __declspec(dllexport) int getDownloadBytes( bool reset); // gibt die anzahl von empfangen bytes zurück __declspec(dllexport) int getUploadBytes( bool reset); // gibt die anzahl von versendeter bytes zurück __declspec(dllexport) bool trenne(); // trennt die Verbindung zum Klient // constant __declspec(dllexport) bool hatNachricht( int zeit) const; // Wartet eine Zeit Lang auf eine Nachricht __declspec( dllexport) unsigned short getPort() const; // gibt den Port zurück __declspec(dllexport) const char* getIp() const; // gibt die Ip des Klients zurück }; } // namespace Network #endif