Files
aqhomecontrol/aqhome/http/httpservice.c
2023-08-07 14:08:52 +02:00

257 lines
4.7 KiB
C

/****************************************************************************
* This file is part of the project AqHome.
* AqHome (c) by 2023 Martin Preuss, all rights reserved.
*
* The license for this file can be found in the file COPYING which you
* should have received along with this file.
****************************************************************************/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "aqhome/http/httpservice_p.h"
#include <gwenhywfar/db.h>
#include <gwenhywfar/buffer.h>
#include <gwenhywfar/text.h>
#include <gwenhywfar/debug.h>
GWEN_INHERIT(AQH_SERVICE, AQH_HTTP_SERVICE)
static void GWENHYWFAR_CB _freeData(void *bp, void *p);
void AQH_HttpService_Extend(AQH_SERVICE *sv)
{
AQH_HTTP_SERVICE *xsv;
GWEN_NEW_OBJECT(AQH_HTTP_SERVICE, xsv);
GWEN_INHERIT_SETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv, xsv, _freeData);
xsv->moduleMutex=GWEN_Mutex_new();
xsv->userMutex=GWEN_Mutex_new();
xsv->sessionMutex=GWEN_Mutex_new();
}
void _freeData(void *bp, void *p)
{
AQH_HTTP_SERVICE *xsv;
xsv=(AQH_HTTP_SERVICE*) p;
GWEN_Mutex_free(xsv->moduleMutex);
GWEN_Mutex_free(xsv->userMutex);
GWEN_Mutex_free(xsv->sessionMutex);
free(xsv->configFolder);
free(xsv->sourceFolder);
free(xsv->siteHeader);
free(xsv->siteFooter);
GWEN_FREE_OBJECT(xsv);
}
AQH_HTTP_SERVICE_HANDLEREQUEST_FN AQH_HttpService_SetHandleRequestFn(AQH_SERVICE *sv, AQH_HTTP_SERVICE_HANDLEREQUEST_FN fn)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
AQH_HTTP_SERVICE_HANDLEREQUEST_FN oldFn;
oldFn=xsv->handleRequestFn;
xsv->handleRequestFn=fn;
return oldFn;
}
}
return NULL;
}
const char *AQH_HttpService_GetConfigFolder(const AQH_SERVICE *sv)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv)
return xsv->configFolder;
}
return NULL;
}
void AQH_HttpService_SetConfigFolder(AQH_SERVICE *sv, const char *s)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
free(xsv->configFolder);
xsv->configFolder=s?strdup(s):NULL;
}
}
}
const char *AQH_HttpService_GetSourceFolder(const AQH_SERVICE *sv)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv)
return xsv->sourceFolder;
}
return NULL;
}
void AQH_HttpService_SetSourceFolder(AQH_SERVICE *sv, const char *s)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
free(xsv->sourceFolder);
xsv->sourceFolder=s?strdup(s):NULL;
}
}
}
uint32_t AQH_HttpService_GetNextModuleId(AQH_SERVICE *sv)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
return ++(xsv->lastModuleId);
}
}
return 0;
}
uint32_t AQH_HttpService_GetNextUserId(AQH_SERVICE *sv)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
return ++(xsv->lastUserId);
}
}
return 0;
}
int AQH_HttpService_GetMaxSessionAgeInSecs(const AQH_SERVICE *sv)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
return xsv->maxSessionAgeInSecs;
}
}
return 0;
}
void AQH_HttpService_SetMaxSessionAgeInSecs(AQH_SERVICE *sv, int i)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv)
xsv->maxSessionAgeInSecs=i;
}
}
const char *AQH_HttpService_GetSiteHeader(const AQH_SERVICE *sv)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv)
return xsv->siteHeader;
}
return NULL;
}
void AQH_HttpService_SetSiteHeader(AQH_SERVICE *sv, const char *s)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
free(xsv->siteHeader);
xsv->siteHeader=s?strdup(s):NULL;
}
}
}
const char *AQH_HttpService_GetSiteFooter(const AQH_SERVICE *sv)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv)
return xsv->siteFooter;
}
return NULL;
}
void AQH_HttpService_SetSiteFooter(AQH_SERVICE *sv, const char *s)
{
if (sv) {
AQH_HTTP_SERVICE *xsv;
xsv=GWEN_INHERIT_GETDATA(AQH_SERVICE, AQH_HTTP_SERVICE, sv);
if (xsv) {
free(xsv->siteFooter);
xsv->siteFooter=s?strdup(s):NULL;
}
}
}