helpers.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "helpers.h"
  2. #include "callback.h"
  3. /////////////////////////////////////////////////////////////////////////////
  4. static std::vector<FILEREQUEST> g_afr;
  5. /////////////////////////////////////////////////////////////////////////////
  6. int InitializeStaticFiles(const char *pszRootDir, struct _u_instance *pInst, json_error_t &rJerr)
  7. {
  8. int nRet = 0;
  9. char szFilename[PATH_MAX + 32];
  10. sprintf(szFilename, "%s/staticfiles.json", pszRootDir);
  11. if(FileExist(szFilename))
  12. {
  13. CJson_t jtRoot(json_load_file(szFilename, JSON_REJECT_DUPLICATES, &rJerr)); // new reference!
  14. if(jtRoot.IsValid())
  15. {
  16. const char *pszVal;
  17. bool bVal;
  18. if(!jtRoot.IsArray())
  19. {
  20. ETRACE("staticfiles.json contains no array!\n");
  21. return -1;
  22. }
  23. for(size_t i = 0; i < json_array_size(jtRoot); i++)
  24. {
  25. FILEREQUEST fr;
  26. CJson_t jtArr(json_array_get(jtRoot, i), false); // borrowed reference!
  27. if(jtArr.IsValid())
  28. {
  29. if(!jtArr.IsObject())
  30. {
  31. ETRACE("staticfiles.json: element %zu is no object!\n", i);
  32. return -1;
  33. }
  34. json_t *pjtMethod = json_object_get(jtArr, "method");
  35. pszVal = json_string_value(pjtMethod);
  36. fr.strMethod = pszVal;
  37. json_t *pjtUrl = json_object_get(jtArr, "URL");
  38. pszVal = json_string_value(pjtUrl);
  39. fr.strURL = pszVal;
  40. json_t *pjtFilename = json_object_get(jtArr, "fileName");
  41. pszVal = json_string_value(pjtFilename);
  42. sprintf(szFilename, "%s/%s", pszRootDir, pszVal);
  43. fr.strFilename = szFilename;
  44. json_t *pjtContentType = json_object_get(jtArr, "contentType");
  45. pszVal = json_string_value(pjtContentType);
  46. fr.strContentType = pszVal;
  47. json_t *pjtIsString = json_object_get(jtArr, "isString");
  48. bVal = json_boolean_value(pjtIsString);
  49. fr.bString = bVal;
  50. fr.pfnCallback = &FileBodyResponseCallback;
  51. g_afr.push_back(fr);
  52. }
  53. else
  54. {
  55. ETRACE("Error!\n");
  56. return -1;
  57. }
  58. }
  59. }
  60. else
  61. {
  62. if(rJerr.column == -1 || rJerr.line == -1)
  63. {
  64. TRACE("staticfiles.json: no static files configured.\n");
  65. return 0;
  66. }
  67. else
  68. {
  69. ETRACE("%s: line %d, column %d: %s.\n", szFilename, rJerr.line, rJerr.column, rJerr.text);
  70. return -1;
  71. }
  72. }
  73. }
  74. else
  75. {
  76. // TRACE("No static files found.\n");
  77. return 0;
  78. }
  79. // Endpoint list declaration
  80. for(auto it = g_afr.begin(); it != g_afr.end(); it++)
  81. {
  82. FILEREQUEST &rfr = *it;
  83. if(ulfius_add_endpoint_by_val(pInst, rfr.strMethod.c_str(), rfr.strURL.c_str(), NULL, 0, rfr.pfnCallback, &rfr) != U_OK)
  84. {
  85. ETRACE("Error adding endpoint for URL '%s'!\n", rfr.strURL.c_str());
  86. return -1;
  87. }
  88. else
  89. {
  90. nRet++;
  91. }
  92. }
  93. return nRet;
  94. }