void TClntMsgSolicit::answer(SPtr<TClntMsg> msg) { if (shallRejectAnswer(msg)) { Log(Info) << "Server message was rejected." << LogEnd; return; } switch (msg->getType()) { case ADVERTISE_MSG: { if (this->getOption(OPTION_RAPID_COMMIT)) { Log(Info) << "Server responded with ADVERTISE instead of REPLY, probably does not support" " RAPID-COMMIT." << LogEnd; } ClntTransMgr().addAdvertise((Ptr*)msg); SPtr<TOptInteger> prefOpt = (Ptr*) msg->getOption(OPTION_PREFERENCE); if (prefOpt && (prefOpt->getValue() == 255) ) { Log(Info) << "ADVERTISE message with preference set to 255 received, so wait time for" " other possible ADVERTISE messages is skipped." << LogEnd; ClntTransMgr().sendRequest(Options, Iface); IsDone = true; return; } if (this->RC > 1) { ClntTransMgr().sendRequest(Options, Iface); IsDone = true; return; } break; } case REPLY_MSG: { if (!this->getOption(OPTION_RAPID_COMMIT)) { Log(Warning) << "REPLY received, but SOLICIT was sent without RAPID_COMMIT. Ignoring." << LogEnd; return; } if (!msg->getOption(OPTION_RAPID_COMMIT)) { Log(Warning) << "REPLY as answer for SOLICIT received without RAPID_COMMIT. Ignoring." << LogEnd; return; } TClntMsg::answer(msg); break; } default: Log(Warning) << "Invalid message type (" << msg->getType() << ") received as answer for SOLICIT message." << LogEnd; return; } }
void TClntMsgSolicit::doDuties() { if ( ClntTransMgr().getAdvertiseLstCount() ) { // there is a timeout, but we have already answers and all is ok ClntTransMgr().sendRequest(Options, Iface); IsDone = true; return; } send(); }
void TClntMsgInfRequest::answer(SPtr<TClntMsg> msg) { copyAAASPI(msg); TClntMsg::answer(msg); #if 0 //which option have we requested from server SPtr<TClntOptOptionRequest> ptrORO; ptrORO = (Ptr*)getOption(OPTION_ORO); SPtr<TOpt> option; msg->firstOption(); while(option = msg->getOption()) { //if option did what it was supposed to do ??? if (!option->doDuties()) { // Log(Debug) << "Setting option " << option->getOptType() << " failed." << LogEnd; continue; } if ( ptrORO && (ptrORO->isOption(option->getOptType())) ) ptrORO->delOption(option->getOptType()); SPtr<TOpt> requestOpt; this->firstOption(); while ( requestOpt = this->getOption()) { if (requestOpt->getOptType()==option->getOptType()) { delOption(requestOpt->getOptType()); break; } }//while } ptrORO->delOption(OPTION_INFORMATION_REFRESH_TIME); if (ptrORO && ptrORO->count()) { if (ClntCfgMgr().insistMode()){ Log(Notice) << "Insist-mode enabled. Not all options were assigned ("; for (int i=0; i<ptrORO->count(); i++) Log(Cont) << ptrORO->getReqOpt(i) << " "; Log(Cont) << "). Sending new INFORMATION-REQUEST." << LogEnd; ClntTransMgr().sendInfRequest(Options,Iface); } else { Log(Notice) << "Insist-mode disabled. Not all options were assigned ("; for (int i=0; i<ptrORO->count(); i++) Log(Cont) << ptrORO->getReqOpt(i) << " "; Log(Cont) << "). They will remain unconfigured." << LogEnd; IsDone = true; } } else { Log(Debug) << "All requested options were assigned." << LogEnd; IsDone=true; } return; #endif }