-
Notifications
You must be signed in to change notification settings - Fork 72
/
libcurl.ahk
489 lines (428 loc) · 19.9 KB
/
libcurl.ahk
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
CurlGlobalInit( Location = "", flags = 3 )
{
global hCurlModule := DllCall( "LoadLibrary", "str", Location = "" ? "libcurl.dll" : (Location . ".dll") )
if ( !hCurlModule || ErrorLevel )
return -1
global CurlDllName
if ( Location = "" )
CurlDllName = libcurl
else
{
StringGetPos, Pos, Location, \, R ; Find the last slash.
if ( ErrorLevel )
CurlDllName := Location ; No path specified.
else
CurlDllName := SubStr( Location, Pos + 2 )
}
; #define CURL_GLOBAL_SSL (1<<0)
; #define CURL_GLOBAL_WIN32 (1<<1)
; #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
; #define CURL_GLOBAL_NOTHING 0
; #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
global CurlShowErrors
code := DllCall( "libcurl\curl_global_init", "UInt", flags )
if ( code != 0 && CurlShowErrors )
MsgBox, 16, Error, % "curl_global_init: " CurlEasyStrError( code ) ;%
return code
}
CurlFreeLibrary()
{
global hCurlModule
return DllCall( "FreeLibrary", "UInt", hCurlModule )
}
CurlEasyInit()
{
global CurlDllName
return DllCall( CurlDllName "\curl_easy_init" )
}
CurlEasyReset( EasyHandle )
{
global CurlDllName
DllCall( CurlDllName "\curl_easy_reset", "UInt", EasyHandle )
}
CurlEasyCleanup( EasyHandle )
{
global CurlDllName
DllCall( CurlDllName "\curl_easy_cleanup", "UInt", EasyHandle )
}
CurlShowErrors( Yes = true )
{
global CurlShowErrors := Yes
}
CurlEasySetOption( EasyHandle, Option, Parameter )
{
global CurlDllName
; For a list of options, go to http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
If Parameter is integer
return DllCall( CurlDllName "\curl_easy_setopt", "UInt", EasyHandle, "UInt", Option, "UInt", Parameter, "Cdecl" )
else
return DllCall( CurlDllName "\curl_easy_setopt", "UInt", EasyHandle, "UInt", Option, "UInt", &Parameter, "Cdecl" )
}
CurlSlistAppend( ByRef pSlist, String )
{
if ( pSlist = "" )
pSlist = 0
global CurlDllName
pSlist := DllCall( CurlDllName "\curl_slist_append", "UInt", pSlist, "UInt", &String, "Cdecl" )
return pSlist
}
CurlSlistFreeAll( ByRef pSlist )
{
global CurlDllName
DllCall( CurlDllName "\curl_slist_free_all", "UInt", pSlist, "Cdecl" )
pSlist = 0
}
CurlFormAdd( ByRef pFirstItem, ByRef pLastItem, Option1, Value1, Option2, Value2 = 0, Option3 = 0, Value3 = 0, Option4 = 0, Value4 = 0, Option5 = 0, Value5 = 0, Option6 = 0, Value6 = 0, Option7 = 0, Value7 = 0, Option8 = 0, Value8 = 0 )
{
if ( pFirstItem = 0 || pLastItem = 0 )
{
VarSetCapacity( pFirstItem, 4, 0 )
VarSetCapacity( pLastItem, 4, 0 )
}
Loop, 8
{
if Value%A_Index% is not integer
{
; Convert strings to string pointers.
Value%A_Index%String := Value%A_Index%
Value%A_Index% := &Value%A_Index%String
}
}
global CurlDllName
;global CurlShowErrors
; No need to omit empty variables here. It is unaware of all parameters after CURLFORM_END.
RetVal := DllCall( CurlDllName "\curl_formadd", "UInt", &pFirstItem, "UInt", &pLastItem, "UInt", Option1, "UInt", Value1, "UInt", Option2, "UInt", Value2, "UInt", Option3, "UInt", Value3, "UInt", Option4, "UInt", Value4, "UInt", Option5, "UInt", Value5, "UInt", Option6, "UInt", Value6, "UInt", Option7, "UInt", Value7, "UInt", Option8, "UInt", Value8, "Cdecl" )
; if ( ErrorLevel && CurlShowErrors )
; MsgBox, 16, Error, %CurlDllName%\curl_formadd() failed with error level %ErrorLevel%.
return RetVal
}
CurlFormFree( pFirstItem )
{
global CurlDllName
DllCall( CurlDllName "\curl_formfree", "UInt", pFirstItem, "Cdecl" )
}
CurlEasyPerform( EasyHandle )
{
global CurlDllName
return DllCall( CurlDllName "\curl_easy_perform", "UInt", EasyHandle, "Cdecl" )
}
CurlEasyGetinfo( EasyHandle, Information )
{
global ; May be unneeded now. I used to use the CURLINFO variables directly.
local Type := CurlGetInfoType( Information )
local Value
; Everything but double is 4 bytes.
VarSetCapacity( Value, Type = 0x300000 ? 8 : 4 ) ; CURLINFO_DOUBLE
local Error := DllCall( CurlDllName "\curl_easy_getinfo", "UInt", EasyHandle, "UInt", Information, "UInt", &Value, "Cdecl" )
if ( ErrorLevel )
return ""
if ( Error != 0 )
{
if ( CurlShowErrors )
MsgBox, 16, Error, % "curl_easy_getinfo: " CurlEasyStrError( Error ) ;%
return ""
}
if ( Information < 0x200000 ) ; CURLINFO_LONG
return DllCall( "MulDiv", "Int", NumGet( Value ), "Int", 1, "Int", 1, "Str" ) ; STRING
else
{
if ( Information < 0x300000 ) ; CURLINFO_DOUBLE
return NumGet( Value ) ; LONG
else
{
if ( Information < 0x400000 ) ; CURLINFO_SLIST
return NumGet( Value, 0, "Double" ) ; DOUBLE
else
return NumGet( Value ) ; SLIST
}
}
}
CurlEasyStrError( ErrorCode )
{
global CurlDllName
return DllCall( CurlDllName "\curl_easy_strerror", "UInt", ErrorCode, "Cdecl Str" )
}
CurlEasyEscape( EasyHandle, URL )
{
global CurlDllName
return CurlFreeGet( DllCall( CurlDllName "\curl_easy_escape", "UInt", EasyHandle, "Str", URL, "UInt", 0, "Cdecl" ) )
; "If the length argument is set to 0 (zero), curl_easy_escape() uses strlen() on the input url to find out the size."
}
CurlEasyUnescape( EasyHandle, URL )
{
global CurlDllName
return CurlFreeGet( DllCall( CurlDllName "\curl_easy_unescape", "UInt", EasyHandle, "Str", URL, "UInt", 0, "UInt", 0, "Cdecl" ) )
}
CurlVersion()
{
global CurlDllName
; lol?
; Return DllCall( "MulDiv", "Int", DllCall( CurlDllName "\curl_version" ), "Int",1, "Int",1, "str" )
Return DllCall( CurlDllName "\curl_version", "Str" )
}
; If the manual says a function must "must curl_free() the returned string when you're done with it,"
; set the call to return as a pointer instead of a string, then wrap this function around it.
CurlFreeGet( pString )
{
; AHK needz a string dereferencing operator. Why do I have to trick it with a dllcall?
LocalCopy := DllCall( "MulDiv", "Int", pString, "Int", 1, "Int", 1, "Str" )
global CurlDllName
DllCall( CurlDllName "\curl_free", "UInt", pString, Cdecl )
return LocalCopy
}
MergeDouble( l, h )
{
VarSetCapacity( Value, 8, 0 )
NumPut( l, Value, 0 ), NumPut( h, Value, 4 )
return NumGet( Value, 0, "Double" )
}
CurlGetInfoType( Information )
{
if ( Information < 0x200000 ) ; CURLINFO_LONG
return 0x100000 ; CURLINFO_STRING
else
{
if ( Information < 0x300000 ) ; CURLINFO_DOUBLE
return 0x200000 ; CURLINFO_LONG
else
{
if ( Information < 0x400000 ) ; CURLINFO_SLIST
return 0x300000 ; CURLINFO_DOUBLE
else
return 0x400000 ; CURLINFO_SLIST
}
}
}
CurlGetInfoDefine( All = true )
{
global
CURLINFO_STRING := 0x100000
CURLINFO_LONG := 0x200000
CURLINFO_DOUBLE := 0x300000
CURLINFO_SLIST := 0x400000
if ( !All )
return
CURLINFO_EFFECTIVE_URL = 1048577 ; CURLINFO_STRING + 1
CURLINFO_RESPONSE_CODE = 2097154 ; CURLINFO_LONG + 2
CURLINFO_TOTAL_TIME = 3145731 ; CURLINFO_DOUBLE + 3
CURLINFO_NAMELOOKUP_TIME = 3145732 ; CURLINFO_DOUBLE + 4
CURLINFO_CONNECT_TIME = 3145733 ; CURLINFO_DOUBLE + 5
CURLINFO_PRETRANSFER_TIME = 3145734 ; CURLINFO_DOUBLE + 6
CURLINFO_SIZE_UPLOAD = 3145735 ; CURLINFO_DOUBLE + 7
CURLINFO_SIZE_DOWNLOAD = 3145736 ; CURLINFO_DOUBLE + 8
CURLINFO_SPEED_DOWNLOAD = 3145737 ; CURLINFO_DOUBLE + 9
CURLINFO_SPEED_UPLOAD = 3145738 ; CURLINFO_DOUBLE + 10
CURLINFO_HEADER_SIZE = 2097163 ; CURLINFO_LONG + 11
CURLINFO_REQUEST_SIZE = 2097164 ; CURLINFO_LONG + 12
CURLINFO_SSL_VERIFYRESULT = 2097165 ; CURLINFO_LONG + 13
CURLINFO_FILETIME = 2097166 ; CURLINFO_LONG + 14
CURLINFO_CONTENT_LENGTH_DOWNLOAD = 3145743 ; CURLINFO_DOUBLE + 15
CURLINFO_CONTENT_LENGTH_UPLOAD = 3145744 ; CURLINFO_DOUBLE + 16
CURLINFO_STARTTRANSFER_TIME = 3145745 ; CURLINFO_DOUBLE + 17
CURLINFO_CONTENT_TYPE = 1048594 ; CURLINFO_STRING + 18
CURLINFO_REDIRECT_TIME = 3145747 ; CURLINFO_DOUBLE + 19
CURLINFO_REDIRECT_COUNT = 2097172 ; CURLINFO_LONG + 20
CURLINFO_PRIVATE = 1048597 ; CURLINFO_STRING + 21
CURLINFO_HTTP_CONNECTCODE = 2097174 ; CURLINFO_LONG + 22
CURLINFO_HTTPAUTH_AVAIL = 2097175 ; CURLINFO_LONG + 23
CURLINFO_PROXYAUTH_AVAIL = 2097176 ; CURLINFO_LONG + 24
CURLINFO_OS_ERRNO = 2097177 ; CURLINFO_LONG + 25
CURLINFO_NUM_CONNECTS = 2097178 ; CURLINFO_LONG + 26
CURLINFO_SSL_ENGINES = 4194331 ; CURLINFO_SLIST + 27
CURLINFO_COOKIELIST = 4194332 ; CURLINFO_SLIST + 28
CURLINFO_LASTSOCKET = 2097181 ; CURLINFO_LONG + 29
CURLINFO_FTP_ENTRY_PATH = 1048606 ; CURLINFO_STRING + 30
}
CurlEasyGetOptionType( Option )
{
global
if ( Option < 10000 ) ; CURLOPTTYPE_OBJECTPOINT
return 0 ; CURLOPTTYPE_LONG
else
{
if ( Option < 20000 ) ; CURLOPTTYPE_FUNCTIONPOINT
return 10000 ; CURLOPTTYPE_OBJECTPOINT
else
{
if ( Option < 30000 ) ; CURLOPTTYPE_OFF_T
return 20000 ; CURLOPTTYPE_FUNCTIONPOINT
else
return 30000 ; CURLOPTTYPE_OFF_T
}
}
}
CurlEasyDefineOptions( All = true )
{
global
CURLOPTTYPE_LONG = 0
CURLOPTTYPE_OBJECTPOINT = 10000
CURLOPTTYPE_FUNCTIONPOINT = 20000
CURLOPTTYPE_OFF_T = 30000
CURL_ERROR_SIZE = 256
if ( !All )
return
CURLFORM_COPYNAME = 1
CURLFORM_PTRNAME = 2
CURLFORM_NAMELENGTH = 3
CURLFORM_COPYCONTENTS = 4
CURLFORM_PTRCONTENTS = 5
CURLFORM_CONTENTSLENGTH = 6
CURLFORM_FILECONTENT = 7
CURLFORM_ARRAY = 8
CURLFORM_FILE = 10
CURLFORM_BUFFER = 11
CURLFORM_BUFFERPTR = 12
CURLFORM_BUFFERLENGTH = 13
CURLFORM_CONTENTTYPE = 14
CURLFORM_CONTENTHEADER = 15
CURLFORM_FILENAME = 16
CURLFORM_END = 17
CURLOPT_FILE = 10001 ; 1 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_URL = 10002 ; 2 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_PORT = 3 ; 3 + CURLOPTTYPE_LONG
CURLOPT_PROXY = 10004 ; 4 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_USERPWD = 10005 ; 5 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_PROXYUSERPWD = 10006 ; 6 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_RANGE = 10007 ; 7 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_INFILE = 10009 ; 9 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_ERRORBUFFER = 10010 ; 10 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_WRITEFUNCTION = 20011 ; 11 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_READFUNCTION = 20012 ; 12 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_TIMEOUT = 13 ; 13 + CURLOPTTYPE_LONG
CURLOPT_INFILESIZE = 14 ; 14 + CURLOPTTYPE_LONG
CURLOPT_POSTFIELDS = 10015 ; 15 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_REFERER = 10016 ; 16 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_FTPPORT = 10017 ; 17 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_USERAGENT = 10018 ; 18 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_LOW_SPEED_LIMIT = 19 ; 19 + CURLOPTTYPE_LONG
CURLOPT_LOW_SPEED_TIME = 20 ; 20 + CURLOPTTYPE_LONG
CURLOPT_RESUME_FROM = 21 ; 21 + CURLOPTTYPE_LONG
CURLOPT_COOKIE = 10022 ; 22 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_HTTPHEADER = 10023 ; 23 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_HTTPPOST = 10024 ; 24 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSLCERT = 10025 ; 25 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_KEYPASSWD = 10026 ; 26 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_CRLF = 27 ; 27 + CURLOPTTYPE_LONG
CURLOPT_QUOTE = 10028 ; 28 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_WRITEHEADER = 10029 ; 29 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_COOKIEFILE = 10031 ; 31 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSLVERSION = 32 ; 32 + CURLOPTTYPE_LONG
CURLOPT_TIMECONDITION = 33 ; 33 + CURLOPTTYPE_LONG
CURLOPT_TIMEVALUE = 34 ; 34 + CURLOPTTYPE_LONG
CURLOPT_CUSTOMREQUEST = 10036 ; 36 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_STDERR = 10037 ; 37 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_POSTQUOTE = 10039 ; 39 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_WRITEINFO = 10040 ; 40 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_VERBOSE = 41 ; 41 + CURLOPTTYPE_LONG
CURLOPT_HEADER = 42 ; 42 + CURLOPTTYPE_LONG
CURLOPT_NOPROGRESS = 43 ; 43 + CURLOPTTYPE_LONG
CURLOPT_NOBODY = 44 ; 44 + CURLOPTTYPE_LONG
CURLOPT_FAILONERROR = 45 ; 45 + CURLOPTTYPE_LONG
CURLOPT_UPLOAD = 46 ; 46 + CURLOPTTYPE_LONG
CURLOPT_POST = 47 ; 47 + CURLOPTTYPE_LONG
CURLOPT_DIRLISTONLY = 48 ; 48 + CURLOPTTYPE_LONG
CURLOPT_APPEND = 50 ; 50 + CURLOPTTYPE_LONG
CURLOPT_NETRC = 51 ; 51 + CURLOPTTYPE_LONG
CURLOPT_FOLLOWLOCATION = 52 ; 52 + CURLOPTTYPE_LONG
CURLOPT_TRANSFERTEXT = 53 ; 53 + CURLOPTTYPE_LONG
CURLOPT_PUT = 54 ; 54 + CURLOPTTYPE_LONG
CURLOPT_PROGRESSFUNCTION = 20056 ; 56 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_PROGRESSDATA = 10057 ; 57 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_AUTOREFERER = 58 ; 58 + CURLOPTTYPE_LONG
CURLOPT_PROXYPORT = 59 ; 59 + CURLOPTTYPE_LONG
CURLOPT_POSTFIELDSIZE = 60 ; 60 + CURLOPTTYPE_LONG
CURLOPT_HTTPPROXYTUNNEL = 61 ; 61 + CURLOPTTYPE_LONG
CURLOPT_INTERFACE = 10062 ; 62 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_KRBLEVEL = 10063 ; 63 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSL_VERIFYPEER = 64 ; 64 + CURLOPTTYPE_LONG
CURLOPT_CAINFO = 10065 ; 65 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_MAXREDIRS = 68 ; 68 + CURLOPTTYPE_LONG
CURLOPT_FILETIME = 69 ; 69 + CURLOPTTYPE_LONG
CURLOPT_TELNETOPTIONS = 10070 ; 70 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_MAXCONNECTS = 71 ; 71 + CURLOPTTYPE_LONG
CURLOPT_CLOSEPOLICY = 72 ; 72 + CURLOPTTYPE_LONG
CURLOPT_FRESH_CONNECT = 74 ; 74 + CURLOPTTYPE_LONG
CURLOPT_FORBID_REUSE = 75 ; 75 + CURLOPTTYPE_LONG
CURLOPT_RANDOM_FILE = 10076 ; 76 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_EGDSOCKET = 10077 ; 77 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_CONNECTTIMEOUT = 78 ; 78 + CURLOPTTYPE_LONG
CURLOPT_HEADERFUNCTION = 20079 ; 79 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_HTTPGET = 80 ; 80 + CURLOPTTYPE_LONG
CURLOPT_SSL_VERIFYHOST = 81 ; 81 + CURLOPTTYPE_LONG
CURLOPT_COOKIEJAR = 10082 ; 82 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSL_CIPHER_LIST = 10083 ; 83 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_HTTP_VERSION = 84 ; 84 + CURLOPTTYPE_LONG
CURLOPT_FTP_USE_EPSV = 85 ; 85 + CURLOPTTYPE_LONG
CURLOPT_SSLCERTTYPE = 10086 ; 86 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSLKEY = 10087 ; 87 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSLKEYTYPE = 10088 ; 88 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSLENGINE = 10089 ; 89 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSLENGINE_DEFAULT = 90 ; 90 + CURLOPTTYPE_LONG
CURLOPT_DNS_USE_GLOBAL_CACHE = 91 ; 91 + CURLOPTTYPE_LONG
CURLOPT_DNS_CACHE_TIMEOUT = 92 ; 92 + CURLOPTTYPE_LONG
CURLOPT_PREQUOTE = 10093 ; 93 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_DEBUGFUNCTION = 20094 ; 94 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_DEBUGDATA = 10095 ; 95 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_COOKIESESSION = 96 ; 96 + CURLOPTTYPE_LONG
CURLOPT_CAPATH = 10097 ; 97 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_BUFFERSIZE = 98 ; 98 + CURLOPTTYPE_LONG
CURLOPT_NOSIGNAL = 99 ; 99 + CURLOPTTYPE_LONG
CURLOPT_SHARE = 10100 ; 100 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_PROXYTYPE = 101 ; 101 + CURLOPTTYPE_LONG
CURLOPT_ENCODING = 10102 ; 102 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_PRIVATE = 10103 ; 103 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_HTTP200ALIASES = 10104 ; 104 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_UNRESTRICTED_AUTH = 105 ; 105 + CURLOPTTYPE_LONG
CURLOPT_FTP_USE_EPRT = 106 ; 106 + CURLOPTTYPE_LONG
CURLOPT_HTTPAUTH = 107 ; 107 + CURLOPTTYPE_LONG
CURLOPT_SSL_CTX_FUNCTION = 20108 ; 108 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_SSL_CTX_DATA = 10109 ; 109 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_FTP_CREATE_MISSING_DIRS = 110 ; 110 + CURLOPTTYPE_LONG
CURLOPT_PROXYAUTH = 111 ; 111 + CURLOPTTYPE_LONG
CURLOPT_FTP_RESPONSE_TIMEOUT = 112 ; 112 + CURLOPTTYPE_LONG
CURLOPT_IPRESOLVE = 113 ; 113 + CURLOPTTYPE_LONG
CURLOPT_MAXFILESIZE = 114 ; 114 + CURLOPTTYPE_LONG
CURLOPT_INFILESIZE_LARGE = 30115 ; 115 + CURLOPTTYPE_OFF_T
CURLOPT_RESUME_FROM_LARGE = 30116 ; 116 + CURLOPTTYPE_OFF_T
CURLOPT_MAXFILESIZE_LARGE = 30117 ; 117 + CURLOPTTYPE_OFF_T
CURLOPT_NETRC_FILE = 10118 ; 118 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_USE_SSL = 119 ; 119 + CURLOPTTYPE_LONG
CURLOPT_POSTFIELDSIZE_LARGE = 30120 ; 120 + CURLOPTTYPE_OFF_T
CURLOPT_TCP_NODELAY = 121 ; 121 + CURLOPTTYPE_LONG
CURLOPT_FTPSSLAUTH = 129 ; 129 + CURLOPTTYPE_LONG
CURLOPT_IOCTLFUNCTION = 20130 ; 130 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_IOCTLDATA = 10131 ; 131 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_FTP_ACCOUNT = 10134 ; 134 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_COOKIELIST = 10135 ; 135 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_IGNORE_CONTENT_LENGTH = 136 ; 136 + CURLOPTTYPE_LONG
CURLOPT_FTP_SKIP_PASV_IP = 137 ; 137 + CURLOPTTYPE_LONG
CURLOPT_FTP_FILEMETHOD = 138 ; 138 + CURLOPTTYPE_LONG
CURLOPT_LOCALPORT = 139 ; 139 + CURLOPTTYPE_LONG
CURLOPT_LOCALPORTRANGE = 140 ; 140 + CURLOPTTYPE_LONG
CURLOPT_CONNECT_ONLY = 141 ; 141 + CURLOPTTYPE_LONG
CURLOPT_CONV_FROM_NETWORK_FUNCTION = 20142 ; 142 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_CONV_TO_NETWORK_FUNCTION = 20143 ; 143 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_CONV_FROM_UTF8_FUNCTION = 20144 ; 144 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_MAX_SEND_SPEED_LARGE = 30145 ; 145 + CURLOPTTYPE_OFF_T
CURLOPT_MAX_RECV_SPEED_LARGE = 30146 ; 146 + CURLOPTTYPE_OFF_T
CURLOPT_FTP_ALTERNATIVE_TO_USER = 10147 ; 147 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SOCKOPTFUNCTION = 20148 ; 148 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_SOCKOPTDATA = 10149 ; 149 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSL_SESSIONID_CACHE = 150 ; 150 + CURLOPTTYPE_LONG
CURLOPT_SSH_AUTH_TYPES = 151 ; 151 + CURLOPTTYPE_LONG
CURLOPT_SSH_PUBLIC_KEYFILE = 10152 ; 152 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_SSH_PRIVATE_KEYFILE = 10153 ; 153 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_FTP_SSL_CCC = 154 ; 154 + CURLOPTTYPE_LONG
CURLOPT_TIMEOUT_MS = 155 ; 155 + CURLOPTTYPE_LONG
CURLOPT_CONNECTTIMEOUT_MS = 156 ; 156 + CURLOPTTYPE_LONG
CURLOPT_HTTP_TRANSFER_DECODING = 157 ; 157 + CURLOPTTYPE_LONG
CURLOPT_HTTP_CONTENT_DECODING = 158 ; 158 + CURLOPTTYPE_LONG
CURLOPT_NEW_FILE_PERMS = 159 ; 159 + CURLOPTTYPE_LONG
CURLOPT_NEW_DIRECTORY_PERMS = 160 ; 160 + CURLOPTTYPE_LONG
CURLOPT_POST301 = 161 ; 161 + CURLOPTTYPE_LONG
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 = 10162 ; 162 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_OPENSOCKETFUNCTION = 20163 ; 163 + CURLOPTTYPE_FUNCTIONPOINT
CURLOPT_OPENSOCKETDATA = 10164 ; 164 + CURLOPTTYPE_OBJECTPOINT
CURLOPT_COPYPOSTFIELDS = 10165 ; 165 + CURLOPTTYPE_OBJECTPOINT
; YEA, WUT NAO?
}