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
|
1.5.1