std::shared_ptr<spd::logger> HTTPDClient::logger;
struct MHD_Daemon* HTTPDClient::httpdserver = NULL;
std::string HTTPDClient::docRoot;
+std::string HTTPDClient::configDir;
-bool HTTPDClient::StartServer(std::string _docRoot, int port)
+bool HTTPDClient::StartServer(std::string _docRoot, int port, const char* _configDir)
{
docRoot = _docRoot;
+ configDir = std::string(_configDir);
logger = spd::get("jsonserver_spdlog");
{
if (toe == MHD_CONNECTION_NOTIFY_STARTED)
{
- *socket_context = (void*)new HTTPDClient(mhd_connection);
+ *socket_context = (void*)new HTTPDClient(mhd_connection, configDir);
}
else if (toe == MHD_CONNECTION_NOTIFY_CLOSED)
{
// End of static callbacks, now for the client object itself
-HTTPDClient::HTTPDClient(struct MHD_Connection* _mhd_connection)
-: postprocessor(NULL), url(NULL), mhd_connection(_mhd_connection)
+HTTPDClient::HTTPDClient(struct MHD_Connection* _mhd_connection, const std::string& _configDir)
+: postprocessor(NULL), url(NULL), mhd_connection(_mhd_connection), vdrclient(_configDir)
{
// printf("HTTPDClient created %p\n", this);
}
class HTTPDClient
{
public:
- static bool StartServer(std::string docRoot, int port);
+ static bool StartServer(std::string docRoot, int port, const char* configDir);
static void StopServer();
// static callbacks from libmicrohttpd
static std::shared_ptr<spd::logger> logger;
static struct MHD_Daemon* httpdserver;
static std::string docRoot;
+ static std::string configDir;
- HTTPDClient(struct MHD_Connection*);
+ HTTPDClient(struct MHD_Connection*, const std::string& configDir);
~HTTPDClient();
void setUrl(const char* url);
return false;
}
- if (!HTTPDClient::StartServer(cfgDocRoot, cfgPort))
+ if (!HTTPDClient::StartServer(cfgDocRoot, cfgPort, configDir))
{
logger->critical("Main: Failed to start MHD");
dsyslog("jsonserver: Failed to start MHD");
always be done in the sequence Timers, Channels, Recordings, Schedules.
*/
-VDRClient::VDRClient()
+VDRClient::VDRClient(const std::string& _configDir)
+: configDir(_configDir)
{
logger = spd::get("jsonserver_spdlog");
}
js["Error"] = "Filter file format error";
return true;
}
- logger->debug("loop: {} {}", c, p);
if ((c == channel) && (p == programme))
{
setting.remove(x);
js["Error"] = "Filter file format error";
return true;
}
- logger->debug("loop: {} {}", c, p);
Json::Value oneFilter;
oneFilter["c"] = c;
oneFilter["p"] = p;
bool VDRClient::loadEpgFilter(libconfig::Config& epgFilter)
{
- const char* configDir = cPlugin::ConfigDirectory("jsonserver");
- if (!configDir)
- {
- logger->error("loadEpgFilter: Error: Could not get config dir from VDR");
- return false;
- }
-
- std::string epgFilterFile(std::string(configDir) + std::string("/epgfilter.conf"));
+ std::string epgFilterFile(configDir + std::string("/epgfilter.conf"));
FILE* fp = fopen(epgFilterFile.c_str(), "a");
if (!fp)
{
bool VDRClient::saveEpgFilter(libconfig::Config& epgFilter)
{
- const char* configDir = cPlugin::ConfigDirectory("jsonserver");
- if (!configDir)
- {
- logger->error("saveEpgFilter: Error: Could not get config dir from VDR");
- return false;
- }
-
- std::string epgFilterFile(std::string(configDir) + std::string("/epgfilter.conf"));
+ std::string epgFilterFile(configDir + std::string("/epgfilter.conf"));
try
{
epgFilter.writeFile(epgFilterFile.c_str());
typedef std::map<std::string, std::string> PFMap;
public:
- VDRClient();
+ VDRClient(const std::string& configDir);
~VDRClient();
bool process(std::string& request, PFMap& postFields, std::string& returnData);
private:
+ const std::string& configDir;
+
std::shared_ptr<spd::logger> logger;
bool gettime(PFMap& postFields, Json::Value& returnJSON);
bool diskstats(PFMap& postFields, Json::Value& returnJSON);