MSClient.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #pragma once
  2. #include <Klient.h>
  3. #include <iostream>
  4. #include "Keys.h"
  5. #define MAIN_SERVER_PORT 5225
  6. #define MAIN_SERVER_IP "94.130.27.12"
  7. #define ACCOUNT_NAME "Test"
  8. #define ACCOUNT_PASSWORD "t"
  9. class MSClient
  10. {
  11. private:
  12. Network::Klient *k;
  13. char *key;
  14. unsigned char keyLen;
  15. int cId;
  16. unsigned short port;
  17. public:
  18. MSClient()
  19. {
  20. k = 0;
  21. key = 0;
  22. keyLen = 0;
  23. cId = 0;
  24. port = 0;
  25. }
  26. ~MSClient()
  27. {
  28. if( k )
  29. k->release();
  30. delete[] key;
  31. }
  32. bool registerSSL()
  33. {
  34. Network::SSLKlient *klientSSL = new Network::SSLKlient();
  35. int l = 0;
  36. if( !klientSSL->verbinde( MAIN_SERVER_PORT, MAIN_SERVER_IP ) )
  37. {
  38. std::cerr << "error while trying to connect to Main SSL Server\n";
  39. klientSSL->release();
  40. return 0;
  41. }
  42. klientSSL->sende( "\1", 5 );
  43. char byte = 0;
  44. klientSSL->getNachricht( &byte, 1 );
  45. if( byte == 3 )
  46. {
  47. klientSSL->getNachricht( &byte, 1 );
  48. char *message = new char[ byte + 1 ];
  49. message[ byte ] = 0;
  50. klientSSL->getNachricht( message, byte );
  51. std::cerr << "error while register new client server returned: " << message << "\n";
  52. delete[]message;
  53. klientSSL->sende( "\3", 1 );
  54. klientSSL->getNachricht( &byte, 1 );
  55. klientSSL->trenne();
  56. klientSSL->release();
  57. return 0;
  58. }
  59. if( byte == 1 )
  60. {
  61. klientSSL->getNachricht( (char*)&port, 4 );
  62. klientSSL->getNachricht( (char*)&cId, 4 );
  63. klientSSL->getNachricht( (char*)&keyLen, 1 );
  64. if( keyLen )
  65. {
  66. key = new char[ keyLen ];
  67. klientSSL->getNachricht( key, keyLen );
  68. }
  69. }
  70. klientSSL->sende( "\3", 1 );
  71. klientSSL->getNachricht( &byte, 1 );
  72. klientSSL->trenne();
  73. klientSSL->release();
  74. return 1;
  75. }
  76. bool connect()
  77. {
  78. if( k )
  79. return 1;
  80. k = new Network::Klient();
  81. int l = 0;
  82. char *key;
  83. Keys::getServerKey( &key, l, Keys::MAIN, Keys::SENDEN );
  84. k->setSendeKey( key, l );
  85. delete[] key;
  86. Keys::getServerKey( &key, l, Keys::MAIN, Keys::EMPFANGEN );
  87. k->setEmpfangKey( key, l );
  88. delete[] key;
  89. if( !k->verbinde( port, MAIN_SERVER_IP ) )
  90. {
  91. std::cerr << "error while trying to connect to Main Server\n";
  92. k = k->release();
  93. return 0;
  94. }
  95. k->sende( "\0", 1 ); // Verschlüsselung aktivieren
  96. k->sendeEncrypted( "\1", 1 );
  97. k->sendeEncrypted( (char*)&cId, 4 );
  98. char serverReturn = 0;
  99. k->getNachrichtEncrypted( &serverReturn, 1 );
  100. if( serverReturn == 3 )
  101. {
  102. k->getNachrichtEncrypted( &serverReturn, 1 );
  103. char *message = new char[ serverReturn + 1 ];
  104. message[ serverReturn ] = 0;
  105. k->getNachrichtEncrypted( message, serverReturn );
  106. std::cerr << "error while trying to identify registered client server returned: " << message << "\n";
  107. delete[] message;
  108. k->sendeEncrypted( "\3", 1 );
  109. k->getNachrichtEncrypted( &serverReturn, 1 );
  110. k->trenne();
  111. k = k->release();
  112. return 0;
  113. }
  114. else
  115. {
  116. k->setSendeKey( this->key, keyLen );
  117. k->setEmpfangKey( this->key, keyLen );
  118. return 1;
  119. }
  120. }
  121. bool unregister()
  122. {
  123. connect();
  124. if( !k )
  125. {
  126. std::cerr << "no connection to Main Server\n";
  127. return 0;
  128. }
  129. k->sendeEncrypted( "\7", 1 );
  130. char serverReturn = 0;
  131. k->getNachrichtEncrypted( &serverReturn, 1 );
  132. if( serverReturn == 3 )
  133. {
  134. k->getNachrichtEncrypted( &serverReturn, 1 );
  135. char *message = new char[ serverReturn + 1 ];
  136. message[ serverReturn ] = 0;
  137. k->getNachrichtEncrypted( message, serverReturn );
  138. std::cerr << "error while trying to unregistere client server returned: " << message << "\n";
  139. delete[] message;
  140. k->sendeEncrypted( "\3", 1 );
  141. k->getNachrichtEncrypted( &serverReturn, 1 );
  142. k->trenne();
  143. k = k->release();
  144. return 0;
  145. }
  146. k->sendeEncrypted( "\3", 1 );
  147. k->getNachrichtEncrypted( &serverReturn, 1 );
  148. k->trenne();
  149. k = k->release();
  150. cId = 0;
  151. delete key;
  152. key = 0;
  153. keyLen = 0;
  154. return 1;
  155. }
  156. };