- reference<Link> L = new Link;
- std::string Allow = Conf.ReadValue("link", "allowmask", j);
- L->Name = (Conf.ReadValue("link", "name", j)).c_str();
- L->AllowMask = Allow;
- L->IPAddr = Conf.ReadValue("link", "ipaddr", j);
- L->Port = Conf.ReadInteger("link", "port", j, true);
- L->SendPass = Conf.ReadValue("link", "sendpass", j);
- L->RecvPass = Conf.ReadValue("link", "recvpass", j);
- L->Fingerprint = Conf.ReadValue("link", "fingerprint", j);
- L->HiddenFromStats = Conf.ReadFlag("link", "statshidden", j);
- L->Timeout = Conf.ReadInteger("link", "timeout", j, true);
- L->Hook = Conf.ReadValue("link", "ssl", j);
- L->Bind = Conf.ReadValue("link", "bind", j);
- L->Hidden = Conf.ReadFlag("link", "hidden", j);
+ ConfigTag* tag = i->second;
+ reference<Link> L = new Link(tag);
+ L->Name = tag->getString("name").c_str();
+ L->AllowMask = tag->getString("allowmask");
+ L->IPAddr = tag->getString("ipaddr");
+ L->Port = tag->getInt("port");
+ L->SendPass = tag->getString("sendpass", tag->getString("password"));
+ L->RecvPass = tag->getString("recvpass", tag->getString("password"));
+ L->Fingerprint = tag->getString("fingerprint");
+ L->HiddenFromStats = tag->getBool("statshidden");
+ L->Timeout = tag->getInt("timeout", 30);
+ L->Hook = tag->getString("ssl");
+ L->Bind = tag->getString("bind");
+ L->Hidden = tag->getBool("hidden");
+
+ if (L->Name.empty())
+ throw ModuleException("Invalid configuration, found a link tag without a name!" + (!L->IPAddr.empty() ? " IP address: "+L->IPAddr : ""));