Annotation of embedaddon/curl/tests/libtest/lib1517.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: size_t tocopy = size * nmemb;
37:
38: /* Wait one second before return POST data *
39: * so libcurl will wait before sending request body */
40: wait_ms(1000);
41:
42: if(tocopy < 1 || !pooh->sizeleft)
43: return 0;
44:
45: if(pooh->sizeleft < tocopy)
46: tocopy = pooh->sizeleft;
47:
48: memcpy(ptr, pooh->readptr, tocopy);/* copy requested data */
49: pooh->readptr += tocopy; /* advance pointer */
50: pooh->sizeleft -= tocopy; /* less data left */
51: return tocopy;
52: }
53:
54: int test(char *URL)
55: {
56: CURL *curl;
57: CURLcode res = CURLE_OK;
58:
59: struct WriteThis pooh;
60:
61: pooh.readptr = data;
62: pooh.sizeleft = strlen(data);
63:
64: if(curl_global_init(CURL_GLOBAL_ALL)) {
65: fprintf(stderr, "curl_global_init() failed\n");
66: return TEST_ERR_MAJOR_BAD;
67: }
68:
69: curl = curl_easy_init();
70: if(!curl) {
71: fprintf(stderr, "curl_easy_init() failed\n");
72: curl_global_cleanup();
73: return TEST_ERR_MAJOR_BAD;
74: }
75:
76: /* First set the URL that is about to receive our POST. */
77: test_setopt(curl, CURLOPT_URL, URL);
78:
79: /* Now specify we want to POST data */
80: test_setopt(curl, CURLOPT_POST, 1L);
81:
82: #ifdef CURL_DOES_CONVERSIONS
83: /* Convert the POST data to ASCII */
84: test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
85: #endif
86:
87: /* Set the expected POST size */
88: test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)pooh.sizeleft);
89:
90: /* we want to use our own read function */
91: test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
92:
93: /* pointer to pass to our read function */
94: test_setopt(curl, CURLOPT_READDATA, &pooh);
95:
96: /* get verbose debug output please */
97: test_setopt(curl, CURLOPT_VERBOSE, 1L);
98:
99: /* include headers in the output */
100: test_setopt(curl, CURLOPT_HEADER, 1L);
101:
102: /* detect HTTP error codes >= 400 */
103: /* test_setopt(curl, CURLOPT_FAILONERROR, 1L); */
104:
105:
106: /* Perform the request, res will get the return code */
107: res = curl_easy_perform(curl);
108:
109: test_cleanup:
110:
111: /* always cleanup */
112: curl_easy_cleanup(curl);
113: curl_global_cleanup();
114:
115: return res;
116: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>