/**************************************************************************** * 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 #endif //#define DISABLE_DEBUGLOG #include "aqhome/http/content_files_p.h" #include #include 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; }