+/** Contains an ident and host split into two strings
+ */
+typedef std::pair<std::string, std::string> IdentHostPair;
+
+/** XLineFactory is used to generate an XLine pointer, given just the
+ * pattern, timing information and type of line to create. This is used
+ * for example in the spanningtree module which will call an XLineFactory
+ * to create a new XLine when it is inbound on a server link, so that it
+ * does not have to know the specifics of the internals of an XLine class
+ * and/or how to call its constructor.
+ */
+class CoreExport XLineFactory
+{
+ protected:
+
+ InspIRCd* ServerInstance;
+ std::string type;
+
+ public:
+
+ /** Create an XLine factory
+ * @param Instance creator
+ * @param t Type of XLine this factory generates
+ */
+ XLineFactory(InspIRCd* Instance, const std::string &t) : ServerInstance(Instance), type(t) { }
+
+ /** Return the type of XLine this factory generates
+ * @return The type of XLine this factory generates
+ */
+ virtual const std::string& GetType() { return type; }
+
+ /** Generate a specialized XLine*.
+ * @param set_time Time this line was created
+ * @param duration Duration of the line
+ * @param source The sender of the line, nickname or server
+ * @param reason The reason for the line
+ * @param xline_specific_mask The mask string for the line, specific to the XLine type being created.
+ * @return A specialized XLine class of the given type for this factory.
+ */
+ virtual XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) = 0;
+
+ /** Destructor
+ */
+ virtual ~XLineFactory() { }
+};
+