123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #ifndef Server_H
- #define Server_H
- #include "Network.h"
- #include <ReferenceCounter.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 : 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
|