void do_upgrade_post(char *url, webs_t stream, int len, char *boundary) { char buf[POST_BUF_SIZE]; upgrade_result = EINVAL; upgrade_type = 0; /* Turn on the flag to omit the follwoing HTTP request. */ refuse_request = 1; /* Look for our part */ while (len > 0) { if (!wfgets(buf, MIN(len + 1, sizeof(buf)), stream)) return; len -= strlen(buf); if (!strncasecmp(buf, "Content-Disposition:", 20)) { if (strstr(buf, "name=\"binfile\"")) { /* upgrade image */ upgrade_type = FIRMWARE; break; } else if (strstr(buf, "name=\"cfgfile\"")) { /* import configuration */ upgrade_type = CONFIG; break; } } } #ifdef DEBUG printf("%s upgrade\n", (upgrade_type == FIRMWARE) ? "firmware" : "config" ); #endif /* Skip boundary and headers */ while (len > 0) { if (!wfgets(buf, MIN(len + 1, sizeof(buf)), stream)) return; #ifdef DEBUG printf("[%d]%s", strlen(buf), buf); #endif len -= strlen(buf); if (!strcmp(buf, "\n") || !strcmp(buf, "\r\n")) break; } #ifdef DEBUG printf("content length[%d]\n", len); #endif if ( upgrade_type == FIRMWARE ) { upgrade_result = do_upgrade(NULL, stream, &len); } if ( upgrade_type == CONFIG ) { upgrade_result = import_config(NULL, stream, &len); } /* Slurp anything remaining in the request */ while (len--) #if defined(HTTPS_SUPPORT) if (do_ssl) BIO_gets((BIO *) stream, buf, 1); else #endif (void) fgetc(stream); }
void // do_upgrade_post(char *url, FILE *stream, int len, char *boundary) do_upgrade_post(char *url, webs_t stream, int len, char *boundary) // jimmy, // https, // 8/6/2003 { killall("udhcpc", SIGKILL); #ifndef ANTI_FLASH char buf[1024]; int type = 0; upgrade_ret = EINVAL; // Let below files loaded to memory // To avoid the successful screen is blank after web upgrade. // system2 ("cat /www/Success_u_s.asp > /dev/null"); // system2 ("cat /www/Fail_u_s.asp > /dev/null"); /* * Look for our part */ while (len > 0) { if (!wfgets(buf, MIN(len + 1, sizeof(buf)), stream)) return; len -= strlen(buf); if (!strncasecmp(buf, "Content-Disposition:", 20)) { if (strstr(buf, "name=\"erase\"")) { while (len > 0 && strcmp(buf, "\n") && strcmp(buf, "\r\n")) { if (!wfgets(buf, MIN(len + 1, sizeof(buf)), stream)) return; len -= strlen(buf); } if (!wfgets(buf, MIN(len + 1, sizeof(buf)), stream)) return; len -= strlen(buf); buf[1] = '\0'; // we only want the 1st digit nvram_set("sv_restore_defaults", buf); nvram_commit(); } else if (strstr(buf, "name=\"file\"")) // upgrade image { type = 0; break; } } } /* * Skip boundary and headers */ while (len > 0) { if (!wfgets(buf, MIN(len + 1, sizeof(buf)), stream)) return; len -= strlen(buf); if (!strcmp(buf, "\n") || !strcmp(buf, "\r\n")) break; } upgrade_ret = sys_upgrade(NULL, stream, &len, type); fprintf(stderr, "core upgrade done() %d\n", len); /* * Restore factory original settings if told to. This will also cause a * restore defaults on reboot of a Sveasoft firmware. */ if (nvram_match("sv_restore_defaults", "1")) { system2("rm -f /usr/local/nvram/nvram.bin"); } /* * Slurp anything remaining in the request */ while (len--) { #ifdef HAVE_HTTPS if (do_ssl) { wfgets(buf, 1, stream); } else { (void)fgetc(stream); } #else (void)fgetc(stream); #endif } #endif fprintf(stderr, "upgrade done()\n"); }