RegisterK.cpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973
  1. #include "../KSGKlient.h"
  2. #include "../KSGServer.h"
  3. #include "../Keys.h"
  4. #include <Globals.h>
  5. // Inhalt der RegisterKlient Klasse aus KSGKlient.h
  6. // Konstruktor
  7. RegisterKlient::RegisterKlient()
  8. {
  9. klient = 0;
  10. verbunden = 0;
  11. fehler = 0;
  12. brauchSchlüssel = 0;
  13. klientId = getKlientId();
  14. ref = 1;
  15. }
  16. // Destruktor
  17. RegisterKlient::~RegisterKlient() // wenn verbunden, dann trennen
  18. {
  19. cs.lock();
  20. if( klient )
  21. {
  22. char serverReturn = 0;
  23. if( verbunden )
  24. {
  25. if( brauchSchlüssel )
  26. {
  27. char byte = -1;
  28. klient->sendeEncrypted( &byte, 1 );
  29. }
  30. klient->sendeEncrypted( "\4", 1 );
  31. klient->getNachrichtEncrypted( &serverReturn, 1 );
  32. if( serverReturn == 3 )
  33. {
  34. char län = 0;
  35. klient->getNachrichtEncrypted( &län, 1 );
  36. char *nachricht = new char[ län + 1 ];
  37. nachricht[ län ] = 0;
  38. klient->getNachrichtEncrypted( nachricht, län );
  39. delete[]nachricht;
  40. }
  41. klient->sendeEncrypted( "\3", 1 );
  42. klient->getNachrichtEncrypted( &serverReturn, 1 );
  43. klient->trenne();
  44. }
  45. else
  46. {
  47. int keyLen = 0;
  48. char *key = 0;
  49. Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::SENDEN );
  50. klient->setSendeKey( key, keyLen );
  51. delete[] key;
  52. Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::EMPFANGEN );
  53. klient->setEmpfangKey( key, keyLen );
  54. delete[] key;
  55. klient->verbinde( klient->getServerPort(), klient->getServerIp() );
  56. klient->sendeEncrypted( "\1", 1 );
  57. klient->sendeEncrypted( (char*)&klientId, 4 );
  58. klient->getNachrichtEncrypted( &serverReturn, 1 );
  59. if( serverReturn == 3 )
  60. {
  61. char län = 0;
  62. klient->getNachrichtEncrypted( &län, 1 );
  63. char *nachricht = new char[ län + 1 ];
  64. nachricht[ län ] = 0;
  65. klient->getNachrichtEncrypted( nachricht, län );
  66. delete[]nachricht;
  67. }
  68. else
  69. {
  70. char *sl = 0;
  71. char slLän = getSchlüssel( &sl );
  72. klient->setSendeKey( sl, slLän );
  73. klient->setEmpfangKey( sl, slLän );
  74. delete[] sl;
  75. klient->sendeEncrypted( "\4", 1 );
  76. klient->getNachrichtEncrypted( &serverReturn, 1 );
  77. if( serverReturn == 3 )
  78. {
  79. char län = 0;
  80. klient->getNachrichtEncrypted( &län, 1 );
  81. char *nachricht = new char[ län + 1 ];
  82. nachricht[ län ] = 0;
  83. klient->getNachrichtEncrypted( nachricht, län );
  84. delete[]nachricht;
  85. }
  86. }
  87. klient->sendeEncrypted( "\3", 1 );
  88. klient->getNachrichtEncrypted( &serverReturn, 1 );
  89. klient->trenne();
  90. }
  91. klient = klient->release();
  92. }
  93. delete[]fehler;
  94. cs.unlock();
  95. }
  96. // nicht constant
  97. bool RegisterKlient::verbinde() // verbindet ich mit dem Register Server
  98. {
  99. cs.lock();
  100. if( verbunden )
  101. {
  102. cs.unlock();
  103. return 1;
  104. }
  105. brauchSchlüssel = 0;
  106. if( !klient )
  107. {
  108. char *msIp = getMainServerIp();
  109. unsigned short msPort = getMainServerPort();
  110. Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
  111. klient = new Klient();
  112. int keyLen = 0;
  113. char *key = 0;
  114. Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
  115. klient->setSendeKey( key, keyLen );
  116. delete[] key;
  117. Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
  118. klient->setEmpfangKey( key, keyLen );
  119. delete[] key;
  120. if( !klient->verbinde( msPort, msIp ) )
  121. {
  122. Framework::logLine( "ERROR: Server nicht erreichbar." );
  123. char *err = "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut.";
  124. delete[]fehler;
  125. fehler = new char[ textLength( err ) + 1 ];
  126. fehler[ textLength( err ) ] = 0;
  127. memcpy( fehler, err, textLength( err ) );
  128. klient = klient->release();
  129. delete[]msIp;
  130. cs.unlock();
  131. return 0;
  132. }
  133. delete[]msIp;
  134. klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
  135. klient->sendeEncrypted( "\1", 1 );
  136. klient->sendeEncrypted( (char*)&klientId, 4 );
  137. char serverReturn = 0;
  138. klient->getNachrichtEncrypted( &serverReturn, 1 );
  139. if( serverReturn == 3 )
  140. {
  141. char byte = 0;
  142. klient->getNachrichtEncrypted( &byte, 1 );
  143. delete[]fehler;
  144. fehler = new char[ byte + 1 ];
  145. fehler[ byte ] = 0;
  146. klient->getNachrichtEncrypted( fehler, byte );
  147. Framework::logLine( Text( "ERROR: " ) += fehler );
  148. klient->sendeEncrypted( "\3", 1 );
  149. klient->getNachrichtEncrypted( &serverReturn, 1 );
  150. klient->trenne();
  151. klient = klient->release();
  152. cs.unlock();
  153. return 0;
  154. }
  155. char *sl = 0;
  156. char slLän = getSchlüssel( &sl );
  157. klient->setSendeKey( sl, slLän );
  158. klient->setEmpfangKey( sl, slLän );
  159. delete[] sl;
  160. klient->sendeEncrypted( "\6\1", 2 );
  161. char byte = 0;
  162. klient->getNachrichtEncrypted( &byte, 1 );
  163. if( byte == 2 )
  164. {
  165. unsigned char lsIp[ 4 ];
  166. klient->getNachrichtEncrypted( (char *)lsIp, 4 );
  167. unsigned short lsPort = 0;
  168. klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
  169. klient->sendeEncrypted( "\3", 1 );
  170. klient->getNachrichtEncrypted( &serverReturn, 1 );
  171. klient->trenne();
  172. Text *lsIpT = new Text( "" );
  173. lsIpT->append( (int)lsIp[ 0 ] );
  174. lsIpT->append( "." );
  175. lsIpT->append( (int)lsIp[ 1 ] );
  176. lsIpT->append( "." );
  177. lsIpT->append( (int)lsIp[ 2 ] );
  178. lsIpT->append( "." );
  179. lsIpT->append( (int)lsIp[ 3 ] );
  180. Framework::logLine( ( ( Text( "Zugeteilter Register Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
  181. int keyLen = 0;
  182. char *key = 0;
  183. Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::SENDEN );
  184. klient->setSendeKey( key, keyLen );
  185. delete[] key;
  186. Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::EMPFANGEN );
  187. klient->setEmpfangKey( key, keyLen );
  188. delete[] key;
  189. klient->verbinde( lsPort, lsIpT->getText() );
  190. lsIpT = lsIpT->release();
  191. klient->sendeEncrypted( "\3", 1 );
  192. klient->getNachrichtEncrypted( &serverReturn, 1 );
  193. klient->trenne();
  194. }
  195. if( byte == 3 )
  196. {
  197. klient->getNachrichtEncrypted( &byte, 1 );
  198. delete[]fehler;
  199. fehler = new char[ byte + 1 ];
  200. fehler[ byte ] = 0;
  201. klient->getNachrichtEncrypted( fehler, byte );
  202. Framework::logLine( Text( "ERROR: " ) += fehler );
  203. klient->sendeEncrypted( "\3", 1 );
  204. klient->getNachrichtEncrypted( &serverReturn, 1 );
  205. klient->trenne();
  206. klient = klient->release();
  207. cs.unlock();
  208. return 0;
  209. }
  210. }
  211. Framework::logLine( "Verbinung mit Register Server wird hergestellt..." );
  212. int keyLen = 0;
  213. char *key = 0;
  214. Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::SENDEN );
  215. klient->setSendeKey( key, keyLen );
  216. delete[] key;
  217. Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::EMPFANGEN );
  218. klient->setEmpfangKey( key, keyLen );
  219. delete[] key;
  220. if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
  221. {
  222. if( klient->sendeEncrypted( "\1", 1 ) )
  223. {
  224. klient->sendeEncrypted( (char*)&klientId, 4 );
  225. char serverReturn = 0;
  226. klient->getNachrichtEncrypted( &serverReturn, 1 );
  227. if( serverReturn == 3 )
  228. {
  229. char byte = 0;
  230. klient->getNachrichtEncrypted( &byte, 1 );
  231. delete[]fehler;
  232. fehler = new char[ byte + 1 ];
  233. fehler[ byte ] = 0;
  234. klient->getNachrichtEncrypted( fehler, byte );
  235. Framework::logLine( Text( "ERROR: " ) += fehler );
  236. klient->sendeEncrypted( "\3", 1 );
  237. klient->getNachrichtEncrypted( &serverReturn, 1 );
  238. klient->trenne();
  239. cs.unlock();
  240. return 0;
  241. }
  242. char *sl = 0;
  243. char slLän = getSchlüssel( &sl );
  244. klient->setSendeKey( sl, slLän );
  245. klient->setEmpfangKey( sl, slLän );
  246. delete[] sl;
  247. verbunden = 1;
  248. cs.unlock();
  249. Framework::logLine( "Erfolgreich mit Register Server verbunden." );
  250. return 1;
  251. }
  252. else
  253. {
  254. Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
  255. char *err = "Der dir zugewiesene Registrierungs Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut.";
  256. delete[]fehler;
  257. fehler = new char[ textLength( err ) + 1 ];
  258. fehler[ textLength( err ) ] = 0;
  259. memcpy( fehler, err, textLength( err ) );
  260. klient = klient->release();
  261. }
  262. }
  263. else
  264. {
  265. Framework::logLine( "ERROR: Server nicht erreichbar." );
  266. char *err = "Der dir zugewiesene Registrierungs Server antwortet nicht. Bitte versuche es Später erneut.";
  267. delete[]fehler;
  268. fehler = new char[ textLength( err ) + 1 ];
  269. fehler[ textLength( err ) ] = 0;
  270. memcpy( fehler, err, textLength( err ) );
  271. klient = klient->release();
  272. }
  273. cs.unlock();
  274. return 0;
  275. }
  276. bool RegisterKlient::accountErstellen( const char *name, const char *pass, const char *geheim, const char *eMail, unsigned short jahr, char monat, char tag ) // erstellt den Account
  277. {
  278. if( !verbunden )
  279. verbinde();
  280. if( !verbunden )
  281. return 0;
  282. cs.lock();
  283. if( brauchSchlüssel )
  284. {
  285. char byte = -1;
  286. klient->sendeEncrypted( &byte, 1 );
  287. }
  288. brauchSchlüssel = 0;
  289. klient->sendeEncrypted( "\5", 1 );
  290. char serverReturn = 0;
  291. klient->getNachrichtEncrypted( &serverReturn, 1 );
  292. if( serverReturn == 3 )
  293. {
  294. char byte = 0;
  295. klient->getNachrichtEncrypted( &byte, 1 );
  296. delete[]fehler;
  297. fehler = new char[ byte + 1 ];
  298. fehler[ byte ] = 0;
  299. klient->getNachrichtEncrypted( fehler, byte );
  300. cs.unlock();
  301. return 0;
  302. }
  303. unsigned char län[ 4 ] = {
  304. (unsigned char)textLength( name ),
  305. (unsigned char)textLength( pass ),
  306. (unsigned char)textLength( geheim ),
  307. (unsigned char)textLength( eMail )
  308. };
  309. klient->sendeEncrypted( (char*)län, 4 );
  310. klient->sendeEncrypted( name, län[ 0 ] );
  311. klient->sendeEncrypted( pass, län[ 1 ] );
  312. klient->sendeEncrypted( geheim, län[ 2 ] );
  313. klient->sendeEncrypted( eMail, län[ 3 ] );
  314. klient->sendeEncrypted( (char*)&jahr, 2 );
  315. klient->sendeEncrypted( &monat, 1 );
  316. klient->sendeEncrypted( &tag, 1 );
  317. char byte = 0;
  318. klient->getNachrichtEncrypted( &byte, 1 );
  319. if( byte == 1 )
  320. {
  321. cs.unlock();
  322. return 1;
  323. }
  324. else if( byte == 3 )
  325. {
  326. klient->getNachrichtEncrypted( &byte, 1 );
  327. delete[]fehler;
  328. fehler = new char[ byte + 1 ];
  329. fehler[ byte ] = 0;
  330. klient->getNachrichtEncrypted( fehler, byte );
  331. }
  332. cs.unlock();
  333. return 0;
  334. }
  335. bool RegisterKlient::accountLöschen( const char *name, const char *pass, const char *geheim ) // löscht den Account
  336. {
  337. if( !verbunden )
  338. verbinde();
  339. if( !verbunden )
  340. return 0;
  341. cs.lock();
  342. if( brauchSchlüssel )
  343. {
  344. char byte = -1;
  345. klient->sendeEncrypted( &byte, 1 );
  346. }
  347. brauchSchlüssel = 0;
  348. klient->sendeEncrypted( "\6", 1 );
  349. char serverReturn = 0;
  350. klient->getNachrichtEncrypted( &serverReturn, 1 );
  351. if( serverReturn == 3 )
  352. {
  353. char byte = 0;
  354. klient->getNachrichtEncrypted( &byte, 1 );
  355. delete[]fehler;
  356. fehler = new char[ byte + 1 ];
  357. fehler[ byte ] = 0;
  358. klient->getNachrichtEncrypted( fehler, byte );
  359. cs.unlock();
  360. return 0;
  361. }
  362. unsigned char län[ 3 ] = {
  363. (unsigned char)textLength( name ),
  364. (unsigned char)textLength( pass ),
  365. (unsigned char)textLength( geheim )
  366. };
  367. klient->sendeEncrypted( (char*)län, 3 );
  368. klient->sendeEncrypted( name, län[ 0 ] );
  369. klient->sendeEncrypted( pass, län[ 1 ] );
  370. klient->sendeEncrypted( geheim, län[ 2 ] );
  371. char byte = 0;
  372. klient->getNachrichtEncrypted( &byte, 1 );
  373. if( byte == 1 )
  374. {
  375. brauchSchlüssel = 1;
  376. cs.unlock();
  377. return 1;
  378. }
  379. else if( byte == 3 )
  380. {
  381. klient->getNachrichtEncrypted( &byte, 1 );
  382. delete[]fehler;
  383. fehler = new char[ byte + 1 ];
  384. fehler[ byte ] = 0;
  385. klient->getNachrichtEncrypted( fehler, byte );
  386. }
  387. cs.unlock();
  388. return 0;
  389. }
  390. int RegisterKlient::accountBestätigen( const char *name, const char *pass ) // account Bestätigung fortsetzen
  391. {
  392. if( !verbunden )
  393. verbinde();
  394. if( !verbunden )
  395. return 0;
  396. cs.lock();
  397. if( brauchSchlüssel )
  398. {
  399. char byte = -1;
  400. klient->sendeEncrypted( &byte, 1 );
  401. }
  402. char byte = 0xE;
  403. klient->sendeEncrypted( &byte, 1 );
  404. char serverReturn = 0;
  405. klient->getNachrichtEncrypted( &serverReturn, 1 );
  406. if( serverReturn == 3 )
  407. {
  408. char byte = 0;
  409. klient->getNachrichtEncrypted( &byte, 1 );
  410. delete[]fehler;
  411. fehler = new char[ byte + 1 ];
  412. fehler[ byte ] = 0;
  413. klient->getNachrichtEncrypted( fehler, byte );
  414. cs.unlock();
  415. return 0;
  416. }
  417. unsigned char län[ 2 ] = {
  418. (unsigned char)textLength( name ),
  419. (unsigned char)textLength( pass )
  420. };
  421. klient->sendeEncrypted( (char*)län, 2 );
  422. klient->sendeEncrypted( name, län[ 0 ] );
  423. klient->sendeEncrypted( pass, län[ 1 ] );
  424. byte = 0;
  425. klient->getNachrichtEncrypted( &byte, 1 );
  426. brauchSchlüssel = 1;
  427. if( byte == 1 )
  428. {
  429. cs.unlock();
  430. return 1;
  431. }
  432. if( byte == 2 )
  433. {
  434. cs.unlock();
  435. return 2;
  436. }
  437. brauchSchlüssel = 0;
  438. if( byte == 3 )
  439. {
  440. klient->getNachrichtEncrypted( &byte, 1 );
  441. delete[]fehler;
  442. fehler = new char[ byte + 1 ];
  443. fehler[ byte ] = 0;
  444. klient->getNachrichtEncrypted( fehler, byte );
  445. }
  446. cs.unlock();
  447. return 0;
  448. }
  449. bool RegisterKlient::bestätigen( const char *schlüssel ) // bestätigt den Vorgang mit Schüssel
  450. {
  451. if( !brauchSchlüssel )
  452. return 1;
  453. cs.lock();
  454. unsigned char län = textLength( schlüssel );
  455. klient->sendeEncrypted( (char*)&län, 1 );
  456. klient->sendeEncrypted( schlüssel, län );
  457. klient->getNachrichtEncrypted( (char*)&län, 1 );
  458. cs.unlock();
  459. if( län )
  460. {
  461. brauchSchlüssel = 0;
  462. return 1;
  463. }
  464. else
  465. return 0;
  466. }
  467. void RegisterKlient::eMailErneutSenden() // E-Mail nochmal senden
  468. {
  469. cs.lock();
  470. char byte = -2;
  471. if( brauchSchlüssel )
  472. klient->sendeEncrypted( &byte, 1 );
  473. cs.unlock();
  474. }
  475. void RegisterKlient::später() // bestätigung später abclose
  476. {
  477. cs.lock();
  478. if( brauchSchlüssel )
  479. {
  480. char byte = -1;
  481. klient->sendeEncrypted( &byte, 1 );
  482. }
  483. brauchSchlüssel = 0;
  484. cs.unlock();
  485. }
  486. void RegisterKlient::abbrechen() // bricht den Vorgang ab
  487. {
  488. cs.lock();
  489. if( brauchSchlüssel )
  490. klient->sendeEncrypted( "\0", 1 );
  491. brauchSchlüssel = 0;
  492. cs.unlock();
  493. }
  494. bool RegisterKlient::passwortÄndern( const char *name, const char *pass, const char *geheim, const char *nPass ) // ändert das Passwort
  495. {
  496. if( !verbunden )
  497. verbinde();
  498. if( !verbunden )
  499. return 0;
  500. cs.lock();
  501. if( brauchSchlüssel )
  502. {
  503. char byte = -1;
  504. klient->sendeEncrypted( &byte, 1 );
  505. }
  506. brauchSchlüssel = 0;
  507. klient->sendeEncrypted( "\7", 1 );
  508. char serverReturn = 0;
  509. klient->getNachrichtEncrypted( &serverReturn, 1 );
  510. if( serverReturn == 3 )
  511. {
  512. char byte = 0;
  513. klient->getNachrichtEncrypted( &byte, 1 );
  514. delete[]fehler;
  515. fehler = new char[ byte + 1 ];
  516. fehler[ byte ] = 0;
  517. klient->getNachrichtEncrypted( fehler, byte );
  518. cs.unlock();
  519. return 0;
  520. }
  521. unsigned char län[ 4 ] = {
  522. (unsigned char)textLength( name ),
  523. (unsigned char)textLength( pass ),
  524. (unsigned char)textLength( nPass ),
  525. (unsigned char)textLength( geheim )
  526. };
  527. klient->sendeEncrypted( (char*)län, 4 );
  528. klient->sendeEncrypted( name, län[ 0 ] );
  529. klient->sendeEncrypted( pass, län[ 1 ] );
  530. klient->sendeEncrypted( nPass, län[ 2 ] );
  531. klient->sendeEncrypted( geheim, län[ 3 ] );
  532. char byte = 0;
  533. klient->getNachrichtEncrypted( &byte, 1 );
  534. if( byte == 1 )
  535. {
  536. cs.unlock();
  537. return 1;
  538. }
  539. else if( byte == 3 )
  540. {
  541. klient->getNachrichtEncrypted( &byte, 1 );
  542. delete[]fehler;
  543. fehler = new char[ byte + 1 ];
  544. fehler[ byte ] = 0;
  545. klient->getNachrichtEncrypted( fehler, byte );
  546. }
  547. cs.unlock();
  548. return 0;
  549. }
  550. bool RegisterKlient::eMailÄndern( const char *name, const char *pass, const char *geheim, const char *nEMail ) // ändert die E-Mail Addresse
  551. {
  552. if( !verbunden )
  553. verbinde();
  554. if( !verbunden )
  555. return 0;
  556. cs.lock();
  557. if( brauchSchlüssel )
  558. {
  559. char byte = -1;
  560. klient->sendeEncrypted( &byte, 1 );
  561. }
  562. brauchSchlüssel = 0;
  563. char byte = 8;
  564. klient->sendeEncrypted( &byte, 1 );
  565. char serverReturn = 0;
  566. klient->getNachrichtEncrypted( &serverReturn, 1 );
  567. if( serverReturn == 3 )
  568. {
  569. char byte = 0;
  570. klient->getNachrichtEncrypted( &byte, 1 );
  571. delete[]fehler;
  572. fehler = new char[ byte + 1 ];
  573. fehler[ byte ] = 0;
  574. klient->getNachrichtEncrypted( fehler, byte );
  575. cs.unlock();
  576. return 0;
  577. }
  578. unsigned char län[ 4 ] = {
  579. (unsigned char)textLength( name ),
  580. (unsigned char)textLength( pass ),
  581. (unsigned char)textLength( geheim ),
  582. (unsigned char)textLength( nEMail )
  583. };
  584. klient->sendeEncrypted( (char*)län, 4 );
  585. klient->sendeEncrypted( name, län[ 0 ] );
  586. klient->sendeEncrypted( pass, län[ 1 ] );
  587. klient->sendeEncrypted( geheim, län[ 2 ] );
  588. klient->sendeEncrypted( nEMail, län[ 3 ] );
  589. byte = 0;
  590. klient->getNachrichtEncrypted( &byte, 1 );
  591. if( byte == 1 )
  592. {
  593. cs.unlock();
  594. return 1;
  595. }
  596. else if( byte == 3 )
  597. {
  598. klient->getNachrichtEncrypted( &byte, 1 );
  599. delete[]fehler;
  600. fehler = new char[ byte + 1 ];
  601. fehler[ byte ] = 0;
  602. klient->getNachrichtEncrypted( fehler, byte );
  603. }
  604. cs.unlock();
  605. return 0;
  606. }
  607. bool RegisterKlient::geheimnisÄndern( const char *name, const char *pass, const char *geheim, const char *nGeheim ) // ändert das Geheimnis
  608. {
  609. if( !verbunden )
  610. verbinde();
  611. if( !verbunden )
  612. return 0;
  613. cs.lock();
  614. if( brauchSchlüssel )
  615. {
  616. char byte = -1;
  617. klient->sendeEncrypted( &byte, 1 );
  618. }
  619. brauchSchlüssel = 0;
  620. char byte = 9;
  621. klient->sendeEncrypted( &byte, 1 );
  622. char serverReturn = 0;
  623. klient->getNachrichtEncrypted( &serverReturn, 1 );
  624. if( serverReturn == 3 )
  625. {
  626. char byte = 0;
  627. klient->getNachrichtEncrypted( &byte, 1 );
  628. delete[]fehler;
  629. fehler = new char[ byte + 1 ];
  630. fehler[ byte ] = 0;
  631. klient->getNachrichtEncrypted( fehler, byte );
  632. cs.unlock();
  633. return 0;
  634. }
  635. unsigned char län[ 4 ] = {
  636. (unsigned char)textLength( name ),
  637. (unsigned char)textLength( pass ),
  638. (unsigned char)textLength( geheim ),
  639. (unsigned char)textLength( nGeheim )
  640. };
  641. klient->sendeEncrypted( (char*)län, 4 );
  642. klient->sendeEncrypted( name, län[ 0 ] );
  643. klient->sendeEncrypted( pass, län[ 1 ] );
  644. klient->sendeEncrypted( geheim, län[ 2 ] );
  645. klient->sendeEncrypted( nGeheim, län[ 3 ] );
  646. byte = 0;
  647. klient->getNachrichtEncrypted( &byte, 1 );
  648. if( byte == 1 )
  649. {
  650. cs.unlock();
  651. return 1;
  652. }
  653. else if( byte == 3 )
  654. {
  655. klient->getNachrichtEncrypted( &byte, 1 );
  656. delete[]fehler;
  657. fehler = new char[ byte + 1 ];
  658. fehler[ byte ] = 0;
  659. klient->getNachrichtEncrypted( fehler, byte );
  660. }
  661. cs.unlock();
  662. return 0;
  663. }
  664. bool RegisterKlient::nameVergessen( const char *pass, const char *geheim ) // schickt den Account Namen an die Bekannte E-Mail Addresse
  665. {
  666. if( !verbunden )
  667. verbinde();
  668. if( !verbunden )
  669. return 0;
  670. cs.lock();
  671. if( brauchSchlüssel )
  672. {
  673. char byte = -1;
  674. klient->sendeEncrypted( &byte, 1 );
  675. }
  676. brauchSchlüssel = 0;
  677. char byte = 0xA;
  678. klient->sendeEncrypted( &byte, 1 );
  679. char serverReturn = 0;
  680. klient->getNachrichtEncrypted( &serverReturn, 1 );
  681. if( serverReturn == 3 )
  682. {
  683. char byte = 0;
  684. klient->getNachrichtEncrypted( &byte, 1 );
  685. delete[]fehler;
  686. fehler = new char[ byte + 1 ];
  687. fehler[ byte ] = 0;
  688. klient->getNachrichtEncrypted( fehler, byte );
  689. cs.unlock();
  690. return 0;
  691. }
  692. unsigned char län[ 2 ] = {
  693. (unsigned char)textLength( pass ),
  694. (unsigned char)textLength( geheim )
  695. };
  696. klient->sendeEncrypted( (char*)län, 2 );
  697. klient->sendeEncrypted( pass, län[ 0 ] );
  698. klient->sendeEncrypted( geheim, län[ 1 ] );
  699. byte = 0;
  700. klient->getNachrichtEncrypted( &byte, 1 );
  701. if( byte == 1 )
  702. {
  703. cs.unlock();
  704. return 1;
  705. }
  706. else if( byte == 3 )
  707. {
  708. klient->getNachrichtEncrypted( &byte, 1 );
  709. delete[]fehler;
  710. fehler = new char[ byte + 1 ];
  711. fehler[ byte ] = 0;
  712. klient->getNachrichtEncrypted( fehler, byte );
  713. }
  714. cs.unlock();
  715. return 0;
  716. }
  717. bool RegisterKlient::passwortVergessen( const char *name, const char *geheim ) // schickt das Account Passwort an die Bekannte E-Mail Addresse
  718. {
  719. if( !verbunden )
  720. verbinde();
  721. if( !verbunden )
  722. return 0;
  723. cs.lock();
  724. if( brauchSchlüssel )
  725. {
  726. char byte = -1;
  727. klient->sendeEncrypted( &byte, 1 );
  728. }
  729. brauchSchlüssel = 0;
  730. char byte = 0xB;
  731. klient->sendeEncrypted( &byte, 1 );
  732. char serverReturn = 0;
  733. klient->getNachrichtEncrypted( &serverReturn, 1 );
  734. if( serverReturn == 3 )
  735. {
  736. char byte = 0;
  737. klient->getNachrichtEncrypted( &byte, 1 );
  738. delete[]fehler;
  739. fehler = new char[ byte + 1 ];
  740. fehler[ byte ] = 0;
  741. klient->getNachrichtEncrypted( fehler, byte );
  742. cs.unlock();
  743. return 0;
  744. }
  745. unsigned char län[ 2 ] = {
  746. (unsigned char)textLength( name ),
  747. (unsigned char)textLength( geheim )
  748. };
  749. klient->sendeEncrypted( (char*)län, 2 );
  750. klient->sendeEncrypted( name, län[ 0 ] );
  751. klient->sendeEncrypted( geheim, län[ 1 ] );
  752. byte = 0;
  753. klient->getNachrichtEncrypted( &byte, 1 );
  754. if( byte == 1 )
  755. {
  756. cs.unlock();
  757. return 1;
  758. }
  759. else if( byte == 3 )
  760. {
  761. klient->getNachrichtEncrypted( &byte, 1 );
  762. delete[]fehler;
  763. fehler = new char[ byte + 1 ];
  764. fehler[ byte ] = 0;
  765. klient->getNachrichtEncrypted( fehler, byte );
  766. }
  767. cs.unlock();
  768. return 0;
  769. }
  770. bool RegisterKlient::geheimnisVergessen( const char *name, const char *pass ) // schickt das Account Geheimnis an die Bekannte E-Mail Addresse
  771. {
  772. if( !verbunden )
  773. verbinde();
  774. if( !verbunden )
  775. return 0;
  776. cs.lock();
  777. if( brauchSchlüssel )
  778. {
  779. char byte = -1;
  780. klient->sendeEncrypted( &byte, 1 );
  781. }
  782. brauchSchlüssel = 0;
  783. char byte = 0xC;
  784. klient->sendeEncrypted( &byte, 1 );
  785. char serverReturn = 0;
  786. klient->getNachrichtEncrypted( &serverReturn, 1 );
  787. if( serverReturn == 3 )
  788. {
  789. char byte = 0;
  790. klient->getNachrichtEncrypted( &byte, 1 );
  791. delete[]fehler;
  792. fehler = new char[ byte + 1 ];
  793. fehler[ byte ] = 0;
  794. klient->getNachrichtEncrypted( fehler, byte );
  795. cs.unlock();
  796. return 0;
  797. }
  798. unsigned char län[ 2 ] = {
  799. (unsigned char)textLength( name ),
  800. (unsigned char)textLength( pass )
  801. };
  802. klient->sendeEncrypted( (char*)län, 2 );
  803. klient->sendeEncrypted( name, län[ 0 ] );
  804. klient->sendeEncrypted( pass, län[ 1 ] );
  805. byte = 0;
  806. klient->getNachrichtEncrypted( &byte, 1 );
  807. if( byte == 1 )
  808. {
  809. cs.unlock();
  810. return 1;
  811. }
  812. else if( byte == 3 )
  813. {
  814. klient->getNachrichtEncrypted( &byte, 1 );
  815. delete[]fehler;
  816. fehler = new char[ byte + 1 ];
  817. fehler[ byte ] = 0;
  818. klient->getNachrichtEncrypted( fehler, byte );
  819. }
  820. cs.unlock();
  821. return 0;
  822. }
  823. bool RegisterKlient::eMailVergessen( const char *name, const char *pass, const char *geheim, char **eMail ) // gibt die E-Mail Addresse des Accounts zurück
  824. {
  825. if( !verbunden )
  826. verbinde();
  827. if( !verbunden )
  828. return 0;
  829. cs.lock();
  830. if( brauchSchlüssel )
  831. {
  832. char byte = -1;
  833. klient->sendeEncrypted( &byte, 1 );
  834. }
  835. brauchSchlüssel = 0;
  836. char byte2 = 0xD;
  837. klient->sendeEncrypted( &byte2, 1 );
  838. char serverReturn = 0;
  839. klient->getNachrichtEncrypted( &serverReturn, 1 );
  840. if( serverReturn == 3 )
  841. {
  842. char byte = 0;
  843. klient->getNachrichtEncrypted( &byte, 1 );
  844. delete[]fehler;
  845. fehler = new char[ byte + 1 ];
  846. fehler[ byte ] = 0;
  847. klient->getNachrichtEncrypted( fehler, byte );
  848. cs.unlock();
  849. return 0;
  850. }
  851. unsigned char län[ 3 ] = {
  852. (unsigned char)textLength( name ),
  853. (unsigned char)textLength( pass ),
  854. (unsigned char)textLength( geheim )
  855. };
  856. klient->sendeEncrypted( (char*)län, 3 );
  857. klient->sendeEncrypted( name, län[ 0 ] );
  858. klient->sendeEncrypted( pass, län[ 1 ] );
  859. klient->sendeEncrypted( geheim, län[ 2 ] );
  860. unsigned char byte = 0;
  861. klient->getNachrichtEncrypted( (char*)&byte, 1 );
  862. if( byte == 1 )
  863. {
  864. klient->getNachrichtEncrypted( (char*)&byte, 1 );
  865. char *mail = new char[ byte + 1 ];
  866. mail[ byte ] = 0;
  867. klient->getNachrichtEncrypted( mail, byte );
  868. *eMail = mail;
  869. cs.unlock();
  870. return 1;
  871. }
  872. else if( byte == 3 )
  873. {
  874. klient->getNachrichtEncrypted( (char*)&byte, 1 );
  875. delete[]fehler;
  876. fehler = new char[ byte + 1 ];
  877. fehler[ byte ] = 0;
  878. klient->getNachrichtEncrypted( fehler, byte );
  879. }
  880. cs.unlock();
  881. return 0;
  882. }
  883. bool RegisterKlient::keepAlive() // Erhält die Verbindung aufrecht
  884. {
  885. if( !verbunden )
  886. return 0;
  887. char res = 0;
  888. if( !cs.tryLock() )
  889. return 1;
  890. Framework::logLine( "Verbindungstest zum Register Server..." );
  891. bool ok = klient->sendeEncrypted( "\xF", 1 );
  892. ok &= klient->getNachrichtEncrypted( &res, 1 );
  893. cs.unlock();
  894. if( res != 1 || !ok )
  895. {
  896. Framework::logLine( "Verbindungsabbruch." );
  897. trenne();
  898. }
  899. else
  900. Framework::logLine( "Verbindung besteht." );
  901. return res == 1;
  902. }
  903. bool RegisterKlient::trenne() // trennt sich von dem Register Server
  904. {
  905. if( verbunden )
  906. {
  907. cs.lock();
  908. Framework::logLine( "Verbindung zum Register Server wird getrennt..." );
  909. if( brauchSchlüssel )
  910. {
  911. char byte = -1;
  912. klient->sendeEncrypted( &byte, 1 );
  913. }
  914. brauchSchlüssel = 0;
  915. klient->sendeEncrypted( "\3", 1 );
  916. char serverReturn = 0;
  917. klient->getNachrichtEncrypted( &serverReturn, 1 );
  918. klient->trenne();
  919. verbunden = 0;
  920. cs.unlock();
  921. }
  922. return 1;
  923. }
  924. // constant
  925. bool RegisterKlient::istVerbunden() const // prüft, ob mit Register Server verbunden
  926. {
  927. return verbunden;
  928. }
  929. bool RegisterKlient::vorgangBrauchBestätigung() const // prüft, ob eine Bestätigung notwendig ist
  930. {
  931. return brauchSchlüssel;
  932. }
  933. char *RegisterKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
  934. {
  935. return fehler;
  936. }
  937. // Reference Counting
  938. RegisterKlient *RegisterKlient::getThis()
  939. {
  940. ref++;
  941. return this;
  942. }
  943. RegisterKlient *RegisterKlient::release()
  944. {
  945. ref--;
  946. if( !ref )
  947. delete this;
  948. return 0;
  949. }