aboutsummaryrefslogtreecommitdiff
path: root/vendor/curl/curl_easy.odin
blob: bad8fdc28205fe011a112d6e934c39a0e354a45e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package vendor_curl

import c "core:c/libc"

/* Flag bits in the curl_blob struct: */
BLOB_COPY   :: blob_flags{.COPY} /* tell libcurl to copy the data */
BLOB_NOCOPY :: blob_flags{}      /* tell libcurl to NOT copy the data */

blob_flags :: distinct bit_set[blob_flag; c.uint]
blob_flag :: enum c.uint {
	COPY = 0,
}

blob :: struct {
	data:  rawptr,
	len:   c.size_t,
	flags: blob_flags, /* bit 0 is defined, the rest are reserved and should be
	                      left zeroes */
}

@(default_calling_convention="c", link_prefix="curl_")
foreign lib {
	easy_init    :: proc() -> ^CURL ---
	easy_setopt  :: proc(curl: ^CURL, option: option, #c_vararg args: ..any) -> code ---
	easy_perform :: proc(curl: ^CURL) -> code ---
	easy_cleanup :: proc(curl: ^CURL) ---


	/*
	 * NAME curl_easy_getinfo()
	 *
	 * DESCRIPTION
	 *
	 * Request internal information from the curl session with this function.
	 * The third argument MUST be pointing to the specific type of the used option
	 * which is documented in each manpage of the option. The data pointed to
	 * will be filled in accordingly and can be relied upon only if the function
	 * returns CURLE_OK. This function is intended to get used *AFTER* a performed
	 * transfer, all results from this function are undefined until the transfer
	 * is completed.
	 */
	easy_getinfo :: proc(curl: ^CURL, info: INFO, #c_vararg args: ..any) -> code ---


	/*
	 * NAME curl_easy_duphandle()
	 *
	 * DESCRIPTION
	 *
	 * Creates a new curl session handle with the same options set for the handle
	 * passed in. Duplicating a handle could only be a matter of cloning data and
	 * options, internal state info and things like persistent connections cannot
	 * be transferred. It is useful in multithreaded applications when you can run
	 * curl_easy_duphandle() for each new thread to avoid a series of identical
	 * curl_easy_setopt() invokes in every thread.
	 */
	easy_duphandle :: proc(curl: ^CURL) -> ^CURL ---

	/*
	 * NAME curl_easy_reset()
	 *
	 * DESCRIPTION
	 *
	 * Re-initializes a curl handle to the default values. This puts back the
	 * handle to the same state as it was in when it was just created.
	 *
	 * It does keep: live connections, the Session ID cache, the DNS cache and the
	 * cookies.
	 */
	easy_reset :: proc(curl: ^CURL) ---

	/*
	 * NAME curl_easy_recv()
	 *
	 * DESCRIPTION
	 *
	 * Receives data from the connected socket. Use after successful
	 * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
	 */
	easy_recv :: proc(curl: ^CURL, buffer: rawptr, buflen: c.size_t, n: ^c.size_t) -> code ---

	/*
	 * NAME curl_easy_send()
	 *
	 * DESCRIPTION
	 *
	 * Sends data over the connected socket. Use after successful
	 * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
	 */
	easy_send :: proc(curl: ^CURL, buffer: rawptr, buflen: c.size_t, n: ^c.size_t) -> code ---


	/*
	 * NAME curl_easy_upkeep()
	 *
	 * DESCRIPTION
	 *
	 * Performs connection upkeep for the given session handle.
	 */
	easy_upkeep :: proc(curl: ^CURL) -> code ---
}