Server.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #ifndef Server_H
  2. #define Server_H
  3. #include <ReferenceCounter.h>
  4. #include "Network.h"
  5. #ifndef HEADER_OPENSSL_TYPES_H
  6. struct ssl_ctx_st;
  7. struct ssl_st;
  8. #endif
  9. namespace Framework
  10. {
  11. namespace Encryption
  12. {
  13. class Key;
  14. }
  15. class Text;
  16. } // namespace Framework
  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(
  35. unsigned short port, int warteschlangenLen); // Öffnet das Socket
  36. __declspec(dllexport) SKlient* getKlient(); // nimmt Klient an
  37. __declspec(dllexport) int getKlients(
  38. bool reset); // gibt die Anzahl der Klients zurück
  39. __declspec(dllexport) bool trenne(); // beendet den Server
  40. // constant
  41. __declspec(
  42. dllexport) unsigned short getPort() const; // gibt den Port zurück
  43. __declspec(dllexport) bool isConnected()
  44. const; // giebt 1 zurück, falls der Server verbunden ist
  45. };
  46. class SKlient : public EncryptedVerbindung,
  47. public virtual ReferenceCounter
  48. {
  49. private:
  50. SOCKET sock;
  51. sockaddr_in clientAddr;
  52. Encryption::Key* sendeKey;
  53. Encryption::Key* empfangKey;
  54. int downStreamBytes;
  55. int upStreamBytes;
  56. public:
  57. // Konstruktor
  58. __declspec(dllexport) SKlient(sockaddr_in client, SOCKET sock);
  59. // Destruktor
  60. __declspec(dllexport) ~SKlient();
  61. // nicht constant
  62. __declspec(dllexport) void setEmpfangTimeout(
  63. int miliseconds); // Setzt ein timeout fürs empfangen von daten
  64. __declspec(dllexport) void setSendeKeyZ(
  65. Encryption::Key* key); // Setzt den Schlüssel fürs Senden
  66. __declspec(dllexport) void setEmpfangKeyZ(
  67. Encryption::Key* key); // Setzt den Schlüssel fürs Empfangen
  68. __declspec(dllexport) void setSendeKey(
  69. const char* key, int len); // Setzt den Schlüssel fürs Senden
  70. __declspec(dllexport) void setEmpfangKey(
  71. const char* key, int len); // Setzt den Schlüssel fürs Empfangen
  72. __declspec(dllexport) bool sende(
  73. const char* nachricht, int len) override; // sendet zum Klient
  74. __declspec(dllexport) bool getNachricht(
  75. char* nachricht, int len) override; // empfängt Nachricht von Klient
  76. __declspec(dllexport) bool sendeEncrypted(
  77. const char* nachricht, int len) override; // sendet zum Server
  78. __declspec(dllexport) bool getNachrichtEncrypted(
  79. char* nachricht, int len) override; // empfängt Nachricht
  80. __declspec(dllexport) int getDownloadBytes(
  81. bool reset); // gibt die anzahl von empfangen bytes zurück
  82. __declspec(dllexport) int getUploadBytes(
  83. bool reset); // gibt die anzahl von versendeter bytes zurück
  84. __declspec(dllexport) bool trenne(); // trennt die Verbindung zum Klient
  85. // constant
  86. __declspec(dllexport) bool hatNachricht(
  87. int zeit) const; // Wartet eine Zeit Lang auf eine Nachricht
  88. __declspec(
  89. dllexport) unsigned short getPort() const; // gibt den Port zurück
  90. __declspec(dllexport) const
  91. char* getIp() const; // gibt die Ip des Klients zurück
  92. __declspec(dllexport) bool waitForNextMessage()
  93. const; // wartet bis es etwas zu empfangen gibt
  94. };
  95. class SSLSKlient;
  96. class SSLServer : public virtual ReferenceCounter
  97. {
  98. private:
  99. SOCKET s;
  100. SOCKADDR_IN addr;
  101. ssl_ctx_st* ctx;
  102. Text* passw;
  103. int klients;
  104. public:
  105. // Konstruktor
  106. __declspec(dllexport) SSLServer();
  107. // Destruktor
  108. __declspec(dllexport) ~SSLServer();
  109. // nicht constant
  110. // Setzt den Pfad zur Datei, in dem das Certifikat gespeichert ist
  111. __declspec(dllexport) bool setCertificateFile(const char* file);
  112. // Setzt den Pfad zur Datei, in dem der private Schlüssel gespeichert
  113. // ist
  114. __declspec(dllexport) bool setPrivateKeyFile(const char* file);
  115. // setzt das passwort des private keys (muss vor setPrivateKeyFile
  116. // aufgerufen werden)
  117. __declspec(dllexport) void setPrivateKeyPassword(const char* password);
  118. // Öffnet das Socket
  119. __declspec(dllexport) bool verbinde(
  120. unsigned short port, int warteschlangenLen);
  121. // nimmt Klient an
  122. __declspec(dllexport) SSLSKlient* getKlient();
  123. // gibt die Anzahl der Klients zurück
  124. __declspec(dllexport) int getKlients(bool reset);
  125. // beendet den Server
  126. __declspec(dllexport) bool trenne();
  127. // constant
  128. // gibt den Port zurück
  129. __declspec(dllexport) unsigned short getPort() const;
  130. // giebt 1 zurück, falls der Server verbunden ist
  131. __declspec(dllexport) bool isConnected() const;
  132. };
  133. class SSLSKlient : public Verbindung,
  134. public virtual ReferenceCounter
  135. {
  136. private:
  137. SOCKET s;
  138. ssl_st* ssl;
  139. sockaddr_in clientAddr;
  140. int downStreamBytes;
  141. int upStreamBytes;
  142. public:
  143. // Konstruktor
  144. __declspec(dllexport)
  145. SSLSKlient(sockaddr_in client, ssl_st* ssl, SOCKET s);
  146. // Destruktor
  147. __declspec(dllexport) ~SSLSKlient();
  148. // nicht constant
  149. __declspec(dllexport) void setEmpfangTimeout(
  150. int miliseconds); // Setzt ein timeout fürs empfangen von daten
  151. __declspec(dllexport) bool sende(
  152. const char* nachricht, int len) override; // sendet zum Klient
  153. __declspec(dllexport) bool getNachricht(
  154. char* nachricht, int len) override; // empfängt Nachricht von Klient
  155. __declspec(dllexport) int getDownloadBytes(
  156. bool reset); // gibt die anzahl von empfangen bytes zurück
  157. __declspec(dllexport) int getUploadBytes(
  158. bool reset); // gibt die anzahl von versendeter bytes zurück
  159. __declspec(dllexport) bool trenne(); // trennt die Verbindung zum Klient
  160. // constant
  161. __declspec(dllexport) bool hatNachricht(
  162. int zeit) const; // Wartet eine Zeit Lang auf eine Nachricht
  163. __declspec(
  164. dllexport) unsigned short getPort() const; // gibt den Port zurück
  165. __declspec(dllexport) const
  166. char* getIp() const; // gibt die Ip des Klients zurück
  167. };
  168. } // namespace Network
  169. #endif