2
0
mirror of https://codeberg.org/kiss-community/repo synced 2024-07-04 15:02:27 +00:00

curl: ship docs to avoid perl dependency

closes #180
This commit is contained in:
Owen Rafferty 2024-03-15 21:55:33 -05:00
parent 86a79dedbb
commit 4ca86088e3
No known key found for this signature in database
500 changed files with 43794 additions and 0 deletions

View File

@ -1 +1,499 @@
09c6e7c7ab6caf8d3efedfc312ff159cf372fe7978778aa266ddd8743e8038561e
698d1d5bcb06ac48a25d2a333b64371f0a32bd8dd08f7b328e84b3442d84df8330
69ffa90dbc5e3aa317785ae07344a1f0c36a2b76fab110be0b143744941708b94e
dae3dd4d012a133b005b4f1efb604ffd5483bfb647ea13da0ae8ea668bb2aa4ee1
3d8f1e8abb7e20bfd874b1b9bd731db95d5cf7d5348a57fb3a607e852a70f8f6c9
ac1f313953ee34d3bf822140fe33793944a3f21b46b1e1a68868c0f1a38e2b6f71
0eb656e0ddbde773e8913b691ae6ab28cc1f13450c2face434b0c45c2fec290bc7
579d5f32d181b8ccca4165290330a4efb45af62cb7c56c9c0bb414a1b41851c3c2
5b29935f972c167b30d7eb05e36048c281282a007dafcb0234f57199f731b418df
69d1a7f763f1d7cbff080df831e6f22d3a563877afe14e3607d1a88e918e34fac5
7ea3a9c03cf3a0a1971fa3a406a24c3c1e65002fed7693520d4dc5465f8f29be68
d009dd238ffa8a5ca4f5b913d99072c03961eebe17dcb3921174d95c7bd54064b0
cababca31383bd4a37ae71659b82be4d6945f9c265d60bb7e5884fdbd4977b53eb
68b4826413f006202d04e792dfcc2e52451ff9225ea8d554a022ac2c301ca6438f
d2b6800e5954edbd50eea48895e881a417e8691b3e600689228f0c13b5028d348c
7e08abdb5176cd121072c63d5214c55f8334b92e57257bd312722ca2e8f2967e1a
29e4d1084cbbf282866de7c67fa0207b39da0ed39234e1445be772d1a3aacf9fab
689b6e46e6ff9a148946482ab724ddd60a6a74424fa8ca5678471c7111244d096b
3537d8cd7cfecaf2fcf5cd0972eaf8ede8c590b95da56e6b75479becc88ecb884d
2e59c2b7b209e1697d6edba89cdc3e91875ec54c34f71bb3cf6989c11875744886
e7fc447656e567082ac763fa4f1ef13927ddd584d2eb6160113d3abb3ac37bc75a
bdb5db611a0bc77f3576e4236150eed62bf90f0eb491cc5cf222bc6e1710d1bb4f
8928e51f3040d4a4d0a8f0eecea52f97313c67c5976f270da9219313cf2e97e651
3164de3d26f75c67c979006f93e6c9c4de2334e8bf9066ac258c3cf3d159291f77
08598aa9a4327be7c0474c70aef26e6eb0d785f7e99e0aebfc9bc2fc8879ea030f
6c05cc971aa14238b4903e67d215949b8fde2201f10caf59877a07001d48c5e791
916d94abf0bfa8d4beb066eeef309ca25baefce534d252d428bf247b33d7d62d22
ec1113b930e192619511d909b2bffcbe7016c6d8e232787c7daa941b75f68cbad7
49a1341bc03ca5b49636802bbd4e0a1fc8f2a7ecbaf70f3c0d92eedc63fb23f502
b0f16c004b52a1d89c4c24b32d99f8ff56797232acbefdbb4f39bb752396004a40
9ca051f13abbe138a48e0f336f28b68db8e1acdaf40e0837ef3cbab0e7d351f24d
ebb7f9671674458e41280852eff1707de966d7d55290d1abb7447959ede4608f48
f591769ceaf61c515acd41e5dce3611462c7fdca0224f85ab93d6fbcac56ff96a3
b1340ddd4aede44d4dc215ae1f5e807a0c306771a0bbce3ff4eac279c2709011d6
0c10e497bdcfcc80f2783b3167505635e3a9ece6acb73012dfc81812498564aa92
dbd18a62b886255252523cd2e6720411c150f2d5f5a3da2512a1ffabef55944d99
54202967341eb6c1c3f24e2c54097976bd9cc644d59094582b94344d590d54dc68
b55f0cdac36e7d5b57e088d7eef477ead301095eea97f6ac1e936aa918a71c68ab
19f5ccd49dfddb29eff089e74e2ced3f905d3818651917cbb07eb8ac6068d60abf
d05861b97b8e857e2ae5bd2713d3b801097eec960196141e7f8cac72fe3a2490a4
0f7b93ceb11f3ff7535ec63fae7b6d9f849a4ee3f76a264eb28646be8dd3eae27d
b352d88d0e4f1cd481445ab53030b7b3ce7e289b482e63c503151872aa8cff9eb0
1ba5ccbced9a5a2ffff81eaa5467c055e37bc944417e40a0ff2e434d021140162a
5edc1e4ed651e17dfb16c1cbbd1bd2ffd17fbb7a7b7d05ac8e226e975dd92aa4d5
e2a9f8a1a1fd82c86ffb793eff356ceb0e0cf4a1acbf3a7c9534e76fa20494745d
c5f8b3e768abd6e53c47aa96eb0a6e6ee084ab9516939ba7572bb1634225965ad0
f9a06baa6b44df4bcb8e03556a9729b324afbe9b7dfde658c17b0f2e3f45124019
85cea9ff118d2f907ab26bfa7d494f30e473869470b45fe98208132174229acbe6
ea8eb290fc4946e8de22c0012c42fa6e726a7503cd96047ef004876d488a0e6794
c3c1ca4f85a676735110529881c308cb6a70aefb977a720d5049d0f4ac5195c3f1
70bfb28c6963f731f95fd0b3ef0cbe993c2a908c40ad25f88ca1aa22350262bf94
db93211ba4a7435904ea2098f68ba50bf8af8199a39430c7088f1d46d2b338273a
febd3db535df4e522ca889a38886d8cd0763593874828752b9e1387ce6f929871e
4bd08aeef9b6cb93a3fbfbe2dd7c1ba74a8d2ce1350c11282ae37fd4922c46a3d1
d066ff859d0285f46611dca540eb5a104c73e3d399735d5bff0bb7fd9ab05dfa3a
4addcd8567ff49eb62ef573c9c1fb0c8ee265462eddf62957ca7a86c82bbc0a470
c3d9e84f346419b03845216766a9436a920e18e9ef8bb8149d2ffc3e0aaf417f35
8963ec9ed888606be30b7574be659ee1e48896ccfd800d812a356518cc94aba723
5f2e6a9cd310687441197636538b1b70ec8c366b3d0fbdecbb1775056bf6fb2b63
1d450da910860e64c50d375bb60c5fde53e6f7a69404bc81b5d4d7e44ce12421f8
179b8943a30bd98d336abc658f3b88c7832b4c64d7517a5a8de3c1e4517ed9538e
beb74fa12039f68fccc1152699c1f33288a06c241598c62b197eb2b5f5ec330d3b
9fc30dc8693ea839927c933c4344b86188a22c3a2e407906033469455f9ac59b5b
665ce68feb46245078936ff6a5b7782c1d71c57610f6ede88d4b176f831ac8a86f
990c72ff4dda6891ce0b37d1f7bf973503f9b80dadffa322ce2a5fedcc1584899f
fc0a41fca00d3b368deb0e51ba69a2bad1da07d45e5a2c19704947c6a0e8724b3d
4ca5ac818d2ace2de45b1c036a427223f6383025039a3306c973e85646e971d4ff
9ec45ccc1e592184e152ab768abf14fc406951f9131d647369417828efe8fa7cf9
21cbc8d362ed2a04370f1156966b48e8ddf9907c633d2bf0244e74bf1fb88fc330
3ffc9a69140b0a1646be4d80ed6a45c3552c6a41a50533c5dcf0d48304eef9b390
8ada02b7e85c869ca0b3a9da7742f95f4946ae6fc475f0fac8380926d6d2346faa
5f8ebf8fc1696d3748fdc43c810215c1d2929dfbfd51859049054c2054a5d71304
77c71b5b747b5e72fb48f9b6c1eede0b341474d789c30befc18b0b81daf751ac05
c39a7ff124625cf1a2659a4869e21141c7bbde897c4cdd95dd891acb1a06886c5e
05238a3338570cf9ccfb06eb3209790ed9fdae406fdc773bf9c4bc70bc36770701
f9114173f7d7b6bf24563861ec9bcf6abb5fef97724d73b23930e86cdc445b3250
30dd55312b9516dfe9400747ba8512a0a0a69badd07d58f81fadcfcfe4ab46d2fa
d45d7f8316e016ac4f0eb931ebc746e0acb3a09a89995e60a94ed0caa2749ab225
db7ae2a8df2bbd610d4392ca1dfe9db688d684abb269e7a57b2cb798ac11c5818b
a52efc5a2f00ab82ab42cd2dcc223789ec959c5439fd6a5a20e25c64fe3b5a4a08
fbf23274ca8e8d98b40357b8699d044ce26b6ad28f1e590947b6c969862facfdd8
f663a8081cc20bfbd70e2eedee61265f9ca480197b349efd6e8bd1ce7319f4e5aa
35d0f439b2ecabb91b1817ceb575bb657265e5ed3b4ea0a68b337337c484e25ae4
01f8e917bd12c59f844dfe55d731470960cacdd5a543352fd8389971875a4099c8
1ead79263e24f0333022859cd9b758b9626d252de29b9520588ee18897f37dac3c
edd93093f457d706987c2a2c4b840b5806dc948a46ca45680e56d3fde9f0f387d4
0c1b2bcf3b14bf2fa2b374e7fa809bb7955549b96118d3bd4078e00ee1030d00bf
8112d405d4a9a8110567fd5cdfd1e6588a299c990f7fbd5733eaf4d8c4d5d13192
8a170c89b146325a438e9eb76bc5a44ab768249543607009d558bf84400481db6b
9a3b82ba33aa8420ac2d8cdfdb7b69dff384a59af18c5b1ee99ec34c5ff1a5a1a8
a8f88a9fe78820eac1775b4b29064f35d25a4d07584b3ab588cc8ca397d37b926b
e5ef19dd6f68af022dd59781747cadd9ff92bf3147603b50317c88037abc248f35
2262d5726ec5a2ee9f1afedfa5929bb6109d3989a566d31c5410add76e393e7744
eac5216a153caf971007287979f46b79a1b81872b1ee9218fecf1df41d5bea223e
32f9d166f8ccfe23c4a46cc1337a97887e4b88faad5f74a41daf36c7d4331f3366
95397b110e9c3e2531cdb1c04787b5104cfd4a7d739f363a5dde3243d299409515
6af0a280d5c11816a7f4ac138e959b0831136a1da66f74725ba91411bf9bb03058
953a752b39abe38b90e16583db42a139539f8b3ebc2429c5dc3aadbc4337ae9a20
948cf892733a3f331fbdb83f3ec6b28b306bf1a052f5d0d932cebe6eeeae78b1a6
7ccc8a228bd971d41061ec8c2b1ec0d2f7f7e1d6021750366058e7e6b041e2b57b
f4f9605c644adfbe975a8a8bc2330f639640460116788fdd35f3694f1e230af040
d2bc4a630480fcf7258e0e5642c12fb05d1efbd69b11fbd92d84f436205ada64b0
bf1da90ca5cfc4266ab6f739e0165025fa323cae5d298e75ee94caa268892f8b66
da726bff9fb420bd44e7da63857cee459a4e600bce2eaea085ea8bd86e42521e0d
05588a6fce7cd88c46dad6dd4117166605dde8c72253b58123b6e9ff99f383bb3a
6ff52d4fe69443fed4c6fb28be9691a765aa535816519dd306e87c319b8f68f102
a233d9ccf43e22736e00b6037fabb2c8fe1f96d7fe5ed63aedaacb9c10cafa5817
aa930003e224af9a24a8cd123467a1ea7e49f705acd2f73a7c01d5fcf664c580b8
8023decaeecd3b5f6ac27aad53b368728562dfc764c61a626968d3c15047baccca
d1468d6ec344448cb6a2fd2aa97ed1b2a06982489c578484a7dbba7e44214741ea
8203d065f94432fcea819519b35ea1765d27aa2f55fdb97b6e60524be1663b2ccc
1a9b3337ce2a1e19d197d3d09927628312230efccd6efa771b273567054c2c9c5e
993650369373fb0f6b9f30185b60cb30939bc5946a2a1de1d73440c54a409d3fa0
f51a3b7d5ad651d3fd4481dc6f3c984e0014eee9a659cdf58b1376fc8fb415bdee
40703917fc438cf399a60df1e2e40603ba04ed2f573c267df8f08daf1bfe4417c6
0976bba87f762b9feea6f42d5cd9fdc7cf5135e3d03962dbf3bc6be75da8116a14
ab4708630a94f8aaecc50ed403695aca8355a24088b048e80cc048e00a08a6f7d6
97ae0c975d569717e818d83a999d68e8a5acb56249f21f391c2e638408f7dac3c5
e3f0aac0f868f4a4c0757e27897c3ee44452807f0e28c444014486aaac479df50a
4254b05077aa39175a09d3a7b668abb93b9951081fa25befe2d5462739590870fd
61146d1a6b4d6daa6443ae4adc9ba3e8de5cee3a2eea7ba6e6a2f331e392311676
a354e6abf8550bb35fafdd5ed782dccd2c5ef7c1a170fed5028b7aa7c00ac73c98
ecc8954a141394edf12a23e8a2dc70da89217ddeb7267a78c3b74d385aacfad652
539a6fb1891da6c44ec4c07d4d5c7d0cd2cb54acdb7aa88c7a9d9e437d60304fa2
67217cfc25cd40672723529f44e4666223a57f6c39ff6034b3a546533ca23afe5c
392241a32dd59c10aa0fbc2873cc6badae7ad8aa7b19678b1e6f850c6f788d46c3
1f70cbe9791db1ce0bdc53b3e5b9017a7210e3c61238ef39c9e9f3670c9b2efed0
efc752f91ecc2aee5a42fbe2b8fdc2168241fc173b4db6f1e109dc1cc403947905
0b2ba97c904cc827d668dea80ceac43c73c4b2e22c4184d040405abc9a60eed11d
9b4f34c1f8cdbfd87ecf06cf3bf7e97fe95d57250f0835fad0ce1a62287e4fd5d0
a5b3201119a69705e6de71ee273bb13c3e156d9017780fda77e4c4657f0e976fb1
e121107746db5f4eec83db277d136d7796e8242b161081911ec08b4d8f9d3cf724
1be301e9f11c06ed09a395b67f2a279d6e118f015dfa43959b955d2c36256fa033
6d6ea38610d0602ac44ee64a883606e840d56e21656360b34e8fc1ba7f22b4758c
85b013e9610b5c5320970839756686f2113f8c221202872843cad046b73924ccac
b84a7a9d356b3bf1bfe3a170f89f29a2f041230eb14f5452fad0850f321f8b11bf
0935c7c7fb07ef3cbb75ccae7ad14d27e304405063b9b9348b47ad96da56713ff1
f72a7f20bd368e5ea1535efc360078ee98f2e31534a3307c331a3c124ae09b5b0d
1273d5843df49ee570dfe6e213ff0caa834326ea28c18311a3716b1bcfb2a7e073
30fbb56463d75a70073b78f19db9973cda759722b6677f4cd332baf14871c1995c
42494554cf1b354878cf24546352637fbe3bc73b35d5a2d15e5cdc9a3cb59579af
99022369a34bafa4bb2df975033b214c4efc19d935201ddafd7126f29ee54c3162
161d37d6e05d90a51a42a4fbe104e8df154cbcb91a599dbf2f02370b6c20037870
921cb29230f9d19a7faed23742670e7ad76b66759d09cdc085d38a2e7424f4094f
6c0378035215dd581dfdae05bc87fe96bf57874f61dbf8ed4c4242f9922577d8f9
865178fe1492dd10f8fbe5c245bfd50fb92644a417053ef4f753c45c5a7104b31e
15ecad30768b1f42f08732789a4c06b31a1122a9bdc594eec2b44aba741daa7012
30a8b512d47ad639f2ec2d06cb363b83460344f1220e8e4801161b539ea71e4c5a
ffcb963f06fc7be73af04fa32ce867e96d446e52da421d902e393c4e7414377b9c
e95319ceb3d58615e008c9f600acabc5c27ada93015db9b8a73314748451f87327
b2d517000e55cf6ef637d4971d26b76442ccb3bf91cc35f72ead8c38a3dad91dfb
0b0666ef33bc0676acfc5db21e260635802c85361641e621d230094c614b6fabe9
42166c64edd0895e3570df454f64ee44a9cf88f45c9c3afd1e789619ac7e74d807
beb451a2cae57ab5c3f610a59e5b7160dc31c6b124c7aa5ee8d020be14b1637035
70948d8b0b38f110f3d1b0e909ea653d7962ee17dec3fe38275b55ff782627f468
713f4093b454c097ed169af45522faf9255f0b064b14cc6ef5205d8840add96add
99c30f07a300b810f0d2329c7b49612ee8b4cb44e71f8e5d19c39045a9e9ac17f3
ce1dfe7c27cc9d5f93b8224285bfde667f577a94de8ce94a214810876a24d3a209
51662ca96dad1990c0a6cd66297c7438fee6c49cd380c0eab8343ddf423b821e88
dc7fe2a4be344d17c339d2523eaabae6a5c897ccc07462a211767a4938f6a06e4d
605cfc366d875d067ca29f05e7ae4182804e6a5248acacd4eb63f484e4cc058531
1f29ade58f0e161d37b9d4b830d2ea36e648877479d6bfcf135f528ea7f3f604af
600ef765e37fb19fdc68c209c9a54a7754da4929085986e99f5b22304c1fa72e75
c434045f7332d3bfd5f81ab246e9f04eead5c637a5f39198016195bb8c6f756d5f
de01b2b78df7a61979df1f580af2ab16dbd36766a95afbe430207ed51355dbec33
3fa5646461c34c32effb024bd0eb90b4fb634510e3dc94956324d8ca583cb6a340
8969fc6a746e7d8b848ab0cec20862748a7b0d8516a8faf7c9fa63f34feff1506c
2b3ff14a8412031b68ee8a87f4de079a9042051c574b5397c61d1f88b3e378b197
2334e229d88d32bed0869b082db8f53f076b5f6c08775577433aa152c08ffd439a
2b18745f2daddfc91870afea1a9f44a04bd1b88bbdaaa24e6aea84ef803fa2b2b6
fecd93ea83883aba30356c417f7ac5e92e8f9a7b46328ad513ea0acd93eec231ac
5a776d4f88031a60108b04f2971dce709d847ae320beb043f9123cd504e4e0d5a1
246cc956b479c322025474fa65771218a3424bfdf4a6b295d16d2b6e735d30546a
ff3fd29d1acfab8c1a3b3ca23c84c04af4779a6381b80573d22407cbfe25a115f2
37b46b1de89148c85bae63a2eeb518e1dbc7e604b95530eafa6dab534a8be7c293
77d0a6e59204f32bb3e665541d7d69fc818b02baad9e446f085fbfa7208320037c
515eaa783da467f9a179ea032210ec794f4b6a824ffdcec78049f2a94ed7c6eac5
981f1a1111feb2050c4b032268252622731db37a9f2128399f844a9c3fab7c51a0
9a1363b4f3a96ed1b3cab38f1e1cd029bd1d1a9f64658293c38bef7b84cf25c799
3f8deadbd4f162797f2ca4e0b6954a2c8dc6fd6c17f70ec4c2936fabe66e3cca39
957e98019a040a236f41197858542222648e0de77919e6d0f8b4052a352c57cfbd
9eab81eb7f0f5189381e077fb966f5be31b15d24444bc4022a267694f7603e841d
0afef587b9ebe1d21c347b7236fe3f26148bfe26db4fde47077fcdcd5ec09ef730
fe4d4d97ba95e840c403e89ad382797222463aa21add73b893d39fa2efe80664ea
f49cb349652992fc9fc06c0dfe4440eae6811bdc653b43357960d0b9b9acff65ca
789593c82aec14ab6fb129291c08ad327bf9c9c319427017dca8f93cfd73c3f625
af81505ed53bfb39628181b809b378bcea416a2242fc10b821d4fe6df9e8a405bf
d01d652ac65d8b4d6dc953e30efcd440a96826d376395827eaae9397d8adcf02a8
3369365eb00286bc7573307ee8825ac9a95f1f2f481d2aa2c8a0e224b22a6d5c0d
ef75b1d4fea866ae71b28494ad2d7155a750b7b14563fb0ec91c9c547fc428f88c
d7242a7e5f5d56e268f20116136ad8f5ff0a2e86154564bfd2b23c7077757371d7
21e18467e09b1e32ed7c49aa5f7183110d2fa1411c6da2a1546a4cc746678a1e5a
ab9e864361050aa9be0076187f0a5dce994333b26cfa3ffbd23c6b450b598001eb
0123029e61dada4d60b15631b74b9b38de517813ac99b8be6f1336d969ee4b5c37
fcb2c1b974b9180480563d22621fd02ca9a91f812f434dcecbd6c9995488d96d3e
284b02226d8a7eb06faddef32669cdc023d5f7275fb2d9b281ecaa49e6bf594190
61525a7daefdc8aaf07b90c500713ff1dba47366a335d9b6a92e7b71643f9c918a
1f5dee5bd3dfb2bbc3a1bbb7067d466026e12178def76b9e3327fce1dccb00e9e0
e7bff9e5408cc25af7b664df8125f824f0462c1064a00808f96362c167411693c4
1ac832f21a4281b6bec66bf53d4d9f04262e24ffb63bd3ce5adcd6ffc9a081ffa4
d1f13311c02c6478586b3b8e9d22cdea7637089d055d91b7795c5a0bab04114d2f
380052f0052c71983df96dc8449c28bcd3035cad0934338e6d5ecc9e8257a2e122
5f30c3ac284b3612b750b21e3a0aef3aae56f77076ac19a6a7d9c0c47d3f6eb398
d32ce0ddd9242fdd26cbda5057e6334d3dfb983472a08a7cbd37dd4d9fc7222483
ebad454914feee6b3e3ae3dbb817d35768d61174c95c69babb23381b1cd9b000c9
26638985d925c16b25d6022bfb64be644070fa87eb9c665891cf26d73a1f527a99
fa879f1f7d6fda1a11d0a9ede952e634e466e03d14c889e0978e64a0488c169d4e
677ada851a8c27153b54cc3e0363f3b5a5abe7cd366bc7ef53f7eacf13a2f08e8f
8bfae607665c3449d93ebb35ec1d48fcd130e85ab16cf4bc98c7adcc41aa6dbcac
6e947bf220be727eb0f147ed70616dde00e1fec83437dbc78ce73237eed24ef7c9
f2910202b96628f910d8eafcaca11fa1a32d866e06cbf621ae73ee332f7f2927cb
d40aec16b5d8a0d9791573b01ef4e54e7ea780621136cbf28b1a4ba0232bc01656
bafff34c66f6d1c2a31f752138982d021fd33982ee0a8ec60f867958676f21ad44
d71634667250d1967755c0b8ebacc2b04fd29ec9eaafaa9b5d83356f92c8c3147d
a9e7aa34c73c9dcc352412e3d3e51e16d9f268cea57f4a378a1bbd5dea782ecd78
1f232153506de4279f291978d66cf272989dca91b368743ccbe3cc1ae31d09227d
25f884cf172b859be62a4ed7bace44901898730284e3b8332a4391e5ee158605a3
7f44678836c9796b1f0db697fbd45720829b11d0dde9f4135da180b523f0d825d3
b955697c49dfb7d060af2ef87845f6f5fb79d9573b78cd3a515b3045a838e96e58
bc51e4fc101a73c90843f413f6ed8b6a8aa82ab75e60ac80432e5d30c0a5807105
33d0bdac556424edc1e7d74cae2c519b7e6b94fc7dd3643333f42a87510baedc3d
19557ec0955978ae51d71b18f8ed16c749185bc13344568ea8ba779593fa54f59d
660fb3bb50ad293783e1d0756092b3c2a76fbf6a5707922e1bc5b04a4be8b988f0
6225e4e8df75560209a01e24e8e239dd6a6dfe808224ee40a2d8ae630a8dfd383b
e5772f8b5a1034d0baec4610603545f2ae5b6b10c70a84ed1f8a8399afbae41aff
23ce40fb24e92a0922b5404dd142e7e15c474b4b5ca0f4e3c605413516c54a1c4c
44bf42e611429de9f1551e273ac279bcb5bf44291576b560b980f5a9c8327aac5c
ad47854f55aecdba5f42b1a33650fe58b9ab18c94830061f58e4175dd81aa8a1ab
1411228a6b88673484fe922ddf68f67b75469a7b87324923167a24b8aaf836d3fb
ef7917419967394d36ddf3cf53ee67daa37ec691b5f512d2ee04144758fc3bbe4f
123d6a8efbc731ff7fa2cfba99d897336454f4c101b0b1a0addf5faa545c0dd217
ad4e0c3ad9df65772efcf7b1f67e26b727ec6b87271226ef8169c9de910f9718f6
0c211937dd65e3204796314029e25c01f7359af388c2b37ab8198e4a0e40cc9243
87dfb6c9961ac74d6499274da32e74da834a615c4e1654a3fabebf4c3d35947af6
1a64dc01c4e4df0bdcc503a4e4e1c224a50066a8c46212fb8d606a814aabf2232c
865c985eef9c7b3d122f9cfe4e6b4b21033daef6345ebc3e7f3e6dd016e2866681
1f04530c437a7add6591d9f18a2d304d840cec2ab0c620d9f4d0ac6ce13ca84fea
95749feeb3ca78d5f8346517e27b02d4c56edbe4ba65a9587278b759f1ccccae61
37b613eb01549c2bde08d472c1dd1086fc6bdae6a9ea3a06012a5f2bd4b6a3426f
705c8f96eb8018787738a8337c7e25e7a2ec0c871b7dd0b37c6be8fa7e6001e196
b1ef04e56e9be8bcf6f3865ed75e0caf0e7c35df59d930a3b318638e95c60e91ee
e3e1d1a1d3e354a5765decb86a45e93c77635e1f4a71a8da81d22860cd157b44fe
a8e00f665b6fa7fb2aa1ba979b2fd4d468448db783a4fed37a43a7c20c76090ae5
b97496b60cf9c586dc17a93f080dd4fe23d477c3e175fedfa9938f09eb8924fe34
a2e74c3be3df7b76e7b83f646c7c57ba0551c579eb0797187d280fc3ea1048dcc5
4ccec1dd27750ae4f40d404eb6f1bdf275e44548bba07209e55a0e7f82d9c86fac
9040b7ca4bd762022453c717570e324eef86658210da163b28f5886ff133005338
bcd80b013930987f380d5a3ca17fd61afdc73ea8e2598957a5f94d1fe827bb5b27
15f29b6a002ff83adef96c9a4e3fac3e4fb7ba3a281e2bb391060ab6c409071849
80810d67e0789ebcd34747ded4afe0ce5a3e6d8570dba240af76a81871a0253a6a
40ec6d2a2f55fa44c4ee9f11ef170a343eee1190e8dd19de321ceff6054826ea9b
23e14f9360dace3aa381912190526a0e3744952549d80df6c4aae8cfe1e276fde7
9ee73064590b00a21a0d834ee657e2cd05e7a3bfea01a5c9535cd9c074b6e9ad17
e012448592802b683b2b8a6c9671c28963f36edba8f93ef44808303665143f30dc
d036edd01ac32eeae7ca117672f9156600fec67d3945a6e1797e197fb25a8d96b3
2dd3cbce3f35127c652e930c8c7f0d8033de78014804f5125a1cbb32c93ad4a5f8
e2e00dabb2a09970b728aa5633cf95b1cdf595d6b1b81d4fbef1261c31bb87e7f1
bb195120e2beee98a7bff8314481a0b0cc6ed306413635c58e918f975dd60c2dce
9efec797dc00f609cb5002a9513b51f69c7fbd0f8456322eca60607fcfaed20349
2c9b3cf40fd25476d20a46d1b6a51bf8a12a210854363782f925760b29ea9b67f2
0cd514faf9418cb72297103ea38f1bb22c1977e73f2306225f03e07f472733494f
84d01694dc82a842eee63d7ce24519da4727866f3ae29de834316afdef0e16a223
781ff385c147d33c0284663f815033a43fbd29632c50887a67055f2ef3de64686d
d45036f352d13a652cfc9531a454f0fa43d9992ebfcb9b326e54071d639d3ec700
e6869ca026c969925f3076476f1db9b8d546dbf002f1dd2f50186169e555682275
4b01b84af40f1e1ac26efd94f9ef1248561c506f406ec4aad3b26d15274cb1a5c5
0e9584857b9e63ff26b95145df0d4c1431541748c5d45e01db5b47b257c4951bf9
ccdb5449ab262ed1372b44fa97d1c8679f4b410f9fe933094450eec292aeff19bc
0e04f1992f111ee2e8e528b74cc5bfd353717b4a2fe493dd089af95233c41739f9
96eb1fa2a40e9cf7cf670ae9fac19a8ec190a63d5349748d328a90cba3fd8722c4
f0f8510f2eaa4ddbc0450431901cb70055fb6b34573aae281ff308a3e4445aa52d
b053292bbd8a841dc9ae9d86bbfadcae6cee541e7a6d3fde707d5384926802c81e
eb7bde4d86db65401bbc3a5f0febddefbb3fed7f27cb0e298bb5eb344b44aeb20d
3ef13efbfd00aa6081d4a329e8d9113db677cabd9ec3c960d68007287bfa5aaad2
9061b0d9242b55361a15d280e2404b89234dba4b864b965d583c12deb6a22ef308
0ae8f510d20fb7a4d3b02bc077ca095309f178c9889c34aa9107147145bfd0c67d
920f4e22b6965d453e82ace94f89de48078274dccfc26ce4eaa43c8e968f1394fa
e496a53d01b7b51e9e77320cb11067d4ead6eb326189949e76b5c7deaf19123e0b
914259059aadca1ab3ceb8200ba7b96129b86f29bf97acecf5edbe00887a28a74a
d31fcce48922d9f9e86e685769f88d3be15010f0cb8b67ad5c4a63d28a4d9af482
cb6817839744f0ae8d8cd98110dc821b5313ed6c9a03ae8c948ca57ba3870f226b
ee6a442c46384efce461d717c9610b6f6261a2ceee6def7a28e440b75778aed842
01b5ac45f633bedd6e82fc89ba80affb3e0e7afc5ddab5b67fa410bd96c88a129b
92eb696553c2baca907a78201e80f0df37df96a5cc5f033c61936a39af3bf273de
eb5cdc4e11a42d24b3dddd653cb47932b970458d8ad305278fb1409bb6230deb96
5163deca5067826dbc535cb28161bdef5a9c0d121a9506f47502c0768d0e3fee21
5ddc33ccbb8d14dbd6365fbc2fc72f0048ab80f583a9b11fea8b7159f8f809643f
ff334a5058234f2bf1a9b502b61d6acdb9d45a0757b46aa53b7f10813fc6fceb40
544c4fd09bf19b87fbff13b92ea55afd4e9db5a97deed5788eb20f7bb4bebf4b53
7c40d13dd3da70311a5de604e8f5cf0beefc299cc89eac18876c5da2f5b677cbdc
bdff0102d1c17a07b2c845dcfb59cebd9447bc3adee90d74b838e8be490cd809b2
f591d123a2e4870952fe6a44f8e89d82ffd82e6979005e6e6e6638a43af793a47e
6bd30856d7c030fc1d7ec4baa7d6a56acf877d43b3109920fcc5d110c6a7cc2cc6
2cd3188219e3e9de561561a655847ce6a1162576081fc1321d36fe8e91230249d8
43c5998f0905b7211b05987015417fb6bc95f91e6a3c9d38e0674fa30890e9d55c
d4f17be6489d1a0195baddac608266ac7df165993e168253604bdc58ea3914638a
d2555dab5336b36cfdcc50968add2c1e5011adf98301624965f762ba70a7fc0d88
24569f32891ba2af5b1b705c53c651cfe5190f785423bfb8cb0bf40fd5bca35f73
aa599a88265074559442d1a709b239bc67646801823b7a83702628b3be6060dc60
534695dc004936b06376888f1d84f5070dfec7edb8fa980ee73948d75b5018bae0
dbbe22bb68ba4dd083c9ce6db006b84c1ed3570e71076a3726649eb0ade038c1ad
f4474b79d7fd748bcc3df0bf6f5912a8ca422cc59065535b9e14b0e02c587d4224
8d2bca7e360d1c1f23042e3e08a52b7d42c89b1bb7a06aadd0236a47edfc767bcf
b61d6aaf1c25212dcd2d467675b37d89423df072076786276b8f06ad7b4054b79b
c327c18af7d36220f4083d0f1e71b2f8ba4202cdea1785c2428f318c6eea56270c
ccda96a193f7bb64a210a605097ee46a9dff1e7524e5728e223dca1f0c0d22fc9c
3d3d62260ed30738dac22b345325dc5e1519bbb075d525b9f5c674d20f68be4376
41a1a64dda0bcd5fc7aca23d89d95c604eb7ac27b10d862254cd1cc09dc6e506e2
54101b9eae87b1a59ac921c5cd9d09338a8877cf627b2375c513a7f49ff51ac85d
a6d20226497f25a8ec664ad55001f13ef98c0d3bd796149f8357cbd8d1cd0f643d
427b5a65931412056c85c1ab0e1853460e0a082172695fea56040d7d2210364bb3
45f0dd17de158c959d8f9cb159686386fdad1a5f768f8cb68bd1564764cd97f523
26069228c1094595e77fab7da21851c5c93314ff37d84fc7bb15e1ed9b0736bb33
3b66b84a24b04686144ad2eab142c685018781707bf41d4bbe45bc39c983f50874
9fcfafc984d1de296c51bddf4e2fe6627d476a6785b8c213160ac3ccf6a75a0b26
9c5745f891329d4f19fc463c265921e7e1655c5ac9392469470732ca256b4a72aa
365c88bed15006d4cb0aadfe6e21b0333cecc7d2d6535739eebbe54988bf2fd301
5452e9d4349350ebc2f34a969852745212c143f2316de13e9d158ae7f108b64c0b
52fb506d6539dea244af9efc769f87779fb205e2094077ff71f99146f09b17423a
9622d8c44dcc1eec3e43022e7948a85560bcf40f450a4ea27be88fdcb3f2ea7ff6
29b9016d2386aa3ac7be51ff4c10bd40f5b5dd7b2d71f1c2f5f1528efd701aa591
06584b3ab94cc813a06409f47a4fc30dd782b42b65da2e1b8c0eef6bc7cb2e0703
8ddafa996570347352f3fc6c4062306036e3d870549f0365f6f9096080a8507d6f
239880acb024cbe97405f22cb52940f56571c707c24fb890c4602ac13b098830a2
06f74030525e22d73519e20f88499ea8a20c9a40a0e5b0cc172f53a4aaa6d991cb
aecda4e68c2a4d9533f7f0101cf40d8cea0eaeb3b23725028aaf12c629faa66bbd
b233fa3a9e1073cc15155b1079c4434bc8793d815b03a97ac91119119c7758cf1e
e731a52c187fd050f1309b233d281f9ee90a41a9f5ef6344a1b6718b99d687a6ed
43c4dee83e858af075ca16d7cefc0e31dfe042a775c101c834a5f6c294c77aab88
eec797902bbdfec4f7e6ac120b4532eb6b7fd3f58e9af02b397195b17e41bbbe8c
a87ae2fd47a589a55fff2ae3707fe8aaa1585e670bfaff09c14061e55600292a17
98bc195385ecd8982d81e8196bcbeddc67521ba0ab9ae2aef1c23639eca130c16e
a18620285f1db4d5d2128c17dfccd7640eb354ed386d03e6d8e02e1f5d4b1956a3
7a9a9cf250e053fa4fe564f23df40ee3d78f85eaab0ae6972d003e4f045663d04d
9a54abd98ea2ec84dd6f9de823bc1592eb0cc272ccff9853f7bb238e730091fa24
8208957c2c4632c6a48239725cc74be07f0f8efe1722647c2646f3f9ce367b0907
2f8bd0b0385559e7a49c10282fafab1bb4f570dd75ac7b43e4758eb67c7bddb241
92558736e4b4e750b466995c43ec7da807b31223ff9ba4035ca15ac7a3df225e8c
f030b93a93cf9c2d5599a1fc82807505e7793ae32d43f01074ff0f83829ab913c2
ce3ffc0725e697520bb9a933707ac71bca7b262f2f907ce9c0671222bf830b52bb
d0757c234dd5bbe9c1fec3a5ed6d78cb8f05cfa85820cf7b95ec882eac2bd06baa
20e2146fd2508f5eb369ffa0b5e17b108fcaf7639b42dd2f291eeedf9e8ef1fc67
d77d7b8a4c952ed1e68405f1f6515c2aa781bcbee5f42467cce472a7583e162af2
9bb4f6fe8e2cf2cb9672a65e8d35935e9c666783a48e30381983eceb74a246e859
c3894a34244e9fac718e2d6f37dda500f73c0996b5ae16e93a437725f90c08d6fc
7c7b7b2841654eb5113c0252ceef18116ccebd5357c8cb5c162dd8577914d4aa35
07b6329f27b14a137d809ff41f73c76bf421a9254785bafdfd8864225be50c22b1
6c1eb54912f9303727f23deda1927e261773417c58ad201684e67db9b699c0d6dc
43053d22a8c68340eb5b11be123fe6e8db6e2bf1c2a94499e13c522684dc9d00c1
6789f1479b07dbe074bc64351886bf907c3194792d9e80e9d64bd4c7b4d63308eb
c6c001a586727ff14f8a225799a82913f6f1ee8d243158cc0704cbc51ee6ecbd39
944a6c7ed68cc0600cac67234c6d6f1ff111c55702d0385fa0c80c1d4b723511cd
ab9e03ed207adcafaf6d4d5b9a9ff87fccb3f9590174e34dafdabd09720aea09cd
a19ca1c87d9a33bd6fa081d3b14fc8dc9f88c470b3d300281b8e5ce6f643232f2e
1528df530a68008fb45b31c080487eeab77d0b4d79f96e0ea0ed7f0045eb0e66d6
7b799517dcd3fdcb46d447f5a905f11e56167de9a70010d84f8cb81d15fc987d6a
32d524686bf839c9a836f694d6a0957c006705f93a05f947be80515e25a30e6168
24f094b54312292f0ac09417064ab05f71be60d06ad13a1be27af7f8b28c6a8849
bd1b06d8fcabfc8f9b5003086ad8939592143781e36689fe7f56f9dd3d0b4eef7d
94baaef0f0e4b5783b55bcbb0af676350485fae159f8d54166b09e4618f6983df5
079d0ce32a4642466e7e131e6e6fd2e68e583c27ff014fa0f1cafb29b298e06818
3c472c71f3079c21fef9450dbbee368e0df876c323ba29be8b5c9a4ceeb832707d
6fee3d637d5a45929cc6485a92af8c2b180487c56d7d5f65d566ef765d4c2d802e
3ff7a97d897aea37fa412bd86bd526b93c52a4fde28dc42841932c7b24d79a7ac7
9c282dac3b7c3c64c2bce1c73e6baf65d66ed45f841ff00d80960c3d5a6513b692
c5b67283bb98c0351117e368271d0070936c2bdfc9f5f47fffa4fb0c9ba483a37a
dc2bba8d22ed3b9c00e661e3e12ef20e01764520d0d916f0ff7370279b8e0e6dca
52abc752a16b1e8af04b4156e986c72d8c4e0ad684343bac72e87eee79999fa549
23ed4ad3daab19baf900faf41ceddd68f0f408eb06adab29c755325dd46ca00d4b
10c275e736f3c8624d44eb06070aeceebfad5484e02dfe7fa642219f4df422fc82
dbee4c3ad3c8a429bf2f3d8bfe9c20c362f0a86f035750cab489ce6ff9cfe8ee9d
4ddf983210236c149e1ad32272b1d81135d664db855abc4d9532a1c761a543d2b4
b0cd68faf050d7b2a4f38409df80dd3b01b6a8a691410815ede69e0bdb0f30e11c
d61c0de435b1b1a4cefb78d9e9e47894f5b792f92016738167c719e901eb5a6396
cf6d588473776662f84a7f0edcfd3c9f97f91f58494c55444d651361e10ada2fce
e34ead17a9b5468fb47851e0dbaba7ad0f078eee75084b7cd4af35073751b7a914
1f94c41fbecb7dcdc347be5cea4aa487d5d6a7c8e6725cbd615844d416319bc003
906bcab874743e24b18d40aad9b18ea629e3beb253c5e9ea80cdac8974a92422b9
7430ee82fab2b0c212f4d767e45cc5f1ad29f6ecf43dc0ca98f86dd8377a802d44
db50e470288180fc24b81996e8ab71047066131fdf361874b032351e45809097f9
b9c02ed3fd1c7de9d9645f277c77b0673d178411fa8cc2a59ba222416cd79aa3c6
325436efb94471f83f3b3e696a71a33f59b0795d5ef5edba69bdecafcb69a25cea
ed1faf4c676d45b15b91f9d03057058a85be0b40c43b59ac1ce069cbb969be78d0
5667535187595236103edcbc049d9c95adc2868c25d72fe6625f7bbd0f6b284a0e
3e54e84e4fc13ca3533b43539f211029f38d5dc4c22c0692efae539637e2be7280
2ad4fb986f7bdb4aab5192081e5ea55cc2e7e3c491baa237c6a2c82298bdc7ca16
785aa8124cfdd900a16180530c46e8b538fbac92518e5c93d9b7610d84fd1a3c2d
e49413760e95c6ff607aaa5af9000ec589d964a7a2ea8dab585dda3586ef9e0c98
41aba401a04b751853ce5ba55e47b3004056f65bd363fe9437a316bb585a4be985
41a7ff6428e44c13db0a4d6f7fd0a1a0f86ec36f1a753ce97d630730e9ceac2400
653716c5710f7b7fc9fb118a6664857abba92cd868b6fc3a43bc06832939bb77d2
6fdb590a37fda80f1b615a5491c3d8270727f7871f33bffd3567074bb6894905d8
a43c6f92d287b37a1b770bad3bc8c8caf3a7a312f89df2e75a12317dcaa11cd789
cc79675513accdd7ecca35fc2c814ab61dde36f7c4d3c4895d893f51f0af1cefd6
e3c897cdefb55b545832bb60caed61f3df500a67616038f5963a557c16b513483f
240a4abdd818ab637ef84b61a115c1895d06a9c9de604d52a264e3a6189b42ecb2
b0a31834530e9ad155a98e49ca607d62a65fda186bd849621f2b0c6985f1b88cd3
df53d8bf2be1548b2ac0f5a82178416928be8499cf84e6fdd2cd0f57a2b96d5b08
0909d82a5c5f57931b253ef0faece6dac6cb15664c09883c9d157cb251db3aa663
fb98f94a24b4c9b5c1ffb26b60f8d66573c8201c6701218681c9dcea1ccbe1adc6
83de5c31f56a79543dd7da635cfb8ca368ff666364fa0e8e152f4dde297363893e
7efdc4467698834c0674302d720c0e5e6f14f255f5489a4b339eec72f1d444952b
9da2ef43669290609ef4897056479d0a6ffcb1cfb7d59e07a891d50605e46bd012
9b5229a58454125bd7469c1090ea8cfd16f448ac141051615d96168145593272fc
70cf2944d9a6f70f175f703e990804ef34c1458340f1c26ce6b0470397351c862d
8a056fc7a1dec6e46b84d012c280e53121d97e2248471445fd4514ec5819388cf0
418bbe750fa654bc0fef21034dc60ef38d1675dba6075fb8472ac71fb6aec4e585
fc938bca2c532d8674238aebd524155bb61631d8a2618d147cae32ba3e14cb2d0f
e30d896c7fd40418ce9c478461a06531856ddea5d22726b3c9b11484ce597f5a77
dfa6f513b47e3aeb24f2183d2b9d0ded002cea49efed937e6fc606fb751a793dd4
acf081d3e33f6e42fc6b44e665cddaf61f40596a8d230a068e7c68ec4ea9604016
aba3bfd1e958f5b4987852701e69031673b94cb67e1fa14081e812c91c6d7f056b
c680c5a92d9fcc9439da51e726bca389f06d66be2ecd4ecc7c323567416a0f0643
9b3fb7cf2c98c9e2bfa47c48586600c28ac85627059940d6ecf126176c4ceea81f
4470a4d074015046264c7ac0f46d1b2ed4ed01a9d385ce015a9effbdf03a9b1cfd
06400c37ef290eae03d1ca7ecb1c961eef39a08c333e4ac9d26a9bf594a1f85212
c2298cccfceb6121c6e0ac5eb6eaebcac8e23f3975b699536b2952016c0cc91b44
62da5c99057e1ef59a16352a7101f4459d947e2ffe00679b8bd9e3c676a1f6bcfb
f9eed0c87ef0e1ee682046b5bc86219889077d0937b565e0d759af30e368d8e325
ecaf5908fca04d81b60483b6970866f6f9966d87fb04d8e2edc7be0459f8c625fb
84cf99818ba65885929f4df8f725280072d858e930e3932fcbdfc3747f43bc7267
dba311f1ba8d4dab2b46a566e9aef33d0cb65744b8f7a15f2c950f67c63539c9c5
7658727170046be0049c8de525628190851ac2da6f296ff42b52d0a1ef0004b698
2f5e9a70771fdb0b4cce6a1dba75f36a2fcaf4d2af2868e5147a552f14654ee86c
7ba97ea2a16c0391ed2aacb92dcf19f2687e77ad3175b502bd11e35f085124fddc
536dea51c4523a48ed983e470d12adf06101684765c4677f9a4298b2df0c6adf76
c9f14c3883b8c9549530050825063d48948ca1171d5f3d0e3e39564d9817f09b0d
92e47104610b047d746199f37fc3b91f360850f77e8dc2c78247bc5d37ef5b89f1
81c83095b5a84704bbb6058b475646005eb6e9574670520c8de24e4189c61f3d3b
10d4c30cf044cdad3af0f230d4d7cabfc5c3897d7cdb47c888d7af26d13384ec90
22c788085e973e8b9ee25f91317e6e52e9f0e2a19bcd08513cd2a15983ba9f1aa0
f62463b725649af21d1dbbafd9181e636fbfb97407663af88c0a54da4b09b05a2d
e33b31b2c1273d8bbb08c6374ab9b1593e7959fd6eb29d4eef7eac3bc495ae40f9
b7539d96b3105dd529eee24f286fda89bdd755f7c05ad5fb6c24692a641433d131
cf05c267c1241ae619947c2b60c2fc37e8f719c179a91d8abf8758245125ab99e9
99adc422327765737ab5a20512c6f3d96ea798f6c13f310c79113509fb61dd850a
580b1797dd263c521bb37dbab2cdd9c5dca4ef65069f66d808cfba98678b6a1408
5a2ca0761836daff51b7211d2678f3bc1d077724f7093cd05ea412567825d8d957
4341c07a23623953741f954423e73fdc2f9b30d0424e6dd923856816872c88e5e7
d3301bbd40a6911fa0a4dff9214bf8cc6fd3c4d824abe5e92297d5f1f3b0a07709
c3f839e1ab47eb5e580198dab33949fbaa14478372474fcc564467aaea22d93491
5970f6faad2acc287af4ee61adac971c079e65b824ca7bf1d0fa47410892987200
b125199ef40603239c5fd6a9e588811500dc98cc89ac49483a549d6f4f8e759e07
88ec89376c922570d7d42aa97fbc27358e7b106a5d3c7b0fe2538f43565e9a9643
848ef31ff3c23a9e5fc676ad7679c4e470fd5f8c909dbfcb962f0d2d788d52ae1c
1712dfcf572cd18fd4791e1cbf35a2d4b6594fa5da561ad0c8955c5f487a7b0cfc
1c1975dce2a37ebcea3d11ce38ab1e9e31e9e6a638b74ba9f41d2d69fb9c40fa5b
bfbfba04c3fb523f387a89f475d5b62aff30a970662dc8f0af920cad1c85206ac1
50cb812aabf1b0bb6a321943dadbb76aad7558afa817d9b888404374f7f6ecf46d
5f6677f33e8b4e05b874571ed8b791bfc0f350e924f76337314289455f3eafb32d
8cd05cf51ff46d8b8b77312e2f973f78f2843f138936403bebdd382c71212b4778
0708785997a1c6548c0ec11060d81b402a589c19e5f6b99b48e613094f6b4c7149
f0edd5f22a1bf21004c01fa76351c4a95656974bc756787117f7a94ad58c29b824
c9ea3eb15626ed7acbb036e84198873bc4e8ed0d31eedbae6dd16cfada407fde56
79c60d56e63a8629a1a6be495b238064661e79e7f32f667926da0d6643364204d0
e23a32e075706162ea043c12e2c7b9aa3181e7d2d663b89704c425d88752554515
5c20288a489572e7ff491e809a184d0d7b82189a6bb553abdae286d94400f95dd3
11448e12ee259961a918db7568cce8686684da43c9ac7623bd1891b2a70183d508
470ad4400b8a97f9f3ed0de6e5354dd2fb61c4cf578a1b37e0d97907b2be8c775d
1d8734fcf20ac15ccdd609be876063ee969a7a1a8c648f911fd848e25e9ac8c157
dd569872bd4cd51bfd2c125ff6af92131097c896de36b0301b9b865e5cc2498f36
a74c7efef0edc783ca95b8efdea181bcf16bbe6b26c5aaa24e1bfbca4fa9a24f93
1545e3b3426f6a69f9c01e55e7325d232f5a24ac73176a4d790953b2e64380b7b5
c187af439400a771833fc7306433690242c1beb84e0284ed9abeeb725e88bb0ad1
51d5d3768eb6dfa401d29ecfe353e42210adfac4d453fbeb1cb08b78344289e23e
b24b750afd97d602653f0828e96ddfd5ffe8ab11040bf409d2d5372e8646b0762a
47a348a9e7e082f0754e7ef0502022136702f9985b6b7f7420d3b5929f4f417338
f50cd88f7e97d49abc232dac9571806bdf65cfbc04f35f404de7c61d0f97d0e952
f401b44b65c1d2185a2ecca7b2dea6b1d507520efc10563702310c87da3612b824
bed583da4d64a1e132df7e6bd607f3fd67178f5e256a8f43d02f91ab08002aa8f5
baa62de1da33ad0430196d40caa3c0d3197270940f213d0618bf759f579c6eaf16
1ef027537bc2a3a8ec0b1868c77baf37c6e8a4fba0a1ed4650c87bd9dba375bf10
c5d79616751e3ccf1f7e3de6e97bb5d29b722155013bf53b0a8ae85dc31105d3bd
7c4cef9516d7e1a372b3dba4e61d84f51df48a12a50865f33e6735f5273171c841
9da4d408e8c49773d1a93cde4d7b2da96a1188ff7668b96113ea7c3084770b5be7
218f6b7e633233eb26d1c91d858a39e8aae1a9604da309e05546cc11efcb0392f8
732ba094e54dab527959890fadb7a3552f663dde67aa9dfa20421b416e54c80e15
a89f342e8f302838b87c461e3762fd7f816768b91c91752f64a2d11fbc189df9d2
869e8bb8c08e49bd7a5d4a9132b633983cbd8bfefa281fe62806bb502a6bd19dd9
e18d98ddb8d929e0e1287d75d1ac0ba30e2c17ea77e3c26dc47271246ddfddd503
61e658cd683c75c90a49bc6bbf9ef14995055005c590ee9b26e45032719e9f232c
46e4a077309cae70c5378f6d8df684dfb6a4ff13c3dec73f8b571b0320d337f816
f61fbebc17d748cb989f9904378f2680465a05ed388d42a476a587eef15eecb23e
e1fa9f5b6ed1f24445ca74a8c5ec4ece14366534365915da2e2b5d88a2ee95f6fc
50e526c51ac315d49ac3c2996c3fe8f018c5326db5380f165ee8d052179078cecd
a0f84df5d2cdd3449a98b6dd877ed22c5da5654b2f46c08b1928d4b1a10e8ff1e4
299a2a58bfc45d42d4a501ab6f88ad87ebb182f49b9d7cba8cb75741575e6e7866
101f9ce35cca5d7ff25897977697c3fc779d17d982d3f6f03998cb6babf6bbc83a
edad8bb91592132b916aa80579789f77b717830c81d2b5a58c48641b8073b1ebc1
175e95c7082216ebd60ed0cd42b26f8aba0bd2fb857f7990951073de953fe7187d
c8424f49d1f2e43a8b4a6e1e7caa7030d99f1e2074803b5f169910441f1ec77ea5
15ff68122c2230daba8eb1cdd2a3967a2ca3137e2cb2ebdc9580d8b41350ffa1ff
429b008e86e2e495e2e8e57ae4e1d07362a3de8b659c539c26112a2d9d554b6ceb
62008b94729e14bd3d847959ad7b9a23a101bd1c92eb4d5bda9d7302a1d363f2ed
09f540b689552ae73c24e733273710ddb0cd346fb338c791e6987e50026875f210
8946c8b5daaabe169496c43902b24526a433c41fe4cfce7f60423b891ea62c61f2
aec097f6a292700662968c0c42b4f77cac924ac0b8fa8d126afebc7826afe99735
1a1944bcf5654739527b340aff0c1c00f9c5fb99ee164c058cab890edf2afa7d16
fbbc8fb37ca116f886db54bfe2c0320dbf4d02f40f922695261a97202c47efa0b1

