ksgi
1/* $Id$ */
2/*
3* Copyright (c) 2015 Kristaps Dzonsons <kristaps@bsd.lv>
4*
5* Permission to use, copy, modify, and distribute this software for any
6* purpose with or without fee is hereby granted, provided that the above
7* copyright notice and this permission notice appear in all copies.
8*
9* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*/
17#include "../config.h"18
19#include <stdarg.h>20#include <stdint.h>21#include <stdlib.h>22#include <string.h>23#include <unistd.h>24
25#include <curl/curl.h>26
27#include "../kcgi.h"28#include "regress.h"29
30#if HAVE_ZLIB31
32#define BUFSZ (1024 * 1024)33#ifdef __linux__34#define arc4random random35#endif36
37static size_t38doign(void *ptr, size_t sz, size_t nm, void *arg)39{
40
41return(sz * nm);42}
43
44static int45parent(CURL *curl)46{
47char *p;48size_t i;49
50if (NULL == (p = malloc(BUFSZ + 5))) {51perror(NULL);52return(0);53}54strncpy(p, "tag=", 5);55for (i = 0; i < BUFSZ ; i++)56p[i + 4] =57(0 == i % 2) ? (arc4random() % 26) + 65 :58((0 == i % 2) ? (arc4random() % 26) + 97 :59(arc4random() % 9) + 48);60p[BUFSZ + 4] = '\0';61
62curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, doign);63curl_easy_setopt(curl, CURLOPT_POSTFIELDS, p);64curl_easy_setopt(curl, CURLOPT_URL,65"http://localhost:17123/");66curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip");67if (CURLE_OK != curl_easy_perform(curl))68return(0);69free(p);70return(1);71}
72
73static int74child(void)75{
76struct kreq r;77const char *page = "index";78struct kvalid valid = { NULL, "tag" };79
80if (KCGI_OK != khttp_parse(&r, &valid, 1, &page, 1, 0))81return(0);82
83if (NULL == r.fieldmap[0]) {84khttp_free(&r);85return(0);86} else if (BUFSZ != r.fieldmap[0]->valsz) {87khttp_free(&r);88return(0);89}90
91khttp_head(&r, kresps[KRESP_STATUS],92"%s", khttps[KHTTP_200]);93khttp_head(&r, kresps[KRESP_CONTENT_TYPE],94"%s", kmimetypes[KMIME_TEXT_HTML]);95khttp_body(&r);96khttp_write(&r, r.fieldmap[0]->val, r.fieldmap[0]->valsz);97khttp_free(&r);98return(1);99}
100
101int
102main(int argc, char *argv[])103{
104
105return(regress_cgi(parent, child) ? EXIT_SUCCESS : EXIT_FAILURE);106}
107
108#else109int
110main(int argc, char *argv[])111{
112
113return(EXIT_SUCCESS);114}
115#endif116