Quellcode durchsuchen

Тестирование web server

TelenkovDmitry vor 7 Jahren
Ursprung
Commit
ef47d78ffa
2 geänderte Dateien mit 102 neuen und 35 gelöschten Zeilen
  1. 99 34
      modules/HTTP_Server/http_server.c
  2. 3 1
      modules/settings_api.c

+ 99 - 34
modules/HTTP_Server/http_server.c

@@ -2877,9 +2877,7 @@ void ssl_server(void *pvParameters)
 {
   SSL_SERVER_STATE ssl_state = SSL_ACCEPT;
   char* sendPtr;
-  uint32_t sendBufSize;
-  int ret, len;
-  struct fs_file file = {0, 0};
+  int ret;
   
 #ifdef MBEDTLS_MEMORY_BUFFER_ALLOC_C
   mbedtls_memory_buffer_alloc_init(malloc_buf, sizeof(malloc_buf));
@@ -3122,25 +3120,20 @@ char* SSL_ProcessingRoutine(uint16_t* sendLen)
 {  
   Cockie();
   getAuthenticatedState();
-/*  
-  fs_open("/main.css", &file);
-  *sendLen = file.len;
-  return file.data;
-*/  
-  
-
-#if 1
+ 
   if ( Authenticated == false && sSettings.sRADIUS.Auth_enable == false)
   { 	
     HTTP_LOGIN(sendBuf, sendLen);  
     return sendBuf;
   }
-  else if ( Authenticated == false )//&& sSettings.sRADIUS.Auth_enable == true
+  else if (!Authenticated)//&& sSettings.sRADIUS.Auth_enable == true
   {
     return AuthenticatedFalseRoutine(sendLen);
   }
-#endif  
-
+  else 
+  {
+    return AuthenticatedTrueRoutine(sendLen);
+  }  
 }
 
 //
@@ -3210,7 +3203,7 @@ char* AuthenticatedFalseRoutine(uint16_t* sendLen)
                         //ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
                         return sendBuf;
                     } 
-                        post_data_count = 0;
+                    post_data_count = 0;
                 }
                 else
                 {
@@ -3287,7 +3280,8 @@ char* AuthenticatedFalseRoutine(uint16_t* sendLen)
 char* AuthenticatedTrueRoutine(uint16_t* sendLen)
 {
     char *DataOffset;
-  
+    char *ptr;
+    
     if (strncmp(receiveBuf, "GET /main.css", 13) == 0) // +
     {
         fs_open("/main.css", &file);
@@ -3366,6 +3360,7 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
                 return sendBuf;
             }
         }
+        return 0;
     }
     else if (strncmp(receiveBuf, "POST /settings.cgi", 18) == 0)
     {
@@ -3414,9 +3409,9 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
                 sendBufLoadLen = strlen(sendBuf);
                 *sendLen = sendBufLoadLen;
                 return sendBuf;
-
             }
         }  
+        return 0;
     } 
     else if (strncmp(receiveBuf, "POST /srv_crt_upload.cgi", 24) == 0)
     {
@@ -3461,7 +3456,7 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
 
         while(TotalData < size)
         {
-            ssl_server_read();
+            SSL_ReadRoutine(&ssl, (unsigned char*)receiveBuf);
             receiveBuf[receivedBufLen] = '\0';
             //printf("receive3 %s \r\n", receiveBuf);
             strncat(sendBuf,  receiveBuf, receivedBufLen);
@@ -3565,11 +3560,11 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     
         if (res == SEND_REQUIRED_FILE)
         {
-            ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
-            //send_data(pcb, hs);
-            //tcp_sent(pcb, http_sent_history);
+            if (SSL_SendFrames(&ssl, sendBuf, sendBufLoadLen) == SSL_ERROR)
+                return 0;
+            
             HTTP_SendHistory();
-            //tcp_err(pcb, http_sent_log_err);
+            return 0;
         }
         else if (res == SEND_REQUIRED_YES) 
         {
@@ -3584,12 +3579,11 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     
         if (res == SEND_REQUIRED_FILE)
         {
-            ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
-            
-            //send_data(pcb, hs);
-            //tcp_sent(pcb, http_sent_log);
+            if (SSL_SendFrames(&ssl, sendBuf, sendBufLoadLen) == SSL_ERROR)
+                return 0;
+
             HTTP_SendLog();
-            //tcp_err(pcb, http_sent_log_err);
+            return 0;
         }
         else if (res == SEND_REQUIRED_YES) 
         {
@@ -3637,19 +3631,19 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
     else if (strncmp(receiveBuf, "GET /fw_update.cgi", 18) == 0)
     {
         HTTP_ConfirmBootPwd(receiveBuf, sendBuf, receivedBufLen, sendLen);
-        ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+        return sendBuf;
     }
     /* Смена пароля пользователя */
     else if (strncmp(receiveBuf, "GET /changepwd.cgi", 18) == 0)
     {
-        HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
-        ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+        HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, sendLen);
+        return sendBuf;
     }
     // На производстве
     else if (strncmp(receiveBuf, "GET /setProdate.cgi", 19) == 0)
     {
-        HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
-        ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+        HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, sendLen);
+        return sendBuf;
     }
     else
     {
@@ -3658,6 +3652,8 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
         *sendLen = file.len;
         return file.data;
     }
+    
+    return 0;
 }
 
 
@@ -3695,8 +3691,7 @@ SSL_SERVER_STATE SSL_SendFrames(mbedtls_ssl_context *ssl, char *data, int datale
     if( retClose != MBEDTLS_ERR_SSL_WANT_READ && retClose != MBEDTLS_ERR_SSL_WANT_WRITE )
     {
       mbedtls_printf( " failed\r\n  ! mbedtls_ssl_close_notify returned %d\r\n", ret );
-      // TODO вернуть другой статус
-      return SSL_ACCEPT;
+      return SSL_ERROR;
     }
   }
 
@@ -3746,3 +3741,73 @@ SSL_SERVER_STATE SSL_Write(mbedtls_ssl_context *ssl, char *data, int datalen)
   ret = 0;
   return SSL_ACCEPT;
 }
+
+/**
+  * @brief Send callback for log file transfer (messages as is, not ordered)
+  */
+void HTTP_SendHistory(void)
+{
+    uint32_t nbytes = 0;
+    static bool start = true;
+
+    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;
+        // Clear file transfer in progress flag 
+        fLogTransInprog = false;
+        return;
+    }
+
+    SSL_SendFrames(&ssl, logFileBuf, nbytes);
+    HTTP_SendHistory();
+}
+
+/**
+  * @brief Sent callback for log file transfer (messages as is, not ordered)
+  */
+void HTTP_SendLog(void)
+{
+    uint32_t nbytes = 0;
+    static bool start = true;
+
+	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;
+        // Clear file transfer in progress flag 
+        fLogTransInprog = false;
+        return;
+    }
+
+    SSL_SendFrames(&ssl, logFileBuf, nbytes);
+    HTTP_SendLog();
+  
+    return;
+}

+ 3 - 1
modules/settings_api.c

@@ -192,7 +192,9 @@ void SETTINGS_SetINOUTSDef(void)
 void SETTINGS_SetRADIUSDef(void)
 {
   sSettings.sRADIUS.Auth_enable = true;
-  sSettings.sRADIUS.RDSEnable = false;
+  //sSettings.sRADIUS.RDSEnable = false;
+  // todo вернуть на значение false
+  sSettings.sRADIUS.RDSEnable = true;
   strcpy(sSettings.sRADIUS.ServerIP, "0.0.0.0");
   sSettings.sRADIUS.port = 1812;
   sSettings.sRADIUS.key_access = 123;