xref: /curl/include/curl/easy.h (revision de522c55)
1 #ifndef CURLINC_EASY_H
2 #define CURLINC_EASY_H
3 /***************************************************************************
4  *                                  _   _ ____  _
5  *  Project                     ___| | | |  _ \| |
6  *                             / __| | | | |_) | |
7  *                            | (__| |_| |  _ <| |___
8  *                             \___|\___/|_| \_\_____|
9  *
10  * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
11  *
12  * This software is licensed as described in the file COPYING, which
13  * you should have received as part of this distribution. The terms
14  * are also available at https://curl.se/docs/copyright.html.
15  *
16  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17  * copies of the Software, and permit persons to whom the Software is
18  * furnished to do so, under the terms of the COPYING file.
19  *
20  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21  * KIND, either express or implied.
22  *
23  * SPDX-License-Identifier: curl
24  *
25  ***************************************************************************/
26 #ifdef  __cplusplus
27 extern "C" {
28 #endif
29 
30 /* Flag bits in the curl_blob struct: */
31 #define CURL_BLOB_COPY   1 /* tell libcurl to copy the data */
32 #define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */
33 
34 struct curl_blob {
35   void *data;
36   size_t len;
37   unsigned int flags; /* bit 0 is defined, the rest are reserved and should be
38                          left zeroes */
39 };
40 
41 CURL_EXTERN CURL *curl_easy_init(void);
42 CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
43 CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
44 CURL_EXTERN void curl_easy_cleanup(CURL *curl);
45 
46 /*
47  * NAME curl_easy_getinfo()
48  *
49  * DESCRIPTION
50  *
51  * Request internal information from the curl session with this function.
52  * The third argument MUST be pointing to the specific type of the used option
53  * which is documented in each man page of the option. The data pointed to
54  * will be filled in accordingly and can be relied upon only if the function
55  * returns CURLE_OK. This function is intended to get used *AFTER* a performed
56  * transfer, all results from this function are undefined until the transfer
57  * is completed.
58  */
59 CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
60 
61 
62 /*
63  * NAME curl_easy_duphandle()
64  *
65  * DESCRIPTION
66  *
67  * Creates a new curl session handle with the same options set for the handle
68  * passed in. Duplicating a handle could only be a matter of cloning data and
69  * options, internal state info and things like persistent connections cannot
70  * be transferred. It is useful in multithreaded applications when you can run
71  * curl_easy_duphandle() for each new thread to avoid a series of identical
72  * curl_easy_setopt() invokes in every thread.
73  */
74 CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl);
75 
76 /*
77  * NAME curl_easy_reset()
78  *
79  * DESCRIPTION
80  *
81  * Re-initializes a CURL handle to the default values. This puts back the
82  * handle to the same state as it was in when it was just created.
83  *
84  * It does keep: live connections, the Session ID cache, the DNS cache and the
85  * cookies.
86  */
87 CURL_EXTERN void curl_easy_reset(CURL *curl);
88 
89 /*
90  * NAME curl_easy_recv()
91  *
92  * DESCRIPTION
93  *
94  * Receives data from the connected socket. Use after successful
95  * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
96  */
97 CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
98                                     size_t *n);
99 
100 /*
101  * NAME curl_easy_send()
102  *
103  * DESCRIPTION
104  *
105  * Sends data over the connected socket. Use after successful
106  * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
107  */
108 CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
109                                     size_t buflen, size_t *n);
110 
111 
112 /*
113  * NAME curl_easy_upkeep()
114  *
115  * DESCRIPTION
116  *
117  * Performs connection upkeep for the given session handle.
118  */
119 CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl);
120 
121 #ifdef  __cplusplus
122 } /* end of extern "C" */
123 #endif
124 
125 #endif
126