static int conn(char *system) { int nf, fn = FAIL; char *flds[F_MAX+1]; CDEBUG(4, "conn(%s)\n", system); Uerror = 0; while ((nf = finds(system, flds, F_MAX)) > 0) { fn = getto(flds); CDEBUG(4, "getto ret %d\n", fn); if (fn < 0) continue; if (EQUALS(Progname, "uucico")) { if (chat(nf - F_LOGIN, flds + F_LOGIN, fn, "", "") == SUCCESS) { sysreset(); return (fn); /* successful return */ } /* login failed */ DEBUG(6, "close caller (%d)\n", fn); fd_rmlock(fn); (void) close(fn); if (Dc[0] != NULLCHAR) { /*EMPTY*/ DEBUG(6, "delock line (%s)\n", Dc); } } else { sysreset(); return (fn); } } /* finds or getto failed */ sysreset(); CDEBUG(1, "Call Failed: %s\n", UERRORTEXT); return (FAIL); }
void web::ProcessWebClients() { // listen for incoming clients EthernetClient client = m_server->available(); if (client) { bool bReset = false; #ifdef ARDUINO FILE stream_file; FILE * pFile = &stream_file; setup_sendbuf(); fdev_setup_stream(pFile, stream_putchar, NULL, _FDEV_SETUP_WRITE); stream_file.udata = &client; #else FILE * pFile = fdopen(client.GetSocket(), "w"); #endif freeMemory(); trace(F("Got a client\n")); //ShowSockStatus(); KVPairs key_value_pairs; char sPage[35]; if (!ParseHTTPHeader(client, &key_value_pairs, sPage, sizeof(sPage))) { trace(F("ERROR!\n")); ServeError(pFile); } else { trace(F("Page:%s\n"), sPage); //ShowSockStatus(); if (strcmp(sPage, "bin/setSched") == 0) { if (SetSchedule(key_value_pairs)) { if (GetRunSchedules()) ReloadEvents(); ServeHeader(pFile, 200, "OK", false); } else ServeError(pFile); } else if (strcmp(sPage, "bin/setZones") == 0) { if (SetZones(key_value_pairs)) { ReloadEvents(); ServeHeader(pFile, 200, "OK", false); } else ServeError(pFile); } else if (strcmp(sPage, "bin/delSched") == 0) { if (DeleteSchedule(key_value_pairs)) { if (GetRunSchedules()) ReloadEvents(); ServeHeader(pFile, 200, "OK", false); } else ServeError(pFile); } else if (strcmp(sPage, "bin/setQSched") == 0) { if (SetQSched(key_value_pairs)) { ServeHeader(pFile, 200, "OK", false); } else ServeError(pFile); } else if (strcmp(sPage, "bin/settings") == 0) { if (SetSettings(key_value_pairs)) { ReloadEvents(); ServeHeader(pFile, 200, "OK", false); } else ServeError(pFile); } else if (strcmp(sPage, "bin/manual") == 0) { if (ManualZone(key_value_pairs)) { ServeHeader(pFile, 200, "OK", false); } else ServeError(pFile); } else if (strcmp(sPage, "bin/run") == 0) { if (RunSchedules(key_value_pairs)) { ReloadEvents(); ServeHeader(pFile, 200, "OK", false); } else ServeError(pFile); } else if (strcmp(sPage, "bin/factory") == 0) { ResetEEPROM(); ReloadEvents(); ServeHeader(pFile, 200, "OK", false); } else if (strcmp(sPage, "bin/reset") == 0) { ServeHeader(pFile, 200, "OK", false); bReset = true; } else if (strcmp(sPage, "json/schedules") == 0) { JSONSchedules(key_value_pairs, pFile); } else if (strcmp(sPage, "json/zones") == 0) { JSONZones(key_value_pairs, pFile); } else if (strcmp(sPage, "json/settings") == 0) { JSONSettings(key_value_pairs, pFile); } else if (strcmp(sPage, "json/state") == 0) { JSONState(key_value_pairs, pFile); } else if (strcmp(sPage, "json/schedule") == 0) { JSONSchedule(key_value_pairs, pFile); } else if (strcmp(sPage, "json/wcheck") == 0) { JSONwCheck(key_value_pairs, pFile); } #ifdef LOGGING else if (strcmp(sPage, "json/logs") == 0) { JSONLogs(key_value_pairs, pFile); } else if (strcmp(sPage, "json/tlogs") == 0) { JSONtLogs(key_value_pairs, pFile); } #endif else if (strcmp(sPage, "ShowSched") == 0) { freeMemory(); ServeSchedPage(pFile); } else if (strcmp(sPage, "ShowZones") == 0) { freeMemory(); ServeZonesPage(pFile); } else if (strcmp(sPage, "ShowEvent") == 0) { ServeEventPage(pFile); } else if (strcmp(sPage, "ReloadEvent") == 0) { ReloadEvents(true); ServeEventPage(pFile); } else { if (strlen(sPage) == 0) strcpy(sPage, "index.htm"); // prepend path memmove(sPage + 5, sPage, sizeof(sPage) - 5); memcpy(sPage, "/web/", 5); sPage[sizeof(sPage)-1] = 0; trace(F("Serving Page: %s\n"), sPage); SdFile theFile; if (!theFile.open(sPage, O_READ)) Serve404(pFile); else { if (theFile.isFile()) ServeFile(pFile, sPage, theFile, client); else Serve404(pFile); theFile.close(); } } } #ifdef ARDUINO flush_sendbuf(client); // give the web browser time to receive the data delay(1); #else fflush(pFile); fclose(pFile); #endif // close the connection: client.stop(); if (bReset) sysreset(); } }
static int install_recovery(const char *srcpath) { int rfd, i, len, rem; int ret = 0; void *handle = NULL; if (bchlib_setup(CONFIG_MTD_RECOVERY_DEVPATH, false, &handle)) { return -1; } rfd = open(srcpath, O_RDONLY, 0444); if (read(rfd, &upg_image, sizeof(upg_image)) != sizeof(upg_image)) { _info("read head"); ret = -EIO; goto err; } #ifdef IMG_SIGNATURE if (upg_image.sig != IMG_SIGNATURE) { _info("image signature missmatch. IPL2=%u, UPG=%u\n", IMG_SIGNATURE, upg_image.sig); _info("go normal boot\n"); memset(copybuf, 0, sizeof(copybuf)); snprintf(copybuf, sizeof(copybuf), "normal"); set_config(1, copybuf); sysreset(); /* NOT REACHED */ } #endif for (i = 0; i < upg_image.chunknum; i++) { if (!strcmp(basename(upg_image.chunk[i].fname), "recovery")) { break; } } if (i == upg_image.chunknum) { _info("recovery not found\n"); ret = -ENOENT; goto err; } lseek(rfd, upg_image.chunk[i].offset + ((void *)&upg_image.chunk[upg_image.chunknum] - (void *)&upg_image), SEEK_SET); rem = upg_image.chunk[i].size; while (rem > 0) { len = read(rfd, copybuf, rem > 512 ? 512 : rem); if (len < 0) { _info("read image"); ret = -EIO; goto err; } bchlib_write(handle, copybuf, upg_image.chunk[i].size - rem, len); rem -= len; } err: if (handle) { bchlib_teardown(handle); } close(rfd); _info("DONE\n"); return ret; }