#ifndef Server_H #define Server_H #include "Network.h" #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 { private: SOCKET sock; SOCKADDR_IN addresse; int klients; int ref; 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 // Reference Counting __declspec( dllexport ) Server *getThis(); __declspec( dllexport ) Server *release(); }; class SKlient : public EncryptedVerbindung { private: SOCKET sock; sockaddr_in clientAddr; Encryption::Key *sendeKey; Encryption::Key *empfangKey; int downStreamBytes; int upStreamBytes; int ref; public: // Konstruktor __declspec( dllexport ) SKlient( sockaddr_in client, SOCKET sock ); // Destruktor __declspec( dllexport ) ~SKlient(); // nicht constant __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 ) unsigned short getPort() const; // gibt den Port zurück __declspec( dllexport ) const char *getIp() const; // gibt die Ip des Klients zurück // Reference Counting __declspec( dllexport ) SKlient *getThis(); __declspec( dllexport ) SKlient *release(); }; class SSLSKlient; class SSLServer { private: SOCKET s; SOCKADDR_IN addr; SSL_CTX *ctx; Text *passw; int klients; int ref; 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; // Reference Counting __declspec( dllexport ) SSLServer *getThis(); __declspec( dllexport ) SSLServer *release(); }; class SSLSKlient : public Verbindung { private: SOCKET s; SSL* ssl; sockaddr_in clientAddr; int downStreamBytes; int upStreamBytes; int ref; public: // Konstruktor __declspec( dllexport ) SSLSKlient( sockaddr_in client, SSL *ssl, SOCKET s ); // Destruktor __declspec( dllexport ) ~SSLSKlient(); // nicht constant __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 ) unsigned short getPort() const; // gibt den Port zurück __declspec( dllexport ) const char *getIp() const; // gibt die Ip des Klients zurück // Reference Counting __declspec( dllexport ) SSLSKlient *getThis(); __declspec( dllexport ) SSLSKlient *release(); }; } #endif