summaryrefslogtreecommitdiff
path: root/include/modules/sasl.h
diff options
context:
space:
mode:
authorDaniel Vassdal <shutter@canternet.org>2014-02-13 09:29:39 -0800
committerDaniel Vassdal <shutter@canternet.org>2014-02-14 13:05:01 -0800
commit3c8009b4950a670618c3ee476f21f67a9468fdb2 (patch)
treefe5fc5472a5bf34c93ab91354c99c79c253d2a7d /include/modules/sasl.h
parentca85df2d7475d42579c29d822f424d2c9713774b (diff)
sasl.h, m_sasl.cpp: Add RemoveSession(), DeleteSessions(), and have active sessions closed when a Mechanism is unloaded
Diffstat (limited to 'include/modules/sasl.h')
-rw-r--r--include/modules/sasl.h56
1 files changed, 34 insertions, 22 deletions
diff --git a/include/modules/sasl.h b/include/modules/sasl.h
index 836c26d19..f997ead76 100644
--- a/include/modules/sasl.h
+++ b/include/modules/sasl.h
@@ -18,6 +18,29 @@ namespace SASL
};
class Mechanism;
+ struct Session;
+
+ class Service : public ::Service
+ {
+ public:
+ Service(Module *o) : ::Service(o, "SASL::Service", "sasl") { }
+
+ virtual void ProcessMessage(const Message &) = 0;
+
+ virtual Anope::string GetAgent() = 0;
+
+ virtual Session* GetSession(const Anope::string &uid) = 0;
+
+ virtual void SendMessage(SASL::Session *session, const Anope::string &type, const Anope::string &data) = 0;
+
+ virtual void Succeed(Session *, NickCore *) = 0;
+ virtual void Fail(Session *) = 0;
+ virtual void SendMechs(Session *) = 0;
+ virtual void DeleteSessions(Mechanism *, bool = false) = 0;
+ virtual void RemoveSession(Session *) = 0;
+ };
+
+ static ServiceReference<SASL::Service> sasl("SASL::Service", "sasl");
struct Session
{
@@ -26,11 +49,15 @@ namespace SASL
Reference<Mechanism> mech;
Session(Mechanism *m, const Anope::string &u) : created(Anope::CurTime), uid(u), mech(m) { }
- virtual ~Session() { }
+ virtual ~Session()
+ {
+ if (sasl)
+ sasl->RemoveSession(this);
+ }
};
/* PLAIN, EXTERNAL, etc */
- class Mechanism : public Service
+ class Mechanism : public ::Service
{
public:
Mechanism(Module *o, const Anope::string &sname) : Service(o, "SASL::Mechanism", sname) { }
@@ -38,26 +65,11 @@ namespace SASL
virtual Session* CreateSession(const Anope::string &uid) { return new Session(this, uid); }
virtual void ProcessMessage(Session *session, const Message &) = 0;
- };
-
- class Service : public ::Service
- {
- public:
- Service(Module *o) : ::Service(o, "SASL::Service", "sasl") { }
-
- virtual void ProcessMessage(const Message &) = 0;
-
- virtual Anope::string GetAgent() = 0;
- virtual Session* GetSession(const Anope::string &uid) = 0;
-
- virtual void SendMessage(SASL::Session *session, const Anope::string &type, const Anope::string &data) = 0;
-
- virtual void Succeed(Session *, NickCore *) = 0;
- virtual void Fail(Session *) = 0;
- virtual void SendMechs(Session *) = 0;
+ virtual ~Mechanism()
+ {
+ if (sasl)
+ sasl->DeleteSessions(this, true);
+ }
};
}
-
-static ServiceReference<SASL::Service> sasl("SASL::Service", "sasl");
-