Server.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #ifndef Server_H
  2. #define Server_H
  3. #include "Network.h"
  4. #include <openssl/ssl.h>
  5. namespace Framework
  6. {
  7. namespace Encryption
  8. {
  9. class Key;
  10. }
  11. class Text;
  12. }
  13. using namespace Framework;
  14. namespace Network
  15. {
  16. class Server; // aus dieser Datei
  17. class SKlient; // aus dieser Datei
  18. class Server
  19. {
  20. private:
  21. SOCKET sock;
  22. SOCKADDR_IN addresse;
  23. int klients;
  24. int ref;
  25. public:
  26. // Konstruktor
  27. __declspec( dllexport ) Server();
  28. // Destruktor
  29. __declspec( dllexport ) ~Server();
  30. // nicht constant
  31. __declspec( dllexport ) bool verbinde( unsigned short port, int warteschlangenLen ); // Öffnet das Socket
  32. __declspec( dllexport ) SKlient *getKlient(); // nimmt Klient an
  33. __declspec( dllexport ) int getKlients( bool reset ); // gibt die Anzahl der Klients zurück
  34. __declspec( dllexport ) bool trenne(); // beendet den Server
  35. // constant
  36. __declspec( dllexport ) unsigned short getPort() const; // gibt den Port zurück
  37. // Reference Counting
  38. __declspec( dllexport ) Server *getThis();
  39. __declspec( dllexport ) Server *release();
  40. };
  41. class SKlient
  42. {
  43. private:
  44. SOCKET sock;
  45. sockaddr_in clientAddr;
  46. Encryption::Key *sendeKey;
  47. Encryption::Key *empfangKey;
  48. int downStreamBytes;
  49. int upStreamBytes;
  50. int ref;
  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 ); // sendet zum Klient
  62. __declspec( dllexport ) bool getNachricht( char *nachricht, int len ); // empfängt Nachricht von Klient
  63. __declspec( dllexport ) bool sendeEncrypted( const char *nachricht, int len ); // sendet zum Server
  64. __declspec( dllexport ) bool getNachrichtEncrypted( char *nachricht, int len ); // 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. // Reference Counting
  72. __declspec( dllexport ) SKlient *getThis();
  73. __declspec( dllexport ) SKlient *release();
  74. };
  75. class SSLSKlient;
  76. class SSLServer
  77. {
  78. private:
  79. SOCKET s;
  80. SOCKADDR_IN addr;
  81. SSL_CTX *ctx;
  82. Text *passw;
  83. int klients;
  84. int ref;
  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. // Reference Counting
  109. __declspec( dllexport ) SSLServer *getThis();
  110. __declspec( dllexport ) SSLServer *release();
  111. };
  112. class SSLSKlient
  113. {
  114. private:
  115. SOCKET s;
  116. SSL* ssl;
  117. sockaddr_in clientAddr;
  118. int downStreamBytes;
  119. int upStreamBytes;
  120. int ref;
  121. public:
  122. // Konstruktor
  123. __declspec( dllexport ) SSLSKlient( sockaddr_in client, SSL *ssl, SOCKET s );
  124. // Destruktor
  125. __declspec( dllexport ) ~SSLSKlient();
  126. // nicht constant
  127. __declspec( dllexport ) bool sende( const char *nachricht, int len ); // sendet zum Klient
  128. __declspec( dllexport ) bool getNachricht( char *nachricht, int len ); // 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 ) unsigned short getPort() const; // gibt den Port zurück
  134. __declspec( dllexport ) const char *getIp() const; // gibt die Ip des Klients zurück
  135. // Reference Counting
  136. __declspec( dllexport ) SSLSKlient *getThis();
  137. __declspec( dllexport ) SSLSKlient *release();
  138. };
  139. }
  140. #endif