Server.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #ifndef Server_H
  2. #define Server_H
  3. #include "Network.h"
  4. #include <ReferenceCounter.h>
  5. #ifndef HEADER_OPENSSL_TYPES_H
  6. struct SSL_CTX;
  7. struct SSL;
  8. #endif
  9. namespace Framework
  10. {
  11. namespace Encryption
  12. {
  13. class Key;
  14. }
  15. class Text;
  16. }
  17. using namespace Framework;
  18. namespace Network
  19. {
  20. class Server; // aus dieser Datei
  21. class SKlient; // aus dieser Datei
  22. class Server : public virtual ReferenceCounter
  23. {
  24. private:
  25. SOCKET sock;
  26. SOCKADDR_IN addresse;
  27. int klients;
  28. public:
  29. // Konstruktor
  30. __declspec( dllexport ) Server();
  31. // Destruktor
  32. __declspec( dllexport ) ~Server();
  33. // nicht constant
  34. __declspec( dllexport ) bool verbinde( unsigned short port, int warteschlangenLen ); // Öffnet das Socket
  35. __declspec( dllexport ) SKlient *getKlient(); // nimmt Klient an
  36. __declspec( dllexport ) int getKlients( bool reset ); // gibt die Anzahl der Klients zurück
  37. __declspec( dllexport ) bool trenne(); // beendet den Server
  38. // constant
  39. __declspec( dllexport ) unsigned short getPort() const; // gibt den Port zurück
  40. __declspec( dllexport ) bool isConnected() const; // giebt 1 zurück, falls der Server verbunden ist
  41. };
  42. class SKlient : public EncryptedVerbindung, public virtual ReferenceCounter
  43. {
  44. private:
  45. SOCKET sock;
  46. sockaddr_in clientAddr;
  47. Encryption::Key *sendeKey;
  48. Encryption::Key *empfangKey;
  49. int downStreamBytes;
  50. int upStreamBytes;
  51. public:
  52. // Konstruktor
  53. __declspec( dllexport ) SKlient( sockaddr_in client, SOCKET sock );
  54. // Destruktor
  55. __declspec( dllexport ) ~SKlient();
  56. // nicht constant
  57. __declspec( dllexport ) void setSendeKeyZ( Encryption::Key *key ); // Setzt den Schlüssel fürs Senden
  58. __declspec( dllexport ) void setEmpfangKeyZ( Encryption::Key *key ); // Setzt den Schlüssel fürs Empfangen
  59. __declspec( dllexport ) void setSendeKey( char *key, int len ); // Setzt den Schlüssel fürs Senden
  60. __declspec( dllexport ) void setEmpfangKey( char *key, int len ); // Setzt den Schlüssel fürs Empfangen
  61. __declspec( dllexport ) bool sende( const char *nachricht, int len ) override; // sendet zum Klient
  62. __declspec( dllexport ) bool getNachricht( char *nachricht, int len ) override; // empfängt Nachricht von Klient
  63. __declspec( dllexport ) bool sendeEncrypted( const char *nachricht, int len ) override; // sendet zum Server
  64. __declspec( dllexport ) bool getNachrichtEncrypted( char *nachricht, int len ) override; // empfängt Nachricht
  65. __declspec( dllexport ) int getDownloadBytes( bool reset ); // gibt die anzahl von empfangen bytes zurück
  66. __declspec( dllexport ) int getUploadBytes( bool reset ); // gibt die anzahl von versendeter bytes zurück
  67. __declspec( dllexport ) bool trenne(); // trennt die Verbindung zum Klient
  68. // constant
  69. __declspec( dllexport ) unsigned short getPort() const; // gibt den Port zurück
  70. __declspec( dllexport ) const char *getIp() const; // gibt die Ip des Klients zurück
  71. };
  72. class SSLSKlient;
  73. class SSLServer : public virtual ReferenceCounter
  74. {
  75. private:
  76. SOCKET s;
  77. SOCKADDR_IN addr;
  78. SSL_CTX *ctx;
  79. Text *passw;
  80. int klients;
  81. public:
  82. // Konstruktor
  83. __declspec( dllexport ) SSLServer();
  84. // Destruktor
  85. __declspec( dllexport ) ~SSLServer();
  86. // nicht constant
  87. // Setzt den Pfad zur Datei, in dem das Certifikat gespeichert ist
  88. __declspec( dllexport ) bool setCertificateFile( const char *file );
  89. // Setzt den Pfad zur Datei, in dem der private Schlüssel gespeichert ist
  90. __declspec( dllexport ) bool setPrivateKeyFile( const char *file );
  91. // setzt das passwort des private keys (muss vor setPrivateKeyFile aufgerufen werden)
  92. __declspec( dllexport ) void setPrivateKeyPassword( const char *password );
  93. // Öffnet das Socket
  94. __declspec( dllexport ) bool verbinde( unsigned short port, int warteschlangenLen );
  95. // nimmt Klient an
  96. __declspec( dllexport ) SSLSKlient *getKlient();
  97. // gibt die Anzahl der Klients zurück
  98. __declspec( dllexport ) int getKlients( bool reset );
  99. // beendet den Server
  100. __declspec( dllexport ) bool trenne();
  101. // constant
  102. // gibt den Port zurück
  103. __declspec( dllexport ) unsigned short getPort() const;
  104. // giebt 1 zurück, falls der Server verbunden ist
  105. __declspec( dllexport ) bool isConnected() const;
  106. };
  107. class SSLSKlient : public Verbindung, public virtual ReferenceCounter
  108. {
  109. private:
  110. SOCKET s;
  111. SSL *ssl;
  112. sockaddr_in clientAddr;
  113. int downStreamBytes;
  114. int upStreamBytes;
  115. public:
  116. // Konstruktor
  117. __declspec( dllexport ) SSLSKlient( sockaddr_in client, SSL *ssl, SOCKET s );
  118. // Destruktor
  119. __declspec( dllexport ) ~SSLSKlient();
  120. // nicht constant
  121. __declspec( dllexport ) bool sende( const char *nachricht, int len ) override; // sendet zum Klient
  122. __declspec( dllexport ) bool getNachricht( char *nachricht, int len ) override; // empfängt Nachricht von Klient
  123. __declspec( dllexport ) int getDownloadBytes( bool reset ); // gibt die anzahl von empfangen bytes zurück
  124. __declspec( dllexport ) int getUploadBytes( bool reset ); // gibt die anzahl von versendeter bytes zurück
  125. __declspec( dllexport ) bool trenne(); // trennt die Verbindung zum Klient
  126. // constant
  127. __declspec( dllexport ) unsigned short getPort() const; // gibt den Port zurück
  128. __declspec( dllexport ) const char *getIp() const; // gibt die Ip des Klients zurück
  129. };
  130. }
  131. #endif