You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mxe/src/libfcgi-test.cpp

63 lines
1.6 KiB

/*
* This file is part of MXE. See LICENSE.md for licensing information.
*/
#include <sstream>
#include <fcgi_stdio.h>
using std::string;
using std::stringstream;
void show_html(const string &);
bool ends_with(const string &, const string &);
string get_env_var(const string &);
int main(void)
{
unsigned long counter = 0;
while (FCGI_Accept() >= 0) {
++counter;
const string full_path = get_env_var("SCRIPT_NAME");
if (ends_with(full_path, "") || ends_with(full_path, "/")) {
show_html("<b>Hello, stranger!</b></br>\n"
"</br>\n"
"What are you looking for?</br>\n"
"</br>\n"
"Counter of visits may be found <a href='/counter'>here</a></br>\n");
}
else if (ends_with(full_path, "/counter") || ends_with(full_path, "/counter/")) {
stringstream counter_str;
counter_str << counter;
show_html("Counter: " + counter_str.str());
}
else {
show_html("<center><h2>This is not the page you are looking for!</h2></center>\n");
}
}
return 0;
}
void show_html(const string &str)
{
printf("Content-type: text/html\n\n");
printf("%s", str.c_str());
}
bool ends_with(const string &str, const string &sfx)
{
if (sfx.size() > str.size())
return false;
return equal(str.begin() + str.size() - sfx.size(), str.end(), sfx.begin());
}
string get_env_var(const string &var)
{
const char *ptr = getenv(var.c_str());
return (ptr ? string(ptr) : "");
}