From 5dd4766490e4b29634ea0b3ff35e5d124f657f9c Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sat, 2 May 2020 11:20:37 +0200 Subject: Added FCGI --- plugins/fcgi/fcgi.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'plugins/fcgi/fcgi.h') diff --git a/plugins/fcgi/fcgi.h b/plugins/fcgi/fcgi.h index 7edfe91..164fecb 100644 --- a/plugins/fcgi/fcgi.h +++ b/plugins/fcgi/fcgi.h @@ -2,8 +2,60 @@ #include "../../plugin_interface.h" +#include +#include + +// TODO: multithreading +class FCGI_ID +{ + std::setm_unused; + uint16_t m_current_max{}; + +public: + FCGI_ID(){} + + // starting at 1 + uint16_t getID(){ + if (m_unused.empty()) { + m_current_max++; + return m_current_max; + } else { + uint16_t result{*m_unused.begin()}; + m_unused.erase(m_unused.begin()); + return result; + } + } + + void putID(uint16_t id){ + m_unused.insert(id); + } +}; + +// automatically reserves ID, and releases it via RAII +class FCGI_ID_Guard +{ + FCGI_ID& m_fcgi_id; + uint16_t m_id; + +public: + FCGI_ID_Guard(FCGI_ID& fcgi_id): m_fcgi_id(fcgi_id), m_id(fcgi_id.getID()) + { + } + + ~FCGI_ID_Guard() + { + m_fcgi_id.putID(m_id); + } + + uint16_t getID() const { return m_id; } +}; + +struct FCGIContext; + class fcgi_plugin: public webserver_plugin_interface { + FCGI_ID m_fcgi_id; + public: fcgi_plugin(); ~fcgi_plugin(); @@ -15,6 +67,7 @@ public: std::function& SetResponseHeader // to be added to result string ); + std::string fcgiQuery(FCGIContext& context); }; extern "C" BOOST_SYMBOL_EXPORT fcgi_plugin webserver_plugin; -- cgit v1.2.3