/** @file
Parser: request info class decl.
Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)
Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
*/
#ifndef PA_REQUEST_INFO_H
#define PA_REQUEST_INFO_H
#define IDENT_PA_REQUEST_INFO_H "$Id: pa_request_info.h,v 1.20 2026/04/25 13:38:46 moko Exp $"
// include
#include "pa_config_includes.h"
/// some information from web server
class Request_info {
public:
//@{ these filled by Request class user
const char* document_root;
const char* path_translated;
const char* method;
const char* query_string;
const char* uri;
const char* content_type;
size_t content_length;
const char* cookie;
char** argv;
bool mail_received;
//@}
//@{ these are filed by Request class itself: user's post data
const char* post_data; size_t post_size;
//@}
// see feature #1116 for details
bool can_have_body(){
return
method
&& strcasecmp(method, "GET") != 0
&& strcasecmp(method, "HEAD") != 0
&& strcasecmp(method, "TRACE") != 0;
}
static const char* strip_absolute_uri(const char *auri){
if(!auri || *auri == '/')
return auri;
// extractring https?://site.name prefix allowed by http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2
if(!pa_strncasecmp(auri, "http://"))
auri+=7;
else if(!pa_strncasecmp(auri, "https://"))
auri+=8;
else
return auri;
for(; *auri && *auri != '/'; auri++);
return auri;
}
Request_info() {
memset(this, 0, sizeof(*this)); // OK as Request_info is POD
}
};
#endif
E-mail: