Server.h 5.9 KB

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