Annotation of embedaddon/curl/tests/libtest/lib508.c, revision 1.1.1.1
1.1 misho 1: /***************************************************************************
2: * _ _ ____ _
3: * Project ___| | | | _ \| |
4: * / __| | | | |_) | |
5: * | (__| |_| | _ <| |___
6: * \___|\___/|_| \_\_____|
7: *
8: * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
9: *
10: * This software is licensed as described in the file COPYING, which
11: * you should have received as part of this distribution. The terms
12: * are also available at https://curl.haxx.se/docs/copyright.html.
13: *
14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15: * copies of the Software, and permit persons to whom the Software is
16: * furnished to do so, under the terms of the COPYING file.
17: *
18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19: * KIND, either express or implied.
20: *
21: ***************************************************************************/
22: #include "test.h"
23:
24: #include "memdebug.h"
25:
26: static char data[]="this is what we post to the silly web server\n";
27:
28: struct WriteThis {
29: char *readptr;
30: size_t sizeleft;
31: };
32:
33: static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
34: {
35: struct WriteThis *pooh = (struct WriteThis *)userp;
36:
37: if(size*nmemb < 1)
38: return 0;
39:
40: if(pooh->sizeleft) {
41: *(char *)ptr = pooh->readptr[0]; /* copy one single byte */
42: pooh->readptr++; /* advance pointer */
43: pooh->sizeleft--; /* less data left */
44: return 1; /* we return 1 byte at a time! */
45: }
46:
47: return 0; /* no more data left to deliver */
48: }
49:
50: int test(char *URL)
51: {
52: CURL *curl;
53: CURLcode res = CURLE_OK;
54:
55: struct WriteThis pooh;
56:
57: pooh.readptr = data;
58: pooh.sizeleft = strlen(data);
59:
60: if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
61: fprintf(stderr, "curl_global_init() failed\n");
62: return TEST_ERR_MAJOR_BAD;
63: }
64:
65: curl = curl_easy_init();
66: if(!curl) {
67: fprintf(stderr, "curl_easy_init() failed\n");
68: curl_global_cleanup();
69: return TEST_ERR_MAJOR_BAD;
70: }
71:
72: /* First set the URL that is about to receive our POST. */
73: test_setopt(curl, CURLOPT_URL, URL);
74:
75: /* Now specify we want to POST data */
76: test_setopt(curl, CURLOPT_POST, 1L);
77:
78: #ifdef CURL_DOES_CONVERSIONS
79: /* Convert the POST data to ASCII */
80: test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
81: #endif
82:
83: /* Set the expected POST size */
84: test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)pooh.sizeleft);
85:
86: /* we want to use our own read function */
87: test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
88:
89: /* pointer to pass to our read function */
90: test_setopt(curl, CURLOPT_READDATA, &pooh);
91:
92: /* get verbose debug output please */
93: test_setopt(curl, CURLOPT_VERBOSE, 1L);
94:
95: /* include headers in the output */
96: test_setopt(curl, CURLOPT_HEADER, 1L);
97:
98: /* Perform the request, res will get the return code */
99: res = curl_easy_perform(curl);
100:
101: test_cleanup:
102:
103: /* always cleanup */
104: curl_easy_cleanup(curl);
105: curl_global_cleanup();
106:
107: return res;
108: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>