summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/links.conf.example57
-rw-r--r--include/configreader.h23
-rw-r--r--include/dns.h2
-rw-r--r--include/inspircd.h24
-rw-r--r--include/xline.h94
-rw-r--r--src/user_resolver.cpp4
-rw-r--r--src/xline.cpp106
7 files changed, 133 insertions, 177 deletions
diff --git a/conf/links.conf.example b/conf/links.conf.example
index 1b85d6d2b..2357220f9 100644
--- a/conf/links.conf.example
+++ b/conf/links.conf.example
@@ -2,10 +2,7 @@
# #
# Defines which servers can link to this one, and which servers this #
# server may create outbound links to. #
-# #
-# If you would like more detailed options, but a slightly more #
-# painful configuration, please see inspircd.conf.example.old #
-# #
+# #
# ____ _ _____ _ _ ____ _ _ _ #
# | _ \ ___ __ _ __| | |_ _| |__ (_)___ | __ )(_) |_| | #
# | |_) / _ \/ _` |/ _` | | | | '_ \| / __| | _ \| | __| | #
@@ -36,33 +33,29 @@
# Can be a CIDR (see example).
allowmask="69.58.44.0/24"
- # autoconnect: Time to wait to attempt to autoconnect
- # to remote server (in seconds).
- autoconnect="300"
-
- # failover: If defined, if this link fails,
- # what is the next link that is tried.
- failover="hub.other.net"
-
# timeout: If defined, this option defines how long the server
# will wait to consider the connect attempt failed and try the
# failover (see above).
timeout="300"
- # fingerprint: If defined, this option will force servers to be
- # authenticated using SSL Fingerprints. For more information,
- # see http://wiki.inspircd.org/SSL
- #fingerprint=""
-
- # ssl: If defined, this states extra modules that can be
- # used in the connection. Options are: "openssl" and "gnutls"
- # for encryption (they are compatible with each other) and
- # "ziplinks" for compression. You must use the same (or a
- # compatible) transport on both sides of the link.
+ # ssl: If defined, this states extra modules that will be used when
+ # making an outbound connection to the server. Options are: "openssl"
+ # and "gnutls" for encryption (they are compatible with each other) and
+ # "ziplinks" for compression. You must use the same (or a compatible)
+ # transport on both sides of the link.
+ #
# You will need to load the m_ssl_openssl.so module for openssl,
- # m_ssl_gnutls.so for gnutls or m_ziplinks.so for ziplinks.
+ # m_ssl_gnutls.so for gnutls or m_ziplinks.so for ziplinks. The server
+ # port that you connect to must be capable of accepting this type of
+ # connection.
ssl="gnutls"
+ # fingerprint: If defined, this option will force servers to be
+ # authenticated using SSL Fingerprints. See http://wiki.inspircd.org/SSL
+ # for more information. This will require an SSL link for both inbound
+ # and outbound connections.
+ #fingerprint=""
+
# bind: Local IP address to bind to.
bind="1.2.3.4"
@@ -70,11 +63,11 @@
# /stats c is invoked.
statshidden="no"
- # hidden: If this is set to yes, this server and it's "child"
+ # hidden: If this is set to yes, this server and its "child"
# servers will not be shown when users do a /map or /links
hidden="no"
- # passwords: the passwords we send and recieve.
+ # passwords: the passwords we send and receive.
# The remote server will have these passwords reversed.
sendpass="outgoing!password"
recvpass="incoming!password">
@@ -85,8 +78,6 @@
ipaddr="penguin.box.com"
port="7000"
allowmask="69.58.44.0/24"
- autoconnect="300"
- failover="hub.other.net"
timeout="300"
ssl="gnutls"
bind="1.2.3.4"
@@ -104,6 +95,18 @@
sendpass="penguins"
recvpass="polarbears">
+# Simple autoconnect block. This enables automatic connection of a server
+# Recommended setup is to have leaves connect to the hub, and have no
+# automatic connections started by the hub.
+<autoconnect period="300" server="hub.penguin.org">
+
+# Failover autoconnect block. If you have multiple hubs, or want your network
+# to automatically link even if the hub is down, you can specify multiple
+# servers to autoconnect; they will be tried in a round robin fashion until
+# one succeeds. Period defines the time for restarting a single loop.
+<autoconnect period="120"
+ server="hub.us.penguin.org hub.eu.penguin.org leaf.eu.penguin.org">
+
#-#-#-#-#-#-#-#-#-#-#-#- ULINES CONFIGURATION #-#-#-#-#-#-#-#-#-#-#-#-#
# This tag defines a ulined server. A U-Lined server has special #
diff --git a/include/configreader.h b/include/configreader.h
index 402f984e8..3ec4ca826 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -124,6 +124,13 @@ class CoreExport ServerConfig
void CrossCheckConnectBlocks(ServerConfig* current);
public:
+
+ /** Get a configuration tag
+ * @param tag The name of the tag to get
+ * @param offset get the Nth occurance of the tag
+ */
+ ConfigTag* ConfValue(const std::string& tag, int offset = 0);
+
/** Error stream, contains error output from any failed configuration parsing.
*/
std::stringstream errstr;
@@ -134,10 +141,6 @@ class CoreExport ServerConfig
/** Used to indicate who we announce invites to on a channel */
enum InviteAnnounceState { INVITE_ANNOUNCE_NONE, INVITE_ANNOUNCE_ALL, INVITE_ANNOUNCE_OPS, INVITE_ANNOUNCE_DYNAMIC };
- /** Not used any more as it is named, can probably be removed or renamed.
- */
- int DoDownloads();
-
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
*/
@@ -565,18 +568,6 @@ class CoreExport ServerConfig
*/
bool StartsWithWindowsDriveLetter(const std::string &path);
- /** Load 'filename' into 'target', with the new config parser everything is parsed into
- * tag/key/value at load-time rather than at read-value time.
- */
- bool LoadConf(FILE* &conf, const char* filename, bool allowexeinc);
-
- /** Load 'filename' into 'target', with the new config parser everything is parsed into
- * tag/key/value at load-time rather than at read-value time.
- */
- bool LoadConf(FILE* &conf, const std::string &filename, bool allowexeinc);
-
- ConfigTag* ConfValue(const std::string& tag, int offset = 0);
-
bool ApplyDisabledCommands(const std::string& data);
/** Clean a filename, stripping the directories (and drives) from string.
diff --git a/include/dns.h b/include/dns.h
index eeaad4ef8..e2f151d61 100644
--- a/include/dns.h
+++ b/include/dns.h
@@ -251,7 +251,7 @@ class CoreExport Resolver
* whilst lookups are in progress, they can be safely removed and your module will not
* crash the server.
*/
- Resolver(const std::string &source, QueryType qt, bool &cached, Module* creator = NULL);
+ Resolver(const std::string &source, QueryType qt, bool &cached, Module* creator);
/**
* The default destructor does nothing.
diff --git a/include/inspircd.h b/include/inspircd.h
index f185104ae..b4f73d571 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -179,29 +179,7 @@ template<typename T> inline long ConvToInt(const T &in)
{
std::stringstream tmp;
if (!(tmp << in)) return 0;
- return atoi(tmp.str().c_str());
-}
-
-/** Template function to convert integer to char, storing result in *res and
- * also returning the pointer to res. Based on Stuart Lowe's C/C++ Pages.
- * @param T input value
- * @param V result value
- * @param R base to convert to
- */
-template<typename T, typename V, typename R> inline char* itoa(const T &in, V *res, R base)
-{
- if (base < 2 || base > 16) { *res = 0; return res; }
- char* out = res;
- int quotient = in;
- while (quotient) {
- *out = "0123456789abcdef"[ std::abs( quotient % base ) ];
- ++out;
- quotient /= base;
- }
- if ( in < 0 && base == 10) *out++ = '-';
- std::reverse( res, out );
- *out = 0;
- return res;
+ return atol(tmp.str().c_str());
}
/** This class contains various STATS counters
diff --git a/include/xline.h b/include/xline.h
index e349c28d7..4ad1c63be 100644
--- a/include/xline.h
+++ b/include/xline.h
@@ -406,12 +406,6 @@ class CoreExport XLineFactory
*/
class ServerConfig;
-class GLineFactory;
-class ELineFactory;
-class QLineFactory;
-class ZLineFactory;
-class KLineFactory;
-
/** A map of xline factories
*/
typedef std::map<std::string, XLineFactory*> XLineFactMap;
@@ -447,16 +441,6 @@ class CoreExport XLineManager
*/
XLineFactMap line_factory;
- /** Core xline factories for G/E/K/Q/Z lines
- * (These generate GLine, ELine, KLine, QLine and ZLine
- * respectively)
- */
- GLineFactory* GFact;
- ELineFactory* EFact;
- KLineFactory* KFact;
- QLineFactory* QFact;
- ZLineFactory* ZFact;
-
/** Container of all lines, this is a map of maps which
* allows for fast lookup for add/remove of a line, and
* the shortest possible timed O(n) for checking a user
@@ -577,82 +561,4 @@ class CoreExport XLineManager
void InvokeStats(const std::string &type, int numeric, User* user, string_list &results);
};
-/** An XLineFactory specialized to generate GLine* pointers
- */
-class CoreExport GLineFactory : public XLineFactory
-{
- public:
- GLineFactory() : XLineFactory("G") { }
-
- /** Generate a GLine
- */
- XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
- {
- IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
- return new GLine(set_time, duration, source, reason, ih.first, ih.second);
- }
-};
-
-/** An XLineFactory specialized to generate ELine* pointers
- */
-class CoreExport ELineFactory : public XLineFactory
-{
- public:
- ELineFactory() : XLineFactory("E") { }
-
- /** Generate an ELine
- */
- XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
- {
- IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
- return new ELine(set_time, duration, source, reason, ih.first, ih.second);
- }
-};
-
-/** An XLineFactory specialized to generate KLine* pointers
- */
-class CoreExport KLineFactory : public XLineFactory
-{
- public:
- KLineFactory() : XLineFactory("K") { }
-
- /** Generate a KLine
- */
- XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
- {
- IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
- return new KLine(set_time, duration, source, reason, ih.first, ih.second);
- }
-};
-
-/** An XLineFactory specialized to generate QLine* pointers
- */
-class CoreExport QLineFactory : public XLineFactory
-{
- public:
- QLineFactory() : XLineFactory("Q") { }
-
- /** Generate a QLine
- */
- XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
- {
- return new QLine(set_time, duration, source, reason, xline_specific_mask);
- }
-};
-
-/** An XLineFactory specialized to generate ZLine* pointers
- */
-class CoreExport ZLineFactory : public XLineFactory
-{
- public:
- ZLineFactory() : XLineFactory("Z") { }
-
- /** Generate a ZLine
- */
- XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
- {
- return new ZLine(set_time, duration, source, reason, xline_specific_mask);
- }
-};
-
#endif
diff --git a/src/user_resolver.cpp b/src/user_resolver.cpp
index db8d065f1..bcf8a6aa3 100644
--- a/src/user_resolver.cpp
+++ b/src/user_resolver.cpp
@@ -11,11 +11,9 @@
* ---------------------------------------------------
*/
-/* $Core */
-
#include "inspircd.h"
UserResolver::UserResolver(User* user, std::string to_resolve, QueryType qt, bool &cache) :
- Resolver(to_resolve, qt, cache), bound_user(user)
+ Resolver(to_resolve, qt, cache, NULL), bound_user(user)
{
this->fwd = (qt == DNS_QUERY_A || qt == DNS_QUERY_AAAA);
this->bound_fd = user->GetFd();
diff --git a/src/xline.cpp b/src/xline.cpp
index 5df0281c9..b101237a3 100644
--- a/src/xline.cpp
+++ b/src/xline.cpp
@@ -11,12 +11,89 @@
* ---------------------------------------------------
*/
-/* $Core */
-
#include "inspircd.h"
#include "xline.h"
#include "bancache.h"
+/** An XLineFactory specialized to generate GLine* pointers
+ */
+class GLineFactory : public XLineFactory
+{
+ public:
+ GLineFactory() : XLineFactory("G") { }
+
+ /** Generate a GLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
+ return new GLine(set_time, duration, source, reason, ih.first, ih.second);
+ }
+};
+
+/** An XLineFactory specialized to generate ELine* pointers
+ */
+class ELineFactory : public XLineFactory
+{
+ public:
+ ELineFactory() : XLineFactory("E") { }
+
+ /** Generate an ELine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
+ return new ELine(set_time, duration, source, reason, ih.first, ih.second);
+ }
+};
+
+/** An XLineFactory specialized to generate KLine* pointers
+ */
+class KLineFactory : public XLineFactory
+{
+ public:
+ KLineFactory() : XLineFactory("K") { }
+
+ /** Generate a KLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
+ return new KLine(set_time, duration, source, reason, ih.first, ih.second);
+ }
+};
+
+/** An XLineFactory specialized to generate QLine* pointers
+ */
+class QLineFactory : public XLineFactory
+{
+ public:
+ QLineFactory() : XLineFactory("Q") { }
+
+ /** Generate a QLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ return new QLine(set_time, duration, source, reason, xline_specific_mask);
+ }
+};
+
+/** An XLineFactory specialized to generate ZLine* pointers
+ */
+class ZLineFactory : public XLineFactory
+{
+ public:
+ ZLineFactory() : XLineFactory("Z") { }
+
+ /** Generate a ZLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ return new ZLine(set_time, duration, source, reason, xline_specific_mask);
+ }
+};
+
+
/*
* This is now version 3 of the XLine subsystem, let's see if we can get it as nice and
* efficient as we can this time so we can close this file and never ever touch it again ..
@@ -391,6 +468,13 @@ void XLineManager::InvokeStats(const std::string &type, int numeric, User* user,
XLineManager::XLineManager()
{
+ GLineFactory* GFact;
+ ELineFactory* EFact;
+ KLineFactory* KFact;
+ QLineFactory* QFact;
+ ZLineFactory* ZFact;
+
+
GFact = new GLineFactory;
EFact = new ELineFactory;
KFact = new KLineFactory;
@@ -406,17 +490,13 @@ XLineManager::XLineManager()
XLineManager::~XLineManager()
{
- UnregisterFactory(GFact);
- UnregisterFactory(EFact);
- UnregisterFactory(KFact);
- UnregisterFactory(QFact);
- UnregisterFactory(ZFact);
-
- delete GFact;
- delete EFact;
- delete KFact;
- delete QFact;
- delete ZFact;
+ const char gekqz[] = "GEKQZ";
+ for(unsigned int i=0; i < sizeof(gekqz); i++)
+ {
+ XLineFactory* xlf = GetFactory(std::string(1, gekqz[i]));
+ UnregisterFactory(xlf);
+ delete xlf;
+ }
// Delete all existing XLines
for (XLineContainer::iterator i = lookup_lines.begin(); i != lookup_lines.end(); i++)