Changeset 513
- Timestamp:
- 04/10/06 16:23:14 (3 years ago)
- Files:
-
- library/trunk/modules/service-gotek2/GotekPacket.hpp (modified) (1 diff)
- library/trunk/modules/service-gotek2/Makefile.am (modified) (1 diff)
- library/trunk/modules/service-gotek2/SQLContext.hpp (added)
- library/trunk/modules/service-gotek2/service-gotek2.cpp (modified) (20 diffs)
- library/trunk/modules/service-gotek2/service-gotek2.hpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
library/trunk/modules/service-gotek2/GotekPacket.hpp
r512 r513 5 5 #include <inttypes.h> 6 6 #include <string> 7 #include "service-gotek2.hpp" 7 8 8 9 namespace library library/trunk/modules/service-gotek2/Makefile.am
r504 r513 9 9 AM_LDFLAGS = -lpcre 10 10 11 pkglib_LTLIBRARIES = servicegotek .la11 pkglib_LTLIBRARIES = servicegotek2.la 12 12 13 servicegotek_la_SOURCES = service-gotek2.cpp service-gotek2.hpp 13 servicegotek2_la_SOURCES = service-gotek2.cpp service-gotek2.hpp 14 servicegotek2_la_SOURCES += GotekPacket.cpp GotekPacket.hpp 15 servicegotek2_la_SOURCES += GotekException.cpp GotekException.hpp 14 16 15 servicegotek _la_LDFLAGS = -module -no-undefined -avoid-version17 servicegotek2_la_LDFLAGS = -module -no-undefined -avoid-version library/trunk/modules/service-gotek2/service-gotek2.cpp
r509 r513 33 33 #include "service-gotek2.hpp" 34 34 35 #include "GotekPacket.hpp" 36 #include "GotekException.hpp" 37 38 #include "SQLContext.hpp" 39 40 35 41 #include "Socket.hpp" 36 42 #include "SocketManager.hpp" … … 52 58 53 59 #include "Utilities.hpp" 60 54 61 55 62 #ifdef STDTAGS … … 74 81 Library *g_Library; 75 82 83 84 85 char *library::mapEnum(GotekPacketType t) 86 { 87 static uint8_t GotekPacketTypeEnumMapping; 88 GotekPacketTypeEnumMapping = (uint8_t) t; 89 return (char *)&GotekPacketTypeEnumMapping; 90 } 91 92 93 94 76 95 /** 77 96 * The Constructor … … 163 182 m_ConsumeLevel = CL_ASSIGN; 164 183 165 m_State = GCS_VIRGIN; 166 m_ClientType = GCT_UNKNOWN; 184 m_ClientType = GCT_LOGIN; 185 186 187 GotekPacket *gp = GotekPacket::createWritePacket(SCMD_WELCOME); 188 // protocol version 189 gp->writeUInt8(2); 190 gp->writeUInt8(0); 191 192 // session key 193 m_SessionKey = (((unsigned long long) time(0)) << 48) | (((unsigned long long) (rand() & 0xFF)) << 32); 194 m_SessionKey |= (unsigned long long) rand(); 195 // gp->writeRaw(string(m_SessionKey,8)); 196 197 // server version 198 gp->writeString(string("library going gotek 2.0")); 199 200 // server description 201 gp->writeString(string("no description yet")); 202 203 // m_Socket->doWrite((char *)gp->buffer(), 20); 204 167 205 168 206 } … … 212 250 break; 213 251 214 case GCT_C TRL:252 case GCT_CONTROL: 215 253 cl=processCTRL(&needmoredata); 216 254 break; … … 235 273 } 236 274 237 GotekPacket gp = GotekPacket(m_Buffer);238 239 gp .readByte();240 241 if (m_Buffer.size() < gp .readUnsignedInt32() -5 )275 GotekPacket *gp = GotekPacket::createReadPacket(m_Buffer); 276 277 gp->readUInt8(); 278 279 if (m_Buffer.size() < gp->readUInt32() + 5 ) 242 280 { 243 281 *needmoredata = true; … … 250 288 try 251 289 { 252 gp .readString();253 gp .readString();254 m_Username = gp .readString();255 hash = pg.readRawString(64);256 command = gp .readByte();290 gp->readString(); 291 gp->readString(); 292 m_Username = gp->readString(); 293 hash = gp->readRaw(64); 294 command = gp->readUInt8(); 257 295 258 296 } 259 297 catch ( GotekException e ) 260 298 { 299 delete gp; 261 300 return CL_DROP; 262 301 } 302 delete gp; 263 303 264 304 // verfiy the data is sane … … 286 326 287 327 288 328 return CL_ASSIGN; 289 329 } 290 330 … … 317 357 ConsumeLevel cl = CL_ASSIGN; 318 358 319 GotekPacket gp = GotekPacket(m_Buffer);320 321 uint8_t command = gp .readByte();322 323 if (m_Buffer.size() < gp .readUnsignedInt32() -5 )359 GotekPacket *gp = GotekPacket::createReadPacket(m_Buffer); 360 361 uint8_t command = gp->readUInt8(); 362 363 if (m_Buffer.size() < gp->readUInt32() + 5 ) 324 364 { 325 365 *needmoredata = true; … … 332 372 { 333 373 case CCMD_CHECK_PRESENCE: 334 cl = processCTRL_CHECK_PRESENCE( &gp);374 cl = processCTRL_CHECK_PRESENCE(gp); 335 375 break; 336 376 337 377 case CCMD_STORE_MAGNET: 338 cl = processCTRL_STORE_MAGNET( &gp);378 cl = processCTRL_STORE_MAGNET(gp); 339 379 break; 340 380 341 381 case CCMD_REQUEST_NOTIFICATION: 342 cl = processCTRL_REQUEST_NOTIFICATION( &gp);382 cl = processCTRL_REQUEST_NOTIFICATION(gp); 343 383 break; 344 384 345 385 case CCMD_REQUEST_SILENCE: 346 cl = processCTRL_REQUEST_SILENCE( &gp);386 cl = processCTRL_REQUEST_SILENCE(gp); 347 387 break; 348 388 349 389 case CCMD_REPORT_INSTANCE: 350 cl = processCTRL_REPORT_INSTANCE( &gp);390 cl = processCTRL_REPORT_INSTANCE(gp); 351 391 break; 352 392 } … … 473 513 logPF(); 474 514 515 475 516 if ( m_QueryQueue.size() == 0 ) 476 517 { … … 480 521 } 481 522 523 bool ret = false; 524 482 525 switch ( m_ClientType ) 483 526 { … … 486 529 break; 487 530 488 case GCT_C TRL:531 case GCT_CONTROL: 489 532 ret = sqlSuccessCTRL(sqlresult); 490 533 break; … … 495 538 } 496 539 540 return ret; 497 541 } 498 542 … … 526 570 } 527 571 528 m_Socket->doWrite( &RPL_AUTHORIZED,1);572 m_Socket->doWrite(mapEnum(RPL_AUTHORIZED),1); 529 573 530 574 }else … … 532 576 // invalid login 533 577 logInfo("Login failed: %s\n",m_Username.c_str()); 534 m_Socket->doWrite( &RPL_DENIED,1);578 m_Socket->doWrite(mapEnum(RPL_DENIED),1); 535 579 m_Socket->setStatus(SS_CLEANQUIT); 536 580 } … … 540 584 // invalid login 541 585 logInfo("Login failed: %s\n",m_Username.c_str()); 542 m_Socket->doWrite( &RPL_DENIED,1);586 m_Socket->doWrite(mapEnum(RPL_DENIED),1); 543 587 m_Socket->setStatus(SS_CLEANQUIT); 544 588 } … … 580 624 } 581 625 626 bool ret = true; 627 582 628 switch ( m_ClientType ) 583 629 { … … 586 632 break; 587 633 588 case GCT_C TRL:634 case GCT_CONTROL: 589 635 ret = sqlFailureCTRL(sqlresult); 590 636 break; … … 594 640 break; 595 641 } 642 643 return ret; 596 644 } 597 645 library/trunk/modules/service-gotek2/service-gotek2.hpp
r509 r513 28 28 /* $Id$ */ 29 29 30 #ifndef HAVE_SERVICE_GOTEK2_HPP 31 #define HAVE_SERVICE_GOTEK2_HPP 32 30 33 #include "DialogueFactory.hpp" 31 34 #include "Module.hpp" … … 41 44 using namespace std; 42 45 46 47 43 48 namespace library 44 49 { … … 47 52 class SQLResult; 48 53 class SQLQuery; 54 class GotekPacket; 49 55 50 56 enum GotekClientType … … 101 107 }GotekPacketType; 102 108 109 char *mapEnum(GotekPacketType t); 103 110 104 111 class ServiceGotek2 : public Module , public DialogueFactory … … 149 156 150 157 bool sqlFailure(SQLResult *result); 151 bool sql SuccessLOGIN(SQLResult *result);158 bool sqlFailureLOGIN(SQLResult *result); 152 159 bool sqlFailureCTRL(SQLResult *result); 153 160 bool sqlFailureDATA(SQLResult *result); … … 166 173 } 167 174 extern library::Library *g_Library; 175 176 #endif 177