View File

@ -0,0 +1,58 @@
.\" generated by cd2nroff 0.1 from CURLINFO_ACTIVESOCKET.md
.TH CURLINFO_ACTIVESOCKET 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_ACTIVESOCKET \- get the active socket
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET,
curl_socket_t *socket);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_socket_t to receive the most recently active socket
used for the transfer connection by this curl session. If the socket is no
longer valid, \fICURL_SOCKET_BAD\fP is returned. When you are finished working
with the socket, you must call \fIcurl_easy_cleanup(3)\fP as usual on the easy
handle and let libcurl close the socket and cleanup other resources associated
with the handle. This option returns the active socket only after the transfer
is complete, and is typically used in combination with
\fICURLOPT_CONNECT_ONLY(3)\fP, which skips the transfer phase.
\fICURLINFO_ACTIVESOCKET(3)\fP was added as a replacement for
\fICURLINFO_LASTSOCKET(3)\fP since that one is not working on all platforms.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_socket_t sockfd;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Do not do the transfer - only connect to host */
curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
res = curl_easy_perform(curl);
/* Extract the socket from the curl handle */
res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
if(res != CURLE_OK) {
printf("Error: %s\\n", curl_easy_strerror(res));
return 1;
}
}
}
.fi
.SH AVAILABILITY
Added in 7.45.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_LASTSOCKET (3),
.BR CURLOPT_CONNECT_ONLY (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,52 @@
.\" generated by cd2nroff 0.1 from CURLINFO_APPCONNECT_TIME.md
.TH CURLINFO_APPCONNECT_TIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME,
double *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the time, in seconds, it took from the
start until the SSL/SSH connect/handshake to the remote host was completed.
This time is most often close to the \fICURLINFO_PRETRANSFER_TIME(3)\fP time,
except for cases such as HTTP pipelining where the pretransfer time can be
delayed due to waits in line for the pipeline and more.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
double connect;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &connect);
if(CURLE_OK == res) {
printf("Time: %.1f", connect);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.19.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_APPCONNECT_TIME_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,54 @@
.\" generated by cd2nroff 0.1 from CURLINFO_APPCONNECT_TIME_T.md
.TH CURLINFO_APPCONNECT_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_APPCONNECT_TIME_T \- time until the SSL/SSH handshake completed
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the time, in microseconds, it took
from the start until the SSL/SSH connect/handshake to the remote host was
completed. This time is most often close to the
\fICURLINFO_PRETRANSFER_TIME_T(3)\fP time, except for cases such as HTTP
pipelining where the pretransfer time can be delayed due to waits in line for
the pipeline and more.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t connect;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME_T, &connect);
if(CURLE_OK == res) {
printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
(long)(connect % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_APPCONNECT_TIME (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,47 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CAINFO.md
.TH CURLINFO_CAINFO 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CAINFO \- get the default built\-in CA certificate path
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CAINFO, char **path);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the pointer to a null\-terminated
string holding the default built\-in path used for the \fICURLOPT_CAINFO(3)\fP
option unless set by the user.
Note that in a situation where libcurl has been built to support multiple TLS
libraries, this option might return a string even if the specific TLS library
currently set to be used does not support \fICURLOPT_CAINFO(3)\fP.
This is a path identifying a single file containing CA certificates.
The \fBpath\fP pointer is set to NULL if there is no default path.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
char *cainfo = NULL;
curl_easy_getinfo(curl, CURLINFO_CAINFO, &cainfo);
if(cainfo) {
printf("default ca info path: %s\\n", cainfo);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.84.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CAPATH (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,47 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CAPATH.md
.TH CURLINFO_CAPATH 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CAPATH \- get the default built\-in CA path string
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CAPATH, char **path);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the pointer to a null\-terminated
string holding the default built\-in path used for the \fICURLOPT_CAPATH(3)\fP
option unless set by the user.
Note that in a situation where libcurl has been built to support multiple TLS
libraries, this option might return a string even if the specific TLS library
currently set to be used does not support \fICURLOPT_CAPATH(3)\fP.
This is a path identifying a directory.
The \fBpath\fP pointer is set to NULL if there is no default path.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
char *capath = NULL;
curl_easy_getinfo(curl, CURLINFO_CAPATH, &capath);
if(capath) {
printf("default ca path: %s\\n", capath);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.84.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CAINFO (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,82 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CERTINFO.md
.TH CURLINFO_CERTINFO 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CERTINFO \- get the TLS certificate chain
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,
struct curl_certinfo **chainp);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIstruct curl_certinfo \fP* and it is set to point to a
struct that holds info about the server\(aqs certificate chain, assuming you had
\fICURLOPT_CERTINFO(3)\fP enabled when the request was made.
.nf
struct curl_certinfo {
int num_of_certs;
struct curl_slist **certinfo;
};
.fi
The \fIcertinfo\fP struct member is an array of linked lists of certificate
information. The \fInum_of_certs\fP struct member is the number of certificates
which is the number of elements in the array. Each certificate\(aqs list has
items with textual information in the format "name:content" such as
\&"Subject:Foo", "Issuer:Bar", etc. The items in each list varies depending on
the SSL backend and the certificate.
.SH PROTOCOLS
All TLS\-based
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
/* connect to any HTTPS site, trusted or not */
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
res = curl_easy_perform(curl);
if(!res) {
int i;
struct curl_certinfo *ci;
res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
if(!res) {
printf("%d certs!\\n", ci->num_of_certs);
for(i = 0; i < ci->num_of_certs; i++) {
struct curl_slist *slist;
for(slist = ci->certinfo[i]; slist; slist = slist->next)
printf("%s\\n", slist->data);
}
}
}
curl_easy_cleanup(curl);
}
}
.fi
See also the \fIcertinfo.c\fP example.
.SH AVAILABILITY
This option is only working in libcurl built with OpenSSL, GnuTLS, Schannel or
Secure Transport. GnuTLS support added in 7.42.0. Schannel support added in
7.50.0. Secure Transport support added in 7.79.0.
Added in 7.19.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CAPATH (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,61 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONDITION_UNMET.md
.TH CURLINFO_CONDITION_UNMET 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONDITION_UNMET \- get info on unmet time conditional or 304 HTTP response.
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET,
long *unmet);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the number 1 if the condition provided in
the previous request did not match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas,
if this returns a 1 you know that the reason you did not get data in return is
because it did not fulfill the condition. The long this argument points to
gets a zero stored if the condition instead was met. This can also return 1 if
the server responded with a 304 HTTP status code, for example after sending a
custom "If\-Match\-*" header.
.SH PROTOCOLS
HTTP and some
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* January 1, 2020 is 1577833200 */
curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
/* If-Modified-Since the above time stamp */
curl_easy_setopt(curl, CURLOPT_TIMECONDITION,
(long)CURL_TIMECOND_IFMODSINCE);
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
/* check the time condition */
long unmet;
res = curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &unmet);
if(!res) {
printf("The time condition was %sfulfilled\\n", unmet?"NOT":"");
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.19.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_TIMECONDITION (3),
.BR CURLOPT_TIMEVALUE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,48 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONNECT_TIME.md
.TH CURLINFO_CONNECT_TIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONNECT_TIME \- get the time until connect
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the total time in seconds from the start
until the connection to the remote host (or proxy) was completed.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
double connect;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &connect);
if(CURLE_OK == res) {
printf("Time: %.1f", connect);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONNECT_TIME_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONNECT_TIME_T.md
.TH CURLINFO_CONNECT_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONNECT_TIME_T \- get the time until connect
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the total time in microseconds from
the start until the connection to the remote host (or proxy) was completed.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t connect;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME_T, &connect);
if(CURLE_OK == res) {
printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
(long)(connect % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONNECT_TIME (3),
.BR CURLOPT_CONNECTTIMEOUT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONN_ID.md
.TH CURLINFO_CONN_ID 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONN_ID \- get the ID of the last connection used by the handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONN_ID,
curl_off_t *conn_id);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the connection identifier last
used by the handle. Stores \-1 if there was no connection used.
The connection id is unique among all connections using the same
connection cache. This is implicitly the case for all connections in the
same multi handle.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
curl_off_t conn_id;
res = curl_easy_getinfo(curl, CURLINFO_CONN_ID, &conn_id);
if(!res) {
printf("Connection used: %" CURL_FORMAT_CURL_OFF_T "\\n", conn_id);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 8.2.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_XFER_ID (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONTENT_LENGTH_DOWNLOAD.md
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content\-length of download
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
double *content_length);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the content\-length of the download. This
is the value read from the Content\-Length: field. Since 7.19.4, this returns
-1 if the size is not known.
\fICURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3)\fP is a newer replacement that returns a more
sensible variable type.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
/* check the size */
double cl;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl);
if(!res) {
printf("Size: %.0f\\n", cl);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.6.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONTENT_LENGTH_UPLOAD (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,48 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content\-length of download
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
curl_off_t *content_length);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the content\-length of the
download. This is the value read from the Content\-Length: field. Stores \-1 if
the size is not known.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
/* check the size */
curl_off_t cl;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl);
if(!res) {
printf("Download size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONTENT_LENGTH_UPLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONTENT_LENGTH_UPLOAD.md
.TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD,
double *content_length);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the specified size of the upload. Since
7.19.4, this returns \-1 if the size is not known.
\fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP is a newer replacement that returns a
more sensible variable type.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the upload */
res = curl_easy_perform(curl);
if(!res) {
/* check the size */
double cl;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &cl);
if(!res) {
printf("Size: %.0f\\n", cl);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.6.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,47 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONTENT_LENGTH_UPLOAD_T.md
.TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T,
curl_off_t *content_length);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the specified size of the
upload. Stores \-1 if the size is not known.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the upload */
res = curl_easy_perform(curl);
if(!res) {
/* check the size */
curl_off_t cl;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD_T, &cl);
if(!res) {
printf("Upload size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,56 @@
.\" generated by cd2nroff 0.1 from CURLINFO_CONTENT_TYPE.md
.TH CURLINFO_CONTENT_TYPE 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_CONTENT_TYPE \- get Content\-Type
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the content\-type of the downloaded
object. This is the value read from the Content\-Type: field. If you get NULL,
it means that the server did not send a valid Content\-Type header or that the
protocol used does not support this.
The \fBct\fP pointer is set to NULL or pointing to private memory. You MUST
NOT free it \- it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
corresponding CURL handle.
The modern way to get this header from a response is to instead use the
\fIcurl_easy_header(3)\fP function.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(!res) {
/* extract the content-type */
char *ct = NULL;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
if(!res && ct) {
printf("Content-Type: %s\\n", ct);
}
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.9.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_HEADERFUNCTION (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_header (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,63 @@
.\" generated by cd2nroff 0.1 from CURLINFO_COOKIELIST.md
.TH CURLINFO_COOKIELIST 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_COOKIELIST \- get all known cookies
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST,
struct curl_slist **cookies);
.fi
.SH DESCRIPTION
Pass a pointer to a \(aqstruct curl_slist *\(aq to receive a linked\-list of all
cookies curl knows (expired ones, too). Do not forget to call
\fIcurl_slist_free_all(3)\fP on the list after it has been used. If there are no
cookies (cookies for the handle have not been enabled or simply none have been
received) the \(aqstruct curl_slist *\(aq is made a NULL pointer.
Since 7.43.0 cookies that were imported in the Set\-Cookie format without a
domain name are not exported by this option.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* enable the cookie engine */
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
res = curl_easy_perform(curl);
if(!res) {
/* extract all known cookies */
struct curl_slist *cookies = NULL;
res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
if(!res && cookies) {
/* a linked list of cookies in cookie file format */
struct curl_slist *each = cookies;
while(each) {
printf("%s\\n", each->data);
each = each->next;
}
/* we must free these cookies when we are done */
curl_slist_free_all(cookies);
}
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.14.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_COOKIELIST (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,53 @@
.\" generated by cd2nroff 0.1 from CURLINFO_EFFECTIVE_METHOD.md
.TH CURLINFO_EFFECTIVE_METHOD 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_EFFECTIVE_METHOD \- get the last used HTTP method
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_METHOD,
char **methodp);
.fi
.SH DESCRIPTION
Pass in a pointer to a char pointer and get the last used effective HTTP
method.
In cases when you have asked libcurl to follow redirects, the method may not be
the same method the first request would use.
The \fBmethodp\fP pointer is NULL or points to private memory. You MUST NOT
free \- it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
corresponding CURL handle.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
char *method = NULL;
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_METHOD, &method);
if(method)
printf("Redirected to method: %s\\n", method);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.72.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_CUSTOMREQUEST (3),
.BR CURLOPT_FOLLOWLOCATION (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,49 @@
.\" generated by cd2nroff 0.1 from CURLINFO_EFFECTIVE_URL.md
.TH CURLINFO_EFFECTIVE_URL 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_EFFECTIVE_URL \- get the last used URL
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp);
.fi
.SH DESCRIPTION
Pass in a pointer to a char pointer and get the last used effective URL.
In cases when you have asked libcurl to follow redirects, it may not be the same
value you set with \fICURLOPT_URL(3)\fP.
The \fBurlp\fP pointer is NULL or points to private memory. You MUST NOT free
- it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
CURL handle.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
char *url = NULL;
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url);
if(url)
printf("Redirect to: %s\\n", url);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_FOLLOWLOCATION (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,57 @@
.\" generated by cd2nroff 0.1 from CURLINFO_FILETIME.md
.TH CURLINFO_FILETIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_FILETIME \- get the remote time of the retrieved document
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the remote time of the retrieved document
in number of seconds since January 1 1970 in the GMT/UTC time zone. If you get
-1, it can be because of many reasons (it might be unknown, the server might
hide it or the server does not support the command that tells document time
etc) and the time of the document is unknown.
You must tell libcurl to collect this information before the transfer is made,
by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or
you this unconditionally gets a \-1 back.
Consider using \fICURLINFO_FILETIME_T(3)\fP to be able to extract dates beyond
the year 2038 on systems using 32 bit longs (Windows).
.SH PROTOCOLS
HTTP(S), FTP(S), SFTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Ask for filetime */
curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
long filetime = 0;
res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
if((CURLE_OK == res) && (filetime >= 0)) {
time_t file_time = (time_t)filetime;
printf("filetime: %s", ctime(&file_time));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.5
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_FILETIME (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,59 @@
.\" generated by cd2nroff 0.1 from CURLINFO_FILETIME_T.md
.TH CURLINFO_FILETIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_FILETIME_T \- get the remote time of the retrieved document
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the remote time of the retrieved
document in number of seconds since January 1 1970 in the GMT/UTC time
zone. If you get \-1, it can be because of many reasons (it might be unknown,
the server might hide it or the server does not support the command that tells
document time etc) and the time of the document is unknown.
You must ask libcurl to collect this information before the transfer is made,
by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or
you unconditionally get a \-1 back.
This option is an alternative to \fICURLINFO_FILETIME(3)\fP to allow systems
with 32 bit long variables to extract dates outside of the 32bit timestamp
range.
.SH PROTOCOLS
HTTP(S), FTP(S), SFTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
/* Ask for filetime */
curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
curl_off_t filetime;
res = curl_easy_getinfo(curl, CURLINFO_FILETIME_T, &filetime);
if((CURLE_OK == res) && (filetime >= 0)) {
time_t file_time = (time_t)filetime;
printf("filetime: %s", ctime(&file_time));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.59.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_FILETIME (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_FTP_ENTRY_PATH.md
.TH CURLINFO_FTP_ENTRY_PATH 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive a pointer to a string holding the
path of the entry path. That is the initial path libcurl ended up in when
logging on to the remote FTP server. This stores a NULL as pointer if
something is wrong.
The \fBpath\fP pointer is NULL or points to private memory. You MUST NOT free
- it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
CURL handle.
.SH PROTOCOLS
FTP(S) and SFTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
res = curl_easy_perform(curl);
if(!res) {
/* extract the entry path */
char *ep = NULL;
res = curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &ep);
if(!res && ep) {
printf("Entry path was: %s\\n", ep);
}
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.15.4. Works for SFTP since 7.21.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,46 @@
.\" generated by cd2nroff 0.1 from CURLINFO_HEADER_SIZE.md
.TH CURLINFO_HEADER_SIZE 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_HEADER_SIZE \- get size of retrieved headers
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the total size of all the headers
received. Measured in number of bytes.
The total includes the size of any received headers suppressed by
\fICURLOPT_SUPPRESS_CONNECT_HEADERS(3)\fP.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long size;
res = curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &size);
if(!res)
printf("Header size: %ld bytes\\n", size);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_REQUEST_SIZE (3),
.BR CURLINFO_SIZE_DOWNLOAD (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,58 @@
.\" generated by cd2nroff 0.1 from CURLINFO_HTTPAUTH_AVAIL.md
.TH CURLINFO_HTTPAUTH_AVAIL 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive a bitmask indicating the authentication
method(s) available according to the previous response. The meaning of the
bits is explained in the \fICURLOPT_HTTPAUTH(3)\fP option for
\fIcurl_easy_setopt(3)\fP.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(!res) {
/* extract the available authentication types */
long auth;
res = curl_easy_getinfo(curl, CURLINFO_HTTPAUTH_AVAIL, &auth);
if(!res) {
if(!auth)
printf("No auth available, perhaps no 401?\\n");
else {
printf("%s%s%s%s\\n",
auth & CURLAUTH_BASIC ? "Basic ":"",
auth & CURLAUTH_DIGEST ? "Digest ":"",
auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
auth % CURLAUTH_NTLM ? "NTLM ":"");
}
}
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added RFC 2617 in 7.10.8
Added RFC 7616 in 7.57.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_PROXYAUTH_AVAIL (3),
.BR CURLOPT_HTTPAUTH (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,46 @@
.\" generated by cd2nroff 0.1 from CURLINFO_HTTP_CONNECTCODE.md
.TH CURLINFO_HTTP_CONNECTCODE 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the last received HTTP proxy response code
to a CONNECT request. The returned value is zero if no such response code was
available.
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* typically CONNECT is used to do HTTPS over HTTP proxies */
curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long code;
res = curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &code);
if(!res && code)
printf("The CONNECT response code: %03ld\\n", code);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.10.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RESPONSE_CODE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,42 @@
.\" generated by cd2nroff 0.1 from CURLINFO_HTTP_VERSION.md
.TH CURLINFO_HTTP_VERSION 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_HTTP_VERSION \- get the http version used in the connection
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the version used in the last http
connection done using this handle. The returned value is
CURL_HTTP_VERSION_1_0, CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0,
CURL_HTTP_VERSION_3 or 0 if the version cannot be determined.
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long http_version;
curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION, &http_version);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.50.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RESPONSE_CODE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,58 @@
.\" generated by cd2nroff 0.1 from CURLINFO_LASTSOCKET.md
.TH CURLINFO_LASTSOCKET 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_LASTSOCKET \- get the last socket used
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket);
.fi
.SH DESCRIPTION
Deprecated since 7.45.0. Use \fICURLINFO_ACTIVESOCKET(3)\fP instead.
Pass a pointer to a long to receive the last socket used by this curl
session. If the socket is no longer valid, \-1 is returned. When you finish
working with the socket, you must call \fIcurl_easy_cleanup(3)\fP as usual and
let libcurl close the socket and cleanup other resources associated with the
handle. This is typically used in combination with
\fICURLOPT_CONNECT_ONLY(3)\fP.
NOTE: this API is deprecated since it is not working on win64 where the SOCKET
type is 64 bits large while its \(aqlong\(aq is 32 bits. Use the
\fICURLINFO_ACTIVESOCKET(3)\fP instead, if possible.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
long sockfd; /* does not work on win64! */
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Do not do the transfer - only connect to host */
curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
res = curl_easy_perform(curl);
/* Extract the socket from the curl handle */
res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd);
if(res != CURLE_OK) {
printf("Error: %s\\n", curl_easy_strerror(res));
return 1;
}
}
}
.fi
.SH AVAILABILITY
Added in 7.15.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_ACTIVESOCKET (3),
.BR CURLOPT_CONNECT_ONLY (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,53 @@
.\" generated by cd2nroff 0.1 from CURLINFO_LOCAL_IP.md
.TH CURLINFO_LOCAL_IP 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_LOCAL_IP \- get local IP address of last connection
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the pointer to a null\-terminated
string holding the IP address of the local end of most recent connection done
with this \fBcurl\fP handle. This string may be IPv6 when that is
enabled. Note that you get a pointer to a memory area that is reused at next
request so you need to copy the string if you want to keep the information.
The \fBip\fP pointer is NULL or points to private memory. You MUST NOT free \-
it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
CURL handle.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
char *ip;
CURLcode res;
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the transfer */
res = curl_easy_perform(curl);
/* Check for errors */
if((res == CURLE_OK) &&
!curl_easy_getinfo(curl, CURLINFO_LOCAL_IP, &ip) && ip) {
printf("Local IP: %s\\n", ip);
}
/* always cleanup */
curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_LOCAL_PORT (3),
.BR CURLINFO_PRIMARY_IP (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,49 @@
.\" generated by cd2nroff 0.1 from CURLINFO_LOCAL_PORT.md
.TH CURLINFO_LOCAL_PORT 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_LOCAL_PORT \- get the latest local port number
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the local port number of the most recent
connection done with this \fBcurl\fP handle.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
long port;
res = curl_easy_getinfo(curl, CURLINFO_LOCAL_PORT, &port);
if(CURLE_OK == res) {
printf("We used local port: %ld\\n", port);
}
}
curl_easy_cleanup(curl);
}
return 0;
}
.fi
.SH AVAILABILITY
Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_LOCAL_IP (3),
.BR CURLINFO_PRIMARY_PORT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,49 @@
.\" generated by cd2nroff 0.1 from CURLINFO_NAMELOOKUP_TIME.md
.TH CURLINFO_NAMELOOKUP_TIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_NAMELOOKUP_TIME \- get the name lookup time
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME,
double *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the total time in seconds from the start
until the name resolving was completed.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
double namelookup;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &namelookup);
if(CURLE_OK == res) {
printf("Time: %.1f", namelookup);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_NAMELOOKUP_TIME_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLINFO_NAMELOOKUP_TIME_T.md
.TH CURLINFO_NAMELOOKUP_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the total time in microseconds
from the start until the name resolving was completed.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t namelookup;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME_T, &namelookup);
if(CURLE_OK == res) {
printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", namelookup / 1000000,
(long)(namelookup % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_NAMELOOKUP_TIME (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,46 @@
.\" generated by cd2nroff 0.1 from CURLINFO_NUM_CONNECTS.md
.TH CURLINFO_NUM_CONNECTS 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_NUM_CONNECTS \- get number of created connections
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive how many new connections libcurl had to
create to achieve the previous transfer (only the successful connects are
counted). Combined with \fICURLINFO_REDIRECT_COUNT(3)\fP you are able to know how
many times libcurl successfully reused existing connection(s) or not. See the
connection options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries to make
persistent connections to save time.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long connects;
res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connects);
if(res)
printf("It needed %ld connects\\n", connects);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.12.3
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,43 @@
.\" generated by cd2nroff 0.1 from CURLINFO_OS_ERRNO.md
.TH CURLINFO_OS_ERRNO 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_OS_ERRNO \- get errno number from last connect failure
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the errno variable from a connect failure.
Note that the value is only set on failure, it is not reset upon a successful
operation. The number is OS and system specific.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
long error;
res = curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &error);
if(res && error) {
printf("Errno: %ld\\n", error);
}
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.12.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,54 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PRETRANSFER_TIME.md
.TH CURLINFO_PRETRANSFER_TIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME,
double *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the time, in seconds, it took from the
start until the file transfer is just about to begin.
This time\-stamp includes all pre\-transfer commands and negotiations that are
specific to the particular protocol(s) involved. It includes the sending of
the protocol\-specific instructions that trigger a transfer.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
double pretransfer;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pretransfer);
if(CURLE_OK == res) {
printf("Time: %.1f", pretransfer);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONNECT_TIME_T (3),
.BR CURLINFO_PRETRANSFER_TIME_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,56 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PRETRANSFER_TIME_T.md
.TH CURLINFO_PRETRANSFER_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the time, in microseconds, it took
from the start until the file transfer is just about to begin.
This time\-stamp includes all pre\-transfer commands and negotiations that are
specific to the particular protocol(s) involved. It includes the sending of
the protocol\-specific instructions that trigger a transfer.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t pretransfer;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME_T, &pretransfer);
if(CURLE_OK == res) {
printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld\\n",
pretransfer / 1000000,
(long)(pretransfer % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONNECT_TIME (3),
.BR CURLINFO_PRETRANSFER_TIME_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,54 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PRIMARY_IP.md
.TH CURLINFO_PRIMARY_IP 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PRIMARY_IP \- get IP address of last connection
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the pointer to a null\-terminated
string holding the IP address of the most recent connection done with this
\fBcurl\fP handle. This string may be IPv6 when that is enabled. Note that you
get a pointer to a memory area that is reused at next request so you need to
copy the string if you want to keep the information.
The \fBip\fP pointer is NULL or points to private memory. You MUST NOT free \-
it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
CURL handle.
.SH PROTOCOLS
All network based ones
.SH EXAMPLE
.nf
int main(void)
{
char *ip;
CURLcode res;
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the transfer */
res = curl_easy_perform(curl);
/* Check for errors */
if((res == CURLE_OK) &&
!curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip) && ip) {
printf("IP: %s\\n", ip);
}
/* always cleanup */
curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
Added in 7.19.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_LOCAL_IP (3),
.BR CURLINFO_LOCAL_PORT (3),
.BR CURLINFO_PRIMARY_PORT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,48 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PRIMARY_PORT.md
.TH CURLINFO_PRIMARY_PORT 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PRIMARY_PORT \- get the latest destination port number
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the destination port of the most recent
connection done with this \fBcurl\fP handle.
This is the destination port of the actual TCP or UDP connection libcurl used.
If a proxy was used for the most recent transfer, this is the port number of
the proxy, if no proxy was used it is the port number of the most recently
accessed URL.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long port;
res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT, &port);
if(!res)
printf("Connected to remote port: %ld\\n", port);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_LOCAL_PORT (3),
.BR CURLINFO_PRIMARY_IP (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,49 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PRIVATE.md
.TH CURLINFO_PRIVATE 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PRIVATE \- get the private pointer
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the pointer to the private data
associated with the curl handle (set with the \fICURLOPT_PRIVATE(3)\fP).
Please note that for internal reasons, the value is returned as a char
pointer, although effectively being a \(aqvoid *\(aq.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
void *pointer = (void *)0x2345454;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
/* set the private pointer */
curl_easy_setopt(curl, CURLOPT_PRIVATE, pointer);
res = curl_easy_perform(curl);
/* extract the private pointer again */
res = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &pointer);
if(res)
printf("error: %s\\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.10.3
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_PRIVATE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,54 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PROTOCOL.md
.TH CURLINFO_PROTOCOL 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PROTOCOL \- get the protocol used in the connection
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p);
.fi
.SH DESCRIPTION
This option is deprecated. We strongly recommend using
\fICURLINFO_SCHEME(3)\fP instead, because this option cannot return all
possible protocols!
Pass a pointer to a long to receive the version used in the last http
connection. The returned value is set to one of the CURLPROTO_* values:
.nf
CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS,
CURLPROTO_GOPHER, CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_IMAP,
CURLPROTO_IMAPS, CURLPROTO_LDAP, CURLPROTO_LDAPS, CURLPROTO_POP3,
CURLPROTO_POP3S, CURLPROTO_RTMP, CURLPROTO_RTMPE, CURLPROTO_RTMPS,
CURLPROTO_RTMPT, CURLPROTO_RTMPTE, CURLPROTO_RTMPTS, CURLPROTO_RTSP,
CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_SMB, CURLPROTO_SMBS, CURLPROTO_SMTP,
CURLPROTO_SMTPS, CURLPROTO_TELNET, CURLPROTO_TFTP, CURLPROTO_MQTT
.fi
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long protocol;
curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.52.0. Deprecated since 7.85.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RESPONSE_CODE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,59 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PROXYAUTH_AVAIL.md
.TH CURLINFO_PROXYAUTH_AVAIL 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL,
long *authp);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive a bitmask indicating the authentication
method(s) available according to the previous response. The meaning of the
bits is explained in the \fICURLOPT_PROXYAUTH(3)\fP option for
\fIcurl_easy_setopt(3)\fP.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80");
res = curl_easy_perform(curl);
if(!res) {
/* extract the available proxy authentication types */
long auth;
res = curl_easy_getinfo(curl, CURLINFO_PROXYAUTH_AVAIL, &auth);
if(!res) {
if(!auth)
printf("No proxy auth available, perhaps no 407?\\n");
else {
printf("%s%s%s%s\\n",
auth & CURLAUTH_BASIC ? "Basic ":"",
auth & CURLAUTH_DIGEST ? "Digest ":"",
auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
auth % CURLAUTH_NTLM ? "NTLM ":"");
}
}
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added RFC 2617 in 7.10.8
Added RFC 7616 in 7.57.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_HTTPAUTH_AVAIL (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,86 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PROXY_ERROR.md
.TH CURLINFO_PROXY_ERROR 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PROXY_ERROR \- get the detailed (SOCKS) proxy error
.SH SYNOPSIS
.nf
#include <curl/curl.h>
typedef enum {
CURLPX_OK,
CURLPX_BAD_ADDRESS_TYPE,
CURLPX_BAD_VERSION,
CURLPX_CLOSED,
CURLPX_GSSAPI,
CURLPX_GSSAPI_PERMSG,
CURLPX_GSSAPI_PROTECTION,
CURLPX_IDENTD,
CURLPX_IDENTD_DIFFER,
CURLPX_LONG_HOSTNAME,
CURLPX_LONG_PASSWD,
CURLPX_LONG_USER,
CURLPX_NO_AUTH,
CURLPX_RECV_ADDRESS,
CURLPX_RECV_AUTH,
CURLPX_RECV_CONNECT,
CURLPX_RECV_REQACK,
CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED,
CURLPX_REPLY_COMMAND_NOT_SUPPORTED,
CURLPX_REPLY_CONNECTION_REFUSED,
CURLPX_REPLY_GENERAL_SERVER_FAILURE,
CURLPX_REPLY_HOST_UNREACHABLE,
CURLPX_REPLY_NETWORK_UNREACHABLE,
CURLPX_REPLY_NOT_ALLOWED,
CURLPX_REPLY_TTL_EXPIRED,
CURLPX_REPLY_UNASSIGNED,
CURLPX_REQUEST_FAILED,
CURLPX_RESOLVE_HOST,
CURLPX_SEND_AUTH,
CURLPX_SEND_CONNECT,
CURLPX_SEND_REQUEST,
CURLPX_UNKNOWN_FAIL,
CURLPX_UNKNOWN_MODE,
CURLPX_USER_REJECTED,
CURLPX_LAST /* never use */
} CURLproxycode;
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_ERROR, long *detail);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive a detailed error code when the most recent
transfer returned a \fBCURLE_PROXY\fP error. That error code matches the
\fBCURLproxycode\fP set.
The error code is zero (\fBCURLPX_OK\fP) if no response code was available.
.SH PROTOCOLS
All that can be done over SOCKS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://127.0.0.1");
res = curl_easy_perform(curl);
if(res == CURLE_PROXY) {
long proxycode;
res = curl_easy_getinfo(curl, CURLINFO_PROXY_ERROR, &proxycode);
if(!res && proxycode)
printf("The detailed proxy error: %ld\\n", proxycode);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.73.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RESPONSE_CODE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3),
.BR libcurl-errors (3)

View File

@ -0,0 +1,45 @@
.\" generated by cd2nroff 0.1 from CURLINFO_PROXY_SSL_VERIFYRESULT.md
.TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT,
long *result);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the result of the certificate verification
that was requested (using the \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP
option. This is only used for HTTPS proxies.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
long verifyresult;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443");
res = curl_easy_perform(curl);
if(res)
printf("error: %s\\n", curl_easy_strerror(res));
curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT, &verifyresult);
printf("The peer verification said %s\\n", verifyresult?
"fine" : "bad");
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.52.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SSL_VERIFYRESULT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_QUEUE_TIME_T.md
.TH CURLINFO_QUEUE_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_QUEUE_TIME_T \- time this transfer was queued
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_QUEUE_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the time, in microseconds, this
transfer was held in a waiting queue before it started "for real". A transfer
might be put in a queue if after getting started, it cannot create a new
connection etc due to set conditions and limits imposed by the application.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t queue;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_QUEUE_TIME_T, &queue);
if(CURLE_OK == res) {
printf("Queued: %" CURL_FORMAT_CURL_OFF_T ".%06ld us", queue / 1000000,
(long)(queue % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 8.6.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_STARTTRANSFER_TIME_T (3),
.BR CURLOPT_TIMEOUT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,43 @@
.\" generated by cd2nroff 0.1 from CURLINFO_REDIRECT_COUNT.md
.TH CURLINFO_REDIRECT_COUNT 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_REDIRECT_COUNT \- get the number of redirects
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT,
long *countp);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the total number of redirections that were
actually followed.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long redirects;
curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &redirects);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.9.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_REDIRECT_URL (3),
.BR CURLOPT_FOLLOWLOCATION (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_REDIRECT_TIME.md
.TH CURLINFO_REDIRECT_TIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_REDIRECT_TIME \- get the time for all redirection steps
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME,
double *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the total time, in seconds, it took for
all redirection steps include name lookup, connect, pretransfer and transfer
before final transaction was started. \fICURLINFO_REDIRECT_TIME(3)\fP contains
the complete execution time for multiple redirections.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
double redirect;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &redirect);
if(CURLE_OK == res) {
printf("Time: %.1f", redirect);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.9.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_REDIRECT_COUNT (3),
.BR CURLINFO_REDIRECT_TIME_T (3),
.BR CURLINFO_REDIRECT_URL (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,53 @@
.\" generated by cd2nroff 0.1 from CURLINFO_REDIRECT_TIME_T.md
.TH CURLINFO_REDIRECT_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the total time, in microseconds, it
took for all redirection steps include name lookup, connect, pretransfer and
transfer before final transaction was started.
\fICURLINFO_REDIRECT_TIME_T(3)\fP holds the complete execution time for
multiple redirections.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t redirect;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME_T, &redirect);
if(CURLE_OK == res) {
printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", redirect / 1000000,
(long)(redirect % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_REDIRECT_COUNT (3),
.BR CURLINFO_REDIRECT_TIME (3),
.BR CURLINFO_REDIRECT_URL (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLINFO_REDIRECT_URL.md
.TH CURLINFO_REDIRECT_URL 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_REDIRECT_URL \- get the URL a redirect would go to
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the URL a redirect \fIwould\fP
take you to if you would enable \fICURLOPT_FOLLOWLOCATION(3)\fP. This can come
handy if you think using the built\-in libcurl redirect logic is not good enough
for you but you would still prefer to avoid implementing all the magic of
figuring out the new URL.
This URL is also set if the \fICURLOPT_MAXREDIRS(3)\fP limit prevented a
redirect to happen (since 7.54.1).
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
char *url = NULL;
curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &url);
if(url)
printf("Redirect to: %s\\n", url);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.18.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_REDIRECT_COUNT (3),
.BR CURLINFO_REDIRECT_TIME_T (3),
.BR CURLOPT_FOLLOWLOCATION (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,48 @@
.\" generated by cd2nroff 0.1 from CURLINFO_REFERER.md
.TH CURLINFO_REFERER 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_REFERER \- get the used referrer request header
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REFERER, char **hdrp);
.fi
.SH DESCRIPTION
Pass in a pointer to a char pointer and get the referrer header used in the
most recent request.
The \fBhdrp\fP pointer is NULL or points to private memory you MUST NOT free \-
it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
CURL handle.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.org/referrer");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
char *hdr = NULL;
curl_easy_getinfo(curl, CURLINFO_REFERER, &hdr);
if(hdr)
printf("Referrer header: %s\\n", hdr);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.76.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_REFERER (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_header (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,44 @@
.\" generated by cd2nroff 0.1 from CURLINFO_REQUEST_SIZE.md
.TH CURLINFO_REQUEST_SIZE 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_REQUEST_SIZE \- get size of sent request
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the total size of the issued
requests. This is so far only for HTTP requests. Note that this may be more
than one request if \fICURLOPT_FOLLOWLOCATION(3)\fP is enabled.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long req;
res = curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &req);
if(!res)
printf("Request size: %ld bytes\\n", req);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_HEADER_SIZE (3),
.BR CURLINFO_SIZE_DOWNLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,46 @@
.\" generated by cd2nroff 0.1 from CURLINFO_RESPONSE_CODE.md
.TH CURLINFO_RESPONSE_CODE 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_RESPONSE_CODE \- get the last response code
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the last received HTTP, FTP, SMTP or LDAP
(OpenLDAP only) response code. This option was previously known as
CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. The stored value is zero if
no server response code has been received.
Note that a proxy\(aqs CONNECT response should be read with
\fICURLINFO_HTTP_CONNECTCODE(3)\fP and not this.
.SH PROTOCOLS
HTTP, FTP, SMTP and LDAP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long response_code;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.10.8. CURLINFO_HTTP_CODE was added in 7.4.1.
Support for SMTP responses added in 7.25.0, for OpenLDAP in 7.81.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_HTTP_CONNECTCODE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLINFO_RETRY_AFTER.md
.TH CURLINFO_RETRY_AFTER 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_RETRY_AFTER \- returns the Retry\-After retry delay
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RETRY_AFTER,
curl_off_t *retry);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t variable to receive the number of seconds the
HTTP server suggests the client should wait until the next request is
issued. The information from the "Retry\-After:" header.
While the HTTP header might contain a fixed date string, the
\fICURLINFO_RETRY_AFTER(3)\fP always returns the number of seconds to wait \-
or zero if there was no header or the header could not be parsed.
.SH DEFAULT
Returns zero delay if there was no header.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
curl_off_t wait = 0;
curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait);
if(wait)
printf("Wait for %" CURL_FORMAT_CURL_OFF_T " seconds\\n", wait);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.66.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_HEADERFUNCTION (3),
.BR CURLOPT_STDERR (3),
.BR curl_easy_header (3)

View File

@ -0,0 +1,42 @@
.\" generated by cd2nroff 0.1 from CURLINFO_RTSP_CLIENT_CSEQ.md
.TH CURLINFO_RTSP_CLIENT_CSEQ 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ,
long *cseq);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the next CSeq that is expected to be used
by the application.
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long cseq;
curl_easy_getinfo(curl, CURLINFO_RTSP_CLIENT_CSEQ, &cseq);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RTSP_CSEQ_RECV (3),
.BR CURLINFO_RTSP_SERVER_CSEQ (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,42 @@
.\" generated by cd2nroff 0.1 from CURLINFO_RTSP_CSEQ_RECV.md
.TH CURLINFO_RTSP_CSEQ_RECV 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the most recently received CSeq from the
server. If your application encounters a \fICURLE_RTSP_CSEQ_ERROR\fP then you
may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this
value.
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long cseq;
curl_easy_getinfo(curl, CURLINFO_RTSP_CSEQ_RECV, &cseq);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RTSP_SERVER_CSEQ (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,46 @@
.\" generated by cd2nroff 0.1 from CURLINFO_RTSP_SERVER_CSEQ.md
.TH CURLINFO_RTSP_SERVER_CSEQ 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ,
long *cseq);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the next CSeq that is expected to be used
by the application.
Listening for server initiated requests is not implemented!
Applications wishing to resume an RTSP session on another connection should
retrieve this info before closing the active connection.
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long cseq;
curl_easy_getinfo(curl, CURLINFO_RTSP_SERVER_CSEQ, &cseq);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RTSP_CSEQ_RECV (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,47 @@
.\" generated by cd2nroff 0.1 from CURLINFO_RTSP_SESSION_ID.md
.TH CURLINFO_RTSP_SESSION_ID 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_RTSP_SESSION_ID \- get RTSP session ID
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive a pointer to a string holding the
most recent RTSP Session ID.
Applications wishing to resume an RTSP session on another connection should
retrieve this info before closing the active connection.
The \fBid\fP pointer is NULL or points to private memory. You MUST NOT free \-
it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
CURL handle.
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
char *id;
curl_easy_getinfo(curl, CURLINFO_RTSP_SESSION_ID, &id);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_RTSP_CSEQ_RECV (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,49 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SCHEME.md
.TH CURLINFO_SCHEME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme);
.fi
.SH DESCRIPTION
Pass a pointer to a char pointer to receive the pointer to a null\-terminated
string holding the URL scheme used for the most recent connection done with
this CURL \fBhandle\fP.
The \fBscheme\fP pointer is NULL or points to private memory. You MUST NOT
free \- it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
corresponding CURL handle.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
char *scheme = NULL;
curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
if(scheme)
printf("scheme: %s\\n", scheme); /* scheme: HTTP */
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.52.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_EFFECTIVE_URL (3),
.BR CURLINFO_PROTOCOL (3),
.BR CURLINFO_RESPONSE_CODE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,54 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SIZE_DOWNLOAD.md
.TH CURLINFO_SIZE_DOWNLOAD 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the total amount of bytes that were
downloaded. The amount is only for the latest transfer and gets reset again
for each new transfer. This counts actual payload data, what\(aqs also commonly
called body. All meta and header data is excluded and not included in this
number.
\fICURLINFO_SIZE_DOWNLOAD_T(3)\fP is a newer replacement that returns a more
sensible variable type.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
/* check the size */
double dl;
res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &dl);
if(!res) {
printf("Downloaded %.0f bytes\\n", dl);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SIZE_DOWNLOAD_T (3),
.BR CURLINFO_SIZE_UPLOAD_T (3),
.BR CURLOPT_MAXFILESIZE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SIZE_DOWNLOAD_T.md
.TH CURLINFO_SIZE_DOWNLOAD_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T,
curl_off_t *dlp);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the total amount of bytes that
were downloaded. The amount is only for the latest transfer and gets reset
again for each new transfer. This counts actual payload data, what\(aqs also
commonly called body. All meta and header data is excluded from this amount.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
/* check the size */
curl_off_t dl;
res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &dl);
if(!res) {
printf("Downloaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", dl);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SIZE_DOWNLOAD (3),
.BR CURLINFO_SIZE_UPLOAD_T (3),
.BR CURLOPT_MAXFILESIZE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SIZE_UPLOAD.md
.TH CURLINFO_SIZE_UPLOAD 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD,
double *uploadp);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the total amount of bytes that were
uploaded.
\fICURLINFO_SIZE_UPLOAD_T(3)\fP is a newer replacement that returns a more
sensible variable type.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
double ul;
res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &ul);
if(!res) {
printf("Uploaded %.0f bytes\\n", ul);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SIZE_DOWNLOAD_T (3),
.BR CURLINFO_SIZE_UPLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,47 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SIZE_UPLOAD_T.md
.TH CURLINFO_SIZE_UPLOAD_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T,
curl_off_t *uploadp);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the total amount of bytes that
were uploaded.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
curl_off_t ul;
res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD_T, &ul);
if(!res) {
printf("Uploaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", ul);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SIZE_DOWNLOAD_T (3),
.BR CURLINFO_SIZE_UPLOAD (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,49 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SPEED_DOWNLOAD.md
.TH CURLINFO_SPEED_DOWNLOAD 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SPEED_DOWNLOAD \- get download speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD,
double *speed);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the average download speed that curl
measured for the complete download. Measured in bytes/second.
\fICURLINFO_SPEED_DOWNLOAD_T(3)\fP is a newer replacement that returns a more
sensible variable type.
.SH PROTOCOLS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
double speed;
res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &speed);
if(!res) {
printf("Download speed %.0f bytes/sec\\n", speed);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SIZE_UPLOAD_T (3),
.BR CURLINFO_SPEED_UPLOAD (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,47 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SPEED_DOWNLOAD_T.md
.TH CURLINFO_SPEED_DOWNLOAD_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SPEED_DOWNLOAD_T \- get download speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T,
curl_off_t *speed);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the average download speed
that curl measured for the complete download. Measured in bytes/second.
.SH PROTOCOLS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
curl_off_t speed;
res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD_T, &speed);
if(!res) {
printf("Download speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n",
speed);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SIZE_UPLOAD_T (3),
.BR CURLINFO_SPEED_UPLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,47 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SPEED_UPLOAD.md
.TH CURLINFO_SPEED_UPLOAD 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SPEED_UPLOAD \- get upload speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the average upload speed that curl
measured for the complete upload. Measured in bytes/second.
\fICURLINFO_SPEED_UPLOAD_T(3)\fP is a newer replacement that returns a more
sensible variable type.
.SH PROTOCOLS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
double speed;
res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed);
if(!res) {
printf("Upload speed %.0f bytes/sec\\n", speed);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SPEED_DOWNLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,45 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SPEED_UPLOAD_T.md
.TH CURLINFO_SPEED_UPLOAD_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SPEED_UPLOAD_T \- get upload speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T,
curl_off_t *speed);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the average upload speed that
curl measured for the complete upload. Measured in bytes/second.
.SH PROTOCOLS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
curl_off_t speed;
res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD_T, &speed);
if(!res) {
printf("Upload speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", speed);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_SPEED_DOWNLOAD_T (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,46 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SSL_ENGINES.md
.TH CURLINFO_SSL_ENGINES 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto\-engines
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES,
struct curl_slist **engine_list);
.fi
.SH DESCRIPTION
Pass the address of a \(aqstruct curl_slist *\(aq to receive a linked\-list of
OpenSSL crypto\-engines supported. Note that engines are normally implemented
in separate dynamic libraries. Hence not all the returned engines may be
available at runtime. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP
on the list pointer once you are done with it, as libcurl does not free this
data for you.
.SH PROTOCOLS
All TLS based ones.
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
struct curl_slist *engines;
res = curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
if((res == CURLE_OK) && engines) {
/* we have a list, free it when done using it */
curl_slist_free_all(engines);
}
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.12.3. Available in OpenSSL builds with "engine" support.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_SSLENGINE (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,46 @@
.\" generated by cd2nroff 0.1 from CURLINFO_SSL_VERIFYRESULT.md
.TH CURLINFO_SSL_VERIFYRESULT 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT,
long *result);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the result of the server SSL certificate
verification that was requested (using the \fICURLOPT_SSL_VERIFYPEER(3)\fP
option).
0 is a positive result. Non\-zero is an error.
.SH PROTOCOLS
All using TLS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
long verifyresult;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res)
printf("error: %s\\n", curl_easy_strerror(res));
curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, &verifyresult);
printf("The peer verification said %s\\n", verifyresult?
"BAAAD":"fine");
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.5. Only set by the OpenSSL/libressl/boringssl and GnuTLS backends.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_PROXY_SSL_VERIFYRESULT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,52 @@
.\" generated by cd2nroff 0.1 from CURLINFO_STARTTRANSFER_TIME.md
.TH CURLINFO_STARTTRANSFER_TIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME,
double *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the time, in seconds, it took from the
start until the first byte is received by libcurl. This includes
\fICURLINFO_PRETRANSFER_TIME(3)\fP and also the time the server needs to
calculate the result.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
double start;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &start);
if(CURLE_OK == res) {
printf("Time: %.1f", start);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.9.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_STARTTRANSFER_TIME_T (3),
.BR CURLOPT_TIMEOUT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,54 @@
.\" generated by cd2nroff 0.1 from CURLINFO_STARTTRANSFER_TIME_T.md
.TH CURLINFO_STARTTRANSFER_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the time, in microseconds,
it took from the
start until the first byte is received by libcurl. This includes
\fICURLINFO_PRETRANSFER_TIME_T(3)\fP and also the time the server needs to
calculate the result.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t start;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME_T, &start);
if(CURLE_OK == res) {
printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", start / 1000000,
(long)(start % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_STARTTRANSFER_TIME (3),
.BR CURLOPT_TIMEOUT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,56 @@
.\" generated by cd2nroff 0.1 from CURLINFO_TLS_SESSION.md
.TH CURLINFO_TLS_SESSION 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_TLS_SESSION \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
struct curl_tlssessioninfo **session);
.fi
.SH DESCRIPTION
\fBThis option has been superseded\fP by \fICURLINFO_TLS_SSL_PTR(3)\fP which
was added in 7.48.0. The only reason you would use this option instead is if
you could be using a version of libcurl earlier than 7.48.0.
This option is exactly the same as \fICURLINFO_TLS_SSL_PTR(3)\fP except in the
case of OpenSSL. If the session \fIbackend\fP is CURLSSLBACKEND_OPENSSL the
session \fIinternals\fP pointer varies depending on the option:
\fICURLINFO_TLS_SESSION(3)\fP OpenSSL session \fIinternals\fP is \fBSSL_CTX \fP*.
\fICURLINFO_TLS_SSL_PTR(3)\fP OpenSSL session \fIinternals\fP is \fBSSL \fP*.
You can obtain an \fBSSL_CTX\fP pointer from an SSL pointer using OpenSSL
function \fISSL_get_SSL_CTX(3)\fP. Therefore unless you need compatibility
with older versions of libcurl use \fICURLINFO_TLS_SSL_PTR(3)\fP. Refer to
that document for more information.
.SH PROTOCOLS
All TLS\-based
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
struct curl_tlssessioninfo *tls;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res)
printf("error: %s\\n", curl_easy_strerror(res));
curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &tls);
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.34.0. Deprecated since 7.48.0 and supported OpenSSL, GnuTLS, and
NSS only up until this version was released.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_TLS_SSL_PTR (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,139 @@
.\" generated by cd2nroff 0.1 from CURLINFO_TLS_SSL_PTR.md
.TH CURLINFO_TLS_SSL_PTR 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SSL_PTR,
struct curl_tlssessioninfo **session);
/* if you need compatibility with libcurl < 7.48.0 use
CURLINFO_TLS_SESSION instead: */
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
struct curl_tlssessioninfo **session);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIstruct curl_tlssessioninfo \fP*. The pointer is initialized
to refer to a \fIstruct curl_tlssessioninfo \fP* that contains an enum indicating
the SSL library used for the handshake and a pointer to the respective
internal TLS session structure of this underlying SSL library.
This option may be useful for example to extract certificate information in a
format convenient for further processing, such as manual validation. Refer to
the \fBLIMITATIONS\fP section.
.nf
struct curl_tlssessioninfo {
curl_sslbackend backend;
void *internals;
};
.fi
The \fIbackend\fP struct member is one of the defines in the CURLSSLBACKEND_*
series: CURLSSLBACKEND_NONE (when built without TLS support),
CURLSSLBACKEND_WOLFSSL, CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS,
CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL,
CURLSSLBACKEND_SCHANNEL or CURLSSLBACKEND_MESALINK. (Note that the OpenSSL
forks are all reported as just OpenSSL here.)
The \fIinternals\fP struct member points to a TLS library specific pointer for
the active ("in use") SSL connection, with the following underlying types:
.IP GnuTLS
\fBgnutls_session_t\fP
.IP NSS
\fBPRFileDesc \fP*
.IP OpenSSL
\fICURLINFO_TLS_SESSION(3)\fP: \fBSSL_CTX \fP*
\fICURLINFO_TLS_SSL_PTR(3)\fP: \fBSSL \fP*
Since 7.48.0 the \fIinternals\fP member can point to these other SSL backends
as well:
.IP mbedTLS
\fBmbedTLS_ssl_context \fP*
.IP "Secure Channel"
\fBCtxtHandle \fP*
.IP "Secure Transport"
\fBSSLContext \fP*
.IP wolfSSL
\fBSSL \fP*
If the \fIinternals\fP pointer is NULL then either the SSL backend is not
supported, an SSL session has not yet been established or the connection is no
longer associated with the easy handle (e.g. \fIcurl_easy_perform(3)\fP has
returned).
.SH LIMITATIONS
This option has some limitations that could make it unsafe when it comes to
the manual verification of certificates.
This option only retrieves the first in\-use SSL session pointer for your easy
handle, however your easy handle may have more than one in\-use SSL session if
using FTP over SSL. That is because the FTP protocol has a control channel and
a data channel and one or both may be over SSL. Currently there is no way to
retrieve a second in\-use SSL session associated with an easy handle.
This option has not been thoroughly tested with clear text protocols that can
be upgraded/downgraded to/from SSL: FTP, SMTP, POP3, IMAP when used with
\fICURLOPT_USE_SSL(3)\fP. Though you can to retrieve the SSL pointer, it is possible
that before you can do that, data (including auth) may have already been sent
over a connection after it was upgraded.
Renegotiation. If unsafe renegotiation or renegotiation in a way that the
certificate is allowed to change is allowed by your SSL library this may occur
and the certificate may change, and data may continue to be sent or received
after renegotiation but before you are able to get the (possibly) changed SSL
pointer, with the (possibly) changed certificate information.
Instead of using this option to poll for certificate changes use
\fICURLOPT_SSL_CTX_FUNCTION(3)\fP to set a verification callback, if supported.
That is safer and does not suffer from any of the problems above.
How are you using this option? Are you affected by any of these limitations?
Please let us know by making a comment at
https://github.com/curl/curl/issues/685
.SH PROTOCOLS
All TLS\-based
.SH EXAMPLE
.nf
#include <curl/curl.h>
#include <openssl/ssl.h>
CURL *curl;
static size_t wf(void *ptr, size_t size, size_t nmemb, void *stream)
{
const struct curl_tlssessioninfo *info = NULL;
CURLcode res = curl_easy_getinfo(curl, CURLINFO_TLS_SSL_PTR, &info);
if(info && !res) {
if(CURLSSLBACKEND_OPENSSL == info->backend) {
printf("OpenSSL ver. %s\\n", SSL_get_version((SSL*)info->internals));
}
}
return size * nmemb;
}
int main(int argc, char **argv)
{
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, wf);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return res;
}
.fi
.SH AVAILABILITY
Added in 7.48.0.
This option supersedes \fICURLINFO_TLS_SESSION(3)\fP which was added in 7.34.0.
This option is exactly the same as that option except in the case of OpenSSL.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_TLS_SESSION (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLINFO_TOTAL_TIME.md
.TH CURLINFO_TOTAL_TIME 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_TOTAL_TIME \- get total time of previous transfer
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the total time in seconds for the
previous transfer, including name resolving, TCP connect etc. The double
represents the time in seconds, including fractions.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
double total;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total);
if(CURLE_OK == res) {
printf("Time: %.1f", total);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_TOTAL_TIME_T (3),
.BR CURLOPT_TIMEOUT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,52 @@
.\" generated by cd2nroff 0.1 from CURLINFO_TOTAL_TIME_T.md
.TH CURLINFO_TOTAL_TIME_T 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
Pass a pointer to a curl_off_t to receive the total time in microseconds
for the previous transfer, including name resolving, TCP connect etc.
The curl_off_t represents the time in microseconds.
When a redirect is followed, the time from each request is added together.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_off_t total;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME_T, &total);
if(CURLE_OK == res) {
printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", total / 1000000,
(long)(total % 1000000));
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_TOTAL_TIME (3),
.BR CURLOPT_TIMEOUT (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLINFO_XFER_ID.md
.TH CURLINFO_XFER_ID 3 "March 15 2024" libcurl
.SH NAME
CURLINFO_XFER_ID \- get the ID of a transfer
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_XFER_ID,
curl_off_t *xfer_id);
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the identifier of the
current/last transfer done with the handle. Stores \-1 if no transfer
has been started yet for the handle.
The transfer id is unique among all transfers performed using the same
connection cache. This is implicitly the case for all transfers in the
same multi handle.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
curl_off_t xfer_id;
res = curl_easy_getinfo(curl, CURLINFO_XFER_ID, &xfer_id);
if(!res) {
printf("Transfer ID: %" CURL_FORMAT_CURL_OFF_T "\\n", xfer_id);
}
}
}
}
.fi
.SH AVAILABILITY
Added in 8.2.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_CONN_ID (3),
.BR curl_easy_getinfo (3),
.BR curl_easy_setopt (3)

View File

@ -0,0 +1,40 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md
.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE,
long size);
.fi
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.
Pass a long with a \fBsize\fP in bytes. If a transfer in a pipeline is
currently processing a chunked (Transfer\-encoding: chunked) request with a
current chunk length larger than \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP,
that pipeline is not considered for additional requests, even if it is shorter
than \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
.SH DEFAULT
The default value is 0, which means that the penalization is inactive.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
long maxchunk = 10000;
curl_multi_setopt(m, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, maxchunk);
}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3),
.BR CURLMOPT_MAX_PIPELINE_LENGTH (3),
.BR CURLMOPT_PIPELINING (3)

View File

@ -0,0 +1,39 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md
.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE,
long size);
.fi
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.
Pass a long with a \fBsize\fP in bytes. If a transfer in a pipeline is
currently processing a request with a Content\-Length larger than this
\fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP, that pipeline is not considered
for additional requests, even if it is shorter than
\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
.SH DEFAULT
The default value is 0, which means that the size penalization is inactive.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
long maxlength = 10000;
curl_multi_setopt(m, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, maxlength);
}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3),
.BR CURLMOPT_PIPELINING (3)

View File

@ -0,0 +1,48 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_MAXCONNECTS.md
.TH CURLMOPT_MAXCONNECTS 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_MAXCONNECTS \- size of connection cache
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max);
.fi
.SH DESCRIPTION
Pass a long indicating the \fBmax\fP. The set number is used as the maximum
amount of simultaneously open connections that libcurl may keep in its
connection cache after completed use. By default libcurl enlarges the size for
each added easy handle to make it fit 4 times the number of added easy
handles.
By setting this option, you can prevent the cache size from growing beyond the
limit set by you.
When the cache is full, curl closes the oldest one in the cache to prevent the
number of open connections from increasing.
This option is for the multi handle\(aqs use only, when using the easy interface
you should instead use the \fICURLOPT_MAXCONNECTS(3)\fP option.
See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP for limiting the number of active
connections.
.SH DEFAULT
See DESCRIPTION
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
/* only keep 10 connections in the cache */
curl_multi_setopt(m, CURLMOPT_MAXCONNECTS, 10L);
}
.fi
.SH AVAILABILITY
Added in 7.16.3
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_MAX_HOST_CONNECTIONS (3),
.BR CURLOPT_MAXCONNECTS (3)

View File

@ -0,0 +1,38 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_MAX_CONCURRENT_STREAMS.md
.TH CURLMOPT_MAX_CONCURRENT_STREAMS 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_MAX_CONCURRENT_STREAMS \- max concurrent streams for http2
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_CONCURRENT_STREAMS,
long max);
.fi
.SH DESCRIPTION
Pass a long indicating the \fBmax\fP. The set number is used as the maximum
number of concurrent streams libcurl should support on connections done using
HTTP/2 or HTTP/3.
Valid values range from 1 to 2147483647 (2^31 \- 1) and defaults to 100. The
value passed here would be honored based on other system resources properties.
.SH DEFAULT
100
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
/* max concurrent streams 200 */
curl_multi_setopt(m, CURLMOPT_MAX_CONCURRENT_STREAMS, 200L);
}
.fi
.SH AVAILABILITY
Added in 7.67.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_MAXCONNECTS (3),
.BR CURLOPT_MAXCONNECTS (3)

