Network.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #include "Network.h"
  2. #ifndef WIN32
  3. # include <iostream>
  4. # include <netdb.h>
  5. # include <signal.h>
  6. #endif
  7. #include <Logging.h>
  8. #include <openssl/bio.h>
  9. #include <openssl/err.h>
  10. #include <openssl/ssl.h>
  11. #include <Text.h>
  12. // Starte Netzwerk
  13. void Network::Start(int maxClients)
  14. {
  15. #ifdef WIN32
  16. WSADATA lpwd;
  17. lpwd.iMaxSockets = maxClients;
  18. int fehler = WSAStartup(MAKEWORD(2, 0), &lpwd);
  19. if (fehler != 0)
  20. Framework::Logging::error()
  21. << "Could not initialize Win Sock 2.0 WSAStartup: " << fehler;
  22. #else
  23. signal(SIGPIPE, SIG_IGN);
  24. #endif
  25. SSL_library_init();
  26. SSL_load_error_strings();
  27. OpenSSL_add_ssl_algorithms();
  28. }
  29. void Network::getHostName(char* name, int bufferLen)
  30. {
  31. gethostname(name, bufferLen);
  32. }
  33. char* Network::getHostAddresse()
  34. {
  35. char* addresse;
  36. char name[255] = "";
  37. getHostName(name, 255);
  38. PHOSTENT hostinfo;
  39. hostinfo = gethostbyname(name);
  40. if (!hostinfo)
  41. {
  42. Framework::Logging::error()
  43. << "The ip address of host '" << name << "' could not be resolved";
  44. return 0;
  45. }
  46. addresse = inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list);
  47. return addresse;
  48. }
  49. // Beende Netzwerk
  50. void Network::Exit()
  51. {
  52. #ifdef WIN32
  53. WSACleanup();
  54. #endif
  55. }
  56. Network::NetworkReader::NetworkReader(Verbindung* v)
  57. {
  58. verbindung = v;
  59. }
  60. Network::NetworkReader::~NetworkReader() {}
  61. //! Ließt aus der Datei
  62. //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt werden soll
  63. //! \param len Wie viele Bytes aus der Resource gelesen werden sollen
  64. void Network::NetworkReader::lese(char* bytes, int len)
  65. {
  66. verbindung->getNachricht(bytes, len);
  67. }
  68. //! Ließt die nächste zeile der Resource ein
  69. //! \return Die gelesene Zeile als Text mit zeilenumbruch
  70. Framework::Text* Network::NetworkReader::leseZeile()
  71. {
  72. int maxLength = 2048;
  73. char* buffer = new char[maxLength];
  74. char b;
  75. int index = 0;
  76. do
  77. {
  78. verbindung->getNachricht(&b, 1);
  79. buffer[index++] = b;
  80. if (index == maxLength)
  81. {
  82. maxLength += 2048;
  83. char* tmp = new char[maxLength];
  84. memcpy(tmp, buffer, (__int64)maxLength - 2048);
  85. delete[] buffer;
  86. buffer = tmp;
  87. }
  88. } while (b != '\n');
  89. buffer[index] = 0;
  90. Framework::Text* result = new Framework::Text(buffer);
  91. delete[] buffer;
  92. return result;
  93. }
  94. //! Prüft, ob die Resource vollständig gelesen wurde
  95. //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
  96. bool Network::NetworkReader::istEnde() const
  97. {
  98. return 0;
  99. }
  100. Network::NetworkWriter::NetworkWriter(Verbindung* v)
  101. {
  102. verbindung = v;
  103. }
  104. Network::NetworkWriter::~NetworkWriter() {}
  105. //! Schreibt in die Resource
  106. //! \param bytes Ein Array, der die Bytes enthält, welche in die Resource
  107. //! geschrieben werden soll \param len Wie viele Bytes in die Resource
  108. //! geschrieben werden sollen
  109. void Network::NetworkWriter::schreibe(const char* bytes, int len)
  110. {
  111. verbindung->sende(bytes, len);
  112. }
  113. //! Prüft, ob die Resource vollständig geschrieben wurde
  114. //! return 1, wenn die Resource vollständig geschrieben wurde. 0, sonst
  115. bool Network::NetworkWriter::istEnde() const
  116. {
  117. return 0;
  118. }
  119. Network::EncryptedNetworkReader::EncryptedNetworkReader(EncryptedVerbindung* v)
  120. {
  121. verbindung = v;
  122. }
  123. //! Ließt aus der Datei
  124. //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt werden soll
  125. //! \param len Wie viele Bytes aus der Resource gelesen werden sollen
  126. void Network::EncryptedNetworkReader::lese(char* bytes, int len)
  127. {
  128. verbindung->getNachrichtEncrypted(bytes, len);
  129. }
  130. //! Ließt die nächste zeile der Resource ein
  131. //! \return Die gelesene Zeile als Text mit zeilenumbruch
  132. Framework::Text* Network::EncryptedNetworkReader::leseZeile()
  133. {
  134. int maxLength = 2048;
  135. char* buffer = new char[maxLength];
  136. char b;
  137. int index = 0;
  138. do
  139. {
  140. verbindung->getNachrichtEncrypted(&b, 1);
  141. buffer[index++] = b;
  142. if (index == maxLength)
  143. {
  144. maxLength += 2048;
  145. char* tmp = new char[maxLength];
  146. memcpy(tmp, buffer, (__int64)maxLength - 2048);
  147. delete[] buffer;
  148. buffer = tmp;
  149. }
  150. } while (b != '\n');
  151. buffer[index] = 0;
  152. Framework::Text* result = new Framework::Text(buffer);
  153. delete[] buffer;
  154. return result;
  155. }
  156. //! Prüft, ob die Resource vollständig gelesen wurde
  157. //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
  158. bool Network::EncryptedNetworkReader::istEnde() const
  159. {
  160. return 0;
  161. }
  162. Network::EncryptedNetworkWriter::EncryptedNetworkWriter(EncryptedVerbindung* v)
  163. {
  164. verbindung = v;
  165. }
  166. //! Schreibt in die Resource
  167. //! \param bytes Ein Array, der die Bytes enthält, welche in die Resource
  168. //! geschrieben werden soll \param len Wie viele Bytes in die Resource
  169. //! geschrieben werden sollen
  170. void Network::EncryptedNetworkWriter::schreibe(const char* bytes, int len)
  171. {
  172. verbindung->sendeEncrypted(bytes, len);
  173. }
  174. //! Prüft, ob die Resource vollständig geschrieben wurde
  175. //! return 1, wenn die Resource vollständig geschrieben wurde. 0, sonst
  176. bool Network::EncryptedNetworkWriter::istEnde() const
  177. {
  178. return 0;
  179. }