GONEC_ARTERY_HttpServer/Src/httpd_get.c

1688 lines
81 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by cfif on 10.11.22.
//
#include "lwip/apps/httpd.h"
#include "lwip/debug.h"
#include "lwip/apps/fs.h"
#include <string.h>
#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, &timestamp_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, &timestamp);
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, &timestamp_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, &timestamp);
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;
}