Exemplo n.º 1
0
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;
}