|  | @@ -87,6 +87,7 @@ bool Authenticated = false;
 | 
											
												
													
														|  |  uint8_t seclevel = 0xFF;
 |  |  uint8_t seclevel = 0xFF;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  static volatile uint32_t DataFlag2=0;
 |  |  static volatile uint32_t DataFlag2=0;
 | 
											
												
													
														|  | 
 |  | +static volatile uint32_t DataFlag=0;
 | 
											
												
													
														|  |  static volatile uint32_t size =0;
 |  |  static volatile uint32_t size =0;
 | 
											
												
													
														|  |  static uint32_t TotalReceived=0;
 |  |  static uint32_t TotalReceived=0;
 | 
											
												
													
														|  |  static volatile uint32_t TotalData=0;
 |  |  static volatile uint32_t TotalData=0;
 | 
											
										
											
												
													
														|  | @@ -187,7 +188,7 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 | 
											
												
													
														|  |  	   /* Id of currently logged-in user */
 |  |  	   /* Id of currently logged-in user */
 | 
											
												
													
														|  |  	   uint8_t user_id;
 |  |  	   uint8_t user_id;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	   if(DataFlag2 == 0){
 |  | 
 | 
											
												
													
														|  | 
 |  | +	   if( DataFlag == 0 && DataFlag2 == 0 ){
 | 
											
												
													
														|  |  	   /* Level of currently logged-in user */
 |  |  	   /* Level of currently logged-in user */
 | 
											
												
													
														|  |  	   seclevel = 0xFF;
 |  |  	   seclevel = 0xFF;
 | 
											
												
													
														|  |  	   for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
 |  |  	   for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
 | 
											
										
											
												
													
														|  | @@ -201,7 +202,9 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 | 
											
												
													
														|  |  		   seclevel = 0xFF;
 |  |  		   seclevel = 0xFF;
 | 
											
												
													
														|  |  	   }
 |  |  	   }
 | 
											
												
													
														|  |  	   }
 |  |  	   }
 | 
											
												
													
														|  | -	   if(DataFlag2 >= 1)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	   if (DataFlag >= 1)
 | 
											
												
													
														|  | 
 |  | +		 Authenticated = true;
 | 
											
												
													
														|  | 
 |  | +	   else if(DataFlag2 >= 1)
 | 
											
												
													
														|  |  	      Authenticated = true;
 |  |  	      Authenticated = true;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	   if ( Authenticated == false && sSettings.sRADIUS.Auth_enable == false)
 |  |  	   if ( Authenticated == false && sSettings.sRADIUS.Auth_enable == false)
 | 
											
										
											
												
													
														|  | @@ -592,6 +595,7 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 | 
											
												
													
														|  |  				 HTTP_SetSettings(sendBuf, strlen(&sendBuf));
 |  |  				 HTTP_SetSettings(sendBuf, strlen(&sendBuf));
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  				 DataFlag2=0;
 |  |  				 DataFlag2=0;
 | 
											
												
													
														|  | 
 |  | +				 BrowserFlag = 0;
 | 
											
												
													
														|  |  				 memset(sendBuf, 0, size);
 |  |  				 memset(sendBuf, 0, size);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  				 strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
 |  |  				 strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
 | 
											
										
											
												
													
														|  | @@ -638,22 +642,116 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 | 
											
												
													
														|  |  			  tcp_sent(pcb, http_sent);
 |  |  			  tcp_sent(pcb, http_sent);
 | 
											
												
													
														|  |  			}*/
 |  |  			}*/
 | 
											
												
													
														|  |  	  }
 |  |  	  }
 | 
											
												
													
														|  | -	  else if (strncmp(data, "POST /info.cgi", 14) == 0)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	  else if (strncmp(data, "POST /info.cgi", 14) == 0 || (DataFlag >= 1))
 | 
											
												
													
														|  |  	  {
 |  |  	  {
 | 
											
												
													
														|  | -		  //strncat(&receiveBuf,  " ", 1);
 |  | 
 | 
											
												
													
														|  | -          strncat(receiveBuf,  " ", 1);
 |  | 
 | 
											
												
													
														|  | -		  HTTP_SetInfo(receiveBuf, receivedBufLen);
 |  | 
 | 
											
												
													
														|  | -		  memset(sendBuf, 0, SEND_BUF_MAX_LEN);
 |  | 
 | 
											
												
													
														|  | 
 |  | +		  if (seclevel == 0) {
 | 
											
												
													
														|  | 
 |  | +			DataOffset = 0;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -		  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");
 |  | 
 | 
											
												
													
														|  | 
 |  | +			/* POST Packet received */
 | 
											
												
													
														|  | 
 |  | +			if (DataFlag == 0)
 | 
											
												
													
														|  | 
 |  | +			{
 | 
											
												
													
														|  | 
 |  | +			  BrowserFlag = 0;
 | 
											
												
													
														|  | 
 |  | +			  TotalReceived = 0;
 | 
											
												
													
														|  | 
 |  | +			  memset(sendBuf, 0, strlen(sendBuf));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			  /* parse packet for Content-length field */
 | 
											
												
													
														|  | 
 |  | +			  size = Parse_Content_Length(data, p->tot_len);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			  /* parse packet for the octet-stream field */
 | 
											
												
													
														|  | 
 |  | +			  for (i = 0; i < receivedBufLen; i++)
 | 
											
												
													
														|  | 
 |  | +			  {
 | 
											
												
													
														|  | 
 |  | +				  if (strncmp ((char*)(data+i), "owner", 5)==0)
 | 
											
												
													
														|  | 
 |  | +				 {
 | 
											
												
													
														|  | 
 |  | +				   DataOffset = i;
 | 
											
												
													
														|  | 
 |  | +				   break;
 | 
											
												
													
														|  | 
 |  | +				 }
 | 
											
												
													
														|  | 
 |  | +			  }
 | 
											
												
													
														|  | 
 |  | +			  /* case of MSIE8 : we do not receive data in the POST packet*/
 | 
											
												
													
														|  | 
 |  | +			  if (DataOffset == 0)
 | 
											
												
													
														|  | 
 |  | +			  {
 | 
											
												
													
														|  | 
 |  | +				 DataFlag++;
 | 
											
												
													
														|  | 
 |  | +				 BrowserFlag = 1;
 | 
											
												
													
														|  | 
 |  | +				 pbuf_free(p);
 | 
											
												
													
														|  | 
 |  | +				 return ERR_OK;
 | 
											
												
													
														|  | 
 |  | +			  }
 | 
											
												
													
														|  | 
 |  | +			  /* case of Mozilla Firefox v3.6 : we receive data in the POST packet*/
 | 
											
												
													
														|  | 
 |  | +			  else
 | 
											
												
													
														|  | 
 |  | +			  {
 | 
											
												
													
														|  | 
 |  | +				//TotalReceived = receivedBufLen - (ContentLengthOffset + 4);
 | 
											
												
													
														|  | 
 |  | +				TotalReceived = receivedBufLen - DataOffset;
 | 
											
												
													
														|  | 
 |  | +			  }
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +			if (((DataFlag ==1)&&(BrowserFlag==1)) || ((DataFlag ==0)&&(BrowserFlag==0)))
 | 
											
												
													
														|  | 
 |  | +			{
 | 
											
												
													
														|  | 
 |  | +			   if ((DataFlag ==0)&&(BrowserFlag==0))
 | 
											
												
													
														|  | 
 |  | +			   {
 | 
											
												
													
														|  | 
 |  | +				 DataFlag++;
 | 
											
												
													
														|  | 
 |  | +			   }
 | 
											
												
													
														|  | 
 |  | +			   else if ((DataFlag ==1)&&(BrowserFlag==1))
 | 
											
												
													
														|  | 
 |  | +			   {
 | 
											
												
													
														|  | 
 |  | +				 /* parse packet for the octet-stream field */
 | 
											
												
													
														|  | 
 |  | +				 for (i = 0; i < receivedBufLen; i++)
 | 
											
												
													
														|  | 
 |  | +				 {
 | 
											
												
													
														|  | 
 |  | +					 if (strncmp ((char*)(data+i), "owner", 5)==0)
 | 
											
												
													
														|  | 
 |  | +					 {
 | 
											
												
													
														|  | 
 |  | +					   DataOffset = i;
 | 
											
												
													
														|  | 
 |  | +					   break;
 | 
											
												
													
														|  | 
 |  | +					 }
 | 
											
												
													
														|  | 
 |  | +				 }
 | 
											
												
													
														|  | 
 |  | +				 TotalReceived += receivedBufLen;
 | 
											
												
													
														|  | 
 |  | +				 DataFlag++;
 | 
											
												
													
														|  | 
 |  | +			   }
 | 
											
												
													
														|  | 
 |  | +			   TotalData =0 ;
 | 
											
												
													
														|  | 
 |  | +			 }
 | 
											
												
													
														|  | 
 |  | +			 /* DataFlag >1 => the packet is data only  */
 | 
											
												
													
														|  | 
 |  | +			 else
 | 
											
												
													
														|  | 
 |  | +			 {
 | 
											
												
													
														|  | 
 |  | +			   TotalReceived +=receivedBufLen;
 | 
											
												
													
														|  | 
 |  | +			 }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			 ptr = (char*)(data + DataOffset);
 | 
											
												
													
														|  | 
 |  | +			 receivedBufLen-= DataOffset;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			 /* update Total data received counter */
 | 
											
												
													
														|  | 
 |  | +			 TotalData +=receivedBufLen;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			 /* check if last data packet */
 | 
											
												
													
														|  | 
 |  | +			 if (TotalReceived == size)
 | 
											
												
													
														|  | 
 |  | +			 {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				 strncat(&sendBuf,  ptr, receivedBufLen);
 | 
											
												
													
														|  | 
 |  | +				 strncat(&sendBuf,  " ", 1);
 | 
											
												
													
														|  | 
 |  | +				 HTTP_SetInfo(sendBuf, strlen(&sendBuf));
 | 
											
												
													
														|  | 
 |  | +				 DataFlag=0;
 | 
											
												
													
														|  | 
 |  | +				 BrowserFlag = 0;
 | 
											
												
													
														|  | 
 |  | +				 memset(sendBuf, 0, size);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				  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);
 | 
											
												
													
														|  | 
 |  | +				  hs->file = sendBuf;
 | 
											
												
													
														|  | 
 |  | +				  hs->left = sendBufLoadLen;
 | 
											
												
													
														|  | 
 |  | +					send_data(pcb, hs);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				   /* Tell TCP that we wish be to informed of data that has been
 | 
											
												
													
														|  | 
 |  | +					  successfully sent by a call to the http_sent() function. */
 | 
											
												
													
														|  | 
 |  | +				   tcp_sent(pcb, http_sent);
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +			 /* not last data packet */
 | 
											
												
													
														|  | 
 |  | +			 else
 | 
											
												
													
														|  | 
 |  | +			 {
 | 
											
												
													
														|  | 
 |  | +			   /* write data in flash */
 | 
											
												
													
														|  | 
 |  | +			   if(receivedBufLen)
 | 
											
												
													
														|  | 
 |  | +			   {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				 strncat(&sendBuf,  ptr, receivedBufLen);
 | 
											
												
													
														|  | 
 |  | +				 //memcpy(receiveBufTemp, ptr, receivedBufLen);
 | 
											
												
													
														|  | 
 |  | +			   }
 | 
											
												
													
														|  | 
 |  | +			 }
 | 
											
												
													
														|  | 
 |  | +		  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -		  sendBufLoadLen = strlen(sendBuf);
 |  | 
 | 
											
												
													
														|  | -		  hs->file = sendBuf;
 |  | 
 | 
											
												
													
														|  | -		  hs->left = sendBufLoadLen;
 |  | 
 | 
											
												
													
														|  | -		  send_data(pcb, hs);
 |  | 
 | 
											
												
													
														|  | -		  tcp_sent(pcb, http_sent);
 |  | 
 | 
											
												
													
														|  |  	  }
 |  |  	  }
 | 
											
												
													
														|  |  	  else if (strncmp(data, "GET /history.cgi", 16) == 0)
 |  |  	  else if (strncmp(data, "GET /history.cgi", 16) == 0)
 | 
											
												
													
														|  |  		{
 |  |  		{
 | 
											
										
											
												
													
														|  | @@ -698,7 +796,7 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 | 
											
												
													
														|  |  	  }
 |  |  	  }
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	  /* Тест  АКБ ИБП */
 |  |  	  /* Тест  АКБ ИБП */
 | 
											
												
													
														|  | -	  else if (strncmp(data, "POST /bat_test.cgi", 18) == 0)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	  else if (strncmp(data, "GET /bat_test.cgi", 18) == 0)
 | 
											
												
													
														|  |  	  {
 |  |  	  {
 | 
											
												
													
														|  |  		HTTP_UPSTest(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 |  |  		HTTP_UPSTest(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -708,7 +806,7 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 | 
											
												
													
														|  |  		tcp_sent(pcb, http_sent);
 |  |  		tcp_sent(pcb, http_sent);
 | 
											
												
													
														|  |  	  }
 |  |  	  }
 | 
											
												
													
														|  |  	  /* Выключение ИБП */
 |  |  	  /* Выключение ИБП */
 | 
											
												
													
														|  | -	  else if (strncmp(data, "POST /ups_power.cgi", 19) == 0)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	  else if (strncmp(data, "GET /ups_power.cgi", 19) == 0)
 | 
											
												
													
														|  |  	  {
 |  |  	  {
 | 
											
												
													
														|  |  		HTTP_UPSshutdown(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 |  |  		HTTP_UPSshutdown(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -757,7 +855,7 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb,  struct pbuf *p, err_t er
 | 
											
												
													
														|  |  		tcp_sent(pcb, http_sent);
 |  |  		tcp_sent(pcb, http_sent);
 | 
											
												
													
														|  |  	  }
 |  |  	  }
 | 
											
												
													
														|  |  	  /* Смена пароля пользователя */
 |  |  	  /* Смена пароля пользователя */
 | 
											
												
													
														|  | -	  else if (strncmp(data, "POST /changepwd.cgi", 19) == 0)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	  else if (strncmp(data, "GET /changepwd.cgi", 19) == 0)
 | 
											
												
													
														|  |  	  {
 |  |  	  {
 | 
											
												
													
														|  |  		  HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 |  |  		  HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
 | 
											
												
													
														|  |  
 |  |  
 |