/// @brief Generates parameters for notify script based on expired lease information /// /// @param params Notify parameters (all available info will be set here) /// @param exp expired lease details /// @param type type of lease (IA, TA or PD) void TSrvTransMgr::notifyExpireInfo(TNotifyScriptParams& params, const TSrvAddrMgr::TExpiredInfo& exp, TIAType type) { stringstream tmp; tmp << exp.ia->getIfindex(); params.addParam("IFINDEX", tmp.str()); SPtr<TIfaceIface> iface = SrvIfaceMgr().getIfaceByID(exp.ia->getIfindex()); if (iface) params.addParam("IFACE", iface->getName()); if (exp.ia->getSrvAddr()) params.addParam("REMOTE_ADDR", exp.ia->getSrvAddr()->getPlain()); switch (type) { case IATYPE_IA: case IATYPE_TA: { params.addAddr(exp.addr, 0, 0, ""); break; } case IATYPE_PD: { params.addPrefix(exp.addr, exp.prefixLen, 0, 0); break; } } tmp.str(""); tmp << exp.ia->getIAID(); params.addParam("IAID", tmp.str()); params.addParam("SRV_OPTION1", exp.client->getDUID()->getPlain()); // set client-id }
void TSrvIfaceMgr::notifyScripts(const std::string& scriptName, SPtr<TMsg> question, SPtr<TMsg> answer) { TNotifyScriptParams* params = (TNotifyScriptParams*)answer->getNotifyScriptParams(); // add info about relays SPtr<TSrvMsg> reply = (Ptr*)answer; const vector<TSrvMsg::RelayInfo> relayInfo = reply->getRelayInfo(); stringstream relaysNum; relaysNum << relayInfo.size(); params->addParam("RELAYS", relaysNum.str()); int cnt = 1; for (vector<TSrvMsg::RelayInfo>::const_reverse_iterator relay = relayInfo.rbegin(); relay != relayInfo.rend(); ++relay) { stringstream peer; stringstream link; peer << "RELAY" << cnt << "_PEER"; link << "RELAY" << cnt << "_LINK"; params->addParam(peer.str(), relay->PeerAddr_->getPlain()); params->addParam(link.str(), relay->LinkAddr_->getPlain()); } TIfaceMgr::notifyScripts(scriptName, question, answer); }