aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAleksey Veresov <aleksey@veresov.pro>2020-02-28 20:16:57 +0300
committerAleksey Veresov <aleksey@veresov.pro>2020-02-28 20:16:57 +0300
commitc65fdedc7bedfc20da73cdbfc34c22bb80139896 (patch)
tree2b110cb12e91753fbdaf5d94c71c44ce73c9019a /examples
parentc11dd93608624593af3fe5a3f2a3eefa56911fe4 (diff)
downloadmagi-c65fdedc7bedfc20da73cdbfc34c22bb80139896.tar
magi-c65fdedc7bedfc20da73cdbfc34c22bb80139896.tar.xz
magi-c65fdedc7bedfc20da73cdbfc34c22bb80139896.zip
[magi]
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile2
-rw-r--r--examples/append.c33
-rw-r--r--examples/cookie.c43
-rw-r--r--examples/echo.c135
-rw-r--r--examples/fastcgi.c34
-rw-r--r--examples/fcgi.c46
-rw-r--r--examples/upload.c51
7 files changed, 162 insertions, 182 deletions
diff --git a/examples/Makefile b/examples/Makefile
index 28e9bed..f2c366b 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -3,7 +3,7 @@
# Debug mode (allowing to debug the examples via gdb):
# DEBUG = yes
# Examples to build by default:
-EXAMPLES = append cookie upload echo
+EXAMPLES = append cookie echo upload fastcgi
# Specify your favourite C compiler here (e.g. tcc):
CC = gcc
diff --git a/examples/append.c b/examples/append.c
index 702f0fb..cafdf9c 100644
--- a/examples/append.c
+++ b/examples/append.c
@@ -1,23 +1,23 @@
#include <magi.h>
#include <stdio.h>
-#include <stdlib.h>
-void response_request(magi_request *req, magi_response *res)
+void response(magi_request *r)
{
- char *data = magi_param_list_get(req->params, "addon");
+ char *data = magi_request_param(r, "addon");
+ magi_response_add(r,
+ "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' "
+ "'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
+ "<html xmlns='http://www.w3.org/1999/xhtml'>"
+ "<head><title>Append to File</title></head>"
+ "<body>");
if (data) {
FILE *file = fopen("file_to_append", "a");
fputs(data, file);
fclose(file);
+ magi_response_add(r, "<p>Appended!</p>");
}
-
- magi_response_add(res,
- "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' "
- "'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
- "<html xmlns='http://www.w3.org/1999/xhtml'>"
- "<head><title>Append to File</title></head>"
- "<body>"
+ magi_response_add(r,
"<form action='/cgi-bin/append' method='post'><fieldset>"
"<input type='text' name='addon' value='Whatever you want to add.'/>"
"<input type='submit' value='Append'/>"
@@ -29,15 +29,12 @@ void response_request(magi_request *req, magi_response *res)
int main(int argc, char const *argv[])
{
magi_request request;
- magi_request_setup(&request);
- if (magi_request_full_cgi(&request)) {
- magi_response response;
- magi_response_setup(&response);
- response_request(&request, &response);
- magi_response_cgi_clear(&response);
+ magi_request_init(&request);
+ if (magi_cgi(&request)) {
+ response(&request);
} else {
- magi_error_cgi(request.error);
+ magi_response_error(&request);
}
- magi_request_destroy(&request);
+ magi_request_free(&request);
return 0;
}
diff --git a/examples/cookie.c b/examples/cookie.c
index 365f989..5bbade1 100644
--- a/examples/cookie.c
+++ b/examples/cookie.c
@@ -1,41 +1,38 @@
#include <magi.h>
-#include <stdio.h>
-#include <stdlib.h>
-void response_request(magi_request *req, magi_response *res)
+void list_cookies(magi_request *r)
{
- magi_cookie_list *current;
+ magi_cookies *current;
+ magi_response_add(r, "Cookies:");
+ for (current = r->cookies; current; current = current->next) {
+ magi_cookie *c = &current->item;
+ magi_response_format(r, "<br/>[%s] = [%s]", c->name, c->data);
+ }
+}
- magi_response_add(res,
+void response(magi_request *r)
+{
+ magi_response_cookie(r, "cookie", "monster");
+ magi_response_add(r,
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' "
"'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
"<html xmlns='http://www.w3.org/1999/xhtml'>"
"<head><title>Cookie Listing and Setting</title></head>"
- "<body>");
-
- for (current = req->cookies; current; current = current->next) {
- magi_response_add_format(res,
- "[%s] = [%s]<br/>", current->item.name, current->item.data);
- }
-
- magi_response_add(res, "</body></html>");
-
- magi_response_cookie_easy(res, "cookie", "monster");
+ "<body><p>");
+ list_cookies(r);
+ magi_response_add(r, "</p></body></html>");
}
int main(int argc, char const *argv[])
{
magi_request request;
- magi_request_setup(&request);
- if (magi_request_full_cgi(&request)) {
- magi_response response;
- magi_response_setup(&response);
- response_request(&request, &response);
- magi_response_cgi_clear(&response);
+ magi_request_init(&request);
+ if (magi_cgi(&request)) {
+ response(&request);
} else {
- magi_error_cgi(request.error);
+ magi_response_error(&request);
}
- magi_request_destroy(&request);
+ magi_request_free(&request);
return 0;
}
diff --git a/examples/echo.c b/examples/echo.c
index f665cd0..89230de 100644
--- a/examples/echo.c
+++ b/examples/echo.c
@@ -1,118 +1,113 @@
#include <magi.h>
-#include <stdio.h>
-#include <stdlib.h>
-void proceed_cookies(magi_cookie_list *cookies, magi_response *response)
+void list_cookies(magi_request *r)
{
- while (cookies) {
- magi_response_add(response, "Cookie with name [");
- magi_response_add(response, cookies->item.name);
- if (cookies->item.data) {
- magi_response_add(response, "] is [");
- magi_response_add(response, cookies->item.data);
+ magi_cookies *current = r->cookies;
+ for (current = r->cookies; current; current = current->next) {
+ magi_cookie *c = &current->item;
+ magi_response_add(r, "Cookie with name [");
+ magi_response_add(r, c->name);
+ if (c->data) {
+ magi_response_add(r, "] is [");
+ magi_response_add(r, c->data);
}
- if (cookies->item.domain) {
- magi_response_add(response, "] for domain [");
- magi_response_add(response, cookies->item.domain);
+ if (c->domain) {
+ magi_response_add(r, "] for domain [");
+ magi_response_add(r, c->domain);
}
- if (cookies->item.path) {
- magi_response_add(response, "] for path [");
- magi_response_add(response, cookies->item.path);
+ if (c->path) {
+ magi_response_add(r, "] for path [");
+ magi_response_add(r, c->path);
}
- magi_response_add(response, "]<br/>");
- cookies = cookies->next;
+ magi_response_add(r, "]<br/>");
}
}
-void proceed_params(magi_param_list *params, magi_response *response)
+void list_params(magi_request *r, magi_params *current)
{
- while (params) {
- magi_response_add_format(response,
- "[%s] is [%s]<br/>", params->item.name, params->item.data);
- params = params->next;
+ for (; current; current = current->next) {
+ magi_param *p = &current->item;
+ magi_response_format(r, "[%s] is [%s]<br/>", p->name, p->data);
}
}
-void proceed_files(magi_file_list *files, magi_response *response)
+void list_files(magi_request *r)
{
- while (files) {
- magi_file f = files->item;
- magi_response_add_format(response,
- "[%s] was [%s] on userside<br/>", f.param_name, f.file_name);
- files = files->next;
+ magi_files *current;
+ for (current = r->files; current; current = current->next) {
+ magi_file *f = &current->item;
+ magi_response_format(r, "[%s] was [%s] on clientside<br/>",
+ f->param_name, f->file_name);
}
}
-void process_meta(magi_request *req, magi_response *res)
+void show_meta(magi_request *r)
{
- magi_response_add(res, "I was called with method [");
- magi_response_add(res, req->method);
- if (req->uri) {
- magi_response_add(res, "] with URL [");
- magi_response_add(res, req->uri);
+ magi_response_add(r, "I was called with method [");
+ magi_response_add(r, r->method);
+ if (r->uri) {
+ magi_response_add(r, "] with URL [");
+ magi_response_add(r, r->uri);
}
- if (req->server_name) {
- magi_response_add(res, "] for server [");
- magi_response_add(res, req->server_name);
+ if (r->server_name) {
+ magi_response_add(r, "] for server [");
+ magi_response_add(r, r->server_name);
}
- if (req->server_port) {
- magi_response_add(res, "] on port [");
- magi_response_add(res, req->server_port);
+ if (r->server_port) {
+ magi_response_add(r, "] on port [");
+ magi_response_add(r, r->server_port);
}
- if (req->server_protocol) {
- magi_response_add(res, "] with protocol [");
- magi_response_add(res, req->server_protocol);
+ if (r->server_protocol) {
+ magi_response_add(r, "] with protocol [");
+ magi_response_add(r, r->server_protocol);
}
- if (req->server_software) {
- magi_response_add(res, "] and I am running on software [");
- magi_response_add(res, req->server_software);
+ if (r->server_software) {
+ magi_response_add(r, "] and I am running on software [");
+ magi_response_add(r, r->server_software);
}
- magi_response_add(res, "]<br/>");
+ magi_response_add(r, "]<br/>");
}
-void response_request(magi_request *req, magi_response *res)
+void response(magi_request *r)
{
- magi_response_add(res,
+ magi_response_add(r,
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' "
"'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
"<html xmlns='http://www.w3.org/1999/xhtml'>"
"<head><title>Echo</title></head>"
"<body>");
- magi_response_add(res, "<h1>Echo CGI Script</h1>");
- process_meta(req, res);
+ magi_response_add(r, "<h1>Echo CGI Script</h1>");
+ show_meta(r);
- magi_response_add(res, "<h2>Cookies:</h2>");
- proceed_cookies(req->cookies, res);
+ magi_response_add(r, "<h2>Cookies:</h2>");
+ list_cookies(r);
- magi_response_add(res, "<h2>Parameters:</h2>");
- proceed_params(req->params, res);
+ magi_response_add(r, "<h2>Parameters:</h2>");
+ list_params(r, r->params);
- magi_response_add(res, "<h2>URL Parameters:</h2>");
- proceed_params(req->url_params, res);
+ magi_response_add(r, "<h2>URL Parameters:</h2>");
+ list_params(r, r->url_params);
- magi_response_add(res, "<h2>HTTP Parameters:</h2>");
- proceed_params(req->http_params, res);
+ magi_response_add(r, "<h2>HTTP Parameters:</h2>");
+ list_params(r, r->http_params);
- magi_response_add(res, "<h2>Files:</h2>");
- proceed_files(req->files, res);
+ magi_response_add(r, "<h2>Files:</h2>");
+ list_files(r);
- magi_response_add(res, "</body></html>");
+ magi_response_add(r, "</body></html>");
}
int main(int argc, char const *argv[])
{
magi_request request;
- magi_request_setup(&request);
- if (magi_request_full_cgi(&request)) {
- magi_response response;
- magi_response_setup(&response);
- response_request(&request, &response);
- magi_response_cgi_clear(&response);
+ magi_request_init(&request);
+ if (magi_cgi(&request)) {
+ response(&request);
} else {
- magi_error_cgi(request.error);
+ magi_response_error(&request);
}
- magi_request_destroy(&request);
+ magi_request_free(&request);
return 0;
}
diff --git a/examples/fastcgi.c b/examples/fastcgi.c
new file mode 100644
index 0000000..2d68a3b
--- /dev/null
+++ b/examples/fastcgi.c
@@ -0,0 +1,34 @@
+#include <magi.h>
+
+
+void response(magi_request *r)
+{
+ magi_response_add(r,
+ "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' "
+ "'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
+ "<html xmlns='http://www.w3.org/1999/xhtml'>"
+ "<head><title>Fast CGI</title></head>"
+ "<body>Hi!</body>"
+ "</html>");
+}
+
+int main(int argc, char const *argv[])
+{
+ magi_session session;
+ magi_request request;
+ magi_request_init(&request);
+ magi_session_init(&session);
+ magi_session_inet(&session, "localhost", "9973");
+ magi_session_unix(&session, "unix.sock");
+ while (magi_fastcgi(&session, &request)) {
+ if (request.error) {
+ magi_response_error(&request);
+ } else {
+ response(&request);
+ }
+ magi_request_free(&request);
+ }
+ magi_request_free(&request);
+ magi_session_free(&session);
+ return 0;
+}
diff --git a/examples/fcgi.c b/examples/fcgi.c
deleted file mode 100644
index de2f525..0000000
--- a/examples/fcgi.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* * * TODO -- not valid yet * * */
-#include <magi.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-void response_request(struct magi_request * req, struct magi_resopnse * res)
-{
- magi_response_content_type(res, magi_xhtml);
- magi_response_add(
- res, "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' "
- "'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
- "<html xmlns='http://www.w3.org/1999/xhtml'>"
- "<head><title>Fast CGI</title></head>"
- "<body>Hi!</body>"
- "</html>");
-}
-
-int main(int argc, char const * argv[])
-{
- struct magi_session session;
- int sock = magi_socket_inet("localhost", 9973);
- /* E.g. also magi_socket_file("fcgi.sock") can be used. */
- if (magi_session_fcgi(&session, sock)) {
- struct magi_request request;
- magi_request_setup(&request);
- while (magi_request_fcgi(&request, &session) &&
- magi_request_resume_fcgi(&request, &session)) {
- if (!request.error) {
- struct magi_response response;
- magi_response_setup(&response);
- response_request(&request, &response);
- magi_response_fcgi(&response, &session);
- magi_response_destroy(&response);
- } else {
- magi_error_fcgi(request.error, &session);
- }
- magi_request_destroy(&request);
- }
- }
- fputs(magi_error_message(session.error), stderr);
- magi_session_destroy(&session);
- magi_socket_close(sock);
- return 0;
-}
diff --git a/examples/upload.c b/examples/upload.c
index 1877d39..158dcad 100644
--- a/examples/upload.c
+++ b/examples/upload.c
@@ -1,23 +1,22 @@
#include <magi.h>
#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-void response_request(magi_request *req, magi_response *res)
+void response(magi_request *r)
{
- char *name = magi_param_list_get(req->params, "name");
- magi_file *data = magi_file_list_get(req->files, "data");
- if (name && data) {
- rename("data", name);
- }
-
- magi_response_add(res,
+ char *name = magi_request_param(r, "name");
+ magi_file *data = magi_request_file(r, "data");
+ magi_response_add(r,
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' "
"'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
"<html xmlns='http://www.w3.org/1999/xhtml'>"
"<head><title>Upload File</title></head>"
- "<body>"
+ "<body>");
+ if (name && data) {
+ rename("data", name);
+ magi_response_add(r, "<p>Uploaded!</p>");
+ }
+ magi_response_add(r,
"<form action='/cgi-bin/upload' method='post' "
"enctype='multipart/form-data'><fieldset>"
"<input type='text' name='name' value='filename'/>"
@@ -28,22 +27,26 @@ void response_request(magi_request *req, magi_response *res)
"</html>");
}
+void get(magi_request *r)
+{
+ magi_loadfiles rules;
+ magi_loadfiles_init(&rules);
+ magi_loadfiles_add(&rules, "data", "data", 0);
+ magi_loadfiles_set(&r, &rules);
+ magi_cgi(&r);
+ magi_loadfiles_free(&rules);
+}
+
int main(int argc, char const *argv[])
{
- magi_request request;
- magi_tempfiles tmps = { 0, 0 };
- magi_request_setup(&request);
- magi_tempfiles_add(&tmps, "data", "data", 0);
- magi_request_setup_tempfiles(&request, &tmps);
- if (magi_request_full_cgi(&request)) {
- magi_response response;
- magi_response_setup(&response);
- response_request(&request, &response);
- magi_response_cgi(&response);
+ magi_request request;
+ magi_request_init(request);
+ get(&request);
+ if (request.error) {
+ magi_response_error(&request);
} else {
- magi_error_cgi(request.error);
+ response(&request);
}
- magi_tempfiles_destroy(&tmps);
- magi_request_destroy(&request);
+ magi_request_free(&request);
return 0;
}