Server.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. int empfangTimeout;
  52. public:
  53. // Konstruktor
  54. __declspec(dllexport) SKlient( sockaddr_in client, SOCKET sock );
  55. // Destruktor
  56. __declspec(dllexport) ~SKlient();
  57. // nicht constant
  58. __declspec(dllexport) void setEmpfangTimeout( int miliseconds ); // Setzt ein timeout fürs empfangen von daten
  59. __declspec(dllexport) void setSendeKeyZ( Encryption::Key* key ); // Setzt den Schlüssel fürs Senden
  60. __declspec(dllexport) void setEmpfangKeyZ( Encryption::Key* key ); // Setzt den Schlüssel fürs Empfangen
  61. __declspec(dllexport) void setSendeKey( char* key, int len ); // Setzt den Schlüssel fürs Senden
  62. __declspec(dllexport) void setEmpfangKey( char* key, int len ); // Setzt den Schlüssel fürs Empfangen
  63. __declspec(dllexport) bool sende( const char* nachricht, int len ) override; // sendet zum Klient
  64. __declspec(dllexport) bool getNachricht( char* nachricht, int len ) override; // empfängt Nachricht von Klient
  65. __declspec(dllexport) bool sendeEncrypted( const char* nachricht, int len ) override; // sendet zum Server
  66. __declspec(dllexport) bool getNachrichtEncrypted( char* nachricht, int len ) override; // empfängt Nachricht
  67. __declspec(dllexport) int getDownloadBytes( bool reset ); // gibt die anzahl von empfangen bytes zurück
  68. __declspec(dllexport) int getUploadBytes( bool reset ); // gibt die anzahl von versendeter bytes zurück
  69. __declspec(dllexport) bool trenne(); // trennt die Verbindung zum Klient
  70. // constant
  71. __declspec(dllexport) bool hatNachricht( int zeit ) const; // Wartet eine Zeit Lang auf eine Nachricht
  72. __declspec(dllexport) unsigned short getPort() const; // gibt den Port zurück
  73. __declspec(dllexport) const char* getIp() const; // gibt die Ip des Klients zurück
  74. __declspec(dllexport) bool waitForNextMessage() const; // wartet bis es etwas zu empfangen gibt
  75. };
  76. class SSLSKlient;
  77. class SSLServer : public virtual ReferenceCounter
  78. {
  79. private:
  80. SOCKET s;
  81. SOCKADDR_IN addr;
  82. SSL_CTX* ctx;
  83. Text* passw;
  84. int klients;
  85. public:
  86. // Konstruktor
  87. __declspec(dllexport) SSLServer();
  88. // Destruktor
  89. __declspec(dllexport) ~SSLServer();
  90. // nicht constant
  91. // Setzt den Pfad zur Datei, in dem das Certifikat gespeichert ist
  92. __declspec(dllexport) bool setCertificateFile( const char* file );
  93. // Setzt den Pfad zur Datei, in dem der private Schlüssel gespeichert ist
  94. __declspec(dllexport) bool setPrivateKeyFile( const char* file );
  95. // setzt das passwort des private keys (muss vor setPrivateKeyFile aufgerufen werden)
  96. __declspec(dllexport) void setPrivateKeyPassword( const char* password );
  97. // Öffnet das Socket
  98. __declspec(dllexport) bool verbinde( unsigned short port, int warteschlangenLen );
  99. // nimmt Klient an
  100. __declspec(dllexport) SSLSKlient* getKlient();
  101. // gibt die Anzahl der Klients zurück
  102. __declspec(dllexport) int getKlients( bool reset );
  103. // beendet den Server
  104. __declspec(dllexport) bool trenne();
  105. // constant
  106. // gibt den Port zurück
  107. __declspec(dllexport) unsigned short getPort() const;
  108. // giebt 1 zurück, falls der Server verbunden ist
  109. __declspec(dllexport) bool isConnected() const;
  110. };
  111. class SSLSKlient : public Verbindung, public virtual ReferenceCounter
  112. {
  113. private:
  114. SOCKET s;
  115. SSL* ssl;
  116. sockaddr_in clientAddr;
  117. int downStreamBytes;
  118. int upStreamBytes;
  119. int empfangTimeout;
  120. public:
  121. // Konstruktor
  122. __declspec(dllexport) SSLSKlient( sockaddr_in client, SSL* ssl, SOCKET s );
  123. // Destruktor
  124. __declspec(dllexport) ~SSLSKlient();
  125. // nicht constant
  126. __declspec(dllexport) void setEmpfangTimeout( int miliseconds ); // Setzt ein timeout fürs empfangen von daten
  127. __declspec(dllexport) bool sende( const char* nachricht, int len ) override; // sendet zum Klient
  128. __declspec(dllexport) bool getNachricht( char* nachricht, int len ) override; // empfängt Nachricht von Klient
  129. __declspec(dllexport) int getDownloadBytes( bool reset ); // gibt die anzahl von empfangen bytes zurück
  130. __declspec(dllexport) int getUploadBytes( bool reset ); // gibt die anzahl von versendeter bytes zurück
  131. __declspec(dllexport) bool trenne(); // trennt die Verbindung zum Klient
  132. // constant
  133. __declspec(dllexport) bool hatNachricht( int zeit ) const; // Wartet eine Zeit Lang auf eine Nachricht
  134. __declspec(dllexport) unsigned short getPort() const; // gibt den Port zurück
  135. __declspec(dllexport) const char* getIp() const; // gibt die Ip des Klients zurück
  136. };
  137. }
  138. #endif