Przeglądaj źródła

BT6706: fix http_server

balbekova 7 lat temu
rodzic
commit
7868888356
2 zmienionych plików z 65 dodań i 134 usunięć
  1. 58 125
      modules/HTTP_Server/http_server.c
  2. 7 9
      modules/HTTP_Server/http_server.h

+ 58 - 125
modules/HTTP_Server/http_server.c

@@ -53,8 +53,7 @@ char* send_file(char *filename, char *pnonmatch,  struct fs_file *file, uint16_t
 static uint32_t Parse_Header(char *data, uint32_t len, const char *field, uint32_t flen, char *value);
 bool GetFileName(char *inStr, char *fileName, uint8_t *fileNameLen);
 
-
-SET_PAGE_t SET_PAGE = SET_PAGE_IDLE;
+REQ_TYPE_SEND_t HTTPTypeAnswer = COMMON_ANSWER;
 
 #define SEND_BUF_MAX_LEN   2000
 #define RECIVE_BUF_MAX_LEN   1500
@@ -192,9 +191,30 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 		  }
 		  else
 		  {
+			  HTTPTypeAnswer = COMMON_ANSWER;
 			  hs->file = AuthenticatedTrueRoutine(&sendBufLoadLen);
 			  hs->left = sendBufLoadLen;
 			  send_data(pcb, hs);
+			  switch(HTTPTypeAnswer){
+			  case HISTORY_ANSWER:
+				  while(sendBufLoadLen != 0){
+					  hs->file = HTTP_SendLog(&sendBufLoadLen);
+					  hs->left = sendBufLoadLen;
+					  if(sendBufLoadLen == 0)
+						  break;
+					  send_data(pcb, hs);
+				  }
+				  break;
+			  case UPS_HISTORY_ANSWER:
+				  while(sendBufLoadLen != 0){
+					  hs->file = HTTP_SendHistory(&sendBufLoadLen);
+					  hs->left = sendBufLoadLen;
+					  if(sendBufLoadLen == 0)
+						  break;
+					  send_data(pcb, hs);
+				  }
+			  	  break;
+			  }
 			  tcp_sent(pcb, http_sent);
 		  }
 
@@ -231,110 +251,6 @@ static void http_sent_log_err(void * arg, err_t err)
     fLogTransInprog = false;
 }
 
-
-/**
-  * @brief Sent callback for log file transfer (messages as is, not ordered)
-  */
-static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
-{
-  struct http_state *hs;
-  uint32_t nbytes = 0;
-  static bool start = true;
-  (void)len;
-
-  hs = arg;
-
-  if (hs->left > 0)
-  {
-    send_data(pcb, hs);
-  }
-  else
-  {
-	  memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
-      if (log_ptr + FILE_BUF_MAX_LEN_LOG <= log_size) {
-          nbytes = LOG_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN_LOG, start);
-      }
-      else if (log_ptr < log_size) {
-          nbytes = LOG_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
-      }
-      else {
-          nbytes = 0;
-      }
-      log_ptr += nbytes;
-
-      start = false;
-      if (nbytes == 0) {
-          /* File transfer finished. */
-          start = true;
-          close_conn(pcb, hs);
-
-          /* Clear file transfer in progress flag */
-          fLogTransInprog = false;
-
-          return ERR_OK;
-      }
-
-      hs->file = logFileBuf;
-      hs->left = nbytes;
-      send_data(pcb, hs);
-      tcp_sent(pcb, http_sent_log);
-
-  }
-  return ERR_OK;
-}
-
-/**
-  * @brief Sent callback for log file transfer (messages as is, not ordered)
-  */
-static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
-{
-  struct http_state *hs;
-  uint32_t nbytes = 0;
-  static bool start = true;
-  (void)len;
-
-  hs = arg;
-
-  if (hs->left > 0)
-  {
-    send_data(pcb, hs);
-  }
-  else
-  {
-	  memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
-      if (log_ptr + FILE_BUF_MAX_LEN <= log_size) {
-          nbytes = History_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN, start);
-      }
-      else if (log_ptr < log_size) {
-          nbytes = History_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
-      }
-      else {
-          nbytes = 0;
-      }
-      log_ptr += nbytes;
-
-      start = false;
-      if (nbytes == 0) {
-          /* File transfer finished. */
-          start = true;
-          close_conn(pcb, hs);
-
-          /* Clear file transfer in progress flag */
-          fLogTransInprog = false;
-
-          return ERR_OK;
-      }
-
-      hs->file = logFileBuf;
-      hs->left = nbytes;
-      send_data(pcb, hs);
-      tcp_sent(pcb, http_sent_history);
-
-  }
-  return ERR_OK;
-}
-
-
 /**
   * @brief  callback function for handling connection errors
   * @param  arg: pointer to an argument to be passed to callback function
@@ -498,11 +414,11 @@ void HTTP_Init()
     tcp_accept(pcb, http_accept);
 
     for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
-	/* Flush user cookie by random value */
-	sprintf(buf, "%X", (unsigned int)GetRandomNumber());
-	HTTP_SetUserCookie(buf, user_id);
+		/* Flush user cookie by random value */
+		sprintf(buf, "%X", (unsigned int)GetRandomNumber());
+		HTTP_SetUserCookie(buf, user_id);
 
