Annotation of embedaddon/curl/tests/libtest/lib1522.c, revision 1.1.1.1

1.1       misho       1: /***************************************************************************
                      2:  *                                  _   _ ____  _
                      3:  *  Project                     ___| | | |  _ \| |
                      4:  *                             / __| | | | |_) | |
                      5:  *                            | (__| |_| |  _ <| |___
                      6:  *                             \___|\___/|_| \_\_____|
                      7:  *
                      8:  * Copyright (C) 1998 - 2019, 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: /* test case and code based on https://github.com/curl/curl/issues/2847 */
                     25: 
                     26: #include "testutil.h"
                     27: #include "warnless.h"
                     28: #include "memdebug.h"
                     29: 
                     30: static char g_Data[40 * 1024]; /* POST 40KB */
                     31: 
                     32: static int sockopt_callback(void *clientp, curl_socket_t curlfd,
                     33:                             curlsocktype purpose)
                     34: {
                     35: #if defined(SOL_SOCKET) && defined(SO_SNDBUF)
                     36:   int sndbufsize = 4 * 1024; /* 4KB send buffer */
                     37:   (void) clientp;
                     38:   (void) purpose;
                     39:   setsockopt(curlfd, SOL_SOCKET, SO_SNDBUF,
                     40:              (const char *)&sndbufsize, sizeof(sndbufsize));
                     41: #else
                     42:   (void)clientp;
                     43:   (void)curlfd;
                     44:   (void)purpose;
                     45: #endif
                     46:   return CURL_SOCKOPT_OK;
                     47: }
                     48: 
                     49: int test(char *URL)
                     50: {
                     51:   CURLcode code;
                     52:   struct curl_slist *pHeaderList = NULL;
                     53:   CURL *pCurl = curl_easy_init();
                     54:   memset(g_Data, 'A', sizeof(g_Data)); /* send As! */
                     55: 
                     56:   curl_easy_setopt(pCurl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
                     57:   curl_easy_setopt(pCurl, CURLOPT_URL, URL);
                     58:   curl_easy_setopt(pCurl, CURLOPT_POSTFIELDS, g_Data);
                     59:   curl_easy_setopt(pCurl, CURLOPT_POSTFIELDSIZE, (long)sizeof(g_Data));
                     60: 
                     61:   /* Remove "Expect: 100-continue" */
                     62:   pHeaderList = curl_slist_append(pHeaderList, "Expect:");
                     63: 
                     64:   curl_easy_setopt(pCurl, CURLOPT_HTTPHEADER, pHeaderList);
                     65: 
                     66:   code = curl_easy_perform(pCurl);
                     67: 
                     68:   if(code == CURLE_OK) {
                     69:     curl_off_t uploadSize;
                     70:     curl_easy_getinfo(pCurl, CURLINFO_SIZE_UPLOAD_T, &uploadSize);
                     71: 
                     72:     printf("uploadSize = %ld\n", (long)uploadSize);
                     73: 
                     74:     if((size_t) uploadSize == sizeof(g_Data)) {
                     75:       printf("!!!!!!!!!! PASS\n");
                     76:     }
                     77:     else {
                     78:       printf("!!!!!!!!!! FAIL\n");
                     79:     }
                     80:   }
                     81:   else {
                     82:     printf("curl_easy_perform() failed. e = %d\n", code);
                     83:   }
                     84: 
                     85:   curl_slist_free_all(pHeaderList);
                     86:   curl_easy_cleanup(pCurl);
                     87:   curl_global_cleanup();
                     88: 
                     89:   return 0;
                     90: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>