View File

@ -0,0 +1,51 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_MAX_HOST_CONNECTIONS.md
.TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_MAX_HOST_CONNECTIONS \- max number of connections to a single host
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS,
long max);
.fi
.SH DESCRIPTION
Pass a long to indicate \fBmax\fP. The set number is used as the maximum amount
of simultaneously open connections to a single host (a host being the same as
a hostname + port number pair). For each new session to a host, libcurl might
open a new connection up to the limit set by
\fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP. When the limit is reached, new sessions are
kept pending until a connection becomes available.
The default \fBmax\fP value is 0, unlimited. This set limit is also used for
proxy connections, and then the proxy is considered to be the host for which
this limit counts.
When more transfers are added to the multi handle than what can be performed
due to the set limit, they are queued up waiting for their chance. When that
happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout is inclusive of the waiting
time, meaning that if you set a too narrow timeout in such a case the transfer
might never even start before it times out.
Even in the queued up situation, the \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
timeout is however treated as a per\-connect timeout.
.SH DEFAULT
0
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
/* do no more than 2 connections per host */
curl_multi_setopt(m, CURLMOPT_MAX_HOST_CONNECTIONS, 2L);
}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_MAXCONNECTS (3),
.BR CURLMOPT_MAX_TOTAL_CONNECTIONS (3)

