Quellcode durchsuchen

rewrite ssl_server

balbekova vor 5 Jahren
Ursprung
Commit
afce559bb4

+ 38 - 37
modules/HTTP_Server/http_server.c

@@ -10,9 +10,9 @@
 #include "urlcode.h"
 #include "trap_params.h"
 #ifdef HARDWARE_BT6707
-#include "bt6706_fs/fsdata.c"
+#include "bt6707_fs/fsdata.c"
 #elif HARDWARE_BT6709
-#include "bt6708_fs/fsdata.c"
+#include "bt6709_fs/fsdata.c"
 #endif
 #include "settings_api.h"
 #include "netconf.h"
@@ -60,8 +60,6 @@ void LoginTimerCallback(TimerHandle_t pxTimer);
 static void getAuthenticatedState(void);
 #endif
 
-int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
-
 static uint32_t Parse_Content_Length(char *data, uint32_t len);
 char *send_file(char *filename, char *pnonmatch,  struct fs_file *file, uint16_t *Len);
 static uint32_t Parse_Header(char *data, uint32_t len, const char *field, uint32_t flen, char *value);
@@ -154,13 +152,14 @@ typedef struct {
     uint8_t len;
     REQ_TYPE_SEND_t req_type_send;
     ACCESS_TYPE_t accsess;
-    char *(*handler)(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+    char *(*handler)(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 } web_func_handler_t;
 
 web_func_handler_t process_web_funcs[] = {
 #ifdef HTTP_AUTH_ENABLE
     { "POST /login.cgi",            15,   COMMON_ANSWER,        ALL_ACCESS,   HTTP_LoginPage },
     { "GET /logout.cgi",            15,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_LogoutPage },
+    { "GET /changepwd.cgi",         18,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_ChangeUserPwd }, 
 #endif
     { "GET /getJson.cgi",           16,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_GetParamsPage },
     { "GET /settings.cgi",          17,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_GetSettingsPage },
@@ -174,7 +173,7 @@ web_func_handler_t process_web_funcs[] = {
     { "GET /ups_power.cgi",         18,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_UPSshutdown },
     { "GET /reboot.cgi",            15,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_Reboot },
     { "GET /confirm.cgi",           16,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_Confirm },
-    { "GET /fw_update.cgi",         18,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_ConfirmBootPwd },
+    { "GET /fw_update.cgi",         18,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_ConfirmBootPwd }, 
     { "GET",                        3,    COMMON_ANSWER,        ALL_ACCESS,   HTTP_GetRequest },
     { "",                           0,    COMMON_ANSWER,        ALL_ACCESS,   HTTP_NoFound },
     { "", 0, 0, 0, NULL }
@@ -257,8 +256,6 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
     struct http_state *hs;
     web_func_handler_t *h;
 
-    (void)err;
-
     hs = arg;
 
     if (err == ERR_OK && p != NULL) {
@@ -704,7 +701,7 @@ void HTTP_Init()
 #endif
 }
 
-char* HTTP_HistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_HistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     uint8_t i, valueLen = 0;
     char value[20];
@@ -755,7 +752,7 @@ char* HTTP_HistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenB
     }
 }
 
-char* HTTP_UpsHistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_UpsHistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     uint8_t i, valueLen = 0;
     char value[20];
@@ -810,12 +807,13 @@ char* HTTP_UpsHistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t l
   * @brief  Установка даты производства
   */
 // TODO Убрать заглушку!
-void HTTP_Prodate(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+void HTTP_Prodate(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     uint8_t valueLen = 0;
     char value[20];
 
     (void)lenBufIn;
+    (void)reqNum;
 
     memset(bufOut, 0, SEND_BUF_MAX_LEN);
 
@@ -843,11 +841,15 @@ void HTTP_Prodate(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn,
   * @brief
   * @retval None
   */
-char *HTTP_SetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_SetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     char *DataOffset;
     (void)reqNum;
 
+    if (seclevel == USER) {
+      return 0;
+    }
+
     DataOffset = 0;
     // POST Packet received
     if (DataFlag2 == 0) {
@@ -1121,11 +1123,15 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
   * @brief
   * @retval None
   */
-char *HTTP_SetInfoPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_SetInfoPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     char *DataOffset;
     (void)reqNum;
 
+    if (seclevel == USER) {
+      return 0;
+    }
+
     DataOffset = 0;
     // POST Packet received
     if (DataFlag == 0) {
@@ -1167,8 +1173,7 @@ char *HTTP_SetInfoPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenB
         DataFlag = 0;
         memset(bufOut, 0, size);
 
-        strcpy(bufOut, "HTTP/1.1 200 OK\r\n");
-        strcat(bufOut, "\r\n\r\n");
+        strcpy(bufOut, HTTP_200_OK);
         strcat(bufOut,
             "<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/info.html\"/></head></html>\r\n\r\n");
 
@@ -1224,7 +1229,7 @@ void HTTP_SetInfo(char *buf, uint16_t lenBuf)
     HTTP_SaveSettings();
 }
 
-char* HTTP_Reset(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_Reset(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
   (void)bufIn;
 	(void)bufOut;
@@ -1241,7 +1246,7 @@ char* HTTP_Reset(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn,
 	return file.data;
 }
 
-char* HTTP_Confirm(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_Confirm(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
 	(void)bufIn;
 	(void)bufOut;
@@ -1258,11 +1263,9 @@ char* HTTP_Confirm(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn
 	return file.data;
 }
 
-char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
-	(void)bufIn;
 	(void)bufOut;
-	(void)lenBufIn;
   (void)reqNum;
 #ifdef HTTP_AUTH_ENABLE
   const char* html_page_name[] = {
@@ -1278,7 +1281,7 @@ char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBu
   uint8_t len;
 
   memset(filename, 0, MAX_FILENAME_LEN);
-  if (GetFileName(receiveBuf, filename, &len)) {
+  if (GetFileName(bufIn, filename, &len)) {
     /* Parce If-Non_Match value */
 #ifdef HTTP_AUTH_ENABLE    
     if(!Authenticated){
@@ -1295,7 +1298,7 @@ char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBu
       HTTP_UpdateUserLoginTime(user_id);
     }
 #endif
-    uint8_t nonmatch_len = Parse_Header(receiveBuf, receivedBufLen, If_None_Match, 15, nonmatch);
+    uint8_t nonmatch_len = Parse_Header(bufIn, lenBufIn, lenBufIn, 15, nonmatch);
     if (nonmatch_len < MAX_ETAG_LEN && nonmatch_len > 0) {
       //DBG printf("If_None_Match: %s\r\n", nonmatch);
       pnonmatch = nonmatch;
@@ -1305,7 +1308,7 @@ char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBu
   return 0;
 }
 
-char* HTTP_NoFound(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_NoFound(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
 	(void)bufIn;
 	(void)bufOut;
@@ -1323,7 +1326,7 @@ char* HTTP_NoFound(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn
 /**
   * @brief  Запуск/останов теста UPS
   */
-char* HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     uint8_t valueLen = 0;
     char tempValue[20];
@@ -1352,7 +1355,6 @@ char* HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn
         if (res == -1) {
             strcat(bufOut, "Тест не удалось остановить!");
         }
-        *lenBufOut = strlen(bufOut);
     } else if (strcmp(tempValue, "discharge") == 0) {
         res = ups_metac_service_pdu(ups_test_low_bat);
         if (res == 1 || res == 0) {
@@ -1386,7 +1388,7 @@ char* HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn
 /**
   * @brief  Выклюение UPS
   */
-char* HTTP_UPSshutdown(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_UPSshutdown(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     uint8_t valueLen = 0;
     char *valueLenEnd = 0;
@@ -1435,7 +1437,7 @@ char* HTTP_UPSshutdown(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenB
   * @brief  Проверка пароля для перехода в режим bootloader
   * @retval None
   */
-char* HTTP_ConfirmBootPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char* HTTP_ConfirmBootPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     (void)bufIn;
     (void)lenBufIn;
@@ -1630,7 +1632,7 @@ void LogoutTimerCallback(TimerHandle_t pxTimer)
   * @brief  Смена пароля пользователя
   * @retval None
   */
-int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
+char *HTTP_ChangeUserPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     char tempStr[110];
     char value[20];
@@ -1640,6 +1642,7 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
     uint8_t valueLen, valueLen2, user_id;
     char WebLogin[MAX_WEB_LOGIN_LEN];
 
+    (void)reqNum;
     (void)lenBufIn;
 
     memset(login, 0, sizeof(login));
@@ -1678,22 +1681,20 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
                     log_event_data(LOG_PSW_CHANGE, name_login);
                     strcat(bufOut, "Пароль успешно изменён");
                     *lenBufOut = strlen(bufOut);
-                    return SEND_REQUIRED_YES;
+                    return bufOut;
                 } else {
                     strcat(bufOut, "Введены некорректные данные!");
                     *lenBufOut = strlen(bufOut);
-                    return SEND_REQUIRED_YES;
+                    return bufOut;
                 }
             }
         }
         strcat(bufOut, "Введён неверный пароль!");
-        *lenBufOut = strlen(bufOut);
-        return SEND_REQUIRED_YES;
     } else {
         strcat(bufOut, "Введены некорректные данные!");
-        *lenBufOut = strlen(bufOut);
-        return SEND_REQUIRED_YES;
     }
+    *lenBufOut = strlen(bufOut);
+    return bufOut;
 }
 
 static void getAuthenticatedState(void)
@@ -1740,7 +1741,7 @@ static void getAuthenticatedState(void)
     }
 }
 
-char *HTTP_LoginPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_LoginPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     (void)reqNum;
     uint32_t req_data_received = 0;
@@ -1837,7 +1838,7 @@ char *HTTP_LoginPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBuf
     return 0;
 }
 
-char *HTTP_LogoutPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_LogoutPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     (void)bufIn;
     (void)bufOut;
@@ -1849,7 +1850,7 @@ char *HTTP_LogoutPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBu
 
     HTTP_ForceUserLogout(user_id);
 
-    fs_open("/login.html", &file);
+    fs_open("/settings.html", &file);
     *lenBufOut = file.len;
     return file.data;
 }

+ 21 - 15
modules/HTTP_Server/http_server.h

@@ -59,7 +59,7 @@ void vTaskPrintHttp(void *pvParameters);
 /**
   * @brief  Установка даты производства
   */
-void HTTP_Prodate(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+void HTTP_Prodate(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Парсинг строки настроек
@@ -74,64 +74,70 @@ void HTTP_SetInfo(char *buf, uint16_t lenBuf);
 /**
   * @brief  
   */
-char* HTTP_SetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_SetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  
   */
-char* HTTP_SetInfoPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_SetInfoPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 #ifdef HTTP_AUTH_ENABLE
 /**
   * @brief  
   */
-char* HTTP_LoginPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_LoginPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  
   */
-char* HTTP_LogoutPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_LogoutPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief  Смена пароля пользователя
+  * @retval None
+  */
+char *HTTP_ChangeUserPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 #endif
 
 /**
   * @brief  
   */
-char* HTTP_UpsHistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_UpsHistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  
   */
-char* HTTP_HistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_HistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  
   */
-char* HTTP_Reset(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_Reset(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  
   */
-char* HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  
   */
-char* HTTP_Confirm(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_Confirm(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Запуск/останов теста UPS
   */
-char* HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Выклюение UPS
   */
-char* HTTP_UPSshutdown(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_UPSshutdown(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Проверка пароля для перехода в режим bootloader
   */
-char* HTTP_ConfirmBootPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_ConfirmBootPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Проверка пароля для входа в Web
@@ -141,12 +147,12 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 /**
   * @brief  
   */
-char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  
   */
-char* HTTP_NoFound(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char* HTTP_NoFound(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  

Datei-Diff unterdrückt, da er zu groß ist
+ 1591 - 1025
modules/HTTP_Server/my_ssl_server.c


+ 87 - 27
modules/HTTP_Server/my_ssl_server.h

@@ -16,9 +16,14 @@
 
 #include "mbedtls/ssl.h"
 
+#define HTTP_AUTH_ENABLE
+
 #define SSL_TASK_PRIO   ( configMAX_PRIORITIES - 3 )
 #define FRAME_SIZE      (1000)
 
+#define SEND_BUF_MAX_LEN      2000
+#define RECIVE_BUF_MAX_LEN    1500
+
 typedef enum
 {
   SSL_ACCEPT = 0,
@@ -36,12 +41,18 @@ typedef enum
 
 typedef enum
 {
-  SET_PAGE_IDLE = 0,
-  SET_PAGE_PAGE1,
-  SET_PAGE_PAGE2,
-  SET_PAGE_PAGE3,
-  SET_PAGE_PAGE4,
-} SET_PAGE_t;
+	ALL_ACCESS = 0,
+  TIME_ACCESS
+} ACCESS_TYPE_t;
+
+typedef enum
+{
+	COMMON_ANSWER = 0,
+  PARAMETER_ANSWER,
+	HISTORY_ANSWER,
+	UPS_HISTORY_ANSWER
+
+} REQ_TYPE_SEND_t;
 
 typedef enum
 {
@@ -54,6 +65,8 @@ struct http_state
 {
   char *file;
   u32_t left;
+  u32_t reqnum;
+  void *locked;
 };
 
 struct fs_file {
@@ -63,14 +76,6 @@ struct fs_file {
 
 void HTTP_Init();
 
-static err_t http_accept(void *arg, struct tcp_pcb *pcb, err_t err);
-static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t err);
-
-
-
-
-void http_server_netconn_init();
-
 /**
   * @brief  Выводим запросы в консоль
   */
@@ -88,38 +93,87 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf);
 
 /**
   * @brief
+  * @retval None
   */
-void HTTP_SetInfo(char *buf, uint16_t lenBuf);
+char *HTTP_GetSert(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief
+  * @retval None
+  */
+char *HTTP_Upload_Sert(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief
   */
-int HTTP_SettingsPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+void HTTP_SetInfo(char *buf, uint16_t lenBuf);
 
 /**
   * @brief
   */
-int HTTP_InfoPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+char* HTTP_SetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief  
+  */
+char* HTTP_SetInfoPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+#ifdef HTTP_AUTH_ENABLE
+/**
+  * @brief  
+  */
+char* HTTP_LoginPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
+/**
+  * @brief  
+  */
+char* HTTP_LogoutPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
-int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+/**
+  * @brief  Смена пароля пользователя
+  * @retval None
+  */
+char *HTTP_ChangeUserPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+#endif
+/**
+  * @brief  
+  */
+char* HTTP_UpsHistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief  
+  */
+char* HTTP_HistoryPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
-int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+/**
+  * @brief  
+  */
+char* HTTP_Reset(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief  
+  */
+char* HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief  
+  */
+char* HTTP_Confirm(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Запуск/останов теста UPS
   */
-void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+char* HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Выклюение UPS
   */
-void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+char* HTTP_UPSshutdown(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Проверка пароля для перехода в режим bootloader
   */
-void HTTP_ConfirmBootPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+char* HTTP_ConfirmBootPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Проверка пароля для входа в Web
@@ -128,6 +182,16 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 
 void HTTP_LOGIN(char *bufOut, uint16_t *lenBufOut);
 
+/**
+  * @brief  
+  */
+char* HTTP_GetRequest(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief  
+  */
+char* HTTP_NoFound(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
 /**
   * @brief
   */
@@ -171,8 +235,6 @@ typedef struct
   uint32_t State;
 }rng_state;
 
-void Cockie(void);
-void getAuthenticatedState(void);
 void ssl_server(void *pvParameters);
 
 
@@ -181,10 +243,8 @@ void HTTP_SendHistory(void);
 void HTTP_SendLog(void);
 void HTTPS_Init();
 int SSL_ReadRoutine(mbedtls_ssl_context *ssl, unsigned char* recvBuf);
-char* SSL_ProcessingRoutine(uint16_t* sendLen);
+char* SSL_ProcessingRoutine(uint32_t* sendLen);
 SSL_SERVER_STATE SSL_WriteRoutine(mbedtls_ssl_context *ssl, char *data, int datalen);
-char* AuthenticatedFalseRoutine(uint16_t* sendLen);
-char* AuthenticatedTrueRoutine(uint16_t* sendLen);
 SSL_SERVER_STATE SSL_SendFrames(mbedtls_ssl_context *ssl, char *data, int datalen);
 SSL_SERVER_STATE SSL_Write(mbedtls_ssl_context *ssl, char *data, int datalen);
 

+ 14 - 4
modules/HTTP_Server/web_params_api.c

@@ -12,7 +12,11 @@
 
 #include "stm32f4xx.h"
 #include "web_params_api.h"
+#if defined HARDWARE_BT6707 || HARDWARE_BT6709
 #include "http_server.h"
+#elif defined HARDWARE_BT6703
+#include "my_ssl_server.h"
+#endif
 #include "parameters.h"
 #include "trap_params.h"
 #include "snmp_api.h"
@@ -38,11 +42,13 @@ typedef  void (*pFunction)(void);
 pFunction Jump_To_Application;
 uint32_t JumpAddress;
 
+extern uint8_t seclevel;
+
 /**
   * @brief  Возвращяет строку с настройками на первой странице
   * @retval None
   */
-char *HTTP_GetParamsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_GetParamsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     char str[40];
     uint8_t len;
@@ -141,7 +147,7 @@ char *HTTP_GetParamsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t le
   * @brief  Возвращяет строку с настройками на второй странице
   * @retval None
   */
-char *HTTP_GetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_GetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     char str[30];
     uint8_t len;
@@ -152,6 +158,10 @@ char *HTTP_GetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t
     (void)lenBufIn;
     (void)reqNum;
 
+    if (seclevel == USER) {
+      return 0;
+    }
+
     /* Headers для поддержки saffari */
     strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
 
@@ -398,7 +408,7 @@ uint8_t ConvertStringForJSON(char *inStr, char *paramValue, uint8_t inLen)
   * @retval None
   */
 // TODO Согласовать максимальную длину строк
-char *HTTP_GetInfo(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_GetInfo(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     char str[110];
     char tmp_str[220];
@@ -632,7 +642,7 @@ void HTTP_SaveSettings(void)
 /**
   * @brief  Перезагрузка контроллера
   */
-char *HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut)
+char *HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
 {
     (void)bufIn;
     (void)lenBufIn;

+ 4 - 4
modules/HTTP_Server/web_params_api.h

@@ -19,17 +19,17 @@
 /**
   * @brief  Заполнение JSON строки параметров
   */
-char *HTTP_GetParamsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char *HTTP_GetParamsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
   
 /**
   * @brief  Возвращяет строку с настройками на второй странице
   */
-char *HTTP_GetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char *HTTP_GetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  Возвращяет строку с информацией об устройстве
   */
-char *HTTP_GetInfo(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char *HTTP_GetInfo(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 void HTTP_GetHistoryPage(char* buf, uint32_t pageNumber);
 
@@ -53,7 +53,7 @@ void HTTP_SaveSettings(void);
 /**
   * @brief  Перезагрузка контроллера
   */
-char *HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint32_t lenBufIn, uint32_t *lenBufOut);
+char *HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
 /**
   * @brief  

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.