Răsfoiți Sursa

Портирование веба под ssl. В процессе.

TelenkovDmitry 7 ani în urmă
părinte
comite
a9d189d5f9

+ 518 - 130
modules/HTTP_Server/http_server.c

@@ -2102,155 +2102,543 @@ static int my_set_session(ssl_context *ssl)
   */
 void ssl_server(void *pvParameters)
 {
-  int ret, len;
-  int listen_fd;
-  int client_fd;
-  char buf[1024];
-  struct fs_file file = {0, 0};
+    int ret, len;
+    int listen_fd;
+    int client_fd;
+    char buf[1024];
+    
+    char CookieBuf[50];
+    char *CookiePtr = NULL;
+    char name[MAX_WEB_COOKIE_LEN];
+    char id[MAX_WEB_COOKIE_LEN];
+    uint8_t nameLen = 0, idLen = 0;
+    
+    struct fs_file file = {0, 0};
  
-  memset(&srvcert, 0, sizeof(x509_cert));
+    memset(&srvcert, 0, sizeof(x509_cert));
     
-  /* 1. Load the certificates and private RSA key */
-  //printf("\n\r Loading the server certificates and key...");
+    // 1. Load the certificates and private RSA key 
+    //printf("\n\r Loading the server certificates and key...");
     
-  /*
-   * This demonstration program uses embedded test certificates.
-   * Instead, you may want to use x509parse_crtfile() to read the
-   * server and CA certificates, as well as x509parse_keyfile().
-  */
-  ret = x509parse_crt(&srvcert, (unsigned char *) test_srv_crt, strlen(test_srv_crt));
-  if(ret != 0)
-  {
-    printf(" failed\n  !  x509parse_crt returned %d\n\r", ret);
-    goto exit;
-  }
-  ret = x509parse_crt(&srvcert, (unsigned char *) test_ca_crt, strlen(test_ca_crt));
-  if(ret != 0)
-  {
-    printf(" failed\n  !  x509parse_crt returned %d\n\r", ret);
-    goto exit;
-  }
-  rsa_init( &rsa, RSA_PKCS_V15, 0 );
-  ret =  x509parse_key(&rsa, (unsigned char *) test_srv_key, strlen(test_srv_key), NULL, 0);
-  if( ret != 0 )
-  {
-    printf(" failed\n  !  x509parse_key returned %d\n\r", ret);
-    goto exit;
-  }
-  //printf(" ok\n\r");
-
-  /* 2. Setup the listening TCP socket */
-  //printf("\n\r Bind to https port ...");
   
-  /* Bind the connection to https port : 443 */ 
-  ret = net_bind(&listen_fd, NULL, 443); 
-  if(ret != 0)
-  {
-    printf(" failed\n  ! net_bind returned %d\n\r", ret);
-    goto exit;
-  }
-  //printf(" ok\n\r");
-    
-  /* 3. Wait until a client connects */
-  for(;;)
-  {
-    //printf("\n\r Waiting for a remote connection ...");
-    ret = net_accept(listen_fd, &client_fd, NULL);
+    // This demonstration program uses embedded test certificates.
+    // Instead, you may want to use x509parse_crtfile() to read the
+    // server and CA certificates, as well as x509parse_keyfile().
+ 
+    ret = x509parse_crt(&srvcert, (unsigned char *) test_srv_crt, strlen(test_srv_crt));
     if(ret != 0)
     {
-      //printf(" failed\n  ! net_accept returned %d\n\n", ret);
-      goto exit;
+        //printf(" failed\n  !  x509parse_crt returned %d\n\r", ret);
+        goto exit;
     }
-    //printf(" ok\n");
-
-    // 4. Initialize the session data 
-    //printf("\n\r Setting up the RNG and SSL data....");
-    
-    /* Initialize the SSL context */
-    ret = ssl_init(&ssl);
+    ret = x509parse_crt(&srvcert, (unsigned char *) test_ca_crt, strlen(test_ca_crt));
     if(ret != 0)
     {
-      // SSL initialization failed 
-      printf(" failed\n  ! ssl_init returned %d\n\n", ret);
-      goto accept;
+        //printf(" failed\n  !  x509parse_crt returned %d\n\r", ret);
+        goto exit;
     }
-    //printf(" ok\n");
-
-    // Set the current session as SSL server 
-    ssl_set_endpoint(&ssl, SSL_IS_SERVER);
-    // No certificate verification 
-    ssl_set_authmode(&ssl, SSL_VERIFY_NONE);
-    // Set the random number generator callback function 
-    ssl_set_rng(&ssl, RandVal, &rngs); 
-    // Set the debug callback function 
-    ssl_set_dbg(&ssl, my_debug, stdout);
-    // Set read and write callback functions 
-    ssl_set_bio(&ssl, net_recv, &client_fd, net_send, &client_fd);
-    // Set the session callback functions 
-    ssl_set_scb(&ssl, my_get_session, my_set_session);
-    // The list of ciphersuites to be used in this session 
-    ssl_set_ciphersuites(&ssl, my_ciphersuites);
-    // Set the session resuming flag, timeout and session context 
-    ssl_set_session(&ssl, 1, 0, &ssn);
-    memset(&ssn, 0, sizeof(ssl_session));
-    // Set the data required to verify peer certificate 
-    ssl_set_ca_chain(&ssl, srvcert.next, NULL, NULL);
-    // Set own certificate and private key 
-    ssl_set_own_cert(&ssl, &srvcert, &rsa);
-    // Set the Diffie-Hellman public P and G values 
-    ssl_set_dh_param(&ssl, my_dhm_P, my_dhm_G);
-
-    // 5. Handshake protocol 
-    //printf("\n\r Performing the SSL/TLS handshake...");
-
-    // Perform the SSL handshake protocol 
-    while((ret = ssl_handshake(&ssl)) != 0)
+    rsa_init( &rsa, RSA_PKCS_V15, 0 );
+    ret =  x509parse_key(&rsa, (unsigned char *) test_srv_key, strlen(test_srv_key), NULL, 0);
+    if( ret != 0 )
     {
-      if(ret != POLARSSL_ERR_NET_WANT_READ && ret != POLARSSL_ERR_NET_WANT_WRITE)
-      {
-        //printf(" failed\n  ! ssl_handshake returned %d\n\n", ret);
-        goto accept;
-      }
+        //printf(" failed\n  !  x509parse_key returned %d\n\r", ret);
+        goto exit;
     }
-    //printf(" ok\n");
-
-    /* 6. Read the HTTP Request */
-    //printf("\n\r <= Read from client :");
-    do
+    
+    // 2. Setup the listening TCP socket 
+    //printf("\n\r Bind to https port ...");
+  
+    // Bind the connection to https port : 443 
+    ret = net_bind(&listen_fd, NULL, 443); 
+    if(ret != 0)
     {
-      len = sizeof(buf) - 1;
-      memset(buf, 0, sizeof(buf));
-
-      /* Read decrypted application data */
-      ret = ssl_read(&ssl, (unsigned char*)buf, len);
+        //printf(" failed\n  ! net_bind returned %d\n\r", ret);
+        goto exit;
+    }
+    //printf(" ok\n\r");
+    
+    // 3. Wait until a client connects 
+    for(;;)
+    {
+        //printf("\n\r Waiting for a remote connection ...");
+        ret = net_accept(listen_fd, &client_fd, NULL);
+        if(ret != 0)
+        {
+            //printf(" failed\n  ! net_accept returned %d\n\n", ret);
+            goto exit;
+        }
+        //printf(" ok\n");
 
-      if(ret == POLARSSL_ERR_NET_WANT_READ || ret == POLARSSL_ERR_NET_WANT_WRITE)
-        continue;
+        // 4. Initialize the session data 
+        //printf("\n\r Setting up the RNG and SSL data....");
+    
+        // Initialize the SSL context 
+        ret = ssl_init(&ssl);
+        if(ret != 0)
+        {
+            //printf(" failed\n  ! ssl_init returned %d\n\n", ret);
+            goto accept;
+        }
+        //printf(" ok\n");
+
+        // Set the current session as SSL server 
+        ssl_set_endpoint(&ssl, SSL_IS_SERVER);
+        // No certificate verification 
+        ssl_set_authmode(&ssl, SSL_VERIFY_NONE);
+        // Set the random number generator callback function 
+        ssl_set_rng(&ssl, RandVal, &rngs); 
+        // Set the debug callback function 
+        //ssl_set_dbg(&ssl, my_debug, stdout);
+        // Set read and write callback functions 
+        ssl_set_bio(&ssl, net_recv, &client_fd, net_send, &client_fd);
+        // Set the session callback functions 
+        ssl_set_scb(&ssl, my_get_session, my_set_session);
+        // The list of ciphersuites to be used in this session 
+        ssl_set_ciphersuites(&ssl, my_ciphersuites);
+        // Set the session resuming flag, timeout and session context 
+        ssl_set_session(&ssl, 1, 0, &ssn);
+        memset(&ssn, 0, sizeof(ssl_session));
+        // Set the data required to verify peer certificate 
+        ssl_set_ca_chain(&ssl, srvcert.next, NULL, NULL);
+        // Set own certificate and private key 
+        ssl_set_own_cert(&ssl, &srvcert, &rsa);
+        // Set the Diffie-Hellman public P and G values 
+        ssl_set_dh_param(&ssl, my_dhm_P, my_dhm_G);
+
+        // 5. Handshake protocol 
+        //printf("\n\r Performing the SSL/TLS handshake...");
+
+        // Perform the SSL handshake protocol 
+        while((ret = ssl_handshake(&ssl)) != 0)
+        {
+            if(ret != POLARSSL_ERR_NET_WANT_READ && ret != POLARSSL_ERR_NET_WANT_WRITE)
+            {
+                //printf(" failed\n  ! ssl_handshake returned %d\n\n", ret);
+                goto accept;
+            }
+        }
+        //printf(" ok\n");
 
-      if(ret <= 0)
-      {
-        switch(ret)
+        // 6. Read the HTTP Request 
+        //printf("\n\r <= Read from client :");
+        do
         {
-          case POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY:
-          printf("\n\r connection was closed \n");
-            break;
+            len = sizeof(buf) - 1;
+            memset(receiveBuf, 0, RECIVE_BUF_MAX_LEN);
 
-          case POLARSSL_ERR_NET_CONN_RESET:
-          printf("\n\r connection was reset by peer\n");
-            break;
+            // Read decrypted application data 
+            ret = ssl_read(&ssl, (unsigned char*)receiveBuf, receivedBufLen);
 
-          default:
-          printf("\n\r ssl_read returned %d\n", ret);
-            break;
-        }
-        break;
-      }
-      len = ret;
-      // Display the length of read data 
-      //printf("\n\r Successfully read %d bytes from client \n\r",len);
-    }while(0);
+            if(ret == POLARSSL_ERR_NET_WANT_READ || ret == POLARSSL_ERR_NET_WANT_WRITE)
+                continue;
+
+            if(ret <= 0)
+            {
+                switch(ret)
+                {
+                case POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY:
+                    printf("\n\r connection was closed \n");
+                break;
+
+                case POLARSSL_ERR_NET_CONN_RESET:
+                    printf("\n\r connection was reset by peer\n");
+                break;
+
+                default:
+                    printf("\n\r ssl_read returned %d\n", ret);
+                break;
+                }
+                break;
+            }
+            len = ret;
+            // Display the length of read data 
+            //printf("\n\r Successfully read %d bytes from client \n\r",len);
+        }while(0);
 
     // -------------------------------------------------------------------------
+        
+        //receivedBufLen = p->tot_len;
+        //memcpy(receiveBuf, p->payload , receivedBufLen);
+
+        receiveBuf[receivedBufLen] = '\0';
+        // printf("receive %s \r\n", receiveBuf);
+        // Get cookie "uname" value 
+        CookiePtr = strstr(receiveBuf, "uname=");
+        strncpy(CookieBuf, CookiePtr, 50);
+        //printf("********CookieBuf1= %s\r\n", CookieBuf);
+        memset(name, 0, MAX_WEB_COOKIE_LEN);
+        GetCookieValue(CookieBuf, "uname=", name, &nameLen);
+        //printf("********CookieBuf2= %s\r\n", CookieBuf);
+        //printf("********uname= %s\r\n", name);
+
+        // Get cookie "id" value 
+        CookiePtr = strstr(receiveBuf, "id=");
+        strncpy(CookieBuf, CookiePtr, 50);
+        //printf("********CookieBuf1= %s\r\n", CookieBuf);
+        memset(id, 0, MAX_WEB_COOKIE_LEN);
+        GetCookieValue(CookieBuf, "id=", id, &idLen);
+        //printf("********CookieBuf2= %s\r\n", CookieBuf);
+        //printf("********id= %s\r\n", id);
+
+
+        // Id of currently logged-in user 
+        uint8_t user_id;
+
+        // Level of currently logged-in user 
+        seclevel = 0xFF;
+        for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
+            HTTP_GetUserCookie(user_id, CookieBuf, &idLen);
+            if (strncmp(id, CookieBuf, idLen) == 0 ) {
+                GetUserLevelInt(user_id, &seclevel);
+                Authenticated = true;
+                break;
+            }
+            Authenticated = false;
+            seclevel = 0xFF;
+        }
+        
+        if ( Authenticated == false && sSettings.sRADIUS.Auth_enable == false)
+        {
+            HTTP_LOGIN(sendBuf, &sendBufLoadLen);
+            ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+        }
+        else if ( Authenticated == false )//&& sSettings.sRADIUS.Auth_enable == true
+        {
+            if (strncmp(receiveBuf, "GET /main.css", 13) == 0) // +
+            {
+                fs_open("/main.css", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /rotek.png", 14) == 0) // +
+            {
+                fs_open("/rotek.png", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /favicon.ico", 16) == 0) // ?
+            {
+                fs_open("/favicon.ico", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /role.js", 12) == 0)
+            {
+                fs_open("/role.js", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if ((strncmp(receiveBuf, "POST /login.cgi", 15) == 0) || (log_post_reqn > 0))
+            {
+                uint32_t i, offset = 0, req_data_received = 0;
+                
+                post_data_count = Parse_Content_Length(receiveBuf, receivedBufLen);
+			  
+                if (post_data_count < MAX_POST_REQ_LEN) 
+                {
+                    memset(post_req_data, 0, MAX_POST_REQ_LEN);
+					
+					for (i = 0; i < receivedBufLen; i++)
+					{
+						if (strncmp ((char*)(receiveBuf+i), "\r\n\r\n", 4) == 0)
+						{
+							offset = i+4;
+							break;
+						}
+					}
+
+					req_data_received = receivedBufLen - offset;
+					
+					if (offset != 0) 
+                    {
+                        if (req_data_received < post_data_count) 
+                        {
+                            snprintf(post_req_data, req_data_received, "%s", receiveBuf);
+                            post_data_count -= req_data_received;
+                        }
+                        else 
+                        {
+                            strncat(post_req_data, (char *)(receiveBuf + offset), post_data_count);
+						
+                            if (HTTP_ConfirmWebPwd(post_req_data, sendBuf, strlen(post_req_data), &sendBufLoadLen) == SEND_REQUIRED_YES) 
+                            {
+                                ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+                            }
+                            else 
+                            {
+                                fs_open("/login.html", &file);
+                                ssl_sendframes(&ssl, file.data, file.len);
+                            }
+                            post_data_count = 0;
+                            log_post_reqn = 0;
+                        }
+					}
+					/* request was fragmented before "\r\n\r\n" */
+					else 
+                    {
+						log_post_reqn++;
+						/* wait max 2 requests */
+						if (log_post_reqn > 1) 
+                        {
+							/* Redirect to login page */
+							fs_open("/login.html", &file);
+                            ssl_sendframes(&ssl, file.data, file.len);
+							/* End reqest */
+							post_data_count = 0;
+							log_post_reqn = 0;
+						}
+					}
+                }
+                else 
+                {
+                    printf("Too long POST request!\r\n");
+                    /* Ignore request */
+                    post_data_count = 0;
+                    log_post_reqn = 0;
+
+                    /* Redirect to login page */
+                    fs_open("/login.html", &file);
+                    ssl_sendframes(&ssl, file.data, file.len);
+                }
+            }
+			else if (post_data_count > 0)
+			{
+                strncat(post_req_data, receiveBuf, post_data_count);
+
+                if (HTTP_ConfirmWebPwd(post_req_data, sendBuf, strlen(post_req_data), &sendBufLoadLen) == SEND_REQUIRED_YES) 
+                {
+                    ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+                }
+				else 
+                {
+					fs_open("/login.html", &file);
+                    ssl_sendframes(&ssl, file.data, file.len);
+				}
+                post_data_count = 0;
+				log_post_reqn = 0;
+			}
+            else
+            {
+                fs_open("/login.html", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+			}
+        }
+        else if ( Authenticated == true ) 
+        {
+            if (strncmp(receiveBuf, "GET /main.css", 13) == 0) // +
+            {
+                fs_open("/main.css", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /rotek.png", 14) == 0) // +
+            {
+                fs_open("/rotek.png", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /favicon.ico", 16) == 0) // ?                 
+            {                                                                     
+                fs_open("/favicon.ico", &file);                                     
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /main.js", 12) == 0) // +
+            {
+                fs_open("/main.js", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /role.js", 12) == 0)
+            {
+                fs_open("/role.js", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /settings.html", 18) == 0) // +
+            {
+                HTTP_UpdateUserLoginTime(user_id);
+                if (seclevel == 0)
+                {
+                    fs_open("/settings.html", &file);
+                    ssl_sendframes(&ssl, file.data, file.len);
+                }
+                else 
+                {
+                    fs_open("/index.html", &file);
+                    ssl_sendframes(&ssl, file.data, file.len);
+				}
+            }
+            else if (strncmp(receiveBuf, "GET /info.html", 14) == 0) // +
+            {
+                HTTP_UpdateUserLoginTime(user_id);
+                fs_open("/info.html", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /history.html", 17) == 0)
+            {
+                HTTP_UpdateUserLoginTime(user_id);
+                fs_open("/history.html", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /ups_history.html", 21) == 0)
+            {
+                HTTP_UpdateUserLoginTime(user_id);
+                fs_open("/ups_history.html", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            else if (strncmp(receiveBuf, "GET /getJson.cgi", 16) == 0) // +
+            {
+                HTTP_GetParamsPage1(sendBuf);
+                ssl_sendframes(&ssl, sendBuf, strlen(sendBuf));
+            }	  
+            else if (strncmp(receiveBuf, "GET /settings.cgi", 17) == 0) // +
+            {
+                SET_PAGE = SET_PAGE_PAGE2;
+		
+                if (seclevel == 0) 
+                {
+                    if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen) == SEND_REQUIRED_YES)
+                    {
+                        ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+                    }
+                }
+            }
+            else if (strncmp(receiveBuf, "POST /settings.cgi", 18) == 0)
+            {
+                strncat(receiveBuf,  " ", 1);
+                HTTP_SetSettings(receiveBuf, receivedBufLen);
+                memset(sendBuf, 0, SEND_BUF_MAX_LEN);
+
+                strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
+                strcat(sendBuf, "\r\n\r\n");
+                strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/settings.html\"/></head></html>\r\n\r\n");
+
+                sendBufLoadLen = strlen(sendBuf);
+                
+                ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+            } 
+            else if (strncmp(receiveBuf, "GET /info.cgi", 13) == 0) // +
+            {
+                if (HTTP_InfoPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen) == SEND_REQUIRED_YES)
+                {
+                    ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+                }
+            }
+            else if (strncmp(receiveBuf, "POST /info.cgi", 14) == 0)
+            {
+                strncat(receiveBuf,  " ", 1);
+                HTTP_SetInfo(receiveBuf, receivedBufLen);
+                memset(sendBuf, 0, SEND_BUF_MAX_LEN);
+
+                strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
+                strcat(sendBuf, "\r\n\r\n");
+                strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/info.html\"/></head></html>\r\n\r\n");
+
+                sendBufLoadLen = strlen(sendBuf);
+          
+                ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+            }
+            else if (strncmp(receiveBuf, "GET /history.cgi", 16) == 0)
+            {
+                int res;
+
+                res = HTTP_HistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+
+                if (res == SEND_REQUIRED_FILE)
+                {
+                    hs->file = sendBuf;
+                    hs->left = sendBufLoadLen;
+                    send_data(pcb, hs);
+                    tcp_sent(pcb, http_sent_history);
+                    tcp_err(pcb, http_sent_log_err);
+                }
+                else if (res == SEND_REQUIRED_YES) 
+                {
+                    hs->file = sendBuf;
+                    hs->left = sendBufLoadLen;
+                    send_data(pcb, hs);
+                    tcp_sent(pcb, http_sent);
+                }
+            }
+            else if (strncmp(receiveBuf, "GET /ups_history.cgi", 19) == 0)
+            {
+                int res;
+
+                res = HTTP_UpsHistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+
+                if (res == SEND_REQUIRED_FILE)
+                {
+                    hs->file = sendBuf;
+                    hs->left = sendBufLoadLen;
+                    send_data(pcb, hs);
+                    tcp_sent(pcb, http_sent_log);
+                    tcp_err(pcb, http_sent_log_err);
+                }
+                else if (res == SEND_REQUIRED_YES) 
+                {
+                    hs->file = sendBuf;
+                    hs->left = sendBufLoadLen;
+                    send_data(pcb, hs);
+                    tcp_sent(pcb, http_sent);
+                }
+            }
+            /* Тест  АКБ ИБП */
+            else if (strncmp(receiveBuf, "POST /bat_test.cgi", 18) == 0)
+            {
+                HTTP_UPSTest(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+                ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+            }
+            /* Выключение ИБП */
+            else if (strncmp(receiveBuf, "POST /ups_power.cgi", 19) == 0)
+            {
+                HTTP_UPSshutdown(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+                ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+            }
+            /* Сброс настроек и сохранине */
+            else if (strncmp(receiveBuf, "GET /reset.cgi", 14) == 0)
+            {
+                HTTP_ResetSettings();
+                HTTP_SaveSettings();
+
+                fs_open("/settings.html", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            /* Перезагрузка контроллера */
+            else if (strncmp(receiveBuf, "GET /reboot.cgi", 15) == 0)
+            {
+                HTTP_Reboot();
+            }
+            /* Подтверждение новых сетевых настроек */
+            else if (strncmp(receiveBuf, "GET /confirm.cgi", 16) == 0)
+            {
+                SetWebReinitFlag(false);
+                SetConfirmWebParamsFlag();
+
+                fs_open("/index.html", &file);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            /* Проверка пароля, переход в bootloader */
+            else if (strncmp(receiveBuf, "GET /fw_update.cgi", 18) == 0)
+            {
+                HTTP_ConfirmBootPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+                ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+            }
+            /* Смена пароля пользователя */
+            else if (strncmp(receiveBuf, "POST /changepwd.cgi", 19) == 0)
+            {
+                HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+            // На производстве
+            else if (strncmp(receiveBuf, "GET /setProdate.cgi", 19) == 0)
+            {
+                HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
+                ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
+            }
+            else
+            {
+                HTTP_UpdateUserLoginTime(user_id);
+                fs_open("/index.html", &file); // +
+                ssl_sendframes(&ssl, file.data, file.len);
+            }
+        }
+    //}
+        
+            
+            
+        
         /*
         if (strncmp(buf, "GET /main.css", 13) == 0) // +
         {
@@ -2374,7 +2762,7 @@ void ssl_server(void *pvParameters)
     //printf("\n\r => Write to client :\n\r");
 
     // Send the dynamic html page 
-    ssl_DynPage(&ssl);
+    //ssl_DynPage(&ssl);
         
     // Close the connection 
     ssl_close_notify(&ssl);

+ 1 - 1
projects/iar/bt-670x.ewp

@@ -644,7 +644,7 @@
         </option>
         <option>
           <name>OOCObjCopyEnable</name>
-          <state>0</state>
+          <state>1</state>
         </option>
       </data>
     </settings>

+ 2 - 2
thirdparty/PolarSSL/include/polarssl/bignum.h

@@ -230,7 +230,7 @@ int mpi_write_string( const mpi *X, int radix, char *s, size_t *slen );
  *
  * \return         0 if successful, or an POLARSSL_ERR_MPI_XXX error code
  */
-int mpi_read_file( mpi *X, int radix, FILE *fin );
+//int mpi_read_file( mpi *X, int radix, FILE *fin );
 
 /**
  * \brief          Write X into an opened file, or stdout if fout is NULL
@@ -244,7 +244,7 @@ int mpi_read_file( mpi *X, int radix, FILE *fin );
  *
  * \note           Set fout == NULL to print X on the console.
  */
-int mpi_write_file( const char *p, const mpi *X, int radix, FILE *fout );
+//int mpi_write_file( const char *p, const mpi *X, int radix, FILE *fout );
 
 /**
  * \brief          Import X from unsigned binary data, big endian