View File

@ -0,0 +1,44 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_MAX_PIPELINE_LENGTH.md
.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH,
long max);
.fi
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.
Pass a long. The set \fBmax\fP number is used as the maximum amount of
outstanding requests in an HTTP/1.1 pipeline. This option is only used for
HTTP/1.1 pipelining, not for HTTP/2 multiplexing.
When this limit is reached, libcurl creates another connection to the same
host (see \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP), or queue the request until one
.nf
of the pipelines to the host is ready to accept a request. Thus, the total
.fi
\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
.SH DEFAULT
5
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
/* set a more conservative pipe length */
curl_multi_setopt(m, CURLMOPT_MAX_PIPELINE_LENGTH, 3L);
}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_MAX_HOST_CONNECTIONS (3),
.BR CURLMOPT_PIPELINING (3)

View File

@ -0,0 +1,49 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_MAX_TOTAL_CONNECTIONS.md
.TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS,
long amount);
.fi
.SH DESCRIPTION
Pass a long for the \fBamount\fP. The set number is used as the maximum number
of simultaneously open connections in total using this multi handle. For each
new session, libcurl might open a new connection up to the limit set by
\fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP. When the limit is reached, new
sessions are held pending until there are available connections. If
\fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl can try multiplexing if the
host is capable of it.
When more transfers are added to the multi handle than what can be performed
due to the set limit, they get queued up waiting for their chance. When that
happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout is counted inclusive of the
waiting time, meaning that if you set a too narrow timeout in such a case the
transfer might never even start before it times out.
Even in the queued up situation, the \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
timeout is however treated as a per\-connect timeout.
.SH DEFAULT
The default value is 0, which means that there is no limit. It is then simply
controlled by the number of easy handles added.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
/* never do more than 15 connections */
curl_multi_setopt(m, CURLMOPT_MAX_TOTAL_CONNECTIONS, 15L);
}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_MAXCONNECTS (3),
.BR CURLMOPT_MAX_HOST_CONNECTIONS (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_PIPELINING.md
.TH CURLMOPT_PIPELINING 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask);
.fi
.SH DESCRIPTION
Pass in the correct value in the \fBbitmask\fP parameter to instruct libcurl
to enable multiplexing for this multi handle.
With multiplexing enabled, libcurl attempts to do multiple transfers over the
same connection when doing parallel transfers to the same hosts.
.IP "CURLPIPE_NOTHING (0)"
Default, which means doing no attempts at multiplexing.
.IP "CURLPIPE_HTTP1 (1)"
This bit is deprecated and has no effect since version 7.62.0.
.IP "CURLPIPE_MULTIPLEX (2)"
If this bit is set, libcurl tries to multiplex the new transfer over an
existing connection if possible. This requires HTTP/2 or HTTP/3.
.SH DEFAULT
Since 7.62.0, \fBCURLPIPE_MULTIPLEX\fP is enabled by default.
Before that, default was \fBCURLPIPE_NOTHING\fP.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
int main(void)
{
CURLM *m = curl_multi_init();
/* try HTTP/2 multiplexing */
curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
}
.fi
.SH AVAILABILITY
Added in 7.16.0. Multiplex support bit added in 7.43.0. HTTP/1 Pipelining
support was disabled in 7.62.0.
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3),
.BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3),
.BR CURLMOPT_MAXCONNECTS (3),
.BR CURLMOPT_MAX_HOST_CONNECTIONS (3),
.BR CURLMOPT_MAX_PIPELINE_LENGTH (3),
.BR CURLMOPT_PIPELINING_SITE_BL (3)

