http_server.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "lwip/opt.h"
  2. #include "lwip/arch.h"
  3. #include "lwip/api.h"
  4. #include "lwip/tcp.h"
  5. #include "http_server.h"
  6. #include "settings_api.h"
  7. #include "common_config.h"
  8. #include "commands_api.h"
  9. #include "bt_6701_settings.h"
  10. #ifdef PRINTF_STDLIB
  11. #include <stdio.h>
  12. #endif
  13. #ifdef PRINTF_CUSTOM
  14. #include "tinystdio.h"
  15. #endif
  16. #include <string.h>
  17. #include <stdlib.h>
  18. /**
  19. * @brief Обработчик http запросов
  20. */
  21. void TCP_ServerServe(struct netconn *conn)
  22. {
  23. struct netbuf *inbuf;
  24. char* buf;
  25. u16_t buflen;
  26. char value[20];
  27. uint8_t valueLen;
  28. netconn_recv(conn, &inbuf);
  29. if (inbuf != NULL)
  30. {
  31. if (netconn_err(conn) == ERR_OK)
  32. {
  33. netbuf_data(inbuf, (void**)&buf, &buflen);
  34. if (strncmp((char const *)buf, "GET /setMac.cgi", 15) == 0)
  35. {
  36. memset(value, 0, 20);
  37. GetParamValue(buf, "mac=", value, &valueLen);
  38. /* Проверяем флаг ожидания MAC адреса */
  39. if (macWaiting) {
  40. SETTINGS_SetMac(value);
  41. COM_SetTestState(T1OK);
  42. netconn_write(conn, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\nTrue", 47, NETCONN_NOCOPY);
  43. macIsInstalled = true;
  44. printf("SERNO OK\r\n");
  45. }
  46. else
  47. netconn_write(conn, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\nFalse", 48, NETCONN_NOCOPY);
  48. //file = fs_open("/STM32F4x7_files/ST.gif");
  49. //netconn_write(conn, (const unsigned char*)(file->data), (size_t)file->len, NETCONN_NOCOPY);
  50. //fs_close(file);
  51. }
  52. }
  53. }
  54. netconn_close(conn);
  55. netbuf_delete(inbuf);
  56. }
  57. /**
  58. * @brief TCP сервер
  59. */
  60. void vTaskTcpServer(void *param)
  61. {
  62. struct netconn *conn, *newconn;
  63. err_t err;
  64. conn = netconn_new(NETCONN_TCP);
  65. if (conn!= NULL)
  66. {
  67. err = netconn_bind(conn, NULL, 80);
  68. if (err == ERR_OK) {
  69. netconn_listen(conn);
  70. while(1) {
  71. netconn_accept(conn, &newconn);
  72. TCP_ServerServe(newconn);
  73. netconn_delete(newconn);
  74. }
  75. }
  76. }
  77. }
  78. /**
  79. * @brief Поиск значения по имени параметра
  80. * @retval None
  81. */
  82. uint8_t GetParamValue(char *inStr, char *paramName, char *paramValue, uint8_t *paramLen)
  83. {
  84. char *beginValue = 0;
  85. char *endValue = 0;
  86. int len = 0;
  87. char *strPtr = 0;
  88. strPtr = strstr(inStr, paramName);
  89. if (strPtr != 0)
  90. {
  91. beginValue = strpbrk(strPtr,"=");
  92. endValue = strpbrk(strPtr,"&");
  93. if (endValue == 0)
  94. endValue = strpbrk(strPtr," ");
  95. len = endValue - beginValue - 1;
  96. strncpy(paramValue, beginValue + 1, len);
  97. *endValue = '0';
  98. *beginValue = '0';
  99. *paramLen = len;
  100. return 1;
  101. }
  102. else
  103. {
  104. *paramLen = 0;
  105. return 0;
  106. }
  107. }