/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2006-2007 Oliver Lupton <oliverlupton@gmail.com>
+ * Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
+ * Copyright (C) 2013, 2015 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2012-2013, 2017 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2012 Robby <robby@chatbelgie.be>
+ * Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
+ * Copyright (C) 2011-2012 Adam <Adam@anope.org>
+ * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2007 Oliver Lupton <om@inspircd.org>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2003-2005, 2007 Craig Edwards <craigedwards@brainbox.cc>
+ * Copyright (C) 2006, 2010 Craig Edwards <brain@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
*/
-#ifndef BASE_H
-#define BASE_H
+#pragma once
#include <map>
#include <deque>
*/
class CoreExport CoreException : public std::exception
{
- public:
+ protected:
/** Holds the error message to be displayed
*/
const std::string err;
/** Source of the exception
*/
const std::string source;
- /** Default constructor, just uses the error mesage 'Core threw an exception'.
- */
- CoreException() : err("Core threw an exception"), source("The core") {}
+
+ public:
/** This constructor can be used to specify an error message before throwing.
+ * @param message Human readable error message
*/
CoreException(const std::string &message) : err(message), source("The core") {}
/** This constructor can be used to specify an error message before throwing,
* and to specify the source of the exception.
+ * @param message Human readable error message
+ * @param src Source of the exception
*/
CoreException(const std::string &message, const std::string &src) : err(message), source(src) {}
/** This destructor solves world hunger, cancels the world debt, and causes the world to end.
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
- virtual ~CoreException() throw() {};
+ virtual ~CoreException() throw() {}
/** Returns the reason for the exception.
- * The module should probably put something informative here as the user will see this upon failure.
+ * @return Human readable description of the error
*/
- virtual const char* GetReason()
- {
- return err.c_str();
- }
+ const std::string& GetReason() const { return err; }
- virtual const char* GetSource()
- {
- return source.c_str();
- }
+ /** Returns the source of the exception
+ * @return Source of the exception
+ */
+ const std::string& GetSource() const { return source; }
};
class Module;
SERVICE_METADATA,
/** is a data processing provider (MD5, SQL) */
SERVICE_DATA,
- /** is an I/O hook provider (SSL) */
- SERVICE_IOHOOK
+ /** is an I/O hook provider */
+ SERVICE_IOHOOK,
+ /** Service managed by a module */
+ SERVICE_CUSTOM
};
/** A structure defining something that a module can provide */
const std::string name;
/** Type of service (must match object type) */
const ServiceType service;
- ServiceProvider(Module* Creator, const std::string& Name, ServiceType Type)
- : creator(Creator), name(Name), service(Type) {}
+ ServiceProvider(Module* Creator, const std::string& Name, ServiceType Type);
virtual ~ServiceProvider();
-};
+ /** Register this service in the appropriate registrar
+ */
+ virtual void RegisterService();
-#endif
+ /** If called, this ServiceProvider won't be registered automatically
+ */
+ void DisableAutoRegister();
+};