123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #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;
- 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
- };
- 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 ) 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
- };
- }
- #endif
|