View File

@ -0,0 +1,48 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_PIPELINING_SERVER_BL.md
.TH CURLMOPT_PIPELINING_SERVER_BL 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_PIPELINING_SERVER_BL \- pipelining server block list
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL,
char **servers);
.fi
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.
Pass a \fBservers\fP array of char *, ending with a NULL entry. This is a list
of server types prefixes (in the Server: HTTP header) that are blocked from
pipelining, i.e server types that are known to not support HTTP
pipelining. The array is copied by libcurl.
Note that the comparison matches if the Server: header begins with the string
in the block list, i.e "Server: Ninja 1.2.3" and "Server: Ninja 1.4.0" can
both be blocked by having "Ninja" in the list.
Pass a NULL pointer to clear the block list.
.SH DEFAULT
The default value is NULL, which means that there is no block list.
.SH PROTOCOLS
.SH EXAMPLE
.nf
static char *server_block_list[] =
{
"Microsoft-IIS/6.0",
"nginx/0.8.54",
NULL
};
int main(void)
{
CURLM *m = curl_multi_init();
curl_multi_setopt(m, CURLMOPT_PIPELINING_SERVER_BL, server_block_list);
}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_PIPELINING (3),
.BR CURLMOPT_PIPELINING_SITE_BL (3)

View File

@ -0,0 +1,45 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_PIPELINING_SITE_BL.md
.TH CURLMOPT_PIPELINING_SITE_BL 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_PIPELINING_SITE_BL \- pipelining host block list
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL,
char **hosts);
.fi
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.
Pass a \fBhosts\fP array of char *, ending with a NULL entry. This is a list
of sites that are blocked from pipelining, i.e sites that are known to not
support HTTP pipelining. The array is copied by libcurl.
Pass a NULL pointer to clear the block list.
.SH DEFAULT
The default value is NULL, which means that there is no block list.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
static char *site_block_list[] =
{
"www.haxx.se",
"www.example.com:1234",
NULL
};
int main(void)
{
CURLM *m = curl_multi_init();
curl_multi_setopt(m, CURLMOPT_PIPELINING_SITE_BL, site_block_list);
}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_PIPELINING (3),
.BR CURLMOPT_PIPELINING_SERVER_BL (3)

