Return to lib508.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / libtest |
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: }