1748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/* 2748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This file is part of libmicrohttpd 3748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Copyright (C) 2007 Christian Grothoff 4748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 5748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat libmicrohttpd is free software; you can redistribute it and/or modify 6748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat it under the terms of the GNU General Public License as published 7748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat by the Free Software Foundation; either version 2, or (at your 8748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat option) any later version. 9748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 10748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat libmicrohttpd is distributed in the hope that it will be useful, but 11748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat WITHOUT ANY WARRANTY; without even the implied warranty of 12748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat General Public License for more details. 14748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 15748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat You should have received a copy of the GNU General Public License 16748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat along with libmicrohttpd; see the file COPYING. If not, write to the 17748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Boston, MA 02111-1307, USA. 19748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 20748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 21748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 22748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @file mhds_get_test.c 23748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @brief Testcase for libmicrohttpd HTTPS GET operations 24748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @author Sagie Amir 25748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 26748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 27748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#include "platform.h" 28748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#include "microhttpd.h" 29748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 30748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define MHD_E_MEM "Error: memory error\n" 31748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define MHD_E_SERVER_INIT "Error: failed to start server\n" 32748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 33748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratconst int DEBUG_GNUTLS_LOG_LEVEL = 0; 34748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratconst char *test_file_name = "https_test_file"; 35748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratconst char test_file_data[] = "Hello World\n"; 36748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 37748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratstatic int 38748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratahc_echo (void *cls, 39748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct MHD_Connection *connection, 40748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *url, 41748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *method, 42748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *version, 43748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const char *upload_data, size_t *upload_data_size, 44748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat void **unused) 45748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 46748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return 0; 47748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 48748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 49748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratint 50748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erattest_wrap (char *test_name, int (*test) (void)) 51748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 52748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat int ret; 53748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 54748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat fprintf (stdout, "running test: %s ", test_name); 55748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat ret = test (); 56748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if (ret == 0) 57748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat { 58748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat fprintf (stdout, "[pass]\n"); 59748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat } 60748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat else 61748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat { 62748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat fprintf (stdout, "[fail]\n"); 63748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat } 64748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return ret; 65748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 66748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 67748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 68748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 69748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * Test daemon initialization with the MHD_OPTION_SOCK_ADDR option 70748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 71748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratstatic int 72748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erattest_ip_addr_option () 73748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 74748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct MHD_Daemon *d; 75748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct sockaddr_in daemon_ip_addr; 76748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#if HAVE_INET6 77748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct sockaddr_in6 daemon_ip_addr6; 78748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#endif 79748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 80748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat memset (&daemon_ip_addr, 0, sizeof (struct sockaddr_in)); 81748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat daemon_ip_addr.sin_family = AF_INET; 82748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat daemon_ip_addr.sin_port = htons (4233); 83748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat daemon_ip_addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); 84748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 85748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#if HAVE_INET6 86748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat memset (&daemon_ip_addr6, 0, sizeof (struct sockaddr_in6)); 87748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat daemon_ip_addr6.sin6_family = AF_INET6; 88748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat daemon_ip_addr6.sin6_port = htons (4233); 89748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat daemon_ip_addr6.sin6_addr = in6addr_loopback; 90748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#endif 91748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 92748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat d = MHD_start_daemon (MHD_USE_DEBUG, 4233, 93748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR, 94748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat &daemon_ip_addr, MHD_OPTION_END); 95748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 96748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if (d == 0) 97748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return -1; 98748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 99748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_stop_daemon (d); 100748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 101748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#if HAVE_INET6 102748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat d = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_IPv6, 4233, 103748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR, 104748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat &daemon_ip_addr6, MHD_OPTION_END); 105748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 106748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if (d == 0) 107748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return -1; 108748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 109748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MHD_stop_daemon (d); 110748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#endif 111748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 112748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return 0; 113748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 114748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 115748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/* setup a temporary transfer test file */ 116748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratint 117748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratmain (int argc, char *const *argv) 118748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 119748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat unsigned int errorCount = 0; 120748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 121748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat errorCount += test_wrap ("ip addr option", &test_ip_addr_option); 122748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 123748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return errorCount != 0; 124748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 125