123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #include "Network.h"
- #ifndef WIN32
- #include <iostream>
- #include <netdb.h>
- #include <signal.h>
- #endif
- #include <openssl/err.h>
- #include <openssl/ssl.h>
- #include <openssl/bio.h>
- #include <Text.h>
- // Starte Netzwerk
- void Network::Start(int maxClients)
- {
- #ifdef WIN32
- WSADATA lpwd;
- lpwd.iMaxSockets = maxClients;
- int fehler = WSAStartup(MAKEWORD(2, 0), &lpwd);
- if (fehler != 0)
- MessageBox(0, "Win Sock 2.0 konnte nocht gestartet werden.", "Fehler", MB_ICONERROR);
- #else
- signal(SIGPIPE, SIG_IGN);
- #endif
- SSL_library_init();
- SSL_load_error_strings();
- OpenSSL_add_ssl_algorithms();
- }
- void Network::getHostName(char* name, int bufferLen)
- {
- gethostname(name, bufferLen);
- }
- char* Network::getHostAddresse()
- {
- char* addresse;
- char name[255] = "";
- getHostName(name, 255);
- PHOSTENT hostinfo;
- hostinfo = gethostbyname(name);
- if (!hostinfo)
- {
- #ifdef WIN32
- MessageBox(0, "Die Ip Addresse konnte nicht ermittelt werden.", "Fehler", MB_ICONERROR);
- #else
- std::cout << "Fehler: Die Ip Addresse konnte nicht ermittelt werden.";
- #endif
- return 0;
- }
- addresse = inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list);
- return addresse;
- }
- // Beende Netzwerk
- void Network::Exit()
- {
- #ifdef WIN32
- WSACleanup();
- #endif
- }
- Network::NetworkReader::NetworkReader(Verbindung* v)
- {
- verbindung = v;
- }
- Network::NetworkReader::~NetworkReader()
- {}
- //! Ließt aus der Datei
- //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt werden soll
- //! \param len Wie viele Bytes aus der Resource gelesen werden sollen
- void Network::NetworkReader::lese(char* bytes, int len)
- {
- verbindung->getNachricht(bytes, len);
- }
- //! Ließt die nächste zeile der Resource ein
- //! \return Die gelesene Zeile als Text mit zeilenumbruch
- Framework::Text* Network::NetworkReader::leseZeile()
- {
- int maxLength = 2048;
- char* buffer = new char[maxLength];
- char b;
- int index = 0;
- do
- {
- verbindung->getNachricht(&b, 1);
- buffer[index++] = b;
- if (index == maxLength)
- {
- maxLength += 2048;
- char* tmp = new char[maxLength];
- memcpy(tmp, buffer, (__int64)maxLength - 2048);
- delete[] buffer;
- buffer = tmp;
- }
- } while (b != '\n');
- buffer[index] = 0;
- Framework::Text* result = new Framework::Text(buffer);
- delete[] buffer;
- return result;
- }
- //! Prüft, ob die Resource vollständig gelesen wurde
- //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
- bool Network::NetworkReader::istEnde() const
- {
- return 0;
- }
- Network::NetworkWriter::NetworkWriter(Verbindung* v)
- {
- verbindung = v;
- }
- Network::NetworkWriter::~NetworkWriter()
- {}
- //! Schreibt in die Resource
- //! \param bytes Ein Array, der die Bytes enthält, welche in die Resource geschrieben werden soll
- //! \param len Wie viele Bytes in die Resource geschrieben werden sollen
- void Network::NetworkWriter::schreibe(const char* bytes, int len)
- {
- verbindung->sende(bytes, len);
- }
- //! Prüft, ob die Resource vollständig geschrieben wurde
- //! return 1, wenn die Resource vollständig geschrieben wurde. 0, sonst
- bool Network::NetworkWriter::istEnde() const
- {
- return 0;
- }
- Network::EncryptedNetworkReader::EncryptedNetworkReader(EncryptedVerbindung* v)
- {
- verbindung = v;
- }
- //! Ließt aus der Datei
- //! \param bytes Ein Array, der mit Bytes aus der Resource gefüllt werden soll
- //! \param len Wie viele Bytes aus der Resource gelesen werden sollen
- void Network::EncryptedNetworkReader::lese(char* bytes, int len)
- {
- verbindung->getNachrichtEncrypted(bytes, len);
- }
- //! Ließt die nächste zeile der Resource ein
- //! \return Die gelesene Zeile als Text mit zeilenumbruch
- Framework::Text* Network::EncryptedNetworkReader::leseZeile()
- {
- int maxLength = 2048;
- char* buffer = new char[maxLength];
- char b;
- int index = 0;
- do
- {
- verbindung->getNachrichtEncrypted(&b, 1);
- buffer[index++] = b;
- if (index == maxLength)
- {
- maxLength += 2048;
- char* tmp = new char[maxLength];
- memcpy(tmp, buffer, (__int64)maxLength - 2048);
- delete[] buffer;
- buffer = tmp;
- }
- } while (b != '\n');
- buffer[index] = 0;
- Framework::Text* result = new Framework::Text(buffer);
- delete[] buffer;
- return result;
- }
- //! Prüft, ob die Resource vollständig gelesen wurde
- //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
- bool Network::EncryptedNetworkReader::istEnde() const
- {
- return 0;
- }
- Network::EncryptedNetworkWriter::EncryptedNetworkWriter(EncryptedVerbindung* v)
- {
- verbindung = v;
- }
- //! Schreibt in die Resource
- //! \param bytes Ein Array, der die Bytes enthält, welche in die Resource geschrieben werden soll
- //! \param len Wie viele Bytes in die Resource geschrieben werden sollen
- void Network::EncryptedNetworkWriter::schreibe(const char* bytes, int len)
- {
- verbindung->sendeEncrypted(bytes, len);
- }
- //! Prüft, ob die Resource vollständig geschrieben wurde
- //! return 1, wenn die Resource vollständig geschrieben wurde. 0, sonst
- bool Network::EncryptedNetworkWriter::istEnde() const
- {
- return 0;
- }
|