+ const Config::Pairs& stagePairs(Config::Pairs Config::Section::* pairs) const
+ {
+ switch (m_parser.stage())
+ {
+ case AUTHORIZE: return m_config.autz.*pairs;
+ case AUTHENTICATE: return m_config.auth.*pairs;
+ case POSTAUTH: return m_config.postauth.*pairs;
+ case PREACCT: return m_config.preacct.*pairs;
+ case ACCOUNTING: return m_config.acct.*pairs;
+ }
+ throw std::runtime_error("Invalid stage: '" + m_parser.stageStr() + "'.");
+ }
+
+ const Config::Pairs& match() const { return stagePairs(&Config::Section::match); }
+ const Config::Pairs& modify() const { return stagePairs(&Config::Section::modify); }
+ const Config::Pairs& reply() const { return stagePairs(&Config::Section::reply); }
+
+ static void process(void* data);
+ void processPing();
+ void processPong();
+ void processData();