|
@@ -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;
|
|
|
+}
|