#ifndef Server_H #define Server_H #include "Network.h" #include #ifndef HEADER_OPENSSL_TYPES_H struct SSL_CTX; struct SSL; #endif namespace Framework { namespace Encryption { class Key; } class Text; } 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; int empfangTimeout; 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( char* key, int len ); // Setzt den Schlüssel fürs Senden __declspec(dllexport) void setEmpfangKey( 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* 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* ssl; sockaddr_in clientAddr; int downStreamBytes; int upStreamBytes; int empfangTimeout; public: // Konstruktor __declspec(dllexport) SSLSKlient( sockaddr_in client, SSL* 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 }; } #endif