123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "helpers.h"
- #include "callback.h"
- /////////////////////////////////////////////////////////////////////////////
- static std::vector<FILEREQUEST> g_afr;
- /////////////////////////////////////////////////////////////////////////////
- int InitializeStaticFiles(const char *pszRootDir, struct _u_instance *pInst, json_error_t &rJerr)
- {
- int nRet = 0;
- char szFilename[PATH_MAX + 32];
- sprintf(szFilename, "%s/staticfiles.json", pszRootDir);
- if(FileExist(szFilename))
- {
- CJson_t jtRoot(json_load_file(szFilename, JSON_REJECT_DUPLICATES, &rJerr)); // new reference!
- if(jtRoot.IsValid())
- {
- const char *pszVal;
- bool bVal;
- if(!jtRoot.IsArray())
- {
- ETRACE("staticfiles.json contains no array!\n");
- return -1;
- }
- for(size_t i = 0; i < json_array_size(jtRoot); i++)
- {
- FILEREQUEST fr;
- CJson_t jtArr(json_array_get(jtRoot, i), false); // borrowed reference!
- if(jtArr.IsValid())
- {
- if(!jtArr.IsObject())
- {
- ETRACE("staticfiles.json: element %zu is no object!\n", i);
- return -1;
- }
- json_t *pjtMethod = json_object_get(jtArr, "method");
- pszVal = json_string_value(pjtMethod);
- fr.strMethod = pszVal;
- json_t *pjtUrl = json_object_get(jtArr, "URL");
- pszVal = json_string_value(pjtUrl);
- fr.strURL = pszVal;
- json_t *pjtFilename = json_object_get(jtArr, "fileName");
- pszVal = json_string_value(pjtFilename);
- sprintf(szFilename, "%s/%s", pszRootDir, pszVal);
- fr.strFilename = szFilename;
- json_t *pjtContentType = json_object_get(jtArr, "contentType");
- pszVal = json_string_value(pjtContentType);
- fr.strContentType = pszVal;
- json_t *pjtIsString = json_object_get(jtArr, "isString");
- bVal = json_boolean_value(pjtIsString);
- fr.bString = bVal;
- fr.pfnCallback = &FileBodyResponseCallback;
- g_afr.push_back(fr);
- }
- else
- {
- ETRACE("Error!\n");
- return -1;
- }
- }
- }
- else
- {
- if(rJerr.column == -1 || rJerr.line == -1)
- {
- TRACE("staticfiles.json: no static files configured.\n");
- return 0;
- }
- else
- {
- ETRACE("%s: line %d, column %d: %s.\n", szFilename, rJerr.line, rJerr.column, rJerr.text);
- return -1;
- }
- }
- }
- else
- {
- // TRACE("No static files found.\n");
- return 0;
- }
- // Endpoint list declaration
- for(auto it = g_afr.begin(); it != g_afr.end(); it++)
- {
- FILEREQUEST &rfr = *it;
- if(ulfius_add_endpoint_by_val(pInst, rfr.strMethod.c_str(), rfr.strURL.c_str(), NULL, 0, rfr.pfnCallback, &rfr) != U_OK)
- {
- ETRACE("Error adding endpoint for URL '%s'!\n", rfr.strURL.c_str());
- return -1;
- }
- else
- {
- nRet++;
- }
- }
- return nRet;
- }
|