void MainServer::receiveAndSend (  )  [private]

Definition at line 110 of file MainServer.cpp.

00111 {
00112         bool found = false;
00113                 
00114         // create message
00115         Message message(listener->readFromBuffer());
00116         
00117         // try to cast in protocol objects
00118 
00119         // ServiceRequest
00120         if(!found){
00121                 try {
00122                         ServiceRequest tmp(message);
00123                         found = true;
00124                         uint32_t ID = clm->getFreeID();
00125                         std::string u_int_96_string = clm->getNext(ID).get_u_int_96();
00126                         ServiceOffer so((long int)ID, cryptosys ,u_int_96_string , hash, hashlength);
00127                         listener->clearBuffer();
00128                         listener->writeToBuffer(so.getFormatString());
00129                         listener->write();
00130                         listener->clearBuffer();
00131                         std::stringstream sstr;
00132                         sstr << ID;
00133                         std::string logstring = "ServiceOffer ID:" ;
00134                         logstring += sstr.str() ;
00135                         logstring += " ";
00136                         logstring += cryptosys ;
00137                         logstring += " sent uint96 HEX: ";
00138                         logstring += u_int_96_string ;
00139                         logstring += " Client IP:" ;    
00140                         logstring += listener->getClientIP();
00141                         logstring += " Port:" ; 
00142                         logstring += listener->getClientPort();
00143                         outputserver->osPrint(logstring);
00144                 }
00145                 catch ( MessageCastException& e ) {}    
00146         }
00147 
00148         // ServiceDone
00149         if(!found){
00150                 try {
00151                         ServiceDone tmp(message);
00152                         found = true;
00153                         if (!tmp.isFoundMatch()){
00154                                 if (clm->setCinotFound(tmp.getSessionId())){
00155                                         Acknowledgement tmp_p;
00156                                         std::stringstream sstr;
00157                                         sstr << tmp.getSessionId();
00158                                         std::string logstring = "Acknowledgement ID:" ;
00159                                         logstring += sstr.str() ;
00160                                         logstring += " ACK searched KEY not found Client IP:" ; 
00161                                         logstring += listener->getClientIP();
00162                                         logstring += " Port:" ; 
00163                                         logstring += listener->getClientPort();
00164                                         outputserver->osPrint(logstring);
00165                                         listener->clearBuffer();
00166                                         listener->writeToBuffer(tmp_p.getFormatString());
00167                                 }
00168                                 else{
00169                                         Error tmp_p("ID not Found in vector");
00170                                         std::stringstream sstr;
00171                                         sstr << tmp.getSessionId();
00172                                         std::string logstring = "Acknowledgement ID:" ;
00173                                         logstring += sstr.str() ;
00174                                         logstring += " ERR searched KEY not found Client IP:" ; 
00175                                         logstring += listener->getClientIP();
00176                                         logstring += " Port:" ; 
00177                                         logstring += listener->getClientPort();
00178                                         outputserver->osPrint(logstring);
00179                                         listener->clearBuffer();
00180                                         listener->writeToBuffer(tmp_p.getFormatString());
00181                                 }
00182 
00183                                 listener->write();
00184                                 listener->clearBuffer();
00185                         }
00186                         else{
00187                                 Acknowledgement ack;
00188                                 listener->clearBuffer();
00189                                 listener->writeToBuffer(ack.getFormatString());
00190                                 listener->write();
00191                                 listener->clearBuffer();
00192                                 std::stringstream sstr;
00193                                 sstr << tmp.getSessionId();
00194                                 std::string logstring = "Acknowledgement ID:" ;
00195                                 logstring += sstr.str() ;
00196                                 logstring += " ACK searched KEY found:";
00197                                 logstring += tmp.getMatchingBytes();
00198                                 logstring += " THANKS to Client with IP: " ;    
00199                                 logstring += listener->getClientIP();
00200                                 logstring += " Port:" ; 
00201                                 logstring += listener->getClientPort();
00202                                 outputserver->osPrint(logstring);
00203                                 stopServer();
00204                         }
00205 
00206 
00207                 }
00208                 catch ( MessageCastException& e ) {}    
00209         }
00210 
00211         // ServiceCancel
00212         if(!found){
00213                 try {
00214                         ServiceCancel tmp(message);
00215                         found = true;
00216                         if (clm->resetCi(tmp.getSessionId())){
00217                                         Acknowledgement tmp_p;
00218                                         std::stringstream sstr;
00219                                         sstr << tmp.getSessionId();
00220                                         std::string logstring = "Acknowledgement ID:" ;
00221                                         logstring += sstr.str() ;
00222                                         logstring += " ACK Cancel is set! Reason: " ;
00223                                         logstring += tmp.getReason();
00224                                         logstring += " Client IP:" ;    
00225                                         logstring += listener->getClientIP();
00226                                         logstring += " Port:" ; 
00227                                         logstring += listener->getClientPort();
00228                                         outputserver->osPrint(logstring);
00229                                         listener->clearBuffer();
00230                                         listener->writeToBuffer(tmp_p.getFormatString());
00231                                 }
00232                         else{
00233                                         Error tmp_p("ID not Found in vector");
00234                                         std::stringstream sstr;
00235                                         sstr << tmp.getSessionId();
00236                                         std::string logstring = "Error ID:" ;
00237                                         logstring += sstr.str() ;
00238                                         logstring += " ERR Cancel Client IP:" ; 
00239                                         logstring += listener->getClientIP();
00240                                         logstring += " Port:" ; 
00241                                         logstring += listener->getClientPort();
00242                                         outputserver->osPrint(logstring);
00243                                         listener->clearBuffer();
00244                                         listener->writeToBuffer(tmp_p.getFormatString());
00245                         }
00246                         listener->write();
00247                         listener->clearBuffer();
00248                 }
00249                 catch ( MessageCastException& e ) {}    
00250         }
00251 
00252         //Hald Request
00253         if(!found){
00254                 try {
00255                         HaltRequest tmp(message);
00256                         found = true;
00257                         if (!clm->writeAllToFile()){
00258                         //if (clm->setCiCancel(tmp.getJobId())){
00259                                         Acknowledgement tmp_p;
00260                                         std::stringstream sstr;
00261                                         sstr << tmp.getJobId();
00262                                         std::string logstring = "HaltRequest ID:" ;
00263                                         logstring += sstr.str() ;
00264                                         logstring += " ACK Cancel is set Client IP:" ;  
00265                                         logstring += listener->getClientIP();
00266                                         logstring += " Port:" ; 
00267                                         logstring += listener->getClientPort();
00268                                         outputserver->osPrint(logstring);
00269                                         listener->clearBuffer();
00270                                         listener->writeToBuffer(tmp_p.getFormatString());
00271                                         outputserver->osPrint("Vector was written to file");
00272                                         serverState = false;
00273                                         //throw new MainServerException("Server is shutting down!");
00274                                         outputserver->osPrint("Server is shutting down");
00275                                 }
00276                                 else{
00277                                         Error tmp_p("Job can not HALT cant write vector to file");
00278                                         std::string logstring;
00279                                         logstring = " ERR Cancel Client IP:" ;  
00280                                         logstring += listener->getClientIP();
00281                                         logstring += " Port:" ; 
00282                                         logstring += listener->getClientPort();
00283                                         outputserver->osPrint(logstring);
00284                                         listener->clearBuffer();
00285                                         listener->writeToBuffer(tmp_p.getFormatString());
00286                         }
00287                         listener->write();
00288                         listener->clearBuffer();
00289                 }
00290                 catch ( MessageCastException& e ) {}    
00291         }
00292         
00293         //Status request
00294         if(!found){
00295                 try {
00296                         StatusRequest tmp(message);
00297                         found = true;
00298                         std::string logstring;
00299                         std::stringstream sstr;
00300                         /*int switcher = clm->isActive(tmp.getJobId());
00301                         
00302 
00303                         if (switcher == 0){     
00304                                         Error err_0("ID not Found in vector");
00305                                         sstr << tmp.getJobId();
00306                                         logstring = "Error ID:" ;
00307                                         logstring += sstr.str() ;
00308                                         logstring += " ERR Status Request Client IP:" ; 
00309                                         logstring += listener->getClientIP();
00310                                         logstring += " Port:" ; 
00311                                         logstring += listener->getClientPort();
00312                                         outputserver->osPrint(logstring);
00313                                         listener->clearBuffer();
00314                                         listener->writeToBuffer(err_0.getFormatString());
00315                         }
00316                         if (switcher == 1){     
00317                                         StatusOffer stoff("is in Use");
00318                                         sstr << tmp.getJobId();
00319                                         logstring = "StatusOffer ID:" ;
00320                                         logstring += sstr.str() ;
00321                                         logstring += "is in USE Client IP:" ;   
00322                                         logstring += listener->getClientIP();
00323                                         logstring += " Port:" ; 
00324                                         logstring += listener->getClientPort();
00325                                         outputserver->osPrint(logstring);
00326                                         listener->clearBuffer();
00327                                         listener->writeToBuffer(stoff.getFormatString());
00328                         }
00329                         if (switcher == 2){     
00330                                         Error err_2("ID is finished yet");
00331                                         sstr << tmp.getJobId();
00332                                         logstring = "Error ID:" ;
00333                                         logstring += sstr.str() ;
00334                                         logstring += " ERR Status Request Client IP:" ; 
00335                                         logstring += listener->getClientIP();
00336                                         logstring += " Port:" ; 
00337                                         logstring += listener->getClientPort();
00338                                         outputserver->osPrint(logstring);
00339                                         listener->clearBuffer();
00340                                         listener->writeToBuffer(err_2.getFormatString());
00341                         }
00342                         
00343 
00344                 
00345                         listener->write();
00346                         listener->clearBuffer();
00347                         */
00348 
00349                                         logstring = "Job is active! Last HEX in Vector: ";
00350                                         logstring += clm->getLastHex();
00351                                         StatusOffer stoff(logstring);                                   
00352 
00353 
00354                                         sstr << tmp.getJobId();
00355                                         logstring = "StatusOffer ID:" ;
00356                                         logstring += sstr.str() ;
00357                                         logstring += "is in USE Client IP:" ;   
00358                                         logstring += listener->getClientIP();
00359                                         logstring += " Port:" ; 
00360                                         logstring += listener->getClientPort();
00361                                         outputserver->osPrint(logstring);
00362                                         listener->clearBuffer();
00363                                         listener->writeToBuffer(stoff.getFormatString());
00364                                         listener->write();
00365                                         listener->clearBuffer();
00366                 }
00367                 catch ( MessageCastException& e ) {}    
00368         }
00369         
00370         if(!found){
00371                         listener->clearBuffer();
00372                 }
00373 }  // receiveAndSend


Generated on Wed Jun 25 14:47:10 2008 for keyvil by  doxygen 1.5.1