View File

@ -0,0 +1,66 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_PUSHDATA.md
.TH CURLMOPT_PUSHDATA 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_PUSHDATA \- pointer to pass to push callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHDATA, void *pointer);
.fi
.SH DESCRIPTION
Set a \fIpointer\fP to pass as the last argument to the
\fICURLMOPT_PUSHFUNCTION(3)\fP callback. The pointer is not touched or used by
libcurl itself, only passed on to the callback function.
.SH DEFAULT
NULL
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
#include <string.h>
/* only allow pushes for file names starting with "push-" */
int push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
void *clientp)
{
char *headp;
int *transfers = (int *)clientp;
FILE *out;
headp = curl_pushheader_byname(headers, ":path");
if(headp && !strncmp(headp, "/push-", 6)) {
fprintf(stderr, "The PATH is %s\\n", headp);
/* save the push here */
out = fopen("pushed-stream", "wb");
/* write to this file */
curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
(*transfers)++; /* one more */
return CURL_PUSH_OK;
}
return CURL_PUSH_DENY;
}
int main(void)
{
int counter;
CURLM *multi = curl_multi_init();
curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
}
.fi
.SH AVAILABILITY
Added in 7.44.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_PIPELINING (3),
.BR CURLMOPT_PUSHFUNCTION (3),
.BR CURLOPT_PIPEWAIT (3),
.BR RFC 7540

