int Webserver::process(FILE* f) { char buf[4096]; char *method; char *path; char *protocol; if (!fgets(buf, sizeof(buf), f)) return -1; printf("%s", buf); char* bufp = buf; method = strsep(&bufp, " "); path = strsep(&bufp, " "); protocol = strsep(&bufp, "\r"); if (!method || !path || !protocol) return -1; // Extract request HTTPRequest request; request.method = string(method); request.path = string(path); request.readHeaders(f); request.writeHeaders(stdout); request.readParams(f); request.setBody(f); // Find and execute action Action* action = actions[path]; if (action == NULL) { action = file_action; } HTTPResponse response = action->execute(request); response.addHeader("Server", string("RayGay Renderslave ") + string(VERSION)); request.addHeader("Date", WebUtil::formatDate(time(NULL))); // Send response fseek(f, 0, SEEK_CUR); // Force change of stream direction fprintf(f, "HTTP/1.0 %d %s\r\n", response.status, response.statusString().c_str()); response.writeHeaders(f); response.writeBody(f); return 0; }