#include "apache_request.h"
#include "apache_cookie.h"
module MODULE_VAR_EXPORT testapreq_module;
static
void
util_start_html(request_rec *r,
char
*title)
{
ap_rputs(
"<HTML>\n"
, r);
ap_rputs(
"<HEADER>\n"
, r);
ap_rprintf(r,
"<TITLE>%s</TITLE>\n"
, title);
ap_rputs(
"</HEADER>\n"
, r);
ap_rputs(
"<BODY>\n"
, r);
}
static
void
util_end_html(request_rec *r)
{
ap_rputs(
"</BODY></HTML>\n"
, r);
}
static
void
util_start_form(request_rec *r,
char
*type)
{
ap_rprintf(r,
"<FORM METHOD=\"POST\" ENCTYPE=\"%s\">\n"
,
type ? type : DEFAULT_ENCTYPE);
}
static
void
util_end_form(request_rec *r)
{
ap_rputs(
"</FORM>\n"
, r);
}
static
void
util_submit(request_rec *r,
char
*name)
{
ap_rprintf(r,
"<INPUT TYPE=\"submit\" NAME=\"%s\">\n"
,
name ? name :
".submit"
);
}
static
void
util_textfield(request_rec *r,
char
*key,
char
*val)
{
ap_rprintf(r,
"<INPUT TYPE=\"text\" NAME=\"%s\" VALUE=\"%s\">\n"
, key, val);
}
static
void
util_filefield(request_rec *r,
char
*key,
char
*val)
{
ap_rprintf(r,
"<INPUT TYPE=\"file\" NAME=\"%s\" VALUE=\"%s\">\n"
, key, val);
}
static
int
util_isa_default(
char
*wanted,
char
**list)
{
int
i;
for
(i=0; list[i]; i++) {
if
(strEQ(wanted, list[i]))
return
1;
}
return
0;
}
static
void
util_checkbox_group(request_rec *r,
char
*name,
char
**values,
char
**defaults)
{
int
i;
for
(i=0; values[i]; i++) {
ap_rprintf(r,
"<INPUT TYPE=\"checkbox\" NAME=\"%s\" VALUE=\"%s\" %s>%s\n"
,
name, values[i],
util_isa_default(values[i], defaults) ?
"CHECKED"
:
""
, values[i]);
}
}
static
void
util_popup_menu(request_rec *r,
char
*name,
char
**values)
{
int
i;
ap_rprintf(r,
"<SELECT NAME=\"%s\">\n"
, name);
for
(i=0; values[i]; i++)
ap_rprintf(r,
"<OPTION VALUE=\"%s\">%s\n"
, values[i], values[i]);
ap_rputs(
"</SELECT>\n"
, r);
}
#define P_SEP ap_rputs("<P>", r)
static
char
*checkbox_combo[] = {
"eenie"
,
"meenie"
,
"minie"
,
"moe"
,NULL
};
static
char
*checkbox_combo_defaults[] = {
"eenie"
,
"minie"
,NULL
};
static
char
*popup_menu_colors[] = {
"red"
,
"green"
,
"blue"
,
"chartreuse"
,NULL
};
static
int
form_handler(request_rec *r) {
ApacheRequest *req = ApacheRequest_new(r);
int
status = ApacheRequest_parse(req);
if
(status != OK) {
return
status;
}
r->content_type =
"text/html"
;
ap_send_http_header(r);
util_start_html(r,
"Hello"
);
util_start_form(r, NULL);
ap_rputs(
"What's your name? "
, r);
util_textfield(r,
"name"
,
""
);
P_SEP;
ap_rputs(
"What's the combination?"
, r);
P_SEP;
util_checkbox_group(r,
"words"
,
checkbox_combo, checkbox_combo_defaults);
P_SEP;
ap_rputs(
"What's your favorite color? "
, r);
util_popup_menu(r,
"color"
, popup_menu_colors);
P_SEP;
util_submit(r, NULL);
util_end_form(r);
P_SEP;
if
(r->method_number == M_POST) {
ap_rprintf(r,
"Your name is: %s"
,
ApacheRequest_param(req,
"name"
));
P_SEP;
ap_rprintf(r,
"The keywords are: %s"
,
ApacheRequest_params_as_string(req,
"words"
));
P_SEP;
ap_rprintf(r,
"Your favorite color is: %s"
,
ApacheRequest_param(req,
"color"
));
}
util_end_html(r);
return
OK;
}
static
int
upload_handler(request_rec *r) {
ApacheRequest *req = ApacheRequest_new(r);
int
status = ApacheRequest_parse(req);
if
(status != OK) {
return
status;
}
r->content_type =
"text/html"
;
ap_send_http_header(r);
util_start_html(r,
"Upload test"
);
util_start_form(r,
"multipart/form-data"
);
ap_rputs(
"Select File: "
, r);
util_filefield(r,
"filename"
,
""
);
P_SEP;
util_submit(r, NULL);
util_end_form(r);
if
(r->method_number == M_POST) {
char
buf[IOBUFSIZE];
ap_rprintf(r,
"Filename: %s (%d)"
,
ApacheRequest_param(req,
"filename"
),
(
int
)req->upload->size);
P_SEP;
while
(
fgets
(buf,
sizeof
(buf), req->upload->fp)) {
ap_rputs(buf, r);
}
}
util_end_html(r);
return
OK;
}
static
int
cookie_handler(request_rec *r) {
ApacheCookieJar *cookies = ApacheCookie_parse(r, NULL);
r->content_type =
"text/html"
;
if
(ApacheCookieJarItems(cookies)) {
int
i;
ap_send_http_header(r);
util_start_html(r,
"Cookie test"
);
for
(i=0; i<ApacheCookieJarItems(cookies); i++) {
ApacheCookie *c = ApacheCookieJarFetch(cookies, i);
ap_rprintf(r,
"%s => %s\n"
,
c->name, ApacheCookie_as_string(c));
P_SEP;
}
}
else
{
ApacheCookie *apc = ApacheCookie_new(r,
"-name"
,
"test"
,
"-value"
,
"foo"
,
NULL);
ApacheCookie_expires(apc,
"+1m"
);
ApacheCookie_bake(apc);
ap_send_http_header(r);
util_start_html(r,
"Cookie test"
);
ap_rputs(
"No cookies in the jar"
, r);
}
util_end_html(r);
return
OK;
}
static
handler_rec testapreq_handlers[] =
{
{
"apreq-form"
, form_handler},
{
"apreq-upload"
, upload_handler},
{
"apreq-cookie"
, cookie_handler},
{NULL}
};
module MODULE_VAR_EXPORT testapreq_module =
{
STANDARD_MODULE_STUFF,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
testapreq_handlers,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
};