1748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/* 2748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This file is part of libmicrohttpd 3748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Copyright (C) 2007, 2008 Christian Grothoff (and other contributing authors) 4748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 5748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This library is free software; you can redistribute it and/or 6748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat modify it under the terms of the GNU Lesser General Public 7748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat License as published by the Free Software Foundation; either 8748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat version 2.1 of the License, or (at your option) any later version. 9748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 10748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This library is distributed in the hope that it will be useful, 11748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat but WITHOUT ANY WARRANTY; without even the implied warranty of 12748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Lesser General Public License for more details. 14748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 15748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat You should have received a copy of the GNU Lesser General Public 16748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat License along with this library; if not, write to the Free Software 17748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat*/ 19748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 20748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @file refuse_post_example.c 21748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @brief example for how to refuse a POST request properly 22748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @author Christian Grothoff and Sebastian Gerhardt 23748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 24748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#include "platform.h" 25748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#include <microhttpd.h> 26748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 27748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratconst char *askpage = "<html><body>\n\ 28748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Upload a file, please!<br>\n\ 29748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat <form action=\"/filepost\" method=\"post\" enctype=\"multipart/form-data\">\n\ 30748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat <input name=\"file\" type=\"file\">\n\ 31748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat <input type=\"submit\" value=\" Send \"></form>\n\ 32748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat </body></html>"; 33748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 34748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define BUSYPAGE "<html><head><title>Webserver busy</title></head><body>We are too busy to process POSTs right now.</body></html>" 35748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 36748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratstatic int 37748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratahc_echo (void *cls, 38748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct MHD_Connection *connection, 39748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *url, 40748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *method, 41748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *version, 42748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *upload_data, size_t *upload_data_size, void **ptr) 43748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 44748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat static int aptr; 45748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *me = cls; 46748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct MHD_Response *response; 47748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat int ret; 48748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 49748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if ((0 != strcmp (method, "GET")) && (0 != strcmp (method, "POST"))) 50748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return MHD_NO; /* unexpected method */ 51748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 52748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if (&aptr != *ptr) 53748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat { 54748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat *ptr = &aptr; 55748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 56748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat /* always to busy for POST requests */ 57748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if (0 == strcmp (method, "POST")) 58748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat { 59748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat response = MHD_create_response_from_buffer (strlen (BUSYPAGE), 60748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat (void *) BUSYPAGE, 61748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_RESPMEM_PERSISTENT); 62748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat ret = 63748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_queue_response (connection, MHD_HTTP_SERVICE_UNAVAILABLE, 64748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat response); 65748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_destroy_response (response); 66748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return ret; 67748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat } 68748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat } 69748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 70748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat *ptr = NULL; /* reset when done */ 71748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat response = MHD_create_response_from_buffer (strlen (me), 72748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat (void *) me, 73748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_RESPMEM_PERSISTENT); 74748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat ret = MHD_queue_response (connection, MHD_HTTP_OK, response); 75748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_destroy_response (response); 76748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return ret; 77748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 78748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 79748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratint 80748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratmain (int argc, char *const *argv) 81748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 82748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct MHD_Daemon *d; 83748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 84748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if (argc != 2) 85748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat { 86748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat printf ("%s PORT\n", argv[0]); 87748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return 1; 88748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat } 89748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG, 90748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat atoi (argv[1]), 91748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat NULL, NULL, &ahc_echo, (void *) askpage, 92748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_OPTION_END); 93748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if (d == NULL) 94748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return 1; 95748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat (void) getc (stdin); 96748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_stop_daemon (d); 97748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return 0; 98748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 99748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 100748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/* end of refuse_post_example.c */ 101