// // Created by cfif on 10.11.22. // #include "lwip/apps/httpd.h" #include "lwip/debug.h" #include "lwip/apps/fs.h" #include #include "httpd.h" #include "httpd_get.h" #include "httpd_TablesPostGet.h" #include "httpd_base_func.h" #include "Gnss.h" #include "ModemGonecFunc.h" #include "stdlib.h" #include "BootJump.h" #include "ModemLog.h" #include "Modem_Timer.h" #include "ModemSendFunc.h" #include "ModemBufCreateHeader.h" extern uint32_t webup_status; //uint8_t random2[20] = {80, 82, 85, 81, 86, 90, 95, 97, 98, 110, 102, 103, 104, 99, 90, 89, 88, 86, 84, 83}; //uint8_t random2_i = 0; int httpd_get_begin(tHttpSetting *httpSetting, typeAuth auth, const char *uri, char *params, bool *isContentFile, char *fileNameContent, char *bufAnswer, // char *bigBuffer, // bool *isBigBuffer, uint32_t *tot_len) { *isContentFile = false; *tot_len = 0; // *isBigBuffer = false; // httpSetting->isContentFile = isContentFile; // httpSetting->tot_len = tot_len; // httpSetting->bufAnswer = bufAnswer; // httpSetting->isBigBuffer = isBigBuffer; httpSetting->params_get_uri.paramcount = extract_uri_ex_parameters(params, httpSetting->params_get_uri.params_names, httpSetting->params_get_uri.params_vals, MAX_POST_GET_PARAMETERS); int pos = -1; int len = -1; char to[MAX_LEN_PATH_FS]; to[0] = '\0'; int urgency = -1; int chSv = -1; int isfile = -1; int kvs = -1; int routing = -1; char fileName[MAX_LEN_PATH_FS]; fileName[0] = '\0'; //начало--------Общий запрос данных------------------------------------------------------------------ //начало--------Общий запрос данных------------------------------------------------------------------ //начало--------Общий запрос данных------------------------------------------------------------------ if (strcmp(uri, "/getdata") == 0) { time_t timestamp_block; httpSetting->rtc->get(httpSetting->rtc, ×tamp_block); httpSetting->modemMain->timestamp_start_block_work = (uint32_t) timestamp_block - httpSetting->modemMain->timestamp_start_block; uint32_t get_timestamp_gnss; Gnss_GetTime(httpSetting->modemMain->gnss, &get_timestamp_gnss); uint32_t vcc = getVcc(httpSetting->taskAdc); *tot_len = json_generate_get_data(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, get_timestamp_gnss, timestamp_block + httpSetting->storage->nvm.Settings_General.GMTcorr_v * 3600, timestamp_block, httpSetting->modemMain->timestamp_start_block_work + httpSetting->modemMain->timestamp_start_block_work_add, vcc, httpSetting->modemMain->temp, httpSetting->modemMain->dataRssi, httpSetting->storage->nvm.Settings_Tracert.mTracer_v, httpSetting->modemMain->location.valid, (float) httpSetting->modemMain->location.latitude, (float) httpSetting->modemMain->location.longitude, &httpSetting->modemMain->eventWebState, getStateWriteFileLogger(httpSetting->flog), getStateWriteLog2(httpSetting->modemMainLog) ); return Post_OK; } //конец--------Общий запрос данных------------------------------------------------------------------- //конец--------Общий запрос данных------------------------------------------------------------------- //конец--------Общий запрос данных------------------------------------------------------------------ //начало--------Процесс обновления WEB----------------------------------------------- //начало--------Процесс обновления WEB----------------------------------------------- //начало--------Процесс обновления WEB----------------------------------------------- if (strcmp(uri, "/webup") == 0) { *tot_len = json_generate_webup_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, webup_status); return Post_OK; } //конец--------Процесс обновления WEB------------------------------------------------ //конец--------Процесс обновления WEB------------------------------------------------ //конец--------Процесс обновления WEB------------------------------------------------ //начало--------SOS------------------------------------------------------------------ //начало--------SOS------------------------------------------------------------------ //начало--------SOS------------------------------------------------------------------ if (strcmp(uri, "/sos") == 0) { sendMsd(httpSetting->modemMain); //httpSetting->modemMain->testOne = 1; //httpSetting->modemMain->stateRequest.stateReqCreateExtW = StateReqExtForCreate; return Post_OK; } //конец--------SOS------------------------------------------------------------------ //конец--------SOS------------------------------------------------------------------ //конец--------SOS------------------------------------------------------------------ //начало--------Дистанция------------------------------------------------------------------ //начало--------Дистанция------------------------------------------------------------------ //начало--------Дистанция------------------------------------------------------------------ if (strcmp(uri, "/dist") == 0) { uint32_t distAlm = 0; int stepParam = 0; for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "dist") == 0) { char *end; distAlm = strtoul(httpSetting->params_get_uri.params_vals[j], &end, 10); ++stepParam; } } if ((stepParam != 1) || (distAlm < 1500) || (distAlm > 5000)) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } if (httpSetting->storage->nvm.dist != distAlm) { httpSetting->storage->nvm.dist = distAlm; DeviceStorageCounterIni_DumpDist(httpSetting->storage); } uint32_t err = Post_OK; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Дистанция------------------------------------------------------------------ //конец--------Дистанция------------------------------------------------------------------ //конец--------Дистанция------------------------------------------------------------------ //начало--------Маршрутизация------------------------------------------------------------------ //начало--------Маршрутизация------------------------------------------------------------------ //начало--------Маршрутизация------------------------------------------------------------------ if (strcmp(uri, "/routing") == 0) { uint32_t routingAlm = 0; uint32_t timeZoneInSatAlm = 0; int stepParam = 0; for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "routing") == 0) { char *end; routingAlm = strtoul(httpSetting->params_get_uri.params_vals[j], &end, 10); ++stepParam; } if (strcmp(httpSetting->params_get_uri.params_names[j], "time") == 0) { char *end; timeZoneInSatAlm = strtoul(httpSetting->params_get_uri.params_vals[j], &end, 10); ++stepParam; } } if ((stepParam != 2) || (routingAlm > 1) || (timeZoneInSatAlm < 1) || (timeZoneInSatAlm > 15)) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } time_t now; httpSetting->rtc->get(httpSetting->rtc, &now); now += httpSetting->storage->nvm.Settings_General.GMTcorr_v * 3600; bool almanacIsValid = GonetsAlmanac_IsValid(httpSetting->modemMain->alms, now); if (almanacIsValid == false) { httpSetting->storage->runtime.almaError = true; } else { httpSetting->storage->runtime.almaError = false; } FILINFO fno; FRESULT fr = f_stat(file_cur_almhs, &fno); // Нет файла альманаха if (fr) { uint32_t err = Post_NO_ALMA; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } // Ошибка альманаха if ((routingAlm == 1) && (httpSetting->storage->runtime.almaError)) { uint32_t err = Post_OLD_ALMA; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } httpSetting->storage->nvm.routing = routingAlm; httpSetting->storage->nvm.timeZoneInSat = timeZoneInSatAlm; if (routingAlm == 0) { httpSetting->storage->runtime.BannedSAT_ex[0] = '\0'; strcat(httpSetting->storage->runtime.BannedSAT_ex, httpSetting->storage->runtime.Settings_General.BannedSAT_v); SetRoutingRestrictSc(httpSetting->modemMain, httpSetting->storage->nvm.Settings_General.BannedSAT_v); } DeviceStorageCounterIni_DumpRouting(httpSetting->storage); uint32_t err = Post_OK; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Маршрутизация------------------------------------------------------------------ //конец--------Маршрутизация------------------------------------------------------------------ //конец--------Маршрутизация------------------------------------------------------------------ //начало--------RSSI------------------------------------------------------------------ //начало--------RSSI------------------------------------------------------------------ //начало--------RSSI------------------------------------------------------------------ if (strcmp(uri, "/rssi") == 0) { int32_t rssi; rssi = httpSetting->modemMain->rssi; *tot_len = json_generate_rssi_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, rssi); return Post_OK; } //конец--------RSSI------------------------------------------------------------------ //конец--------RSSI------------------------------------------------------------------ //конец--------RSSI------------------------------------------------------------------ //начало--------Удаление логов------------------------------------------------------------------ //начало--------Удаление логов------------------------------------------------------------------ //начало--------Удаление логов------------------------------------------------------------------ if (strcmp(uri, "/dellog") == 0) { if (osMutexAcquire(httpSettings.accessLOG, TIME_MUTEX_LOG_ACCESS) == osOK) { bool result = delDirFileFs(httpSetting->fs, (char *) dir_logs); osMutexRelease(httpSettings.accessLOG); } else { return Post_MUTEX_ERR; } return Post_OK; } if (strcmp(uri, "/dellog2") == 0) { if (osMutexAcquire(httpSettings.accessLOG2, TIME_MUTEX_LOG_ACCESS) == osOK) { bool result = delDirFileFs(httpSetting->fs, (char *) dir_logs2); osMutexRelease(httpSettings.accessLOG2); } else { return Post_MUTEX_ERR; } return Post_OK; } //конец--------Удаление логов------------------------------------------------------------------- //конец--------Удаление логов------------------------------------------------------------------- //конец--------Удаление логов------------------------------------------------------------------ //начало--------Тестирование АФУ------------------------------------------------------------------ //начало--------Тестирование АФУ------------------------------------------------------------------ //начало--------Тестирование АФУ------------------------------------------------------------------ if (strcmp(uri, "/testafu") == 0) { uint32_t err = Post_SET_MODEM; bool result = TestAFU(httpSetting->modemMain); if (result) return Post_OK; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Тестирование АФУ------------------------------------------------------------------- //конец--------Тестирование АФУ------------------------------------------------------------------- //конец--------Тестирование АФУ------------------------------------------------------------------ //начало--------Измерение уровня шума АПО------------------------------------------------------------------ //начало--------Измерение уровня шума АПО------------------------------------------------------------------ //начало--------Измерение уровня шума АПО------------------------------------------------------------------ if (strcmp(uri, "/testapo") == 0) { uint32_t err = Post_SET_MODEM; bool result = TestAPO(httpSetting->modemMain); if (result) return Post_OK; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Измерение уровня шума АПО------------------------------------------------------------------- //конец--------Измерение уровня шума АПО------------------------------------------------------------------- //конец--------Измерение уровня шума АПО------------------------------------------------------------------ //начало--------Перезагрузка платы------------------------------------------------------------------ //начало--------Перезагрузка платы------------------------------------------------------------------ //начало--------Перезагрузка платы------------------------------------------------------------------ if (strcmp(uri, "/reboot_modem") == 0) { GpioPinSet(&httpSetting->gpios->Power.gonec_reset, false); SystemDelayMs(1000); GpioPinSet(&httpSetting->gpios->Power.gonec_reset, true); return Post_OK; } if (strcmp(uri, "/reboot") == 0) { if ((osMutexAcquire(httpSetting->accessLOG2, TIME_MUTEX_LOG_ACCESS) == osOK) && (osMutexAcquire(httpSetting->accessLOG, TIME_MUTEX_LOG_ACCESS) == osOK)) { //GpioPinSet(&httpSetting->gpios->Power.gonec_reset, false); NVIC_SystemReset(); //BootJumpToAddress(0x08000000); } return Post_OK; } //конец--------Перезагрузка платы------------------------------------------------------------------- //конец--------Перезагрузка платы------------------------------------------------------------------- //конец--------Перезагрузка платы------------------------------------------------------------------ //начало--------Проверка событий------------------------------------------------------------------ //начало--------Проверка событий------------------------------------------------------------------ //начало--------Проверка событий------------------------------------------------------------------ if (strcmp(uri, "/event") == 0) { *tot_len = json_generate_event(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &httpSetting->modemMain->eventWebState, getStateWriteFileLogger(httpSetting->flog), getStateWriteLog2(httpSetting->modemMainLog)); return Post_OK; } //конец--------Проверка событий------------------------------------------------------------------- //конец--------Проверка событий------------------------------------------------------------------- //конец--------Проверка событий------------------------------------------------------------------- //начало--------Тест прошивки------------------------------------------------------------------ //начало--------Тест прошивки------------------------------------------------------------------ //начало--------Тест прошивки------------------------------------------------------------------ if (strcmp(uri, "/Software_Test_Web_File") == 0) { bool updateFwOk = FirmwareLoader_CheckBlock(httpSetting->firmwareMainLoader, &httpSetting->firmwareMainLoader->update); uint32_t err = Post_CRC; if (updateFwOk) { err = Post_OK; } *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } if (strcmp(uri, "/Software_Test_Boot_Web_File") == 0) { bool updateFwOk = FirmwareLoader_CheckBlock(httpSetting->firmwareBootLoader, &httpSetting->firmwareBootLoader->update); uint32_t err = Post_CRC; if (updateFwOk) { err = Post_OK; } *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Тест прошивки------------------------------------------------------------------- //конец--------Тест прошивки------------------------------------------------------------------- //конец--------Тест прошивки------------------------------------------------------------------- //начало--------Получение даты и времени-------------------------------------------------------------------------------------- //начало--------Получение даты и времени-------------------------------------------------------------------------------------- //начало--------Получение даты и времени-------------------------------------------------------------------------------------- if (strcmp(uri, "/setdatetime") == 0) { for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "timestamp") == 0) { if (httpSetting->modemMain->location.isOneDateTime) { char *end; time_t timestamp; // Сколько прошло до этого времени httpSetting->modemMain->timestamp_start_block_work_add = SystemGetMs() / 1000; timestamp = strtoul(httpSetting->params_get_uri.params_vals[j], &end, 10); httpSetting->rtc->set(&httpSetting->rtc, ×tamp); httpSetting->modemMain->timestamp_start_block = timestamp; timeModemStuckGetMs = SystemGetMs(); httpSetting->modemMain->location.isOneDateTime = false; } uint32_t err = Post_OK; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } } return Post_OK; } //конец--------Получение даты и времени -------------------------------------------------------------------------------------- //конец--------Получение даты и времени -------------------------------------------------------------------------------------- //конец--------Получение даты и времени -------------------------------------------------------------------------------------- //начало--------Версия-------------------------------------------------------------------------------------- //начало--------Версия-------------------------------------------------------------------------------------- //начало--------Версия-------------------------------------------------------------------------------------- if (strcmp(uri, "/version") == 0) { uint8_t sizeModem; uint8_t sizeCrypto; char versionModem[128]; char versionCrypto[128]; memset(versionModem, 0, sizeof(versionModem)); memset(versionCrypto, 0, sizeof(versionCrypto)); strcpy(versionModem, "null,null"); strcpy(versionCrypto, "null,null"); if (httpSetting->modemMain->isModemCheck) Modem_Get_Version_Modem(httpSetting->modemMain, versionModem, &sizeModem, versionCrypto, &sizeCrypto); *tot_len = json_generate_version_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, versionModem, versionCrypto); return Post_OK; } //конец--------Версия -------------------------------------------------------------------------------------- //конец--------Версия -------------------------------------------------------------------------------------- //конец--------Версия -------------------------------------------------------------------------------------- //начало--------Запрос номера терминала-------------------------------------------------------------------------------------- //начало--------Запрос номера терминала-------------------------------------------------------------------------------------- //начало--------Запрос номера терминала-------------------------------------------------------------------------------------- if (strcmp(uri, "/getnumvar") == 0) { uint32_t diskfree = 0; uint32_t diskall = 0; FRESULT ret; DWORD fre_clust, fre_sect, tot_sect; FATFS *pt_fs; pt_fs = &httpSetting->fs->fs; ret = f_getfree("1:", &fre_clust, &pt_fs); if (ret == FR_OK) { tot_sect = (pt_fs->n_fatent - 2) * pt_fs->csize; fre_sect = fre_clust * pt_fs->csize; diskfree = fre_sect / 2; diskall = tot_sect / 2; // LoggerPrintf(LOGGER, "%10u кб всего на носителе.\r\n%10u кб свободно.\r\n", tot_sect / 2, fre_sect / 2); } char *username = "\0"; if (auth == 1) username = httpSetting->storage->nvm.Settings_General.loginUSER_v; if (auth == 2) username = httpSetting->storage->nvm.Settings_General.loginINTEG_v; if (auth == 3) username = httpSetting->storage->nvm.Settings_General.loginADMIN_v; *tot_len = json_generate_vars_send_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, (uint32_t) httpSetting->storage->nvm.Settings_General.ATnum_v, username, diskall, diskfree); return Post_OK; } //конец--------Запрос номера терминала -------------------------------------------------------------------------------------- //конец--------Запрос номера терминала -------------------------------------------------------------------------------------- //конец--------Запрос номера терминала -------------------------------------------------------------------------------------- //начало--------Запрос процентов передачи-------------------------------------------------------------------------------------- //начало--------Запрос процентов передачи-------------------------------------------------------------------------------------- //начало--------Запрос процентов передачи-------------------------------------------------------------------------------------- if (strcmp(uri, "/getstatussend") == 0) { FRESULT frFile; FILINFO fno; fileNameContent[0] = '\0'; strcat(fileNameContent, file_dir_proc); frFile = f_stat(fileNameContent, &fno); if (frFile) { createBufStateFileSend(httpSetting->fs); uint32_t err = Post_FS_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } else { *tot_len = fno.fsize; *isContentFile = true; } // *tot_len = json_generate_proc_send_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, // httpSetting->modemMain->fileSendInfoForJson); return Post_OK; } //конец--------Запрос процентов передачи -------------------------------------------------------------------------------------- //конец--------Запрос процентов передачи -------------------------------------------------------------------------------------- //конец--------Запрос процентов передачи -------------------------------------------------------------------------------------- if (strcmp(uri, "/status.xip") == 0) { for (int i = 0; i < httpSetting->params_get_uri.paramcount; ++i) { //начало--------Получение текущего времени------------------------------------------------------------------ //начало--------Получение текущего времени------------------------------------------------------------------ //начало--------Получение текущего времени------------------------------------------------------------------ if (strcmp(httpSetting->params_get_uri.params_names[i], "timestamp") == 0) { time_t timestamp_block; httpSetting->rtc->get(httpSetting->rtc, ×tamp_block); uint32_t get_timestamp_gnss; Gnss_GetTime(httpSetting->modemMain->gnss, &get_timestamp_gnss); httpSetting->modemMain->timestamp_start_block_work = timestamp_block - httpSetting->modemMain->timestamp_start_block; *tot_len = json_generate_timestamp_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, get_timestamp_gnss, timestamp_block, httpSetting->modemMain->timestamp_start_block_work ); return Post_OK; } //конец--------Получение текущего времени------------------------------------------------------------------- //конец--------Получение текущего времени------------------------------------------------------------------- //конец--------Получение текущего времени------------------------------------------------------------------- //начало--------Получение текущих координат----------------------------------------------------------------- //начало--------Получение текущих координат----------------------------------------------------------------- //начало--------Получение текущих координат------------------------------------------------------------------ if (strcmp(httpSetting->params_get_uri.params_names[i], "alm_setting") == 0) { *tot_len = json_generate_coordinates_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, httpSetting->modemMain->location.valid, (float) httpSetting->modemMain->location.latitude, (float) httpSetting->modemMain->location.longitude, httpSetting->storage->nvm.routing, httpSetting->storage->nvm.dist, httpSetting->storage->nvm.timeZoneInSat ); return Post_OK; } //конец--------Получение текущих координат------------------------------------------------------------------ //конец--------Получение текущих координат------------------------------------------------------------------ //конец--------Получение текущих координат------------------------------------------------------------------ //начало--------Получение данных АЦП------------------------------------------------------------------------ //начало--------Получение данных АЦП------------------------------------------------------------------------ //начало--------Получение данных АЦП------------------------------------------------------------------------ if (strcmp(httpSetting->params_get_uri.params_names[i], "adc") == 0) { uint32_t vcc = getVcc(httpSetting->taskAdc); *tot_len = json_generate_adc_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, vcc); return Post_OK; } //конец--------Получение данных АЦП------------------------------------------------------------------------- //конец--------Получение данных АЦП------------------------------------------------------------------------- //конец--------Получение данных АЦП------------------------------------------------------------------------- //начало--------Получение RSSI------------------------------------------------------------------------------ //начало--------Получение RSSI------------------------------------------------------------------------------ //начало--------Получение RSSI------------------------------------------------------------------------------ if (strcmp(httpSetting->params_get_uri.params_names[i], "rssi") == 0) { int32_t rssi; rssi = httpSetting->modemMain->rssi; //rssi = 80 + rand() % (110 - 80); //rssi = random2[random2_i]; //++random2_i; //if (random2_i == 20) // random2_i = 0; *tot_len = json_generate_rssi_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, rssi); return Post_OK; } //конец--------Получение RSSI------------------------------------------------------------------------------- //конец--------Получение RSSI------------------------------------------------------------------------------- //конец--------Получение RSSI------------------------------------------------------------------------------- } } //начало--------Запрос текущих статусов----------------------------------------------------------------------- //начало--------Запрос текущих статусов-------------------------------------------------------------- //начало--------Запрос текущих статусов-------------------------------------------------------------- if (strcmp(uri, "/stat.xip") == 0) { uint32_t stn1 = 0; uint32_t stn2 = 0; uint32_t stn3 = 0; uint8_t numArray[16]; uint8_t numArrayCount = 0; for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "num") == 0) { extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); if (strlen(fileName) == 0) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } struct { int paramcount; char *params_names[MAX_POST_GET_PARAMETERS]; char *params_vals[MAX_POST_GET_PARAMETERS]; } params_grp; params_grp.paramcount = extract_grp_ex_parameters(fileName, params_grp.params_names, params_grp.params_vals, MAX_POST_GET_PARAMETERS); numArrayCount = params_grp.paramcount; for (int i = 0; i < params_grp.paramcount; ++i) { numArray[i] = atoi(params_grp.params_names[i]); } } } if (numArrayCount == 0) { stn1 = 1; stn2 = 1; stn3 = 1; } for (int i = 0; i < numArrayCount; ++i) { if (numArray[i] == 1) stn1 = 1; if (numArray[i] == 2) stn2 = 1; if (numArray[i] == 3) stn3 = 1; } char pathScan[MAX_LEN_PATH_FS]; pathScan[0] = '\0'; strcat(pathScan, dir_sentbox); uint32_t globDirCount = 0; uint32_t globFileCount = 0; scan_files(pathScan, &globDirCount, &globFileCount); uint32_t NumFileOutBox = globFileCount; pathScan[0] = '\0'; strcat(pathScan, dir_inbox); globDirCount = 0; globFileCount = 0; scan_files(pathScan, &globDirCount, &globFileCount); uint32_t NumFileInbox = globFileCount; pathScan[0] = '\0'; strcat(pathScan, dir_outbox); globDirCount = 0; globFileCount = 0; scan_files(pathScan, &globDirCount, &globFileCount); uint32_t CntMsgsOutBox = globFileCount; *tot_len = json_generate_stat_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, NumFileOutBox, NumFileInbox, CntMsgsOutBox, stn1, stn2, stn3); return Post_OK; } //конец--------Запрос текущих статусов----------------------------------------------------------------------- //конец--------Запрос текущих статусов-------------------------------------------------------------- //конец--------Запрос текущих статусов-------------------------------------------------------------- //начало--------Запись переменных----------------------------------------------------------------------- //начало--------Запись переменных-------------------------------------------------------------- //начало--------Запись переменных-------------------------------------------------------------- if (strcmp(uri, "/wvar.xip") == 0) { tHttpPostSetting envPost; envPost.storage = httpSetting->storage; envPost.modemMain = httpSetting->modemMain; char *json = httpSetting->params_get_uri.params_names[0]; envPost.bufAnswer = json; idPostResult_t result = handlerPost_Var(&envPost, AUTH_INTEG); uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Запись переменных----------------------------------------------------------------------- //конец--------Запись переменных-------------------------------------------------------------- //конец--------Запись переменных-------------------------------------------------------------- if (strcmp(uri, "/var.xip") == 0) { // for (int i = 0; i < httpSetting->params_get_uri.paramcount; ++i) { for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { //начало--------Запрос настроек по группам-------------------------------------------------------------- //начало--------Запрос настроек по группам-------------------------------------------------------------- //начало--------Запрос настроек по группам-------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[j], "grp") == 0) { extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); if (strlen(fileName) == 0) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } // Сохранение настроек во временные Nvm_To_RuntimeSettings(httpSetting->storage); bool isWriteMem = false; if (osMutexAcquire(httpSetting->accessMODEM, TIME_MUTEX_MODEM_ACCESS) != osOK) { uint32_t err = Post_MUTEX_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } emac_stop(); idPostResult_t result = ModemGetInitAt(httpSetting->modemMain, &isWriteMem, true, true, true, true); emac_start(); osMutexRelease(httpSetting->accessMODEM); if (isWriteMem) { // Загрузка настроек из временных //RuntimeToNvmSettings(); // Загрузка настроек из временных Runtime_To_NvmSettings(httpSetting->storage); // Сохранение во флеш DeviceStorageSetupIni_Dump(httpSetting->storage); } *tot_len = SettingToJSON_grp(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, fileName, auth); return Post_OK; } //конец--------Запрос настроек по группам-------------------------------------------------------------- //конец--------Запрос настроек по группам-------------------------------------------------------------- //конец--------Запрос настроек по группам-------------------------------------------------------------- //начало--------Запрос настроек по переменным----------------------------------------------------------------------- //начало--------Запрос настроек по переменным-------------------------------------------------------------- //начало--------Запрос настроек по переменным-------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[j], "num") == 0) { extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); if (strlen(fileName) == 0) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } // Сохранение настроек во временные Nvm_To_RuntimeSettings(httpSetting->storage); *tot_len = SettingToJSON_num(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, fileName, auth); return Post_OK; } //конец--------Запрос настроек по переменным-------------------------------------------------------------- //конец--------Запрос настроек по переменным-------------------------------------------------------------- //конец--------Запрос настроек по переменным-------------------------------------------------------------- } // } } //начало--------Получение содержимого директории------------------------------------------------------------ //начало--------Получение содержимого директории------------------------------------------------------------ //начало--------Получение содержимого директории------------------------------------------------------------ if (strcmp(uri, "/getexdir") == 0) { pos = 0; len = 10; for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "pos") == 0) pos = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "len") == 0) len = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "getdir") == 0) extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); } if (strlen(fileName) > 0) fileName[strlen(fileName) - 1] = '\0'; idPostResult_t result; int countFiles = getCountDir(httpSetting, &fileName[1], "*"); if (countFiles > 400) { result = getDirExFile(httpSetting, tot_len, fileNameContent, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &fileName[1], countFiles, pos, pos + len); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } else { *isContentFile = true; } } else { result = getDirExMem(httpSetting, tot_len, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &fileName[1], countFiles, pos, pos + len); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } } return Post_OK; } //конец--------Получение содержимого директории------------------------------------------------------------- //конец--------Получение содержимого директории------------------------------------------------------------- //конец--------Получение содержимого директории------------------------------------------------------------- //начало--------Получение содержимого директории с выборкой------------------------------------------------------------ //начало--------Получение содержимого директории с выборкой------------------------------------------------------------ //начало--------Получение содержимого директории с выборкой------------------------------------------------------------ if (strcmp(uri, "/getsampledir") == 0) { pos = 0; len = 10; for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "pos") == 0) pos = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "len") == 0) len = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "getdir") == 0) extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); } if (strlen(fileName) > 0) fileName[strlen(fileName) - 1] = '\0'; idPostResult_t result; result = getSampleDirMem(httpSetting, tot_len, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &fileName[1], pos, pos + len); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } return Post_OK; } //конец--------Получение содержимого директории с выборкой------------------------------------------------------------- //конец--------Получение содержимого директории с выборкой------------------------------------------------------------- //конец--------Получение содержимого директории с выборкой------------------------------------------------------------- //начало--------Получение альманаха------------------------------------------------------------------------- //начало--------Получение альманаха------------------------------------------------------------------------- //начало--------Получение альманаха------------------------------------------------------------------------- if (strcmp(uri, "/alma.xip") == 0) { for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "run") == 0) { pos = atoi(httpSetting->params_get_uri.params_vals[j]); if ((pos < 0) || (pos > 1)) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } uint32_t err = 0; if (pos == 1) { httpSetting->modemMain->stateRequest.stateReqAlmaWebRunStop = StateReqAlmaWebRun; } if (pos == 0) { httpSetting->modemMain->stateRequest.stateReqAlmaWebRunStop = StateReqAlmaWebStop; } *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } if (strcmp(httpSetting->params_get_uri.params_names[j], "state") == 0) { *tot_len = json_generate_alma_state_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, httpSetting->modemMain->stateRequest.stateReqAlma); return Post_OK; } } } //конец--------Получение альманаха-------------------------------------------------------------------------- //конец--------Получение альманаха-------------------------------------------------------------------------- //конец--------Получение альманаха------------------------------------------------------------------------- if (strcmp(uri, "/cmd.xip") == 0) { for (int i = 0; i < httpSetting->params_get_uri.paramcount; ++i) { //начало--------Запись файла----------------------------------------------------------------------- //начало--------Запись файла-------------------------------------------------------------- //начало--------Запись файла-------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[i], "wrfile") == 0) { tHttpPostSetting envPost; envPost.params_post_uri.paramcount = httpSetting->params_get_uri.paramcount; for (int k = 0; k < httpSetting->params_get_uri.paramcount; ++k) { envPost.params_post_uri.params_names[k] = httpSetting->params_get_uri.params_names[k]; envPost.params_post_uri.params_vals[k] = httpSetting->params_get_uri.params_vals[k]; } envPost.fs = httpSetting->fs; envPost.bufAnswer = bufAnswer; idPostResult_t result = handlerPost_Message_Outbox_Wrfile(&envPost); uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Запись файла----------------------------------------------------------------------- //конец--------Запись файла-------------------------------------------------------------- //конец--------Запись файла-------------------------------------------------------------- //начало--------Запрос номера терминала-------------------------------------------------------------------------------------- //начало--------Запрос номера терминала-------------------------------------------------------------------------------------- //начало--------Запрос номера терминала-------------------------------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[i], "getauth") == 0) { *tot_len = json_generate_auth_send_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, (uint32_t) httpSetting->auth); return Post_OK; } //конец--------Запрос номера терминала -------------------------------------------------------------------------------------- //конец--------Запрос номера терминала -------------------------------------------------------------------------------------- //конец--------Запрос номера терминала -------------------------------------------------------------------------------------- //начало--------Создание входящего файла-------------------------------------------------------------------- //начало--------Создание входящего файла-------------------------------------------------------------------- //начало--------Создание входящего файла-------------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[i], "sendmsg") == 0) { chSv = 1; isfile = 0; kvs = 0; urgency = 0; routing = 0; for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "urgency") == 0) urgency = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "chSv") == 0) chSv = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "file") == 0) isfile = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "kvs") == 0) kvs = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "routing") == 0) routing = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "sendmsg") == 0) extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); if (strcmp(httpSetting->params_get_uri.params_names[j], "to") == 0) extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], to, sizeof(to)); } if ((urgency == -1) || (chSv == -1) || (isfile == -1) || (kvs == -1) || (strlen(fileName) == 0) || (strlen(to) == 0) || (urgency > 9) || (chSv > 2) || (isfile > 1)) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } // Время не получено if (httpSetting->modemMain->location.isOneDateTime) { uint32_t err = Post_GNSS_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } bool isToGonec = false; uint32_t gonecTo; if ((chSv == 1) || (chSv == 0)) { char *end; gonecTo = strtoul(to, &end, 10); if ((gonecTo > 0) && (gonecTo <= 99999)) { isToGonec = true; } } if (isTo(to, '@')) { isToGonec = true; } idPostResult_t result = Post_PARAM_ERR; if (isToGonec) { fileName[strlen(fileName) - 1] = '\0'; // if (osMutexAcquire(httpSettings.accessHTTP, TIME_MUTEX_HTTP_ACCESS) != osOK) { // uint32_t err = Post_MUTEX_ERR; // *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); // return Post_OK; // } time_t timestamp = 0; httpSettings.rtc->get(&httpSettings.rtc, ×tamp); timestamp += httpSettings.storage->nvm.Settings_General.GMTcorr_v * 3600; result = handlerGet_Message_Outbox_CreateTempOrRealFile_Sendmsg(httpSetting, true, &fileName[1], 0, 0, timestamp, to, urgency, chSv, isfile, kvs, routing, 0); // osMutexRelease(httpSettings.accessHTTP); httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_OUTBOX); } uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } //конец--------Создание входящего файла-------------------------------------------------------------------- //конец--------Создание входящего файла-------------------------------------------------------------------- //конец--------Создание входящего файла-------------------------------------------------------------------- //начало--------Получение состояния кнопок------------------------------------------------------------------ //начало--------Получение состояния кнопок------------------------------------------------------------------ //начало--------Получение состояния кнопок------------------------------------------------------------------ if (strcmp(httpSetting->params_get_uri.params_names[i], "getalmastate") == 0) { *tot_len = json_generate_state_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, httpSetting->modemMain->stateRequest.stateReqAlma); return Post_OK; } //конец--------Получение состояния кнопок------------------------------------------------------------------ //конец--------Получение состояния кнопок------------------------------------------------------------------ //конец--------Получение состояния кнопок------------------------------------------------------------------ //начало--------Получение спутника в ЗВР-------------------------------------------------------------------- //начало--------Получение спутника в ЗВР-------------------------------------------------------------------- //начало--------Получение спутника в ЗВР-------------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[i], "getalma") == 0) { // Время не получено if (httpSetting->modemMain->location.isOneDateTime) { uint32_t err = Post_GNSS_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } FILINFO fno; FRESULT fr = f_stat(file_cur_almhs, &fno); // Нет файла альманаха if (fr) { uint32_t err = Post_NO_ALMA; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } time_t now; httpSetting->rtc->get(httpSetting->rtc, &now); now += httpSetting->storage->nvm.Settings_General.GMTcorr_v * 3600; bool almanacIsValid = GonetsAlmanac_IsValid(httpSetting->modemMain->alms, now); // Просрочен альманах if (almanacIsValid == false) { uint32_t err = Post_OLD_ALMA; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } uint8_t inRange[10]; // массив со спутниками внутри конуса size_t countRange = 0; vector2 selfPosition; selfPosition.x = (float) httpSetting->modemMain->location.latitude; selfPosition.y = (float) httpSetting->modemMain->location.longitude; uint32_t dist = httpSetting->storage->nvm.dist; uint16_t sat[100]; uint16_t count_sat = 0; char *front; char *div = httpSetting->storage->nvm.Settings_General.BannedSAT_v - 1; char *end = div + strlen(httpSetting->storage->nvm.Settings_General.BannedSAT_v); for (;;) { if (iAsciiStringMoveToNextParsingBlock(&front, &div, end, ',')) { sat[count_sat] = atoi(front); ++count_sat; } else { break; } } time_t interval_begin = now; for (i = 0; i < 1200; ++i) { countRange = GonetsAlmanac_GetInRangeForMoment( httpSetting->modemMain->alms, (size_t) httpSetting->modemMain->countAlmanac, selfPosition, (float) dist, interval_begin, inRange ); if (countRange > 0) { bool isBan = false; for (int j = 0; j < count_sat; ++j) { if (sat[j] == inRange[0]) isBan = true; } if (isBan == false) break; } interval_begin += 10; } *tot_len = json_generate_getalma(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, interval_begin - now, inRange[0]); return Post_OK; } //конец---------Получение спутника в ЗВР-------------------------------------------------------------------- //конец---------Получение спутника в ЗВР-------------------------------------------------------------------- //конец---------Получение спутника в ЗВР-------------------------------------------------------------------- //начало--------Получение содержимого директории------------------------------------------------------------ //начало--------Получение содержимого директории------------------------------------------------------------ //начало--------Получение содержимого директории------------------------------------------------------------ if (strcmp(httpSetting->params_get_uri.params_names[i], "getdir") == 0) { char dir[MAX_LEN_PATH_FS]; extract_utf8_parameters(httpSetting->params_get_uri.params_vals[i], dir, sizeof(dir)); char flt[12]; flt[0] = '\0'; strcat(flt, " * "); if (httpSetting->params_get_uri.paramcount > 1) { if (strcmp(httpSetting->params_get_uri.params_names[i + 1], "flt") == 0) { extract_utf8_parameters(httpSetting->params_get_uri.params_vals[i + 1], flt, sizeof(flt)); } } if (strlen(flt) > 0) flt[strlen(flt) - 1] = '\0'; if (strlen(dir) > 0) dir[strlen(dir) - 1] = '\0'; idPostResult_t result; int countFiles = getCountDir(httpSetting, &dir[1], &flt[1]); if (countFiles > 400) { // uint32_t t1 = SystemGetMs(); result = getDirMemToFile(httpSetting, tot_len, fileNameContent, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &dir[1], &flt[1]); // uint32_t t2 = SystemGetMs(); // volatile uint32_t t3 = t2 - t1; if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } else { *isContentFile = true; } } else { result = getDirMem(httpSetting, tot_len, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &dir[1], &flt[1]); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } } return Post_OK; } //конец--------Получение содержимого директории------------------------------------------------------------- //конец--------Получение содержимого директории------------------------------------------------------------- //конец--------Получение содержимого директории------------------------------------------------------------- //начало--------Получение содержимого файла----------------------------------------------------------------- //начало--------Получение содержимого файла----------------------------------------------------------------- //начало--------Получение содержимого файла----------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[i], "getfile") == 0) { pos = 0; len = 1024; for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "pos") == 0) pos = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "len") == 0) len = atoi(httpSetting->params_get_uri.params_vals[j]); if (strcmp(httpSetting->params_get_uri.params_names[j], "getfile") == 0) extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); } if ((len < 0) || (len > 1024) || (strlen(fileName) == 0)) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } fileName[strlen(fileName) - 1] = '\0'; // Получение указателя на расширение файла char *pExt = getVoidExt((char *) &fileName[1]); // if (osMutexAcquire(httpSettings.accessHTTP, TIME_MUTEX_HTTP_ACCESS) != osOK) { // uint32_t err = Post_MUTEX_ERR; // *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); // return Post_OK; // } // if (strcmp(pExt, ".log") == 0) { // if (osMutexAcquire(httpSetting->accessLOG, TIME_MUTEX_LOG_ACCESS) != osOK) { // osMutexRelease(httpSettings.accessHTTP); // uint32_t err = Post_MUTEX_ERR; // *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); // return Post_OK; // } // } idPostResult_t result = getFile(httpSetting, tot_len, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &fileName[1], pos, len); // if (strcmp(pExt, ".log") == 0) { // osMutexRelease(httpSetting->accessLOG); // } // osMutexRelease(httpSettings.accessHTTP); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } return Post_OK; } //конец--------Получение содержимого файла------------------------------------------------------------------ //конец--------Получение содержимого файла------------------------------------------------------------------ //конец--------Получение содержимого файла------------------------------------------------------------------ //начало--------Получение информации о файле---------------------------------------------------------------- //начало--------Получение информации о файле---------------------------------------------------------------- //начало--------Получение информации о файле---------------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[i], "getfilesize") == 0) { for (int j = 0; j < httpSetting->params_get_uri.paramcount; ++j) { if (strcmp(httpSetting->params_get_uri.params_names[j], "getfilesize") == 0) extract_utf8_parameters(httpSetting->params_get_uri.params_vals[j], fileName, sizeof(fileName)); } if (strlen(fileName) == 0) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } fileName[strlen(fileName) - 1] = '\0'; // Получение указателя на расширение файла char *pExt = getVoidExt((char *) &fileName[1]); if (strcmp(pExt, ".log") == 0) { if (osMutexAcquire(httpSetting->accessLOG, TIME_MUTEX_LOG_ACCESS) != osOK) { uint32_t err = Post_MUTEX_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } } idPostResult_t result = getFileSize(httpSetting, tot_len, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &fileName[1]); if (strcmp(pExt, ".log") == 0) osMutexRelease(httpSetting->accessLOG); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } return Post_OK; } //конец--------Получение информации о файле----------------------------------------------------------------- //конец--------Получение информации о файле----------------------------------------------------------------- //конец--------Получение информации о файле----------------------------------------------------------------- //начало--------Удаление файла------------------------------------------------------------------------------ //начало--------Удаление файла------------------------------------------------------------------------------ //начало--------Удаление файла------------------------------------------------------------------------------ if (strcmp(httpSetting->params_get_uri.params_names[i], "fildel") == 0) { extract_utf8_parameters(httpSetting->params_get_uri.params_vals[i], fileName, sizeof(fileName)); if (strlen(fileName) == 0) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } fileName[strlen(fileName) - 1] = '\0'; // if (osMutexAcquire(httpSettings.accessHTTP, TIME_MUTEX_HTTP_ACCESS) != osOK) { // uint32_t err = Post_MUTEX_ERR; // *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); // return Post_OK; // } idPostResult_t result = delFile(httpSetting, tot_len, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &fileName[1]); char dirFileNameIn[MAX_LEN_PATH_FS]; dirFileNameIn[0] = '\0'; strcat(dirFileNameIn, "1:"); strcat(dirFileNameIn, &fileName[1]); char dirFileNameOut[MAX_LEN_PATH_FS]; getPath(dirFileNameIn, dirFileNameOut, 2); if (strcmp(dirFileNameOut, dir_sentbox) == 0) { getDelFilesDirDat(httpSetting->fs, (char *) dir_sentbox, "STM"); getDelFilesDirClean(httpSetting->fs, (char *) dir_sentbox); httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_SENTBOX); } if (strcmp(dirFileNameOut, dir_tracert) == 0) { getDelFileDirDatTracert(httpSetting->fs, (char *) dir_tracert); httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_TRACERT); httpSetting->modemMain->stateRequest.stateReqDelExtT = StateReqExtForDel; httpSetting->modemMain->stateRequest.stateReqCreateExtT = StateReqExtForCreate; } if (strcmp(dirFileNameOut, dir_inbox) == 0) { getDelFilesDirDat(httpSetting->fs, (char *) dir_inbox, "ITM"); getDelFilesDirClean(httpSetting->fs, (char *) dir_inbox); httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_INBOX); } if (strcmp(dirFileNameOut, dir_outbox) == 0) { httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_OUTBOX); httpSetting->modemMain->stateRequest.stateReqDelExtW = StateReqExtForDel; httpSetting->modemMain->stateRequest.stateReqCreateExtW = StateReqExtForCreate; } // osMutexRelease(httpSettings.accessHTTP); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } return Post_OK; } //конец--------Удаление файла------------------------------------------------------------------------------- //конец--------Удаление файла------------------------------------------------------------------------------- //конец--------Удаление файла------------------------------------------------------------------------------- //начало--------Удаление всех файлов в директории----------------------------------------------------------- //начало--------Удаление всех файлов в директории----------------------------------------------------------- //начало--------Удаление всех файлов в директории----------------------------------------------------------- if (strcmp(httpSetting->params_get_uri.params_names[i], "fildirdel") == 0) { extract_utf8_parameters(httpSetting->params_get_uri.params_vals[i], fileName, sizeof(fileName)); if (strlen(fileName) == 0) { uint32_t err = Post_PARAM_ERR; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); return Post_OK; } fileName[strlen(fileName) - 1] = '\0'; // if (osMutexAcquire(httpSettings.accessHTTP, TIME_MUTEX_HTTP_ACCESS) != osOK) { // uint32_t err = Post_MUTEX_ERR; // *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); // return Post_OK; // } idPostResult_t result = delDirFile(httpSetting, tot_len, bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, &fileName[1]); // osMutexRelease(httpSettings.accessHTTP); if (result) { uint32_t err = result; *tot_len = json_generate_err_answer(bufAnswer, LEN_BUF_SMALL_ANSWER_HTTP, err); } char dirFileNameIn[MAX_LEN_PATH_FS]; dirFileNameIn[0] = '\0'; strcat(dirFileNameIn, "1:"); strcat(dirFileNameIn, &fileName[1]); strcat(dirFileNameIn, "/"); char dirFileNameOut[MAX_LEN_PATH_FS]; getPath(dirFileNameIn, dirFileNameOut, 2); if (strcmp(dirFileNameOut, dir_sentbox) == 0) { getDelFilesDirDat(httpSetting->fs, (char *) dir_sentbox, "STM"); getDelFilesDirClean(httpSetting->fs, (char *) dir_sentbox); httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_SENTBOX); } if (strcmp(dirFileNameOut, dir_tracert) == 0) { getDelFileDirDatTracert(httpSetting->fs, (char *) dir_tracert); httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_TRACERT); httpSetting->modemMain->stateRequest.stateReqDelExtT = StateReqExtForDel; httpSetting->modemMain->stateRequest.stateReqCreateExtT = StateReqExtForCreate; } if (strcmp(dirFileNameOut, dir_inbox) == 0) { getDelFilesDirDat(httpSetting->fs, (char *) dir_inbox, "ITM"); getDelFilesDirClean(httpSetting->fs, (char *) dir_inbox); httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_INBOX); } if (strcmp(dirFileNameOut, dir_outbox) == 0) { httpSetting->rtc->get(&httpSetting->rtc, &httpSetting->modemMain->eventWebState.EVENT_OUTBOX); httpSetting->modemMain->stateRequest.stateReqDelExtW = StateReqExtForDel; httpSetting->modemMain->stateRequest.stateReqCreateExtW = StateReqExtForCreate; } return Post_OK; } //конец--------Удаление всех файлов в директории------------------------------------------------------------ //конец--------Удаление всех файлов в директории------------------------------------------------------------ //конец--------Удаление всех файлов в директории------------------------------------------------------------ } } return Post_404_ERR; }