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); }
BOOL modem_process (U8 ch) { /* Modem character process event handler. This function is called when */ /* a new character has been received from the modem in command mode */ if (modem_st == MODEM_IDLE) { mlen = 0; return (__FALSE); } if (mlen < sizeof(mbuf)) { mbuf[mlen++] = ch; } /* Modem driver is processing a command */ if (wait_for) { /* 'modem_run()' is waiting for modem reply */ if (str_scomp (mbuf,reply) == __TRUE) { wait_for = 0; delay = 0; if (wait_conn) { /* OK, we are online here. */ wait_conn = 0; modem_st = MODEM_ONLINE; /* Inform the parent process we are online now. */ return (__TRUE); } } } /* Watch the modem disconnect because we do not use CD line */ if (mem_comp (mbuf,"NO CARRIER",10) == __TRUE) { set_mode (); } if (ch == '\r' || ch == '\n') { flush_buf (); } /* Modem not connected, return FALSE */ return (__FALSE); }
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); } } }
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); }