-	/* Create user logout timers */
+		/* Create user logout timers */
 		users[user_id].LogoutTimer =
 				xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
 	  }
@@ -774,6 +690,22 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
     memset(value, 0, len);
   }
   memset(value, 0, len);
+
+#ifdef HARDWARE_BT6706
+  /* Сетевые параметры */
+  GetParamValue(buf, "tn_enabled=", value, &valueLen);
+  SetTelnetEnableStateStr(value);
+	if (strncmp(value, "on", 2) == 0)
+	{
+		memset(value, 0, len);
+
+		GetParamValue(buf, "tn_port=", value, &valueLen);
+		SetTelnetPortStr(value);
+		memset(value, 0, len);
+	}
+	memset(value, 0, len);
+#endif
+
 #ifdef HARDWARE_BT6702
   GetParamValue(buf, "swauth=", value, &valueLen);
   SetAuthEnableStateStr(value);
@@ -1616,7 +1548,6 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     else if (strncmp(receiveBuf, "GET /settings.cgi", 17) == 0) // +
     {
         if (seclevel == 0) {
-            SET_PAGE = SET_PAGE_PAGE2;
             if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, sendLen) == SEND_REQUIRED_YES)
             {
                 *sendLen = strlen(sendBuf);
@@ -1742,8 +1673,8 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     
         if (res == SEND_REQUIRED_FILE)
         {
-            HTTP_SendHistory();
-            return 0;
+        	HTTPTypeAnswer = HISTORY_ANSWER;
+            return HTTP_SendHistory(sendLen);
         }
         else if (res == SEND_REQUIRED_YES) 
         {
@@ -1758,9 +1689,8 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     
         if (res == SEND_REQUIRED_FILE)
         {
-
-            HTTP_SendLog();
-            return 0;
+        	HTTPTypeAnswer = UPS_HISTORY_ANSWER;
+            return HTTP_SendLog(sendLen);
         }
         else if (res == SEND_REQUIRED_YES) 
         {
@@ -1855,7 +1785,7 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
 /**
   * @brief Send callback for log file transfer (messages as is, not ordered)
   */
-void HTTP_SendHistory(void)
+char* HTTP_SendHistory(uint16_t *Len)
 {
 	struct http_state *hs;
     uint32_t nbytes = 0;
@@ -1876,24 +1806,26 @@ void HTTP_SendHistory(void)
 
     start = false;
     
+    *Len = nbytes;
     if (nbytes == 0) {
         // File transfer finished. 
         start = true;
         // Clear file transfer in progress flag 
         fLogTransInprog = false;
-        return;
+        return 0;
     }
-    hs->file = logFileBuf;
-	 hs->left = nbytes;
+    return logFileBuf;
+  //  hs->file = logFileBuf;
+	// hs->left = nbytes;
 	// send_data(pcb, hs);
  //  SSL_SendFrames(&ssl, logFileBuf, nbytes);
-    HTTP_SendHistory();
+  //  HTTP_SendHistory();
 }
 
 /**
   * @brief Sent callback for log file transfer (messages as is, not ordered)
   */
-void HTTP_SendLog(void)
+char* HTTP_SendLog(uint16_t *Len)
 {
     uint32_t nbytes = 0;
     static bool start = true;
@@ -1911,18 +1843,19 @@ void HTTP_SendLog(void)
     log_ptr += nbytes;
 
     start = false;
+    *Len = nbytes;
     if (nbytes == 0) {
         // File transfer finished. 
         start = true;
         // Clear file transfer in progress flag 
         fLogTransInprog = false;
-        return;
+        return 0;
     }
 
  //   SSL_SendFrames(&ssl, logFileBuf, nbytes);
-    HTTP_SendLog();
+  //  HTTP_SendLog();
   
-    return;
+    return logFileBuf;
 }
 
 /**

+ 7 - 9
modules/HTTP_Server/http_server.h

@@ -9,15 +9,13 @@
 #define SSL_TASK_PRIO   ( configMAX_PRIORITIES - 3 )
 #define FRAME_SIZE      (1000)
 
-
 typedef enum
 {
-  SET_PAGE_IDLE = 0,
-  SET_PAGE_PAGE1,
-  SET_PAGE_PAGE2,
-  SET_PAGE_PAGE3,
-  SET_PAGE_PAGE4,
-} SET_PAGE_t;
+	COMMON_ANSWER = 0,
+	HISTORY_ANSWER,
+	UPS_HISTORY_ANSWER
+
+} REQ_TYPE_SEND_t;
 
 typedef enum
 {
@@ -134,8 +132,8 @@ void Cockie(void);
 void getAuthenticatedState(void);
 
 
-void HTTP_SendHistory(void);
-void HTTP_SendLog(void);
+char* HTTP_SendHistory(uint16_t *Len);
+char* HTTP_SendLog(uint16_t *Len);
 char* AuthenticatedFalseRoutine(uint16_t* sendLen);
 char* AuthenticatedTrueRoutine(uint16_t* sendLen);