http_server.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include "lwip/opt.h"
  2. #include "lwip/arch.h"
  3. #include "lwip/api.h"
  4. #include "mbedtls/ssl.h"
  5. #define SSL_TASK_PRIO ( configMAX_PRIORITIES - 3 )
  6. #define FRAME_SIZE (1000)
  7. typedef enum
  8. {
  9. SSL_ACCEPT = 0,
  10. SSL_CRITICAL_ERROR,
  11. SSL_HANDSHAKE,
  12. SSL_READ,
  13. SSL_PROCESSING,
  14. SSL_WRITE,
  15. } SSL_SERVER_STATE;
  16. typedef enum
  17. {
  18. SET_PAGE_IDLE = 0,
  19. SET_PAGE_PAGE1,
  20. SET_PAGE_PAGE2,
  21. SET_PAGE_PAGE3,
  22. SET_PAGE_PAGE4,
  23. } SET_PAGE_t;
  24. typedef enum
  25. {
  26. SEND_REQUIRED_YES = 0,
  27. SEND_REQUIRED_NO,
  28. SEND_REQUIRED_FILE
  29. } REQ_TYPE_t;
  30. struct http_state
  31. {
  32. char *file;
  33. u32_t left;
  34. };
  35. struct fs_file {
  36. char *data;
  37. int len;
  38. };
  39. void HTTP_Init();
  40. static err_t http_accept(void *arg, struct tcp_pcb *pcb, err_t err);
  41. static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err);
  42. void http_server_netconn_init();
  43. /**
  44. * @brief Выводим запросы в консоль
  45. */
  46. void vTaskPrintHttp(void *pvParameters);
  47. /**
  48. * @brief Установка даты производства
  49. */
  50. void HTTP_Prodate(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  51. /**
  52. * @brief Парсинг строки настроек
  53. */
  54. void HTTP_SetSettings(char *buf, uint16_t lenBuf);
  55. /**
  56. * @brief
  57. */
  58. void HTTP_SetInfo(char *buf, uint16_t lenBuf);
  59. /**
  60. * @brief
  61. */
  62. int HTTP_SettingsPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  63. /**
  64. * @brief
  65. */
  66. int HTTP_InfoPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  67. int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  68. int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  69. /**
  70. * @brief Запуск/останов теста UPS
  71. */
  72. void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  73. /**
  74. * @brief Выклюение UPS
  75. */
  76. void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  77. /**
  78. * @brief Проверка пароля для перехода в режим bootloader
  79. */
  80. void HTTP_ConfirmBootPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  81. /**
  82. * @brief Проверка пароля для входа в Web
  83. */
  84. int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
  85. void HTTP_LOGIN(char *bufOut, uint16_t *lenBufOut);
  86. /**
  87. * @brief
  88. */
  89. uint8_t GetParamValue(char *inStr, char *paramName, char *paramValue, uint8_t *paramLen);
  90. uint8_t GetCookieValue(char *inStr, char *paramName, char *paramValue, uint8_t *paramLen);
  91. /**
  92. * @brief
  93. * @retval None
  94. */
  95. uint8_t GetParamValueInEnd(char *inStr, char *paramName, char *paramValue, uint8_t *paramLen);
  96. void ClearParamString(char *inBuf);
  97. /**
  98. * @brief Замена символа в строке
  99. * @param *str - входная строка
  100. * @param sim1 - символ который надо заменить
  101. * @param sim2 - символ на который надо заменить
  102. */
  103. void HTTP_ReplaceSimbol(char *str, char sim1, char sim2);
  104. // -----------------------------------------------------------------------------
  105. //
  106. //
  107. // SSL тесты
  108. //
  109. //
  110. // -----------------------------------------------------------------------------
  111. #ifdef __cplusplus
  112. extern "C" {
  113. #endif
  114. /* Exported types ------------------------------------------------------------*/
  115. typedef struct
  116. {
  117. uint32_t State;
  118. }rng_state;
  119. void Cockie(void);
  120. void getAuthenticatedState(void);
  121. void ssl_server(void *pvParameters);
  122. int RandVal(void* arg);
  123. void HTTP_SendHistory(void);
  124. void HTTP_SendLog(void);
  125. void HTTPS_Init();
  126. void SSL_ReadRoutine(mbedtls_ssl_context *ssl, unsigned char* recvBuf);
  127. char* SSL_ProcessingRoutine(uint16_t* sendLen);
  128. SSL_SERVER_STATE SSL_WriteRoutine(mbedtls_ssl_context *ssl, char *data, int datalen);
  129. void SSL_Send(mbedtls_ssl_context *ssl, char *data, int datalen);
  130. SSL_SERVER_STATE SSL_SendFrames(mbedtls_ssl_context *ssl, char *data, int datalen);
  131. SSL_SERVER_STATE SSL_Write(mbedtls_ssl_context *ssl, char *data, int datalen);
  132. #ifdef __cplusplus
  133. }
  134. #endif