Example #1
0
/// @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);
}