#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; 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* 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; 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