View File

@ -0,0 +1,116 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_PUSHFUNCTION.md
.TH CURLMOPT_PUSHFUNCTION 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
.SH SYNOPSIS
.nf
#include <curl/curl.h>
int curl_push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
void *clientp);
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHFUNCTION,
curl_push_callback func);
.fi
.SH DESCRIPTION
This callback gets called when a new HTTP/2 stream is being pushed by the
server (using the PUSH_PROMISE frame). If no push callback is set, all offered
pushes are denied automatically.
.SH CALLBACK DESCRIPTION
The callback gets its arguments like this:
\fIparent\fP is the handle of the stream on which this push arrives. The new
handle has been duplicated from the parent, meaning that it has gotten all its
options inherited. It is then up to the application to alter any options if
desired.
\fIeasy\fP is a newly created handle that represents this upcoming transfer.
\fInum_headers\fP is the number of name+value pairs that was received and can
be accessed
\fIheaders\fP is a handle used to access push headers using the accessor
functions described below. This only accesses and provides the PUSH_PROMISE
headers, the normal response headers are provided in the header callback as
usual.
\fIclientp\fP is the pointer set with \fICURLMOPT_PUSHDATA(3)\fP
If the callback returns CURL_PUSH_OK, the new easy handle is added to the
multi handle, the callback must not do that by itself.
The callback can access PUSH_PROMISE headers with two accessor
functions. These functions can only be used from within this callback and they
can only access the PUSH_PROMISE headers: \fIcurl_pushheader_byname(3)\fP and
\fIcurl_pushheader_bynum(3)\fP. The normal response headers are passed to the
header callback for pushed streams just as for normal streams.
The header fields can also be accessed with \fIcurl_easy_header(3)\fP,
introduced in later libcurl versions.
.SH CALLBACK RETURN VALUE
.IP "CURL_PUSH_OK (0)"
The application has accepted the stream and it can now start receiving data,
the ownership of the CURL handle has been taken over by the application.
.IP "CURL_PUSH_DENY (1)"
The callback denies the stream and no data reaches the application, the easy
handle is destroyed by libcurl.
.IP "CURL_PUSH_ERROROUT (2)"
Returning this code rejects the pushed stream and returns an error back on the
parent stream making it get closed with an error. (Added in 7.72.0)
.IP *
All other return codes are reserved for future use.
.SH DEFAULT
NULL, no callback
.SH PROTOCOLS
HTTP(S) (HTTP/2 only)
.SH EXAMPLE
.nf
#include <string.h>
/* only allow pushes for file names starting with "push-" */
int push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
void *clientp)
{
char *headp;
int *transfers = (int *)clientp;
FILE *out;
headp = curl_pushheader_byname(headers, ":path");
if(headp && !strncmp(headp, "/push-", 6)) {
fprintf(stderr, "The PATH is %s\\n", headp);
/* save the push here */
out = fopen("pushed-stream", "wb");
/* write to this file */
curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
(*transfers)++; /* one more */
return CURL_PUSH_OK;
}
return CURL_PUSH_DENY;
}
int main(void)
{
int counter;
CURLM *multi = curl_multi_init();
curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
}
.fi
.SH AVAILABILITY
Added in 7.44.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_PIPELINING (3),
.BR CURLMOPT_PUSHDATA (3),
.BR CURLOPT_PIPEWAIT (3),
.BR RFC 7540

View File

@ -0,0 +1,61 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_SOCKETDATA.md
.TH CURLMOPT_SOCKETDATA 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETDATA, void *pointer);
.fi
.SH DESCRIPTION
A data \fIpointer\fP to pass to the socket callback set with the
\fICURLMOPT_SOCKETFUNCTION(3)\fP option.
This pointer is not touched by libcurl but is only passed in as the socket
callbacks\(aqs \fBclientp\fP argument.
.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
struct priv {
void *ours;
};
static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
{
struct priv *p = sockp;
printf("my ptr: %p\\n", p->ours);
if(what == CURL_POLL_REMOVE) {
/* remove the socket from our collection */
}
if(what & CURL_POLL_IN) {
/* wait for read on this socket */
}
if(what & CURL_POLL_OUT) {
/* wait for write on this socket */
}
return 0;
}
int main(void)
{
struct priv setup;
CURLM *multi = curl_multi_init();
/* ... use socket callback and custom pointer */
curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup);
}
.fi
.SH AVAILABILITY
Added in 7.15.4
.SH RETURN VALUE
Returns CURLM_OK.
.SH SEE ALSO
.BR CURLMOPT_SOCKETFUNCTION (3),
.BR CURLMOPT_TIMERFUNCTION (3),
.BR curl_multi_socket_action (3)

View File

@ -0,0 +1,104 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_SOCKETFUNCTION.md
.TH CURLMOPT_SOCKETFUNCTION 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
.SH SYNOPSIS
.nf
#include <curl/curl.h>
int socket_callback(CURL *easy, /* easy handle */
curl_socket_t s, /* socket */
int what, /* describes the socket */
void *clientp, /* private callback pointer */
void *socketp); /* private socket pointer */
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, socket_callback);
.fi
.SH DESCRIPTION
Pass a pointer to your callback function, which should match the prototype
shown above.
When the \fIcurl_multi_socket_action(3)\fP function is called, it uses this
callback to inform the application about updates in the socket (file
descriptor) status by doing none, one, or multiple calls to the
\fBsocket_callback\fP. The callback function gets status updates with changes
since the previous time the callback was called. If the given callback pointer
is set to NULL, no callback is called.
libcurl then expects the application to monitor the sockets for the specific
activities and tell libcurl again when something happens on one of them. Tell
libcurl by calling \fIcurl_multi_socket_action(3)\fP.
.SH CALLBACK ARGUMENTS
\fIeasy\fP identifies the specific transfer for which this update is related.
\fIs\fP is the specific socket this function invocation concerns. If the
\fBwhat\fP argument is not CURL_POLL_REMOVE then it holds information about
what activity on this socket the application is supposed to
monitor. Subsequent calls to this callback might update the \fBwhat\fP bits
for a socket that is already monitored.
The socket callback should return 0 on success, and \-1 on error. If this
callback returns error, \fBall\fP transfers currently in progress in this
multi handle are aborted and made to fail.
\fBclientp\fP is set with \fICURLMOPT_SOCKETDATA(3)\fP.
\fBsocketp\fP is set with \fIcurl_multi_assign(3)\fP or NULL.
The \fBwhat\fP parameter informs the callback on the status of the given
socket. It can hold one of these values:
.IP CURL_POLL_IN
Wait for incoming data. For the socket to become readable.
.IP CURL_POLL_OUT
Wait for outgoing data. For the socket to become writable.
.IP CURL_POLL_INOUT
Wait for incoming and outgoing data. For the socket to become readable or
writable.
.IP CURL_POLL_REMOVE
The specified socket/file descriptor is no longer used by libcurl for any
active transfer. It might soon be added again.
.SH DEFAULT
NULL (no callback)
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
struct priv {
void *ours;
};
static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
{
struct priv *p = sockp;
printf("our ptr: %p\\n", p->ours);
if(what == CURL_POLL_REMOVE) {
/* remove the socket from our collection */
}
if(what & CURL_POLL_IN) {
/* wait for read on this socket */
}
if(what & CURL_POLL_OUT) {
/* wait for write on this socket */
}
return 0;
}
int main(void)
{
struct priv setup;
CURLM *multi = curl_multi_init();
/* ... use socket callback and custom pointer */
curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup);
}
.fi
.SH AVAILABILITY
Added in 7.15.4
.SH RETURN VALUE
Returns CURLM_OK.
.SH SEE ALSO
.BR CURLMOPT_SOCKETDATA (3),
.BR CURLMOPT_TIMERFUNCTION (3),
.BR curl_multi_socket_action (3)

View File

@ -0,0 +1,54 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_TIMERDATA.md
.TH CURLMOPT_TIMERDATA 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERDATA, void *pointer);
.fi
.SH DESCRIPTION
A data \fBpointer\fP to pass to the timer callback set with the
\fICURLMOPT_TIMERFUNCTION(3)\fP option.
This pointer is not touched by libcurl but is only be passed in to the timer
callbacks\(aqs \fBclientp\fP argument.
.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
struct priv {
void *custom;
};
static int timerfunc(CURLM *multi, long timeout_ms, void *clientp)
{
struct priv *mydata = clientp;
printf("our ptr: %p\\n", mydata->custom);
if(timeout_ms) {
/* this is the new single timeout to wait for */
}
else {
/* delete the timeout, nothing to wait for now */
}
}
int main(void)
{
struct priv mydata;
CURLM *multi = curl_multi_init();
curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata);
}
.fi
.SH AVAILABILITY
Added in 7.16.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_SOCKETFUNCTION (3),
.BR CURLMOPT_TIMERFUNCTION (3)

View File

@ -0,0 +1,82 @@
.\" generated by cd2nroff 0.1 from CURLMOPT_TIMERFUNCTION.md
.TH CURLMOPT_TIMERFUNCTION 3 "March 15 2024" libcurl
.SH NAME
CURLMOPT_TIMERFUNCTION \- callback to receive timeout values
.SH SYNOPSIS
.nf
#include <curl/curl.h>
int timer_callback(CURLM *multi, /* multi handle */
long timeout_ms, /* timeout in number of ms */
void *clientp); /* private callback pointer */
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback);
.fi
.SH DESCRIPTION
Pass a pointer to your callback function, which should match the prototype
shown above.
Certain features, such as timeouts and retries, require you to call libcurl
even when there is no activity on the file descriptors.
Your callback function \fBtimer_callback\fP should install a non\-repeating
timer with an expire time of \fBtimeout_ms\fP milliseconds. When that timer
fires, call either \fIcurl_multi_socket_action(3)\fP or
\fIcurl_multi_perform(3)\fP, depending on which interface you use.
A \fBtimeout_ms\fP value of \-1 passed to this callback means you should delete
the timer. All other values are valid expire times in number of milliseconds.
The \fBtimer_callback\fP is called when the timeout expire time is changed.
The \fBclientp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP.
The timer callback should return 0 on success, and \-1 on error. If this
callback returns error, \fBall\fP transfers currently in progress in this
multi handle are aborted and made to fail.
This callback can be used instead of, or in addition to,
\fIcurl_multi_timeout(3)\fP.
\fBWARNING:\fP do not call libcurl directly from within the callback itself
when the \fBtimeout_ms\fP value is zero, since it risks triggering an
unpleasant recursive behavior that immediately calls another call to the
callback with a zero timeout...
.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
struct priv {
void *custom;
};
static int timerfunc(CURLM *multi, long timeout_ms, void *clientp)
{
struct priv *mydata = clientp;
printf("our ptr: %p\\n", mydata->custom);
if(timeout_ms) {
/* this is the new single timeout to wait for */
}
else {
/* delete the timeout, nothing to wait for now */
}
}
int main(void)
{
struct priv mydata;
CURLM *multi = curl_multi_init();
curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata);
}
.fi
.SH AVAILABILITY
Added in 7.16.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLMOPT_SOCKETFUNCTION (3),
.BR CURLMOPT_TIMERDATA (3)

