aqhome: more work on http server.
This commit is contained in:
140
aqhome/http/content_files.c
Normal file
140
aqhome/http/content_files.c
Normal file
@@ -0,0 +1,140 @@
|
||||
/****************************************************************************
|
||||
* 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/content_files_p.h"
|
||||
|
||||
#include <gwenhywfar/debug.h>
|
||||
#include <gwenhywfar/syncio.h>
|
||||
|
||||
|
||||
|
||||
GWEN_INHERIT(AQH_HTTP_CONTENT, AQH_HTTP_CONTENT_FILES)
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* forward declarations
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static void _freeData(void *bp, void *p);
|
||||
static int _addOpeningContent(AQH_HTTP_CONTENT *cp, int mode, GWEN_BUFFER *buffer);
|
||||
static int _addClosingContent(AQH_HTTP_CONTENT *cp, int mode, GWEN_BUFFER *buffer);
|
||||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* implementations
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
AQH_HTTP_CONTENT *AQH_HttpContentFiles_new(const char *name, const char *headerFilename, const char *footerFilename)
|
||||
{
|
||||
AQH_HTTP_CONTENT *cp;
|
||||
AQH_HTTP_CONTENT_FILES *xcp;
|
||||
|
||||
cp=AQH_HttpContent_new(name);
|
||||
GWEN_NEW_OBJECT(AQH_HTTP_CONTENT_FILES, xcp);
|
||||
GWEN_INHERIT_SETDATA(AQH_HTTP_CONTENT, AQH_HTTP_CONTENT_FILES, cp, xcp, _freeData);
|
||||
|
||||
xcp->headerFilename=(headerFilename && *headerFilename)?strdup(headerFilename):NULL;
|
||||
xcp->footerFilename=(footerFilename && *footerFilename)?strdup(footerFilename):NULL;
|
||||
|
||||
AQH_HttpContent_SetAddOpeningContentFn(cp, _addOpeningContent);
|
||||
AQH_HttpContent_SetAddClosingContentFn(cp, _addClosingContent);
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _freeData(void *bp, void *p)
|
||||
{
|
||||
AQH_HTTP_CONTENT_FILES *xcp;
|
||||
|
||||
xcp=(AQH_HTTP_CONTENT_FILES*) p;
|
||||
|
||||
free(xcp->footerData);
|
||||
free(xcp->headerData);
|
||||
|
||||
free(xcp->footerFilename);
|
||||
free(xcp->headerFilename);
|
||||
GWEN_FREE_OBJECT(xcp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _addOpeningContent(AQH_HTTP_CONTENT *cp, int mode, GWEN_BUFFER *buffer)
|
||||
{
|
||||
if (cp) {
|
||||
AQH_HTTP_CONTENT_FILES *xcp;
|
||||
|
||||
xcp=GWEN_INHERIT_GETDATA(AQH_HTTP_CONTENT, AQH_HTTP_CONTENT_FILES, cp);
|
||||
if (xcp) {
|
||||
if (xcp->headerData==NULL) {
|
||||
if (xcp->headerFilename) {
|
||||
int rv;
|
||||
GWEN_BUFFER *fileBuffer;
|
||||
|
||||
fileBuffer=GWEN_Buffer_new(0, 256, 0, 1);
|
||||
rv=GWEN_SyncIo_Helper_ReadFile(xcp->headerFilename, fileBuffer);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Error reading header file \"%s\": %d", xcp->headerFilename, rv);
|
||||
GWEN_Buffer_free(fileBuffer);
|
||||
return rv;
|
||||
}
|
||||
xcp->headerData=strdup(GWEN_Buffer_GetStart(fileBuffer));
|
||||
GWEN_Buffer_free(fileBuffer);
|
||||
}
|
||||
}
|
||||
if (xcp->headerData)
|
||||
GWEN_Buffer_AppendString(buffer, xcp->headerData);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _addClosingContent(AQH_HTTP_CONTENT *cp, int mode, GWEN_BUFFER *buffer)
|
||||
{
|
||||
if (cp) {
|
||||
AQH_HTTP_CONTENT_FILES *xcp;
|
||||
|
||||
xcp=GWEN_INHERIT_GETDATA(AQH_HTTP_CONTENT, AQH_HTTP_CONTENT_FILES, cp);
|
||||
if (xcp) {
|
||||
if (xcp->footerData==NULL) {
|
||||
if (xcp->footerFilename) {
|
||||
int rv;
|
||||
GWEN_BUFFER *fileBuffer;
|
||||
|
||||
fileBuffer=GWEN_Buffer_new(0, 256, 0, 1);
|
||||
rv=GWEN_SyncIo_Helper_ReadFile(xcp->footerFilename, fileBuffer);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Error reading footer file \"%s\": %d", xcp->footerFilename, rv);
|
||||
GWEN_Buffer_free(fileBuffer);
|
||||
return rv;
|
||||
}
|
||||
xcp->footerData=strdup(GWEN_Buffer_GetStart(fileBuffer));
|
||||
GWEN_Buffer_free(fileBuffer);
|
||||
}
|
||||
if (xcp->footerData)
|
||||
GWEN_Buffer_AppendString(buffer, xcp->footerData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user