Пример #1
0
void cgi_process_var (U8 *qs) {
  /* This function is called by HTTP server to process the Querry_String   */
  /* for the CGI Form GET method. It is called on SUBMIT from the browser. */
  /*.The Querry_String.is SPACE terminated.                                */
  U8 *var;
  int s[4];
	
  var = (U8 *)alloc_mem (40);
  do {
    /* Loop through all the parameters. */
    qs = http_get_var (qs, var, 40);
    /* Check the returned string, 'qs' now points to the next. */
    if (var[0] != 0) {
      /* Returned string is non 0-length. */
      if (str_scomp (var, (U8 *)"ip=") == __TRUE) {
        /* My IP address parameter. */
        sscanf ((const char *)&var[3], "%d.%d.%d.%d",&s[0],&s[1],&s[2],&s[3]);
        LocM.IpAdr[0]   = s[0];
        LocM.IpAdr[1]   = s[1];
        LocM.IpAdr[2]   = s[2];
        LocM.IpAdr[3]   = s[3];
      }
      else if (str_scomp (var, (U8 *)"msk=") == __TRUE) {
        /* Net mask parameter. */
        sscanf ((const char *)&var[4], "%d.%d.%d.%d",&s[0],&s[1],&s[2],&s[3]);
        LocM.NetMask[0] = s[0];
        LocM.NetMask[1] = s[1];
        LocM.NetMask[2] = s[2];
        LocM.NetMask[3] = s[3];
				
      }
      else if (str_scomp (var, (U8 *)"gw=") == __TRUE) {
        /* Default gateway parameter. */
        sscanf ((const char *)&var[3], "%d.%d.%d.%d",&s[0],&s[1],&s[2],&s[3]);
        LocM.DefGW[0]   = s[0];
        LocM.DefGW[1]   = s[1];
        LocM.DefGW[2]   = s[2];
        LocM.DefGW[3]   = s[3];
      }
      else if (str_scomp (var, (U8 *)"pdns=") == __TRUE) {
        /* Default gateway parameter. */
        sscanf ((const char *)&var[5], "%d.%d.%d.%d",&s[0],&s[1],&s[2],&s[3]);
        LocM.PriDNS[0]  = s[0];
        LocM.PriDNS[1]  = s[1];
        LocM.PriDNS[2]  = s[2];
        LocM.PriDNS[3]  = s[3];
      }
      else if (str_scomp (var, (U8 *)"sdns=") == __TRUE) {
        /* Default gateway parameter. */
        sscanf ((const char *)&var[5], "%d.%d.%d.%d",&s[0],&s[1],&s[2],&s[3]);
        LocM.SecDNS[0]  = s[0];
        LocM.SecDNS[1]  = s[1];
        LocM.SecDNS[2]  = s[2];
        LocM.SecDNS[3]  = s[3];
      }
    }
  }while (qs);
  free_mem ((OS_FRAME *)var);
}
void cgi_process_data (U8 code, U8 *dat, U16 len) {
  /* This function is called by HTTP server to process the returned Data    */
  /* for the CGI Form POST method. It is called on SUBMIT from the browser. */
  /* Parameters:                                                            */
  /*   code  - callback context code                                        */
  /*           0 = www-url-encoded form data                                */
  /*           1 = filename for file upload (0-terminated string)           */
  /*           2 = file upload raw data                                     */
  /*           3 = end of file upload (file close requested)                */
  /*           4 = any xml encoded POST data (single or last stream)        */
  /*           5 = the same as 4, but with more xml data to follow          */
  /*               Use http_get_content_type() to check the content type    */  
  /*   dat   - pointer to POST received data                                */
  /*   len   - received data length                                         */
  U8 passw[12],retyped[12];
  U8 *var,stpassw;

  switch (code) {
    case 0:
      /* Url encoded form data received. */
      break;

    default:
      /* Ignore all other codes. */
      return;
  }

  P2 = 0;
  LEDrun = __TRUE;
  if (len == 0) {
    /* No data or all items (radio, checkbox) are off. */
    LED_out (P2);
    return;
  }
  stpassw = 0;
  var = (U8 *)alloc_mem (40);
  do {
    /* Parse all returned parameters. */
    dat = http_get_var (dat, var, 40);
    if (var[0] != 0) {
      /* Parameter found, returned string is non 0-length. */
      if (str_scomp (var, "led0=on") == __TRUE) {
        P2 |= 0x01;
      }
      else if (str_scomp (var, "led1=on") == __TRUE) {
        P2 |= 0x02;
      }
      else if (str_scomp (var, "led2=on") == __TRUE) {
        P2 |= 0x04;
      }
      else if (str_scomp (var, "led3=on") == __TRUE) {
        P2 |= 0x08;
      }
      else if (str_scomp (var, "led4=on") == __TRUE) {
        P2 |= 0x10;
      }
      else if (str_scomp (var, "led5=on") == __TRUE) {
        P2 |= 0x20;
      }
      else if (str_scomp (var, "led6=on") == __TRUE) {
        P2 |= 0x40;
      }
      else if (str_scomp (var, "led7=on") == __TRUE) {
        P2 |= 0x80;
      }
      else if (str_scomp (var, "ctrl=Browser") == __TRUE) {
        LEDrun = __FALSE;
      }
      else if (str_scomp (var, "pw=") == __TRUE) {
        /* Change password. */
        str_copy (passw, var+3);
        stpassw |= 1;
      }
      else if (str_scomp (var, "pw2=") == __TRUE) {
        /* Retyped password. */
        str_copy (retyped, var+4);
        stpassw |= 2;
      }
      else if (str_scomp (var, "lcd1=") == __TRUE) {
        /* LCD Module Line 1 text. */
        str_copy (lcd_text[0], var+5);
        LCDupdate = __TRUE;
      }
      else if (str_scomp (var, "lcd2=") == __TRUE) {
        /* LCD Module Line 2 text. */
        str_copy (lcd_text[1], var+5);
        LCDupdate = __TRUE;
      }
    }
  }while (dat);
  free_mem ((OS_FRAME *)var);
  LED_out (P2);

  if (stpassw == 0x03) {
    len = strlen ((const char *)passw);
    if (mem_comp (passw, retyped, len) == __TRUE) {
      /* OK, both entered passwords the same, change it. */
      str_copy (http_auth_passw, passw);
    }
  }
}
Пример #3
0
void cgi_process_data (U8 code, U8 *dat, U16 len) {
  /* This function is called by HTTP server to process the returned Data    */
  /* for the CGI Form POST method. It is called on SUBMIT from the browser. */
  /* Parameters:                                                            */
  /*   code  - callback context code                                        */
  /*           0 = www-url-encoded form data                                */
  /*           1 = filename for file upload (0-terminated string)           */
  /*           2 = file upload raw data                                     */
  /*           3 = end of file upload (file close requested)                */
  /*           4 = any xml encoded POST data (single or last stream)        */
  /*           5 = the same as 4, but with more xml data to follow          */
  /*               Use http_get_content_type() to check the content type    */  
  /*   dat   - pointer to POST received data                                */
  /*   len   - received data length  */ 
  static FILE *f = NULL;
  U32 n;
  U8 *var,*p;
	
	BOOL format_flash = FALSE;
	BOOL settings_save = FALSE;
	
	BOOL sntp_time_configurations_load = FALSE;
	RTC_Time rtc_time;
	BOOL rtc_save = FALSE;
	BOOL add_admin = FALSE, add_user = FALSE;
	
	BOOL save_user = FALSE, delete_user = FALSE, delete_users = FALSE;
	BOOL save_admin = FALSE, delete_admin = FALSE;
	
	int admin_number = 0;
	int user_number = 0;
	USER *user = malloc(sizeof(USER));
	ADMIN *admin = malloc(sizeof(ADMIN));

	static FINFO file_info;

	//ADMIN *admin = malloc(sizeof(ADMIN));
	//USER *user = malloc(sizeof(USER));
	
  switch (code) {
    case 0:
      /* Url encoded form data received. */
      break;
    case 1:
      /* Filename for file upload received as encoded by the browser. */
      /* It might contain an absolute path to a file from the sending */
      /* host. Open a file for writing. */
      var = dat;
      /* Remove path info from filename, keep only the name. */
      for (p = dat; *p; p++) {
        if (*p == '\\') var = p + 1;
      }
      if (*var == 0) {
        /* Send was clicked but a filename was not selected. */
        return;
      }
      /* Filename is OK, initialize the card. */
      if (finit(NULL) != 0) {
        f = NULL;
        return;
      }
      /* Files will be stored to the root directory of SD card. */
      f = fopen ((const char *)var,"w");
      return;
    case 2:
      /* File content data received. Write data to a file. */
      /* This function will be called several times with   */
      /* code 2 when a big file is being uploaded.         */
      if (f != NULL) {
        /* Write in 512 byte blocks. This is the optimal way for */
        /* the FAT FS with caching enabled. For cache buffer     */
        /* size of 4KB the file write speed is 1.2 MByte/sec.    */
        while ((n = len) > 0) {
          if (n > 512) n = 512;
          fwrite (dat,1,n,f);
          dat += n;
          len -= n;
        }
      }
      return;
    case 3:
      /* File upload finished. Close a file. */
      if (f != NULL) {
        fclose (f);
      }
      return;
    default:
      /* Ignore all other codes. */
      return;
  }

  if (len == 0) {
    /* No data or all items (radio, checkbox) are off. */
    return;
  }
	
  var = (U8 *)alloc_mem (40);

  do {
    /* Parse all returned parameters. */
    dat = http_get_var (dat, var, 40);
    if (var[0] != 0) {
			if (str_scomp(var, (const U8*)"file_delete=") == TRUE) { // FILE DELETE
        fdelete((const char *)var+12);
      } else if (str_scomp(var, (const U8*)"format_flash=yes") == TRUE) { // FORMAT FLASH
        format_flash = TRUE;
      } else if (str_scomp(var, (const U8*)"ani_file_delete=") == TRUE) { // ANIMATION FILE DELETE
				if (fdelete((const char *)var+16) == 0) {
					if (ANIMATION_PLAY && strcmp(AnimationFileName, (const char *)var+16) == 0) {
						Animation_Stop();
					}
				}
			} else if (str_scomp(var, (const U8*)"delete_all_ani=yes") == TRUE) {
				while (ffind("*.ani", &file_info) == 0) {
					fdelete((const char*)file_info.name);
				}
			}
			
			// USERS & ADMINS COMMANDS
			if(str_scomp(var, (const U8*)"delete_user="******"%d", &user_number);
				delete_user = TRUE;
			} else if(str_scomp(var, (const U8*)"delete_users=") == TRUE) {
				delete_users = TRUE;
      } else if(str_scomp(var, (const U8*)"save_user="******"%d", &user_number);
				save_user = TRUE;
			} else if (str_scomp(var, (const U8*)"add_user=yes") == TRUE) {
				add_user = TRUE;
			}
			
			if(str_scomp(var, (const U8*)"delete_admin=") == TRUE) {
				sscanf((const char *)var+12, "%d", &admin_number);
				delete_admin = TRUE;
      } else if(str_scomp(var, (const U8*)"save_admin=") == TRUE) {
				sscanf((const char *)var+10, "%d", &admin_number);
				save_admin = TRUE;
			} else if (str_scomp(var, (const U8*)"add_admin=yes") == TRUE) {
				add_admin = TRUE;
			}
			
			if(str_scomp(var, (const U8*)"username="******"password="******"first_name=") == TRUE) {
				strcpy(user->First_Name, (const char *)var+11);
			} else if(str_scomp(var, (const U8*)"last_name=") == TRUE) {
				strcpy(user->Last_Name, (const char *)var+10);
			} else if(str_scomp(var, (const U8*)"email=") == TRUE) {
				strcpy(user->Email, (const char *)var+6);
				strcpy(admin->Email, (const char *)var+6);
			}
			
			// SNTP TIME COMMANDS
			if(str_scomp(var, (const U8*)"sntp_time_load=yes") == TRUE) {
				sntp_time_configurations_load = TRUE;
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_0=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[0]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_1=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[1]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_2=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[2]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_3=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[3]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_0=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[0]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_1=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[1]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_2=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[2]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_3=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[3]);
			}
			
			// TIME COMMANDS
			if(str_scomp(var, (const U8*)"time_format=") == TRUE) {
				strcpy(SETTINGS_DATA[TIME_FORMAT], (const char *)var+12);
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"date_format=") == TRUE) {
				strcpy(SETTINGS_DATA[DATE_FORMAT], (const char *)var+12);
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"timezone_offset_select=") == TRUE) {
				TIME_ZONE_OFFSET_SELECTED_VALUE = atoi((const char *)var+23);
				settings_save = TRUE;
			}

			// MANUAL TIME COMMANDS
			if(str_scomp(var, (const U8*)"manual_time=") == TRUE) {
				sscanf((const char *)var+12, "%d:%d", (int*)&rtc_time.Hour, (int*)&rtc_time.Min);
				rtc_save = TRUE;
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"manual_date=") == TRUE) {
				sscanf((const char *)var+12, "%d-%d-%d", (int*)&rtc_time.Year, (int*)&rtc_time.Mon, (int*)&rtc_time.Mday);
				rtc_save = TRUE;
				settings_save = TRUE;
			}
			
			// ANIMATION
			if(str_scomp(var, (const U8*)"animation_start=") == TRUE) {
				AnimationFileName = (char *)malloc(strlen((const char *)var)-15);
				strcpy(AnimationFileName, (const char *)var+16);
				Animation_Start();
			} else if(str_scomp(var, (const U8*)"animation_stop=yes") == TRUE) {
				Animation_Stop();
			}
    }
  } while (dat);
  free_mem ((OS_FRAME *)var);
	
	if (format_flash == TRUE) {
		SPI_FLASH_Delete_All_Files();
	} else if (sntp_time_configurations_load == TRUE) {
		SNTP_Load_Time();
	} else if (rtc_save == TRUE) {
		TIME_ZONE_OFFSET_SELECTED_VALUE = 0;		
		RTC_Set_Time(rtc_time);
	} else if(save_user == TRUE) {
		if(USERS_Check_User(user) == USER_Warning_OK) {
			strcpy((&Users[user_number])->Username, user->Username);
			strcpy((&Users[user_number])->Password, user->Password);
			strcpy((&Users[user_number])->First_Name, user->First_Name);
			strcpy((&Users[user_number])->Last_Name, user->Last_Name);
			strcpy((&Users[user_number])->Email, user->Email);

			USERS_Save();
		}
	}	else if(save_admin == TRUE) {
		if(ADMINS_Check_Admin(admin) == ADMIN_Warning_OK) {
			strcpy((&Admins[admin_number])->Username, admin->Username);
			strcpy((&Admins[admin_number])->Password, admin->Password);
			strcpy((&Admins[admin_number])->Email, admin->Email);

			ADMINS_Save();
		}
	} else if(delete_user == TRUE) {
		USERS_Remove_User_By_Index(user_number);
	} else if(delete_admin == TRUE) {
		ADMINS_Remove_Admin_By_Index(admin_number);
	} else if (add_admin == TRUE) {
		ADMINS_Add_Admin(admin);
	} else if (add_user == TRUE) {
		USERS_Add_User(user);
	} else if(delete_users == TRUE) {
		USERS_Remove_All();
	}
	
	if (settings_save == TRUE) {
		SETTINGS_Save();
	}
	
	free(user);
	free(admin);
}