View File

@ -0,0 +1,50 @@
.\" generated by cd2nroff 0.1 from CURLOPT_ABSTRACT_UNIX_SOCKET.md
.TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_ABSTRACT_UNIX_SOCKET \- abstract Unix domain socket
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET,
char *path);
.fi
.SH DESCRIPTION
Enables the use of an abstract Unix domain socket instead of establishing a
TCP connection to a host. The parameter should be a char * to a
null\-terminated string holding the path of the socket. The path is set to
\fIpath\fP prefixed by a NULL byte. This is the convention for abstract
sockets, however it should be stressed that the path passed to this function
should not contain a leading NULL byte.
On non\-supporting platforms, the abstract address is interpreted as an empty
string and fails gracefully, generating a runtime error.
This option shares the same semantics as \fICURLOPT_UNIX_SOCKET_PATH(3)\fP in
which documentation more details can be found. Internally, these two options
share the same storage and therefore only one of them can be set per handle.
.SH DEFAULT
Default is NULL.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_ABSTRACT_UNIX_SOCKET, "/tmp/foo.sock");
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/");
/* Perform the request */
curl_easy_perform(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.53.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_UNIX_SOCKET_PATH (3),
.BR unix (7)

View File

@ -0,0 +1,40 @@
.\" generated by cd2nroff 0.1 from CURLOPT_ACCEPTTIMEOUT_MS.md
.TH CURLOPT_ACCEPTTIMEOUT_MS 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms);
.fi
.SH DESCRIPTION
Pass a long telling libcurl the maximum number of milliseconds to wait for a
server to connect back to libcurl when an active FTP connection is used.
.SH DEFAULT
60000 milliseconds
.SH PROTOCOLS
FTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file");
/* wait no more than 5 seconds for FTP server responses */
curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L);
curl_easy_perform(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.24.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_CONNECTTIMEOUT_MS (3),
.BR CURLOPT_DEBUGFUNCTION (3),
.BR CURLOPT_STDERR (3)

View File

@ -0,0 +1,89 @@
.\" generated by cd2nroff 0.1 from CURLOPT_ACCEPT_ENCODING.md
.TH CURLOPT_ACCEPT_ENCODING 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_ACCEPT_ENCODING \- automatic decompression of HTTP downloads
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc);
.fi
.SH DESCRIPTION
Pass a char pointer argument specifying what encoding you would like.
Sets the contents of the Accept\-Encoding: header sent in an HTTP request, and
enables decoding of a response when a Content\-Encoding: header is received.
libcurl potentially supports several different compressed encodings depending
on what support that has been built\-in.
To aid applications not having to bother about what specific algorithms this
particular libcurl build supports, libcurl allows a zero\-length string to be
set ("") to ask for an Accept\-Encoding: header to be used that contains all
built\-in supported encodings.
Alternatively, you can specify exactly the encoding or list of encodings you
want in the response. The following encodings are supported: \fIidentity\fP,
meaning non\-compressed, \fIdeflate\fP which requests the server to compress
its response using the zlib algorithm, \fIgzip\fP which requests the gzip
algorithm, (since curl 7.57.0) \fIbr\fP which is brotli and (since curl
7.72.0) \fIzstd\fP which is zstd. Provide them in the string as a
comma\-separated list of accepted encodings, like: \fB"br, gzip, deflate"\fP.
Set \fICURLOPT_ACCEPT_ENCODING(3)\fP to NULL to explicitly disable it, which
makes libcurl not send an Accept\-Encoding: header and not decompress received
contents automatically.
You can also opt to just include the Accept\-Encoding: header in your request
with \fICURLOPT_HTTPHEADER(3)\fP but then there is no automatic decompressing
when receiving data.
This is a request, not an order; the server may or may not do it. This option
must be set (to any non\-NULL value) or else any unsolicited encoding done by
the server is ignored.
Servers might respond with Content\-Encoding even without getting a
Accept\-Encoding: in the request. Servers might respond with a different
Content\-Encoding than what was asked for in the request.
The Content\-Length: servers send for a compressed response is supposed to
indicate the length of the compressed content so when auto decoding is enabled
it may not match the sum of bytes reported by the write callbacks (although,
sending the length of the non\-compressed content is a common server mistake).
The application does not have to keep the string around after setting this
option.
.SH DEFAULT
NULL
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* enable all supported built-in compressions */
curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "");
/* Perform the request */
curl_easy_perform(curl);
}
}
.fi
.SH AVAILABILITY
This option was called CURLOPT_ENCODING before 7.21.6
The specific libcurl you are using must have been built with zlib to be able to
decompress gzip and deflate responses, with the brotli library to
decompress brotli responses and with the zstd library to decompress zstd
responses.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH SEE ALSO
.BR CURLOPT_HTTPHEADER (3),
.BR CURLOPT_HTTP_CONTENT_DECODING (3),
.BR CURLOPT_TRANSFER_ENCODING (3)

View File

@ -0,0 +1,42 @@
.\" generated by cd2nroff 0.1 from CURLOPT_ADDRESS_SCOPE.md
.TH CURLOPT_ADDRESS_SCOPE 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_ADDRESS_SCOPE \- scope id for IPv6 addresses
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope);
.fi
.SH DESCRIPTION
Pass a long specifying the scope id value to use when connecting to IPv6 addresses.
.SH DEFAULT
0
.SH PROTOCOLS
All, when using IPv6
.SH EXAMPLE
.nf
#include <net/if.h> /* for if_nametoindex() */
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode ret;
long my_scope_id;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
my_scope_id = if_nametoindex("eth0");
curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id);
ret = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.19.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value.
.SH SEE ALSO
.BR CURLOPT_DEBUGFUNCTION (3),
.BR CURLOPT_STDERR (3)

View File

@ -0,0 +1,72 @@
.\" generated by cd2nroff 0.1 from CURLOPT_ALTSVC.md
.TH CURLOPT_ALTSVC 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_ALTSVC \- alt\-svc cache file name
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC, char *filename);
.fi
.SH DESCRIPTION
Pass in a pointer to a \fIfilename\fP to instruct libcurl to use that file as
the Alt\-Svc cache to read existing cache contents from and possibly also write
it back to after a transfer, unless \fBCURLALTSVC_READONLYFILE\fP is set in
\fICURLOPT_ALTSVC_CTRL(3)\fP.
Specify a blank filename ("") to make libcurl not load from a file at all.
.SH DEFAULT
NULL. The alt\-svc cache is not read nor written to file.
.SH PROTOCOLS
HTTPS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);
curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
curl_easy_perform(curl);
}
}
.fi
.SH FILE FORMAT
A text based file with one line per alt\-svc entry and each line consists of
nine space\-separated fields.
An example line could look like
.nf
h2 www.example.com 8443 h3 second.example.com 443 "20190808 06:18:37" 1 0
.fi
The fields of that line are:
.IP h2
ALPN id for the source origin
.IP www.example.comp
Hostname for the source origin
.IP 8443
Port number for the source origin
.IP h3
ALPN id for the destination host
.IP second.example.com
Hostname for the destination host
.IP 443
Port number for the destination host
.IP 2019*
Expiration date and time of this entry within double quotes. The date format
is "YYYYMMDD HH:MM:SS" and the time zone is GMT.
.IP 1
Boolean (1 or 0) if "persist" was set for this entry
.IP 0
Integer priority value (not currently used)
.SH AVAILABILITY
Added in 7.64.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_ALTSVC_CTRL (3),
.BR CURLOPT_CONNECT_TO (3),
.BR CURLOPT_COOKIEFILE (3),
.BR CURLOPT_RESOLVE (3)

View File

@ -0,0 +1,68 @@
.\" generated by cd2nroff 0.1 from CURLOPT_ALTSVC_CTRL.md
.TH CURLOPT_ALTSVC_CTRL 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_ALTSVC_CTRL \- control alt\-svc behavior
.SH SYNOPSIS
.nf
#include <curl/curl.h>
#define CURLALTSVC_READONLYFILE (1<<2)
#define CURLALTSVC_H1 (1<<3)
#define CURLALTSVC_H2 (1<<4)
#define CURLALTSVC_H3 (1<<5)
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC_CTRL, long bitmask);
.fi
.SH DESCRIPTION
Populate the long \fIbitmask\fP with the correct set of features to instruct
libcurl how to handle Alt\-Svc for the transfers using this handle.
libcurl only accepts Alt\-Svc headers over a secure transport, meaning
HTTPS. It also only completes a request to an alternative origin if that
origin is properly hosted over HTTPS. These requirements are there to make
sure both the source and the destination are legitimate.
Alternative services are only used when setting up new connections. If there
exists an existing connection to the host in the connection pool, then that is
preferred.
Setting any bit enables the alt\-svc engine.
.IP CURLALTSVC_READONLYFILE
Do not write the alt\-svc cache back to the file specified with
\fICURLOPT_ALTSVC(3)\fP even if it gets updated. By default a file specified
with that option is read and written to as deemed necessary.
.IP CURLALTSVC_H1
Accept alternative services offered over HTTP/1.1.
.IP CURLALTSVC_H2
Accept alternative services offered over HTTP/2. This is only used if libcurl
was also built to actually support HTTP/2, otherwise this bit is ignored.
.IP CURLALTSVC_H3
Accept alternative services offered over HTTP/3. This is only used if libcurl
was also built to actually support HTTP/3, otherwise this bit is ignored.
.SH DEFAULT
Alt\-Svc handling is disabled by default. If \fICURLOPT_ALTSVC(3)\fP is set,
\fICURLOPT_ALTSVC_CTRL(3)\fP has a default value corresponding to
CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 \- the HTTP/2 and HTTP/3 bits are
only set if libcurl was built with support for those versions.
.SH PROTOCOLS
HTTPS
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, (long)CURLALTSVC_H1);
curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
curl_easy_perform(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.64.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_ALTSVC (3),
.BR CURLOPT_CONNECT_TO (3),
.BR CURLOPT_RESOLVE (3)

View File

@ -0,0 +1,40 @@
.\" generated by cd2nroff 0.1 from CURLOPT_APPEND.md
.TH CURLOPT_APPEND 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_APPEND \- append to the remote file
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append);
.fi
.SH DESCRIPTION
A long parameter set to 1 tells the library to append to the remote file
instead of overwrite it. This is only useful when uploading to an FTP site.
.SH DEFAULT
0 (disabled)
.SH PROTOCOLS
FTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_APPEND, 1L);
curl_easy_perform(curl);
}
}
.fi
.SH AVAILABILITY
This option was known as CURLOPT_FTPAPPEND up to 7.16.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_DIRLISTONLY (3),
.BR CURLOPT_RESUME_FROM (3),
.BR CURLOPT_UPLOAD (3)

View File

@ -0,0 +1,56 @@
.\" generated by cd2nroff 0.1 from CURLOPT_AUTOREFERER.md
.TH CURLOPT_AUTOREFERER 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_AUTOREFERER \- automatically update the referer header
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer);
.fi
.SH DESCRIPTION
Pass a long parameter set to 1 to enable this. When enabled, libcurl
automatically sets the Referer: header field in HTTP requests to the full URL
when it follows a Location: redirect to a new destination.
The automatic referer is set to the full previous URL even when redirects are
done cross\-origin or following redirects to insecure protocols. This is
considered a minor privacy leak by some.
With \fICURLINFO_REFERER(3)\fP, applications can extract the actually used
referer header after the transfer.
.SH DEFAULT
0, disabled
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
/* follow redirects */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* set Referer: automatically when following redirects */
curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLINFO_EFFECTIVE_URL (3),
.BR CURLINFO_REDIRECT_URL (3),
.BR CURLINFO_REFERER (3),
.BR CURLOPT_FOLLOWLOCATION (3),
.BR CURLOPT_REFERER (3)

View File

@ -0,0 +1,88 @@
.\" generated by cd2nroff 0.1 from CURLOPT_AWS_SIGV4.md
.TH CURLOPT_AWS_SIGV4 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_AWS_SIGV4 \- V4 signature
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AWS_SIGV4, char *param);
.fi
.SH DESCRIPTION
Provides AWS V4 signature authentication on HTTP(S) header.
Pass a char pointer that is the collection of specific arguments are used for
creating outgoing authentication headers. The format of the \fIparam\fP option
is:
.IP provider1[:provider2[:region[:service]]]
.IP "provider1, provider2"
The providers arguments are used for generating some authentication parameters
such as "Algorithm", "date", "request type" and "signed headers".
.IP region
The argument is a geographic area of a resources collection.
It is extracted from the hostname specified in the URL if omitted.
.IP service
The argument is a function provided by a cloud. It is extracted from the
hostname specified in the URL if omitted.
NOTE: This call set \fICURLOPT_HTTPAUTH(3)\fP to CURLAUTH_AWS_SIGV4.
Calling \fICURLOPT_HTTPAUTH(3)\fP with CURLAUTH_AWS_SIGV4 is the same
as calling this with \fB"aws:amz"\fP in parameter.
Example with "Test:Try", when curl uses the algorithm, it generates
\fB"TEST\-HMAC\-SHA256"\fP for "Algorithm", \fB"x\-try\-date"\fP and
\fB"X\-Try\-Date"\fP for "date", \fB"test4_request"\fP for "request type",
\fB"SignedHeaders=content\-type;host;x\-try\-date"\fP for "signed headers"
If you use just "test", instead of "test:try", test is used for every
generated string.
.SH DEFAULT
By default, the value of this parameter is NULL.
Calling \fICURLOPT_HTTPAUTH(3)\fP with CURLAUTH_AWS_SIGV4 is the same
as calling this with \fB"aws:amz"\fP in parameter.
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL,
"https://service.region.example.com/uri");
curl_easy_setopt(curl, CURLOPT_AWS_SIGV4, "provider1:provider2");
/* service and region can also be set in CURLOPT_AWS_SIGV4 */
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/uri");
curl_easy_setopt(curl, CURLOPT_AWS_SIGV4,
"provider1:provider2:region:service");
curl_easy_setopt(curl, CURLOPT_USERPWD, "MY_ACCESS_KEY:MY_SECRET_KEY");
curl_easy_perform(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.75.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH NOTES
This option overrides the other auth types you might have set in
\fICURLOPT_HTTPAUTH(3)\fP which should be highlighted as this makes this auth
method special. This method cannot be combined with other auth types.
A sha256 checksum of the request payload is used as input to the signature
calculation. For POST requests, this is a checksum of the provided
\fICURLOPT_POSTFIELDS(3)\fP. Otherwise, it is the checksum of an empty buffer. For
requests like PUT, you can provide your own checksum in an HTTP header named
\fBx\-provider2\-content\-sha256\fP.
For \fBaws:s3\fP, a \fBx\-amz\-content\-sha256\fP header is added to every request
if not already present. For s3 requests with unknown payload, this header takes
the special value "UNSIGNED\-PAYLOAD".
.SH SEE ALSO
.BR CURLOPT_HEADEROPT (3),
.BR CURLOPT_HTTPAUTH (3),
.BR CURLOPT_HTTPHEADER (3),
.BR CURLOPT_PROXYAUTH (3)

View File

@ -0,0 +1,58 @@
.\" generated by cd2nroff 0.1 from CURLOPT_BUFFERSIZE.md
.TH CURLOPT_BUFFERSIZE 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_BUFFERSIZE \- receive buffer size
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size);
.fi
.SH DESCRIPTION
Pass a long specifying your preferred \fIsize\fP (in bytes) for the receive buffer
in libcurl. The main point of this would be that the write callback gets
called more often and with smaller chunks. Secondly, for some protocols, there
is a benefit of having a larger buffer for performance.
This is just treated as a request, not an order. You cannot be guaranteed to
actually get the given size.
This buffer size is by default \fICURL_MAX_WRITE_SIZE\fP (16kB). The maximum
buffer size allowed to be set is \fICURL_MAX_READ_SIZE\fP (10MB). The minimum
buffer size allowed to be set is 1024.
DO NOT set this option on a handle that is currently used for an active
transfer as that may lead to unintended consequences.
The maximum size was 512kB until 7.88.0.
.SH DEFAULT
CURL_MAX_WRITE_SIZE (16kB)
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin");
/* ask libcurl to allocate a larger receive buffer */
curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 120000L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
Added in 7.10. Growing the buffer was added in 7.53.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH SEE ALSO
.BR CURLOPT_MAXFILESIZE (3),
.BR CURLOPT_MAX_RECV_SPEED_LARGE (3),
.BR CURLOPT_UPLOAD_BUFFERSIZE (3),
.BR CURLOPT_WRITEFUNCTION (3)

View File

@ -0,0 +1,66 @@
.\" generated by cd2nroff 0.1 from CURLOPT_CAINFO.md
.TH CURLOPT_CAINFO 3 "March 15 2024" libcurl
.SH NAME
CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path);
.fi
.SH DESCRIPTION
Pass a char pointer to a null\-terminated string naming a file holding one or
more certificates to verify the peer with.
If \fICURLOPT_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the
server\(aqs certificate, \fICURLOPT_CAINFO(3)\fP need not even indicate an
accessible file.
This option is by default set to the system path where libcurl\(aqs CA
certificate bundle is assumed to be stored, as established at build time.
(iOS and macOS) When curl uses Secure Transport this option is supported. If
the option is not set, then curl uses the certificates in the system and user
Keychain to verify the peer.
(Schannel) This option is supported for Schannel in Windows 7 or later but we
recommend not using it until Windows 8 since it works better starting then.
If the option is not set, then curl uses the certificates in the Windows\(aq
store of root certificates (the default for Schannel).
The application does not have to keep the string around after setting this
option.
The default value for this can be figured out with \fICURLINFO_CAINFO(3)\fP.
.SH DEFAULT
Built\-in system specific. When curl is built with Secure Transport or
Schannel, this option is not set by default.
.SH PROTOCOLS
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/certs/cabundle.pem");
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
.fi
.SH AVAILABILITY
For the SSL engines that do not support certificate files the
\fICURLOPT_CAINFO(3)\fP option is ignored. Schannel support added in libcurl
7.60.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH SEE ALSO
.BR CURLINFO_CAINFO (3),
.BR CURLOPT_CAINFO_BLOB (3),
.BR CURLOPT_CAPATH (3),
.BR CURLOPT_CA_CACHE_TIMEOUT (3),
.BR CURLOPT_SSL_VERIFYHOST (3),
.BR CURLOPT_SSL_VERIFYPEER (3)

Some files were not shown because too many files have changed in this diff Show More