void TClntOptIA_PD::setState(EState state) { SPtr<TClntCfgIface> cfgIface = ClntCfgMgr().getIface(this->Iface); SPtr<TClntCfgPD> cfgPD = cfgIface->getPD(getIAID()); if (!cfgPD) { Log(Error) << "Unable to find PD with iaid=" << getIAID() << " on the " << cfgIface->getFullName() << " interface (CfgMgr)." << LogEnd; return; } cfgPD->setState(state); SPtr<TAddrIA> addrPD = ClntAddrMgr().getPD(getIAID()); if (!addrPD) { /* Log(Error) << "Unable to find PD with iaid=" << getIAID() << " on the " << cfgIface->getFullName() << " interface (AddrMgr)." << LogEnd; */ /* Don't complain about it. It is normal that IA is being deleted when there are no more prefixes in it */ return; } addrPD->setState(state); }
:TClntMsg(iface, addr, SOLICIT_MSG) { IRT=SOL_TIMEOUT; MRT=SOL_MAX_RT; MRC=0; //these both below mean there is no ending condition and transactions MRD=0; //lasts till receiving answer RT=0; // ClientIdentifier option appendClientID(); SPtr<TAddrIA> addrIA; // all IAs are provided by ::checkSolicit() SPtr<TClntCfgIA> ia; iaLst.first(); while (ia = iaLst.get()) { SPtr<TClntOptIA_NA> iaOpt; iaOpt = new TClntOptIA_NA(ia, this); Options.push_back( (Ptr*)iaOpt ); if (!remoteAutoconf) ia->setState(STATE_INPROCESS); addrIA = ClntAddrMgr().getIA(ia->getIAID()); if (addrIA) addrIA->setState(STATE_INPROCESS); else Log(Error) << "AddrMgr does not have IA with IAID=" << ia->getIAID() << LogEnd; } // TA is provided by ::checkSolicit() if (ta) { SPtr<TClntOptTA> taOpt = new TClntOptTA(ta->getIAID(), this); Options.push_back( (Ptr*) taOpt); if (!remoteAutoconf) ta->setState(STATE_INPROCESS); addrIA = ClntAddrMgr().getTA(ta->getIAID()); if (addrIA) addrIA->setState(STATE_INPROCESS); else Log(Error) << "AddrMgr does not have TA with IAID=" << ia->getIAID() << LogEnd; } // all PDs are provided by ::checkSolicit() SPtr<TClntCfgPD> pd; pdLst.first(); while ( pd = pdLst.get() ) { SPtr<TClntOptIA_PD> pdOpt = new TClntOptIA_PD(pd, this); Options.push_back( (Ptr*)pdOpt ); if (!remoteAutoconf) pd->setState(STATE_INPROCESS); addrIA = ClntAddrMgr().getPD(pd->getIAID()); if (addrIA) addrIA->setState(STATE_INPROCESS); else Log(Error) << "AddrMgr does not have PD with IAID=" << pd->getIAID() << LogEnd; } if (rapid) Options.push_back(new TOptEmpty(OPTION_RAPID_COMMIT, this)); // RECONF-ACCEPT is added in TClntMsg::appendRequestedOptions() // append and switch to INPROCESS state if (!remoteAutoconf) appendTAOptions(true); // append options specified in the config file if (!remoteAutoconf) appendRequestedOptions(); appendAuthenticationOption(); IsDone = false; send(); }