Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | merge with trunk |
---|---|
Timelines: | family | ancestors | descendants | both | wtf-8-experiment |
Files: | files | file ages | folders |
SHA1: |
f658d4913ca0e8bdfc0b56742b61f39f |
User & Date: | chw 2019-09-13 11:58:06.676 |
Context
2019-09-15
| ||
11:15 | merge with trunk check-in: a8d3f02653 user: chw tags: wtf-8-experiment | |
2019-09-13
| ||
11:58 | merge with trunk check-in: f658d4913c user: chw tags: wtf-8-experiment | |
11:50 | update curl library to version 7.66.0 check-in: 9f2d627eb9 user: chw tags: trunk | |
2019-09-12
| ||
10:09 | merge with trunk check-in: 1426863e72 user: chw tags: wtf-8-experiment | |
Changes
Changes to jni/curl/CHANGES.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| Changelog Version 7.65.3 (19 Jul 2019) Daniel Stenberg (19 Jul 2019) - RELEASE-NOTES: 7.65.3 - THANKS: 7.65.3 status | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 | _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| Changelog Version 7.66.0 (10 Sep 2019) Daniel Stenberg (10 Sep 2019) - RELEASE-NOTES: curl 7.66.0 - THANKS: from the 7.66.0 release - curl: make sure the parallel transfers do them all The logic could erroneously break the loop too early before all transfers had been transferred. Reported-by: Tom van der Woerdt Fixes #4316 Closes #4317 - urlapi: one colon is enough for the strspn() input (typo) - urlapi: verify the IPv6 numerical address It needs to parse correctly. Otherwise it could be tricked into letting through a-f using host names that libcurl would then resolve. Like '[ab.be]'. Reported-by: Thomas Vegas Closes #4315 - [Clément Notin brought this change] openssl: use SSL_CTX_set_<min|max>_proto_version() when available OpenSSL 1.1.0 adds SSL_CTX_set_<min|max>_proto_version() that we now use when available. Existing code is preserved for older versions of OpenSSL. Closes #4304 - [Clément Notin brought this change] openssl: indent, re-organize and add comments - [migueljcrum brought this change] sspi: fix memory leaks Closes #4299 - travis: disable ngtcp2 builds (again) - Curl_fillreadbuffer: avoid double-free trailer buf on error Reviewed-by: Jay Satiro Reported-by: Thomas Vegas Closes #4307 - tool_setopt: handle a libcurl build without netrc support Reported-by: codesniffer13 on github Fixes #4302 Closes #4305 - security:read_data fix bad realloc() ... that could end up a double-free CVE-2019-5481 Bug: https://curl.haxx.se/docs/CVE-2019-5481.html - [Thomas Vegas brought this change] tftp: Alloc maximum blksize, and use default unless OACK is received Fixes potential buffer overflow from 'recvfrom()', should the server return an OACK without blksize. Bug: https://curl.haxx.se/docs/CVE-2019-5482.html CVE-2019-5482 - [Thomas Vegas brought this change] tftp: return error when packet is too small for options - KNOWN_BUGS/TODO: cleanup and remove outdated issues - RELEASE-NOTES: synced - netrc: free 'home' on error Follow-up to f9c7ba9096ec2 Coverity CID 1453474 Closes #4291 - urldata: avoid 'generic', use dedicated pointers For the 'proto' union within the connectdata struct. Closes #4290 - cleanup: move functions out of url.c and make them static Closes #4289 - smtp: check for and bail out on too short EHLO response Otherwise, a three byte response would make the smtp_state_ehlo_resp() function misbehave. Credit to OSS-Fuzz Bug: https://crbug.com/oss-fuzz/16918 Assisted-by: Max Dymond Closes #4287 - smb: init *msg to NULL in smb_send_and_recv() ... it might otherwise return OK from this function leaving that pointer uninitialized. Bug: https://crbug.com/oss-fuzz/16907 Closes #4286 - ROADMAP: updated after recent user poll In rough prio order - THANKS: remove duplicate - Curl_addr2string: take an addrlen argument too This allows the function to figure out if a unix domain socket has a file name or not associated with it! When a socket is created with socketpair(), as done in the fuzzer testing, the path struct member is uninitialized and must not be accessed. Bug: https://crbug.com/oss-fuzz/16699 Closes #4283 - [Rolf Eike Beer brought this change] CMake: remove needless newlines at end of gss variables - [Rolf Eike Beer brought this change] CI: remove duplicate configure flag for LGTM.com - [Rolf Eike Beer brought this change] CMake: use platform dependent name for dlopen() library Closes #4279 - quiche: expire when poll returned data ... to make sure we continue draining the queue until empty Closes #4281 - quiche: decrease available buffer size, don't assign it! Found-by: Jeremy Lainé - RELEASE-NOTES: synced - [Kyohei Kadota brought this change] curl: fix include conditions - [Kyohei Kadota brought this change] plan9: fix installation instructions Closes #4276 - ngtcp2: on h3 stream close, call expire ... to trigger a new read to detect the stream close! Closes #4275 - [Tatsuhiro Tsujikawa brought this change] ngtcp2: build latest ngtcp2 and ngtcp2_crypto_openssl Closes #4278 - ngtcp2: set flow control window to stream buffer size Closes #4274 - [Christopher Head brought this change] CURLOPT_HEADERFUNCTION.3: clarify Closes #4273 - CURLINFO docs: mention that in redirects times are added Suggested-by: Brandon Dong Fixes #4250 Closes #4269 - travis: enable ngtcp2 builds again Switched to the openssl-quic-draft-22 openssl branch. Closes #4271 - HTTP3: switched openssl branch to use - [Tatsuhiro Tsujikawa brought this change] ngtcp2: Build with latest ngtcp2 and ngtcp2_crypto_openssl Closes #4270 - http2: when marked for closure and wanted to close == OK It could otherwise return an error even when closed correctly if GOAWAY had been received previously. Reported-by: Tom van der Woerdt Fixes #4267 Closes #4268 - RELEASE-NOTES: synced - build-openssl: fix build with Visual Studio 2019 Reviewed-by: Marcel Raad Contributed-by: osabc on github Fixes #4188 Closes #4266 Kamil Dudka (26 Aug 2019) - vauth: return CURLE_AUTH_ERROR on gss_init_sec_context() failure This is a follow-up to https://github.com/curl/curl/pull/3864 . Closes #4224 Daniel Stenberg (26 Aug 2019) - KNOWN_BUGS: USE_UNIX_SOCKETS on Windows Closes #4040 - quiche: send the HTTP body correctly on callback uploads Closes #4265 - travis: disable ngtcp2 builds (temporarily) Just too many API changes right now Closes #4264 - ngtcp2: add support for SSLKEYLOGFILE Closes #4260 - ngtcp2: improve h3 response receiving Closes #4259 - ngtcp2: use nghttp3_version() - ngtcp2: sync with upstream API changes Assisted-by: Tatsuhiro Tsujikawa - [Kyle Abramowitz brought this change] scp: fix directory name length used in memcpy Fix read off end of array due to bad pointer math in getworkingpath for SCP home directory case. Closes #4258 - http: the 'closed' struct field is used by both ngh2 and ngh3 and remove 'header_recvbuf', not used for anything Reported-by: Jeremy Lainé Closes #4257 - ngtcp2: accept upload via callback Closes #4256 - defines: avoid underscore-prefixed defines Double-underscored or underscore plus uppercase letter at least. ... as they're claimed to be reserved. Reported-by: patnyb on github Fixes #4254 Closes #4255 - travis: add a build using ngtcp2 + nghttp3 (and a patched OpenSSL) Runs no tests Closes #4253 - travis: bump to using nghttp2 version 1.39.2 Closes #4252 - [Gisle Vanem brought this change] docs/examples/curlx: fix errors Initialise 'mimetype' and require the -p12 arg. Closes #4248 - cleanup: remove DOT_CHAR completely Follow-up to f9c7ba9096ec The use of DOT_CHAR for ".ssh" was probably a mistake and is removed now. Pointed-out-by: Gisle Vanem Bug: https://github.com/curl/curl/pull/4230#issuecomment-522960638 Closes #4247 - spnego_sspi: add typecast to fix build warning Reported in build "Win32 target on Debian Stretch (64-bit) - i686-w64-mingw32 - gcc-20170516" Closes #4245 - openssl: build warning free with boringssl Closes #4244 - curl: make --libcurl use CURL_HTTP_VERSION_3 Closes #4243 - ngtcp2: make postfields-set posts work Closes #4242 - http: remove chunked-encoding and expect header use for HTTP/3 - [Alessandro Ghedini brought this change] configure: use pkg-config to detect quiche This removes the need to hard-code the quiche target path in configure.ac. This depends on https://github.com/cloudflare/quiche/pull/128 Closes #4237 - CURLOPT_SSL_VERIFYHOST: treat the value 1 as 2 For a long time (since 7.28.1) we've returned error when setting the value to 1 to make applications notice that we stopped supported the old behavior for 1. Starting now, we treat 1 and 2 exactly the same. Closes #4241 - curl: use .curlrc (with a dot) on Windows as well Fall-back to _curlrc if the dot-version is missing. Co-Authored-By: Steve Holme Closes #4230 - netrc: make the code try ".netrc" on Windows as well ... but fall back and try "_netrc" too if the dot version didn't work. Co-Authored-By: Steve Holme - ngtcp2: use ngtcp2_version() to get the run-time version ... which of course doesn't have to be the same used at build-time. Function just recently merged in ngtcp2. - ngtcp2: move the h3 initing to immediately after the rx key To fix a segfault and to better deal with 0-RTT Assisted-by: Tatsuhiro Tsujikawa - [Alessandro Ghedini brought this change] quiche: register debug callback once and earlier The quiche debug callback is global and can only be initialized once, so make sure we don't do it multiple times (e.g. if multiple requests are executed). In addition this initializes the callback before the connection is created, so we get logs for the handshake as well. Closes #4236 - ssh: add a generic Curl_ssh_version function for SSH backends Closes #4235 - base64: check for SSH, not specific SSH backends - vssh: move ssh init/cleanup functions into backend code - vssh: create directory for SSH backend code - TODO/ROADMAP: remove "refuse downgrade redirects" and HTTP/3 HTTP3 is now already in full progress Downgrade redirects can be achived almost exactly like that by setting CURLOPT_REDIR_PROTOCOLS. - RELEASE-NOTES: synced - travis: add a quiche build Closes #4207 - http: fix use of credentials from URL when using HTTP proxy When a username and password are provided in the URL, they were wrongly removed from the stored URL so that subsequent uses of the same URL wouldn't find the crendentials. This made doing HTTP auth with multiple connections (like Digest) mishave. Regression from 46e164069d1a5230 (7.62.0) Test case 335 added to verify. Reported-by: Mike Crowe Fixes #4228 Closes #4229 - [Mike Crowe brought this change] tests: Replace outdated test case numbering documentation Tests are no longer grouped by numeric range[1]. Let's stop saying that and provide some alternative advice for numbering tests. [1] https://curl.haxx.se/mail/lib-2019-08/0043.html Closes #4227 - travis: reduce number of torture tests in 'coverage' ... to make it complete in time. This cut seems not almost not affect the coverage percentage and yet completes within 35 minutes on travis where the previous runs recently always timed out after 50. Closes #4223 - [Igor Makarov brought this change] configure: use -lquiche to link to quiche Closes #4226 - ngtcp2: provide the callbacks as a static struct ... instead of having them in quicsocket - [Tatsuhiro Tsujikawa brought this change] ngtcp2: add missing nghttp3_conn_add_write_offset call Closes #4225 - [Tatsuhiro Tsujikawa brought this change] ngtcp2: deal with stream close - [Tatsuhiro Tsujikawa brought this change] ngtcp2: Consume QUIC STREAM data properly - [Tatsuhiro Tsujikawa brought this change] ngtcp2: don't reinitialize SSL on Retry - multi: getsock improvements for QUIC connecting - connect: connections are persistent by default for HTTP/3 - quiche: happy eyeballs Closes #4220 - ngtcp2: do QUIC connections happy-eyeballs friendly - curl_version: bump string buffer size to 250 With HTTP/3 libs and plenty TLS libs, I manged to hit the limit (which causes a truncated output). - CURLOPT_ALTSVC.3: use a "" file name to not load from a file Jay Satiro (14 Aug 2019) - vauth: Use CURLE_AUTH_ERROR for auth function errors - Add new error code CURLE_AUTH_ERROR. Prior to this change auth function errors were signaled by CURLE_OUT_OF_MEMORY and CURLE_RECV_ERROR, and neither one was technically correct. Ref: https://github.com/curl/curl/pull/3848 Co-authored-by: Dominik Hölzl Closes https://github.com/curl/curl/pull/3864 Daniel Stenberg (13 Aug 2019) - curl_version_info: make the quic_version a const Follow-up from 1a2df1518ad8653f Closes #4222 - examples: add http3.c, altsvc.c and http3-present.c Closes #4221 Peter Wu (13 Aug 2019) - nss: use TLSv1.3 as default if supported SSL_VersionRangeGetDefault returns (TLSv1.0, TLSv1.2) as supported range in NSS 3.45. It looks like the intention is to raise the minimum version rather than lowering the maximum, so adjust accordingly. Note that the caller (nss_setup_connect) initializes the version range to (TLSv1.0, TLSv1.3), so there is no need to check for >= TLSv1.0 again. Closes #4187 Reviewed-by: Daniel Stenberg Reviewed-by: Kamil Dudka Daniel Stenberg (13 Aug 2019) - quic.h: remove unused proto - curl_version_info.3: mentioned ALTSVC and HTTP3 ... and sorted the list alphabetically - lib/quic.c: unused - removed - CURLOPT_ALTSVC_CTRL.3: remove CURLALTSVC_ALTUSED Follow-up to 98c3f148 that removed it from the header file - [Junho Choi brought this change] docs/HTTP3: simplify quiche build instruction Use --recursive to get boringssl in one line Closes #4219 - altsvc: make it use h3-22 with ngtcp2 as well - ngtcp2: initial h3 request work Closes #4217 - curl_version_info: offer quic (and h3) library info Closes #4216 - HTTP3: use ngtcp2's draft-22 branch - RELEASE-NOTES: synced - CURLOPT_READFUNCTION.3: provide inline example ... instead of mentioning one in another place - [Tatsuhiro Tsujikawa brought this change] ngtcp2: send HTTP/3 request with nghttp3 This commit makes sending HTTP/3 request with nghttp3 work. It minimally receives HTTP response and calls nghttp3 callbacks, but no processing is made at the moment. Closes #4215 - nghttp3: initial h3 template code added - nghttp3: required when ngtcp2 is used for QUIC - checked for by configure - updated docs/HTTP3.md - shown in the version string Closes #4210 - [Eric Wong brought this change] asyn-thread: issue CURL_POLL_REMOVE before closing socket This avoids EBADF errors from EPOLL_CTL_DEL operations in the ephiperfifo.c example. EBADF is dangerous in multi-threaded applications where I rely on epoll_ctl to operate on the same epoll description from different threads. Follow-up to eb9a604f8d7db8 Bug: https://curl.haxx.se/mail/lib-2019-08/0026.html Closes #4211 - [Carlo Marcelo Arenas Belón brought this change] configure: avoid undefined check_for_ca_bundle instead of using a "greater than 0" test, check for variable being set, as it is always set to 1, and could be left unset if non of OPENSSL MBEDTLS GNUTLS WOLFSSL is being configured for. Closes #4213 - [Tatsuhiro Tsujikawa brought this change] ngtcp2: Send ALPN h3-22 Closes #4212 - [Tatsuhiro Tsujikawa brought this change] ngtcp2: use ngtcp2_settings_default and specify initial_ts - curl_global_init_mem.3: mention it was added in 7.12.0 - [Tatsuhiro Tsujikawa brought this change] ngtcp2: make the QUIC handshake work Closes #4209 - [Alex Mayorga brought this change] HTTP3.md: Update quiche build instructions Added cloning for quiche and BoringSSL and modified the build instructions so they work on a clean folder. Closes #4208 - CURLOPT_H3: removed There's no use for this anymore and it was never in a release. Closes #4206 - http3: make connection reuse work Closes #4204 - quiche: add SSLKEYLOGFILE support - cleanup: s/curl_debug/curl_dbg_debug in comments and docs Leftovers from the function rename back in 76b63489495 Reported-by: Gisle Vanem Bug: https://github.com/curl/curl/commit/f3e0f071b14fcb46a453f69bdf4e062bcaacf362#com mitcomment-34601751 Closes #4203 - RELEASE-NOTES: synced - alt-svc: add protocol version selection masking So that users can mask in/out specific HTTP versions when Alt-Svc is used. - Removed "h2c" and updated test case accordingly - Changed how the altsvc struct is laid out - Added ifdefs to make the unittest run even in a quiche-tree Closes #4201 - http3: fix the HTTP/3 in the request, make alt-svc set right versions Closes #4200 - alt-svc: send Alt-Used: in redirected requests RFC 7838 section 5: When using an alternative service, clients SHOULD include an Alt-Used header field in all requests. Removed CURLALTSVC_ALTUSED again (feature is still EXPERIMENTAL thus this is deemed ok). You can disable sending this header just like you disable any other HTTP header in libcurl. Closes #4199 - CURLOPT_HTTP_VERSION: seting this to 3 forces HTTP/3 use directly Even though it cannot fall-back to a lower HTTP version automatically. The safer way to upgrade remains via CURLOPT_ALTSVC. CURLOPT_H3 no longer has any bits that do anything and might be removed before we remove the experimental label. Updated the curl tool accordingly to use "--http3". Closes #4197 - docs/ALTSVC: remove what works and the experimental explanation Also, put the TODO items at the bottom. Closes #4198 - docs/EXPERIMENTAL: explain what it means and what's experimental now - curl: make use of CURLINFO_RETRY_AFTER when retrying If a Retry-After: header was used in the response, that value overrides other retry timing options. Fixes #3794 Closes #4195 - curl: use CURLINFO_PROTOCOL to check for HTTP(s) ... instead of CURLINFO_EFFECTIVE_URL to avoid string operations. - CURLINFO_RETRY_AFTER: parse the Retry-After header value This is only the libcurl part that provides the information. There's no user of the parsed value. This change includes three new tests for the parser. Ref: #3794 - docs/ALTSVC.md: first basic file format description - curl: have -w's 'http_version' show '3' for HTTP/3 Closes #4196 - curl.h: add CURL_HTTP_VERSION_3 to the version enum It can't be set for CURLOPT_HTTP_VERSION, but it can be extracted with CURLINFO_HTTP_VERSION. - quiche: make use of the connection timeout API properly - quiche: make POSTFIELDS posts work - quiche: improved error handling and memory cleanups - quiche: flush egress in h3_stream_recv() too - RELEASE-NOTES: synced Jay Satiro (6 Aug 2019) - [Patrick Monnerat brought this change] os400: take care of CURLOPT_SASL_AUTHZID in curl_easy_setopt_ccsid(). Ref: https://github.com/curl/curl/issues/3653 Ref: https://github.com/curl/curl/pull/3790 NOTE: This commit was cherry-picked and is part of a series of commits that added the authzid feature for upcoming 7.66.0. The series was temporarily reverted in db8ec1f so that it would not ship in a 7.65.x patch release. Closes https://github.com/curl/curl/pull/4186 - tests: Fix the line endings for the SASL alt-auth tests - Change data and protocol sections to CRLF line endings. Prior to this change the tests would fail or hang, which is because certain sections such as protocol require CRLF line endings. Follow-up to grandparent commit which added the tests. Ref: https://github.com/curl/curl/issues/3653 Ref: https://github.com/curl/curl/pull/3790 NOTE: This commit was cherry-picked and is part of a series of commits that added the authzid feature for upcoming 7.66.0. The series was temporarily reverted in db8ec1f so that it would not ship in a 7.65.x patch release. Closes https://github.com/curl/curl/pull/4186 - [Steve Holme brought this change] examples: Added SASL PLAIN authorisation identity (authzid) examples Ref: https://github.com/curl/curl/issues/3653 Ref: https://github.com/curl/curl/pull/3790 NOTE: This commit was cherry-picked and is part of a series of commits that added the authzid feature for upcoming 7.66.0. The series was temporarily reverted in db8ec1f so that it would not ship in a 7.65.x patch release. Closes https://github.com/curl/curl/pull/4186 - [Steve Holme brought this change] curl: --sasl-authzid added to support CURLOPT_SASL_AUTHZID from the tool Ref: https://github.com/curl/curl/issues/3653 Ref: https://github.com/curl/curl/pull/3790 NOTE: This commit was cherry-picked and is part of a series of commits that added the authzid feature for upcoming 7.66.0. The series was temporarily reverted in db8ec1f so that it would not ship in a 7.65.x patch release. Closes https://github.com/curl/curl/pull/4186 - [Steve Holme brought this change] sasl: Implement SASL authorisation identity via CURLOPT_SASL_AUTHZID Added the ability for the calling program to specify the authorisation identity (authzid), the identity to act as, in addition to the authentication identity (authcid) and password when using SASL PLAIN authentication. Fixes #3653 Closes #3790 NOTE: This commit was cherry-picked and is part of a series of commits that added the authzid feature for upcoming 7.66.0. The series was temporarily reverted in db8ec1f so that it would not ship in a 7.65.x patch release. Closes https://github.com/curl/curl/pull/4186 Daniel Stenberg (6 Aug 2019) - docs/HTTP3: refreshed as it is now in master and HTTP/3 can be tested - [Yiming Jing brought this change] mesalink: implement client authentication Closes #4184 - curl_multi_poll: a sister to curl_multi_wait() that waits more Repeatedly we see problems where using curl_multi_wait() is difficult or just awkward because if it has no file descriptor to wait for internally, it returns immediately and leaves it to the caller to wait for a small amount of time in order to avoid occasional busy-looping. This is often missed or misunderstood, leading to underperforming applications. This change introduces curl_multi_poll() as a replacement drop-in function that accepts the exact same set of arguments. This function works identically to curl_multi_wait() - EXCEPT - for the case when there's nothing to wait for internally, as then this function will by itself wait for a "suitable" short time before it returns. This effectiely avoids all risks of busy-looping and should also make it less likely that apps "over-wait". This also changes the curl tool to use this funtion internally when doing parallel transfers and changes curl_easy_perform() to use it internally. Closes #4163 - quiche:h3_stream_recv return 0 at end of stream ... and remove some verbose messages we don't need. Made transfers from facebook.com work better. - altsvc: make quiche use h3-22 now - quiche: show the actual version number - quiche: first working HTTP/3 request - enable debug log - fix use of quiche API - use download buffer - separate header/body Closes #4193 - http09: disable HTTP/0.9 by default in both tool and library As the plan has been laid out in DEPRECATED. Update docs accordingly and verify in test 1174. Now requires the option to be set to allow HTTP/0.9 responses. Closes #4191 - quiche: initial h3 request send/receive - lib/Makefile.am: make checksrc run in vquic too - altsvc: fix removal of expired cache entry Closes #4192 - RELEASE-NOTES: synced Steve Holme (4 Aug 2019) - md4: Use our own MD4 implementation when no crypto libraries are available Closes #3780 - md4: No need to include Curl_md4.h for each TLS library - md4: No need for the NTLM code to call Curl_md4it() for each TLS library As the NTLM code no longer calls any of TLS libraries' specific MD4 functions, there is no need to call this function for each #ifdef. - md4: Move the mbed TLS MD4 implementation out of the NTLM code - md4: Move the WinCrypt implementation out of the NTLM code - md4: Move the SecureTransport implementation out of the NTLM code - md4: Use the Curl_md4it() function for OpenSSL based NTLM - md4: Move the GNU TLS gcrypt MD4 implementation out of the NTLM code - md4: Move the GNU TLS Nettle MD4 implementation out of the NTLM code Jay Satiro (4 Aug 2019) - OS400: Add CURLOPT_H3 symbols Follow-up to 3af0e76 which added experimental H3 support. Closes https://github.com/curl/curl/pull/4185 Daniel Stenberg (3 Aug 2019) - url: make use of new HTTP version if alt-svc has one - url: set conn->transport to default TCP at init time - altsvc: with quiche, use the quiche h3 alpn string Closes #4183 - alt-svc: more liberal ALPN name parsing Allow pretty much anything to be part of the ALPN identifier. In particular minus, which is used for "h3-20" (in-progress HTTP/3 versions) etc. Updated test 356. Closes #4182 - quiche: use the proper HTTP/3 ALPN - quiche: add failf() calls for two error cases To aid debugging Closes #4181 - mailmap: added Kyohei Kadota Kamil Dudka (1 Aug 2019) - http_negotiate: improve handling of gss_init_sec_context() failures If HTTPAUTH_GSSNEGOTIATE was used for a POST request and gss_init_sec_context() failed, the POST request was sent with empty body. This commit also restores the original behavior of `curl --fail --negotiate`, which was changed by commit 6c6035532383e300c712e4c1cd9fdd749ed5cf59. Add regression tests 2077 and 2078 to cover this. Fixes #3992 Closes #4171 Daniel Stenberg (1 Aug 2019) - mailmap: added 4 more names Evgeny Grin, Peter Pih, Anton Malov and Marquis de Muesli - mailmap: add Giorgos Oikonomou - src/makefile: fix uncompressed hugehelp.c generation Regression from 5cf5d57ab9 (7.64.1) Fixed-by: Lance Ware Fixes #4176 Closes #4177 - appveyor: pass on -k to make - timediff: make it 64 bit (if possible) even with 32 bit time_t ... to make it hold microseconds too. Fixes #4165 Closes #4168 - ROADMAP: parallel transfers are merged now - getenv: support up to 4K environment variable contents on windows Reported-by: Michal Čaplygin Fixes #4174 Closes #4175 - [Kyohei Kadota brought this change] plan9: add support for running on Plan 9 Closes #3701 - [Kyohei Kadota brought this change] ntlm: explicit type casting - [Justin brought this change] curl.h: fix outdated comment Closes #4167 - curl: remove outdated comment Turned bad with commit b8894085000 Reported-by: niallor on github Fixes #4172 Closes #4173 - cleanup: remove the 'numsocks' argument used in many places It was used (intended) to pass in the size of the 'socks' array that is also passed to these functions, but was rarely actually checked/used and the array is defined to a fixed size of MAX_SOCKSPEREASYHANDLE entries that should be used instead. Closes #4169 - readwrite_data: repair setting the TIMER_STARTTRANSFER stamp Regression, broken in commit 65eb65fde64bd5f (curl 7.64.1) Reported-by: Jonathan Cardoso Machado Assisted-by: Jay Satiro Fixes #4136 Closes #4162 - mailmap: Amit Katyal - asyn-thread: removed unused variable Follow-up to eb9a604f. Mistake caused by me when I edited the commit before push... - RELEASE-NOTES: synced - [Amit Katyal brought this change] asyn-thread: create a socketpair to wait on Closes #4157 - curl: cap the maximum allowed values for retry time arguments ... to avoid integer overflows later when multiplying with 1000 to convert seconds to milliseconds. Added test 1269 to verify. Reported-by: Jason Lee Closes #4166 - progress: reset download/uploaded counter ... to make CURLOPT_MAX_RECV_SPEED_LARGE and CURLOPT_MAX_SEND_SPEED_LARGE work correctly on subsequent transfers that reuse the same handle. Fixed-by: Ironbars13 on github Fixes #4084 Closes #4161 - http2_recv: trigger another read when the last data is returned ... so that end-of-stream is detected properly. Reported-by: Tom van der Woerdt Fixes #4043 Closes #4160 - curl: avoid uncessary libcurl timeouts (in parallel mode) When curl_multi_wait() returns OK without file descriptors to wait for, it might already have done a long timeout. Closes #4159 - [Balazs Kovacsics brought this change] HTTP: use chunked Transfer-Encoding for HTTP_POST if size unknown If using the read callback for HTTP_POST, and POSTFIELDSIZE is not set, automatically add a Transfer-Encoding: chunked header, same as it is already done for HTTP_PUT, HTTP_POST_FORM and HTTP_POST_MIME. Update test 1514 according to the new behaviour. Closes #4138 Jay Satiro (29 Jul 2019) - [Daniel Stenberg brought this change] winbuild: add vquic to list of build directories This fixes the winbuild build method which broke several days ago when experimental quic support was added in 3af0e76. Reported-by: Michael Lee Fixes https://github.com/curl/curl/issues/4158 - easy: resize receive buffer on easy handle reset - In curl_easy_reset attempt to resize the receive buffer to its default size. If realloc fails then continue using the previous size. Prior to this change curl_easy_reset did not properly handle resetting the receive buffer (data->state.buffer). It reset the variable holding its size (data->set.buffer_size) to the default size (READBUFFER_SIZE) but then did not actually resize the buffer. If a user resized the buffer by using CURLOPT_BUFFERSIZE to set the size smaller than the default, later called curl_easy_reset and attempted to reuse the handle then a heap overflow would very likely occur during that handle's next transfer. Reported-by: Felix Hädicke Fixes https://github.com/curl/curl/issues/4143 Closes https://github.com/curl/curl/pull/4145 - [Brad Spencer brought this change] examples: Avoid reserved names in hiperfifo examples - Trade in __attribute__((unused)) for the classic (void)x to silence unused symbols. Because the classic way is not gcc specific. Also because the prior method mapped to symbol _Unused, which starts with _ and a capital letter which is reserved. Assisted-by: The Infinnovation team Bug: https://github.com/curl/curl/issues/4120#issuecomment-512542108 Closes https://github.com/curl/curl/pull/4153 Daniel Stenberg (25 Jul 2019) - RELEASE-NOTES: synced - [Felix Hädicke brought this change] ssh-libssh: do not specify O_APPEND when not in append mode Specifying O_APPEND in conjunction with O_TRUNC and O_CREAT does not make much sense. And this combination of flags is not accepted by all SFTP servers (at least not Apache SSHD). Fixes #4147 Closes #4148 - [Gergely Nagy brought this change] multi: call detach_connection before Curl_disconnect Curl_disconnect bails out if conn->easyq is not empty, detach_connection needs to be called first to remove the current easy from the queue. Fixes #4144 Closes #4151 Jay Satiro (23 Jul 2019) - tool_operate: fix implicit call to easysrc_cleanup easysrc_cleanup is only defined when CURL_DISABLE_LIBCURL_OPTION is not defined, and prior to this change would be called regardless. Bug: https://github.com/curl/curl/pull/3804#issuecomment-513922637 Reported-by: Marcel Raad Closes https://github.com/curl/curl/pull/4142 Daniel Stenberg (22 Jul 2019) - curl:create_transfers check return code from curl_easy_setopt From commit b8894085 Pointed out by Coverity CID 1451703 Closes #4134 - HTTP3: initial (experimental) support USe configure --with-ngtcp2 or --with-quiche Using either option will enable a HTTP3 build. Co-authored-by: Alessandro Ghedini <alessandro@ghedini.me> Closes #3500 - curl: remove dead code The loop never loops (since b889408500), pointed out by Coverity (CID 1451702) Closes #4133 - docs/PARALLEL-TRANSFERS: correct the version number - docs/PARALLEL-TRANSFERS: added - curl: support parallel transfers This is done by making sure each individual transfer is first added to a linked list as then they can be performed serially, or at will, in parallel. Closes #3804 - docs/MANUAL.md: converted to markdown from plain text ... will make it render as a nicer web page. Closes #4131 - curl_version_info: provide nghttp2 details Introducing CURLVERSION_SIXTH with nghttp2 info. Closes #4121 - bump: start working on 7.66.0 - source: remove names from source comments Several reasons: - we can't add everyone who's helping out so its unfair to just a few selected ones. - we already list all helpers in THANKS and in RELEASE-NOTES for each release - we don't want to give the impression that some parts of the code is "owned" or "controlled" by specific persons Assisted-by: Daniel Gustafsson Closes #4129 Version 7.65.3 (19 Jul 2019) Daniel Stenberg (19 Jul 2019) - RELEASE-NOTES: 7.65.3 - THANKS: 7.65.3 status |
︙ | ︙ | |||
55 56 57 58 59 60 61 | - [Stefano Simonelli brought this change] CURLOPT_SEEKDATA.3: fix variable name Closes https://github.com/curl/curl/pull/4118 | | | 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 | - [Stefano Simonelli brought this change] CURLOPT_SEEKDATA.3: fix variable name Closes https://github.com/curl/curl/pull/4118 - [Giorgos Oikonomou brought this change] CIPHERS.md: Explain Schannel error SEC_E_ALGORITHM_MISMATCH If the SSL backend is Schannel and the user specifies an Schannel CALG_ that is not supported by the protocol or the server then curl returns CURLE_SSL_CONNECT_ERROR (35) SEC_E_ALGORITHM_MISMATCH. |
︙ | ︙ | |||
3617 3618 3619 3620 3621 3622 3623 | - Add an additional check for LDAP that also checks for OpenSSL since on AIX those libraries may be required to link LDAP properly. Fixes https://github.com/curl/curl/issues/3595 Closes https://github.com/curl/curl/pull/3596 | | | 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 | - Add an additional check for LDAP that also checks for OpenSSL since on AIX those libraries may be required to link LDAP properly. Fixes https://github.com/curl/curl/issues/3595 Closes https://github.com/curl/curl/pull/3596 - [Giorgos Oikonomou brought this change] schannel: support CALG_ECDH_EPHEM algorithm Add support for Ephemeral elliptic curve Diffie-Hellman key exchange algorithm option when selecting ciphers. This became available on the Win10 SDK. |
︙ | ︙ | |||
4647 4648 4649 4650 4651 4652 4653 | - NTLM: fix size check condition for type2 received data Bug: https://curl.haxx.se/docs/CVE-2018-16890.html Reported-by: Wenxiang Qian CVE-2018-16890 Marcel Raad (1 Feb 2019) | | | 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 | - NTLM: fix size check condition for type2 received data Bug: https://curl.haxx.se/docs/CVE-2018-16890.html Reported-by: Wenxiang Qian CVE-2018-16890 Marcel Raad (1 Feb 2019) - [Giorgos Oikonomou brought this change] spnego_sspi: add support for channel binding Attempt to add support for Secure Channel binding when negotiate authentication is used. The problem to solve is that by default IIS accepts channel binding and curl doesn't utilise them. The result was a 401 response. Scope affects only the Schannel(winssl)-SSPI combination. |
︙ | ︙ | |||
4820 4821 4822 4823 4824 4825 4826 | NDK17. Actually they only exist in two NDK versions (15 and 16). With overloadable, the first condition tried will succeed. Results in wrong detection result. Closes #3484 Marcel Raad (19 Jan 2019) | | | 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 | NDK17. Actually they only exist in two NDK versions (15 and 16). With overloadable, the first condition tried will succeed. Results in wrong detection result. Closes #3484 Marcel Raad (19 Jan 2019) - [Giorgos Oikonomou brought this change] ntlm_sspi: add support for channel binding Windows extended potection (aka ssl channel binding) is required to login to ntlm IIS endpoint, otherwise the server returns 401 responses. |
︙ | ︙ | |||
6329 6330 6331 6332 6333 6334 6335 | Curl_ftp_parselist: avoid unsigned integer overflows The overflow has no real world impact, just avoid it for "best practice". Closes #3225 | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 7619 7620 7621 7622 7623 7624 7625 | Curl_ftp_parselist: avoid unsigned integer overflows The overflow has no real world impact, just avoid it for "best practice". Closes #3225 |
Changes to jni/curl/CMake/FindGSS.cmake.
︙ | ︙ | |||
58 59 60 61 62 63 64 65 66 67 68 69 70 71 | ) if(_GSS_CONFIGURE_SCRIPT) execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi" OUTPUT_VARIABLE _GSS_CFLAGS RESULT_VARIABLE _GSS_CONFIGURE_FAILED ) message(STATUS "CFLAGS: ${_GSS_CFLAGS}") if(NOT _GSS_CONFIGURE_FAILED) # 0 means success # should also work in an odd case when multiple directories are given string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS) string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}") string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1" _GSS_CFLAGS "${_GSS_CFLAGS}") | > | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | ) if(_GSS_CONFIGURE_SCRIPT) execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi" OUTPUT_VARIABLE _GSS_CFLAGS RESULT_VARIABLE _GSS_CONFIGURE_FAILED OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "CFLAGS: ${_GSS_CFLAGS}") if(NOT _GSS_CONFIGURE_FAILED) # 0 means success # should also work in an odd case when multiple directories are given string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS) string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}") string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1" _GSS_CFLAGS "${_GSS_CFLAGS}") |
︙ | ︙ | |||
80 81 82 83 84 85 86 87 88 89 90 91 92 93 | endforeach() endif() execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi" OUTPUT_VARIABLE _GSS_LIB_FLAGS RESULT_VARIABLE _GSS_CONFIGURE_FAILED ) message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}") if(NOT _GSS_CONFIGURE_FAILED) # 0 means success # this script gives us libraries and link directories. Blah. We have to deal with it. string(STRIP "${_GSS_LIB_FLAGS}" _GSS_LIB_FLAGS) string(REGEX REPLACE " +-(L|l)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}") | > | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | endforeach() endif() execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi" OUTPUT_VARIABLE _GSS_LIB_FLAGS RESULT_VARIABLE _GSS_CONFIGURE_FAILED OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}") if(NOT _GSS_CONFIGURE_FAILED) # 0 means success # this script gives us libraries and link directories. Blah. We have to deal with it. string(STRIP "${_GSS_LIB_FLAGS}" _GSS_LIB_FLAGS) string(REGEX REPLACE " +-(L|l)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}") |
︙ | ︙ | |||
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | endforeach() endif() execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version" OUTPUT_VARIABLE _GSS_VERSION RESULT_VARIABLE _GSS_CONFIGURE_FAILED ) # older versions may not have the "--version" parameter. In this case we just don't care. if(_GSS_CONFIGURE_FAILED) set(_GSS_VERSION 0) endif() execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor" OUTPUT_VARIABLE _GSS_VENDOR RESULT_VARIABLE _GSS_CONFIGURE_FAILED ) # older versions may not have the "--vendor" parameter. In this case we just don't care. if(_GSS_CONFIGURE_FAILED) set(GSS_FLAVOUR "Heimdal") # most probably, shouldn't really matter else() if(_GSS_VENDOR MATCHES ".*H|heimdal.*") | > > | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | endforeach() endif() execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version" OUTPUT_VARIABLE _GSS_VERSION RESULT_VARIABLE _GSS_CONFIGURE_FAILED OUTPUT_STRIP_TRAILING_WHITESPACE ) # older versions may not have the "--version" parameter. In this case we just don't care. if(_GSS_CONFIGURE_FAILED) set(_GSS_VERSION 0) endif() execute_process( COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor" OUTPUT_VARIABLE _GSS_VENDOR RESULT_VARIABLE _GSS_CONFIGURE_FAILED OUTPUT_STRIP_TRAILING_WHITESPACE ) # older versions may not have the "--vendor" parameter. In this case we just don't care. if(_GSS_CONFIGURE_FAILED) set(GSS_FLAVOUR "Heimdal") # most probably, shouldn't really matter else() if(_GSS_VENDOR MATCHES ".*H|heimdal.*") |
︙ | ︙ |
Changes to jni/curl/CMakeLists.txt.
︙ | ︙ | |||
256 257 258 259 260 261 262 | set(USE_THREADS_POSIX ${CMAKE_USE_PTHREADS_INIT}) set(HAVE_PTHREAD_H ${CMAKE_USE_PTHREADS_INIT}) endif() set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif() # Check for all needed libraries | | | 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | set(USE_THREADS_POSIX ${CMAKE_USE_PTHREADS_INIT}) set(HAVE_PTHREAD_H ${CMAKE_USE_PTHREADS_INIT}) endif() set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif() # Check for all needed libraries check_library_exists_concat("${CMAKE_DL_LIBS}" dlopen HAVE_LIBDL) check_library_exists_concat("socket" connect HAVE_LIBSOCKET) check_library_exists("c" gethostbyname "" NOT_NEED_LIBNSL) # Yellowtab Zeta needs different libraries than BeOS 5. if(BEOS) set(NOT_NEED_LIBNSL 1) check_library_exists_concat("bind" gethostbyname HAVE_LIBBIND) |
︙ | ︙ | |||
856 857 858 859 860 861 862 863 864 865 866 867 868 869 | check_symbol_exists(setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF) check_symbol_exists(sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP) check_symbol_exists(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R) check_symbol_exists(strlcat "${CURL_INCLUDES}" HAVE_STRLCAT) check_symbol_exists(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID) check_symbol_exists(getpwuid_r "${CURL_INCLUDES}" HAVE_GETPWUID_R) check_symbol_exists(geteuid "${CURL_INCLUDES}" HAVE_GETEUID) check_symbol_exists(utime "${CURL_INCLUDES}" HAVE_UTIME) check_symbol_exists(gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R) check_symbol_exists(localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R) check_symbol_exists(gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME) check_symbol_exists(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R) | > | 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 | check_symbol_exists(setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF) check_symbol_exists(sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP) check_symbol_exists(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R) check_symbol_exists(strlcat "${CURL_INCLUDES}" HAVE_STRLCAT) check_symbol_exists(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID) check_symbol_exists(getpwuid_r "${CURL_INCLUDES}" HAVE_GETPWUID_R) check_symbol_exists(geteuid "${CURL_INCLUDES}" HAVE_GETEUID) check_symbol_exists(usleep "${CURL_INCLUDES}" HAVE_USLEEP) check_symbol_exists(utime "${CURL_INCLUDES}" HAVE_UTIME) check_symbol_exists(gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R) check_symbol_exists(localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R) check_symbol_exists(gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME) check_symbol_exists(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R) |
︙ | ︙ |
Changes to jni/curl/Makefile.am.
︙ | ︙ | |||
149 150 151 152 153 154 155 156 157 158 | projects/Windows/VC15/src/curl.vcxproj.filters \ projects/generate.bat \ projects/wolfssl_options.h \ projects/wolfssl_override.props WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \ winbuild/MakefileBuild.vc winbuild/Makefile.vc EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework \ | > > > > > > > > > > | > | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | projects/Windows/VC15/src/curl.vcxproj.filters \ projects/generate.bat \ projects/wolfssl_options.h \ projects/wolfssl_override.props WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \ winbuild/MakefileBuild.vc winbuild/Makefile.vc PLAN9_DIST = plan9/include/mkfile \ plan9/include/mkfile \ plan9/mkfile.proto \ plan9/mkfile \ plan9/BUILD.PLAN9.txt \ plan9/lib/mkfile.inc \ plan9/lib/mkfile \ plan9/src/mkfile.inc \ plan9/src/mkfile EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework \ scripts/updatemanpages.pl $(CMAKE_DIST) \ $(VC_DIST) $(WINBUILD_DIST) $(PLAN9_DIST) \ lib/libcurl.vers.in buildconf.bat scripts/coverage.sh scripts/completion.pl CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \ $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \ $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \ $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \ $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) $(VC15_LIBVCXPROJ) $(VC15_SRCVCXPROJ) |
︙ | ︙ |
Changes to jni/curl/Makefile.in.
︙ | ︙ | |||
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
619 620 621 622 623 624 625 626 627 628 | projects/Windows/VC15/src/curl.vcxproj.filters \ projects/generate.bat \ projects/wolfssl_options.h \ projects/wolfssl_override.props WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \ winbuild/MakefileBuild.vc winbuild/Makefile.vc EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework \ | > > > > > > > > > > | > | 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 | projects/Windows/VC15/src/curl.vcxproj.filters \ projects/generate.bat \ projects/wolfssl_options.h \ projects/wolfssl_override.props WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \ winbuild/MakefileBuild.vc winbuild/Makefile.vc PLAN9_DIST = plan9/include/mkfile \ plan9/include/mkfile \ plan9/mkfile.proto \ plan9/mkfile \ plan9/BUILD.PLAN9.txt \ plan9/lib/mkfile.inc \ plan9/lib/mkfile \ plan9/src/mkfile.inc \ plan9/src/mkfile EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework \ scripts/updatemanpages.pl $(CMAKE_DIST) \ $(VC_DIST) $(WINBUILD_DIST) $(PLAN9_DIST) \ lib/libcurl.vers.in buildconf.bat scripts/coverage.sh scripts/completion.pl CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \ $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \ $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \ $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \ $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) $(VC15_LIBVCXPROJ) $(VC15_SRCVCXPROJ) |
︙ | ︙ | |||
652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 | vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h \ vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h \ vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h \ vtls/mbedtls.h vtls/mesalink.h LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \ getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c \ fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \ strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ | > > > | | 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 | vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h \ vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h \ vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h \ vtls/mbedtls.h vtls/mesalink.h LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \ getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c \ fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \ strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ curl_addrinfo.c socks_gssapi.c socks_sspi.c \ curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c \ pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c \ openldap.c curl_gethostname.c gopher.c idn_win32.c \ http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c \ http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c \ curl_multibyte.c hostcheck.c conncache.c dotdot.c \ x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c \ |
︙ | ︙ | |||
691 692 693 694 695 696 697 | curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \ http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_setup_once.h multihandle.h setup-vms.h dotdot.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h \ curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h \ | | | > > | > > | 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 | curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \ http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_setup_once.h multihandle.h setup-vms.h dotdot.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h \ curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h \ curl_get_line.h altsvc.h quic.h LIB_RCFILES = libcurl.rc CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \ $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES) HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \ $(LIB_VQUIC_HFILES) # libcurl has sources that provide functions named curlx_* that aren't part of # the official API, but we re-use the code here to avoid duplication. CURLX_CFILES = \ ../lib/strtoofft.c \ ../lib/nonblock.c \ ../lib/warnless.c \ |
︙ | ︙ | |||
744 745 746 747 748 749 750 751 752 753 754 755 756 757 | tool_metalink.c \ tool_msgs.c \ tool_operate.c \ tool_operhlp.c \ tool_panykey.c \ tool_paramhlp.c \ tool_parsecfg.c \ tool_strdup.c \ tool_setopt.c \ tool_sleep.c \ tool_urlglob.c \ tool_util.c \ tool_vms.c \ tool_writeout.c \ | > | 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 | tool_metalink.c \ tool_msgs.c \ tool_operate.c \ tool_operhlp.c \ tool_panykey.c \ tool_paramhlp.c \ tool_parsecfg.c \ tool_progress.c \ tool_strdup.c \ tool_setopt.c \ tool_sleep.c \ tool_urlglob.c \ tool_util.c \ tool_vms.c \ tool_writeout.c \ |
︙ | ︙ | |||
785 786 787 788 789 790 791 792 793 794 795 796 797 798 | tool_metalink.h \ tool_msgs.h \ tool_operate.h \ tool_operhlp.h \ tool_panykey.h \ tool_paramhlp.h \ tool_parsecfg.h \ tool_sdecls.h \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ | > | 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 | tool_metalink.h \ tool_msgs.h \ tool_operate.h \ tool_operhlp.h \ tool_panykey.h \ tool_paramhlp.h \ tool_parsecfg.h \ tool_progress.h \ tool_sdecls.h \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ |
︙ | ︙ |
Changes to jni/curl/RELEASE-NOTES.
|
| | | | | | | > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | curl and libcurl 7.66.0 Public curl releases: 185 Command line options: 225 curl_easy_setopt() options: 269 Public functions in libcurl: 81 Contributors: 1991 This release includes the following changes: o CURLINFO_RETRY_AFTER: parse the Retry-After header value [35] o HTTP3: initial (experimental still not working) support [5] o curl: --sasl-authzid added to support CURLOPT_SASL_AUTHZID from the tool [27] o curl: support parallel transfers with -Z [4] o curl_multi_poll: a sister to curl_multi_wait() that waits more [28] o sasl: Implement SASL authorisation identity via CURLOPT_SASL_AUTHZID [27] This release includes the following bugfixes: o CVE-2019-5481: FTP-KRB double-free [64] o CVE-2019-5482: TFTP small blocksize heap buffer overflow [65] o CI: remove duplicate configure flag for LGTM.com o CMake: remove needless newlines at end of gss variables o CMake: use platform dependent name for dlopen() library [62] o CURLINFO docs: mention that in redirects times are added [55] o CURLOPT_ALTSVC.3: use a "" file name to not load from a file o CURLOPT_ALTSVC_CTRL.3: remove CURLALTSVC_ALTUSED o CURLOPT_HEADERFUNCTION.3: clarify [54] o CURLOPT_HTTP_VERSION: seting this to 3 forces HTTP/3 use directly [33] o CURLOPT_READFUNCTION.3: provide inline example o CURLOPT_SSL_VERIFYHOST: treat the value 1 as 2 [51] o Curl_addr2string: take an addrlen argument too [61] o Curl_fillreadbuffer: avoid double-free trailer buf on error [66] o HTTP: use chunked Transfer-Encoding for HTTP_POST if size unknown [10] o alt-svc: add protocol version selection masking [31] o alt-svc: fix removal of expired cache entry [30] o alt-svc: make it use h3-22 with ngtcp2 as well o alt-svc: more liberal ALPN name parsing [17] o alt-svc: send Alt-Used: in redirected requests [32] o alt-svc: with quiche, use the quiche h3 alpn string [16] o appveyor: pass on -k to make o asyn-thread: create a socketpair to wait on [14] o build-openssl: fix build with Visual Studio 2019 [45] o cleanup: move functions out of url.c and make them static [58] o cleanup: remove the 'numsocks' argument used in many places [25] o configure: avoid undefined check_for_ca_bundle [37] o curl.h: add CURL_HTTP_VERSION_3 to the version enum o curl.h: fix outdated comment [23] o curl: cap the maximum allowed values for retry time arguments [13] o curl: handle a libcurl build without netrc support [63] o curl: make use of CURLINFO_RETRY_AFTER when retrying [35] o curl: remove outdated comment [24] o curl: use .curlrc (with a dot) on Windows [52] o curl: use CURLINFO_PROTOCOL to check for HTTP(s) o curl_global_init_mem.3: mention it was added in 7.12.0 o curl_version: bump string buffer size to 250 o curl_version_info.3: mentioned ALTSVC and HTTP3 o curl_version_info: offer quic (and h3) library info [38] o curl_version_info: provide nghttp2 details [2] o defines: avoid underscore-prefixed defines [47] o docs/ALTSVC: remove what works and the experimental explanation [34] o docs/EXPERIMENTAL: explain what it means and what's experimental now o docs/MANUAL.md: converted to markdown from plain text [3] o docs/examples/curlx: fix errors [48] o docs: s/curl_debug/curl_dbg_debug in comments and docs [36] o easy: resize receive buffer on easy handle reset [9] o examples: Avoid reserved names in hiperfifo examples [8] o examples: add http3.c, altsvc.c and http3-present.c [40] o getenv: support up to 4K environment variable contents on windows [21] o http09: disable HTTP/0.9 by default in both tool and library [29] o http2: when marked for closure and wanted to close == OK [56] o http2_recv: trigger another read when the last data is returned [11] o http: fix use of credentials from URL when using HTTP proxy [44] o http_negotiate: improve handling of gss_init_sec_context() failures [18] o md4: Use our own MD4 when no crypto libraries are available [15] o multi: call detach_connection before Curl_disconnect [6] o netrc: make the code try ".netrc" on Windows [52] o nss: use TLSv1.3 as default if supported [39] o openssl: build warning free with boringssl [50] o openssl: use SSL_CTX_set_<min|max>_proto_version() when available [68] o plan9: add support for running on Plan 9 [22] o progress: reset download/uploaded counter between transfers [12] o readwrite_data: repair setting the TIMER_STARTTRANSFER stamp [26] o scp: fix directory name length used in memcpy [46] o smb: init *msg to NULL in smb_send_and_recv() [60] o smtp: check for and bail out on too short EHLO response [59] o source: remove names from source comments [1] o spnego_sspi: add typecast to fix build warning [49] o src/makefile: fix uncompressed hugehelp.c generation [19] o ssh-libssh: do not specify O_APPEND when not in append mode [7] o ssh: move code into vssh for SSH backends [53] o sspi: fix memory leaks [67] o tests: Replace outdated test case numbering documentation [43] o tftp: return error when packet is too small for options o timediff: make it 64 bit (if possible) even with 32 bit time_t [20] o travis: reduce number of torture tests in 'coverage' [42] o url: make use of new HTTP version if alt-svc has one [16] o urlapi: verify the IPv6 numerical address [69] o urldata: avoid 'generic', use dedicated pointers [57] o vauth: Use CURLE_AUTH_ERROR for auth function errors [41] This release includes the following known bugs: o see docs/KNOWN_BUGS (https://curl.haxx.se/docs/knownbugs.html) This release would not have looked like this without help, code, reports and advice from friends like these: Alessandro Ghedini, Alex Mayorga, Amit Katyal, Balazs Kovacsics, Brad Spencer, Brandon Dong, Carlo Marcelo Arenas Belón, Christopher Head, Clément Notin, codesniffer13 on github, Daniel Gustafsson, Daniel Stenberg, Dominik Hölzl, Eric Wong, Felix Hädicke, Gergely Nagy, Gisle Vanem, Igor Makarov, Ironbars13 on github, Jason Lee, Jeremy Lainé, Jonathan Cardoso Machado, Junho Choi, Kamil Dudka, Kyle Abramowitz, Kyohei Kadota, Lance Ware, Marcel Raad, Max Dymond, Michael Lee, Michal Čaplygin, migueljcrum on github, Mike Crowe, niallor on github, osabc on github, patnyb on github, Patrick Monnerat, Peter Wu, Ray Satiro, Rolf Eike Beer, Steve Holme, Tatsuhiro Tsujikawa, The Infinnovation team, Thomas Vegas, Tom van der Woerdt, Yiming Jing, (46 contributors) Thanks! (and sorry if I forgot to mention someone) References to bug reports and discussions on issues: [1] = https://curl.haxx.se/bug/?i=4129 [2] = https://curl.haxx.se/bug/?i=4121 [3] = https://curl.haxx.se/bug/?i=4131 [4] = https://curl.haxx.se/bug/?i=3804 [5] = https://curl.haxx.se/bug/?i=3500 [6] = https://curl.haxx.se/bug/?i=4144 [7] = https://curl.haxx.se/bug/?i=4147 [8] = https://curl.haxx.se/bug/?i=4153 [9] = https://curl.haxx.se/bug/?i=4143 [10] = https://curl.haxx.se/bug/?i=4138 [11] = https://curl.haxx.se/bug/?i=4043 [12] = https://curl.haxx.se/bug/?i=4084 [13] = https://curl.haxx.se/bug/?i=4166 [14] = https://curl.haxx.se/bug/?i=4157 [15] = https://curl.haxx.se/bug/?i=3780 [16] = https://curl.haxx.se/bug/?i=4183 [17] = https://curl.haxx.se/bug/?i=4182 [18] = https://curl.haxx.se/bug/?i=3992 [19] = https://curl.haxx.se/bug/?i=4176 [20] = https://curl.haxx.se/bug/?i=4165 [21] = https://curl.haxx.se/bug/?i=4174 [22] = https://curl.haxx.se/bug/?i=3701 [23] = https://curl.haxx.se/bug/?i=4167 [24] = https://curl.haxx.se/bug/?i=4172 [25] = https://curl.haxx.se/bug/?i=4169 [26] = https://curl.haxx.se/bug/?i=4136 [27] = https://curl.haxx.se/bug/?i=3653 [28] = https://curl.haxx.se/bug/?i=4163 [29] = https://curl.haxx.se/bug/?i=4191 [30] = https://curl.haxx.se/bug/?i=4192 [31] = https://curl.haxx.se/bug/?i=4201 [32] = https://curl.haxx.se/bug/?i=4199 [33] = https://curl.haxx.se/bug/?i=4197 [34] = https://curl.haxx.se/bug/?i=4198 [35] = https://curl.haxx.se/bug/?i=3794 [36] = https://curl.haxx.se/bug/?i=3794 [37] = https://curl.haxx.se/bug/?i=4213 [38] = https://curl.haxx.se/bug/?i=4216 [39] = https://curl.haxx.se/bug/?i=4187 [40] = https://curl.haxx.se/bug/?i=4221 [41] = https://curl.haxx.se/bug/?i=3848 [42] = https://curl.haxx.se/bug/?i=4223 [43] = https://curl.haxx.se/bug/?i=4227 [44] = https://curl.haxx.se/bug/?i=4228 [45] = https://curl.haxx.se/bug/?i=4188 [46] = https://curl.haxx.se/bug/?i=4258 [47] = https://curl.haxx.se/bug/?i=4254 [48] = https://curl.haxx.se/bug/?i=4248 [49] = https://curl.haxx.se/bug/?i=4245 [50] = https://curl.haxx.se/bug/?i=4244 [51] = https://curl.haxx.se/bug/?i=4241 [52] = https://curl.haxx.se/bug/?i=4230 [53] = https://curl.haxx.se/bug/?i=4235 [54] = https://curl.haxx.se/bug/?i=4273 [55] = https://curl.haxx.se/bug/?i=4250 [56] = https://curl.haxx.se/bug/?i=4267 [57] = https://curl.haxx.se/bug/?i=4290 [58] = https://curl.haxx.se/bug/?i=4289 [59] = https://curl.haxx.se/bug/?i=4287 [60] = https://curl.haxx.se/bug/?i=4286 [61] = https://curl.haxx.se/bug/?i=4283 [62] = https://curl.haxx.se/bug/?i=4279 [63] = https://curl.haxx.se/bug/?i=4302 [64] = https://curl.haxx.se/docs/CVE-2019-5481.html [65] = https://curl.haxx.se/docs/CVE-2019-5482.html [66] = https://curl.haxx.se/bug/?i=4307 [67] = https://curl.haxx.se/bug/?i=4299 [68] = https://curl.haxx.se/bug/?i=4304 [69] = https://curl.haxx.se/bug/?i=4315 |
Changes to jni/curl/configure.
︙ | ︙ | |||
901 902 903 904 905 906 907 908 909 910 911 912 913 914 | USE_MANUAL_TRUE MANOPT NROFF PERL IPV6_ENABLED FISH_FUNCTIONS_DIR ZSH_FUNCTIONS_DIR USE_NGHTTP2 IDN_ENABLED CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_TRUE CURL_LT_SHLIB_VERSIONED_FLAVOUR USE_LIBRTMP USE_LIBSSH | > > > > | 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 | USE_MANUAL_TRUE MANOPT NROFF PERL IPV6_ENABLED FISH_FUNCTIONS_DIR ZSH_FUNCTIONS_DIR USE_QUICHE USE_NGHTTP3 USE_NGTCP2_CRYPTO_OPENSSL USE_NGTCP2 USE_NGHTTP2 IDN_ENABLED CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_TRUE CURL_LT_SHLIB_VERSIONED_FLAVOUR USE_LIBRTMP USE_LIBSSH |
︙ | ︙ | |||
1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 | with_libssh2 with_libssh with_librtmp enable_versioned_symbols with_winidn with_libidn2 with_nghttp2 with_zsh_functions_dir with_fish_functions_dir enable_threaded_resolver enable_pthreads enable_verbose enable_sspi enable_crypto_auth | > > > | 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 | with_libssh2 with_libssh with_librtmp enable_versioned_symbols with_winidn with_libidn2 with_nghttp2 with_ngtcp2 with_nghttp3 with_quiche with_zsh_functions_dir with_fish_functions_dir enable_threaded_resolver enable_pthreads enable_verbose enable_sspi enable_crypto_auth |
︙ | ︙ | |||
2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 | --without-librtmp disable LIBRTMP --with-winidn=PATH enable Windows native IDN --without-winidn disable Windows native IDN --with-libidn2=PATH Enable libidn2 usage --without-libidn2 Disable libidn2 usage --with-nghttp2=PATH Enable nghttp2 usage --without-nghttp2 Disable nghttp2 usage --with-zsh-functions-dir=PATH Install zsh completions to PATH --without-zsh-functions-dir Do not install zsh completions --with-fish-functions-dir=PATH Install fish completions to PATH --without-fish-functions-dir | > > > > > > | 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 | --without-librtmp disable LIBRTMP --with-winidn=PATH enable Windows native IDN --without-winidn disable Windows native IDN --with-libidn2=PATH Enable libidn2 usage --without-libidn2 Disable libidn2 usage --with-nghttp2=PATH Enable nghttp2 usage --without-nghttp2 Disable nghttp2 usage --with-ngtcp2=PATH Enable ngtcp2 usage --without-ngtcp2 Disable ngtcp2 usage --with-nghttp3=PATH Enable nghttp3 usage --without-nghttp3 Disable nghttp3 usage --with-quiche=PATH Enable quiche usage --without-quiche Disable quiche usage --with-zsh-functions-dir=PATH Install zsh completions to PATH --without-zsh-functions-dir Do not install zsh completions --with-fish-functions-dir=PATH Install fish completions to PATH --without-fish-functions-dir |
︙ | ︙ | |||
25375 25376 25377 25378 25379 25380 25381 | cat >>confdefs.h <<_ACEOF #define CURL_DEFAULT_SSL_BACKEND "$DEFAULT_SSL_BACKEND" _ACEOF fi | | | 25388 25389 25390 25391 25392 25393 25394 25395 25396 25397 25398 25399 25400 25401 25402 | cat >>confdefs.h <<_ACEOF #define CURL_DEFAULT_SSL_BACKEND "$DEFAULT_SSL_BACKEND" _ACEOF fi if test -n "$check_for_ca_bundle"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking default CA cert bundle/path" >&5 $as_echo_n "checking default CA cert bundle/path... " >&6; } # Check whether --with-ca-bundle was given. |
︙ | ︙ | |||
27624 27625 27626 27627 27628 27629 27630 27631 27632 27633 27634 27635 27636 27637 | if test X"$want_h2" != Xdefault; then as_fn_error $? "--with-nghttp2 was specified but could not find libnghttp2 pkg-config file." "$LINENO" 5 fi fi fi OPT_ZSH_FPATH=default # Check whether --with-zsh-functions-dir was given. if test "${with_zsh_functions_dir+set}" = set; then : withval=$with_zsh_functions_dir; OPT_ZSH_FPATH=$withval fi | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 27637 27638 27639 27640 27641 27642 27643 27644 27645 27646 27647 27648 27649 27650 27651 27652 27653 27654 27655 27656 27657 27658 27659 27660 27661 27662 27663 27664 27665 27666 27667 27668 27669 27670 27671 27672 27673 27674 27675 27676 27677 27678 27679 27680 27681 27682 27683 27684 27685 27686 27687 27688 27689 27690 27691 27692 27693 27694 27695 27696 27697 27698 27699 27700 27701 27702 27703 27704 27705 27706 27707 27708 27709 27710 27711 27712 27713 27714 27715 27716 27717 27718 27719 27720 27721 27722 27723 27724 27725 27726 27727 27728 27729 27730 27731 27732 27733 27734 27735 27736 27737 27738 27739 27740 27741 27742 27743 27744 27745 27746 27747 27748 27749 27750 27751 27752 27753 27754 27755 27756 27757 27758 27759 27760 27761 27762 27763 27764 27765 27766 27767 27768 27769 27770 27771 27772 27773 27774 27775 27776 27777 27778 27779 27780 27781 27782 27783 27784 27785 27786 27787 27788 27789 27790 27791 27792 27793 27794 27795 27796 27797 27798 27799 27800 27801 27802 27803 27804 27805 27806 27807 27808 27809 27810 27811 27812 27813 27814 27815 27816 27817 27818 27819 27820 27821 27822 27823 27824 27825 27826 27827 27828 27829 27830 27831 27832 27833 27834 27835 27836 27837 27838 27839 27840 27841 27842 27843 27844 27845 27846 27847 27848 27849 27850 27851 27852 27853 27854 27855 27856 27857 27858 27859 27860 27861 27862 27863 27864 27865 27866 27867 27868 27869 27870 27871 27872 27873 27874 27875 27876 27877 27878 27879 27880 27881 27882 27883 27884 27885 27886 27887 27888 27889 27890 27891 27892 27893 27894 27895 27896 27897 27898 27899 27900 27901 27902 27903 27904 27905 27906 27907 27908 27909 27910 27911 27912 27913 27914 27915 27916 27917 27918 27919 27920 27921 27922 27923 27924 27925 27926 27927 27928 27929 27930 27931 27932 27933 27934 27935 27936 27937 27938 27939 27940 27941 27942 27943 27944 27945 27946 27947 27948 27949 27950 27951 27952 27953 27954 27955 27956 27957 27958 27959 27960 27961 27962 27963 27964 27965 27966 27967 27968 27969 27970 27971 27972 27973 27974 27975 27976 27977 27978 27979 27980 27981 27982 27983 27984 27985 27986 27987 27988 27989 27990 27991 27992 27993 27994 27995 27996 27997 27998 27999 28000 28001 28002 28003 28004 28005 28006 28007 28008 28009 28010 28011 28012 28013 28014 28015 28016 28017 28018 28019 28020 28021 28022 28023 28024 28025 28026 28027 28028 28029 28030 28031 28032 28033 28034 28035 28036 28037 28038 28039 28040 28041 28042 28043 28044 28045 28046 28047 28048 28049 28050 28051 28052 28053 28054 28055 28056 28057 28058 28059 28060 28061 28062 28063 28064 28065 28066 28067 28068 28069 28070 28071 28072 28073 28074 28075 28076 28077 28078 28079 28080 28081 28082 28083 28084 28085 28086 28087 28088 28089 28090 28091 28092 28093 28094 28095 28096 28097 28098 28099 28100 28101 28102 28103 28104 28105 28106 28107 28108 28109 28110 28111 28112 28113 28114 28115 28116 28117 28118 28119 28120 28121 28122 28123 28124 28125 28126 28127 28128 28129 28130 28131 28132 28133 28134 28135 28136 28137 28138 28139 28140 28141 28142 28143 28144 28145 28146 28147 28148 28149 28150 28151 28152 28153 28154 28155 28156 28157 28158 28159 28160 28161 28162 28163 28164 28165 28166 28167 28168 28169 28170 28171 28172 28173 28174 28175 28176 28177 28178 28179 28180 28181 28182 28183 28184 28185 28186 28187 28188 28189 28190 28191 28192 28193 28194 28195 28196 28197 28198 28199 28200 28201 28202 28203 28204 28205 28206 28207 28208 28209 28210 28211 28212 28213 28214 28215 28216 28217 28218 28219 28220 28221 28222 28223 28224 28225 28226 28227 28228 28229 28230 28231 28232 28233 28234 28235 28236 28237 28238 28239 28240 28241 28242 28243 28244 28245 28246 28247 28248 28249 28250 28251 28252 28253 28254 28255 28256 28257 28258 28259 28260 28261 28262 28263 28264 28265 28266 28267 28268 28269 28270 28271 28272 28273 28274 28275 28276 28277 28278 28279 28280 28281 28282 28283 28284 28285 28286 28287 28288 28289 28290 28291 28292 28293 28294 28295 28296 28297 28298 28299 28300 28301 28302 28303 28304 28305 28306 28307 28308 28309 28310 28311 28312 28313 28314 28315 28316 28317 28318 28319 28320 28321 28322 28323 28324 28325 28326 28327 28328 28329 28330 28331 28332 28333 28334 28335 28336 28337 28338 28339 28340 28341 28342 28343 28344 28345 28346 28347 28348 28349 28350 28351 28352 28353 28354 28355 28356 28357 28358 28359 28360 28361 28362 28363 28364 28365 28366 28367 28368 28369 28370 28371 28372 28373 28374 28375 28376 28377 28378 28379 28380 28381 28382 28383 28384 28385 28386 28387 28388 28389 28390 28391 28392 28393 28394 28395 28396 28397 28398 28399 28400 28401 28402 28403 28404 28405 28406 28407 28408 28409 28410 28411 28412 28413 28414 28415 28416 28417 28418 28419 28420 28421 28422 28423 28424 28425 28426 28427 28428 28429 28430 28431 28432 28433 28434 28435 28436 28437 28438 28439 28440 28441 28442 28443 28444 28445 28446 28447 28448 28449 28450 28451 28452 28453 28454 28455 28456 28457 28458 28459 28460 28461 28462 28463 28464 28465 28466 28467 28468 28469 28470 28471 28472 28473 28474 28475 28476 28477 28478 28479 28480 28481 28482 28483 28484 28485 28486 28487 28488 28489 28490 28491 28492 28493 28494 28495 28496 28497 28498 28499 28500 28501 28502 28503 28504 28505 28506 28507 28508 28509 28510 28511 28512 28513 28514 28515 28516 28517 28518 28519 28520 28521 28522 28523 28524 28525 28526 28527 28528 28529 28530 28531 28532 28533 28534 28535 28536 28537 28538 28539 28540 28541 28542 28543 28544 28545 28546 28547 28548 28549 28550 28551 28552 28553 28554 28555 28556 28557 28558 28559 28560 28561 28562 28563 28564 28565 28566 28567 28568 28569 28570 28571 28572 28573 28574 28575 28576 28577 28578 28579 28580 28581 28582 28583 28584 28585 28586 28587 28588 28589 28590 28591 28592 28593 28594 28595 28596 28597 28598 28599 28600 28601 28602 28603 28604 28605 28606 28607 28608 28609 28610 28611 28612 28613 28614 28615 28616 28617 28618 28619 28620 28621 28622 28623 28624 28625 28626 28627 28628 28629 28630 28631 28632 28633 28634 28635 28636 28637 28638 28639 28640 28641 28642 28643 28644 28645 28646 28647 28648 28649 28650 28651 28652 28653 28654 28655 28656 28657 28658 28659 28660 28661 28662 28663 28664 28665 28666 28667 28668 28669 28670 28671 28672 28673 28674 28675 28676 28677 28678 28679 28680 28681 28682 28683 28684 28685 28686 28687 28688 28689 28690 28691 28692 28693 28694 28695 28696 28697 28698 28699 28700 28701 28702 28703 28704 28705 28706 28707 28708 28709 28710 28711 | if test X"$want_h2" != Xdefault; then as_fn_error $? "--with-nghttp2 was specified but could not find libnghttp2 pkg-config file." "$LINENO" 5 fi fi fi OPT_TCP2="yes" curl_h3_msg="disabled (--with-ngtcp2, --with-quiche)" if test "x$disable_http" = "xyes"; then # without HTTP, ngtcp2 is no use OPT_TCP2="no" fi # Check whether --with-ngtcp2 was given. if test "${with_ngtcp2+set}" = set; then : withval=$with_ngtcp2; OPT_TCP2=$withval fi case "$OPT_TCP2" in no) want_tcp2="no" ;; yes) want_tcp2="default" want_tcp2_path="" ;; *) want_tcp2="yes" want_tcp2_path="$withval/lib/pkgconfig" ;; esac curl_tcp2_msg="disabled (--with-ngtcp2)" if test X"$want_tcp2" != Xno; then CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" if test -n "$PKG_CONFIG"; then PKGCONFIG="$PKG_CONFIG" else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKGCONFIG=$ac_cv_path_PKGCONFIG if test -n "$PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 $as_echo "$PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKGCONFIG"; then ac_pt_PKGCONFIG=$PKGCONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG if test -n "$ac_pt_PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5 $as_echo "$ac_pt_PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKGCONFIG" = x; then PKGCONFIG="no" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKGCONFIG=$ac_pt_PKGCONFIG fi else PKGCONFIG="$ac_cv_path_PKGCONFIG" fi fi if test "x$PKGCONFIG" != "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libngtcp2 options with pkg-config" >&5 $as_echo_n "checking for libngtcp2 options with pkg-config... " >&6; } itexists=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --exists libngtcp2 >/dev/null 2>&1 && echo 1` if test -z "$itexists"; then PKGCONFIG="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } fi fi if test "$PKGCONFIG" != "no" ; then LIB_TCP2=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-l libngtcp2` { $as_echo "$as_me:${as_lineno-$LINENO}: -l is $LIB_TCP2" >&5 $as_echo "$as_me: -l is $LIB_TCP2" >&6;} CPP_TCP2=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --cflags-only-I libngtcp2` { $as_echo "$as_me:${as_lineno-$LINENO}: -I is $CPP_TCP2" >&5 $as_echo "$as_me: -I is $CPP_TCP2" >&6;} LD_TCP2=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-L libngtcp2` { $as_echo "$as_me:${as_lineno-$LINENO}: -L is $LD_TCP2" >&5 $as_echo "$as_me: -L is $LD_TCP2" >&6;} LDFLAGS="$LDFLAGS $LD_TCP2" CPPFLAGS="$CPPFLAGS $CPP_TCP2" LIBS="$LIB_TCP2 $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_TCP2=`echo $LD_TCP2 | $SED -e 's/-L//'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngtcp2_conn_client_new in -lngtcp2" >&5 $as_echo_n "checking for ngtcp2_conn_client_new in -lngtcp2... " >&6; } if ${ac_cv_lib_ngtcp2_ngtcp2_conn_client_new+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lngtcp2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" #endif char ngtcp2_conn_client_new (); int main (void) { return ngtcp2_conn_client_new (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ngtcp2_ngtcp2_conn_client_new=yes else ac_cv_lib_ngtcp2_ngtcp2_conn_client_new=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_ngtcp2_conn_client_new" >&5 $as_echo "$ac_cv_lib_ngtcp2_ngtcp2_conn_client_new" >&6; } if test "x$ac_cv_lib_ngtcp2_ngtcp2_conn_client_new" = xyes; then : for ac_header in ngtcp2/ngtcp2.h do : ac_fn_c_check_header_mongrel "$LINENO" "ngtcp2/ngtcp2.h" "ac_cv_header_ngtcp2_ngtcp2_h" "$ac_includes_default" if test "x$ac_cv_header_ngtcp2_ngtcp2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NGTCP2_NGTCP2_H 1 _ACEOF NGTCP2_ENABLED=1 $as_echo "#define USE_NGTCP2 1" >>confdefs.h USE_NGTCP2=1 CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_TCP2" export CURL_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: Added $DIR_TCP2 to CURL_LIBRARY_PATH" >&5 $as_echo "$as_me: Added $DIR_TCP2 to CURL_LIBRARY_PATH" >&6;} fi done else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS fi else if test X"$want_tcp2" != Xdefault; then as_fn_error $? "--with-ngtcp2 was specified but could not find ngtcp2 pkg-config file." "$LINENO" 5 fi fi fi if test "x$NGTCP2_ENABLED" = "x1"; then CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" if test -n "$PKG_CONFIG"; then PKGCONFIG="$PKG_CONFIG" else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKGCONFIG=$ac_cv_path_PKGCONFIG if test -n "$PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 $as_echo "$PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKGCONFIG"; then ac_pt_PKGCONFIG=$PKGCONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG if test -n "$ac_pt_PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5 $as_echo "$ac_pt_PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKGCONFIG" = x; then PKGCONFIG="no" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKGCONFIG=$ac_pt_PKGCONFIG fi else PKGCONFIG="$ac_cv_path_PKGCONFIG" fi fi if test "x$PKGCONFIG" != "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libngtcp2_crypto_openssl options with pkg-config" >&5 $as_echo_n "checking for libngtcp2_crypto_openssl options with pkg-config... " >&6; } itexists=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --exists libngtcp2_crypto_openssl >/dev/null 2>&1 && echo 1` if test -z "$itexists"; then PKGCONFIG="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } fi fi if test "$PKGCONFIG" != "no" ; then LIB_NGTCP2_CRYPTO_OPENSSL=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-l libngtcp2_crypto_openssl` { $as_echo "$as_me:${as_lineno-$LINENO}: -l is $LIB_NGTCP2_CRYPTO_OPENSSL" >&5 $as_echo "$as_me: -l is $LIB_NGTCP2_CRYPTO_OPENSSL" >&6;} CPP_NGTCP2_CRYPTO_OPENSSL=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --cflags-only-I libngtcp2_crypto_openssl` { $as_echo "$as_me:${as_lineno-$LINENO}: -I is $CPP_NGTCP2_CRYPTO_OPENSSL" >&5 $as_echo "$as_me: -I is $CPP_NGTCP2_CRYPTO_OPENSSL" >&6;} LD_NGTCP2_CRYPTO_OPENSSL=` if test -n "$want_tcp2_path"; then PKG_CONFIG_LIBDIR="$want_tcp2_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-L libngtcp2_crypto_openssl` { $as_echo "$as_me:${as_lineno-$LINENO}: -L is $LD_NGTCP2_CRYPTO_OPENSSL" >&5 $as_echo "$as_me: -L is $LD_NGTCP2_CRYPTO_OPENSSL" >&6;} LDFLAGS="$LDFLAGS $LD_NGTCP2_CRYPTO_OPENSSL" CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_OPENSSL" LIBS="$LIB_NGTCP2_CRYPTO_OPENSSL $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_NGTCP2_CRYPTO_OPENSSL=`echo $LD_NGTCP2_CRYPTO_OPENSSL | $SED -e 's/-L//'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngtcp2_crypto_ctx_initial in -lngtcp2_crypto_openssl" >&5 $as_echo_n "checking for ngtcp2_crypto_ctx_initial in -lngtcp2_crypto_openssl... " >&6; } if ${ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_ctx_initial+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lngtcp2_crypto_openssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" #endif char ngtcp2_crypto_ctx_initial (); int main (void) { return ngtcp2_crypto_ctx_initial (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_ctx_initial=yes else ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_ctx_initial=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_ctx_initial" >&5 $as_echo "$ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_ctx_initial" >&6; } if test "x$ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_ctx_initial" = xyes; then : for ac_header in ngtcp2/ngtcp2_crypto.h do : ac_fn_c_check_header_mongrel "$LINENO" "ngtcp2/ngtcp2_crypto.h" "ac_cv_header_ngtcp2_ngtcp2_crypto_h" "$ac_includes_default" if test "x$ac_cv_header_ngtcp2_ngtcp2_crypto_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NGTCP2_NGTCP2_CRYPTO_H 1 _ACEOF NGTCP2_ENABLED=1 $as_echo "#define USE_NGTCP2_CRYPTO_OPENSSL 1" >>confdefs.h USE_NGTCP2_CRYPTO_OPENSSL=1 CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_OPENSSL" export CURL_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: Added $DIR_NGTCP2_CRYPTO_OPENSSL to CURL_LIBRARY_PATH" >&5 $as_echo "$as_me: Added $DIR_NGTCP2_CRYPTO_OPENSSL to CURL_LIBRARY_PATH" >&6;} fi done else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS fi else if test X"$want_tcp2" != Xdefault; then as_fn_error $? "--with-ngtcp2 was specified but could not find ngtcp2_crypto_openssl pkg-config file." "$LINENO" 5 fi fi fi OPT_NGHTTP3="yes" if test "x$NGTCP2_ENABLED" = "x"; then # without ngtcp2, nghttp3 is of no use for us OPT_NGHTTP3="no" fi # Check whether --with-nghttp3 was given. if test "${with_nghttp3+set}" = set; then : withval=$with_nghttp3; OPT_NGHTTP3=$withval fi case "$OPT_NGHTTP3" in no) want_nghttp3="no" ;; yes) want_nghttp3="default" want_nghttp3_path="" ;; *) want_nghttp3="yes" want_nghttp3_path="$withval/lib/pkgconfig" ;; esac curl_http3_msg="disabled (--with-nghttp3)" if test X"$want_nghttp3" != Xno; then CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" if test -n "$PKG_CONFIG"; then PKGCONFIG="$PKG_CONFIG" else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKGCONFIG=$ac_cv_path_PKGCONFIG if test -n "$PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 $as_echo "$PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKGCONFIG"; then ac_pt_PKGCONFIG=$PKGCONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG if test -n "$ac_pt_PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5 $as_echo "$ac_pt_PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKGCONFIG" = x; then PKGCONFIG="no" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKGCONFIG=$ac_pt_PKGCONFIG fi else PKGCONFIG="$ac_cv_path_PKGCONFIG" fi fi if test "x$PKGCONFIG" != "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnghttp3 options with pkg-config" >&5 $as_echo_n "checking for libnghttp3 options with pkg-config... " >&6; } itexists=` if test -n "$want_nghttp3_path"; then PKG_CONFIG_LIBDIR="$want_nghttp3_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --exists libnghttp3 >/dev/null 2>&1 && echo 1` if test -z "$itexists"; then PKGCONFIG="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } fi fi if test "$PKGCONFIG" != "no" ; then LIB_NGHTTP3=` if test -n "$want_nghttp3_path"; then PKG_CONFIG_LIBDIR="$want_nghttp3_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-l libnghttp3` { $as_echo "$as_me:${as_lineno-$LINENO}: -l is $LIB_NGHTTP3" >&5 $as_echo "$as_me: -l is $LIB_NGHTTP3" >&6;} CPP_NGHTTP3=` if test -n "$want_nghttp3_path"; then PKG_CONFIG_LIBDIR="$want_nghttp3_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --cflags-only-I libnghttp3` { $as_echo "$as_me:${as_lineno-$LINENO}: -I is $CPP_NGHTTP3" >&5 $as_echo "$as_me: -I is $CPP_NGHTTP3" >&6;} LD_NGHTTP3=` if test -n "$want_nghttp3_path"; then PKG_CONFIG_LIBDIR="$want_nghttp3_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-L libnghttp3` { $as_echo "$as_me:${as_lineno-$LINENO}: -L is $LD_NGHTTP3" >&5 $as_echo "$as_me: -L is $LD_NGHTTP3" >&6;} LDFLAGS="$LDFLAGS $LD_NGHTTP3" CPPFLAGS="$CPPFLAGS $CPP_NGHTTP3" LIBS="$LIB_NGHTTP3 $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_NGHTTP3=`echo $LD_NGHTTP3 | $SED -e 's/-L//'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp3_conn_client_new in -lnghttp3" >&5 $as_echo_n "checking for nghttp3_conn_client_new in -lnghttp3... " >&6; } if ${ac_cv_lib_nghttp3_nghttp3_conn_client_new+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnghttp3 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" #endif char nghttp3_conn_client_new (); int main (void) { return nghttp3_conn_client_new (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nghttp3_nghttp3_conn_client_new=yes else ac_cv_lib_nghttp3_nghttp3_conn_client_new=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nghttp3_nghttp3_conn_client_new" >&5 $as_echo "$ac_cv_lib_nghttp3_nghttp3_conn_client_new" >&6; } if test "x$ac_cv_lib_nghttp3_nghttp3_conn_client_new" = xyes; then : for ac_header in nghttp3/nghttp3.h do : ac_fn_c_check_header_mongrel "$LINENO" "nghttp3/nghttp3.h" "ac_cv_header_nghttp3_nghttp3_h" "$ac_includes_default" if test "x$ac_cv_header_nghttp3_nghttp3_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NGHTTP3_NGHTTP3_H 1 _ACEOF curl_h3_msg="enabled (ngtcp2 + nghttp3)" NGHTTP3_ENABLED=1 $as_echo "#define USE_NGHTTP3 1" >>confdefs.h USE_NGHTTP3=1 CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGHTTP3" export CURL_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: Added $DIR_NGHTTP3 to CURL_LIBRARY_PATH" >&5 $as_echo "$as_me: Added $DIR_NGHTTP3 to CURL_LIBRARY_PATH" >&6;} experimental="$experimental HTTP3" fi done else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS fi else if test X"$want_nghttp3" != Xdefault; then as_fn_error $? "--with-nghttp3 was specified but could not find nghttp3 pkg-config file." "$LINENO" 5 fi fi fi OPT_QUICHE="yes" if test "x$disable_http" = "xyes" -o "x$USE_NGTCP" = "x1"; then # without HTTP or with ngtcp2, quiche is no use OPT_QUICHE="no" fi # Check whether --with-quiche was given. if test "${with_quiche+set}" = set; then : withval=$with_quiche; OPT_QUICHE=$withval fi case "$OPT_QUICHE" in no) want_quiche="no" ;; yes) want_quiche="default" want_quiche_path="" ;; *) want_quiche="yes" want_quiche_path="$withval" ;; esac if test X"$want_quiche" != Xno; then CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" if test -n "$PKG_CONFIG"; then PKGCONFIG="$PKG_CONFIG" else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKGCONFIG=$ac_cv_path_PKGCONFIG if test -n "$PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 $as_echo "$PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKGCONFIG"; then ac_pt_PKGCONFIG=$PKGCONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/bin:/usr/local/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG if test -n "$ac_pt_PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5 $as_echo "$ac_pt_PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKGCONFIG" = x; then PKGCONFIG="no" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKGCONFIG=$ac_pt_PKGCONFIG fi else PKGCONFIG="$ac_cv_path_PKGCONFIG" fi fi if test "x$PKGCONFIG" != "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quiche options with pkg-config" >&5 $as_echo_n "checking for quiche options with pkg-config... " >&6; } itexists=` if test -n "$want_quiche_path"; then PKG_CONFIG_LIBDIR="$want_quiche_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --exists quiche >/dev/null 2>&1 && echo 1` if test -z "$itexists"; then PKGCONFIG="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } fi fi if test "$PKGCONFIG" != "no" ; then LIB_QUICHE=` if test -n "$want_quiche_path"; then PKG_CONFIG_LIBDIR="$want_quiche_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-l quiche` { $as_echo "$as_me:${as_lineno-$LINENO}: -l is $LIB_QUICHE" >&5 $as_echo "$as_me: -l is $LIB_QUICHE" >&6;} CPP_QUICHE=` if test -n "$want_quiche_path"; then PKG_CONFIG_LIBDIR="$want_quiche_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --cflags-only-I quiche` { $as_echo "$as_me:${as_lineno-$LINENO}: -I is $CPP_QUICHE" >&5 $as_echo "$as_me: -I is $CPP_QUICHE" >&6;} LD_QUICHE=` if test -n "$want_quiche_path"; then PKG_CONFIG_LIBDIR="$want_quiche_path" export PKG_CONFIG_LIBDIR fi $PKGCONFIG --libs-only-L quiche` { $as_echo "$as_me:${as_lineno-$LINENO}: -L is $LD_QUICHE" >&5 $as_echo "$as_me: -L is $LD_QUICHE" >&6;} LDFLAGS="$LDFLAGS $LD_QUICHE" CPPFLAGS="$CPPFLAGS $CPP_QUICHE" LIBS="$LIB_QUICHE $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_QUICHE=`echo $LD_QUICHE | $SED -e 's/-L//'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quiche_connect in -lquiche" >&5 $as_echo_n "checking for quiche_connect in -lquiche... " >&6; } if ${ac_cv_lib_quiche_quiche_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lquiche $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" #endif char quiche_connect (); int main (void) { return quiche_connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_quiche_quiche_connect=yes else ac_cv_lib_quiche_quiche_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_quiche_quiche_connect" >&5 $as_echo "$ac_cv_lib_quiche_quiche_connect" >&6; } if test "x$ac_cv_lib_quiche_quiche_connect" = xyes; then : for ac_header in quiche.h do : ac_fn_c_check_header_mongrel "$LINENO" "quiche.h" "ac_cv_header_quiche_h" "$ac_includes_default" if test "x$ac_cv_header_quiche_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_QUICHE_H 1 _ACEOF experimental="$experimental HTTP3" { $as_echo "$as_me:${as_lineno-$LINENO}: HTTP3 support is experimental" >&5 $as_echo "$as_me: HTTP3 support is experimental" >&6;} curl_h3_msg="enabled (quiche)" QUICHE_ENABLED=1 $as_echo "#define USE_QUICHE 1" >>confdefs.h USE_QUICHE=1 CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_QUICHE" export CURL_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: Added $DIR_QUICHE to CURL_LIBRARY_PATH" >&5 $as_echo "$as_me: Added $DIR_QUICHE to CURL_LIBRARY_PATH" >&6;} fi done else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS fi else if test X"$want_quiche" != Xdefault; then as_fn_error $? "--with-quiche was specified but could not find quiche pkg-config file." "$LINENO" 5 fi fi fi OPT_ZSH_FPATH=default # Check whether --with-zsh-functions-dir was given. if test "${with_zsh_functions_dir+set}" = set; then : withval=$with_zsh_functions_dir; OPT_ZSH_FPATH=$withval fi |
︙ | ︙ | |||
40304 40305 40306 40307 40308 40309 40310 40311 40312 40313 40314 40315 40316 40317 | gettimeofday \ if_nametoindex \ mach_absolute_time \ pipe \ setlocale \ setmode \ setrlimit \ utime \ utimes do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : | > | 41378 41379 41380 41381 41382 41383 41384 41385 41386 41387 41388 41389 41390 41391 41392 | gettimeofday \ if_nametoindex \ mach_absolute_time \ pipe \ setlocale \ setmode \ setrlimit \ usleep \ utime \ utimes do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : |
︙ | ︙ | |||
41526 41527 41528 41529 41530 41531 41532 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } curl_altsvc_msg="enabled"; enable_altsvc="yes" | < | | 42601 42602 42603 42604 42605 42606 42607 42608 42609 42610 42611 42612 42613 42614 42615 42616 42617 42618 42619 42620 42621 42622 42623 42624 42625 42626 42627 42628 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } curl_altsvc_msg="enabled"; enable_altsvc="yes" ;; esac else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$enable_altsvc" = "yes"; then $as_echo "#define USE_ALTSVC 1" >>confdefs.h experimental="$experimental alt-svc" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether hiding of library internal symbols will actually happen" >&5 $as_echo_n "checking whether hiding of library internal symbols will actually happen... " >&6; } CFLAG_CURL_SYMBOL_HIDING="" doing_symbol_hiding="no" |
︙ | ︙ | |||
41671 41672 41673 41674 41675 41676 41677 41678 41679 41680 41681 41682 41683 41684 | if test "x$USE_TLS_SRP" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP" fi if test "x$USE_NGHTTP2" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" fi if test "x$CURL_WITH_MULTI_SSL" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL" fi if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ -o "x$NSS_ENABLED" = "x1"; then | > > > > | 42745 42746 42747 42748 42749 42750 42751 42752 42753 42754 42755 42756 42757 42758 42759 42760 42761 42762 | if test "x$USE_TLS_SRP" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP" fi if test "x$USE_NGHTTP2" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" fi if test "x$USE_NGTCP2" = "x1" -o "x$USE_QUICHE" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP3" fi if test "x$CURL_WITH_MULTI_SSL" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL" fi if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ -o "x$NSS_ENABLED" = "x1"; then |
︙ | ︙ | |||
44651 44652 44653 44654 44655 44656 44657 44658 44659 44660 44661 44662 44663 44664 | LDAPS: ${curl_ldaps_msg} RTSP: ${curl_rtsp_msg} RTMP: ${curl_rtmp_msg} Metalink: ${curl_mtlnk_msg} PSL: ${curl_psl_msg} Alt-svc: ${curl_altsvc_msg} HTTP2: ${curl_h2_msg} Protocols: ${SUPPORT_PROTOCOLS} Features: ${SUPPORT_FEATURES} " >&5 $as_echo "$as_me: Configured to build curl/libcurl: Host setup: ${host} Install prefix: ${prefix} | > | 45729 45730 45731 45732 45733 45734 45735 45736 45737 45738 45739 45740 45741 45742 45743 | LDAPS: ${curl_ldaps_msg} RTSP: ${curl_rtsp_msg} RTMP: ${curl_rtmp_msg} Metalink: ${curl_mtlnk_msg} PSL: ${curl_psl_msg} Alt-svc: ${curl_altsvc_msg} HTTP2: ${curl_h2_msg} HTTP3: ${curl_h3_msg} Protocols: ${SUPPORT_PROTOCOLS} Features: ${SUPPORT_FEATURES} " >&5 $as_echo "$as_me: Configured to build curl/libcurl: Host setup: ${host} Install prefix: ${prefix} |
︙ | ︙ | |||
44692 44693 44694 44695 44696 44697 44698 44699 44700 44701 44702 44703 | LDAPS: ${curl_ldaps_msg} RTSP: ${curl_rtsp_msg} RTMP: ${curl_rtmp_msg} Metalink: ${curl_mtlnk_msg} PSL: ${curl_psl_msg} Alt-svc: ${curl_altsvc_msg} HTTP2: ${curl_h2_msg} Protocols: ${SUPPORT_PROTOCOLS} Features: ${SUPPORT_FEATURES} " >&6;} if test -n "$experimental"; then cat >&2 << _EOF | > | | 45771 45772 45773 45774 45775 45776 45777 45778 45779 45780 45781 45782 45783 45784 45785 45786 | LDAPS: ${curl_ldaps_msg} RTSP: ${curl_rtsp_msg} RTMP: ${curl_rtmp_msg} Metalink: ${curl_mtlnk_msg} PSL: ${curl_psl_msg} Alt-svc: ${curl_altsvc_msg} HTTP2: ${curl_h2_msg} HTTP3: ${curl_h3_msg} Protocols: ${SUPPORT_PROTOCOLS} Features: ${SUPPORT_FEATURES} " >&6;} if test -n "$experimental"; then cat >&2 << _EOF WARNING: $experimental enabled but marked EXPERIMENTAL. Use with caution! _EOF fi |
Changes to jni/curl/configure.ac.
︙ | ︙ | |||
2629 2630 2631 2632 2633 2634 2635 | AC_DEFINE_UNQUOTED([CURL_DEFAULT_SSL_BACKEND], ["$DEFAULT_SSL_BACKEND"], [Default SSL backend]) fi dnl ********************************************************************** dnl Check for the CA bundle dnl ********************************************************************** | | | 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 | AC_DEFINE_UNQUOTED([CURL_DEFAULT_SSL_BACKEND], ["$DEFAULT_SSL_BACKEND"], [Default SSL backend]) fi dnl ********************************************************************** dnl Check for the CA bundle dnl ********************************************************************** if test -n "$check_for_ca_bundle"; then CURL_CHECK_CA_BUNDLE fi dnl ********************************************************************** dnl Check for libpsl dnl ********************************************************************** |
︙ | ︙ | |||
3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 | dnl To avoid link errors, we do not allow --with-nghttp2 without dnl a pkgconfig file AC_MSG_ERROR([--with-nghttp2 was specified but could not find libnghttp2 pkg-config file.]) fi fi fi dnl ********************************************************************** dnl Check for zsh completion path dnl ********************************************************************** OPT_ZSH_FPATH=default AC_ARG_WITH(zsh-functions-dir, | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 | dnl To avoid link errors, we do not allow --with-nghttp2 without dnl a pkgconfig file AC_MSG_ERROR([--with-nghttp2 was specified but could not find libnghttp2 pkg-config file.]) fi fi fi dnl ********************************************************************** dnl Check for ngtcp2 (QUIC) dnl ********************************************************************** OPT_TCP2="yes" curl_h3_msg="disabled (--with-ngtcp2, --with-quiche)" if test "x$disable_http" = "xyes"; then # without HTTP, ngtcp2 is no use OPT_TCP2="no" fi AC_ARG_WITH(ngtcp2, AC_HELP_STRING([--with-ngtcp2=PATH],[Enable ngtcp2 usage]) AC_HELP_STRING([--without-ngtcp2],[Disable ngtcp2 usage]), [OPT_TCP2=$withval]) case "$OPT_TCP2" in no) dnl --without-ngtcp2 option used want_tcp2="no" ;; yes) dnl --with-ngtcp2 option used without path want_tcp2="default" want_tcp2_path="" ;; *) dnl --with-ngtcp2 option used with path want_tcp2="yes" want_tcp2_path="$withval/lib/pkgconfig" ;; esac curl_tcp2_msg="disabled (--with-ngtcp2)" if test X"$want_tcp2" != Xno; then dnl backup the pre-ngtcp2 variables CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" CURL_CHECK_PKGCONFIG(libngtcp2, $want_tcp2_path) if test "$PKGCONFIG" != "no" ; then LIB_TCP2=`CURL_EXPORT_PCDIR([$want_tcp2_path]) $PKGCONFIG --libs-only-l libngtcp2` AC_MSG_NOTICE([-l is $LIB_TCP2]) CPP_TCP2=`CURL_EXPORT_PCDIR([$want_tcp2_path]) dnl $PKGCONFIG --cflags-only-I libngtcp2` AC_MSG_NOTICE([-I is $CPP_TCP2]) LD_TCP2=`CURL_EXPORT_PCDIR([$want_tcp2_path]) $PKGCONFIG --libs-only-L libngtcp2` AC_MSG_NOTICE([-L is $LD_TCP2]) LDFLAGS="$LDFLAGS $LD_TCP2" CPPFLAGS="$CPPFLAGS $CPP_TCP2" LIBS="$LIB_TCP2 $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_TCP2=`echo $LD_TCP2 | $SED -e 's/-L//'` fi AC_CHECK_LIB(ngtcp2, ngtcp2_conn_client_new, [ AC_CHECK_HEADERS(ngtcp2/ngtcp2.h, NGTCP2_ENABLED=1 AC_DEFINE(USE_NGTCP2, 1, [if ngtcp2 is in use]) AC_SUBST(USE_NGTCP2, [1]) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_TCP2" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_TCP2 to CURL_LIBRARY_PATH]) ) ], dnl not found, revert back to clean variables LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS ) else dnl no ngtcp2 pkg-config found, deal with it if test X"$want_tcp2" != Xdefault; then dnl To avoid link errors, we do not allow --with-ngtcp2 without dnl a pkgconfig file AC_MSG_ERROR([--with-ngtcp2 was specified but could not find ngtcp2 pkg-config file.]) fi fi fi if test "x$NGTCP2_ENABLED" = "x1"; then dnl backup the pre-ngtcp2_crypto_openssl variables CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" CURL_CHECK_PKGCONFIG(libngtcp2_crypto_openssl, $want_tcp2_path) if test "$PKGCONFIG" != "no" ; then LIB_NGTCP2_CRYPTO_OPENSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path]) $PKGCONFIG --libs-only-l libngtcp2_crypto_openssl` AC_MSG_NOTICE([-l is $LIB_NGTCP2_CRYPTO_OPENSSL]) CPP_NGTCP2_CRYPTO_OPENSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path]) dnl $PKGCONFIG --cflags-only-I libngtcp2_crypto_openssl` AC_MSG_NOTICE([-I is $CPP_NGTCP2_CRYPTO_OPENSSL]) LD_NGTCP2_CRYPTO_OPENSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path]) $PKGCONFIG --libs-only-L libngtcp2_crypto_openssl` AC_MSG_NOTICE([-L is $LD_NGTCP2_CRYPTO_OPENSSL]) LDFLAGS="$LDFLAGS $LD_NGTCP2_CRYPTO_OPENSSL" CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_OPENSSL" LIBS="$LIB_NGTCP2_CRYPTO_OPENSSL $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_NGTCP2_CRYPTO_OPENSSL=`echo $LD_NGTCP2_CRYPTO_OPENSSL | $SED -e 's/-L//'` fi AC_CHECK_LIB(ngtcp2_crypto_openssl, ngtcp2_crypto_ctx_initial, [ AC_CHECK_HEADERS(ngtcp2/ngtcp2_crypto.h, NGTCP2_ENABLED=1 AC_DEFINE(USE_NGTCP2_CRYPTO_OPENSSL, 1, [if ngtcp2_crypto_openssl is in use]) AC_SUBST(USE_NGTCP2_CRYPTO_OPENSSL, [1]) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_OPENSSL" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_OPENSSL to CURL_LIBRARY_PATH]) ) ], dnl not found, revert back to clean variables LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS ) else dnl no ngtcp2_crypto_openssl pkg-config found, deal with it if test X"$want_tcp2" != Xdefault; then dnl To avoid link errors, we do not allow --with-ngtcp2 without dnl a pkgconfig file AC_MSG_ERROR([--with-ngtcp2 was specified but could not find ngtcp2_crypto_openssl pkg-config file.]) fi fi fi dnl ********************************************************************** dnl Check for nghttp3 (HTTP/3 with ngtcp2) dnl ********************************************************************** OPT_NGHTTP3="yes" if test "x$NGTCP2_ENABLED" = "x"; then # without ngtcp2, nghttp3 is of no use for us OPT_NGHTTP3="no" fi AC_ARG_WITH(nghttp3, AC_HELP_STRING([--with-nghttp3=PATH],[Enable nghttp3 usage]) AC_HELP_STRING([--without-nghttp3],[Disable nghttp3 usage]), [OPT_NGHTTP3=$withval]) case "$OPT_NGHTTP3" in no) dnl --without-nghttp3 option used want_nghttp3="no" ;; yes) dnl --with-nghttp3 option used without path want_nghttp3="default" want_nghttp3_path="" ;; *) dnl --with-nghttp3 option used with path want_nghttp3="yes" want_nghttp3_path="$withval/lib/pkgconfig" ;; esac curl_http3_msg="disabled (--with-nghttp3)" if test X"$want_nghttp3" != Xno; then dnl backup the pre-nghttp3 variables CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" CURL_CHECK_PKGCONFIG(libnghttp3, $want_nghttp3_path) if test "$PKGCONFIG" != "no" ; then LIB_NGHTTP3=`CURL_EXPORT_PCDIR([$want_nghttp3_path]) $PKGCONFIG --libs-only-l libnghttp3` AC_MSG_NOTICE([-l is $LIB_NGHTTP3]) CPP_NGHTTP3=`CURL_EXPORT_PCDIR([$want_nghttp3_path]) dnl $PKGCONFIG --cflags-only-I libnghttp3` AC_MSG_NOTICE([-I is $CPP_NGHTTP3]) LD_NGHTTP3=`CURL_EXPORT_PCDIR([$want_nghttp3_path]) $PKGCONFIG --libs-only-L libnghttp3` AC_MSG_NOTICE([-L is $LD_NGHTTP3]) LDFLAGS="$LDFLAGS $LD_NGHTTP3" CPPFLAGS="$CPPFLAGS $CPP_NGHTTP3" LIBS="$LIB_NGHTTP3 $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_NGHTTP3=`echo $LD_NGHTTP3 | $SED -e 's/-L//'` fi AC_CHECK_LIB(nghttp3, nghttp3_conn_client_new, [ AC_CHECK_HEADERS(nghttp3/nghttp3.h, curl_h3_msg="enabled (ngtcp2 + nghttp3)" NGHTTP3_ENABLED=1 AC_DEFINE(USE_NGHTTP3, 1, [if nghttp3 is in use]) AC_SUBST(USE_NGHTTP3, [1]) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGHTTP3" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_NGHTTP3 to CURL_LIBRARY_PATH]) experimental="$experimental HTTP3" ) ], dnl not found, revert back to clean variables LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS ) else dnl no nghttp3 pkg-config found, deal with it if test X"$want_nghttp3" != Xdefault; then dnl To avoid link errors, we do not allow --with-nghttp3 without dnl a pkgconfig file AC_MSG_ERROR([--with-nghttp3 was specified but could not find nghttp3 pkg-config file.]) fi fi fi dnl ********************************************************************** dnl Check for quiche (QUIC) dnl ********************************************************************** OPT_QUICHE="yes" if test "x$disable_http" = "xyes" -o "x$USE_NGTCP" = "x1"; then # without HTTP or with ngtcp2, quiche is no use OPT_QUICHE="no" fi AC_ARG_WITH(quiche, AC_HELP_STRING([--with-quiche=PATH],[Enable quiche usage]) AC_HELP_STRING([--without-quiche],[Disable quiche usage]), [OPT_QUICHE=$withval]) case "$OPT_QUICHE" in no) dnl --without-quiche option used want_quiche="no" ;; yes) dnl --with-quiche option used without path want_quiche="default" want_quiche_path="" ;; *) dnl --with-quiche option used with path want_quiche="yes" want_quiche_path="$withval" ;; esac if test X"$want_quiche" != Xno; then dnl backup the pre-quiche variables CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" CURL_CHECK_PKGCONFIG(quiche, $want_quiche_path) if test "$PKGCONFIG" != "no" ; then LIB_QUICHE=`CURL_EXPORT_PCDIR([$want_quiche_path]) $PKGCONFIG --libs-only-l quiche` AC_MSG_NOTICE([-l is $LIB_QUICHE]) CPP_QUICHE=`CURL_EXPORT_PCDIR([$want_quiche_path]) dnl $PKGCONFIG --cflags-only-I quiche` AC_MSG_NOTICE([-I is $CPP_QUICHE]) LD_QUICHE=`CURL_EXPORT_PCDIR([$want_quiche_path]) $PKGCONFIG --libs-only-L quiche` AC_MSG_NOTICE([-L is $LD_QUICHE]) LDFLAGS="$LDFLAGS $LD_QUICHE" CPPFLAGS="$CPPFLAGS $CPP_QUICHE" LIBS="$LIB_QUICHE $LIBS" if test "x$cross_compiling" != "xyes"; then DIR_QUICHE=`echo $LD_QUICHE | $SED -e 's/-L//'` fi AC_CHECK_LIB(quiche, quiche_connect, [ AC_CHECK_HEADERS(quiche.h, experimental="$experimental HTTP3" AC_MSG_NOTICE([HTTP3 support is experimental]) curl_h3_msg="enabled (quiche)" QUICHE_ENABLED=1 AC_DEFINE(USE_QUICHE, 1, [if quiche is in use]) AC_SUBST(USE_QUICHE, [1]) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_QUICHE" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_QUICHE to CURL_LIBRARY_PATH]), ) ], dnl not found, revert back to clean variables LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS LIBS=$CLEANLIBS ) else dnl no nghttp3 pkg-config found, deal with it if test X"$want_quiche" != Xdefault; then dnl To avoid link errors, we do not allow --with-nghttp3 without dnl a pkgconfig file AC_MSG_ERROR([--with-quiche was specified but could not find quiche pkg-config file.]) fi fi fi dnl ********************************************************************** dnl Check for zsh completion path dnl ********************************************************************** OPT_ZSH_FPATH=default AC_ARG_WITH(zsh-functions-dir, |
︙ | ︙ | |||
3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 | gettimeofday \ if_nametoindex \ mach_absolute_time \ pipe \ setlocale \ setmode \ setrlimit \ utime \ utimes ],[ ],[ func="$ac_func" eval skipcheck=\$skipcheck_$func if test "x$skipcheck" != "xyes"; then | > | 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 | gettimeofday \ if_nametoindex \ mach_absolute_time \ pipe \ setlocale \ setmode \ setrlimit \ usleep \ utime \ utimes ],[ ],[ func="$ac_func" eval skipcheck=\$skipcheck_$func if test "x$skipcheck" != "xyes"; then |
︙ | ︙ | |||
4157 4158 4159 4160 4161 4162 4163 | [ case "$enableval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) curl_altsvc_msg="enabled"; enable_altsvc="yes" | < | | 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 | [ case "$enableval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) curl_altsvc_msg="enabled"; enable_altsvc="yes" ;; esac ], AC_MSG_RESULT(no) ) if test "$enable_altsvc" = "yes"; then AC_DEFINE(USE_ALTSVC, 1, [to enable alt-svc]) experimental="$experimental alt-svc" fi dnl ************************************************************ dnl hiding of library internal symbols dnl CURL_CONFIGURE_SYMBOL_HIDING |
︙ | ︙ | |||
4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 | if test "x$USE_TLS_SRP" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP" fi if test "x$USE_NGHTTP2" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" fi if test "x$CURL_WITH_MULTI_SSL" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL" fi if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ -o "x$NSS_ENABLED" = "x1"; then | > > > > | 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 | if test "x$USE_TLS_SRP" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP" fi if test "x$USE_NGHTTP2" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" fi if test "x$USE_NGTCP2" = "x1" -o "x$USE_QUICHE" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP3" fi if test "x$CURL_WITH_MULTI_SSL" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL" fi if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ -o "x$NSS_ENABLED" = "x1"; then |
︙ | ︙ | |||
4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 | LDAPS: ${curl_ldaps_msg} RTSP: ${curl_rtsp_msg} RTMP: ${curl_rtmp_msg} Metalink: ${curl_mtlnk_msg} PSL: ${curl_psl_msg} Alt-svc: ${curl_altsvc_msg} HTTP2: ${curl_h2_msg} Protocols: ${SUPPORT_PROTOCOLS} Features: ${SUPPORT_FEATURES} ]) if test -n "$experimental"; then cat >&2 << _EOF | > | | 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 | LDAPS: ${curl_ldaps_msg} RTSP: ${curl_rtsp_msg} RTMP: ${curl_rtmp_msg} Metalink: ${curl_mtlnk_msg} PSL: ${curl_psl_msg} Alt-svc: ${curl_altsvc_msg} HTTP2: ${curl_h2_msg} HTTP3: ${curl_h3_msg} Protocols: ${SUPPORT_PROTOCOLS} Features: ${SUPPORT_FEATURES} ]) if test -n "$experimental"; then cat >&2 << _EOF WARNING: $experimental enabled but marked EXPERIMENTAL. Use with caution! _EOF fi |
Changes to jni/curl/docs/ALTSVC.md.
1 2 3 4 | # Alt-Svc curl features **EXPERIMENTAL** support for the Alt-Svc: HTTP header. | < < < < < < < < < < < < < < < | | | | | | | | > | < | | | | < < < < < | < | > | > | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # Alt-Svc curl features **EXPERIMENTAL** support for the Alt-Svc: HTTP header. ## Enable Alt-Svc in build `./configure --enable-alt-svc` ## Standard [RFC 7838](https://tools.ietf.org/html/rfc7838) # Alt-Svc cache file format This a text based file with one line per entry and each line consists of nine space separated fields. ## Example h2 quic.tech 8443 h3-22 quic.tech 8443 "20190808 06:18:37" 0 0 ## Fields 1. The ALPN id for the source origin 2. The host name for the source origin 3. The port number for the source origin 4. The ALPN id for the destination host 5. The host name for the destination host 6. The host number for the destination host 7. The expiration date and time of this entry withing double quotes. The date format is "YYYYMMDD HH:MM:SS" and the time zone is GMT. 8. Boolean (1 or 0) if "persist" was set for this entry 9. Integer priority value (not currently used) # TODO - handle multiple response headers, when one of them says `clear` (should override them all) - using `Age:` value for caching age as per spec - `CURLALTSVC_IMMEDIATELY` support |
Changes to jni/curl/docs/DEPRECATE.md.
1 2 3 4 5 6 7 | # Items to be removed from future curl releases If any of these deprecated features is a cause for concern for you, please email the curl-library mailing list as soon as possible and explain to us why this is a problem for you and how your use case can't be satisfied properly using a work around. | < < < < < < < < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Items to be removed from future curl releases If any of these deprecated features is a cause for concern for you, please email the curl-library mailing list as soon as possible and explain to us why this is a problem for you and how your use case can't be satisfied properly using a work around. ## PolarSSL The polarssl TLS library has not had an update in over three years. The last release was done on [January 7 2016](https://tls.mbed.org/tech-updates/releases). This library has been superseded by the mbedTLS library, which is the current incarnation of PolarSSL. curl has supported mbedTLS since 2015. |
︙ | ︙ |
Added jni/curl/docs/EXPERIMENTAL.md.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # Experimental Some features and functionality in curl and libcurl are considered **EXPERIMENTAL**. Experimental support in curl means: 1. Experimental features are provided to allow users to try them out and provide feedback on functionality and API etc before they ship and get "carved in stone". 2. You must enable the feature when invoking configure as otherwise curl will not be built with the feature present. 3. We strongly advice against using this feature in production. 4. **We reserve the right to change behavior** of the feature without sticking to our API/ABI rules as we do for regular features, as long as it is marked experimental. 5. Experimental features are clearly marked so in documentation. Beware. ## Experimental features right now - HTTP/3 support and options - alt-svc support and options |
Added jni/curl/docs/HTTP3.md.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | # HTTP3 (and QUIC) ## Resources [HTTP/3 Explained](https://daniel.haxx.se/http3-explained/) - the online free book describing the protocols involved. [QUIC implementation](https://github.com/curl/curl/wiki/QUIC-implementation) - the wiki page describing the plan for how to support QUIC and HTTP/3 in curl and libcurl. [quicwg.org](https://quicwg.org/) - home of the official protocol drafts ## QUIC libraries QUIC libraries we're experiementing with: [ngtcp2](https://github.com/ngtcp2/ngtcp2) [quiche](https://github.com/cloudflare/quiche) ## Experimental! HTTP/3 and QUIC support in curl is considered **EXPERIMENTAL** until further notice. It needs to be enabled at build-time. Further development and tweaking of the HTTP/3 support in curl will happen in in the master branch using pull-requests, just like ordinary changes. # ngtcp2 version ## Build Build (patched) OpenSSL % git clone --depth 1 -b openssl-quic-draft-22 https://github.com/tatsuhiro-t/openssl % cd openssl % ./config enable-tls1_3 --prefix=<somewhere1> % make % make install_sw Build nghttp3 % cd .. % git clone https://github.com/ngtcp2/nghttp3 % cd nghttp3 % autoreconf -i % ./configure --prefix=<somewhere2> --enable-lib-only % make % make install Build ngtcp2 % cd .. % git clone -b draft-22 https://github.com/ngtcp2/ngtcp2 % cd ngtcp2 % autoreconf -i % ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somehere1>/lib" --prefix==<somewhere3> % make % make install Build curl % cd .. % git clone https://github.com/curl/curl % cd curl % ./buildconf % LDFLAGS="-Wl,-rpath,<somewhere1>/lib" ./configure -with-ssl=<somewhere1> --with-nghttp3=<somewhere2> --with-ngtcp2=<somewhere3> % make ## Running Make sure the custom OpenSSL library is the one used at run-time, as otherwise you'll just get ld.so linker errors. ## Invoke from command line curl --http3 https://nghttp2.org:8443/ # quiche version ## build Clone quiche and BoringSSL: % git clone --recursive https://github.com/cloudflare/quiche Build BoringSSL (it needs to be built manually so it can be reused with curl): % cd quiche/deps/boringssl % mkdir build % cd build % cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on .. % make -j`nproc` % cd .. % mkdir .openssl/lib -p % cp build/crypto/libcrypto.a build/ssl/libssl.a .openssl/lib % ln -s $PWD/include .openssl Build quiche: % cd ../.. % QUICHE_BSSL_PATH=$PWD/deps/boringssl cargo build --release --features pkg-config-meta Clone and build curl: % cd .. % git clone https://github.com/curl/curl % cd curl % ./buildconf % ./configure LDFLAGS="-Wl,-rpath,$PWD/../quiche/target/release" --with-ssl=$PWD/../quiche/deps/boringssl/.openssl --with-quiche=$PWD/../quiche/target/release % make -j`nproc` ## Running Make an HTTP/3 request. % src/curl --http3 https://cloudflare-quic.com/ % src/curl --http3 https://facebook.com/ % src/curl --http3 https://quic.aiortc.org:4433/ % src/curl --http3 https://quic.rocks:4433/ |
Changes to jni/curl/docs/INTERNALS.md.
︙ | ︙ | |||
769 770 771 772 773 774 775 | This will create a library that has memory debugging enabled. ## Modify Your Application Add a line in your application code: | | | 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 | This will create a library that has memory debugging enabled. ## Modify Your Application Add a line in your application code: `curl_dbg_memdebug("dump");` This will make the malloc debug system output a full trace of all resource using functions to the given file name. Make sure you rebuild your program and that you link with the same libcurl you built for this purpose as described above. ## Run Your Application |
︙ | ︙ |
Changes to jni/curl/docs/KNOWN_BUGS.
︙ | ︙ | |||
9 10 11 12 13 14 15 | These are problems and bugs known to exist at the time of this release. Feel free to join in and help us correct one or more of these! Also be sure to check the changelog of the current development status, as one or more of these problems may have been fixed or changed somewhat since this was written! 1. HTTP 1.1 CURLFORM_CONTENTLEN in an array | < < | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | These are problems and bugs known to exist at the time of this release. Feel free to join in and help us correct one or more of these! Also be sure to check the changelog of the current development status, as one or more of these problems may have been fixed or changed somewhat since this was written! 1. HTTP 1.1 CURLFORM_CONTENTLEN in an array 1.3 STARTTRANSFER time is wrong for HTTP POSTs 1.4 multipart formposts file name encoding 1.5 Expect-100 meets 417 1.6 Unnecessary close when 401 received waiting for 100 1.7 Deflate error after all content was received 1.8 DoH isn't used for all name resolves when enabled 1.9 HTTP/2 frames while in the connection pool kill reuse 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM 2. TLS 2.1 CURLINFO_SSL_VERIFYRESULT has limited support 2.2 DER in keychain 2.3 GnuTLS backend skips really long certificate fields 2.4 DarwinSSL won't import PKCS#12 client certificates without a password |
︙ | ︙ | |||
44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 4.1 -J and -O with %-encoded file names 4.2 -J with -C - fails 4.3 --retry and transfer timeouts 4.4 --upload-file . hang if delay in STDIN 4.5 Improve --data-urlencode space encoding 5. Build and portability issues 5.2 curl-config --libs contains private details 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10 5.4 Cannot compile against a static build of OpenLDAP 5.5 can't handle Unicode arguments in Windows 5.6 cmake support gaps 5.7 Visual Studio project gaps 5.8 configure finding libs in wrong directory | > | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 4.1 -J and -O with %-encoded file names 4.2 -J with -C - fails 4.3 --retry and transfer timeouts 4.4 --upload-file . hang if delay in STDIN 4.5 Improve --data-urlencode space encoding 5. Build and portability issues 5.1 USE_UNIX_SOCKETS on Windows 5.2 curl-config --libs contains private details 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10 5.4 Cannot compile against a static build of OpenLDAP 5.5 can't handle Unicode arguments in Windows 5.6 cmake support gaps 5.7 Visual Studio project gaps 5.8 configure finding libs in wrong directory |
︙ | ︙ | |||
94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 11. Internals 11.1 Curl leaks .onion hostnames in DNS 11.2 error buffer not set if connection to multiple addresses fails 11.3 c-ares deviates from stock resolver on http://1346569778 11.4 HTTP test server 'connection-monitor' problems 11.5 Connection information when using TCP Fast Open 11.6 slow connect to localhost on Windows 12. LDAP and OpenLDAP 12.1 OpenLDAP hangs after returning results 13. TCP/IP 13.1 --interface for ipv6 binds to unusable IP address | > | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 11. Internals 11.1 Curl leaks .onion hostnames in DNS 11.2 error buffer not set if connection to multiple addresses fails 11.3 c-ares deviates from stock resolver on http://1346569778 11.4 HTTP test server 'connection-monitor' problems 11.5 Connection information when using TCP Fast Open 11.6 slow connect to localhost on Windows 11.7 signal-based resolver timeouts 12. LDAP and OpenLDAP 12.1 OpenLDAP hangs after returning results 13. TCP/IP 13.1 --interface for ipv6 binds to unusable IP address |
︙ | ︙ | |||
117 118 119 120 121 122 123 | It is not possible to pass a 64-bit value using CURLFORM_CONTENTLEN with CURLFORM_ARRAY, when compiled on 32-bit platforms that support 64-bit integers. This is because the underlying structure 'curl_forms' uses a dual purpose char* for storing these values in via casting. For more information see the now closed related issue: https://github.com/curl/curl/issues/608 | < < < < < < < < | 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | It is not possible to pass a 64-bit value using CURLFORM_CONTENTLEN with CURLFORM_ARRAY, when compiled on 32-bit platforms that support 64-bit integers. This is because the underlying structure 'curl_forms' uses a dual purpose char* for storing these values in via casting. For more information see the now closed related issue: https://github.com/curl/curl/issues/608 1.3 STARTTRANSFER time is wrong for HTTP POSTs Wrong STARTTRANSFER timer accounting for POST requests Timer works fine with GET requests, but while using POST the time for CURLINFO_STARTTRANSFER_TIME is wrong. While using POST CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero every time. |
︙ | ︙ | |||
185 186 187 188 189 190 191 | curl while the connection is held in curl's connection pool, the socket will be found readable when considered for reuse and that makes curl think it is dead and then it will be closed and a new connection gets created instead. This is *best* fixed by adding monitoring to connections while they are kept in the pool so that pings can be responded to appropriately. | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | curl while the connection is held in curl's connection pool, the socket will be found readable when considered for reuse and that makes curl think it is dead and then it will be closed and a new connection gets created instead. This is *best* fixed by adding monitoring to connections while they are kept in the pool so that pings can be responded to appropriately. 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM I'm using libcurl to POST form data using a FILE* with the CURLFORM_STREAM option of curl_formadd(). I've noticed that if the connection drops at just the right time, the POST is reattempted without the data from the file. It seems like the file stream position isn't getting reset to the beginning of the file. I found the CURLOPT_SEEKFUNCTION option and set that with a |
︙ | ︙ | |||
385 386 387 388 389 390 391 392 393 394 395 396 397 398 | ASCII space characters in --data-urlencode are currently encoded as %20 rather than +, which RFC 1866 says should be used. See https://github.com/curl/curl/issues/3229 5. Build and portability issues 5.2 curl-config --libs contains private details "curl-config --libs" will include details set in LDFLAGS when configure is run that might be needed only for building libcurl. Further, curl-config --cflags suffers from the same effects with CFLAGS/CPPFLAGS. 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10 | > > > > > > > | 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 | ASCII space characters in --data-urlencode are currently encoded as %20 rather than +, which RFC 1866 says should be used. See https://github.com/curl/curl/issues/3229 5. Build and portability issues 5.1 USE_UNIX_SOCKETS on Windows Due to incorrect CMake checks for the presense of the feature, it will never be enabled for windows in a cmake build. See https://github.com/curl/curl/issues/4040 5.2 curl-config --libs contains private details "curl-config --libs" will include details set in LDFLAGS when configure is run that might be needed only for building libcurl. Further, curl-config --cflags suffers from the same effects with CFLAGS/CPPFLAGS. 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10 |
︙ | ︙ | |||
723 724 725 726 727 728 729 730 731 732 733 734 735 736 | connection, suggesting a problem in the HE handling. If we can *know* that we're talking to a local host, we should lower the happy eyeballs delay timeout for IPv6 (related: hardcode the "localhost" addresses, mentioned in TODO). Possibly we should reduce that delay for all. https://github.com/curl/curl/issues/2281 12. LDAP and OpenLDAP 12.1 OpenLDAP hangs after returning results By configuration defaults, openldap automatically chase referrals on secondary socket descriptors. The OpenLDAP backend is asynchronous and thus | > > > > > > > > > > > > > | 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 | connection, suggesting a problem in the HE handling. If we can *know* that we're talking to a local host, we should lower the happy eyeballs delay timeout for IPv6 (related: hardcode the "localhost" addresses, mentioned in TODO). Possibly we should reduce that delay for all. https://github.com/curl/curl/issues/2281 11.7 signal-based resolver timeouts libcurl built without an asynchronous resolver library uses alarm() to time out DNS lookups. When a timeout occurs, this causes libcurl to jump from the signal handler back into the library with a sigsetjmp, which effectively causes libcurl to continue running within the signal handler. This is non-portable and could cause problems on some platforms. A discussion on the problem is available at https://curl.haxx.se/mail/lib-2008-09/0197.html Also, alarm() provides timeout resolution only to the nearest second. alarm ought to be replaced by setitimer on systems that support it. 12. LDAP and OpenLDAP 12.1 OpenLDAP hangs after returning results By configuration defaults, openldap automatically chase referrals on secondary socket descriptors. The OpenLDAP backend is asynchronous and thus |
︙ | ︙ |
Changes to jni/curl/docs/Makefile.am.
︙ | ︙ | |||
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | CHECKSRC.md \ CIPHERS.md \ CMakeLists.txt \ CODE_OF_CONDUCT.md \ CODE_STYLE.md \ CONTRIBUTE.md \ DEPRECATE.md \ FAQ \ FEATURES \ GOVERNANCE.md \ HELP-US.md \ HISTORY.md \ HTTP-COOKIES.md \ HTTP2.md \ INSTALL \ INSTALL.cmake \ INSTALL.md \ INTERNALS.md \ KNOWN_BUGS \ LICENSE-MIXING.md \ MAIL-ETIQUETTE \ README.cmake \ README.md \ README.netware \ README.win32 \ RELEASE-PROCEDURE.md \ RESOURCES \ ROADMAP.md \ | > > > | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | CHECKSRC.md \ CIPHERS.md \ CMakeLists.txt \ CODE_OF_CONDUCT.md \ CODE_STYLE.md \ CONTRIBUTE.md \ DEPRECATE.md \ EXPERIMENTAL.md \ FAQ \ FEATURES \ GOVERNANCE.md \ HELP-US.md \ HISTORY.md \ HTTP-COOKIES.md \ HTTP2.md \ HTTP3.md \ INSTALL \ INSTALL.cmake \ INSTALL.md \ INTERNALS.md \ KNOWN_BUGS \ LICENSE-MIXING.md \ MAIL-ETIQUETTE \ PARALLEL-TRANSFERS.md \ README.cmake \ README.md \ README.netware \ README.win32 \ RELEASE-PROCEDURE.md \ RESOURCES \ ROADMAP.md \ |
︙ | ︙ |
Changes to jni/curl/docs/Makefile.in.
︙ | ︙ | |||
379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 | CHECKSRC.md \ CIPHERS.md \ CMakeLists.txt \ CODE_OF_CONDUCT.md \ CODE_STYLE.md \ CONTRIBUTE.md \ DEPRECATE.md \ FAQ \ FEATURES \ GOVERNANCE.md \ HELP-US.md \ HISTORY.md \ HTTP-COOKIES.md \ HTTP2.md \ INSTALL \ INSTALL.cmake \ INSTALL.md \ INTERNALS.md \ KNOWN_BUGS \ LICENSE-MIXING.md \ MAIL-ETIQUETTE \ README.cmake \ README.md \ README.netware \ README.win32 \ RELEASE-PROCEDURE.md \ RESOURCES \ ROADMAP.md \ | > > > | 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 | CHECKSRC.md \ CIPHERS.md \ CMakeLists.txt \ CODE_OF_CONDUCT.md \ CODE_STYLE.md \ CONTRIBUTE.md \ DEPRECATE.md \ EXPERIMENTAL.md \ FAQ \ FEATURES \ GOVERNANCE.md \ HELP-US.md \ HISTORY.md \ HTTP-COOKIES.md \ HTTP2.md \ HTTP3.md \ INSTALL \ INSTALL.cmake \ INSTALL.md \ INTERNALS.md \ KNOWN_BUGS \ LICENSE-MIXING.md \ MAIL-ETIQUETTE \ PARALLEL-TRANSFERS.md \ README.cmake \ README.md \ README.netware \ README.win32 \ RELEASE-PROCEDURE.md \ RESOURCES \ ROADMAP.md \ |
︙ | ︙ |
Added jni/curl/docs/PARALLEL-TRANSFERS.md.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | # Parallel transfers curl 7.66.0 introduces support for doing multiple transfers simultaneously; in parallel. ## -Z, --parallel When this command line option is used, curl will perform the transfers given to it at the same time. It will do up to `--parallel-max` concurrent transfers, with a default value of 50. ## Progress meter The progress meter that is displayed when doing parallel transfers is completely different than the regular one used for each single transfer. It shows: o percent download (if known, which means *all* transfers need to have a known size) o precent upload (if known, with the same caveat as for download) o total amount of downloaded data o total amount of uploaded data o number of transfers to perform o number of concurrent transfers being transferred right now o number of transfers queued up waiting to start o total time all transfers are expected to take (if sizes are known) o current time the transfers have spent so far o estimated time left (if sizes are known) o current transfer speed (the faster of UL/DL speeds measured over the last few seconds) Example: DL% UL% Dled Uled Xfers Live Qd Total Current Left Speed 72 -- 37.9G 0 101 30 23 0:00:55 0:00:34 0:00:22 2752M ## Behavior differences Connections are shared fine between different easy handles, but the "authentication contexts" are not. So for example doing HTTP Digest auth with one handle for a particular transfer and then continue on with another handle that reuses the same connection, the second handle can't send the necessary Authorization header at once since the context is only kept in the original easy handle. To fix this, the authorization state could be made possible to share with the share API as well, as a context per origin + path (realm?) basically. Visible in test 153, 1412 and more. ## Feedback! This is early days for parallel transfer support. Keep your eyes open for unintended side effects or downright bugs. Tell us what you think and how you think we could improve this feature! |
Changes to jni/curl/docs/ROADMAP.md.
1 2 3 4 5 6 7 | curl the next few years - perhaps ================================= Roadmap of things Daniel Stenberg wants to work on next. It is intended to serve as a guideline for others for information, feedback and possible participation. | | | | > > > > > > > > > < < < | | | < | < < < < | < < | < < > | < | < > | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | curl the next few years - perhaps ================================= Roadmap of things Daniel Stenberg wants to work on next. It is intended to serve as a guideline for others for information, feedback and possible participation. HSTS ---- Complete and merge [the existing PR](https://github.com/curl/curl/pull/2682). Loading a huge preload file is probably not too interesting to most people, but using a custom file and reacting to HSTS response header probably are good features. DNS-over-TLS ------------ Similar to DNS-over-HTTPS. Could share quite a lot of generic code. ESNI (Encrypted SNI) -------------------- See Daniel's post on [Support of Encrypted SNI](https://curl.haxx.se/mail/lib-2019-03/0000.html) on the mailing list. Initial work exists in https://github.com/curl/curl/pull/4011 tiny-curl --------- There's no immediate action for this but users seem keen on being able to building custom minimized versions of libcurl for their products. Make sure new features that are "niche" can still be disabled at build-time. MQTT ---- Support receiving and sending MQTT messages. Initial work exists in https://github.com/curl/curl/pull/3514 Hardcode “localhost” -------------------- No need to resolve it. Avoid a risk where this is resolved over the network and actually responds with something else than a local address. Some operating systems already do this. Also: https://tools.ietf.org/html/draft-ietf-dnsop-let-localhost-be-localhost-02 "menu config"-style build feature selection ------------------------------------------- Allow easier building of custom libcurl versions with only a selected feature where the available features are easily browsable and toggle-able ON/OFF or similar. |
Changes to jni/curl/docs/THANKS.
︙ | ︙ | |||
48 49 50 51 52 53 54 55 56 57 58 59 60 61 | Alex Baines Alex Bligh Alex Chan Alex Fishman Alex Grebenschikov Alex Gruz Alex Malinovich Alex McLellan Alex Neblett Alex Nichols Alex Potapenko Alex Rousskov Alex Suykov Alex Vinnik | > | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | Alex Baines Alex Bligh Alex Chan Alex Fishman Alex Grebenschikov Alex Gruz Alex Malinovich Alex Mayorga Alex McLellan Alex Neblett Alex Nichols Alex Potapenko Alex Rousskov Alex Suykov Alex Vinnik |
︙ | ︙ | |||
80 81 82 83 84 85 86 87 88 89 90 91 92 93 | Alexey Zakhlestin Alexis Carvalho Alexis La Goutte Alfonso Martone Alfred Gebert Allen Pulsifer Alona Rossen Amol Pattekar Amr Shahin Anatol Belski Anatoli Tubman Anders Bakken Anders Gustafsson Anders Havn | > | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | Alexey Zakhlestin Alexis Carvalho Alexis La Goutte Alfonso Martone Alfred Gebert Allen Pulsifer Alona Rossen Amit Katyal Amol Pattekar Amr Shahin Anatol Belski Anatoli Tubman Anders Bakken Anders Gustafsson Anders Havn |
︙ | ︙ | |||
168 169 170 171 172 173 174 175 176 177 178 179 180 181 | Augustus Saunders Avery Fay Axel Tillequin Ayoub Boudhar Balaji Parasuram Balaji S Rao Balaji Salunke Balint Szilakszi Barry Abrahamson Bart Whiteley Bas Mevissen Bas van Schaik Basuke Suzuki Ben Boeckel | > | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | Augustus Saunders Avery Fay Axel Tillequin Ayoub Boudhar Balaji Parasuram Balaji S Rao Balaji Salunke Balazs Kovacsics Balint Szilakszi Barry Abrahamson Bart Whiteley Bas Mevissen Bas van Schaik Basuke Suzuki Ben Boeckel |
︙ | ︙ | |||
226 227 228 229 230 231 232 233 234 235 236 237 238 239 | Brad Fitzpatrick Brad Harder Brad Hards Brad King Brad Spencer Bradford Bruce Brandon Casey Brandon Wang Brendan Jurd Brent Beardsley Brian Akins Brian Carpenter Brian Chaplin Brian Childs | > | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | Brad Fitzpatrick Brad Harder Brad Hards Brad King Brad Spencer Bradford Bruce Brandon Casey Brandon Dong Brandon Wang Brendan Jurd Brent Beardsley Brian Akins Brian Carpenter Brian Chaplin Brian Childs |
︙ | ︙ | |||
257 258 259 260 261 262 263 264 265 266 267 268 269 270 | Caleb Raitto Cameron Kaiser Cameron MacMinn Camille Moncelier Caolan McNamara Carie Pointer Carlo Cannas Carlo Teubner Carlo Wood Carlos ORyan Carsten Lange Casey O'Donnell Catalin Patulea Chad Monroe | > | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | Caleb Raitto Cameron Kaiser Cameron MacMinn Camille Moncelier Caolan McNamara Carie Pointer Carlo Cannas Carlo Marcelo Arenas Belón Carlo Teubner Carlo Wood Carlos ORyan Carsten Lange Casey O'Donnell Catalin Patulea Chad Monroe |
︙ | ︙ | |||
311 312 313 314 315 316 317 318 319 320 321 322 323 324 | Claes Jakobsson Clarence Gardner Claudio Neves Clemens Gruber Cliff Crosland Clifford Wolf Clint Clayton Cody Jones Cody Mack Colby Ranger Colin Blair Colin Hogben Colin Watson Colm Buckley | > | 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 | Claes Jakobsson Clarence Gardner Claudio Neves Clemens Gruber Cliff Crosland Clifford Wolf Clint Clayton Clément Notin Cody Jones Cody Mack Colby Ranger Colin Blair Colin Hogben Colin Watson Colm Buckley |
︙ | ︙ | |||
710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 | Ian Gulliver Ian Lynagh Ian Turner Ian Wilkes Ignacio Vazquez-Abrams Igor Franchuk Igor Khristophorov Igor Novoseltsev Igor Polyakov Ihor Karpenko Iida Yosiaki Ilguiz Latypov Ilja van Sprundel Immanuel Gregoire Inca R Ingmar Runge Ingo Ralf Blum Ingo Wilken Irfan Adilovic Irving Wolfe Isaac Boukris Isaiah Norton Ishan SinghLevett Ithubg on github Ivan Avdeev Ivo Bellin Salarin | > > | 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 | Ian Gulliver Ian Lynagh Ian Turner Ian Wilkes Ignacio Vazquez-Abrams Igor Franchuk Igor Khristophorov Igor Makarov Igor Novoseltsev Igor Polyakov Ihor Karpenko Iida Yosiaki Ilguiz Latypov Ilja van Sprundel Immanuel Gregoire Inca R Ingmar Runge Ingo Ralf Blum Ingo Wilken Irfan Adilovic Ironbars13 on github Irving Wolfe Isaac Boukris Isaiah Norton Ishan SinghLevett Ithubg on github Ivan Avdeev Ivo Bellin Salarin |
︙ | ︙ | |||
771 772 773 774 775 776 777 778 779 780 781 782 783 784 | Jared Jennings Jared Lundell Jari Aalto Jari Sundell Jason Baietto Jason Glasgow Jason Juang Jason Liu Jason McDonald Jason S. Priebe Javier Barroso Javier Blazquez Javier G. Sogo Javier Sixto | > | 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 | Jared Jennings Jared Lundell Jari Aalto Jari Sundell Jason Baietto Jason Glasgow Jason Juang Jason Lee Jason Liu Jason McDonald Jason S. Priebe Javier Barroso Javier Blazquez Javier G. Sogo Javier Sixto |
︙ | ︙ | |||
805 806 807 808 809 810 811 812 813 814 815 816 817 818 | Jeff Weber Jeffrey Walton Jens Rantil Jens Schleusener Jeremie Rapin Jeremy Friesner Jeremy Huddleston Jeremy Lin Jeremy Pearson Jeremy Tan Jeroen Koekkoek Jeroen Ooms Jerome Muffat-Meridol Jerome Robert | > | 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 | Jeff Weber Jeffrey Walton Jens Rantil Jens Schleusener Jeremie Rapin Jeremy Friesner Jeremy Huddleston Jeremy Lainé Jeremy Lin Jeremy Pearson Jeremy Tan Jeroen Koekkoek Jeroen Ooms Jerome Muffat-Meridol Jerome Robert |
︙ | ︙ | |||
925 926 927 928 929 930 931 932 933 934 935 936 937 938 | Julian Romero Nieto Julian Taylor Julian Z Julien Chaffraix Julien Nabet Julien Royer Jun-ichiro itojun Hagino Jurij Smakov Juro Bystricky Justin Clift Justin Ehlert Justin Fletcher Justin Karneges Justin Maggard | > | 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 | Julian Romero Nieto Julian Taylor Julian Z Julien Chaffraix Julien Nabet Julien Royer Jun-ichiro itojun Hagino Junho Choi Jurij Smakov Juro Bystricky Justin Clift Justin Ehlert Justin Fletcher Justin Karneges Justin Maggard |
︙ | ︙ | |||
992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 | Krister Johansen Kristian Gunstone Kristian Köhntopp Kristiyan Tsaklev Kristoffer Gleditsch Kunal Ekawde Kurt Fankhauser Kyle Edwards Kyle J. McKay Kyle L. Huff Kyle Sallee Kyselgov E.N Lachlan O'Dea Ladar Levison Larry Campbell Larry Fahnoe Larry Lin Larry Stefani Larry Stone Lars Buitinck Lars Gustafsson | > > > | 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 | Krister Johansen Kristian Gunstone Kristian Köhntopp Kristiyan Tsaklev Kristoffer Gleditsch Kunal Ekawde Kurt Fankhauser Kyle Abramowitz Kyle Edwards Kyle J. McKay Kyle L. Huff Kyle Sallee Kyohei Kadota Kyselgov E.N Lachlan O'Dea Ladar Levison Lance Ware Larry Campbell Larry Fahnoe Larry Lin Larry Stefani Larry Stone Lars Buitinck Lars Gustafsson |
︙ | ︙ | |||
1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 | Michael Jahn Michael Jerris Michael Kalinin Michael Kaufmann Michael Kilburn Michael Kujawa Michael König Michael Maltese Michael Mealling Michael Mueller Michael Osipov Michael Schmid Michael Smith Michael Stapelberg Michael Steuer Michael Stillwell Michael Wallner Michal Bonino Michal Marek Michal Trybus Michał Antoniak Michał Fita Michał Górny Michał Janiszewski Michał Kowalczyk Michał Piechowski Michel Promonet | > > | 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 | Michael Jahn Michael Jerris Michael Kalinin Michael Kaufmann Michael Kilburn Michael Kujawa Michael König Michael Lee Michael Maltese Michael Mealling Michael Mueller Michael Osipov Michael Schmid Michael Smith Michael Stapelberg Michael Steuer Michael Stillwell Michael Wallner Michal Bonino Michal Marek Michal Trybus Michal Čaplygin Michał Antoniak Michał Fita Michał Górny Michał Janiszewski Michał Kowalczyk Michał Piechowski Michel Promonet |
︙ | ︙ | |||
1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 | Rodney Simmons Rodric Glaser Rodrigo Silva Roger Leigh Roland Blom Roland Krikava Roland Zimmermann Rolland Dudemaine Romain Coltel Romain Fliedel Romain Geissler Roman Koifman Roman Mamedov Romulo A. Ceccon | > | 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 | Rodney Simmons Rodric Glaser Rodrigo Silva Roger Leigh Roland Blom Roland Krikava Roland Zimmermann Rolf Eike Beer Rolland Dudemaine Romain Coltel Romain Fliedel Romain Geissler Roman Koifman Roman Mamedov Romulo A. Ceccon |
︙ | ︙ | |||
1678 1679 1680 1681 1682 1683 1684 | Stephan Szabo Stephen Brokenshire Stephen Collyer Stephen Kick Stephen More Stephen Toub Sterling Hughes | < | 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 | Stephan Szabo Stephen Brokenshire Stephen Collyer Stephen Kick Stephen More Stephen Toub Sterling Hughes Steve Green Steve H Truong Steve Havelka Steve Holme Steve Lhomme Steve Little Steve Marx |
︙ | ︙ | |||
1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 | Taneli Vähäkangas Tanguy Fautre Tatsuhiro Tsujikawa Teemu Yli-Elsila Temprimus Terri Oda Terry Wu TheAssassin on github Theodore Dubois Thomas Braun Thomas Gamper Thomas Glanzmann Thomas J. Moore Thomas Klausner Thomas L. Shinnick Thomas Lopatic Thomas Petazzoni Thomas Ruecker Thomas Schwinge Thomas Tonino Thomas van Hesteren Thorsten Schöning Tiit Pikma Till Maas Tim Ansell Tim Baker Tim Bartley | > > | 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 | Taneli Vähäkangas Tanguy Fautre Tatsuhiro Tsujikawa Teemu Yli-Elsila Temprimus Terri Oda Terry Wu The Infinnovation team TheAssassin on github Theodore Dubois Thomas Braun Thomas Gamper Thomas Glanzmann Thomas J. Moore Thomas Klausner Thomas L. Shinnick Thomas Lopatic Thomas Petazzoni Thomas Ruecker Thomas Schwinge Thomas Tonino Thomas Vegas Thomas van Hesteren Thorsten Schöning Tiit Pikma Till Maas Tim Ansell Tim Baker Tim Bartley |
︙ | ︙ | |||
1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 | bobmitchell1956 on github bsammon on github buzo-ffm on github cbartl on github cclauss on github clbr on github cmfrolick on github d912e3 on github daboul on github dasimx on github dbrowndan on github destman on github dkjjr89 on github dkwolfe4 on github | > | 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 | bobmitchell1956 on github bsammon on github buzo-ffm on github cbartl on github cclauss on github clbr on github cmfrolick on github codesniffer13 on github d912e3 on github daboul on github dasimx on github dbrowndan on github destman on github dkjjr89 on github dkwolfe4 on github |
︙ | ︙ | |||
1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 | l00p3r on Hackerone lijian996 on github lukaszgn on github madblobfish on github marc-groundctl on github masbug on github mccormickt12 on github mkzero on github moohoorama on github nedres on github neex on github neheb on github nevv on HackerOne/curl nianxuejie on github niner on github nk nopjmp on github olesteban on github omau on github ovidiu-benea on github patelvivekv1993 on github pendrek at hackerone pszemus on github silveja1 on github smuellerDD on github sstruchtrup on github steelman on github steini2000 on github | > > > > | 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 | l00p3r on Hackerone lijian996 on github lukaszgn on github madblobfish on github marc-groundctl on github masbug on github mccormickt12 on github migueljcrum on github mkzero on github moohoorama on github nedres on github neex on github neheb on github nevv on HackerOne/curl niallor on github nianxuejie on github niner on github nk nopjmp on github olesteban on github omau on github osabc on github ovidiu-benea on github patelvivekv1993 on github patnyb on github pendrek at hackerone pszemus on github silveja1 on github smuellerDD on github sstruchtrup on github steelman on github steini2000 on github |
︙ | ︙ |
Changes to jni/curl/docs/TODO.
︙ | ︙ | |||
14 15 16 17 18 19 20 | consider bringing it up for discussions first on the mailing list so that we all agree it is still a good idea for the project! All bugs documented in the KNOWN_BUGS document are subject for fixing! 1. libcurl 1.1 TFO support on Windows | < < < < < < < < < < < < < < < < < < < < < | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | consider bringing it up for discussions first on the mailing list so that we all agree it is still a good idea for the project! All bugs documented in the KNOWN_BUGS document are subject for fixing! 1. libcurl 1.1 TFO support on Windows 1.3 struct lifreq 1.5 get rid of PATH_MAX 1.7 Support HTTP/2 for HTTP(S) proxies 1.8 CURLOPT_RESOLVE for any port number 1.9 Cache negative name resolves 1.10 auto-detect proxy 1.11 minimize dependencies with dynamically loaded modules 1.12 updated DNS server while running 1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION 1.14 Typesafe curl_easy_setopt() 1.15 Monitor connections in the connection pool 1.16 Try to URL encode given URL 1.17 Add support for IRIs 1.18 try next proxy if one doesn't work 1.20 SRV and URI DNS records 1.22 CURLINFO_PAUSE_STATE 1.23 Offer API to flush the connection pool 1.24 TCP Fast Open for windows 1.25 Expose tried IP addresses that failed 1.27 hardcode the "localhost" addresses 1.28 FD_CLOEXEC 1.29 Upgrade to websockets 1.30 config file parsing 2. libcurl - multi interface 2.1 More non-blocking 2.2 Better support for same name resolves 2.3 Non-blocking curl_multi_remove_handle() 2.4 Split connect and authentication process 2.5 Edge-triggered sockets should work 2.6 multi upkeep 3. Documentation 3.2 Provide cmake config-file 4. FTP 4.1 HOST 4.2 Alter passive/active on failure and retry 4.3 Earlier bad letter detection 4.5 ASCII support 4.6 GSSAPI via Windows SSPI 4.7 STAT for LIST without data connection 4.8 Option to ignore private IP addresses in PASV response 5. HTTP 5.1 Better persistency for HTTP 1.0 5.3 Rearrange request header order 5.4 Allow SAN names in HTTP/2 server push 5.5 auth= in URLs 6. TELNET 6.1 ditch stdin 6.2 ditch telnet-specific select 6.3 feature negotiation debug data 7. SMTP 7.2 Enhanced capability support 7.3 Add CURLOPT_MAIL_CLIENT option 8. POP3 8.2 Enhanced capability support 9. IMAP 9.1 Enhanced capability support 10. LDAP 10.1 SASL based authentication mechanisms 11. SMB 11.1 File listing support 11.2 Honor file timestamps 11.3 Use NTLMv2 11.4 Create remote directories 12. New protocols 13. SSL 13.2 Provide mutex locking API 13.3 Support in-memory certs/ca certs/keys 13.4 Cache/share OpenSSL contexts 13.5 Export session ids 13.6 Provide callback for cert verification 13.7 improve configure --with-ssl 13.8 Support DANE 13.10 Support Authority Information Access certificate extension (AIA) 13.11 Support intermediate & root pinning for PINNEDPUBLICKEY 13.12 Support HSTS 13.14 Support the clienthello extension 14. GnuTLS 14.2 check connection 15. WinSSL/SChannel 15.1 Add support for client certificate authentication 15.3 Add support for the --ciphers option 15.4 Add option to disable client certificate auto-send 16. SASL 16.1 Other authentication mechanisms 16.2 Add QOP support to GSSAPI authentication 16.3 Support binary messages (i.e.: non-base64) 17. SSH protocols 17.1 Multiplexing 17.3 Support better than MD5 hostkey hash 17.4 Support CURLOPT_PREQUOTE 18. Command line tool 18.1 sync 18.2 glob posts 18.3 prevent file overwriting 18.5 UTF-8 filenames in Content-Disposition 18.7 at least N milliseconds between requests 18.9 Choose the name of file in braces for complex URLs 18.10 improve how curl works in a windows console window 18.11 Windows: set attribute 'archive' for completed downloads 18.12 keep running, read instructions from pipe/socket 18.15 --retry should resume 18.16 send only part of --data 18.17 consider file name from the redirected URL with -O ? 18.18 retry on network is unreachable 18.19 expand ~/ in config files 18.20 host name sections in config files |
︙ | ︙ | |||
198 199 200 201 202 203 204 | 1.1 TFO support on Windows TCP Fast Open is supported on several platforms but not on Windows. Work on this was once started but never finished. See https://github.com/curl/curl/pull/3378 | < < < < < < < < < < < < < < < < < | | | < < < < < < < < < < < < < < < < < < < < < | 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | 1.1 TFO support on Windows TCP Fast Open is supported on several platforms but not on Windows. Work on this was once started but never finished. See https://github.com/curl/curl/pull/3378 1.3 struct lifreq Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. To support IPv6 interface addresses for network interfaces properly. 1.5 get rid of PATH_MAX Having code use and rely on PATH_MAX is not nice: https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html Currently the libssh2 SSH based code uses it, but to remove PATH_MAX from there we need libssh2 to properly tell us when we pass in a too small buffer and its current API (as of libssh2 1.2.7) doesn't. 1.7 Support HTTP/2 for HTTP(S) proxies Support for doing HTTP/2 to HTTP and HTTPS proxies is still missing. See https://github.com/curl/curl/issues/3570 |
︙ | ︙ | |||
373 374 375 376 377 378 379 | https://github.com/curl/curl/issues/896 1.20 SRV and URI DNS records Offer support for resolving SRV and URI DNS records for libcurl to know which server to connect to for various protocols (including HTTP!). | < < < < < < | 314 315 316 317 318 319 320 321 322 323 324 325 326 327 | https://github.com/curl/curl/issues/896 1.20 SRV and URI DNS records Offer support for resolving SRV and URI DNS records for libcurl to know which server to connect to for various protocols (including HTTP!). 1.22 CURLINFO_PAUSE_STATE Return information about the transfer's current pause state, in both directions. https://github.com/curl/curl/issues/2588 1.23 Offer API to flush the connection pool |
︙ | ︙ | |||
403 404 405 406 407 408 409 | 1.25 Expose tried IP addresses that failed When libcurl fails to connect to a host, it should be able to offer the application the list of IP addresses that were used in the attempt. https://github.com/curl/curl/issues/2126 | < < < < < < < < < < < < < < < | 338 339 340 341 342 343 344 345 346 347 348 349 350 351 | 1.25 Expose tried IP addresses that failed When libcurl fails to connect to a host, it should be able to offer the application the list of IP addresses that were used in the attempt. https://github.com/curl/curl/issues/2126 1.27 hardcode the "localhost" addresses There's this new spec getting adopted that says "localhost" should always and unconditionally be a local address and not get resolved by a DNS server. A fine way for curl to fix this would be to simply hard-code the response to 127.0.0.1 and/or ::1 (depending on what IP versions that are requested). This is what the browsers probably will do with this hostname. |
︙ | ︙ | |||
535 536 537 538 539 540 541 | vice versa). https://curl.haxx.se/bug/feature.cgi?id=1754793 4.3 Earlier bad letter detection Make the detection of (bad) %0d and %0a codes in FTP URL parts earlier in the process to avoid doing a resolve and connect in vain. | < < < < < < | 455 456 457 458 459 460 461 462 463 464 465 466 467 468 | vice versa). https://curl.haxx.se/bug/feature.cgi?id=1754793 4.3 Earlier bad letter detection Make the detection of (bad) %0d and %0a codes in FTP URL parts earlier in the process to avoid doing a resolve and connect in vain. 4.5 ASCII support FTP ASCII transfers do not follow RFC959. They don't convert the data accordingly. 4.6 GSSAPI via Windows SSPI |
︙ | ︙ | |||
573 574 575 576 577 578 579 | 5. HTTP 5.1 Better persistency for HTTP 1.0 "Better" support for persistent connections over HTTP 1.0 https://curl.haxx.se/bug/feature.cgi?id=1089001 | < < < < < < | 487 488 489 490 491 492 493 494 495 496 497 498 499 500 | 5. HTTP 5.1 Better persistency for HTTP 1.0 "Better" support for persistent connections over HTTP 1.0 https://curl.haxx.se/bug/feature.cgi?id=1089001 5.3 Rearrange request header order Server implementors often make an effort to detect browser and to reject clients it can detect to not match. One of the last details we cannot yet control in libcurl's HTTP requests, which also can be exploited to detect that libcurl is in fact used even when it tries to impersonate a browser, is the order of the request headers. I propose that we introduce a new option in |
︙ | ︙ | |||
607 608 609 610 611 612 613 | 5.5 auth= in URLs Add the ability to specify the preferred authentication mechanism to use by using ;auth=<mech> in the login part of the URL. For example: | | | < < < < < < < < < < < < < < < < < | | | | < < < < < < < < | 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 | 5.5 auth= in URLs Add the ability to specify the preferred authentication mechanism to use by using ;auth=<mech> in the login part of the URL. For example: http://test:pass;auth=NTLM@example.com would be equivalent to specifying --user test:pass;auth=NTLM or --user test:pass --ntlm from the command line. Additionally this should be implemented for proxy base URLs as well. 6. TELNET 6.1 ditch stdin Reading input (to send to the remote server) on stdin is a crappy solution for library purposes. We need to invent a good way for the application to be able to provide the data to send. 6.2 ditch telnet-specific select Move the telnet support's network select() loop go away and merge the code into the main transfer loop. Until this is done, the multi interface won't work for telnet. 6.3 feature negotiation debug data Add telnet feature negotiation data to the debug callback as header data. 7. SMTP 7.2 Enhanced capability support Add the ability, for an application that uses libcurl, to obtain the list of capabilities returned from the EHLO command. 7.3 Add CURLOPT_MAIL_CLIENT option Rather than use the URL to specify the mail client string to present in the HELO and EHLO commands, libcurl should support a new CURLOPT specifically for specifying this data as the URL is non-standard and to be honest a bit of a hack ;-) Please see the following thread for more information: https://curl.haxx.se/mail/lib-2012-05/0178.html 8. POP3 8.2 Enhanced capability support Add the ability, for an application that uses libcurl, to obtain the list of capabilities returned from the CAPA command. 9. IMAP |
︙ | ︙ | |||
721 722 723 724 725 726 727 | 11.4 Create remote directories Support for creating remote directories when uploading a file to a directory that doesn't exist on the server, just like --ftp-create-dirs. 12. New protocols | < < < < < < < < < < | 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 | 11.4 Create remote directories Support for creating remote directories when uploading a file to a directory that doesn't exist on the server, just like --ftp-create-dirs. 12. New protocols 13. SSL 13.2 Provide mutex locking API Provide a libcurl API for setting mutex callbacks in the underlying SSL library, so that the same application code can use mutex-locking independently of OpenSSL or GnutTLS being used. 13.3 Support in-memory certs/ca certs/keys |
︙ | ︙ | |||
797 798 799 800 801 802 803 | approach. See Daniel's comments: https://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the correct library to base this development on. Björn Stenberg wrote a separate initial take on DANE that was never completed. | < < < < < < < < < < < | 670 671 672 673 674 675 676 677 678 679 680 681 682 683 | approach. See Daniel's comments: https://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the correct library to base this development on. Björn Stenberg wrote a separate initial take on DANE that was never completed. 13.10 Support Authority Information Access certificate extension (AIA) AIA can provide various things like CRLs but more importantly information about intermediate CA certificates that can allow validation path to be fulfilled when the HTTPS server doesn't itself provide them. Since AIA is about downloading certs on demand to complete a TLS handshake, |
︙ | ︙ | |||
840 841 842 843 844 845 846 | features indicated by a HTTP header send by the webserver. It is widely used in browsers and it's purpose is to prevent insecure HTTP connections after a previous HTTPS connection. It protects against SSLStripping attacks. Doc: https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security RFC 6797: https://tools.ietf.org/html/rfc6797 | < < < < < < < < < < < < < < < < < < < | 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 | features indicated by a HTTP header send by the webserver. It is widely used in browsers and it's purpose is to prevent insecure HTTP connections after a previous HTTPS connection. It protects against SSLStripping attacks. Doc: https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security RFC 6797: https://tools.ietf.org/html/rfc6797 13.14 Support the clienthello extension Certain stupid networks and middle boxes have a problem with SSL handshake pakets that are within a certain size range because how that sets some bits that previously (in older TLS version) were not set. The clienthello extension adds padding to avoid that size range. https://tools.ietf.org/html/rfc7685 https://github.com/curl/curl/issues/2299 14. GnuTLS 14.2 check connection Add a way to check if the connection seems to be alive, to correspond to the SSL_peak() way we use with OpenSSL. 15. WinSSL/SChannel |
︙ | ︙ | |||
945 946 947 948 949 950 951 | much in the same spirit as HTTP/2 does. libcurl however does not take advantage of that ability but will instead always create a new connection for new transfers even if an existing connection already exists to the host. To fix this, libcurl would have to detect an existing connection and "attach" the new transfer to the existing one. | < < < < < | 788 789 790 791 792 793 794 795 796 797 798 799 800 801 | much in the same spirit as HTTP/2 does. libcurl however does not take advantage of that ability but will instead always create a new connection for new transfers even if an existing connection already exists to the host. To fix this, libcurl would have to detect an existing connection and "attach" the new transfer to the existing one. 17.3 Support better than MD5 hostkey hash libcurl offers the CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 option for verifying the server's key. MD5 is generally being deprecated so we should implement support for stronger hashing algorithms. libssh2 itself is what provides this underlying functionality and it supports at least SHA-1 as an alternative. SHA-1 is also being deprecated these days so we should consider working with |
︙ | ︙ | |||
988 989 990 991 992 993 994 | Add an option that prevents curl from overwriting existing local files. When used, and there already is an existing file with the target file name (either -O or -o), a number should be appended (and increased if already existing). So that index.html becomes first index.html.1 and then index.html.2 etc. | < < < < < < < < < < < < < < < < | 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 | Add an option that prevents curl from overwriting existing local files. When used, and there already is an existing file with the target file name (either -O or -o), a number should be appended (and increased if already existing). So that index.html becomes first index.html.1 and then index.html.2 etc. 18.5 UTF-8 filenames in Content-Disposition RFC 6266 documents how UTF-8 names can be passed to a client in the Content-Disposition header, and curl does not support this. https://github.com/curl/curl/issues/1888 18.7 at least N milliseconds between requests Allow curl command lines issue a lot of request against services that limit users to no more than N requests/second or similar. Could be implemented with an option asking that at least a certain time has elapsed since the previous request before the next one will be performed. Example: |
︙ | ︙ | |||
1059 1060 1061 1062 1063 1064 1065 | Provide an option that makes curl not exit after the last URL (or even work without a given URL), and then make it read instructions passed on a pipe or over a socket to make further instructions so that a second subsequent curl invoke can talk to the still running instance and ask for transfers to get done, and thus maintain its connection pool, DNS cache and more. | < < < < < < < < < < < < < < < < < < < < < < < < | 881 882 883 884 885 886 887 888 889 890 891 892 893 894 | Provide an option that makes curl not exit after the last URL (or even work without a given URL), and then make it read instructions passed on a pipe or over a socket to make further instructions so that a second subsequent curl invoke can talk to the still running instance and ask for transfers to get done, and thus maintain its connection pool, DNS cache and more. 18.15 --retry should resume When --retry is used and curl actually retries transfer, it should use the already transferred data and do a resumed transfer for the rest (when possible) so that it doesn't have to transfer the same data again that was already transferred before the retry. |
︙ | ︙ | |||
1198 1199 1200 1201 1202 1203 1204 | 20.4 more platforms supported Make the test suite work on more platforms. OpenBSD and Mac OS. Remove fork()s and it should become even more portable. 20.5 Add support for concurrent connections | | | | | | | | | | | 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 | 20.4 more platforms supported Make the test suite work on more platforms. OpenBSD and Mac OS. Remove fork()s and it should become even more portable. 20.5 Add support for concurrent connections Tests 836, 882 and 938 were designed to verify that separate connections aren't used when using different login credentials in protocols that shouldn't re-use a connection under such circumstances. Unfortunately, ftpserver.pl doesn't appear to support multiple concurrent connections. The read while() loop seems to loop until it receives a disconnect from the client, where it then enters the waiting for connections loop. When the client opens a second connection to the server, the first connection hasn't been dropped (unless it has been forced - which we shouldn't do in these tests) and thus the wait for connections loop is never entered to receive the second connection. 20.6 Use the RFC6265 test suite A test suite made for HTTP cookies (RFC 6265) by Adam Barth is available at https://github.com/abarth/http-state/tree/master/tests It'd be really awesome if someone would write a script/setup that would run |
︙ | ︙ |
Changes to jni/curl/docs/cmdline-opts/Makefile.in.
︙ | ︙ | |||
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
424 425 426 427 428 429 430 431 432 433 434 435 436 437 | head.d header.d \ help.d \ hostpubmd5.d \ http0.9.d \ http1.0.d \ http1.1.d http2.d \ http2-prior-knowledge.d \ ignore-content-length.d \ include.d \ insecure.d \ interface.d \ ipv4.d ipv6.d \ junk-session-cookies.d \ keepalive-time.d \ | > | 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 | head.d header.d \ help.d \ hostpubmd5.d \ http0.9.d \ http1.0.d \ http1.1.d http2.d \ http2-prior-knowledge.d \ http3.d \ ignore-content-length.d \ include.d \ insecure.d \ interface.d \ ipv4.d ipv6.d \ junk-session-cookies.d \ keepalive-time.d \ |
︙ | ︙ | |||
459 460 461 462 463 464 465 | no-buffer.d \ no-keepalive.d \ no-npn.d \ no-sessionid.d \ noproxy.d \ ntlm.d ntlm-wb.d \ oauth2-bearer.d \ | | > > > | 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 | no-buffer.d \ no-keepalive.d \ no-npn.d \ no-sessionid.d \ noproxy.d \ ntlm.d ntlm-wb.d \ oauth2-bearer.d \ output.d \ pass.d \ parallel.d \ parallel-max.d \ path-as-is.d \ pinnedpubkey.d \ post301.d \ post302.d \ post303.d \ preproxy.d \ progress-bar.d \ |
︙ | ︙ | |||
513 514 515 516 517 518 519 520 521 522 523 524 525 526 | request-target.d \ request.d \ resolve.d \ retry-connrefused.d \ retry-delay.d \ retry-max-time.d \ retry.d \ sasl-ir.d \ service-name.d \ show-error.d \ silent.d \ socks4.d socks5.d \ socks4a.d \ socks5-basic.d \ | > | 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 | request-target.d \ request.d \ resolve.d \ retry-connrefused.d \ retry-delay.d \ retry-max-time.d \ retry.d \ sasl-authzid.d \ sasl-ir.d \ service-name.d \ show-error.d \ silent.d \ socks4.d socks5.d \ socks4a.d \ socks5-basic.d \ |
︙ | ︙ |
Changes to jni/curl/docs/cmdline-opts/Makefile.inc.
︙ | ︙ | |||
61 62 63 64 65 66 67 68 69 70 71 72 73 74 | head.d header.d \ help.d \ hostpubmd5.d \ http0.9.d \ http1.0.d \ http1.1.d http2.d \ http2-prior-knowledge.d \ ignore-content-length.d \ include.d \ insecure.d \ interface.d \ ipv4.d ipv6.d \ junk-session-cookies.d \ keepalive-time.d \ | > | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | head.d header.d \ help.d \ hostpubmd5.d \ http0.9.d \ http1.0.d \ http1.1.d http2.d \ http2-prior-knowledge.d \ http3.d \ ignore-content-length.d \ include.d \ insecure.d \ interface.d \ ipv4.d ipv6.d \ junk-session-cookies.d \ keepalive-time.d \ |
︙ | ︙ | |||
96 97 98 99 100 101 102 | no-buffer.d \ no-keepalive.d \ no-npn.d \ no-sessionid.d \ noproxy.d \ ntlm.d ntlm-wb.d \ oauth2-bearer.d \ | | > > > | 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | no-buffer.d \ no-keepalive.d \ no-npn.d \ no-sessionid.d \ noproxy.d \ ntlm.d ntlm-wb.d \ oauth2-bearer.d \ output.d \ pass.d \ parallel.d \ parallel-max.d \ path-as-is.d \ pinnedpubkey.d \ post301.d \ post302.d \ post303.d \ preproxy.d \ progress-bar.d \ |
︙ | ︙ | |||
150 151 152 153 154 155 156 157 158 159 160 161 162 163 | request-target.d \ request.d \ resolve.d \ retry-connrefused.d \ retry-delay.d \ retry-max-time.d \ retry.d \ sasl-ir.d \ service-name.d \ show-error.d \ silent.d \ socks4.d socks5.d \ socks4a.d \ socks5-basic.d \ | > | 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | request-target.d \ request.d \ resolve.d \ retry-connrefused.d \ retry-delay.d \ retry-max-time.d \ retry.d \ sasl-authzid.d \ sasl-ir.d \ service-name.d \ show-error.d \ silent.d \ socks4.d socks5.d \ socks4a.d \ socks5-basic.d \ |
︙ | ︙ |
Changes to jni/curl/docs/cmdline-opts/config.d.
︙ | ︙ | |||
36 37 38 39 40 41 42 | 1) curl tries to find the "home dir": It first checks for the CURL_HOME and then the HOME environment variables. Failing that, it uses getpwuid() on Unix-like systems (which returns the home dir given the current user in your system). On Windows, it then checks for the APPDATA variable, or as a last resort the '%USERPROFILE%\\Application Data'. | | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 1) curl tries to find the "home dir": It first checks for the CURL_HOME and then the HOME environment variables. Failing that, it uses getpwuid() on Unix-like systems (which returns the home dir given the current user in your system). On Windows, it then checks for the APPDATA variable, or as a last resort the '%USERPROFILE%\\Application Data'. 2) On windows, if there is no .curlrc file in the home dir, it checks for one in the same dir the curl executable is placed. On Unix-like systems, it will simply try to load .curlrc from the determined home dir. .nf # --- Example file --- # this is a comment url = "example.com" |
︙ | ︙ |
Changes to jni/curl/docs/cmdline-opts/http0.9.d.
1 2 3 4 5 6 7 8 9 10 11 12 | Long: http0.9 Tags: Versions Protocols: HTTP Added: Help: Allow HTTP 0.9 responses --- Tells curl to be fine with HTTP version 0.9 response. HTTP/0.9 is a completely headerless response and therefore you can also connect with this to non-HTTP servers and still get a response since curl will simply transparently downgrade - if allowed. | < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | Long: http0.9 Tags: Versions Protocols: HTTP Added: Help: Allow HTTP 0.9 responses --- Tells curl to be fine with HTTP version 0.9 response. HTTP/0.9 is a completely headerless response and therefore you can also connect with this to non-HTTP servers and still get a response since curl will simply transparently downgrade - if allowed. Since curl 7.66.0, HTTP/0.9 is disabled by default. |
Changes to jni/curl/docs/cmdline-opts/http2.d.
1 2 3 4 5 6 7 8 9 10 | Long: http2 Tags: Versions Protocols: HTTP Added: 7.33.0 Mutexed: http1.1 http1.0 http2-prior-knowledge Requires: HTTP/2 See-also: no-alpn Help: Use HTTP 2 --- Tells curl to use HTTP version 2. | > | 1 2 3 4 5 6 7 8 9 10 11 | Long: http2 Tags: Versions Protocols: HTTP Added: 7.33.0 Mutexed: http1.1 http1.0 http2-prior-knowledge Requires: HTTP/2 See-also: no-alpn Help: Use HTTP 2 See-also: http1.1 http3 --- Tells curl to use HTTP version 2. |
Added jni/curl/docs/cmdline-opts/http3.d.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Long: http3 Tags: Versions Protocols: HTTP Added: 7.66.0 Mutexed: http1.1 http1.0 http2 http2-prior-knowledge Requires: HTTP/3 Help: Use HTTP v3 See-also: http1.1 http2 --- WARNING: this option is experiemental. Do not use in production. Tells curl to use HTTP version 3 directly to the host and port number used in the URL. A normal HTTP/3 transaction will be done to a host and then get redirected via Alt-SVc, but this option allows a user to circumvent that when you know that the target speaks HTTP/3 on the given host and port. This option will make curl fail if a QUIC connection cannot be established, it cannot fall back to a lower HTTP version on its own. |
Added jni/curl/docs/cmdline-opts/parallel-max.d.
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 | Long: parallel-max Help: Maximum concurrency for parallel transfers Added: 7.66.0 See-also: parallel --- When asked to do parallel transfers, using --parallel, this option controls the maximum amount of transfers to do simultaneously. The default is 50. |
Added jni/curl/docs/cmdline-opts/parallel.d.
> > > > > > > | 1 2 3 4 5 6 7 | Short: Z Long: parallel Help: Perform transfers in parallel Added: 7.66.0 --- Makes curl perform its transfers in parallel as compared to the regular serial manner. |
Changes to jni/curl/docs/cmdline-opts/retry.d.
︙ | ︙ | |||
9 10 11 12 13 14 15 16 17 | a timeout, an FTP 4xx response code or an HTTP 408 or 5xx response code. When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries. By using --retry-delay you disable this exponential backoff algorithm. See also --retry-max-time to limit the total time allowed for retries. If this option is used several times, the last one will be used. | > > > | 9 10 11 12 13 14 15 16 17 18 19 20 | a timeout, an FTP 4xx response code or an HTTP 408 or 5xx response code. When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries. By using --retry-delay you disable this exponential backoff algorithm. See also --retry-max-time to limit the total time allowed for retries. Since curl 7.66.0, curl will comply with the Retry-After: response header if one was present to know when to issue the next retry. If this option is used several times, the last one will be used. |
Added jni/curl/docs/cmdline-opts/sasl-authzid.d.
> > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 | Long: sasl-authzid Help: Use this identity to act as during SASL PLAIN authentication Added: 7.66.0 --- Use this authorisation identity (authzid), during SASL PLAIN authentication, in addition to the authentication identity (authcid) as specified by --user. If the option isn't specified, the server will derive the authzid from the authcid, but if specified, and depending on the server implementation, it may be used to access another user's inbox, that the user has been granted access to, or a shared mailbox for example. |
Changes to jni/curl/docs/curl-config.1.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl-config 1 "November 30, 2017" "Curl 7.66.0" "curl-config manual" .SH NAME curl-config \- Get information about a libcurl installation .SH SYNOPSIS .B curl-config [options] .SH DESCRIPTION .B curl-config |
︙ | ︙ |
Changes to jni/curl/docs/curl.1.
︙ | ︙ | |||
18 19 20 21 22 23 24 | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .\" DO NOT EDIT. Generated by the curl project gen.pl man page generator. .\" | | | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .\" DO NOT EDIT. Generated by the curl project gen.pl man page generator. .\" .TH curl 1 "November 16, 2016" "Curl 7.66.0" "Curl Manual" .SH NAME curl \- transfer a URL .SH SYNOPSIS .B curl [options / URLs] .SH DESCRIPTION .B curl |
︙ | ︙ | |||
342 343 344 345 346 347 348 | 1) curl tries to find the "home dir": It first checks for the CURL_HOME and then the HOME environment variables. Failing that, it uses getpwuid() on Unix-like systems (which returns the home dir given the current user in your system). On Windows, it then checks for the APPDATA variable, or as a last resort the '%USERPROFILE%\\Application Data'. | | | 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 | 1) curl tries to find the "home dir": It first checks for the CURL_HOME and then the HOME environment variables. Failing that, it uses getpwuid() on Unix-like systems (which returns the home dir given the current user in your system). On Windows, it then checks for the APPDATA variable, or as a last resort the '%USERPROFILE%\\Application Data'. 2) On windows, if there is no .curlrc file in the home dir, it checks for one in the same dir the curl executable is placed. On Unix-like systems, it will simply try to load .curlrc from the determined home dir. .nf # --- Example file --- # this is a comment url = "example.com" |
︙ | ︙ | |||
1058 1059 1060 1061 1062 1063 1064 | .IP "--http0.9" (HTTP) Tells curl to be fine with HTTP version 0.9 response. HTTP/0.9 is a completely headerless response and therefore you can also connect with this to non-HTTP servers and still get a response since curl will simply transparently downgrade - if allowed. | < | | > > > > > > > > > > > > > | 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 | .IP "--http0.9" (HTTP) Tells curl to be fine with HTTP version 0.9 response. HTTP/0.9 is a completely headerless response and therefore you can also connect with this to non-HTTP servers and still get a response since curl will simply transparently downgrade - if allowed. Since curl 7.66.0, HTTP/0.9 is disabled by default. .IP "-0, --http1.0" (HTTP) Tells curl to use HTTP version 1.0 instead of using its internally preferred HTTP version. This option overrides \fI--http1.1\fP and \fI--http2\fP. .IP "--http1.1" (HTTP) Tells curl to use HTTP version 1.1. This option overrides \fI-0, --http1.0\fP and \fI--http2\fP. Added in 7.33.0. .IP "--http2-prior-knowledge" (HTTP) Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2 straight away. HTTPS requests will still do HTTP/2 the standard way with negotiated protocol version in the TLS handshake. \fI--http2-prior-knowledge\fP requires that the underlying libcurl was built to support HTTP/2. This option overrides \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2\fP. Added in 7.49.0. .IP "--http2" (HTTP) Tells curl to use HTTP version 2. See also \fI--http1.1\fP and \fI--http3\fP. \fI--http2\fP requires that the underlying libcurl was built to support HTTP/2. This option overrides \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2-prior-knowledge\fP. Added in 7.33.0. .IP "--http3" (HTTP) WARNING: this option is experiemental. Do not use in production. Tells curl to use HTTP version 3 directly to the host and port number used in the URL. A normal HTTP/3 transaction will be done to a host and then get redirected via Alt-SVc, but this option allows a user to circumvent that when you know that the target speaks HTTP/3 on the given host and port. This option will make curl fail if a QUIC connection cannot be established, it cannot fall back to a lower HTTP version on its own. See also \fI--http1.1\fP and \fI--http2\fP. \fI--http3\fP requires that the underlying libcurl was built to support HTTP/3. This option overrides \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2\fP and \fI--http2-prior-knowledge\fP. Added in 7.66.0. .IP "--ignore-content-length" (FTP HTTP) For HTTP, Ignore the Content-Length header. This is particularly useful for servers running Apache 1.x, which will report incorrect Content-Length for files larger than 2 gigabytes. For FTP (since 7.46.0), skip the RETR command to figure out the size before downloading a file. |
︙ | ︙ | |||
1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 | curl example.com example.net -o aa -o bb See also the \fI--create-dirs\fP option to create the local directories dynamically. Specifying the output as '-' (a single dash) will force the output to be done to stdout. See also \fI-O, --remote-name\fP and \fI--remote-name-all\fP and \fI-J, --remote-header-name\fP. .IP "--pass <phrase>" (SSH TLS) Passphrase for the private key If this option is used several times, the last one will be used. .IP "--path-as-is" Tell curl to not handle sequences of /../ or /./ in the given URL path. Normally curl will squash or merge them according to standards but with | > > > > > > > > > > > > | 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 | curl example.com example.net -o aa -o bb See also the \fI--create-dirs\fP option to create the local directories dynamically. Specifying the output as '-' (a single dash) will force the output to be done to stdout. See also \fI-O, --remote-name\fP and \fI--remote-name-all\fP and \fI-J, --remote-header-name\fP. .IP "--parallel-max" When asked to do parallel transfers, using \fI-Z, --parallel\fP, this option controls the maximum amount of transfers to do simultaneously. The default is 50. See also \fI-Z, --parallel\fP. Added in 7.66.0. .IP "-Z, --parallel" Makes curl perform its transfers in parallel as compared to the regular serial manner. Added in 7.66.0. .IP "--pass <phrase>" (SSH TLS) Passphrase for the private key If this option is used several times, the last one will be used. .IP "--path-as-is" Tell curl to not handle sequences of /../ or /./ in the given URL path. Normally curl will squash or merge them according to standards but with |
︙ | ︙ | |||
2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 | a timeout, an FTP 4xx response code or an HTTP 408 or 5xx response code. When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries. By using \fI--retry-delay\fP you disable this exponential backoff algorithm. See also \fI--retry-max-time\fP to limit the total time allowed for retries. If this option is used several times, the last one will be used. Added in 7.12.3. .IP "--sasl-ir" Enable initial response in SASL authentication. Added in 7.31.0. .IP "--service-name <name>" This option allows you to change the service name for SPNEGO. | > > > > > > > > > > > > > | 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 | a timeout, an FTP 4xx response code or an HTTP 408 or 5xx response code. When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries. By using \fI--retry-delay\fP you disable this exponential backoff algorithm. See also \fI--retry-max-time\fP to limit the total time allowed for retries. Since curl 7.66.0, curl will comply with the Retry-After: response header if one was present to know when to issue the next retry. If this option is used several times, the last one will be used. Added in 7.12.3. .IP "--sasl-authzid" Use this authorisation identity (authzid), during SASL PLAIN authentication, in addition to the authentication identity (authcid) as specified by \fI-u, --user\fP. If the option isn't specified, the server will derive the authzid from the authcid, but if specified, and depending on the server implementation, it may be used to access another user's inbox, that the user has been granted access to, or a shared mailbox for example. Added in 7.66.0. .IP "--sasl-ir" Enable initial response in SASL authentication. Added in 7.31.0. .IP "--service-name <name>" This option allows you to change the service name for SPNEGO. |
︙ | ︙ |
Changes to jni/curl/docs/examples/Makefile.in.
︙ | ︙ | |||
39 40 41 42 43 44 45 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
159 160 161 162 163 164 165 | sftpget$(EXEEXT) ftpsget$(EXEEXT) postinmemory$(EXEEXT) \ http2-download$(EXEEXT) http2-upload$(EXEEXT) \ http2-serverpush$(EXEEXT) getredirect$(EXEEXT) \ ftpuploadfrommem$(EXEEXT) ftpuploadresume$(EXEEXT) \ sslbackend$(EXEEXT) postit2-formadd$(EXEEXT) \ multi-formadd$(EXEEXT) shared-connection-cache$(EXEEXT) \ sftpuploadresume$(EXEEXT) http2-pushinmemory$(EXEEXT) \ | | > > | 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | sftpget$(EXEEXT) ftpsget$(EXEEXT) postinmemory$(EXEEXT) \ http2-download$(EXEEXT) http2-upload$(EXEEXT) \ http2-serverpush$(EXEEXT) getredirect$(EXEEXT) \ ftpuploadfrommem$(EXEEXT) ftpuploadresume$(EXEEXT) \ sslbackend$(EXEEXT) postit2-formadd$(EXEEXT) \ multi-formadd$(EXEEXT) shared-connection-cache$(EXEEXT) \ sftpuploadresume$(EXEEXT) http2-pushinmemory$(EXEEXT) \ parseurl$(EXEEXT) urlapi$(EXEEXT) imap-authzid$(EXEEXT) \ pop3-authzid$(EXEEXT) smtp-authzid$(EXEEXT) http3$(EXEEXT) \ altsvc$(EXEEXT) http3-present$(EXEEXT) subdir = docs/examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compile_check_sizeof.m4 \ $(top_srcdir)/m4/curl-compilers.m4 \ $(top_srcdir)/m4/curl-confopts.m4 \ $(top_srcdir)/m4/curl-functions.m4 \ $(top_srcdir)/m4/curl-openssl.m4 \ |
︙ | ︙ | |||
198 199 200 201 202 203 204 205 206 207 208 209 210 211 | @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@10_at_a_time_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = anyauthput_SOURCES = anyauthput.c anyauthput_OBJECTS = anyauthput.$(OBJEXT) anyauthput_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@anyauthput_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@anyauthput_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la | > > > > > > > | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@10_at_a_time_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = altsvc_SOURCES = altsvc.c altsvc_OBJECTS = altsvc.$(OBJEXT) altsvc_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@altsvc_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@altsvc_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la anyauthput_SOURCES = anyauthput.c anyauthput_OBJECTS = anyauthput.$(OBJEXT) anyauthput_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@anyauthput_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@anyauthput_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la |
︙ | ︙ | |||
364 365 366 367 368 369 370 371 372 373 374 375 376 377 | http2_upload_SOURCES = http2-upload.c http2_upload_OBJECTS = http2-upload.$(OBJEXT) http2_upload_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@http2_upload_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@http2_upload_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la httpcustomheader_SOURCES = httpcustomheader.c httpcustomheader_OBJECTS = httpcustomheader.$(OBJEXT) httpcustomheader_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@httpcustomheader_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@httpcustomheader_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la | > > > > > > > > > > > > > | 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 | http2_upload_SOURCES = http2-upload.c http2_upload_OBJECTS = http2-upload.$(OBJEXT) http2_upload_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@http2_upload_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@http2_upload_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la http3_SOURCES = http3.c http3_OBJECTS = http3.$(OBJEXT) http3_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@http3_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@http3_DEPENDENCIES = $(LIBDIR)/libcurl.la http3_present_SOURCES = http3-present.c http3_present_OBJECTS = http3-present.$(OBJEXT) http3_present_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@http3_present_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@http3_present_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la httpcustomheader_SOURCES = httpcustomheader.c httpcustomheader_OBJECTS = httpcustomheader.$(OBJEXT) httpcustomheader_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@httpcustomheader_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@httpcustomheader_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la |
︙ | ︙ | |||
391 392 393 394 395 396 397 398 399 400 401 402 403 404 | imap_append_SOURCES = imap-append.c imap_append_OBJECTS = imap-append.$(OBJEXT) imap_append_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@imap_append_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@imap_append_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la imap_copy_SOURCES = imap-copy.c imap_copy_OBJECTS = imap-copy.$(OBJEXT) imap_copy_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@imap_copy_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@imap_copy_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la | > > > > > > > | 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 | imap_append_SOURCES = imap-append.c imap_append_OBJECTS = imap-append.$(OBJEXT) imap_append_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@imap_append_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@imap_append_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la imap_authzid_SOURCES = imap-authzid.c imap_authzid_OBJECTS = imap-authzid.$(OBJEXT) imap_authzid_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@imap_authzid_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@imap_authzid_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la imap_copy_SOURCES = imap-copy.c imap_copy_OBJECTS = imap-copy.$(OBJEXT) imap_copy_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@imap_copy_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@imap_copy_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la |
︙ | ︙ | |||
538 539 540 541 542 543 544 545 546 547 548 549 550 551 | persistent_SOURCES = persistent.c persistent_OBJECTS = persistent.$(OBJEXT) persistent_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@persistent_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@persistent_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la pop3_dele_SOURCES = pop3-dele.c pop3_dele_OBJECTS = pop3-dele.$(OBJEXT) pop3_dele_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@pop3_dele_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@pop3_dele_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la | > > > > > > > | 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 | persistent_SOURCES = persistent.c persistent_OBJECTS = persistent.$(OBJEXT) persistent_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@persistent_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@persistent_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la pop3_authzid_SOURCES = pop3-authzid.c pop3_authzid_OBJECTS = pop3-authzid.$(OBJEXT) pop3_authzid_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@pop3_authzid_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@pop3_authzid_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la pop3_dele_SOURCES = pop3-dele.c pop3_dele_OBJECTS = pop3-dele.$(OBJEXT) pop3_dele_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@pop3_dele_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@pop3_dele_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la |
︙ | ︙ | |||
711 712 713 714 715 716 717 718 719 720 721 722 723 724 | simplessl_SOURCES = simplessl.c simplessl_OBJECTS = simplessl.$(OBJEXT) simplessl_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@simplessl_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@simplessl_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la smtp_expn_SOURCES = smtp-expn.c smtp_expn_OBJECTS = smtp-expn.$(OBJEXT) smtp_expn_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@smtp_expn_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@smtp_expn_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la | > > > > > > > | 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 | simplessl_SOURCES = simplessl.c simplessl_OBJECTS = simplessl.$(OBJEXT) simplessl_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@simplessl_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@simplessl_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la smtp_authzid_SOURCES = smtp-authzid.c smtp_authzid_OBJECTS = smtp-authzid.$(OBJEXT) smtp_authzid_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@smtp_authzid_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@smtp_authzid_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la smtp_expn_SOURCES = smtp-expn.c smtp_expn_OBJECTS = smtp-expn.$(OBJEXT) smtp_expn_LDADD = $(LDADD) @USE_EXPLICIT_LIB_DEPS_FALSE@smtp_expn_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@smtp_expn_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la |
︙ | ︙ | |||
797 798 799 800 801 802 803 | am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/10-at-a-time.Po \ | > | | | | | | | | | < | > > | | | | | | | | | | | > | | | | | | | > | | | | | | | | | | | > | | | | | | | > | | | | | | | | > | | | 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 | am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/10-at-a-time.Po \ ./$(DEPDIR)/altsvc.Po ./$(DEPDIR)/anyauthput.Po \ ./$(DEPDIR)/certinfo.Po ./$(DEPDIR)/chkspeed.Po \ ./$(DEPDIR)/cookie_interface.Po ./$(DEPDIR)/debug.Po \ ./$(DEPDIR)/externalsocket.Po ./$(DEPDIR)/fileupload.Po \ ./$(DEPDIR)/fopen.Po ./$(DEPDIR)/ftp-wildcard.Po \ ./$(DEPDIR)/ftpget.Po ./$(DEPDIR)/ftpgetinfo.Po \ ./$(DEPDIR)/ftpgetresp.Po ./$(DEPDIR)/ftpsget.Po \ ./$(DEPDIR)/ftpupload.Po ./$(DEPDIR)/ftpuploadfrommem.Po \ ./$(DEPDIR)/ftpuploadresume.Po ./$(DEPDIR)/getinfo.Po \ ./$(DEPDIR)/getinmemory.Po ./$(DEPDIR)/getredirect.Po \ ./$(DEPDIR)/http-post.Po ./$(DEPDIR)/http2-download.Po \ ./$(DEPDIR)/http2-pushinmemory.Po \ ./$(DEPDIR)/http2-serverpush.Po ./$(DEPDIR)/http2-upload.Po \ ./$(DEPDIR)/http3-present.Po ./$(DEPDIR)/http3.Po \ ./$(DEPDIR)/httpcustomheader.Po ./$(DEPDIR)/httpput.Po \ ./$(DEPDIR)/https.Po ./$(DEPDIR)/imap-append.Po \ ./$(DEPDIR)/imap-authzid.Po ./$(DEPDIR)/imap-copy.Po \ ./$(DEPDIR)/imap-create.Po ./$(DEPDIR)/imap-delete.Po \ ./$(DEPDIR)/imap-examine.Po ./$(DEPDIR)/imap-fetch.Po \ ./$(DEPDIR)/imap-list.Po ./$(DEPDIR)/imap-lsub.Po \ ./$(DEPDIR)/imap-multi.Po ./$(DEPDIR)/imap-noop.Po \ ./$(DEPDIR)/imap-search.Po ./$(DEPDIR)/imap-ssl.Po \ ./$(DEPDIR)/imap-store.Po ./$(DEPDIR)/imap-tls.Po \ ./$(DEPDIR)/multi-app.Po ./$(DEPDIR)/multi-debugcallback.Po \ ./$(DEPDIR)/multi-double.Po ./$(DEPDIR)/multi-formadd.Po \ ./$(DEPDIR)/multi-post.Po ./$(DEPDIR)/multi-single.Po \ ./$(DEPDIR)/parseurl.Po ./$(DEPDIR)/persistent.Po \ ./$(DEPDIR)/pop3-authzid.Po ./$(DEPDIR)/pop3-dele.Po \ ./$(DEPDIR)/pop3-list.Po ./$(DEPDIR)/pop3-multi.Po \ ./$(DEPDIR)/pop3-noop.Po ./$(DEPDIR)/pop3-retr.Po \ ./$(DEPDIR)/pop3-ssl.Po ./$(DEPDIR)/pop3-stat.Po \ ./$(DEPDIR)/pop3-tls.Po ./$(DEPDIR)/pop3-top.Po \ ./$(DEPDIR)/pop3-uidl.Po ./$(DEPDIR)/post-callback.Po \ ./$(DEPDIR)/postinmemory.Po ./$(DEPDIR)/postit2-formadd.Po \ ./$(DEPDIR)/postit2.Po ./$(DEPDIR)/progressfunc.Po \ ./$(DEPDIR)/resolve.Po ./$(DEPDIR)/rtsp.Po \ ./$(DEPDIR)/sendrecv.Po ./$(DEPDIR)/sepheaders.Po \ ./$(DEPDIR)/sftpget.Po ./$(DEPDIR)/sftpuploadresume.Po \ ./$(DEPDIR)/shared-connection-cache.Po ./$(DEPDIR)/simple.Po \ ./$(DEPDIR)/simplepost.Po ./$(DEPDIR)/simplessl.Po \ ./$(DEPDIR)/smtp-authzid.Po ./$(DEPDIR)/smtp-expn.Po \ ./$(DEPDIR)/smtp-mail.Po ./$(DEPDIR)/smtp-mime.Po \ ./$(DEPDIR)/smtp-multi.Po ./$(DEPDIR)/smtp-ssl.Po \ ./$(DEPDIR)/smtp-tls.Po ./$(DEPDIR)/smtp-vrfy.Po \ ./$(DEPDIR)/sslbackend.Po ./$(DEPDIR)/url2file.Po \ ./$(DEPDIR)/urlapi.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = 10-at-a-time.c altsvc.c anyauthput.c certinfo.c chkspeed.c \ cookie_interface.c debug.c externalsocket.c fileupload.c \ fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \ ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c \ getinfo.c getinmemory.c getredirect.c http-post.c \ http2-download.c http2-pushinmemory.c http2-serverpush.c \ http2-upload.c http3.c http3-present.c httpcustomheader.c \ httpput.c https.c imap-append.c imap-authzid.c imap-copy.c \ imap-create.c imap-delete.c imap-examine.c imap-fetch.c \ imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c \ imap-ssl.c imap-store.c imap-tls.c multi-app.c \ multi-debugcallback.c multi-double.c multi-formadd.c \ multi-post.c multi-single.c parseurl.c persistent.c \ pop3-authzid.c pop3-dele.c pop3-list.c pop3-multi.c \ pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c pop3-tls.c \ pop3-top.c pop3-uidl.c post-callback.c postinmemory.c \ postit2.c postit2-formadd.c progressfunc.c resolve.c rtsp.c \ sendrecv.c sepheaders.c sftpget.c sftpuploadresume.c \ shared-connection-cache.c simple.c simplepost.c simplessl.c \ smtp-authzid.c smtp-expn.c smtp-mail.c smtp-mime.c \ smtp-multi.c smtp-ssl.c smtp-tls.c smtp-vrfy.c sslbackend.c \ url2file.c urlapi.c DIST_SOURCES = 10-at-a-time.c altsvc.c anyauthput.c certinfo.c \ chkspeed.c cookie_interface.c debug.c externalsocket.c \ fileupload.c fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c \ ftpgetresp.c ftpsget.c ftpupload.c ftpuploadfrommem.c \ ftpuploadresume.c getinfo.c getinmemory.c getredirect.c \ http-post.c http2-download.c http2-pushinmemory.c \ http2-serverpush.c http2-upload.c http3.c http3-present.c \ httpcustomheader.c httpput.c https.c imap-append.c \ imap-authzid.c imap-copy.c imap-create.c imap-delete.c \ imap-examine.c imap-fetch.c imap-list.c imap-lsub.c \ imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c \ imap-tls.c multi-app.c multi-debugcallback.c multi-double.c \ multi-formadd.c multi-post.c multi-single.c parseurl.c \ persistent.c pop3-authzid.c pop3-dele.c pop3-list.c \ pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c \ pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c \ postinmemory.c postit2.c postit2-formadd.c progressfunc.c \ resolve.c rtsp.c sendrecv.c sepheaders.c sftpget.c \ sftpuploadresume.c shared-connection-cache.c simple.c \ simplepost.c simplessl.c smtp-authzid.c smtp-expn.c \ smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c \ smtp-vrfy.c sslbackend.c url2file.c urlapi.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, |
︙ | ︙ | |||
1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 | list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list 10-at-a-time$(EXEEXT): $(10_at_a_time_OBJECTS) $(10_at_a_time_DEPENDENCIES) $(EXTRA_10_at_a_time_DEPENDENCIES) @rm -f 10-at-a-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(10_at_a_time_OBJECTS) $(10_at_a_time_LDADD) $(LIBS) anyauthput$(EXEEXT): $(anyauthput_OBJECTS) $(anyauthput_DEPENDENCIES) $(EXTRA_anyauthput_DEPENDENCIES) @rm -f anyauthput$(EXEEXT) $(AM_V_CCLD)$(LINK) $(anyauthput_OBJECTS) $(anyauthput_LDADD) $(LIBS) certinfo$(EXEEXT): $(certinfo_OBJECTS) $(certinfo_DEPENDENCIES) $(EXTRA_certinfo_DEPENDENCIES) @rm -f certinfo$(EXEEXT) | > > > > | 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 | list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list 10-at-a-time$(EXEEXT): $(10_at_a_time_OBJECTS) $(10_at_a_time_DEPENDENCIES) $(EXTRA_10_at_a_time_DEPENDENCIES) @rm -f 10-at-a-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(10_at_a_time_OBJECTS) $(10_at_a_time_LDADD) $(LIBS) altsvc$(EXEEXT): $(altsvc_OBJECTS) $(altsvc_DEPENDENCIES) $(EXTRA_altsvc_DEPENDENCIES) @rm -f altsvc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(altsvc_OBJECTS) $(altsvc_LDADD) $(LIBS) anyauthput$(EXEEXT): $(anyauthput_OBJECTS) $(anyauthput_DEPENDENCIES) $(EXTRA_anyauthput_DEPENDENCIES) @rm -f anyauthput$(EXEEXT) $(AM_V_CCLD)$(LINK) $(anyauthput_OBJECTS) $(anyauthput_LDADD) $(LIBS) certinfo$(EXEEXT): $(certinfo_OBJECTS) $(certinfo_DEPENDENCIES) $(EXTRA_certinfo_DEPENDENCIES) @rm -f certinfo$(EXEEXT) |
︙ | ︙ | |||
1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 | http2-serverpush$(EXEEXT): $(http2_serverpush_OBJECTS) $(http2_serverpush_DEPENDENCIES) $(EXTRA_http2_serverpush_DEPENDENCIES) @rm -f http2-serverpush$(EXEEXT) $(AM_V_CCLD)$(LINK) $(http2_serverpush_OBJECTS) $(http2_serverpush_LDADD) $(LIBS) http2-upload$(EXEEXT): $(http2_upload_OBJECTS) $(http2_upload_DEPENDENCIES) $(EXTRA_http2_upload_DEPENDENCIES) @rm -f http2-upload$(EXEEXT) $(AM_V_CCLD)$(LINK) $(http2_upload_OBJECTS) $(http2_upload_LDADD) $(LIBS) httpcustomheader$(EXEEXT): $(httpcustomheader_OBJECTS) $(httpcustomheader_DEPENDENCIES) $(EXTRA_httpcustomheader_DEPENDENCIES) @rm -f httpcustomheader$(EXEEXT) $(AM_V_CCLD)$(LINK) $(httpcustomheader_OBJECTS) $(httpcustomheader_LDADD) $(LIBS) httpput$(EXEEXT): $(httpput_OBJECTS) $(httpput_DEPENDENCIES) $(EXTRA_httpput_DEPENDENCIES) @rm -f httpput$(EXEEXT) $(AM_V_CCLD)$(LINK) $(httpput_OBJECTS) $(httpput_LDADD) $(LIBS) https$(EXEEXT): $(https_OBJECTS) $(https_DEPENDENCIES) $(EXTRA_https_DEPENDENCIES) @rm -f https$(EXEEXT) $(AM_V_CCLD)$(LINK) $(https_OBJECTS) $(https_LDADD) $(LIBS) imap-append$(EXEEXT): $(imap_append_OBJECTS) $(imap_append_DEPENDENCIES) $(EXTRA_imap_append_DEPENDENCIES) @rm -f imap-append$(EXEEXT) $(AM_V_CCLD)$(LINK) $(imap_append_OBJECTS) $(imap_append_LDADD) $(LIBS) imap-copy$(EXEEXT): $(imap_copy_OBJECTS) $(imap_copy_DEPENDENCIES) $(EXTRA_imap_copy_DEPENDENCIES) @rm -f imap-copy$(EXEEXT) $(AM_V_CCLD)$(LINK) $(imap_copy_OBJECTS) $(imap_copy_LDADD) $(LIBS) imap-create$(EXEEXT): $(imap_create_OBJECTS) $(imap_create_DEPENDENCIES) $(EXTRA_imap_create_DEPENDENCIES) @rm -f imap-create$(EXEEXT) | > > > > > > > > > > > > | 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 | http2-serverpush$(EXEEXT): $(http2_serverpush_OBJECTS) $(http2_serverpush_DEPENDENCIES) $(EXTRA_http2_serverpush_DEPENDENCIES) @rm -f http2-serverpush$(EXEEXT) $(AM_V_CCLD)$(LINK) $(http2_serverpush_OBJECTS) $(http2_serverpush_LDADD) $(LIBS) http2-upload$(EXEEXT): $(http2_upload_OBJECTS) $(http2_upload_DEPENDENCIES) $(EXTRA_http2_upload_DEPENDENCIES) @rm -f http2-upload$(EXEEXT) $(AM_V_CCLD)$(LINK) $(http2_upload_OBJECTS) $(http2_upload_LDADD) $(LIBS) http3$(EXEEXT): $(http3_OBJECTS) $(http3_DEPENDENCIES) $(EXTRA_http3_DEPENDENCIES) @rm -f http3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(http3_OBJECTS) $(http3_LDADD) $(LIBS) http3-present$(EXEEXT): $(http3_present_OBJECTS) $(http3_present_DEPENDENCIES) $(EXTRA_http3_present_DEPENDENCIES) @rm -f http3-present$(EXEEXT) $(AM_V_CCLD)$(LINK) $(http3_present_OBJECTS) $(http3_present_LDADD) $(LIBS) httpcustomheader$(EXEEXT): $(httpcustomheader_OBJECTS) $(httpcustomheader_DEPENDENCIES) $(EXTRA_httpcustomheader_DEPENDENCIES) @rm -f httpcustomheader$(EXEEXT) $(AM_V_CCLD)$(LINK) $(httpcustomheader_OBJECTS) $(httpcustomheader_LDADD) $(LIBS) httpput$(EXEEXT): $(httpput_OBJECTS) $(httpput_DEPENDENCIES) $(EXTRA_httpput_DEPENDENCIES) @rm -f httpput$(EXEEXT) $(AM_V_CCLD)$(LINK) $(httpput_OBJECTS) $(httpput_LDADD) $(LIBS) https$(EXEEXT): $(https_OBJECTS) $(https_DEPENDENCIES) $(EXTRA_https_DEPENDENCIES) @rm -f https$(EXEEXT) $(AM_V_CCLD)$(LINK) $(https_OBJECTS) $(https_LDADD) $(LIBS) imap-append$(EXEEXT): $(imap_append_OBJECTS) $(imap_append_DEPENDENCIES) $(EXTRA_imap_append_DEPENDENCIES) @rm -f imap-append$(EXEEXT) $(AM_V_CCLD)$(LINK) $(imap_append_OBJECTS) $(imap_append_LDADD) $(LIBS) imap-authzid$(EXEEXT): $(imap_authzid_OBJECTS) $(imap_authzid_DEPENDENCIES) $(EXTRA_imap_authzid_DEPENDENCIES) @rm -f imap-authzid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(imap_authzid_OBJECTS) $(imap_authzid_LDADD) $(LIBS) imap-copy$(EXEEXT): $(imap_copy_OBJECTS) $(imap_copy_DEPENDENCIES) $(EXTRA_imap_copy_DEPENDENCIES) @rm -f imap-copy$(EXEEXT) $(AM_V_CCLD)$(LINK) $(imap_copy_OBJECTS) $(imap_copy_LDADD) $(LIBS) imap-create$(EXEEXT): $(imap_create_OBJECTS) $(imap_create_DEPENDENCIES) $(EXTRA_imap_create_DEPENDENCIES) @rm -f imap-create$(EXEEXT) |
︙ | ︙ | |||
1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 | parseurl$(EXEEXT): $(parseurl_OBJECTS) $(parseurl_DEPENDENCIES) $(EXTRA_parseurl_DEPENDENCIES) @rm -f parseurl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(parseurl_OBJECTS) $(parseurl_LDADD) $(LIBS) persistent$(EXEEXT): $(persistent_OBJECTS) $(persistent_DEPENDENCIES) $(EXTRA_persistent_DEPENDENCIES) @rm -f persistent$(EXEEXT) $(AM_V_CCLD)$(LINK) $(persistent_OBJECTS) $(persistent_LDADD) $(LIBS) pop3-dele$(EXEEXT): $(pop3_dele_OBJECTS) $(pop3_dele_DEPENDENCIES) $(EXTRA_pop3_dele_DEPENDENCIES) @rm -f pop3-dele$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pop3_dele_OBJECTS) $(pop3_dele_LDADD) $(LIBS) pop3-list$(EXEEXT): $(pop3_list_OBJECTS) $(pop3_list_DEPENDENCIES) $(EXTRA_pop3_list_DEPENDENCIES) @rm -f pop3-list$(EXEEXT) | > > > > | 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 | parseurl$(EXEEXT): $(parseurl_OBJECTS) $(parseurl_DEPENDENCIES) $(EXTRA_parseurl_DEPENDENCIES) @rm -f parseurl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(parseurl_OBJECTS) $(parseurl_LDADD) $(LIBS) persistent$(EXEEXT): $(persistent_OBJECTS) $(persistent_DEPENDENCIES) $(EXTRA_persistent_DEPENDENCIES) @rm -f persistent$(EXEEXT) $(AM_V_CCLD)$(LINK) $(persistent_OBJECTS) $(persistent_LDADD) $(LIBS) pop3-authzid$(EXEEXT): $(pop3_authzid_OBJECTS) $(pop3_authzid_DEPENDENCIES) $(EXTRA_pop3_authzid_DEPENDENCIES) @rm -f pop3-authzid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pop3_authzid_OBJECTS) $(pop3_authzid_LDADD) $(LIBS) pop3-dele$(EXEEXT): $(pop3_dele_OBJECTS) $(pop3_dele_DEPENDENCIES) $(EXTRA_pop3_dele_DEPENDENCIES) @rm -f pop3-dele$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pop3_dele_OBJECTS) $(pop3_dele_LDADD) $(LIBS) pop3-list$(EXEEXT): $(pop3_list_OBJECTS) $(pop3_list_DEPENDENCIES) $(EXTRA_pop3_list_DEPENDENCIES) @rm -f pop3-list$(EXEEXT) |
︙ | ︙ | |||
1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 | simplepost$(EXEEXT): $(simplepost_OBJECTS) $(simplepost_DEPENDENCIES) $(EXTRA_simplepost_DEPENDENCIES) @rm -f simplepost$(EXEEXT) $(AM_V_CCLD)$(LINK) $(simplepost_OBJECTS) $(simplepost_LDADD) $(LIBS) simplessl$(EXEEXT): $(simplessl_OBJECTS) $(simplessl_DEPENDENCIES) $(EXTRA_simplessl_DEPENDENCIES) @rm -f simplessl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(simplessl_OBJECTS) $(simplessl_LDADD) $(LIBS) smtp-expn$(EXEEXT): $(smtp_expn_OBJECTS) $(smtp_expn_DEPENDENCIES) $(EXTRA_smtp_expn_DEPENDENCIES) @rm -f smtp-expn$(EXEEXT) $(AM_V_CCLD)$(LINK) $(smtp_expn_OBJECTS) $(smtp_expn_LDADD) $(LIBS) smtp-mail$(EXEEXT): $(smtp_mail_OBJECTS) $(smtp_mail_DEPENDENCIES) $(EXTRA_smtp_mail_DEPENDENCIES) @rm -f smtp-mail$(EXEEXT) | > > > > | 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 | simplepost$(EXEEXT): $(simplepost_OBJECTS) $(simplepost_DEPENDENCIES) $(EXTRA_simplepost_DEPENDENCIES) @rm -f simplepost$(EXEEXT) $(AM_V_CCLD)$(LINK) $(simplepost_OBJECTS) $(simplepost_LDADD) $(LIBS) simplessl$(EXEEXT): $(simplessl_OBJECTS) $(simplessl_DEPENDENCIES) $(EXTRA_simplessl_DEPENDENCIES) @rm -f simplessl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(simplessl_OBJECTS) $(simplessl_LDADD) $(LIBS) smtp-authzid$(EXEEXT): $(smtp_authzid_OBJECTS) $(smtp_authzid_DEPENDENCIES) $(EXTRA_smtp_authzid_DEPENDENCIES) @rm -f smtp-authzid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(smtp_authzid_OBJECTS) $(smtp_authzid_LDADD) $(LIBS) smtp-expn$(EXEEXT): $(smtp_expn_OBJECTS) $(smtp_expn_DEPENDENCIES) $(EXTRA_smtp_expn_DEPENDENCIES) @rm -f smtp-expn$(EXEEXT) $(AM_V_CCLD)$(LINK) $(smtp_expn_OBJECTS) $(smtp_expn_LDADD) $(LIBS) smtp-mail$(EXEEXT): $(smtp_mail_OBJECTS) $(smtp_mail_DEPENDENCIES) $(EXTRA_smtp_mail_DEPENDENCIES) @rm -f smtp-mail$(EXEEXT) |
︙ | ︙ | |||
1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 | mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/10-at-a-time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anyauthput.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkspeed.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie_interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/externalsocket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileupload.Po@am__quote@ # am--include-marker | > | 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 | mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/10-at-a-time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/altsvc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anyauthput.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkspeed.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie_interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/externalsocket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileupload.Po@am__quote@ # am--include-marker |
︙ | ︙ | |||
1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinmemory.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getredirect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http-post.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-download.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-pushinmemory.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-serverpush.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-upload.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpcustomheader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpput.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/https.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-append.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-copy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-delete.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-examine.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-fetch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-lsub.Po@am__quote@ # am--include-marker | > > > | 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinmemory.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getredirect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http-post.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-download.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-pushinmemory.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-serverpush.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-upload.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http3-present.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpcustomheader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpput.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/https.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-append.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-authzid.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-copy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-delete.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-examine.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-fetch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-lsub.Po@am__quote@ # am--include-marker |
︙ | ︙ | |||
1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-debugcallback.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-double.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-formadd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-post.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-single.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseurl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/persistent.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-dele.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-multi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-noop.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-retr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-ssl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-stat.Po@am__quote@ # am--include-marker | > | 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-debugcallback.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-double.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-formadd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-post.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-single.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseurl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/persistent.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-authzid.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-dele.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-multi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-noop.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-retr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-ssl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-stat.Po@am__quote@ # am--include-marker |
︙ | ︙ | |||
1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepheaders.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpget.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpuploadresume.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shared-connection-cache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplepost.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplessl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-expn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-mail.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-mime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-multi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-ssl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-tls.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-vrfy.Po@am__quote@ # am--include-marker | > | 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepheaders.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpget.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpuploadresume.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shared-connection-cache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplepost.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplessl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-authzid.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-expn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-mail.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-mime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-multi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-ssl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-tls.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-vrfy.Po@am__quote@ # am--include-marker |
︙ | ︙ | |||
1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 | clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/10-at-a-time.Po -rm -f ./$(DEPDIR)/anyauthput.Po -rm -f ./$(DEPDIR)/certinfo.Po -rm -f ./$(DEPDIR)/chkspeed.Po -rm -f ./$(DEPDIR)/cookie_interface.Po -rm -f ./$(DEPDIR)/debug.Po -rm -f ./$(DEPDIR)/externalsocket.Po -rm -f ./$(DEPDIR)/fileupload.Po | > | 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 | clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/10-at-a-time.Po -rm -f ./$(DEPDIR)/altsvc.Po -rm -f ./$(DEPDIR)/anyauthput.Po -rm -f ./$(DEPDIR)/certinfo.Po -rm -f ./$(DEPDIR)/chkspeed.Po -rm -f ./$(DEPDIR)/cookie_interface.Po -rm -f ./$(DEPDIR)/debug.Po -rm -f ./$(DEPDIR)/externalsocket.Po -rm -f ./$(DEPDIR)/fileupload.Po |
︙ | ︙ | |||
1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 | -rm -f ./$(DEPDIR)/getinmemory.Po -rm -f ./$(DEPDIR)/getredirect.Po -rm -f ./$(DEPDIR)/http-post.Po -rm -f ./$(DEPDIR)/http2-download.Po -rm -f ./$(DEPDIR)/http2-pushinmemory.Po -rm -f ./$(DEPDIR)/http2-serverpush.Po -rm -f ./$(DEPDIR)/http2-upload.Po -rm -f ./$(DEPDIR)/httpcustomheader.Po -rm -f ./$(DEPDIR)/httpput.Po -rm -f ./$(DEPDIR)/https.Po -rm -f ./$(DEPDIR)/imap-append.Po -rm -f ./$(DEPDIR)/imap-copy.Po -rm -f ./$(DEPDIR)/imap-create.Po -rm -f ./$(DEPDIR)/imap-delete.Po -rm -f ./$(DEPDIR)/imap-examine.Po -rm -f ./$(DEPDIR)/imap-fetch.Po -rm -f ./$(DEPDIR)/imap-list.Po -rm -f ./$(DEPDIR)/imap-lsub.Po | > > > | 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 | -rm -f ./$(DEPDIR)/getinmemory.Po -rm -f ./$(DEPDIR)/getredirect.Po -rm -f ./$(DEPDIR)/http-post.Po -rm -f ./$(DEPDIR)/http2-download.Po -rm -f ./$(DEPDIR)/http2-pushinmemory.Po -rm -f ./$(DEPDIR)/http2-serverpush.Po -rm -f ./$(DEPDIR)/http2-upload.Po -rm -f ./$(DEPDIR)/http3-present.Po -rm -f ./$(DEPDIR)/http3.Po -rm -f ./$(DEPDIR)/httpcustomheader.Po -rm -f ./$(DEPDIR)/httpput.Po -rm -f ./$(DEPDIR)/https.Po -rm -f ./$(DEPDIR)/imap-append.Po -rm -f ./$(DEPDIR)/imap-authzid.Po -rm -f ./$(DEPDIR)/imap-copy.Po -rm -f ./$(DEPDIR)/imap-create.Po -rm -f ./$(DEPDIR)/imap-delete.Po -rm -f ./$(DEPDIR)/imap-examine.Po -rm -f ./$(DEPDIR)/imap-fetch.Po -rm -f ./$(DEPDIR)/imap-list.Po -rm -f ./$(DEPDIR)/imap-lsub.Po |
︙ | ︙ | |||
1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 | -rm -f ./$(DEPDIR)/multi-debugcallback.Po -rm -f ./$(DEPDIR)/multi-double.Po -rm -f ./$(DEPDIR)/multi-formadd.Po -rm -f ./$(DEPDIR)/multi-post.Po -rm -f ./$(DEPDIR)/multi-single.Po -rm -f ./$(DEPDIR)/parseurl.Po -rm -f ./$(DEPDIR)/persistent.Po -rm -f ./$(DEPDIR)/pop3-dele.Po -rm -f ./$(DEPDIR)/pop3-list.Po -rm -f ./$(DEPDIR)/pop3-multi.Po -rm -f ./$(DEPDIR)/pop3-noop.Po -rm -f ./$(DEPDIR)/pop3-retr.Po -rm -f ./$(DEPDIR)/pop3-ssl.Po -rm -f ./$(DEPDIR)/pop3-stat.Po | > | 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 | -rm -f ./$(DEPDIR)/multi-debugcallback.Po -rm -f ./$(DEPDIR)/multi-double.Po -rm -f ./$(DEPDIR)/multi-formadd.Po -rm -f ./$(DEPDIR)/multi-post.Po -rm -f ./$(DEPDIR)/multi-single.Po -rm -f ./$(DEPDIR)/parseurl.Po -rm -f ./$(DEPDIR)/persistent.Po -rm -f ./$(DEPDIR)/pop3-authzid.Po -rm -f ./$(DEPDIR)/pop3-dele.Po -rm -f ./$(DEPDIR)/pop3-list.Po -rm -f ./$(DEPDIR)/pop3-multi.Po -rm -f ./$(DEPDIR)/pop3-noop.Po -rm -f ./$(DEPDIR)/pop3-retr.Po -rm -f ./$(DEPDIR)/pop3-ssl.Po -rm -f ./$(DEPDIR)/pop3-stat.Po |
︙ | ︙ | |||
1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 | -rm -f ./$(DEPDIR)/sepheaders.Po -rm -f ./$(DEPDIR)/sftpget.Po -rm -f ./$(DEPDIR)/sftpuploadresume.Po -rm -f ./$(DEPDIR)/shared-connection-cache.Po -rm -f ./$(DEPDIR)/simple.Po -rm -f ./$(DEPDIR)/simplepost.Po -rm -f ./$(DEPDIR)/simplessl.Po -rm -f ./$(DEPDIR)/smtp-expn.Po -rm -f ./$(DEPDIR)/smtp-mail.Po -rm -f ./$(DEPDIR)/smtp-mime.Po -rm -f ./$(DEPDIR)/smtp-multi.Po -rm -f ./$(DEPDIR)/smtp-ssl.Po -rm -f ./$(DEPDIR)/smtp-tls.Po -rm -f ./$(DEPDIR)/smtp-vrfy.Po | > | 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 | -rm -f ./$(DEPDIR)/sepheaders.Po -rm -f ./$(DEPDIR)/sftpget.Po -rm -f ./$(DEPDIR)/sftpuploadresume.Po -rm -f ./$(DEPDIR)/shared-connection-cache.Po -rm -f ./$(DEPDIR)/simple.Po -rm -f ./$(DEPDIR)/simplepost.Po -rm -f ./$(DEPDIR)/simplessl.Po -rm -f ./$(DEPDIR)/smtp-authzid.Po -rm -f ./$(DEPDIR)/smtp-expn.Po -rm -f ./$(DEPDIR)/smtp-mail.Po -rm -f ./$(DEPDIR)/smtp-mime.Po -rm -f ./$(DEPDIR)/smtp-multi.Po -rm -f ./$(DEPDIR)/smtp-ssl.Po -rm -f ./$(DEPDIR)/smtp-tls.Po -rm -f ./$(DEPDIR)/smtp-vrfy.Po |
︙ | ︙ | |||
1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 | install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/10-at-a-time.Po -rm -f ./$(DEPDIR)/anyauthput.Po -rm -f ./$(DEPDIR)/certinfo.Po -rm -f ./$(DEPDIR)/chkspeed.Po -rm -f ./$(DEPDIR)/cookie_interface.Po -rm -f ./$(DEPDIR)/debug.Po -rm -f ./$(DEPDIR)/externalsocket.Po -rm -f ./$(DEPDIR)/fileupload.Po | > | 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 | install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/10-at-a-time.Po -rm -f ./$(DEPDIR)/altsvc.Po -rm -f ./$(DEPDIR)/anyauthput.Po -rm -f ./$(DEPDIR)/certinfo.Po -rm -f ./$(DEPDIR)/chkspeed.Po -rm -f ./$(DEPDIR)/cookie_interface.Po -rm -f ./$(DEPDIR)/debug.Po -rm -f ./$(DEPDIR)/externalsocket.Po -rm -f ./$(DEPDIR)/fileupload.Po |
︙ | ︙ | |||
1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 | -rm -f ./$(DEPDIR)/getinmemory.Po -rm -f ./$(DEPDIR)/getredirect.Po -rm -f ./$(DEPDIR)/http-post.Po -rm -f ./$(DEPDIR)/http2-download.Po -rm -f ./$(DEPDIR)/http2-pushinmemory.Po -rm -f ./$(DEPDIR)/http2-serverpush.Po -rm -f ./$(DEPDIR)/http2-upload.Po -rm -f ./$(DEPDIR)/httpcustomheader.Po -rm -f ./$(DEPDIR)/httpput.Po -rm -f ./$(DEPDIR)/https.Po -rm -f ./$(DEPDIR)/imap-append.Po -rm -f ./$(DEPDIR)/imap-copy.Po -rm -f ./$(DEPDIR)/imap-create.Po -rm -f ./$(DEPDIR)/imap-delete.Po -rm -f ./$(DEPDIR)/imap-examine.Po -rm -f ./$(DEPDIR)/imap-fetch.Po -rm -f ./$(DEPDIR)/imap-list.Po -rm -f ./$(DEPDIR)/imap-lsub.Po | > > > | 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 | -rm -f ./$(DEPDIR)/getinmemory.Po -rm -f ./$(DEPDIR)/getredirect.Po -rm -f ./$(DEPDIR)/http-post.Po -rm -f ./$(DEPDIR)/http2-download.Po -rm -f ./$(DEPDIR)/http2-pushinmemory.Po -rm -f ./$(DEPDIR)/http2-serverpush.Po -rm -f ./$(DEPDIR)/http2-upload.Po -rm -f ./$(DEPDIR)/http3-present.Po -rm -f ./$(DEPDIR)/http3.Po -rm -f ./$(DEPDIR)/httpcustomheader.Po -rm -f ./$(DEPDIR)/httpput.Po -rm -f ./$(DEPDIR)/https.Po -rm -f ./$(DEPDIR)/imap-append.Po -rm -f ./$(DEPDIR)/imap-authzid.Po -rm -f ./$(DEPDIR)/imap-copy.Po -rm -f ./$(DEPDIR)/imap-create.Po -rm -f ./$(DEPDIR)/imap-delete.Po -rm -f ./$(DEPDIR)/imap-examine.Po -rm -f ./$(DEPDIR)/imap-fetch.Po -rm -f ./$(DEPDIR)/imap-list.Po -rm -f ./$(DEPDIR)/imap-lsub.Po |
︙ | ︙ | |||
1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 | -rm -f ./$(DEPDIR)/multi-debugcallback.Po -rm -f ./$(DEPDIR)/multi-double.Po -rm -f ./$(DEPDIR)/multi-formadd.Po -rm -f ./$(DEPDIR)/multi-post.Po -rm -f ./$(DEPDIR)/multi-single.Po -rm -f ./$(DEPDIR)/parseurl.Po -rm -f ./$(DEPDIR)/persistent.Po -rm -f ./$(DEPDIR)/pop3-dele.Po -rm -f ./$(DEPDIR)/pop3-list.Po -rm -f ./$(DEPDIR)/pop3-multi.Po -rm -f ./$(DEPDIR)/pop3-noop.Po -rm -f ./$(DEPDIR)/pop3-retr.Po -rm -f ./$(DEPDIR)/pop3-ssl.Po -rm -f ./$(DEPDIR)/pop3-stat.Po | > | 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 | -rm -f ./$(DEPDIR)/multi-debugcallback.Po -rm -f ./$(DEPDIR)/multi-double.Po -rm -f ./$(DEPDIR)/multi-formadd.Po -rm -f ./$(DEPDIR)/multi-post.Po -rm -f ./$(DEPDIR)/multi-single.Po -rm -f ./$(DEPDIR)/parseurl.Po -rm -f ./$(DEPDIR)/persistent.Po -rm -f ./$(DEPDIR)/pop3-authzid.Po -rm -f ./$(DEPDIR)/pop3-dele.Po -rm -f ./$(DEPDIR)/pop3-list.Po -rm -f ./$(DEPDIR)/pop3-multi.Po -rm -f ./$(DEPDIR)/pop3-noop.Po -rm -f ./$(DEPDIR)/pop3-retr.Po -rm -f ./$(DEPDIR)/pop3-ssl.Po -rm -f ./$(DEPDIR)/pop3-stat.Po |
︙ | ︙ | |||
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 | -rm -f ./$(DEPDIR)/sepheaders.Po -rm -f ./$(DEPDIR)/sftpget.Po -rm -f ./$(DEPDIR)/sftpuploadresume.Po -rm -f ./$(DEPDIR)/shared-connection-cache.Po -rm -f ./$(DEPDIR)/simple.Po -rm -f ./$(DEPDIR)/simplepost.Po -rm -f ./$(DEPDIR)/simplessl.Po -rm -f ./$(DEPDIR)/smtp-expn.Po -rm -f ./$(DEPDIR)/smtp-mail.Po -rm -f ./$(DEPDIR)/smtp-mime.Po -rm -f ./$(DEPDIR)/smtp-multi.Po -rm -f ./$(DEPDIR)/smtp-ssl.Po -rm -f ./$(DEPDIR)/smtp-tls.Po -rm -f ./$(DEPDIR)/smtp-vrfy.Po | > | 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 | -rm -f ./$(DEPDIR)/sepheaders.Po -rm -f ./$(DEPDIR)/sftpget.Po -rm -f ./$(DEPDIR)/sftpuploadresume.Po -rm -f ./$(DEPDIR)/shared-connection-cache.Po -rm -f ./$(DEPDIR)/simple.Po -rm -f ./$(DEPDIR)/simplepost.Po -rm -f ./$(DEPDIR)/simplessl.Po -rm -f ./$(DEPDIR)/smtp-authzid.Po -rm -f ./$(DEPDIR)/smtp-expn.Po -rm -f ./$(DEPDIR)/smtp-mail.Po -rm -f ./$(DEPDIR)/smtp-mime.Po -rm -f ./$(DEPDIR)/smtp-multi.Po -rm -f ./$(DEPDIR)/smtp-ssl.Po -rm -f ./$(DEPDIR)/smtp-tls.Po -rm -f ./$(DEPDIR)/smtp-vrfy.Po |
︙ | ︙ |
Changes to jni/curl/docs/examples/Makefile.inc.
1 2 3 4 5 6 7 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
31 32 33 34 35 36 37 | pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi \ imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \ imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \ imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \ http2-upload http2-serverpush getredirect ftpuploadfrommem \ ftpuploadresume sslbackend postit2-formadd multi-formadd \ shared-connection-cache sftpuploadresume http2-pushinmemory parseurl \ | | > | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi \ imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \ imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \ imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \ http2-upload http2-serverpush getredirect ftpuploadfrommem \ ftpuploadresume sslbackend postit2-formadd multi-formadd \ shared-connection-cache sftpuploadresume http2-pushinmemory parseurl \ urlapi imap-authzid pop3-authzid smtp-authzid http3 altsvc \ http3-present # These examples require external dependencies that may not be commonly # available on POSIX systems, so don't bother attempting to compile them here. COMPLICATED_EXAMPLES = curlgtk.c curlx.c htmltitle.cpp cacertinmem.c \ ghiper.c hiperfifo.c htmltidy.c multithread.c opensslthreadlock.c \ sampleconv.c synctime.c threaded-ssl.c evhiperfifo.c \ smooth-gtk-thread.c version-check.pl href_extractor.c asiohiper.cpp \ multi-uv.c xmlstream.c usercertinmem.c sessioninfo.c \ threaded-shared-conn.c crawler.c ephiperfifo.c |
Added jni/curl/docs/examples/altsvc.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* <DESC> * HTTP with Alt-Svc support * </DESC> */ #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); /* cache the alternatives in this file */ curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc.txt"); /* restrict which HTTP versions to use alternatives */ curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, (long) CURLALTSVC_H1|CURLALTSVC_H2|CURLALTSVC_H3); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } return 0; } |
Changes to jni/curl/docs/examples/curlx.c.
︙ | ︙ | |||
273 274 275 276 277 278 279 | BIO* out = NULL; char *outfile = NULL; char *infile = NULL; int tabLength = 100; char *binaryptr; | | | | 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 | BIO* out = NULL; char *outfile = NULL; char *infile = NULL; int tabLength = 100; char *binaryptr; char *mimetype = NULL; char *mimetypeaccept = NULL; char *contenttype; const char **pp; unsigned char *hostporturl = NULL; BIO *p12bio; char **args = argv + 1; unsigned char *serverurl; sslctxparm p; char *response; CURLcode res; struct curl_slist *headers = NULL; int badarg = 0; binaryptr = malloc(tabLength); memset(&p, '\0', sizeof(p)); p.errorbio = BIO_new_fp(stderr, BIO_NOCLOSE); curl_global_init(CURL_GLOBAL_DEFAULT); /* we need some more for the P12 decoding */ OpenSSL_add_all_ciphers(); |
︙ | ︙ | |||
368 369 370 371 372 373 374 | p.verbose++; } else badarg = 1; args++; } | | | 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | p.verbose++; } else badarg = 1; args++; } if(mimetype == NULL || mimetypeaccept == NULL || p.p12file == NULL) badarg = 1; if(badarg) { for(pp = curlx_usage; (*pp != NULL); pp++) BIO_printf(p.errorbio, "%s\n", *pp); BIO_printf(p.errorbio, "\n"); goto err; |
︙ | ︙ |
Changes to jni/curl/docs/examples/ephiperfifo.c.
︙ | ︙ | |||
69 70 71 72 73 74 75 | #include <sys/timerfd.h> #include <sys/types.h> #include <time.h> #include <unistd.h> #include <curl/curl.h> | < < < < < < | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <sys/timerfd.h> #include <sys/types.h> #include <time.h> #include <unistd.h> #include <curl/curl.h> #define MSG_OUT stdout /* Send info to stdout, change to stderr if you want */ /* Global information, common to all connections */ typedef struct _GlobalInfo { int epfd; /* epoll filedescriptor */ |
︙ | ︙ | |||
110 111 112 113 114 115 116 | curl_socket_t sockfd; CURL *easy; int action; long timeout; GlobalInfo *global; } SockInfo; | | | | | | | | | | 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | curl_socket_t sockfd; CURL *easy; int action; long timeout; GlobalInfo *global; } SockInfo; #define mycase(code) \ case code: s = __STRING(code) /* Die if we get a bad CURLMcode somewhere */ static void mcode_or_die(const char *where, CURLMcode code) { if(CURLM_OK != code) { const char *s; switch(code) { mycase(CURLM_BAD_HANDLE); break; mycase(CURLM_BAD_EASY_HANDLE); break; mycase(CURLM_OUT_OF_MEMORY); break; mycase(CURLM_INTERNAL_ERROR); break; mycase(CURLM_UNKNOWN_OPTION); break; mycase(CURLM_LAST); break; default: s = "CURLM_unknown"; break; mycase(CURLM_BAD_SOCKET); fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s); /* ignore this error */ return; } fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s); exit(code); } |
︙ | ︙ | |||
332 333 334 335 336 337 338 | } return 0; } /* CURLOPT_WRITEFUNCTION */ | | < < | < | | | > > | 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | } return 0; } /* CURLOPT_WRITEFUNCTION */ static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data) { (void)ptr; (void)data; return size * nmemb; } /* CURLOPT_PROGRESSFUNCTION */ static int prog_cb(void *p, double dltotal, double dlnow, double ult, double uln) { ConnInfo *conn = (ConnInfo *)p; (void)ult; (void)uln; fprintf(MSG_OUT, "Progress: %s (%g/%g)\n", conn->url, dlnow, dltotal); return 0; } /* Create a new easy handle, and add it to the global curl_multi */ |
︙ | ︙ | |||
465 466 467 468 469 470 471 | void SignalHandler(int signo) { if(signo == SIGINT) { g_should_exit_ = 1; } } | | > > | 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 | void SignalHandler(int signo) { if(signo == SIGINT) { g_should_exit_ = 1; } } int main(int argc, char **argv) { GlobalInfo g; struct itimerspec its; struct epoll_event ev; struct epoll_event events[10]; (void)argc; (void)argv; g_should_exit_ = 0; signal(SIGINT, SignalHandler); memset(&g, 0, sizeof(GlobalInfo)); g.epfd = epoll_create1(EPOLL_CLOEXEC); if(g.epfd == -1) { |
︙ | ︙ | |||
543 544 545 546 547 548 549 550 551 | } } fprintf(MSG_OUT, "Exiting normally.\n"); fflush(MSG_OUT); curl_multi_cleanup(g.multi); return 0; } | > | 538 539 540 541 542 543 544 545 546 547 | } } fprintf(MSG_OUT, "Exiting normally.\n"); fflush(MSG_OUT); curl_multi_cleanup(g.multi); clean_fifo(&g); return 0; } |
Changes to jni/curl/docs/examples/hiperfifo.c.
︙ | ︙ | |||
68 69 70 71 72 73 74 | #include <event2/event.h> #include <event2/event_struct.h> #include <fcntl.h> #include <sys/stat.h> #include <errno.h> #include <sys/cdefs.h> | < < < < < < | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #include <event2/event.h> #include <event2/event_struct.h> #include <fcntl.h> #include <sys/stat.h> #include <errno.h> #include <sys/cdefs.h> #define MSG_OUT stdout /* Send info to stdout, change to stderr if you want */ /* Global information, common to all connections */ typedef struct _GlobalInfo { struct event_base *evbase; |
︙ | ︙ | |||
111 112 113 114 115 116 117 | CURL *easy; int action; long timeout; struct event ev; GlobalInfo *global; } SockInfo; | | | | | | | | | | > | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | CURL *easy; int action; long timeout; struct event ev; GlobalInfo *global; } SockInfo; #define mycase(code) \ case code: s = __STRING(code) /* Die if we get a bad CURLMcode somewhere */ static void mcode_or_die(const char *where, CURLMcode code) { if(CURLM_OK != code) { const char *s; switch(code) { mycase(CURLM_BAD_HANDLE); break; mycase(CURLM_BAD_EASY_HANDLE); break; mycase(CURLM_OUT_OF_MEMORY); break; mycase(CURLM_INTERNAL_ERROR); break; mycase(CURLM_UNKNOWN_OPTION); break; mycase(CURLM_LAST); break; default: s = "CURLM_unknown"; break; mycase(CURLM_BAD_SOCKET); fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s); /* ignore this error */ return; } fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s); exit(code); } } /* Update the event timer after curl_multi library calls */ static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g) { struct timeval timeout; (void)multi; timeout.tv_sec = timeout_ms/1000; timeout.tv_usec = (timeout_ms%1000)*1000; fprintf(MSG_OUT, "multi_timer_cb: Setting timeout to %ld ms\n", timeout_ms); /* * if timeout_ms is -1, just delete the timer |
︙ | ︙ | |||
216 217 218 219 220 221 222 | } } } /* Called by libevent when our timeout expires */ | | > > | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | } } } /* Called by libevent when our timeout expires */ static void timer_cb(int fd, short kind, void *userp) { GlobalInfo *g = (GlobalInfo *)userp; CURLMcode rc; (void)fd; (void)kind; rc = curl_multi_socket_action(g->multi, CURL_SOCKET_TIMEOUT, 0, &g->still_running); mcode_or_die("timer_cb: curl_multi_socket_action", rc); check_multi_info(g); } |
︙ | ︙ | |||
299 300 301 302 303 304 305 | } return 0; } /* CURLOPT_WRITEFUNCTION */ | | < < | < | | | > > | 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | } return 0; } /* CURLOPT_WRITEFUNCTION */ static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data) { (void)ptr; (void)data; return size * nmemb; } /* CURLOPT_PROGRESSFUNCTION */ static int prog_cb(void *p, double dltotal, double dlnow, double ult, double uln) { ConnInfo *conn = (ConnInfo *)p; (void)ult; (void)uln; fprintf(MSG_OUT, "Progress: %s (%g/%g)\n", conn->url, dlnow, dltotal); return 0; } /* Create a new easy handle, and add it to the global curl_multi */ |
︙ | ︙ | |||
357 358 359 360 361 362 363 | mcode_or_die("new_conn: curl_multi_add_handle", rc); /* note that the add_handle() will set a time-out to trigger very soon so that the necessary socket_action() call will be called by this app */ } /* This gets called whenever data is received from the fifo */ | | > > | 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 | mcode_or_die("new_conn: curl_multi_add_handle", rc); /* note that the add_handle() will set a time-out to trigger very soon so that the necessary socket_action() call will be called by this app */ } /* This gets called whenever data is received from the fifo */ static void fifo_cb(int fd, short event, void *arg) { char s[1024]; long int rv = 0; int n = 0; GlobalInfo *g = (GlobalInfo *)arg; (void)fd; (void)event; do { s[0]='\0'; rv = fscanf(g->input, "%1023s%n", s, &n); s[n]='\0'; if(n && s[0]) { if(!strcmp(s, "stop")) { |
︙ | ︙ | |||
423 424 425 426 427 428 429 | static void clean_fifo(GlobalInfo *g) { event_del(&g->fifo_event); fclose(g->input); unlink(fifo); } | | > > | 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 | static void clean_fifo(GlobalInfo *g) { event_del(&g->fifo_event); fclose(g->input); unlink(fifo); } int main(int argc, char **argv) { GlobalInfo g; (void)argc; (void)argv; memset(&g, 0, sizeof(GlobalInfo)); g.evbase = event_base_new(); init_fifo(&g); g.multi = curl_multi_init(); evtimer_assign(&g.timer_event, g.evbase, timer_cb, &g); |
︙ | ︙ |
Added jni/curl/docs/examples/http3-present.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* <DESC> * Checks if HTTP/3 support is present in libcurl. * </DESC> */ #include <stdio.h> #include <curl/curl.h> int main(void) { curl_version_info_data *ver; curl_global_init(CURL_GLOBAL_ALL); ver = curl_version_info(CURLVERSION_NOW); if(ver->features & CURL_VERSION_HTTP2) printf("HTTP/2 support is present\n"); if(ver->features & CURL_VERSION_HTTP3) printf("HTTP/3 support is present\n"); if(ver->features & CURL_VERSION_ALTSVC) printf("Alt-svc support is present\n"); curl_global_cleanup(); return 0; } |
Added jni/curl/docs/examples/http3.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* <DESC> * Very simple HTTP/3 GET * </DESC> */ #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); /* Forcing HTTP/3 will make the connection fail if the server isn't accessible over QUIC + HTTP/3 on the given host and port. Consider using CURLOPT_ALTSVC instead! */ curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_3); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } return 0; } |
Added jni/curl/docs/examples/imap-authzid.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* <DESC> * IMAP example showing how to retreieve e-mails from a shared mailed box * </DESC> */ #include <stdio.h> #include <curl/curl.h> /* This is a simple example showing how to fetch mail using libcurl's IMAP * capabilities. * * Note that this example requires libcurl 7.66.0 or above. */ int main(void) { CURL *curl; CURLcode res = CURLE_OK; curl = curl_easy_init(); if(curl) { /* Set the username and password */ curl_easy_setopt(curl, CURLOPT_USERNAME, "user"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret"); /* Set the authorisation identity (identity to act as) */ curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "shared-mailbox"); /* Force PLAIN authentication */ curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=PLAIN"); /* This will fetch message 1 from the user's inbox */ curl_easy_setopt(curl, CURLOPT_URL, "imap://imap.example.com/INBOX/;UID=1"); /* Perform the fetch */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* Always cleanup */ curl_easy_cleanup(curl); } return (int)res; } |
Added jni/curl/docs/examples/pop3-authzid.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* <DESC> * POP3 example showing how to retrieve e-mails from a shared mailbox * </DESC> */ #include <stdio.h> #include <curl/curl.h> /* This is a simple example showing how to retrieve mail using libcurl's POP3 * capabilities. * * Note that this example requires libcurl 7.66.0 or above. */ int main(void) { CURL *curl; CURLcode res = CURLE_OK; curl = curl_easy_init(); if(curl) { /* Set the username and password */ curl_easy_setopt(curl, CURLOPT_USERNAME, "user"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret"); /* Set the authorisation identity (identity to act as) */ curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "shared-mailbox"); /* Force PLAIN authentication */ curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=PLAIN"); /* This will retrieve message 1 from the user's mailbox */ curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1"); /* Perform the retr */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* Always cleanup */ curl_easy_cleanup(curl); } return (int)res; } |
Added jni/curl/docs/examples/smtp-authzid.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* <DESC> * Send e-mail on behalf of another user with SMTP * </DESC> */ #include <stdio.h> #include <string.h> #include <curl/curl.h> /* * This is a simple example show how to send an email using libcurl's SMTP * capabilities. * * Note that this example requires libcurl 7.66.0 or above. */ /* The libcurl options want plain addresses, the viewable headers in the mail * can very well get a full name as well. */ #define FROM_ADDR "<ursel@example.org>" #define SENDER_ADDR "<kurt@example.org>" #define TO_ADDR "<addressee@example.net>" #define FROM_MAIL "Ursel " FROM_ADDR #define SENDER_MAIL "Kurt " SENDER_ADDR #define TO_MAIL "A Receiver " TO_ADDR static const char *payload_text[] = { "Date: Mon, 29 Nov 2010 21:54:29 +1100\r\n", "To: " TO_MAIL "\r\n", "From: " FROM_MAIL "\r\n", "Sender: " SENDER_MAIL "\r\n", "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@" "rfcpedant.example.org>\r\n", "Subject: SMTP example message\r\n", "\r\n", /* empty line to divide headers from body, see RFC5322 */ "The body of the message starts here.\r\n", "\r\n", "It could be a lot of lines, could be MIME encoded, whatever.\r\n", "Check RFC5322.\r\n", NULL }; struct upload_status { int lines_read; }; static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) { struct upload_status *upload_ctx = (struct upload_status *)userp; const char *data; if((size == 0) || (nmemb == 0) || ((size*nmemb) < 1)) { return 0; } data = payload_text[upload_ctx->lines_read]; if(data) { size_t len = strlen(data); memcpy(ptr, data, len); upload_ctx->lines_read++; return len; } return 0; } int main(void) { CURL *curl; CURLcode res = CURLE_OK; struct curl_slist *recipients = NULL; struct upload_status upload_ctx; upload_ctx.lines_read = 0; curl = curl_easy_init(); if(curl) { /* This is the URL for your mailserver. In this example we connect to the smtp-submission port as we require an authenticated connection. */ curl_easy_setopt(curl, CURLOPT_URL, "smtp://mail.example.com:587"); /* Set the username and password */ curl_easy_setopt(curl, CURLOPT_USERNAME, "kurt"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "xipj3plmq"); /* Set the authorisation identity (identity to act as) */ curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "ursel"); /* Force PLAIN authentication */ curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=PLAIN"); /* Note that this option isn't strictly required, omitting it will result * in libcurl sending the MAIL FROM command with empty sender data. All * autoresponses should have an empty reverse-path, and should be directed * to the address in the reverse-path which triggered them. Otherwise, * they could cause an endless loop. See RFC 5321 Section 4.5.5 for more * details. */ curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM_ADDR); /* Add a recipient, in this particular case it corresponds to the * To: addressee in the header. */ recipients = curl_slist_append(recipients, TO_ADDR); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients); /* We're using a callback function to specify the payload (the headers and * body of the message). You could just use the CURLOPT_READDATA option to * specify a FILE pointer to read from. */ curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source); curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); /* Send the message */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* Free the list of recipients */ curl_slist_free_all(recipients); /* curl won't send the QUIT command until you call cleanup, so you should * be able to re-use this connection for additional messages (setting * CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and calling * curl_easy_perform() again. It may not be a good idea to keep the * connection open for a very long time though (more than a few minutes * may result in the server timing out the connection), and you do want to * clean up in the end. */ curl_easy_cleanup(curl); } return (int)res; } |
Changes to jni/curl/docs/libcurl/Makefile.in.
︙ | ︙ | |||
561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
675 676 677 678 679 680 681 682 683 684 685 686 687 688 | curl_multi_add_handle.3 \ curl_multi_assign.3 \ curl_multi_cleanup.3 \ curl_multi_fdset.3 \ curl_multi_info_read.3 \ curl_multi_init.3 \ curl_multi_perform.3 \ curl_multi_remove_handle.3 \ curl_multi_setopt.3 \ curl_multi_socket.3 \ curl_multi_socket_action.3 \ curl_multi_socket_all.3 \ curl_multi_strerror.3 \ curl_multi_timeout.3 \ | > | 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 | curl_multi_add_handle.3 \ curl_multi_assign.3 \ curl_multi_cleanup.3 \ curl_multi_fdset.3 \ curl_multi_info_read.3 \ curl_multi_init.3 \ curl_multi_perform.3 \ curl_multi_poll.3 \ curl_multi_remove_handle.3 \ curl_multi_setopt.3 \ curl_multi_socket.3 \ curl_multi_socket_action.3 \ curl_multi_socket_all.3 \ curl_multi_strerror.3 \ curl_multi_timeout.3 \ |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/Makefile.inc.
︙ | ︙ | |||
42 43 44 45 46 47 48 49 50 51 52 53 54 55 | curl_multi_add_handle.3 \ curl_multi_assign.3 \ curl_multi_cleanup.3 \ curl_multi_fdset.3 \ curl_multi_info_read.3 \ curl_multi_init.3 \ curl_multi_perform.3 \ curl_multi_remove_handle.3 \ curl_multi_setopt.3 \ curl_multi_socket.3 \ curl_multi_socket_action.3 \ curl_multi_socket_all.3 \ curl_multi_strerror.3 \ curl_multi_timeout.3 \ | > | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | curl_multi_add_handle.3 \ curl_multi_assign.3 \ curl_multi_cleanup.3 \ curl_multi_fdset.3 \ curl_multi_info_read.3 \ curl_multi_init.3 \ curl_multi_perform.3 \ curl_multi_poll.3 \ curl_multi_remove_handle.3 \ curl_multi_setopt.3 \ curl_multi_socket.3 \ curl_multi_socket_action.3 \ curl_multi_socket_all.3 \ curl_multi_strerror.3 \ curl_multi_timeout.3 \ |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_cleanup.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_easy_cleanup 3 "August 09, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_cleanup - End a libcurl easy handle .SH SYNOPSIS .B #include <curl/curl.h> .BI "void curl_easy_cleanup(CURL *" handle ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_duphandle.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_easy_duphandle 3 "March 01, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_duphandle - Clone a libcurl session handle .SH SYNOPSIS .B #include <curl/curl.h> .BI "CURL *curl_easy_duphandle(CURL *"handle ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_escape.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_easy_escape 3 "August 12, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_escape - URL encodes the given string .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "char *curl_easy_escape( CURL *" curl ", const char *" string |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_getinfo.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_easy_getinfo 3 "August 06, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_getinfo - extract information from a curl handle .SH SYNOPSIS .B #include <curl/curl.h> .B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );" |
︙ | ︙ | |||
154 155 156 157 158 159 160 161 162 163 164 165 166 167 | .IP CURLINFO_CONTENT_LENGTH_UPLOAD (Deprecated) Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD(3)\fP .IP CURLINFO_CONTENT_LENGTH_UPLOAD_T Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP .IP CURLINFO_CONTENT_TYPE Content type from the Content-Type header. See \fICURLINFO_CONTENT_TYPE(3)\fP .IP CURLINFO_PRIVATE User's private data pointer. See \fICURLINFO_PRIVATE(3)\fP .IP CURLINFO_HTTPAUTH_AVAIL Available HTTP authentication methods. See \fICURLINFO_HTTPAUTH_AVAIL(3)\fP .IP CURLINFO_PROXYAUTH_AVAIL | > > > | 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | .IP CURLINFO_CONTENT_LENGTH_UPLOAD (Deprecated) Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD(3)\fP .IP CURLINFO_CONTENT_LENGTH_UPLOAD_T Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP .IP CURLINFO_CONTENT_TYPE Content type from the Content-Type header. See \fICURLINFO_CONTENT_TYPE(3)\fP .IP CURLINFO_RETRY_AFTER The value from the from the Retry-After header. See \fICURLINFO_RETRY_AFTER(3)\fP .IP CURLINFO_PRIVATE User's private data pointer. See \fICURLINFO_PRIVATE(3)\fP .IP CURLINFO_HTTPAUTH_AVAIL Available HTTP authentication methods. See \fICURLINFO_HTTPAUTH_AVAIL(3)\fP .IP CURLINFO_PROXYAUTH_AVAIL |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_init.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_easy_init 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_init - Start a libcurl easy session .SH SYNOPSIS .B #include <curl/curl.h> .BI "CURL *curl_easy_init( );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_pause.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_easy_pause 3 "May 01, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_pause - pause and unpause a connection .SH SYNOPSIS .B #include <curl/curl.h> .BI "CURLcode curl_easy_pause(CURL *"handle ", int "bitmask " );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_perform.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_easy_perform 3 "September 23, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_perform - perform a blocking file transfer .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_easy_perform(CURL *" easy_handle ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_recv.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_easy_recv 3 "December 18, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_recv - receives raw data on an "easy" connection .SH SYNOPSIS .B #include <curl/easy.h> .sp .BI "CURLcode curl_easy_recv( CURL *" curl ", void *" buffer "," |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_reset.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_easy_reset 3 "September 23, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_reset - reset all options of a libcurl session handle .SH SYNOPSIS .B #include <curl/curl.h> .BI "void curl_easy_reset(CURL *"handle ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_send.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_easy_send 3 "December 18, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_send - sends raw data over an "easy" connection .SH SYNOPSIS .B #include <curl/easy.h> .sp .BI "CURLcode curl_easy_send( CURL *" curl ", const void *" buffer "," |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_setopt.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_easy_setopt 3 "August 09, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_setopt \- set options for a curl easy handle .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter); |
︙ | ︙ | |||
253 254 255 256 257 258 259 260 261 262 263 264 265 266 | Proxy TLS authentication password. See \fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP .IP CURLOPT_TLSAUTH_TYPE TLS authentication methods. See \fICURLOPT_TLSAUTH_TYPE(3)\fP .IP CURLOPT_PROXY_TLSAUTH_TYPE Proxy TLS authentication methods. See \fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP .IP CURLOPT_PROXYAUTH HTTP proxy authentication methods. See \fICURLOPT_PROXYAUTH(3)\fP .IP CURLOPT_SASL_IR Enable SASL initial response. See \fICURLOPT_SASL_IR(3)\fP .IP CURLOPT_XOAUTH2_BEARER OAuth2 bearer token. See \fICURLOPT_XOAUTH2_BEARER(3)\fP .IP CURLOPT_DISALLOW_USERNAME_IN_URL Don't allow username in URL. See \fICURLOPT_DISALLOW_USERNAME_IN_URL(3)\fP .SH HTTP OPTIONS | > > | 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | Proxy TLS authentication password. See \fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP .IP CURLOPT_TLSAUTH_TYPE TLS authentication methods. See \fICURLOPT_TLSAUTH_TYPE(3)\fP .IP CURLOPT_PROXY_TLSAUTH_TYPE Proxy TLS authentication methods. See \fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP .IP CURLOPT_PROXYAUTH HTTP proxy authentication methods. See \fICURLOPT_PROXYAUTH(3)\fP .IP CURLOPT_SASL_AUTHZID SASL authorisation identity (identity to act as). See \fICURLOPT_SASL_AUTHZID(3)\fP .IP CURLOPT_SASL_IR Enable SASL initial response. See \fICURLOPT_SASL_IR(3)\fP .IP CURLOPT_XOAUTH2_BEARER OAuth2 bearer token. See \fICURLOPT_XOAUTH2_BEARER(3)\fP .IP CURLOPT_DISALLOW_USERNAME_IN_URL Don't allow username in URL. See \fICURLOPT_DISALLOW_USERNAME_IN_URL(3)\fP .SH HTTP OPTIONS |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_strerror.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_easy_strerror 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_strerror - return string describing error code .SH SYNOPSIS #include <curl/curl.h> const char *curl_easy_strerror(CURLcode errornum); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_easy_unescape.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_easy_unescape 3 "October 04, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_easy_unescape - URL decodes the given string .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "char *curl_easy_unescape( CURL *" curl ", const char *" url |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_escape.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_escape 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_escape - URL encodes the given string .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "char *curl_escape( const char *" url ", int "length " );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_formadd.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_formadd 3 "December 11, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_formadd - add a section to a multipart/formdata HTTP POST .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_formfree.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_formfree 3 "August 09, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_formfree - free a previously build multipart/formdata HTTP POST chain .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "void curl_formfree(struct curl_httppost *" form); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_formget.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_formget 3 "September 02, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_formget - serialize a previously built multipart/formdata HTTP POST chain .SH SYNOPSIS .nf .B #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_free.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_free 3 "August 09, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_free - reclaim memory that has been obtained through a libcurl call .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "void curl_free( char *" ptr " );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_getdate.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_getdate 3 "January 18, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_getdate - Convert a date string to number of seconds .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "time_t curl_getdate(char *" datestring ", time_t *"now " );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_getenv.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_getenv 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_getenv - return value for environment name .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "char *curl_getenv(const char *" name ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_global_cleanup.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_global_cleanup 3 "September 20, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_global_cleanup - global libcurl cleanup .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "void curl_global_cleanup(void);" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_global_init.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_global_init 3 "April 17, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_global_init - Global libcurl initialisation .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_global_init(long " flags ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_global_init_mem.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_global_init_mem 3 "August 11, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_global_init_mem - Global libcurl initialisation with memory callbacks .SH SYNOPSIS .B #include <curl/curl.h> .nf .B "CURLcode curl_global_init_mem(long " flags, |
︙ | ︙ | |||
56 57 58 59 60 61 62 63 64 65 | To replace calloc() .RE This function is otherwise the same as \fIcurl_global_init(3)\fP, please refer to that man page for documentation. .SH "CAUTION" Manipulating these gives considerable powers to the application to severely screw things up for libcurl. Take care! .SH "SEE ALSO" .BR curl_global_init "(3), " .BR curl_global_cleanup "(3), " | > > | 56 57 58 59 60 61 62 63 64 65 66 67 | To replace calloc() .RE This function is otherwise the same as \fIcurl_global_init(3)\fP, please refer to that man page for documentation. .SH "CAUTION" Manipulating these gives considerable powers to the application to severely screw things up for libcurl. Take care! .SH AVAILABILITY Added in 7.12.0 .SH "SEE ALSO" .BR curl_global_init "(3), " .BR curl_global_cleanup "(3), " |
Changes to jni/curl/docs/libcurl/curl_global_sslset.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_global_sslset 3 "October 30, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_global_sslset - Select SSL backend to use with libcurl .SH SYNOPSIS .B #include <curl/curl.h> .nf |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_addpart.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_addpart 3 "September 22, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_addpart - append a new empty part to a mime structure .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "curl_mimepart * curl_mime_addpart(curl_mime * " mime ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_data.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_data 3 "September 22, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_data - set a mime part's body data from memory .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_data(curl_mimepart * " part ", const char * " data |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_data_cb.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_data_cb 3 "April 17, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_data_cb - set a callback-based data source for a mime part's body .SH SYNOPSIS .B #include <curl/curl.h> .sp size_t readfunc(char *buffer, size_t size, size_t nitems, void *arg); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_encoder.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_encoder 3 "September 05, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_encoder - set a mime part's encoder and content transfer encoding .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_encoder(curl_mimepart * " part , |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_filedata.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_filedata 3 "April 17, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_filedata - set a mime part's body data from a file contents .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_filedata(curl_mimepart * " part , |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_filename.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_filename 3 "September 22, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_filename - set a mime part's remote file name .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_filename(curl_mimepart * " part , |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_free.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_free 3 "August 09, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_free - free a previously built mime structure .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "void curl_mime_free(curl_mime *" mime); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_headers.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_headers 3 "September 22, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_headers - set a mime part's custom headers .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_headers(curl_mimepart * " part , |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_init.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_init 3 "September 22, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_init - create a mime handle .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "curl_mime * curl_mime_init(CURL * " easy_handle ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_name.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_name 3 "September 22, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_name - set a mime part's name .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_name(curl_mimepart * " part ", const char * " name ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_subparts.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_subparts 3 "September 05, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_subparts - set subparts of a multipart mime part .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_subparts(curl_mimepart * " part , |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mime_type.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_mime_type 3 "April 17, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_mime_type - set a mime part's content type .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLcode curl_mime_type(curl_mimepart * " part , |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_mprintf.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_printf 3 "April 01, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf, curl_mvsprintf - formatted output conversion .SH SYNOPSIS .B #include <curl/mprintf.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_add_handle.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_add_handle 3 "June 30, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_add_handle - add an easy handle to a multi session .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_assign.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_assign 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_assign \- set data to associate with an internal socket .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_cleanup.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_cleanup 3 "August 09, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_cleanup - close down a multi session .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_fdset.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_fdset 3 "November 09, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_fdset - extracts file descriptor information from a multi handle .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_info_read.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_info_read 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_info_read - read multi stack informationals .SH SYNOPSIS #include <curl/curl.h> CURLMsg *curl_multi_info_read( CURLM *multi_handle, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_init.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_init 3 "September 23, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_init - create a multi handle .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLM *curl_multi_init( );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_perform.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_perform 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_perform - reads/writes available data from each easy handle .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles); |
︙ | ︙ |
Added jni/curl/docs/libcurl/curl_multi_poll.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_poll 3 "July 29, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_poll - polls on all easy handles in a multi handle .SH SYNOPSIS .nf #include <curl/curl.h> CURLMcode curl_multi_poll(CURLM *multi_handle, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *numfds); .ad .SH DESCRIPTION \fIcurl_multi_poll(3)\fP polls all file descriptors used by the curl easy handles contained in the given multi handle set. It will block until activity is detected on at least one of the handles or \fItimeout_ms\fP has passed. Alternatively, if the multi handle has a pending internal timeout that has a shorter expiry time than \fItimeout_ms\fP, that shorter time will be used instead to make sure timeout accuracy is reasonably kept. The calling application may pass additional curl_waitfd structures which are similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call. On completion, if \fInumfds\fP is non-NULL, it will be populated with the total number of file descriptors on which interesting events occurred. This number can include both libcurl internal descriptors as well as descriptors provided in \fIextra_fds\fP. If no extra file descriptors are provided and libcurl has no file descriptor to offer to wait for, this function will instead wait during \fItimeout_ms\fP milliseconds (or shorter if an internal timer indicates so). This is the detail that makes this function different than \fIcurl_multi_wait(3)\fP. This function is encouraged to be used instead of select(3) when using the multi interface to allow applications to easier circumvent the common problem with 1024 maximum file descriptors. .SH curl_waitfd .nf struct curl_waitfd { curl_socket_t fd; short events; short revents; }; .fi .IP CURL_WAIT_POLLIN Bit flag to curl_waitfd.events indicating the socket should poll on read events such as new data received. .IP CURL_WAIT_POLLPRI Bit flag to curl_waitfd.events indicating the socket should poll on high priority read events such as out of band data. .IP CURL_WAIT_POLLOUT Bit flag to curl_waitfd.events indicating the socket should poll on write events such as the socket being clear to write without blocking. .SH EXAMPLE .nf CURL *easy_handle; CURLM *multi_handle; /* add the individual easy handle */ curl_multi_add_handle(multi_handle, easy_handle); do { CURLMcode mc; int numfds; mc = curl_multi_perform(multi_handle, &still_running); if(mc == CURLM_OK) { /* wait for activity or timeout */ mc = curl_multi_poll(multi_handle, NULL, 0, 1000, &numfds); } if(mc != CURLM_OK) { fprintf(stderr, "curl_multi failed, code %d.\\n", mc); break; } } while(still_running); curl_multi_remove_handle(multi_handle, easy_handle); .fi .SH RETURN VALUE CURLMcode type, general libcurl multi interface error code. See \fIlibcurl-errors(3)\fP .SH AVAILABILITY This function was added in libcurl 7.66.0. .SH "SEE ALSO" .BR curl_multi_fdset "(3), " curl_multi_perform "(3), " curl_multi_wait "(3)" |
Changes to jni/curl/docs/libcurl/curl_multi_remove_handle.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_remove_handle 3 "February 19, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_remove_handle - remove an easy handle from a multi session .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_setopt.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_setopt 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_setopt \- set options for a curl multi handle .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_socket.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_socket 3 "June 30, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_socket \- reads/writes available data .SH SYNOPSIS .nf #include <curl/curl.h> CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_socket_action.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_socket_action 3 "June 10, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_socket_action \- reads/writes available data given an action .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_strerror.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_strerror 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_strerror - return string describing error code .SH SYNOPSIS .nf .B #include <curl/curl.h> .BI "const char *curl_multi_strerror(CURLMcode " errornum ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_timeout.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_timeout 3 "September 23, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_timeout \- how long to wait for action before proceeding .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_multi_wait.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_multi_wait 3 "June 26, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_multi_wait - polls on all easy handles in a multi handle .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_share_cleanup.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_share_cleanup 3 "August 09, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_share_cleanup - Clean up a shared object .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLSHcode curl_share_cleanup(CURLSH *" share_handle ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_share_init.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_share_init 3 "September 23, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_share_init - Create a shared object .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "CURLSH *curl_share_init( );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_share_setopt.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_share_setopt 3 "June 04, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_share_setopt - Set options for a shared object .SH SYNOPSIS .B #include <curl/curl.h> .sp CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_share_strerror.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_share_strerror 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_share_strerror - return string describing error code .SH SYNOPSIS .nf .B #include <curl/curl.h> .BI "const char *curl_share_strerror(CURLSHcode " errornum ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_slist_append.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_slist_append 3 "January 02, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_slist_append - add a string to an slist .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "struct curl_slist *curl_slist_append(struct curl_slist *" list, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_slist_free_all.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_slist_free_all 3 "September 23, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_slist_free_all - free an entire curl_slist list .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "void curl_slist_free_all(struct curl_slist *" list); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_strequal.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_strequal 3 "June 29, 2017" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_strequal, curl_strnequal - case insensitive string comparisons .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "int curl_strequal(char *" str1 ", char *" str2 ");" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_unescape.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_unescape 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_unescape - URL decodes the given string .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "char *curl_unescape( const char *" url ", int "length " );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_url.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_url 3 "March 22, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_url - returns a new CURLU handle .SH SYNOPSIS .B #include <curl/curl.h> CURLU *curl_url(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_url_cleanup.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_url_cleanup 3 "September 08, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_url_cleanup - free a CURLU handle .SH SYNOPSIS .B #include <curl/curl.h> void curl_url_cleanup(CURLU *handle); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_url_dup.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_url_dup 3 "September 08, 2018" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_url_dup - duplicate a CURLU handle .SH SYNOPSIS .B #include <curl/curl.h> CURLU *curl_url_dup(CURLU *inhandle); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_url_get.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_url_get 3 "May 03, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_url_get - extract a part from a URL .SH SYNOPSIS .B #include <curl/curl.h> .nf |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_url_set.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_url_set 3 "May 03, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_url_set - set a URL part .SH SYNOPSIS .B #include <curl/curl.h> CURLUcode curl_url_set(CURLU *url, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_version.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH curl_version 3 "February 03, 2016" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_version - returns the libcurl version string .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "char *curl_version( );" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/curl_version_info.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH curl_version_info 3 "August 13, 2019" "libcurl 7.66.0" "libcurl Manual" .SH NAME curl_version_info - returns run-time libcurl version info .SH SYNOPSIS .B #include <curl/curl.h> .sp .BI "curl_version_info_data *curl_version_info( CURLversion "age ");" |
︙ | ︙ | |||
75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /* when 'age' is 4 or higher (7.57.0 or later), the members below also exist */ unsigned int brotli_ver_num; /* Numeric Brotli version (MAJOR << 24) | (MINOR << 12) | PATCH */ const char *brotli_version; /* human readable string. */ } curl_version_info_data; .fi \fIage\fP describes what the age of this struct is. The number depends on how new the libcurl you're using is. You are however guaranteed to get a struct that you have a matching struct for in the header, as you tell libcurl your "age" with the input argument. | > > > > > > > > > | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | /* when 'age' is 4 or higher (7.57.0 or later), the members below also exist */ unsigned int brotli_ver_num; /* Numeric Brotli version (MAJOR << 24) | (MINOR << 12) | PATCH */ const char *brotli_version; /* human readable string. */ /* when 'age is CURLVERSION_SIXTH or alter (7.66.0 or later), these fields also exist */ unsigned int nghttp2_ver_num; /* Numeric nghttp2 version (MAJOR << 16) | (MINOR << 8) | PATCH */ const char *nghttp2_version; /* human readable string. */ const char *quic_version; /* human readable quic (+ HTTP/3) library + version or NULL */ } curl_version_info_data; .fi \fIage\fP describes what the age of this struct is. The number depends on how new the libcurl you're using is. You are however guaranteed to get a struct that you have a matching struct for in the header, as you tell libcurl your "age" with the input argument. |
︙ | ︙ | |||
96 97 98 99 100 101 102 103 104 105 106 107 108 109 | \fIhost\fP is an ascii string showing what host information that this libcurl was built for. As discovered by a configure script or set by the build environment. \fIfeatures\fP can have none, one or more bits set, and the currently defined bits are: .RS .IP CURL_VERSION_IPV6 supports IPv6 .IP CURL_VERSION_KERBEROS4 supports Kerberos V4 (when using FTP) .IP CURL_VERSION_KERBEROS5 supports Kerberos V5 authentication for FTP, IMAP, POP3, SMTP and SOCKSv5 proxy (Added in 7.40.0) | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | > > | | | | | < < | | | | | | < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | \fIhost\fP is an ascii string showing what host information that this libcurl was built for. As discovered by a configure script or set by the build environment. \fIfeatures\fP can have none, one or more bits set, and the currently defined bits are: .RS .IP CURL_VERSION_ALTSVC HTTP Alt-Svc parsing and the associated options (Added in 7.64.1) .IP CURL_VERSION_ASYNCHDNS libcurl was built with support for asynchronous name lookups, which allows more exact timeouts (even on Windows) and less blocking when using the multi interface. (added in 7.10.7) .IP CURL_VERSION_BROTLI supports HTTP Brotli content encoding using libbrotlidec (Added in 7.57.0) .IP CURL_VERSION_CONV libcurl was built with support for character conversions, as provided by the CURLOPT_CONV_* callbacks. (Added in 7.15.4) .IP CURL_VERSION_CURLDEBUG libcurl was built with memory tracking debug capabilities. This is mainly of interest for libcurl hackers. (added in 7.19.6) .IP CURL_VERSION_DEBUG libcurl was built with debug capabilities (added in 7.10.6) .IP CURL_VERSION_GSSAPI libcurl was built with support for GSS-API. This makes libcurl use provided functions for Kerberos and SPNEGO authentication. It also allows libcurl to use the current user credentials without the app having to pass them on. (Added in 7.38.0) .IP CURL_VERSION_GSSNEGOTIATE supports HTTP GSS-Negotiate (added in 7.10.6) .IP CURL_VERSION_HTTPS_PROXY libcurl was built with support for HTTPS-proxy. (Added in 7.52.0) .IP CURL_VERSION_HTTP2 libcurl was built with support for HTTP2. (Added in 7.33.0) .IP CURL_VERSION_HTTP3 HTTP/3 and QUIC support are built-in (Added in 7.66.0) .IP CURL_VERSION_IDN libcurl was built with support for IDNA, domain names with international letters. (Added in 7.12.0) .IP CURL_VERSION_IPV6 supports IPv6 .IP CURL_VERSION_KERBEROS4 supports Kerberos V4 (when using FTP) .IP CURL_VERSION_KERBEROS5 supports Kerberos V5 authentication for FTP, IMAP, POP3, SMTP and SOCKSv5 proxy (Added in 7.40.0) .IP CURL_VERSION_LARGEFILE libcurl was built with support for large files. (Added in 7.11.1) .IP CURL_VERSION_LIBZ supports HTTP deflate using libz (Added in 7.10) .IP CURL_VERSION_MULTI_SSL libcurl was built with multiple SSL backends. For details, see \fIcurl_global_sslset(3)\fP. (Added in 7.56.0) .IP CURL_VERSION_NTLM supports HTTP NTLM (added in 7.10.6) .IP CURL_VERSION_NTLM_WB libcurl was built with support for NTLM delegation to a winbind helper. (Added in 7.22.0) .IP CURL_VERSION_PSL libcurl was built with support for Mozilla's Public Suffix List. This makes libcurl ignore cookies with a domain that's on the list. (Added in 7.47.0) .IP CURL_VERSION_SPNEGO libcurl was built with support for SPNEGO authentication (Simple and Protected GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8) .IP CURL_VERSION_SSL supports SSL (HTTPS/FTPS) (Added in 7.10) .IP CURL_VERSION_SSPI libcurl was built with support for SSPI. This is only available on Windows and makes libcurl use Windows-provided functions for Kerberos, NTLM, SPNEGO and Digest authentication. It also allows libcurl to use the current user credentials without the app having to pass them on. (Added in 7.13.2) .IP CURL_VERSION_TLSAUTH_SRP libcurl was built with support for TLS-SRP. (Added in 7.21.4) .IP CURL_VERSION_UNIX_SOCKETS libcurl was built with support for Unix domain sockets. (Added in 7.40.0) .RE \fIssl_version\fP is an ASCII string for the TLS library name + version used. If libcurl has no SSL support, this is NULL. For example "Schannel", \&"SecureTransport" or "OpenSSL/1.1.0g". \fIssl_version_num\fP is always 0. |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-easy.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH libcurl 3 "February 03, 2016" "libcurl 7.66.0" "libcurl easy interface" .SH NAME libcurl-easy \- easy interface overview .SH DESCRIPTION When using libcurl's "easy" interface you init your session and get a handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle. |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-env.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH libcurl-env 3 "April 17, 2018" "libcurl 7.66.0" "libcurl environment variables" .SH NAME libcurl-env \- environment variables libcurl understands .SH DESCRIPTION libcurl reads and understands a set of environment variables that if set will control and change behaviors. This is the full list of variables to set and description of what they do. Also note that curl, the command line tool, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-errors.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH libcurl-errors 3 "May 11, 2019" "libcurl 7.66.0" "libcurl errors" .SH NAME libcurl-errors \- error codes in libcurl .SH DESCRIPTION This man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem are also included. .SH "CURLcode" |
︙ | ︙ | |||
251 252 253 254 255 256 257 258 259 260 261 262 263 264 | Failed to match the pinned key specified with \fICURLOPT_PINNEDPUBLICKEY(3)\fP. .IP "CURLE_SSL_INVALIDCERTSTATUS (91)" Status returned failure when asked with \fICURLOPT_SSL_VERIFYSTATUS(3)\fP. .IP "CURLE_HTTP2_STREAM (92)" Stream error in the HTTP/2 framing layer. .IP "CURLE_RECURSIVE_API_CALL (93)" An API function was called from inside a callback. .IP "CURLE_OBSOLETE*" These error codes will never be returned. They were used in an old libcurl version and are currently unused. .SH "CURLMcode" This is the generic return code used by functions in the libcurl multi interface. Also consider \fIcurl_multi_strerror(3)\fP. .IP "CURLM_CALL_MULTI_PERFORM (-1)" | > > | 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | Failed to match the pinned key specified with \fICURLOPT_PINNEDPUBLICKEY(3)\fP. .IP "CURLE_SSL_INVALIDCERTSTATUS (91)" Status returned failure when asked with \fICURLOPT_SSL_VERIFYSTATUS(3)\fP. .IP "CURLE_HTTP2_STREAM (92)" Stream error in the HTTP/2 framing layer. .IP "CURLE_RECURSIVE_API_CALL (93)" An API function was called from inside a callback. .IP "CURLE_AUTH_ERROR (94)" An authentication function returned an error. .IP "CURLE_OBSOLETE*" These error codes will never be returned. They were used in an old libcurl version and are currently unused. .SH "CURLMcode" This is the generic return code used by functions in the libcurl multi interface. Also consider \fIcurl_multi_strerror(3)\fP. .IP "CURLM_CALL_MULTI_PERFORM (-1)" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-multi.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH libcurl-multi 3 "June 30, 2018" "libcurl 7.66.0" "libcurl multi interface" .SH NAME libcurl-multi \- how to use the multi interface .SH DESCRIPTION This is an overview on how to use the libcurl multi interface in your C programs. There are specific man pages for each function mentioned in here. There's also the \fIlibcurl-tutorial(3)\fP man page for a complete |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-security.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH libcurl-security 3 "July 16, 2019" "libcurl 7.66.0" "libcurl security" .SH NAME libcurl-security \- security considerations when using libcurl .SH "Security" The libcurl project takes security seriously. The library is written with caution and precautions are taken to mitigate many kinds of risks encountered while operating with potentially malicious servers on the Internet. It is a |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-share.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH libcurl-share 3 "November 27, 2017" "libcurl 7.66.0" "libcurl share interface" .SH NAME libcurl-share \- how to use the share interface .SH DESCRIPTION This is an overview on how to use the libcurl share interface in your C programs. There are specific man pages for each function mentioned in here. |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-symbols.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | < < | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH libcurl-symbols 3 "sep 11, 2019" "libcurl 7.41.0" "libcurl symbols" .SH NAME libcurl-symbols \- libcurl symbol version information .SH "libcurl symbols" This man page details version information for public symbols provided in the libcurl header files. This lists the first version in which the symbol was introduced and for some symbols two additional information pieces: The first version in which the symbol is marked "deprecated" - meaning that since that version no new code should be written to use the symbol as it is marked for getting removed in a future. The last version that featured the specific symbol. Using the symbol in source code will make it no longer compile error-free after that specified version. This man page is automatically generated from the symbols-in-versions file. .IP CURLALTSVC_H1 Introduced in 7.64.1 .IP CURLALTSVC_H2 Introduced in 7.64.1 .IP CURLALTSVC_H3 Introduced in 7.64.1 .IP CURLALTSVC_IMMEDIATELY |
︙ | ︙ | |||
88 89 90 91 92 93 94 95 96 97 98 99 100 101 | Introduced in 7.7 .IP CURLE_ABORTED_BY_CALLBACK Introduced in 7.1 .IP CURLE_AGAIN Introduced in 7.18.2 .IP CURLE_ALREADY_COMPLETE Introduced in 7.7.2 .IP CURLE_BAD_CALLING_ORDER Introduced in 7.1 Deprecated since 7.17.0 .IP CURLE_BAD_CONTENT_ENCODING Introduced in 7.10 .IP CURLE_BAD_DOWNLOAD_RESUME Introduced in 7.10 | > > | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | Introduced in 7.7 .IP CURLE_ABORTED_BY_CALLBACK Introduced in 7.1 .IP CURLE_AGAIN Introduced in 7.18.2 .IP CURLE_ALREADY_COMPLETE Introduced in 7.7.2 .IP CURLE_AUTH_ERROR Introduced in 7.66.0 .IP CURLE_BAD_CALLING_ORDER Introduced in 7.1 Deprecated since 7.17.0 .IP CURLE_BAD_CONTENT_ENCODING Introduced in 7.10 .IP CURLE_BAD_DOWNLOAD_RESUME Introduced in 7.10 |
︙ | ︙ | |||
592 593 594 595 596 597 598 599 600 601 602 603 604 605 | Introduced in 7.61.0 .IP CURLINFO_REDIRECT_URL Introduced in 7.18.2 .IP CURLINFO_REQUEST_SIZE Introduced in 7.4.1 .IP CURLINFO_RESPONSE_CODE Introduced in 7.10.8 .IP CURLINFO_RTSP_CLIENT_CSEQ Introduced in 7.20.0 .IP CURLINFO_RTSP_CSEQ_RECV Introduced in 7.20.0 .IP CURLINFO_RTSP_SERVER_CSEQ Introduced in 7.20.0 .IP CURLINFO_RTSP_SESSION_ID | > > | 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 | Introduced in 7.61.0 .IP CURLINFO_REDIRECT_URL Introduced in 7.18.2 .IP CURLINFO_REQUEST_SIZE Introduced in 7.4.1 .IP CURLINFO_RESPONSE_CODE Introduced in 7.10.8 .IP CURLINFO_RETRY_AFTER Introduced in 7.66.0 .IP CURLINFO_RTSP_CLIENT_CSEQ Introduced in 7.20.0 .IP CURLINFO_RTSP_CSEQ_RECV Introduced in 7.20.0 .IP CURLINFO_RTSP_SERVER_CSEQ Introduced in 7.20.0 .IP CURLINFO_RTSP_SESSION_ID |
︙ | ︙ | |||
1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 | Introduced in 7.20.0 .IP CURLOPT_RTSP_SESSION_ID Introduced in 7.20.0 .IP CURLOPT_RTSP_STREAM_URI Introduced in 7.20.0 .IP CURLOPT_RTSP_TRANSPORT Introduced in 7.20.0 .IP CURLOPT_SASL_IR Introduced in 7.31.0 .IP CURLOPT_SEEKDATA Introduced in 7.18.0 .IP CURLOPT_SEEKFUNCTION Introduced in 7.18.0 .IP CURLOPT_SERVER_RESPONSE_TIMEOUT | > > | 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 | Introduced in 7.20.0 .IP CURLOPT_RTSP_SESSION_ID Introduced in 7.20.0 .IP CURLOPT_RTSP_STREAM_URI Introduced in 7.20.0 .IP CURLOPT_RTSP_TRANSPORT Introduced in 7.20.0 .IP CURLOPT_SASL_AUTHZID Introduced in 7.66.0 .IP CURLOPT_SASL_IR Introduced in 7.31.0 .IP CURLOPT_SEEKDATA Introduced in 7.18.0 .IP CURLOPT_SEEKFUNCTION Introduced in 7.18.0 .IP CURLOPT_SERVER_RESPONSE_TIMEOUT |
︙ | ︙ | |||
1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 | Introduced in 7.16.1 .IP CURLVERSION_NOW Introduced in 7.10 .IP CURLVERSION_SECOND Introduced in 7.11.1 .IP CURLVERSION_THIRD Introduced in 7.12.0 .IP CURL_CHUNK_BGN_FUNC_FAIL Introduced in 7.21.0 .IP CURL_CHUNK_BGN_FUNC_OK Introduced in 7.21.0 .IP CURL_CHUNK_BGN_FUNC_SKIP Introduced in 7.21.0 .IP CURL_CHUNK_END_FUNC_FAIL | > > | 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 | Introduced in 7.16.1 .IP CURLVERSION_NOW Introduced in 7.10 .IP CURLVERSION_SECOND Introduced in 7.11.1 .IP CURLVERSION_THIRD Introduced in 7.12.0 .IP CURLVERSION_SIXTH Introduced in 7.66.0 .IP CURL_CHUNK_BGN_FUNC_FAIL Introduced in 7.21.0 .IP CURL_CHUNK_BGN_FUNC_OK Introduced in 7.21.0 .IP CURL_CHUNK_BGN_FUNC_SKIP Introduced in 7.21.0 .IP CURL_CHUNK_END_FUNC_FAIL |
︙ | ︙ | |||
1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 | Introduced in 7.43.0 .IP CURL_HTTP_VERSION_2TLS Introduced in 7.47.0 .IP CURL_HTTP_VERSION_2_0 Introduced in 7.33.0 .IP CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE Introduced in 7.49.0 .IP CURL_HTTP_VERSION_NONE Introduced in 7.9.1 .IP CURL_IPRESOLVE_V4 Introduced in 7.10.8 .IP CURL_IPRESOLVE_V6 Introduced in 7.10.8 .IP CURL_IPRESOLVE_WHATEVER | > > | 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 | Introduced in 7.43.0 .IP CURL_HTTP_VERSION_2TLS Introduced in 7.47.0 .IP CURL_HTTP_VERSION_2_0 Introduced in 7.33.0 .IP CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE Introduced in 7.49.0 .IP CURL_HTTP_VERSION_3 Introduced in 7.66.0 .IP CURL_HTTP_VERSION_NONE Introduced in 7.9.1 .IP CURL_IPRESOLVE_V4 Introduced in 7.10.8 .IP CURL_IPRESOLVE_V6 Introduced in 7.10.8 .IP CURL_IPRESOLVE_WHATEVER |
︙ | ︙ | |||
1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 | .IP CURL_VERSION_GSSAPI Introduced in 7.38.0 .IP CURL_VERSION_GSSNEGOTIATE Introduced in 7.10.6 Deprecated since 7.38.0 .IP CURL_VERSION_HTTP2 Introduced in 7.33.0 .IP CURL_VERSION_HTTPS_PROXY Introduced in 7.52.0 .IP CURL_VERSION_IDN Introduced in 7.12.0 .IP CURL_VERSION_IPV6 Introduced in 7.10 .IP CURL_VERSION_KERBEROS4 | > > | 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 | .IP CURL_VERSION_GSSAPI Introduced in 7.38.0 .IP CURL_VERSION_GSSNEGOTIATE Introduced in 7.10.6 Deprecated since 7.38.0 .IP CURL_VERSION_HTTP2 Introduced in 7.33.0 .IP CURL_VERSION_HTTP3 Introduced in 7.66.0 .IP CURL_VERSION_HTTPS_PROXY Introduced in 7.52.0 .IP CURL_VERSION_IDN Introduced in 7.12.0 .IP CURL_VERSION_IPV6 Introduced in 7.10 .IP CURL_VERSION_KERBEROS4 |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-thread.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH libcurl-thread 3 "June 30, 2019" "libcurl 7.66.0" "libcurl thread safety" .SH NAME libcurl-thread \- libcurl thread safety .SH "Multi-threading with libcurl" libcurl is thread safe but has no internal thread synchronization. You may have to provide your own locking should you meet any of the thread safety exceptions below. |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-tutorial.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH libcurl-tutorial 3 "June 08, 2019" "libcurl 7.66.0" "libcurl programming" .SH NAME libcurl-tutorial \- libcurl programming tutorial .SH "Objective" This document attempts to describe the general principles and some basic approaches to consider when programming with libcurl. The text will focus mainly on the C interface but might apply fairly well on other interfaces as |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl-url.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH libcurl 3 "September 10, 2018" "libcurl 7.66.0" "libcurl url interface" .SH NAME libcurl-url \- URL interface overview .SH DESCRIPTION The URL interface provides a set of functions for parsing and generating URLs. .SH INCLUDE You still only include <curl/curl.h> in your code. Note that the URL API was |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/libcurl.3.
︙ | ︙ | |||
15 16 17 18 19 20 21 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .TH libcurl 3 "July 15, 2017" "libcurl 7.66.0" "libcurl overview" .SH NAME libcurl \- client-side URL transfers .SH DESCRIPTION This is a short overview on how to use libcurl in your C programs. There are specific man pages for each function mentioned in here. There are also the \fIlibcurl-easy(3)\fP man page, the \fIlibcurl-multi(3)\fP man page, the |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_ACTIVESOCKET 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_ACTIVESOCKET \- get the active socket .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_APPCONNECT_TIME 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, double *timep); .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 very near 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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_APPCONNECT_TIME_T 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_APPCONNECT_TIME_T \- get the time until the SSL/SSH handshake is completed .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, curl_off_t *timep); .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 very near 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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CERTINFO.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CERTINFO 3 "November 07, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CERTINFO \- get the TLS certificate chain .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONDITION_UNMET 3 "February 23, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONDITION_UNMET \- get info on unmet time conditional .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, long *unmet); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONNECT_TIME 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONNECT_TIME \- get the time until connect .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep); .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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONNECT_TIME_T 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONNECT_TIME_T \- get the time until connect .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T, curl_off_t *timep); .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 curl = curl_easy_init(); if(curl) { |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "June 15, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content-length of download .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "June 15, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "March 31, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_CONTENT_TYPE 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_CONTENT_TYPE \- get Content-Type .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_COOKIELIST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_COOKIELIST 3 "March 20, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_COOKIELIST \- get all known cookies .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_EFFECTIVE_URL 3 "May 04, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_EFFECTIVE_URL \- get the last used URL .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FILETIME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_FILETIME \- get the remote time of the retrieved document .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FILETIME_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_FILETIME_T \- get the remote time of the retrieved document .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, curl_off_t *timep); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_FTP_ENTRY_PATH 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_HEADER_SIZE 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_HEADER_SIZE \- get size of retrieved headers .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_HTTPAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_HTTP_CONNECTCODE 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | | | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_HTTP_VERSION 3 "August 07, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_HTTP_VERSION \- get the http version used in the connection .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p); .SH DESCRIPTION Pass a pointer to a long to receive the version used in the last http connection. The returned value will be CURL_HTTP_VERSION_1_0, CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0, CURL_HTTP_VERSION_3 or 0 if the version can't be determined. .SH PROTOCOLS HTTP .SH EXAMPLE .nf CURL *curl = curl_easy_init(); if(curl) { CURLcode res; |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LASTSOCKET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_LASTSOCKET 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_LASTSOCKET \- get the last socket used .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LOCAL_IP.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_LOCAL_IP 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_LOCAL_IP \- get local IP address of last connection .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_LOCAL_PORT 3 "March 16, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_LOCAL_PORT \- get the latest local port number .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_NAMELOOKUP_TIME 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_NAMELOOKUP_TIME \- get the name lookup time .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, double *timep); .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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_NAMELOOKUP_TIME_T 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T, curl_off_t *timep); .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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_NUM_CONNECTS 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_NUM_CONNECTS \- get number of created connections .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_OS_ERRNO.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_OS_ERRNO 3 "November 07, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_OS_ERRNO \- get errno number from last connect failure .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PRETRANSFER_TIME 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, double *timep); .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 includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved. It does \fInot\fP involve the sending of the protocol- specific request that triggers 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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PRETRANSFER_TIME_T 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T, curl_off_t *timep); .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 includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved. It does \fInot\fP involve the sending of the protocol- specific request that triggers 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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PRIMARY_IP 3 "March 22, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PRIMARY_IP \- get IP address of last connection .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PRIMARY_PORT 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PRIMARY_PORT \- get the latest destination port number .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIVATE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PRIVATE 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PRIVATE \- get the private pointer .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROTOCOL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PROTOCOL 3 "April 27, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PROTOCOL \- get the protocol used in the connection .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PROXYAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, long *authp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, long *result); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_REDIRECT_COUNT 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_REDIRECT_COUNT \- get the number of redirects .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, long *countp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_REDIRECT_TIME 3 "May 17, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_REDIRECT_TIME \- get the time for all redirection steps .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, double *timep); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_REDIRECT_TIME_T 3 "May 17, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T, curl_off_t *timep); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_REDIRECT_URL 3 "June 24, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_REDIRECT_URL \- get the URL a redirect would go to .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_REQUEST_SIZE 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_REQUEST_SIZE \- get size of sent request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_RESPONSE_CODE 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_RESPONSE_CODE \- get the last response code .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep); |
︙ | ︙ |
Added jni/curl/docs/libcurl/opts/CURLINFO_RETRY_AFTER.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_RETRY_AFTER 3 "August 06, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_RETRY_AFTER \- returns the Retry-After retry delay .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RETRY_AFTER, curl_off_t *retry); .SH DESCRIPTION Pass a pointer to a curl_off_t variable to receive the number of seconds the HTTP server suggesets 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 will alwaus return number of seconds to wait - or zero if there was no header or the header couldn't be parsed. .SH DEFAULT Returns zero delay if there was no header. .SH PROTOCOLS HTTP(S) .SH EXAMPLE .nf CURL *curl = curl_easy_init(); if(curl) { CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, "http://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 curl 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_STDERR "(3), " CURLOPT_HEADERFUNCTION "(3), " |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_RTSP_CLIENT_CSEQ 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, long *cseq); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_RTSP_CSEQ_RECV 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, long *cseq); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_RTSP_SESSION_ID \- get RTSP session ID .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SCHEME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SCHEME 3 "April 08, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SIZE_DOWNLOAD 3 "June 15, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SIZE_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T, curl_off_t *dlp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SIZE_UPLOAD 3 "June 15, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, double *uploadp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SIZE_UPLOAD_T 3 "March 31, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, curl_off_t *uploadp); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SPEED_DOWNLOAD 3 "June 15, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SPEED_DOWNLOAD \- get download speed .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, double *speed); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SPEED_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SPEED_DOWNLOAD_T \- get download speed .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, curl_off_t *speed); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SPEED_UPLOAD 3 "June 15, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SPEED_UPLOAD \- get upload speed .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SPEED_UPLOAD_T 3 "March 31, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SPEED_UPLOAD_T \- get upload speed .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, curl_off_t *speed); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SSL_ENGINES 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_SSL_VERIFYRESULT 3 "March 21, 2018" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, long *result); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_STARTTRANSFER_TIME 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, double *timep); .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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_STARTTRANSFER_TIME_T 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T, curl_off_t *timep); .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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TLS_SESSION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_TLS_SESSION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_TLS_SESSION \- get TLS session info .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_TLS_SSL_PTR 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_TOTAL_TIME 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_TOTAL_TIME \- get total time of previous transfer .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep); .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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLINFO_TOTAL_TIME_T 3 "August 26, 2019" "libcurl 7.66.0" "curl_easy_getinfo options" .SH NAME CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T, curl_off_t *timep); .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 curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, long size); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, long size); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_MAXCONNECTS 3 "September 23, 2018" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_MAXCONNECTS \- set size of connection cache .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "May 27, 2017" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_MAX_HOST_CONNECTIONS \- set max number of connections to a single host .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, long max); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "April 05, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, long max); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "May 27, 2017" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, long amount); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_PIPELINING 3 "April 05, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_PIPELINING_SERVER_BL 3 "April 05, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_PIPELINING_SERVER_BL \- pipelining server blacklist .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, char **servers); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_PIPELINING_SITE_BL 3 "April 05, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_PIPELINING_SITE_BL \- pipelining host blacklist .SH SYNOPSIS #include <curl/curl.h> CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, char **hosts); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PUSHDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_PUSHDATA 3 "May 27, 2017" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_PUSHDATA \- pointer to pass to push callback .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_PUSHFUNCTION 3 "February 03, 2016" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_SOCKETDATA 3 "May 31, 2017" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_SOCKETFUNCTION 3 "June 24, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_TIMERDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_TIMERDATA 3 "May 27, 2017" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLMOPT_TIMERFUNCTION 3 "May 03, 2019" "libcurl 7.66.0" "curl_multi_setopt options" .SH NAME CURLMOPT_TIMERFUNCTION \- set callback to receive timeout values .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "January 09, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ABSTRACT_UNIX_SOCKET \- set an abstract Unix domain socket .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, char *path); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ACCEPTTIMEOUT_MS 3 "March 06, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ACCEPT_ENCODING 3 "August 27, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ACCEPT_ENCODING \- enables automatic decompression of HTTP downloads .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ADDRESS_SCOPE 3 "March 07, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ADDRESS_SCOPE \- set scope id for IPv6 addresses .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ALTSVC.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | > > | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ALTSVC 3 "August 14, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ALTSVC \- set alt-svc cache file name .SH SYNOPSIS .nf #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC, char *filename); .fi .SH EXPERIMENTAL Warning: this feature is early code and is marked as experimental. It can only be enabled by explicitly telling configure with \fB--enable-alt-svc\fP. You are advised to not ship this in production before the experimental label is removed. .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 a after a transfer, unless \fBCURLALTSVC_READONLYFILE\fP is set in \fICURLOPT_ALTSVC_CTRL(3)\fP. Specify a blank file name ("") 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 CURL *curl = curl_easy_init(); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | < | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ALTSVC_CTRL 3 "August 13, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ALTSVC_CTRL \- control alt-svc behavior .SH SYNOPSIS .nf #include <curl/curl.h> #define CURLALTSVC_IMMEDIATELY (1<<0) #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 |
︙ | ︙ | |||
50 51 52 53 54 55 56 | HTTPS. It will also only complete 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. Setting any bit will enable the alt-svc engine. .IP "CURLALTSVC_IMMEDIATELY" If an Alt-Svc: header is received, this instructs libcurl to switch to one of | | < | < | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | HTTPS. It will also only complete 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. Setting any bit will enable the alt-svc engine. .IP "CURLALTSVC_IMMEDIATELY" If an Alt-Svc: header is received, this instructs libcurl to switch to one of those alternatives asap rather than to save it and use for the next request. (Not currently supported). .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 will be read and written to as deemed necessary. .IP "CURLALTSVC_H1" Accept alternative services offered over HTTP/1.1. .IP "CURLALTSVC_H2" |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_APPEND.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_APPEND 3 "March 06, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_APPEND \- enable appending to the remote file .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_AUTOREFERER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_AUTOREFERER 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_AUTOREFERER \- automatically update the referer header .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_BUFFERSIZE 3 "May 13, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_BUFFERSIZE \- set preferred receive buffer size .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CAINFO.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CAINFO 3 "June 10, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CAPATH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CAPATH 3 "September 10, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CAPATH \- specify directory holding CA certificates .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CERTINFO.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CERTINFO 3 "January 29, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CERTINFO \- request SSL certificate information .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CHUNK_BGN_FUNCTION 3 "May 03, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP wildcardmatch .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CHUNK_DATA 3 "November 07, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CHUNK_DATA \- custom pointer to the FTP chunk callbacks .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CHUNK_END_FUNCTION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcardmatch .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CLOSESOCKETDATA 3 "November 07, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CLOSESOCKETDATA \- pointer passed to the socket close callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CLOSESOCKETFUNCTION 3 "November 07, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CLOSESOCKETFUNCTION \- callback to socket close replacement function .SH SYNOPSIS #include <curl/curl.h> int closesocket_callback(void *clientp, curl_socket_t item); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CONNECTTIMEOUT 3 "October 03, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CONNECTTIMEOUT \- timeout for the connect phase .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CONNECTTIMEOUT_MS 3 "September 23, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CONNECTTIMEOUT_MS \- timeout for the connect phase .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, long timeout); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CONNECT_ONLY 3 "February 18, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CONNECT_ONLY \- stop when connected to target server .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECT_TO.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CONNECT_TO 3 "May 05, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CONNECT_TO \- Connect to a specific host and port instead of the URL's host and port .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host encoding .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_COOKIE 3 "December 21, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_COOKIE \- set contents of HTTP Cookie header .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIEFILE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_COOKIEFILE 3 "March 13, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_COOKIEFILE \- file name to read cookies from .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIEJAR.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_COOKIEJAR 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_COOKIEJAR \- file name to store cookies to .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIELIST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_COOKIELIST 3 "April 26, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIESESSION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_COOKIESESSION 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_COOKIESESSION \- start a new cookie session .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_COPYPOSTFIELDS 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_COPYPOSTFIELDS \- have libcurl copy data to POST .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CRLF.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CRLF 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CRLF \- enable/disable CRLF conversion .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CRLFILE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CRLFILE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CRLFILE \- specify a Certificate Revocation List file .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CURLU.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CURLU 3 "January 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CURLU \- set URL with CURLU * .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_CUSTOMREQUEST 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_CUSTOMREQUEST \- custom string for request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEBUGDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DEBUGDATA 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DEBUGDATA \- custom pointer for debug callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DEBUGFUNCTION 3 "October 06, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DEBUGFUNCTION \- debug callback .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DEFAULT_PROTOCOL 3 "December 21, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a scheme name .SH SYNOPSIS #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DIRLISTONLY 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DIRLISTONLY \- ask for names only in a directory listing .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "February 25, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DISALLOW_USERNAME_IN_URL \- disallow specifying username in the url .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL, long disallow); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DNS_CACHE_TIMEOUT 3 "December 09, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DNS_CACHE_TIMEOUT \- set life-time for DNS cache entries .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DNS_INTERFACE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DNS_INTERFACE \- set interface to speak DNS over .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DNS_LOCAL_IP4 3 "December 10, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DNS_LOCAL_IP4 \- IPv4 address to bind DNS resolves to .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DNS_LOCAL_IP6 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DNS_LOCAL_IP6 \- IPv6 address to bind DNS resolves to .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DNS_SERVERS 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DNS_SERVERS \- set preferred DNS servers .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "March 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DNS_SHUFFLE_ADDRESSES \- Shuffle addresses when a hostname returns more than one .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "March 07, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DNS_USE_GLOBAL_CACHE \- enable/disable global DNS cache .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DOH_URL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_DOH_URL 3 "September 06, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_DOH_URL \- provide the DNS-over-HTTPS URL .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_URL, char *URL); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_EGDSOCKET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_EGDSOCKET 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_EGDSOCKET \- set EGD socket path .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ERRORBUFFER 3 "March 13, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ERRORBUFFER \- set error buffer for error messages .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_EXPECT_100_TIMEOUT_MS 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_EXPECT_100_TIMEOUT_MS \- timeout for Expect: 100-continue response .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FAILONERROR.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FAILONERROR 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FAILONERROR \- request failure on HTTP response >= 400 .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FAILONERROR, long fail); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FILETIME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FILETIME 3 "April 03, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FILETIME \- get the modification time of the remote resource .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FNMATCH_DATA 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FNMATCH_DATA \- custom pointer to fnmatch callback .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FNMATCH_FUNCTION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FNMATCH_FUNCTION \- wildcard matching function callback .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FOLLOWLOCATION 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FORBID_REUSE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FORBID_REUSE \- make connection get closed at once after use .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FORBID_REUSE, long close); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FRESH_CONNECT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FRESH_CONNECT \- force a new connection to be used .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FRESH_CONNECT, long fresh); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTPPORT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTPPORT 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTPPORT \- make FTP transfer active .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTPSSLAUTH 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTPSSLAUTH \- set order in which to attempt TLS vs SSL when using FTP .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPSSLAUTH, long order); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_ACCOUNT 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_ACCOUNT \- set account info for FTP .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ACCOUNT, char *account); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_ALTERNATIVE_TO_USER 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_CREATE_MISSING_DIRS 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_CREATE_MISSING_DIRS \- create missing dirs for FTP and SFTP .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_FILEMETHOD 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_FILEMETHOD \- select directory traversing method for FTP .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_RESPONSE_TIMEOUT 3 "October 03, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_RESPONSE_TIMEOUT \- time allowed to wait for FTP response .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_RESPONSE_TIMEOUT, long timeout); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_SKIP_PASV_IP 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_SKIP_PASV_IP \- ignore the IP address in the PASV response .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SKIP_PASV_IP, long skip); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_SSL_CCC 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_SSL_CCC \- switch off SSL again with FTP after auth .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SSL_CCC, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_USE_EPRT 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_USE_EPRT \- enable/disable use of EPRT with FTP .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPRT, long enabled); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_USE_EPSV 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_USE_EPSV \- enable/disable use of EPSV .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPSV, long epsv); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_FTP_USE_PRET 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_FTP_USE_PRET \- enable the PRET command .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_PRET, long enable); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_GSSAPI_DELEGATION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_GSSAPI_DELEGATION \- set allowed GSS-API delegation .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_GSSAPI_DELEGATION, long level); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "February 21, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS \- head start for ipv6 for happy eyeballs .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, long timeout); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HAPROXYPROTOCOL 3 "May 18, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HAPROXYPROTOCOL \- send HAProxy PROXY protocol v1 header .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPROXYPROTOCOL, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HEADER 3 "October 03, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HEADER \- pass headers to the data stream .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADERDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HEADERDATA 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HEADERDATA \- pointer to pass to header callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HEADERFUNCTION 3 "August 27, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HEADERFUNCTION \- callback that receives header data .SH SYNOPSIS #include <curl/curl.h> size_t header_callback(char *buffer, |
︙ | ︙ | |||
49 50 51 52 53 54 55 | This callback function must return the number of bytes actually taken care of. If that amount differs from the amount passed in to your function, it'll signal an error to the library. This will cause the transfer to get aborted and the libcurl function in progress will return \fICURLE_WRITE_ERROR\fP. A complete HTTP header that is passed to this function can be up to | | > > > | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | This callback function must return the number of bytes actually taken care of. If that amount differs from the amount passed in to your function, it'll signal an error to the library. This will cause the transfer to get aborted and the libcurl function in progress will return \fICURLE_WRITE_ERROR\fP. A complete HTTP header that is passed to this function can be up to \fICURL_MAX_HTTP_HEADER\fP (100K) bytes and includes the final line terminator. If this option is not set, or if it is set to NULL, but \fICURLOPT_HEADERDATA(3)\fP is set to anything but NULL, the function used to accept response data will be used instead. That is, it will be the function specified with \fICURLOPT_WRITEFUNCTION(3)\fP, or if it is not specified or NULL - the default, stream-writing function. It's important to note that the callback will be invoked for the headers of all responses received after initiating a request and not just the final response. This includes all responses which occur during authentication negotiation. If you need to operate on only the headers from the final response, you will need to collect headers in the callback yourself and use HTTP status lines, for example, to delimit response boundaries. For an HTTP transfer, the status line and the blank line preceding the response body are both included as headers and passed to this function. When a server sends a chunked encoded transfer, it may contain a trailer. That trailer is identical to an HTTP header and if such a trailer is received it is passed to the application using this callback as well. There are several ways to detect it being a trailer and not an ordinary header: 1) it comes after the response-body. 2) it comes after the final header line (CR LF) 3) a Trailer: header among the regular response-headers mention what header(s) to expect in |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADEROPT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HEADEROPT 3 "July 03, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HEADEROPT \- set how to send HTTP headers .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADEROPT, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTP09_ALLOWED 3 "August 05, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTP09 \- allow HTTP/0.9 response .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP09_ALLOWED, long allowed); .SH DESCRIPTION Pass the long argument \fIallowed\fP set to 1L to allow HTTP/0.9 responses. A HTTP/0.9 response is a server response entirely without headers and only a body. You can connect to lots of random TCP services and still get a response that curl might consider to be HTTP/0.9! .SH DEFAULT curl allowed HTTP/0.9 responses by default before 7.66.0 Since 7.66.0, libcurl requires this option set to 1L to allow HTTP/0.9 responses. .SH PROTOCOLS HTTP .SH EXAMPLE .nf CURL *curl = curl_easy_init(); if(curl) { |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTP200ALIASES 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTP200ALIASES \- specify alternative matches for HTTP 200 OK .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPAUTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTPAUTH 3 "June 15, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTPAUTH \- set HTTP server authentication methods to try .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPGET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTPGET 3 "May 21, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTPGET \- ask for an HTTP GET request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPGET, long useget); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPHEADER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTPHEADER 3 "December 30, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTPHEADER \- set custom HTTP headers .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPHEADER, struct curl_slist *headers); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPPOST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTPPOST 3 "September 02, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTPPOST \- specify the multipart formpost content .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTPPROXYTUNNEL 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTPPROXYTUNNEL \- tunnel through HTTP proxy .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPROXYTUNNEL, long tunnel); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTP_CONTENT_DECODING 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTP_CONTENT_DECODING \- enable/disable HTTP content decoding .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTP_TRANSFER_DECODING 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTP_TRANSFER_DECODING \- enable/disable HTTP transfer decoding .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_HTTP_VERSION 3 "August 09, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_HTTP_VERSION \- specify HTTP protocol version to use .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version); |
︙ | ︙ | |||
54 55 56 57 58 59 60 61 62 63 64 65 66 67 | HTTP 2 can't be negotiated with the HTTPS server. For clear text HTTP servers, libcurl will use 1.1. (Added in 7.47.0) .IP CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE Issue non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2 straight away. HTTPS requests will still do HTTP/2 the standard way with negotiated protocol version in the TLS handshake. (Added in 7.49.0) .SH DEFAULT Since curl 7.62.0: CURL_HTTP_VERSION_2TLS Before that: CURL_HTTP_VERSION_1_1 .SH PROTOCOLS HTTP .SH EXAMPLE | > > > > > > > > | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | HTTP 2 can't be negotiated with the HTTPS server. For clear text HTTP servers, libcurl will use 1.1. (Added in 7.47.0) .IP CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE Issue non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2 straight away. HTTPS requests will still do HTTP/2 the standard way with negotiated protocol version in the TLS handshake. (Added in 7.49.0) .IP CURL_HTTP_VERSION_3 (Added in 7.66.0) Setting this value will make libcurl attempt to use HTTP/3 directly to server given in the URL. Note that this cannot gracefully downgrade to earlier HTTP version if the server doesn't support HTTP/3. For more reliably upgrading to HTTP/3, set the prefered version to something lower and let the server announce its HTTP/3 support via Alt-Svc:. See \fICURLOPT_ALTSVC(3)\fP. .SH DEFAULT Since curl 7.62.0: CURL_HTTP_VERSION_2TLS Before that: CURL_HTTP_VERSION_1_1 .SH PROTOCOLS HTTP .SH EXAMPLE |
︙ | ︙ | |||
79 80 81 82 83 84 85 | .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 CURLOPT_SSLVERSION "(3), " CURLOPT_HTTP200ALIASES "(3), " | | | 87 88 89 90 91 92 93 94 | .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 CURLOPT_SSLVERSION "(3), " CURLOPT_HTTP200ALIASES "(3), " .BR CURLOPT_HTTP09_ALLOWED "(3), " CURLOPT_ALTSVC "(3) " |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INFILESIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_INFILESIZE 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_INFILESIZE \- set size of the input file to send off .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE, long filesize); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_INFILESIZE_LARGE 3 "September 23, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_INFILESIZE_LARGE \- set size of the input file to send off .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERFACE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_INTERFACE 3 "June 18, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_INTERFACE \- source interface for outgoing traffic .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERFACE, char *interface); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_INTERLEAVEDATA 3 "September 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_INTERLEAVEDATA \- custom pointer passed to RTSP interleave callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_INTERLEAVEFUNCTION 3 "August 11, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_INTERLEAVEFUNCTION \- callback function for RTSP interleaved data .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IOCTLDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_IOCTLDATA 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_IOCTLDATA \- custom pointer passed to I/O callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_IOCTLFUNCTION 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_IOCTLFUNCTION \- callback for I/O operations .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IPRESOLVE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_IPRESOLVE 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_IPRESOLVE \- specify which IP protocol version to use .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IPRESOLVE, long resolve); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ISSUERCERT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_ISSUERCERT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_ISSUERCERT \- issuer SSL certificate filename .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT, char *file); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_KEEP_SENDING_ON_ERROR 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_KEEP_SENDING_ON_ERROR \- keep sending on early HTTP response >= 300 .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEEP_SENDING_ON_ERROR, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KEYPASSWD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_KEYPASSWD 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_KEYPASSWD \- set passphrase to private key .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KRBLEVEL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_KRBLEVEL 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_KRBLEVEL \- set FTP kerberos security level .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KRBLEVEL, char *level); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOCALPORT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_LOCALPORT 3 "January 31, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_LOCALPORT \- set local port number to use for socket .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORT, long port); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_LOCALPORTRANGE 3 "January 31, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_LOCALPORTRANGE \- number of additional local ports to try .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORTRANGE, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_LOGIN_OPTIONS 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_LOGIN_OPTIONS \- set login options .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOGIN_OPTIONS, char *options); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_LOW_SPEED_LIMIT 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_LOW_SPEED_LIMIT \- set low speed limit in bytes per second .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_LIMIT, long speedlimit); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_LOW_SPEED_TIME 3 "May 06, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_LOW_SPEED_TIME \- set low speed limit time period .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_TIME, long speedtime); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAIL_AUTH 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAIL_AUTH \- SMTP authentication address .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_AUTH, char *auth); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_FROM.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAIL_FROM 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAIL_FROM \- SMTP sender address .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_FROM, char *from); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAIL_RCPT 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAIL_RCPT \- list of SMTP mail recipients .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAXAGE_CONN 3 "April 14, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAXAGE_CONN \- max idle time allowed for reusing a connection .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXAGE_CONN, long maxage); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAXCONNECTS 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAXCONNECTS \- maximum connection cache size .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAXFILESIZE 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAXFILESIZE \- maximum file size allowed to download .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAXFILESIZE_LARGE 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXREDIRS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAXREDIRS 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAXREDIRS \- maximum number of redirects allowed .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXREDIRS, long amount); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAX_RECV_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MAX_SEND_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MIMEPOST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_MIMEPOST 3 "September 04, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_MIMEPOST \- set post/send data from mime structure .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NETRC.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NETRC 3 "November 03, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NETRC \- request that .netrc is used .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC, long level); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NETRC_FILE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NETRC_FILE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NETRC_FILE \- file name to read .netrc info from .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC_FILE, char *file); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NEW_DIRECTORY_PERMS 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NEW_FILE_PERMS 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOBODY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NOBODY 3 "June 21, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NOBODY \- do the download request without getting the body .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOBODY, long opt); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOPROGRESS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NOPROGRESS 3 "October 09, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NOPROGRESS \- switch off the progress meter .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROGRESS, long onoff); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOPROXY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NOPROXY 3 "August 24, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NOPROXY \- disable proxy use for specific hosts .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROXY, char *noproxy); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOSIGNAL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_NOSIGNAL 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_NOSIGNAL \- skip all signal handling .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_OPENSOCKETDATA 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_OPENSOCKETDATA \- custom pointer passed to open socket callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_OPENSOCKETFUNCTION 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_OPENSOCKETFUNCTION \- set callback for opening sockets .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PASSWORD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PASSWORD 3 "September 23, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PASSWORD \- password to use in authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PASSWORD, char *pwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PATH_AS_IS 3 "September 23, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PATH_AS_IS \- do not handle dot dot sequences .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PATH_AS_IS, long leaveit); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PINNEDPUBLICKEY 3 "June 02, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PINNEDPUBLICKEY \- set pinned public key .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PIPEWAIT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PIPEWAIT 3 "May 01, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PORT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PORT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PORT \- set remote port number to work with .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PORT, long number); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POST.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_POST 3 "July 22, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_POST \- request an HTTP POST .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post); |
︙ | ︙ | |||
52 53 54 55 56 57 58 | Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual. If you use POST to an HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with \fICURLOPT_HTTPHEADER(3)\fP. With HTTP 1.0 or without chunked transfer, you | | > | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual. If you use POST to an HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with \fICURLOPT_HTTPHEADER(3)\fP. With HTTP 1.0 or without chunked transfer, you must specify the size in the request. (Since 7.66.0, libcurl will automatically use chunked encoding for POSTs if the size is unknown.) When setting \fICURLOPT_POST(3)\fP to 1, libcurl will automatically set \fICURLOPT_NOBODY(3)\fP and \fICURLOPT_HTTPGET(3)\fP to 0. If you issue a POST request and then want to make a HEAD or GET using the same re-used handle, you must explicitly set the new request type using \fICURLOPT_NOBODY(3)\fP or \fICURLOPT_HTTPGET(3)\fP or similar. |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_POSTFIELDS 3 "May 21, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_POSTFIELDS \- specify data to POST to server .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_POSTFIELDSIZE 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_POSTFIELDSIZE \- size of POST data pointed to .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE, long size); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_POSTFIELDSIZE_LARGE 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTQUOTE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_POSTQUOTE 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_POSTQUOTE \- (S)FTP commands to run after the transfer .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTQUOTE, struct curl_slist *cmds); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTREDIR.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_POSTREDIR 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_POSTREDIR \- how to act on an HTTP POST redirect .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PREQUOTE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PREQUOTE 3 "June 18, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PREQUOTE \- commands to run before an FTP transfer .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PRE_PROXY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PRE_PROXY 3 "September 23, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PRE_PROXY \- set pre-proxy to use .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRE_PROXY, char *preproxy); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PRIVATE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PRIVATE 3 "December 08, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PRIVATE \- store a private pointer .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRIVATE, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROGRESSDATA 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROGRESSDATA \- custom pointer passed to the progress callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROGRESSFUNCTION 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROGRESSFUNCTION \- callback to progress meter function .SH SYNOPSIS #include <curl/curl.h> int progress_callback(void *clientp, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROTOCOLS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROTOCOLS 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROTOCOLS \- set allowed protocols .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROTOCOLS, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY 3 "August 24, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY \- set proxy to use .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYAUTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXYAUTH 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXYAUTH \- set HTTP proxy authentication methods to try .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYAUTH, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYHEADER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXYHEADER 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXYHEADER \- custom HTTP headers to pass to proxy .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXYPASSWORD 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXYPASSWORD \- password to use with proxy authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPASSWORD, char *pwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYPORT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXYPORT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXYPORT \- port number the proxy listens on .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYTYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXYTYPE 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXYTYPE \- proxy protocol type .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXYUSERNAME 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXYUSERNAME \- user name to use for proxy authentication .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXYUSERPWD 3 "May 30, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXYUSERPWD \- user name and password to use for proxy authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERPWD, char *userpwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_CAINFO 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_CAINFO \- path to proxy Certificate Authority (CA) bundle .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAINFO, char *path); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_CAPATH 3 "May 15, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_CAPATH \- specify directory holding proxy CA certificates .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAPATH, char *capath); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_CRLFILE 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_CRLFILE \- specify a proxy Certificate Revocation List file .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CRLFILE, char *file); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_KEYPASSWD 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_KEYPASSWD \- set passphrase to proxy private key .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_PINNEDPUBLICKEY 3 "May 15, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_PINNEDPUBLICKEY \- set pinned public key for https proxy .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_PINNEDPUBLICKEY, char *pinnedpubkey); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SERVICE_NAME \- proxy authentication service name .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char *name); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSLCERT 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSLCERT \- set SSL proxy client certificate .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERT, char *cert); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSLCERTTYPE 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSLCERTTYPE \- specify type of the proxy client SSL certificate .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERTTYPE, char *type); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSLKEY 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSLKEY \- specify private keyfile for TLS and SSL proxy client cert .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEY, char *keyfile); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSLKEYTYPE 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSLKEYTYPE \- set type of the proxy private key file .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEYTYPE, char *type); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSLVERSION 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSLVERSION \- set preferred proxy TLS/SSL version .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLVERSION, long version); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSL_CIPHER_LIST \- specify ciphers to use for proxy TLS .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_CIPHER_LIST, char *list); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSL_OPTIONS 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSL_OPTIONS \- set proxy SSL behavior options .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_OPTIONS, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSL_VERIFYHOST 3 "August 20, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSL_VERIFYHOST \- verify the proxy certificate's name against host .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYHOST, long verify); |
︙ | ︙ | |||
39 40 41 42 43 44 45 | indicate that the server is the proxy to which you meant to connect to, or the connection fails. Curl considers the proxy the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the proxy string which you told curl to use. | | | > > > > > > > | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | indicate that the server is the proxy to which you meant to connect to, or the connection fails. Curl considers the proxy the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the proxy string which you told curl to use. If \fIverify\fP value is set to 1: In 7.28.0 and earlier: treated as a debug option of some sorts, not supported anymore due to frequently leading to programmer mistakes. From 7.28.1 to 7.65.3: setting it to 1 made curl_easy_setopt() return an error and leaving the flag untouched. From 7.66.0: treats 1 and 2 the same. When the \fIverify\fP value is 0L, the connection succeeds regardless of the names used in the certificate. Use that ability with caution! See also \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP to verify the digital signature of the proxy certificate. If libcurl is built against NSS and \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is zero, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_SSL_VERIFYPEER 3 "December 16, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_SSL_VERIFYPEER \- verify the proxy's SSL certificate .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYPEER, long verify); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_TLS13_CIPHERS 3 "May 27, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_TLS13_CIPHERS \- ciphers suites for proxy TLS 1.3 .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLS13_CIPHERS, char *list); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_TLSAUTH_PASSWORD \- password to use for proxy TLS authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_PASSWORD, char *pwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_TLSAUTH_TYPE \- set proxy TLS authentication methods .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_TYPE, char *type); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_TLSAUTH_USERNAME \- user name to use for proxy TLS authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_USERNAME, char *user); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PROXY_TRANSFER_MODE 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PROXY_TRANSFER_MODE \- append FTP transfer mode to URL for proxy .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TRANSFER_MODE, long enabled); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PUT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_PUT 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_PUT \- make an HTTP PUT request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PUT, long put); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_QUOTE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_QUOTE 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_QUOTE \- (S)FTP commands to run before transfer .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUOTE, struct curl_slist *cmds); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RANDOM_FILE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RANDOM_FILE \- specify a source for random data .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RANGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RANGE 3 "July 17, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RANGE \- set byte range to request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANGE, char *range); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_READDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_READDATA 3 "August 11, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_READDATA \- custom pointer passed to the read callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_READFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_READFUNCTION 3 "August 12, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_READFUNCTION \- read callback for data uploads .SH SYNOPSIS #include <curl/curl.h> size_t read_callback(char *buffer, size_t size, size_t nitems, void *userdata); |
︙ | ︙ | |||
66 67 68 69 70 71 72 | internal read function will be used. It is doing an fread() on the FILE * userdata set with \fICURLOPT_READDATA(3)\fP. .SH DEFAULT The default internal read callback is fread(). .SH PROTOCOLS This is used for all protocols when doing uploads. .SH EXAMPLE | > > > > > | > > > | > > > > > > > > > > > > > > > > > > > > > | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | internal read function will be used. It is doing an fread() on the FILE * userdata set with \fICURLOPT_READDATA(3)\fP. .SH DEFAULT The default internal read callback is fread(). .SH PROTOCOLS This is used for all protocols when doing uploads. .SH EXAMPLE .nf size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userdata) { FILE *readhere = (FILE *)userdata; curl_off_t nread; /* copy as much data as possible into the 'ptr' buffer, but no more than 'size' * 'nmemb' bytes! */ size_t retcode = fread(ptr, size, nmemb, readhere); nread = (curl_off_t)retcode; fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T " bytes from file\\n", nread); return retcode; } void setup(char *uploadthis) { FILE *file = fopen("rb", uploadthis); CURLcode result; /* set callback to use */ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); /* pass in suitable argument to callback */ curl_easy_setopt(curl, CURLOPT_READDATA, uploadthis); result = curl_easy_perform(curl); } .fi .SH AVAILABILITY CURL_READFUNC_PAUSE return code was added in 7.18.0 and CURL_READFUNC_ABORT was added in 7.12.1. .SH RETURN VALUE This will return CURLE_OK. .SH "SEE ALSO" .BR CURLOPT_READDATA "(3), " CURLOPT_WRITEFUNCTION "(3), " .BR CURLOPT_SEEKFUNCTION "(3), " CURLOPT_UPLOAD "(3), " CURLOPT_POST "(3), " .BR CURLOPT_UPLOAD_BUFFERSIZE "(3), " |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_REDIR_PROTOCOLS 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_REDIR_PROTOCOLS \- set protocols allowed to redirect to .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REDIR_PROTOCOLS, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REFERER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_REFERER 3 "December 21, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_REFERER \- set the HTTP referer header .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REFERER, char *where); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_REQUEST_TARGET 3 "June 21, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_REQUEST_TARGET \- specify an alternative target for this request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REQUEST_TARGET, string); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RESOLVE 3 "May 30, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RESOLVE \- provide custom host name to IP address resolves .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RESOLVER_START_DATA 3 "February 14, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RESOLVER_START_DATA \- custom pointer passed to the resolver start callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVER_START_DATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RESOLVER_START_FUNCTION 3 "February 14, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RESOLVER_START_FUNCTION \- set callback to be called before a new resolve request is started .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RESUME_FROM 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RESUME_FROM \- set a point to resume transfer from .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM, long from); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RESUME_FROM_LARGE 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RESUME_FROM_LARGE \- set a point to resume transfer from .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RTSP_CLIENT_CSEQ 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RTSP_CLIENT_CSEQ \- set the RTSP client CSEQ number .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_CLIENT_CSEQ, long cseq); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RTSP_REQUEST 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RTSP_REQUEST \- specify RTSP request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_REQUEST, long request); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RTSP_SERVER_CSEQ \- set the RTSP server CSEQ number .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SERVER_CSEQ, long cseq); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RTSP_SESSION_ID \- set RTSP session ID .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SESSION_ID, char *id); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RTSP_STREAM_URI 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RTSP_STREAM_URI \- set RTSP stream URI .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_STREAM_URI, char *URI); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_RTSP_TRANSPORT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_RTSP_TRANSPORT \- set RTSP Transport: header .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Added jni/curl/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SASL_AUTHZID 3 "11 Sep 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SASL_AUTHZID \- authorisation identity (identity to act as) .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_AUTHZID, char *authzid); .SH DESCRIPTION Pass a char * as parameter, which should be pointing to the zero terminated authorisation identity (authzid) for the transfer. Only applicable to the PLAIN SASL authentication mechanism where it is optional. When not specified only the authentication identity (authcid) as specified by the username will be sent to the server, along with the password. The server will derive a authzid from the authcid when not provided, which it will then uses internally. When the authzid is specified, the use of which is server dependent, it can be used to access another user's inbox, that the user has been granted access to, or a shared mailbox for example. .SH DEFAULT blank .SH PROTOCOLS IMAP, POP3 and SMTP .SH EXAMPLE .nf CURL *curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "imap://example.com/"); curl_easy_setopt(curl, CURLOPT_USERNAME, "Kurt"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "xipj3plmq"); curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "Ursel"); ret = curl_easy_perform(curl); 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_USERNAME "(3), " CURLOPT_PASSWORD "(3), ".BR CURLOPT_USERPWD "(3)" |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SASL_IR.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SASL_IR 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SASL_IR \- enable sending initial response in first packet .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_IR, long enable); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SEEKDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SEEKDATA 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SEEKDATA \- custom pointer passed to the seek callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SEEKFUNCTION 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SERVICE_NAME \- authentication service name .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SERVICE_NAME, char *name); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SHARE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SHARE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SHARE \- specify share handle to use .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SOCKOPTDATA 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SOCKOPTDATA \- custom pointer to pass to sockopt callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SOCKOPTFUNCTION 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SOCKOPTFUNCTION \- set callback for setting socket options .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SOCKS5_AUTH 3 "April 27, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SOCKS5_AUTH \- set allowed methods for SOCKS5 proxy authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_AUTH, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SOCKS5_GSSAPI_NEC 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SOCKS5_GSSAPI_NEC \- set socks proxy gssapi negotiation protection .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_NEC, long nec); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SOCKS5_GSSAPI_SERVICE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SOCKS5_GSSAPI_SERVICE \- SOCKS5 proxy authentication service name .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_SERVICE, char *name); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_AUTH_TYPES 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_AUTH_TYPES \- set desired auth types for SFTP and SCP .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_AUTH_TYPES, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_COMPRESSION 3 "August 10, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_COMPRESSION \- enables compression / decompression of SSH traffic .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_COMPRESSION, long enable); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 \- checksum of SSH server public key .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_KEYDATA 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_KEYDATA \- pointer to pass to the SSH key callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_KEYFUNCTION 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_KEYFUNCTION \- callback for known host matching logic .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_KNOWNHOSTS 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_KNOWNHOSTS \- file name holding the SSH known hosts .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KNOWNHOSTS, char *fname); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_PRIVATE_KEYFILE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_PRIVATE_KEYFILE \- set private key file for SSH auth .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSH_PUBLIC_KEYFILE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSH_PUBLIC_KEYFILE \- set public key file for SSH auth .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLCERT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSLCERT 3 "January 29, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSLCERT \- set SSL client certificate .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT, char *cert); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSLCERTTYPE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSLCERTTYPE \- specify type of the client SSL certificate .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERTTYPE, char *type); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLENGINE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSLENGINE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSLENGINE \- set SSL engine identifier .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSLENGINE_DEFAULT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSLENGINE_DEFAULT \- make SSL engine default .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE_DEFAULT, long val); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLKEY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSLKEY 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSLKEY \- specify private keyfile for TLS and SSL client cert .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEY, char *keyfile); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSLKEYTYPE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSLKEYTYPE \- set type of the private key file .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEYTYPE, char *type); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLVERSION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSLVERSION 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSLVERSION \- set preferred TLS/SSL version .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_CIPHER_LIST \- specify ciphers to use for TLS .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CIPHER_LIST, char *list); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_CTX_DATA 3 "June 02, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_CTX_DATA \- custom pointer passed to ssl_ctx callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_DATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_CTX_FUNCTION 3 "June 02, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL or mbedTLS .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_ENABLE_ALPN 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_ENABLE_ALPN \- enable ALPN .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_ALPN, long npn); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_ENABLE_NPN 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_ENABLE_NPN \- enable NPN .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_NPN, long npn); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_FALSESTART 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_FALSESTART \- enable TLS false start .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_OPTIONS 3 "July 16, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_OPTIONS \- set SSL behavior options .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_OPTIONS, long bitmask); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_SESSIONID_CACHE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_SESSIONID_CACHE \- enable/disable use of the SSL session-ID cache .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3.
1 2 3 4 5 6 7 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at https://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_VERIFYHOST 3 "August 20, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_VERIFYHOST \- verify the certificate's name against host .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYHOST, long verify); |
︙ | ︙ | |||
42 43 44 45 46 47 48 | fails. Simply put, it means it has to have the same name in the certificate as is in the URL you operate against. Curl considers the server the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the URL to which you told Curl to connect. | | | | | > > > > | | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | fails. Simply put, it means it has to have the same name in the certificate as is in the URL you operate against. Curl considers the server the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the URL to which you told Curl to connect. If \fIverify\fP value is set to 1: In 7.28.0 and earlier: treated as a debug option of some sorts, not supported anymore due to frequently leading to programmer mistakes. From 7.28.1 to 7.65.3: setting it to 1 made curl_easy_setopt() return an error and leaving the flag untouched. From 7.66.0: treats 1 and 2 the same. When the \fIverify\fP value is 0, the connection succeeds regardless of the names in the certificate. Use that ability with caution! The default value for this option is 2. This option controls checking the server's certificate's claimed identity. |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_VERIFYPEER 3 "June 24, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_VERIFYPEER \- verify the peer's SSL certificate .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYPEER, long verify); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SSL_VERIFYSTATUS 3 "October 09, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long verify); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STDERR.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_STDERR 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_STDERR \- redirect stderr to another stream .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STDERR, FILE *stream); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_STREAM_DEPENDS 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_STREAM_DEPENDS \- set stream this transfer depends on .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS, CURL *dephandle); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_STREAM_DEPENDS_E 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_STREAM_DEPENDS_E \- set stream this transfer depends on exclusively .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E, CURL *dephandle); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_STREAM_WEIGHT 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_STREAM_WEIGHT \- set numerical stream weight .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_WEIGHT, long weight); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_SUPPRESS_CONNECT_HEADERS 3 "April 28, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_SUPPRESS_CONNECT_HEADERS \- Suppress proxy CONNECT response headers from user callbacks .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TCP_FASTOPEN 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TCP_FASTOPEN \- enable TCP Fast Open .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_FASTOPEN, long enable); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TCP_KEEPALIVE 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TCP_KEEPALIVE \- enable TCP keep-alive probing .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TCP_KEEPIDLE 3 "January 02, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TCP_KEEPIDLE \- set TCP keep-alive idle time wait .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPIDLE, long delay); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TCP_KEEPINTVL 3 "January 02, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TCP_KEEPINTVL \- set TCP keep-alive interval .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPINTVL, long interval); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TCP_NODELAY 3 "January 15, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TCP_NODELAY \- set the TCP_NODELAY option .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TELNETOPTIONS 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TELNETOPTIONS \- custom telnet options .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TELNETOPTIONS, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TFTP_BLKSIZE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TFTP_BLKSIZE \- TFTP block size .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_BLKSIZE, long blocksize); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TFTP_NO_OPTIONS 3 "April 06, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TFTP_NO_OPTIONS \- Do not send TFTP options requests. .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMECONDITION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TIMECONDITION 3 "April 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TIMECONDITION \- select condition for a time request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMECONDITION, long cond); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEOUT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TIMEOUT 3 "October 03, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TIMEOUT \- set maximum time the request is allowed to take .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TIMEOUT_MS 3 "September 23, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TIMEOUT_MS \- set maximum time the request is allowed to take .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT_MS, long timeout); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TIMEVALUE 3 "January 25, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TIMEVALUE \- set time value for conditional .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TIMEVALUE_LARGE 3 "January 25, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TIMEVALUE_LARGE \- set time value for conditional .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE_LARGE, curl_off_t val); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TLS13_CIPHERS 3 "May 27, 2019" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TLS13_CIPHERS \- specify ciphers suites to use for TLS 1.3 .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLS13_CIPHERS, char *list); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TLSAUTH_PASSWORD \- password to use for TLS authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_PASSWORD, char *pwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TLSAUTH_TYPE \- set TLS authentication methods .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, char *type); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TLSAUTH_USERNAME \- user name to use for TLS authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_USERNAME, char *user); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRAILERDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TRAILERDATA 3 "December 14, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME: CURLOPT_TRAILERDATA \- Custom pointer passed to the trailing headers callback .SH SYNOPSIS: #include <curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRAILERDATA, void *userdata); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TRAILERFUNCTION 3 "December 14, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME: CURLOPT_TRAILERFUNCTION \- Set callback for sending trailing headers .SH SYNOPSIS: #include <curl.h> int curl_trailer_callback(struct curl_slist ** list, void *userdata); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TRANSFERTEXT 3 "May 31, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TRANSFERTEXT \- request a text based transfer for FTP .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFERTEXT, long text); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_TRANSFER_ENCODING 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_TRANSFER_ENCODING \- ask for HTTP Transfer Encoding .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFER_ENCODING, long enable); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_UNIX_SOCKET_PATH 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_UNIX_SOCKET_PATH \- set Unix domain socket .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_UNRESTRICTED_AUTH 3 "May 15, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_UNRESTRICTED_AUTH \- send credentials to other hosts too .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UPLOAD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_UPLOAD 3 "April 17, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_UPLOAD \- enable data upload .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_UPLOAD_BUFFERSIZE 3 "August 18, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_UPLOAD_BUFFERSIZE \- set preferred upload buffer size .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD_BUFFERSIZE, long size); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_URL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_URL 3 "November 11, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_URL \- provide the URL to use in the request .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_URL, char *URL); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERAGENT.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_USERAGENT 3 "December 21, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_USERAGENT \- set HTTP user-agent header .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERAGENT, char *ua); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERNAME.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_USERNAME 3 "May 05, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_USERNAME \- user name to use in authentication .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERPWD.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_USERPWD 3 "August 24, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_USERPWD \- user name and password to use in authentication .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERPWD, char *userpwd); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USE_SSL.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_USE_SSL 3 "October 10, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_USE_SSL \- request using SSL / TLS for the transfer .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USE_SSL, long level); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_VERBOSE.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_VERBOSE 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_VERBOSE \- set verbose mode on/off .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_VERBOSE, long onoff); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_WILDCARDMATCH 3 "May 18, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_WILDCARDMATCH \- enable directory wildcard transfers .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WILDCARDMATCH, long onoff); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WRITEDATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_WRITEDATA 3 "August 11, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_WRITEDATA \- custom pointer passed to the write callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_WRITEFUNCTION 3 "November 23, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_WRITEFUNCTION \- set callback for writing received data .SH SYNOPSIS .nf #include <curl/curl.h> |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_XFERINFODATA.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_XFERINFODATA 3 "October 09, 2017" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_XFERINFODATA \- custom pointer passed to the progress callback .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFODATA, void *pointer); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_XFERINFOFUNCTION 3 "February 03, 2016" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_XFERINFOFUNCTION \- callback to progress meter function .SH SYNOPSIS #include <curl/curl.h> int progress_callback(void *clientp, |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH CURLOPT_XOAUTH2_BEARER 3 "May 22, 2018" "libcurl 7.66.0" "curl_easy_setopt options" .SH NAME CURLOPT_XOAUTH2_BEARER \- specify OAuth 2.0 access token .SH SYNOPSIS #include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XOAUTH2_BEARER, char *token); |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/Makefile.in.
︙ | ︙ | |||
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
431 432 433 434 435 436 437 438 439 440 441 442 443 444 | CURLINFO_PROXY_SSL_VERIFYRESULT.3 \ CURLINFO_REDIRECT_COUNT.3 \ CURLINFO_REDIRECT_TIME.3 \ CURLINFO_REDIRECT_TIME_T.3 \ CURLINFO_REDIRECT_URL.3 \ CURLINFO_REQUEST_SIZE.3 \ CURLINFO_RESPONSE_CODE.3 \ CURLINFO_RTSP_CLIENT_CSEQ.3 \ CURLINFO_RTSP_CSEQ_RECV.3 \ CURLINFO_RTSP_SERVER_CSEQ.3 \ CURLINFO_RTSP_SESSION_ID.3 \ CURLINFO_SCHEME.3 \ CURLINFO_SIZE_DOWNLOAD.3 \ CURLINFO_SIZE_DOWNLOAD_T.3 \ | > | 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | CURLINFO_PROXY_SSL_VERIFYRESULT.3 \ CURLINFO_REDIRECT_COUNT.3 \ CURLINFO_REDIRECT_TIME.3 \ CURLINFO_REDIRECT_TIME_T.3 \ CURLINFO_REDIRECT_URL.3 \ CURLINFO_REQUEST_SIZE.3 \ CURLINFO_RESPONSE_CODE.3 \ CURLINFO_RETRY_AFTER.3 \ CURLINFO_RTSP_CLIENT_CSEQ.3 \ CURLINFO_RTSP_CSEQ_RECV.3 \ CURLINFO_RTSP_SERVER_CSEQ.3 \ CURLINFO_RTSP_SESSION_ID.3 \ CURLINFO_SCHEME.3 \ CURLINFO_SIZE_DOWNLOAD.3 \ CURLINFO_SIZE_DOWNLOAD_T.3 \ |
︙ | ︙ | |||
660 661 662 663 664 665 666 667 668 669 670 671 672 673 | CURLOPT_RESUME_FROM_LARGE.3 \ CURLOPT_RTSP_CLIENT_CSEQ.3 \ CURLOPT_RTSP_REQUEST.3 \ CURLOPT_RTSP_SERVER_CSEQ.3 \ CURLOPT_RTSP_SESSION_ID.3 \ CURLOPT_RTSP_STREAM_URI.3 \ CURLOPT_RTSP_TRANSPORT.3 \ CURLOPT_SASL_IR.3 \ CURLOPT_SEEKDATA.3 \ CURLOPT_SEEKFUNCTION.3 \ CURLOPT_SERVICE_NAME.3 \ CURLOPT_SHARE.3 \ CURLOPT_SOCKOPTDATA.3 \ CURLOPT_SOCKOPTFUNCTION.3 \ | > | 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 | CURLOPT_RESUME_FROM_LARGE.3 \ CURLOPT_RTSP_CLIENT_CSEQ.3 \ CURLOPT_RTSP_REQUEST.3 \ CURLOPT_RTSP_SERVER_CSEQ.3 \ CURLOPT_RTSP_SESSION_ID.3 \ CURLOPT_RTSP_STREAM_URI.3 \ CURLOPT_RTSP_TRANSPORT.3 \ CURLOPT_SASL_AUTHZID.3 \ CURLOPT_SASL_IR.3 \ CURLOPT_SEEKDATA.3 \ CURLOPT_SEEKFUNCTION.3 \ CURLOPT_SERVICE_NAME.3 \ CURLOPT_SHARE.3 \ CURLOPT_SOCKOPTDATA.3 \ CURLOPT_SOCKOPTFUNCTION.3 \ |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/opts/Makefile.inc.
︙ | ︙ | |||
39 40 41 42 43 44 45 46 47 48 49 50 51 52 | CURLINFO_PROXY_SSL_VERIFYRESULT.3 \ CURLINFO_REDIRECT_COUNT.3 \ CURLINFO_REDIRECT_TIME.3 \ CURLINFO_REDIRECT_TIME_T.3 \ CURLINFO_REDIRECT_URL.3 \ CURLINFO_REQUEST_SIZE.3 \ CURLINFO_RESPONSE_CODE.3 \ CURLINFO_RTSP_CLIENT_CSEQ.3 \ CURLINFO_RTSP_CSEQ_RECV.3 \ CURLINFO_RTSP_SERVER_CSEQ.3 \ CURLINFO_RTSP_SESSION_ID.3 \ CURLINFO_SCHEME.3 \ CURLINFO_SIZE_DOWNLOAD.3 \ CURLINFO_SIZE_DOWNLOAD_T.3 \ | > | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | CURLINFO_PROXY_SSL_VERIFYRESULT.3 \ CURLINFO_REDIRECT_COUNT.3 \ CURLINFO_REDIRECT_TIME.3 \ CURLINFO_REDIRECT_TIME_T.3 \ CURLINFO_REDIRECT_URL.3 \ CURLINFO_REQUEST_SIZE.3 \ CURLINFO_RESPONSE_CODE.3 \ CURLINFO_RETRY_AFTER.3 \ CURLINFO_RTSP_CLIENT_CSEQ.3 \ CURLINFO_RTSP_CSEQ_RECV.3 \ CURLINFO_RTSP_SERVER_CSEQ.3 \ CURLINFO_RTSP_SESSION_ID.3 \ CURLINFO_SCHEME.3 \ CURLINFO_SIZE_DOWNLOAD.3 \ CURLINFO_SIZE_DOWNLOAD_T.3 \ |
︙ | ︙ | |||
268 269 270 271 272 273 274 275 276 277 278 279 280 281 | CURLOPT_RESUME_FROM_LARGE.3 \ CURLOPT_RTSP_CLIENT_CSEQ.3 \ CURLOPT_RTSP_REQUEST.3 \ CURLOPT_RTSP_SERVER_CSEQ.3 \ CURLOPT_RTSP_SESSION_ID.3 \ CURLOPT_RTSP_STREAM_URI.3 \ CURLOPT_RTSP_TRANSPORT.3 \ CURLOPT_SASL_IR.3 \ CURLOPT_SEEKDATA.3 \ CURLOPT_SEEKFUNCTION.3 \ CURLOPT_SERVICE_NAME.3 \ CURLOPT_SHARE.3 \ CURLOPT_SOCKOPTDATA.3 \ CURLOPT_SOCKOPTFUNCTION.3 \ | > | 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | CURLOPT_RESUME_FROM_LARGE.3 \ CURLOPT_RTSP_CLIENT_CSEQ.3 \ CURLOPT_RTSP_REQUEST.3 \ CURLOPT_RTSP_SERVER_CSEQ.3 \ CURLOPT_RTSP_SESSION_ID.3 \ CURLOPT_RTSP_STREAM_URI.3 \ CURLOPT_RTSP_TRANSPORT.3 \ CURLOPT_SASL_AUTHZID.3 \ CURLOPT_SASL_IR.3 \ CURLOPT_SEEKDATA.3 \ CURLOPT_SEEKFUNCTION.3 \ CURLOPT_SERVICE_NAME.3 \ CURLOPT_SHARE.3 \ CURLOPT_SOCKOPTDATA.3 \ CURLOPT_SOCKOPTFUNCTION.3 \ |
︙ | ︙ |
Changes to jni/curl/docs/libcurl/symbols-in-versions.
︙ | ︙ | |||
8 9 10 11 12 13 14 | with exact information about the first libcurl version that provides the symbol, the first version in which the symbol was marked as deprecated and for a few symbols the last version that featured it. The names appear in alphabetical order. Name Introduced Deprecated Removed | < | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | with exact information about the first libcurl version that provides the symbol, the first version in which the symbol was marked as deprecated and for a few symbols the last version that featured it. The names appear in alphabetical order. Name Introduced Deprecated Removed CURLALTSVC_H1 7.64.1 CURLALTSVC_H2 7.64.1 CURLALTSVC_H3 7.64.1 CURLALTSVC_IMMEDIATELY 7.64.1 CURLALTSVC_READONLYFILE 7.64.1 CURLAUTH_ANY 7.10.6 CURLAUTH_ANYSAFE 7.10.6 |
︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 | CURLCLOSEPOLICY_LEAST_TRAFFIC 7.7 CURLCLOSEPOLICY_NONE 7.7 CURLCLOSEPOLICY_OLDEST 7.7 CURLCLOSEPOLICY_SLOWEST 7.7 CURLE_ABORTED_BY_CALLBACK 7.1 CURLE_AGAIN 7.18.2 CURLE_ALREADY_COMPLETE 7.7.2 CURLE_BAD_CALLING_ORDER 7.1 7.17.0 CURLE_BAD_CONTENT_ENCODING 7.10 CURLE_BAD_DOWNLOAD_RESUME 7.10 CURLE_BAD_FUNCTION_ARGUMENT 7.1 CURLE_BAD_PASSWORD_ENTERED 7.4.2 7.17.0 CURLE_CHUNK_FAILED 7.21.0 CURLE_CONV_FAILED 7.15.4 | > | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | CURLCLOSEPOLICY_LEAST_TRAFFIC 7.7 CURLCLOSEPOLICY_NONE 7.7 CURLCLOSEPOLICY_OLDEST 7.7 CURLCLOSEPOLICY_SLOWEST 7.7 CURLE_ABORTED_BY_CALLBACK 7.1 CURLE_AGAIN 7.18.2 CURLE_ALREADY_COMPLETE 7.7.2 CURLE_AUTH_ERROR 7.66.0 CURLE_BAD_CALLING_ORDER 7.1 7.17.0 CURLE_BAD_CONTENT_ENCODING 7.10 CURLE_BAD_DOWNLOAD_RESUME 7.10 CURLE_BAD_FUNCTION_ARGUMENT 7.1 CURLE_BAD_PASSWORD_ENTERED 7.4.2 7.17.0 CURLE_CHUNK_FAILED 7.21.0 CURLE_CONV_FAILED 7.15.4 |
︙ | ︙ | |||
262 263 264 265 266 267 268 269 270 271 272 273 274 275 | CURLINFO_PTR 7.54.1 CURLINFO_REDIRECT_COUNT 7.9.7 CURLINFO_REDIRECT_TIME 7.9.7 CURLINFO_REDIRECT_TIME_T 7.61.0 CURLINFO_REDIRECT_URL 7.18.2 CURLINFO_REQUEST_SIZE 7.4.1 CURLINFO_RESPONSE_CODE 7.10.8 CURLINFO_RTSP_CLIENT_CSEQ 7.20.0 CURLINFO_RTSP_CSEQ_RECV 7.20.0 CURLINFO_RTSP_SERVER_CSEQ 7.20.0 CURLINFO_RTSP_SESSION_ID 7.20.0 CURLINFO_SCHEME 7.52.0 CURLINFO_SIZE_DOWNLOAD 7.4.1 CURLINFO_SIZE_DOWNLOAD_T 7.55.0 | > | 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | CURLINFO_PTR 7.54.1 CURLINFO_REDIRECT_COUNT 7.9.7 CURLINFO_REDIRECT_TIME 7.9.7 CURLINFO_REDIRECT_TIME_T 7.61.0 CURLINFO_REDIRECT_URL 7.18.2 CURLINFO_REQUEST_SIZE 7.4.1 CURLINFO_RESPONSE_CODE 7.10.8 CURLINFO_RETRY_AFTER 7.66.0 CURLINFO_RTSP_CLIENT_CSEQ 7.20.0 CURLINFO_RTSP_CSEQ_RECV 7.20.0 CURLINFO_RTSP_SERVER_CSEQ 7.20.0 CURLINFO_RTSP_SESSION_ID 7.20.0 CURLINFO_SCHEME 7.52.0 CURLINFO_SIZE_DOWNLOAD 7.4.1 CURLINFO_SIZE_DOWNLOAD_T 7.55.0 |
︙ | ︙ | |||
550 551 552 553 554 555 556 557 558 559 560 561 562 563 | CURLOPT_RTSPHEADER 7.20.0 CURLOPT_RTSP_CLIENT_CSEQ 7.20.0 CURLOPT_RTSP_REQUEST 7.20.0 CURLOPT_RTSP_SERVER_CSEQ 7.20.0 CURLOPT_RTSP_SESSION_ID 7.20.0 CURLOPT_RTSP_STREAM_URI 7.20.0 CURLOPT_RTSP_TRANSPORT 7.20.0 CURLOPT_SASL_IR 7.31.0 CURLOPT_SEEKDATA 7.18.0 CURLOPT_SEEKFUNCTION 7.18.0 CURLOPT_SERVER_RESPONSE_TIMEOUT 7.20.0 CURLOPT_SERVICE_NAME 7.43.0 CURLOPT_SHARE 7.10 CURLOPT_SOCKOPTDATA 7.16.0 | > | 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 | CURLOPT_RTSPHEADER 7.20.0 CURLOPT_RTSP_CLIENT_CSEQ 7.20.0 CURLOPT_RTSP_REQUEST 7.20.0 CURLOPT_RTSP_SERVER_CSEQ 7.20.0 CURLOPT_RTSP_SESSION_ID 7.20.0 CURLOPT_RTSP_STREAM_URI 7.20.0 CURLOPT_RTSP_TRANSPORT 7.20.0 CURLOPT_SASL_AUTHZID 7.66.0 CURLOPT_SASL_IR 7.31.0 CURLOPT_SEEKDATA 7.18.0 CURLOPT_SEEKFUNCTION 7.18.0 CURLOPT_SERVER_RESPONSE_TIMEOUT 7.20.0 CURLOPT_SERVICE_NAME 7.43.0 CURLOPT_SHARE 7.10 CURLOPT_SOCKOPTDATA 7.16.0 |
︙ | ︙ | |||
782 783 784 785 786 787 788 789 790 791 792 793 794 795 | CURLU_URLENCODE 7.62.0 CURLVERSION_FIFTH 7.57.0 CURLVERSION_FIRST 7.10 CURLVERSION_FOURTH 7.16.1 CURLVERSION_NOW 7.10 CURLVERSION_SECOND 7.11.1 CURLVERSION_THIRD 7.12.0 CURL_CHUNK_BGN_FUNC_FAIL 7.21.0 CURL_CHUNK_BGN_FUNC_OK 7.21.0 CURL_CHUNK_BGN_FUNC_SKIP 7.21.0 CURL_CHUNK_END_FUNC_FAIL 7.21.0 CURL_CHUNK_END_FUNC_OK 7.21.0 CURL_CSELECT_ERR 7.16.3 CURL_CSELECT_IN 7.16.3 | > | 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 | CURLU_URLENCODE 7.62.0 CURLVERSION_FIFTH 7.57.0 CURLVERSION_FIRST 7.10 CURLVERSION_FOURTH 7.16.1 CURLVERSION_NOW 7.10 CURLVERSION_SECOND 7.11.1 CURLVERSION_THIRD 7.12.0 CURLVERSION_SIXTH 7.66.0 CURL_CHUNK_BGN_FUNC_FAIL 7.21.0 CURL_CHUNK_BGN_FUNC_OK 7.21.0 CURL_CHUNK_BGN_FUNC_SKIP 7.21.0 CURL_CHUNK_END_FUNC_FAIL 7.21.0 CURL_CHUNK_END_FUNC_OK 7.21.0 CURL_CSELECT_ERR 7.16.3 CURL_CSELECT_IN 7.16.3 |
︙ | ︙ | |||
826 827 828 829 830 831 832 833 834 835 836 837 838 839 | CURL_HTTPPOST_READFILE 7.46.0 CURL_HTTP_VERSION_1_0 7.9.1 CURL_HTTP_VERSION_1_1 7.9.1 CURL_HTTP_VERSION_2 7.43.0 CURL_HTTP_VERSION_2TLS 7.47.0 CURL_HTTP_VERSION_2_0 7.33.0 CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE 7.49.0 CURL_HTTP_VERSION_NONE 7.9.1 CURL_IPRESOLVE_V4 7.10.8 CURL_IPRESOLVE_V6 7.10.8 CURL_IPRESOLVE_WHATEVER 7.10.8 CURL_LOCK_ACCESS_NONE 7.10.3 CURL_LOCK_ACCESS_SHARED 7.10.3 CURL_LOCK_ACCESS_SINGLE 7.10.3 | > | 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 | CURL_HTTPPOST_READFILE 7.46.0 CURL_HTTP_VERSION_1_0 7.9.1 CURL_HTTP_VERSION_1_1 7.9.1 CURL_HTTP_VERSION_2 7.43.0 CURL_HTTP_VERSION_2TLS 7.47.0 CURL_HTTP_VERSION_2_0 7.33.0 CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE 7.49.0 CURL_HTTP_VERSION_3 7.66.0 CURL_HTTP_VERSION_NONE 7.9.1 CURL_IPRESOLVE_V4 7.10.8 CURL_IPRESOLVE_V6 7.10.8 CURL_IPRESOLVE_WHATEVER 7.10.8 CURL_LOCK_ACCESS_NONE 7.10.3 CURL_LOCK_ACCESS_SHARED 7.10.3 CURL_LOCK_ACCESS_SINGLE 7.10.3 |
︙ | ︙ | |||
920 921 922 923 924 925 926 927 928 929 930 931 932 933 | CURL_VERSION_BROTLI 7.57.0 CURL_VERSION_CONV 7.15.4 CURL_VERSION_CURLDEBUG 7.19.6 CURL_VERSION_DEBUG 7.10.6 CURL_VERSION_GSSAPI 7.38.0 CURL_VERSION_GSSNEGOTIATE 7.10.6 7.38.0 CURL_VERSION_HTTP2 7.33.0 CURL_VERSION_HTTPS_PROXY 7.52.0 CURL_VERSION_IDN 7.12.0 CURL_VERSION_IPV6 7.10 CURL_VERSION_KERBEROS4 7.10 7.33.0 CURL_VERSION_KERBEROS5 7.40.0 CURL_VERSION_LARGEFILE 7.11.1 CURL_VERSION_LIBZ 7.10 | > | 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 | CURL_VERSION_BROTLI 7.57.0 CURL_VERSION_CONV 7.15.4 CURL_VERSION_CURLDEBUG 7.19.6 CURL_VERSION_DEBUG 7.10.6 CURL_VERSION_GSSAPI 7.38.0 CURL_VERSION_GSSNEGOTIATE 7.10.6 7.38.0 CURL_VERSION_HTTP2 7.33.0 CURL_VERSION_HTTP3 7.66.0 CURL_VERSION_HTTPS_PROXY 7.52.0 CURL_VERSION_IDN 7.12.0 CURL_VERSION_IPV6 7.10 CURL_VERSION_KERBEROS4 7.10 7.33.0 CURL_VERSION_KERBEROS5 7.40.0 CURL_VERSION_LARGEFILE 7.11.1 CURL_VERSION_LIBZ 7.10 |
︙ | ︙ |
Changes to jni/curl/include/Makefile.in.
︙ | ︙ | |||
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ |
Changes to jni/curl/include/curl/Makefile.in.
︙ | ︙ | |||
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
422 423 424 425 426 427 428 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ | | | | 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/curl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/curl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ |
︙ | ︙ |
Changes to jni/curl/include/curl/curl.h.
|
| | | | 1 2 3 4 5 6 7 8 9 | #ifndef CURLINC_CURL_H #define CURLINC_CURL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * |
︙ | ︙ | |||
280 281 282 283 284 285 286 | #define CURLFINFOFLAG_KNOWN_TIME (1<<2) #define CURLFINFOFLAG_KNOWN_PERM (1<<3) #define CURLFINFOFLAG_KNOWN_UID (1<<4) #define CURLFINFOFLAG_KNOWN_GID (1<<5) #define CURLFINFOFLAG_KNOWN_SIZE (1<<6) #define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) | | < < < | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | #define CURLFINFOFLAG_KNOWN_TIME (1<<2) #define CURLFINFOFLAG_KNOWN_PERM (1<<3) #define CURLFINFOFLAG_KNOWN_UID (1<<4) #define CURLFINFOFLAG_KNOWN_GID (1<<5) #define CURLFINFOFLAG_KNOWN_SIZE (1<<6) #define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) /* Information about a single file, used when doing FTP wildcard matching */ struct curl_fileinfo { char *filename; curlfiletype filetype; time_t time; /* always zero! */ unsigned int perm; int uid; int gid; |
︙ | ︙ | |||
599 600 601 602 603 604 605 606 607 608 609 610 611 612 | CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not match */ CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer */ CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from inside a callback */ CURL_LAST /* never use! */ } CURLcode; #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all the obsolete stuff removed! */ /* Previously obsolete error code re-used in 7.38.0 */ | > > | 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 | CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not match */ CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer */ CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from inside a callback */ CURLE_AUTH_ERROR, /* 94 - an authentication function returned an error */ CURL_LAST /* never use! */ } CURLcode; #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all the obsolete stuff removed! */ /* Previously obsolete error code re-used in 7.38.0 */ |
︙ | ︙ | |||
882 883 884 885 886 887 888 | /* bitmask defines for CURLOPT_HEADEROPT */ #define CURLHEADER_UNIFIED 0 #define CURLHEADER_SEPARATE (1<<0) /* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ #define CURLALTSVC_IMMEDIATELY (1<<0) | | | 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 | /* bitmask defines for CURLOPT_HEADEROPT */ #define CURLHEADER_UNIFIED 0 #define CURLHEADER_SEPARATE (1<<0) /* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ #define CURLALTSVC_IMMEDIATELY (1<<0) #define CURLALTSVC_READONLYFILE (1<<2) #define CURLALTSVC_H1 (1<<3) #define CURLALTSVC_H2 (1<<4) #define CURLALTSVC_H3 (1<<5) /* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ #define CURLPROTO_HTTP (1<<0) |
︙ | ︙ | |||
1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 | /* alt-svc cache file name to possibly read from/write to */ CINIT(ALTSVC, STRINGPOINT, 287), /* maximum age of a connection to consider it for reuse (in seconds) */ CINIT(MAXAGE_CONN, LONG, 288), CURLOPT_LASTENTRY /* the last unused */ } CURLoption; #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all the obsolete stuff removed! */ /* Backwards compatibility with older names */ | > > > | 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 | /* alt-svc cache file name to possibly read from/write to */ CINIT(ALTSVC, STRINGPOINT, 287), /* maximum age of a connection to consider it for reuse (in seconds) */ CINIT(MAXAGE_CONN, LONG, 288), /* SASL authorisation identity */ CINIT(SASL_AUTHZID, STRINGPOINT, 289), CURLOPT_LASTENTRY /* the last unused */ } CURLoption; #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all the obsolete stuff removed! */ /* Backwards compatibility with older names */ |
︙ | ︙ | |||
1974 1975 1976 1977 1978 1979 1980 | for us! */ CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 Upgrade */ | | > | 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 | for us! */ CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 Upgrade */ CURL_HTTP_VERSION_3 = 30, /* Makes use of explicit HTTP/3 without fallback. Use CURLOPT_ALTSVC to enable HTTP/3 upgrade */ CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ }; /* Convenience definition simple because the name of the version is HTTP/2 and not 2.0. The 2_0 version of the enum name was set while the version was still planned to be 2.0 and we stick to it for compatibility. */ #define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 |
︙ | ︙ | |||
2610 2611 2612 2613 2614 2615 2616 2617 | CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, | > | | 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 | CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, CURLINFO_LASTONE = 57 } CURLINFO; /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as CURLINFO_HTTP_CODE */ #define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE typedef enum { |
︙ | ︙ | |||
2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 | typedef enum { CURLVERSION_FIRST, CURLVERSION_SECOND, CURLVERSION_THIRD, CURLVERSION_FOURTH, CURLVERSION_FIFTH, CURLVERSION_LAST /* never actually use this */ } CURLversion; /* The 'CURLVERSION_NOW' is the symbolic name meant to be used by basically all programs ever that want to get version information. It is meant to be a built-in version number for what kind of struct the caller expects. If the struct ever changes, we redefine the NOW to another enum from above. */ | > | | 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 | typedef enum { CURLVERSION_FIRST, CURLVERSION_SECOND, CURLVERSION_THIRD, CURLVERSION_FOURTH, CURLVERSION_FIFTH, CURLVERSION_SIXTH, CURLVERSION_LAST /* never actually use this */ } CURLversion; /* The 'CURLVERSION_NOW' is the symbolic name meant to be used by basically all programs ever that want to get version information. It is meant to be a built-in version number for what kind of struct the caller expects. If the struct ever changes, we redefine the NOW to another enum from above. */ #define CURLVERSION_NOW CURLVERSION_SIXTH typedef struct { CURLversion age; /* age of the returned struct */ const char *version; /* LIBCURL_VERSION */ unsigned int version_num; /* LIBCURL_VERSION_NUM */ const char *host; /* OS/host/cpu/machine when configured */ int features; /* bitmask, see defines below */ |
︙ | ︙ | |||
2747 2748 2749 2750 2751 2752 2753 | /* Same as '_libiconv_version' if built with HAVE_ICONV */ int iconv_ver_num; const char *libssh_version; /* human readable string */ /* These fields were added in CURLVERSION_FIFTH */ | < > > > > > > | 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 | /* Same as '_libiconv_version' if built with HAVE_ICONV */ int iconv_ver_num; const char *libssh_version; /* human readable string */ /* These fields were added in CURLVERSION_FIFTH */ unsigned int brotli_ver_num; /* Numeric Brotli version (MAJOR << 24) | (MINOR << 12) | PATCH */ const char *brotli_version; /* human readable string. */ /* These fields were added in CURLVERSION_SIXTH */ unsigned int nghttp2_ver_num; /* Numeric nghttp2 version (MAJOR << 16) | (MINOR << 8) | PATCH */ const char *nghttp2_version; /* human readable string. */ const char *quic_version; /* human readable quic (+ HTTP/3) library + version or NULL */ } curl_version_info_data; #define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ #define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported (deprecated) */ #define CURL_VERSION_SSL (1<<2) /* SSL options are present */ #define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ |
︙ | ︙ | |||
2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 | #define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ #define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used for cookie domain verification */ #define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ #define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ #define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ #define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ /* * NAME curl_version_info() * * DESCRIPTION * * This function returns a pointer to a static copy of the version info | > | 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 | #define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ #define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used for cookie domain verification */ #define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ #define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ #define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ #define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ #define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ /* * NAME curl_version_info() * * DESCRIPTION * * This function returns a pointer to a static copy of the version info |
︙ | ︙ | |||
2864 2865 2866 2867 2868 2869 2870 | #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) #define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) #endif /* __STDC__ >= 1 */ #endif /* gcc >= 4.3 && !__cplusplus */ | | | 2875 2876 2877 2878 2879 2880 2881 2882 | #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) #define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) #endif /* __STDC__ >= 1 */ #endif /* gcc >= 4.3 && !__cplusplus */ #endif /* CURLINC_CURL_H */ |
Changes to jni/curl/include/curl/curlver.h.
|
| | | | 1 2 3 4 5 6 7 8 9 | #ifndef CURLINC_CURLVER_H #define CURLINC_CURLVER_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * |
︙ | ︙ | |||
26 27 28 29 30 31 32 | a script at release-time. This was made its own header file in 7.11.2 */ /* This is the global package copyright */ #define LIBCURL_COPYRIGHT "1996 - 2019 Daniel Stenberg, <daniel@haxx.se>." /* This is the version number of the libcurl package from which this header file origins: */ | | | | | | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | a script at release-time. This was made its own header file in 7.11.2 */ /* This is the global package copyright */ #define LIBCURL_COPYRIGHT "1996 - 2019 Daniel Stenberg, <daniel@haxx.se>." /* This is the version number of the libcurl package from which this header file origins: */ #define LIBCURL_VERSION "7.66.0" /* The numeric version number is also available "in parts" by using these defines: */ #define LIBCURL_VERSION_MAJOR 7 #define LIBCURL_VERSION_MINOR 66 #define LIBCURL_VERSION_PATCH 0 /* This is the numeric version of the libcurl version number, meant for easier parsing and comparions by programs. The LIBCURL_VERSION_NUM define will always follow this syntax: 0xXXYYZZ Where XX, YY and ZZ are the main version, release and patch numbers in hexadecimal (using 8 bits each). All three numbers are always represented using two digits. 1.2 would appear as "0x010200" while version 9.11.7 appears as "0x090b07". This 6-digit (24 bits) hexadecimal number does not show pre-release number, and it is always a greater number in a more recent release. It makes comparisons with greater than and less than work. Note: This define is the full hex number and _does not_ use the CURL_VERSION_BITS() macro since curl's own configure script greps for it and needs it to contain the full number. */ #define LIBCURL_VERSION_NUM 0x074200 /* * This is the date and time when the full source package was created. The * timestamp is not stored in git, as the timestamp is properly set in the * tarballs by the maketgz script. * * The format of the date follows this template: * * "2007-11-23" */ #define LIBCURL_TIMESTAMP "2019-09-11" #define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) #define CURL_AT_LEAST_VERSION(x,y,z) \ (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) #endif /* CURLINC_CURLVER_H */ |
Changes to jni/curl/include/curl/easy.h.
|
| | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef CURLINC_EASY_H #define CURLINC_EASY_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ |
Changes to jni/curl/include/curl/mprintf.h.
|
| | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef CURLINC_MPRINTF_H #define CURLINC_MPRINTF_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
43 44 45 46 47 48 49 | CURL_EXTERN char *curl_maprintf(const char *format, ...); CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); #ifdef __cplusplus } #endif | | | 43 44 45 46 47 48 49 50 | CURL_EXTERN char *curl_maprintf(const char *format, ...); CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); #ifdef __cplusplus } #endif #endif /* CURLINC_MPRINTF_H */ |
Changes to jni/curl/include/curl/multi.h.
|
| | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef CURLINC_MULTI_H #define CURLINC_MULTI_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
164 165 166 167 168 169 170 171 172 173 174 175 176 177 | * * Desc: Poll on all fds within a CURLM set as well as any * additional fds passed to the function. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret); /* * Name: curl_multi_perform() | > > > > > > > > > > > > > > | 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | * * Desc: Poll on all fds within a CURLM set as well as any * additional fds passed to the function. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret); /* * Name: curl_multi_poll() * * Desc: Poll on all fds within a CURLM set as well as any * additional fds passed to the function. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret); /* * Name: curl_multi_perform() |
︙ | ︙ |
Changes to jni/curl/include/curl/stdcheaders.h.
|
| | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef CURLINC_STDCHEADERS_H #define CURLINC_STDCHEADERS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
26 27 28 29 30 31 32 | size_t fread(void *, size_t, size_t, FILE *); size_t fwrite(const void *, size_t, size_t, FILE *); int strcasecmp(const char *, const char *); int strncasecmp(const char *, const char *, size_t); | | | 26 27 28 29 30 31 32 33 | size_t fread(void *, size_t, size_t, FILE *); size_t fwrite(const void *, size_t, size_t, FILE *); int strcasecmp(const char *, const char *); int strncasecmp(const char *, const char *, size_t); #endif /* CURLINC_STDCHEADERS_H */ |
Changes to jni/curl/include/curl/system.h.
|
| | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef CURLINC_SYSTEM_H #define CURLINC_SYSTEM_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
469 470 471 472 473 474 475 | #endif /* * Macros for minimum-width signed and unsigned curl_off_t integer constants. */ #if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) | | | | | | | | | | | | | | 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 | #endif /* * Macros for minimum-width signed and unsigned curl_off_t integer constants. */ #if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) # define CURLINC_OFF_T_C_HLPR2(x) x # define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) # define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) # define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) #else # ifdef CURL_ISOCPP # define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix # else # define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix # endif # define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) # define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) # define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) #endif #endif /* CURLINC_SYSTEM_H */ |
Changes to jni/curl/include/curl/typecheck-gcc.h.
|
| | | | 1 2 3 4 5 6 7 8 9 | #ifndef CURLINC_TYPECHECK_GCC_H #define CURLINC_TYPECHECK_GCC_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * |
︙ | ︙ | |||
21 22 23 24 25 26 27 | * KIND, either express or implied. * ***************************************************************************/ /* wraps curl_easy_setopt() with typechecking */ /* To add a new kind of warning, add an | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | * KIND, either express or implied. * ***************************************************************************/ /* wraps curl_easy_setopt() with typechecking */ /* To add a new kind of warning, add an * if(curlcheck_sometype_option(_curl_opt)) * if(!curlcheck_sometype(value)) * _curl_easy_setopt_err_sometype(); * block and define curlcheck_sometype_option, curlcheck_sometype and * _curl_easy_setopt_err_sometype below * * NOTE: We use two nested 'if' statements here instead of the && operator, in * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x * when compiling with -Wlogical-op. * * To add an option that uses the same type as an existing option, you'll just * need to extend the appropriate _curl_*_option macro */ #define curl_easy_setopt(handle, option, value) \ __extension__({ \ __typeof__(option) _curl_opt = option; \ if(__builtin_constant_p(_curl_opt)) { \ if(curlcheck_long_option(_curl_opt)) \ if(!curlcheck_long(value)) \ _curl_easy_setopt_err_long(); \ if(curlcheck_off_t_option(_curl_opt)) \ if(!curlcheck_off_t(value)) \ _curl_easy_setopt_err_curl_off_t(); \ if(curlcheck_string_option(_curl_opt)) \ if(!curlcheck_string(value)) \ _curl_easy_setopt_err_string(); \ if(curlcheck_write_cb_option(_curl_opt)) \ if(!curlcheck_write_cb(value)) \ _curl_easy_setopt_err_write_callback(); \ if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ if(!curlcheck_resolver_start_callback(value)) \ _curl_easy_setopt_err_resolver_start_callback(); \ if((_curl_opt) == CURLOPT_READFUNCTION) \ if(!curlcheck_read_cb(value)) \ _curl_easy_setopt_err_read_cb(); \ if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ if(!curlcheck_ioctl_cb(value)) \ _curl_easy_setopt_err_ioctl_cb(); \ if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ if(!curlcheck_sockopt_cb(value)) \ _curl_easy_setopt_err_sockopt_cb(); \ if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ if(!curlcheck_opensocket_cb(value)) \ _curl_easy_setopt_err_opensocket_cb(); \ if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ if(!curlcheck_progress_cb(value)) \ _curl_easy_setopt_err_progress_cb(); \ if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ if(!curlcheck_debug_cb(value)) \ _curl_easy_setopt_err_debug_cb(); \ if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ if(!curlcheck_ssl_ctx_cb(value)) \ _curl_easy_setopt_err_ssl_ctx_cb(); \ if(curlcheck_conv_cb_option(_curl_opt)) \ if(!curlcheck_conv_cb(value)) \ _curl_easy_setopt_err_conv_cb(); \ if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ if(!curlcheck_seek_cb(value)) \ _curl_easy_setopt_err_seek_cb(); \ if(curlcheck_cb_data_option(_curl_opt)) \ if(!curlcheck_cb_data(value)) \ _curl_easy_setopt_err_cb_data(); \ if((_curl_opt) == CURLOPT_ERRORBUFFER) \ if(!curlcheck_error_buffer(value)) \ _curl_easy_setopt_err_error_buffer(); \ if((_curl_opt) == CURLOPT_STDERR) \ if(!curlcheck_FILE(value)) \ _curl_easy_setopt_err_FILE(); \ if(curlcheck_postfields_option(_curl_opt)) \ if(!curlcheck_postfields(value)) \ _curl_easy_setopt_err_postfields(); \ if((_curl_opt) == CURLOPT_HTTPPOST) \ if(!curlcheck_arr((value), struct curl_httppost)) \ _curl_easy_setopt_err_curl_httpost(); \ if((_curl_opt) == CURLOPT_MIMEPOST) \ if(!curlcheck_ptr((value), curl_mime)) \ _curl_easy_setopt_err_curl_mimepost(); \ if(curlcheck_slist_option(_curl_opt)) \ if(!curlcheck_arr((value), struct curl_slist)) \ _curl_easy_setopt_err_curl_slist(); \ if((_curl_opt) == CURLOPT_SHARE) \ if(!curlcheck_ptr((value), CURLSH)) \ _curl_easy_setopt_err_CURLSH(); \ } \ curl_easy_setopt(handle, _curl_opt, value); \ }) /* wraps curl_easy_getinfo() with typechecking */ #define curl_easy_getinfo(handle, info, arg) \ __extension__({ \ __typeof__(info) _curl_info = info; \ if(__builtin_constant_p(_curl_info)) { \ if(curlcheck_string_info(_curl_info)) \ if(!curlcheck_arr((arg), char *)) \ _curl_easy_getinfo_err_string(); \ if(curlcheck_long_info(_curl_info)) \ if(!curlcheck_arr((arg), long)) \ _curl_easy_getinfo_err_long(); \ if(curlcheck_double_info(_curl_info)) \ if(!curlcheck_arr((arg), double)) \ _curl_easy_getinfo_err_double(); \ if(curlcheck_slist_info(_curl_info)) \ if(!curlcheck_arr((arg), struct curl_slist *)) \ _curl_easy_getinfo_err_curl_slist(); \ if(curlcheck_tlssessioninfo_info(_curl_info)) \ if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ if(curlcheck_certinfo_info(_curl_info)) \ if(!curlcheck_arr((arg), struct curl_certinfo *)) \ _curl_easy_getinfo_err_curl_certinfo(); \ if(curlcheck_socket_info(_curl_info)) \ if(!curlcheck_arr((arg), curl_socket_t)) \ _curl_easy_getinfo_err_curl_socket(); \ if(curlcheck_off_t_info(_curl_info)) \ if(!curlcheck_arr((arg), curl_off_t)) \ _curl_easy_getinfo_err_curl_off_t(); \ } \ curl_easy_getinfo(handle, _curl_info, arg); \ }) /* * For now, just make sure that the functions are called with three arguments */ #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) /* the actual warnings, triggered by calling the _curl_easy_setopt_err* * functions */ /* To define a new warning, use _CURL_WARNING(identifier, "message") */ #define CURLWARNING(id, message) \ static void __attribute__((__warning__(message))) \ __attribute__((__unused__)) __attribute__((__noinline__)) \ id(void) { __asm__(""); } CURLWARNING(_curl_easy_setopt_err_long, "curl_easy_setopt expects a long argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_off_t, "curl_easy_setopt expects a curl_off_t argument for this option") CURLWARNING(_curl_easy_setopt_err_string, "curl_easy_setopt expects a " "string ('char *' or char[]) argument for this option" ) CURLWARNING(_curl_easy_setopt_err_write_callback, "curl_easy_setopt expects a curl_write_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, "curl_easy_setopt expects a " "curl_resolver_start_callback argument for this option" ) CURLWARNING(_curl_easy_setopt_err_read_cb, "curl_easy_setopt expects a curl_read_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_ioctl_cb, "curl_easy_setopt expects a curl_ioctl_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_sockopt_cb, "curl_easy_setopt expects a curl_sockopt_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_opensocket_cb, "curl_easy_setopt expects a " "curl_opensocket_callback argument for this option" ) CURLWARNING(_curl_easy_setopt_err_progress_cb, "curl_easy_setopt expects a curl_progress_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_debug_cb, "curl_easy_setopt expects a curl_debug_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_conv_cb, "curl_easy_setopt expects a curl_conv_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_seek_cb, "curl_easy_setopt expects a curl_seek_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_cb_data, "curl_easy_setopt expects a " "private data pointer as argument for this option") CURLWARNING(_curl_easy_setopt_err_error_buffer, "curl_easy_setopt expects a " "char buffer of CURL_ERROR_SIZE as argument for this option") CURLWARNING(_curl_easy_setopt_err_FILE, "curl_easy_setopt expects a 'FILE *' argument for this option") CURLWARNING(_curl_easy_setopt_err_postfields, "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_httpost, "curl_easy_setopt expects a 'struct curl_httppost *' " "argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_mimepost, "curl_easy_setopt expects a 'curl_mime *' " "argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_slist, "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") CURLWARNING(_curl_easy_setopt_err_CURLSH, "curl_easy_setopt expects a CURLSH* argument for this option") CURLWARNING(_curl_easy_getinfo_err_string, "curl_easy_getinfo expects a pointer to 'char *' for this info") CURLWARNING(_curl_easy_getinfo_err_long, "curl_easy_getinfo expects a pointer to long for this info") CURLWARNING(_curl_easy_getinfo_err_double, "curl_easy_getinfo expects a pointer to double for this info") CURLWARNING(_curl_easy_getinfo_err_curl_slist, "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, "curl_easy_getinfo expects a pointer to " "'struct curl_tlssessioninfo *' for this info") CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, "curl_easy_getinfo expects a pointer to " "'struct curl_certinfo *' for this info") CURLWARNING(_curl_easy_getinfo_err_curl_socket, "curl_easy_getinfo expects a pointer to curl_socket_t for this info") CURLWARNING(_curl_easy_getinfo_err_curl_off_t, "curl_easy_getinfo expects a pointer to curl_off_t for this info") /* groups of curl_easy_setops options that take the same type of argument */ /* To add a new option to one of the groups, just add * (option) == CURLOPT_SOMETHING * to the or-expression. If the option takes a long or curl_off_t, you don't * have to do anything */ /* evaluates to true if option takes a long argument */ #define curlcheck_long_option(option) \ (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) #define curlcheck_off_t_option(option) \ ((option) > CURLOPTTYPE_OFF_T) /* evaluates to true if option takes a char* argument */ #define curlcheck_string_option(option) \ ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ (option) == CURLOPT_ACCEPT_ENCODING || \ (option) == CURLOPT_ALTSVC || \ (option) == CURLOPT_CAINFO || \ (option) == CURLOPT_CAPATH || \ (option) == CURLOPT_COOKIE || \ (option) == CURLOPT_COOKIEFILE || \ |
︙ | ︙ | |||
307 308 309 310 311 312 313 314 315 316 317 318 319 320 | (option) == CURLOPT_RANDOM_FILE || \ (option) == CURLOPT_RANGE || \ (option) == CURLOPT_REFERER || \ (option) == CURLOPT_REQUEST_TARGET || \ (option) == CURLOPT_RTSP_SESSION_ID || \ (option) == CURLOPT_RTSP_STREAM_URI || \ (option) == CURLOPT_RTSP_TRANSPORT || \ (option) == CURLOPT_SERVICE_NAME || \ (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ (option) == CURLOPT_SSH_KNOWNHOSTS || \ (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ (option) == CURLOPT_SSLCERT || \ | > | 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | (option) == CURLOPT_RANDOM_FILE || \ (option) == CURLOPT_RANGE || \ (option) == CURLOPT_REFERER || \ (option) == CURLOPT_REQUEST_TARGET || \ (option) == CURLOPT_RTSP_SESSION_ID || \ (option) == CURLOPT_RTSP_STREAM_URI || \ (option) == CURLOPT_RTSP_TRANSPORT || \ (option) == CURLOPT_SASL_AUTHZID || \ (option) == CURLOPT_SERVICE_NAME || \ (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ (option) == CURLOPT_SSH_KNOWNHOSTS || \ (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ (option) == CURLOPT_SSLCERT || \ |
︙ | ︙ | |||
332 333 334 335 336 337 338 | (option) == CURLOPT_USERAGENT || \ (option) == CURLOPT_USERNAME || \ (option) == CURLOPT_USERPWD || \ (option) == CURLOPT_XOAUTH2_BEARER || \ 0) /* evaluates to true if option takes a curl_write_callback argument */ | | | | | | | | 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | (option) == CURLOPT_USERAGENT || \ (option) == CURLOPT_USERNAME || \ (option) == CURLOPT_USERPWD || \ (option) == CURLOPT_XOAUTH2_BEARER || \ 0) /* evaluates to true if option takes a curl_write_callback argument */ #define curlcheck_write_cb_option(option) \ ((option) == CURLOPT_HEADERFUNCTION || \ (option) == CURLOPT_WRITEFUNCTION) /* evaluates to true if option takes a curl_conv_callback argument */ #define curlcheck_conv_cb_option(option) \ ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) /* evaluates to true if option takes a data argument to pass to a callback */ #define curlcheck_cb_data_option(option) \ ((option) == CURLOPT_CHUNK_DATA || \ (option) == CURLOPT_CLOSESOCKETDATA || \ (option) == CURLOPT_DEBUGDATA || \ (option) == CURLOPT_FNMATCH_DATA || \ (option) == CURLOPT_HEADERDATA || \ (option) == CURLOPT_INTERLEAVEDATA || \ (option) == CURLOPT_IOCTLDATA || \ |
︙ | ︙ | |||
365 366 367 368 369 370 371 | (option) == CURLOPT_SSL_CTX_DATA || \ (option) == CURLOPT_WRITEDATA || \ (option) == CURLOPT_RESOLVER_START_DATA || \ (option) == CURLOPT_TRAILERDATA || \ 0) /* evaluates to true if option takes a POST data argument (void* or char*) */ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 | (option) == CURLOPT_SSL_CTX_DATA || \ (option) == CURLOPT_WRITEDATA || \ (option) == CURLOPT_RESOLVER_START_DATA || \ (option) == CURLOPT_TRAILERDATA || \ 0) /* evaluates to true if option takes a POST data argument (void* or char*) */ #define curlcheck_postfields_option(option) \ ((option) == CURLOPT_POSTFIELDS || \ (option) == CURLOPT_COPYPOSTFIELDS || \ 0) /* evaluates to true if option takes a struct curl_slist * argument */ #define curlcheck_slist_option(option) \ ((option) == CURLOPT_HTTP200ALIASES || \ (option) == CURLOPT_HTTPHEADER || \ (option) == CURLOPT_MAIL_RCPT || \ (option) == CURLOPT_POSTQUOTE || \ (option) == CURLOPT_PREQUOTE || \ (option) == CURLOPT_PROXYHEADER || \ (option) == CURLOPT_QUOTE || \ (option) == CURLOPT_RESOLVE || \ (option) == CURLOPT_TELNETOPTIONS || \ (option) == CURLOPT_CONNECT_TO || \ 0) /* groups of curl_easy_getinfo infos that take the same type of argument */ /* evaluates to true if info expects a pointer to char * argument */ #define curlcheck_string_info(info) \ (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG) /* evaluates to true if info expects a pointer to long argument */ #define curlcheck_long_info(info) \ (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) /* evaluates to true if info expects a pointer to double argument */ #define curlcheck_double_info(info) \ (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) /* true if info expects a pointer to struct curl_slist * argument */ #define curlcheck_slist_info(info) \ (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) /* true if info expects a pointer to struct curl_tlssessioninfo * argument */ #define curlcheck_tlssessioninfo_info(info) \ (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) /* true if info expects a pointer to struct curl_certinfo * argument */ #define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) /* true if info expects a pointer to struct curl_socket_t argument */ #define curlcheck_socket_info(info) \ (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) /* true if info expects a pointer to curl_off_t argument */ #define curlcheck_off_t_info(info) \ (CURLINFO_OFF_T < (info)) /* typecheck helpers -- check whether given expression has requested type*/ /* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, * otherwise define a new macro. Search for __builtin_types_compatible_p * in the GCC manual. * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is * the actual expression passed to the curl_easy_setopt macro. This * means that you can only apply the sizeof and __typeof__ operators, no * == or whatsoever. */ /* XXX: should evaluate to true if expr is a pointer */ #define curlcheck_any_ptr(expr) \ (sizeof(expr) == sizeof(void *)) /* evaluates to true if expr is NULL */ /* XXX: must not evaluate expr, so this check is not accurate */ #define curlcheck_NULL(expr) \ (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) /* evaluates to true if expr is type*, const type* or NULL */ #define curlcheck_ptr(expr, type) \ (curlcheck_NULL(expr) || \ __builtin_types_compatible_p(__typeof__(expr), type *) || \ __builtin_types_compatible_p(__typeof__(expr), const type *)) /* evaluates to true if expr is one of type[], type*, NULL or const type* */ #define curlcheck_arr(expr, type) \ (curlcheck_ptr((expr), type) || \ __builtin_types_compatible_p(__typeof__(expr), type [])) /* evaluates to true if expr is a string */ #define curlcheck_string(expr) \ (curlcheck_arr((expr), char) || \ curlcheck_arr((expr), signed char) || \ curlcheck_arr((expr), unsigned char)) /* evaluates to true if expr is a long (no matter the signedness) * XXX: for now, int is also accepted (and therefore short and char, which * are promoted to int when passed to a variadic function) */ #define curlcheck_long(expr) \ (__builtin_types_compatible_p(__typeof__(expr), long) || \ __builtin_types_compatible_p(__typeof__(expr), signed long) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ __builtin_types_compatible_p(__typeof__(expr), int) || \ __builtin_types_compatible_p(__typeof__(expr), signed int) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ __builtin_types_compatible_p(__typeof__(expr), short) || \ __builtin_types_compatible_p(__typeof__(expr), signed short) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ __builtin_types_compatible_p(__typeof__(expr), char) || \ __builtin_types_compatible_p(__typeof__(expr), signed char) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned char)) /* evaluates to true if expr is of type curl_off_t */ #define curlcheck_off_t(expr) \ (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) /* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ /* XXX: also check size of an char[] array? */ #define curlcheck_error_buffer(expr) \ (curlcheck_NULL(expr) || \ __builtin_types_compatible_p(__typeof__(expr), char *) || \ __builtin_types_compatible_p(__typeof__(expr), char[])) /* evaluates to true if expr is of type (const) void* or (const) FILE* */ #if 0 #define curlcheck_cb_data(expr) \ (curlcheck_ptr((expr), void) || \ curlcheck_ptr((expr), FILE)) #else /* be less strict */ #define curlcheck_cb_data(expr) \ curlcheck_any_ptr(expr) #endif /* evaluates to true if expr is of type FILE* */ #define curlcheck_FILE(expr) \ (curlcheck_NULL(expr) || \ (__builtin_types_compatible_p(__typeof__(expr), FILE *))) /* evaluates to true if expr can be passed as POST data (void* or char*) */ #define curlcheck_postfields(expr) \ (curlcheck_ptr((expr), void) || \ curlcheck_arr((expr), char) || \ curlcheck_arr((expr), unsigned char)) /* helper: __builtin_types_compatible_p distinguishes between functions and * function pointers, hide it */ #define curlcheck_cb_compatible(func, type) \ (__builtin_types_compatible_p(__typeof__(func), type) || \ __builtin_types_compatible_p(__typeof__(func) *, type)) /* evaluates to true if expr is of type curl_resolver_start_callback */ #define curlcheck_resolver_start_callback(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_resolver_start_callback)) /* evaluates to true if expr is of type curl_read_callback or "similar" */ #define curlcheck_read_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ curlcheck_cb_compatible((expr), curl_read_callback) || \ curlcheck_cb_compatible((expr), _curl_read_callback1) || \ curlcheck_cb_compatible((expr), _curl_read_callback2) || \ curlcheck_cb_compatible((expr), _curl_read_callback3) || \ curlcheck_cb_compatible((expr), _curl_read_callback4) || \ curlcheck_cb_compatible((expr), _curl_read_callback5) || \ curlcheck_cb_compatible((expr), _curl_read_callback6)) typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); /* evaluates to true if expr is of type curl_write_callback or "similar" */ #define curlcheck_write_cb(expr) \ (curlcheck_read_cb(expr) || \ curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ curlcheck_cb_compatible((expr), curl_write_callback) || \ curlcheck_cb_compatible((expr), _curl_write_callback1) || \ curlcheck_cb_compatible((expr), _curl_write_callback2) || \ curlcheck_cb_compatible((expr), _curl_write_callback3) || \ curlcheck_cb_compatible((expr), _curl_write_callback4) || \ curlcheck_cb_compatible((expr), _curl_write_callback5) || \ curlcheck_cb_compatible((expr), _curl_write_callback6)) typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, const void *); typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, const void *); typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); /* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ #define curlcheck_ioctl_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); /* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ #define curlcheck_sockopt_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, curlsocktype); /* evaluates to true if expr is of type curl_opensocket_callback or "similar" */ #define curlcheck_opensocket_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) typedef curl_socket_t (*_curl_opensocket_callback1) (void *, curlsocktype, struct curl_sockaddr *); typedef curl_socket_t (*_curl_opensocket_callback2) (void *, curlsocktype, const struct curl_sockaddr *); typedef curl_socket_t (*_curl_opensocket_callback3) (const void *, curlsocktype, struct curl_sockaddr *); typedef curl_socket_t (*_curl_opensocket_callback4) (const void *, curlsocktype, const struct curl_sockaddr *); /* evaluates to true if expr is of type curl_progress_callback or "similar" */ #define curlcheck_progress_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_progress_callback) || \ curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ curlcheck_cb_compatible((expr), _curl_progress_callback2)) typedef int (*_curl_progress_callback1)(void *, double, double, double, double); typedef int (*_curl_progress_callback2)(const void *, double, double, double, double); /* evaluates to true if expr is of type curl_debug_callback or "similar" */ #define curlcheck_debug_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_debug_callback) || \ curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ curlcheck_cb_compatible((expr), _curl_debug_callback8)) typedef int (*_curl_debug_callback1) (CURL *, curl_infotype, char *, size_t, void *); typedef int (*_curl_debug_callback2) (CURL *, curl_infotype, char *, size_t, const void *); typedef int (*_curl_debug_callback3) (CURL *, curl_infotype, const char *, size_t, void *); typedef int (*_curl_debug_callback4) (CURL *, curl_infotype, const char *, size_t, const void *); typedef int (*_curl_debug_callback5) (CURL *, curl_infotype, unsigned char *, size_t, void *); typedef int (*_curl_debug_callback6) (CURL *, curl_infotype, unsigned char *, size_t, const void *); typedef int (*_curl_debug_callback7) (CURL *, curl_infotype, const unsigned char *, size_t, void *); typedef int (*_curl_debug_callback8) (CURL *, curl_infotype, const unsigned char *, size_t, const void *); /* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ /* this is getting even messier... */ #define curlcheck_ssl_ctx_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, const void *); #ifdef HEADER_SSL_H /* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX |
︙ | ︙ | |||
669 670 671 672 673 674 675 | typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; #endif /* evaluates to true if expr is of type curl_conv_callback or "similar" */ | | | | | | | | | | | | | | | 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 | typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; #endif /* evaluates to true if expr is of type curl_conv_callback or "similar" */ #define curlcheck_conv_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_conv_callback) || \ curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ curlcheck_cb_compatible((expr), _curl_conv_callback4)) typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); /* evaluates to true if expr is of type curl_seek_callback or "similar" */ #define curlcheck_seek_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_seek_callback) || \ curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ curlcheck_cb_compatible((expr), _curl_seek_callback2)) typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); #endif /* CURLINC_TYPECHECK_GCC_H */ |
Changes to jni/curl/include/curl/urlapi.h.
|
| | | | 1 2 3 4 5 6 7 8 9 | #ifndef CURLINC_URLAPI_H #define CURLINC_URLAPI_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * |
︙ | ︙ | |||
116 117 118 119 120 121 122 | const char *part, unsigned int flags); #ifdef __cplusplus } /* end of extern "C" */ #endif | | | 116 117 118 119 120 121 122 123 | const char *part, unsigned int flags); #ifdef __cplusplus } /* end of extern "C" */ #endif #endif /* CURLINC_URLAPI_H */ |
Changes to jni/curl/lib/Makefile.am.
︙ | ︙ | |||
19 20 21 22 23 24 25 | # KIND, either express or implied. # ########################################################################### AUTOMAKE_OPTIONS = foreign nostdinc CMAKE_DIST = CMakeLists.txt curl_config.h.cmake | | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # KIND, either express or implied. # ########################################################################### AUTOMAKE_OPTIONS = foreign nostdinc CMAKE_DIST = CMakeLists.txt curl_config.h.cmake EXTRA_DIST = Makefile.m32 config-win32.h config-win32ce.h \ config-plan9.h config-riscos.h config-mac.h curl_config.h.in \ makefile.dj config-dos.h libcurl.plist libcurl.rc config-amigaos.h \ makefile.amiga Makefile.netware nwlib.c nwos.c config-win32ce.h \ config-os400.h setup-os400.h config-symbian.h Makefile.Watcom \ config-tpf.h mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST) \ firefox-db2pem.sh config-vxworks.h Makefile.vxworks checksrc.pl lib_LTLIBRARIES = libcurl.la |
︙ | ︙ | |||
61 62 63 64 65 66 67 | AM_CPPFLAGS += -I$(top_builddir)/ares \ -I$(top_srcdir)/ares endif # Prevent LIBS from being used for all link targets LIBS = $(BLANK_AT_MAKETIME) | | | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | AM_CPPFLAGS += -I$(top_builddir)/ares \ -I$(top_srcdir)/ares endif # Prevent LIBS from being used for all link targets LIBS = $(BLANK_AT_MAKETIME) VERSIONINFO=-version-info 10:0:6 # This flag accepts an argument of the form current[:revision[:age]]. So, # passing -version-info 3:12:1 sets current to 3, revision to 12, and age to # 1. # # Here's the simplified rule guide on how to change -version-info: # (current version is C:R:A) # |
︙ | ︙ | |||
134 135 136 137 138 139 140 | CHECKSRC = $(CS_$(V)) CS_0 = @echo " RUN " $@; CS_1 = CS_ = $(CS_0) checksrc: $(CHECKSRC)(@PERL@ $(srcdir)/checksrc.pl -D$(srcdir) -W$(srcdir)/curl_config.h \ | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | CHECKSRC = $(CS_$(V)) CS_0 = @echo " RUN " $@; CS_1 = CS_ = $(CS_0) checksrc: $(CHECKSRC)(@PERL@ $(srcdir)/checksrc.pl -D$(srcdir) -W$(srcdir)/curl_config.h \ $(srcdir)/*.[ch] $(srcdir)/vauth/*.[ch] $(srcdir)/vtls/*.[ch] $(srcdir)/vquic/*.[ch] $(srcdir)/vssh/*.[ch]) if CURLDEBUG # for debug builds, we scan the sources on all regular make invokes all-local: checksrc endif # disable the tests that are mostly causing false positives TIDYFLAGS=-checks=-clang-analyzer-security.insecureAPI.strcpy,-clang-analyzer-optin.performance.Padding,-clang-analyzer-valist.Uninitialized,-clang-analyzer-core.NonNullParamChecker,-clang-analyzer-core.NullDereference -quiet TIDY:=clang-tidy tidy: $(TIDY) $(CSOURCES) $(TIDYFLAGS) -- $(AM_CPPFLAGS) $(CPPFLAGS) -DHAVE_CONFIG_H |
Changes to jni/curl/lib/Makefile.in.
︙ | ︙ | |||
201 202 203 204 205 206 207 | libcurl_la-http_negotiate.lo libcurl_la-inet_pton.lo \ libcurl_la-strtoofft.lo libcurl_la-strerror.lo \ libcurl_la-amigaos.lo libcurl_la-hostasyn.lo \ libcurl_la-hostip4.lo libcurl_la-hostip6.lo \ libcurl_la-hostsyn.lo libcurl_la-inet_ntop.lo \ libcurl_la-parsedate.lo libcurl_la-select.lo \ libcurl_la-tftp.lo libcurl_la-splay.lo libcurl_la-strdup.lo \ | | | | | | | | | | | | | | | | | | < | | 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | libcurl_la-http_negotiate.lo libcurl_la-inet_pton.lo \ libcurl_la-strtoofft.lo libcurl_la-strerror.lo \ libcurl_la-amigaos.lo libcurl_la-hostasyn.lo \ libcurl_la-hostip4.lo libcurl_la-hostip6.lo \ libcurl_la-hostsyn.lo libcurl_la-inet_ntop.lo \ libcurl_la-parsedate.lo libcurl_la-select.lo \ libcurl_la-tftp.lo libcurl_la-splay.lo libcurl_la-strdup.lo \ libcurl_la-socks.lo libcurl_la-curl_addrinfo.lo \ libcurl_la-socks_gssapi.lo libcurl_la-socks_sspi.lo \ libcurl_la-curl_sspi.lo libcurl_la-slist.lo \ libcurl_la-nonblock.lo libcurl_la-curl_memrchr.lo \ libcurl_la-imap.lo libcurl_la-pop3.lo libcurl_la-smtp.lo \ libcurl_la-pingpong.lo libcurl_la-rtsp.lo \ libcurl_la-curl_threads.lo libcurl_la-warnless.lo \ libcurl_la-hmac.lo libcurl_la-curl_rtmp.lo \ libcurl_la-openldap.lo libcurl_la-curl_gethostname.lo \ libcurl_la-gopher.lo libcurl_la-idn_win32.lo \ libcurl_la-http_proxy.lo libcurl_la-non-ascii.lo \ libcurl_la-asyn-ares.lo libcurl_la-asyn-thread.lo \ libcurl_la-curl_gssapi.lo libcurl_la-http_ntlm.lo \ libcurl_la-curl_ntlm_wb.lo libcurl_la-curl_ntlm_core.lo \ libcurl_la-curl_sasl.lo libcurl_la-rand.lo \ libcurl_la-curl_multibyte.lo libcurl_la-hostcheck.lo \ libcurl_la-conncache.lo libcurl_la-dotdot.lo \ libcurl_la-x509asn1.lo libcurl_la-http2.lo libcurl_la-smb.lo \ libcurl_la-curl_endian.lo libcurl_la-curl_des.lo \ libcurl_la-system_win32.lo libcurl_la-mime.lo \ libcurl_la-sha256.lo libcurl_la-setopt.lo \ libcurl_la-curl_path.lo libcurl_la-curl_ctype.lo \ libcurl_la-curl_range.lo libcurl_la-psl.lo libcurl_la-doh.lo \ libcurl_la-urlapi.lo libcurl_la-curl_get_line.lo \ libcurl_la-altsvc.lo |
︙ | ︙ | |||
243 244 245 246 247 248 249 | vtls/libcurl_la-vtls.lo vtls/libcurl_la-nss.lo \ vtls/libcurl_la-polarssl.lo \ vtls/libcurl_la-polarssl_threadlock.lo \ vtls/libcurl_la-wolfssl.lo vtls/libcurl_la-schannel.lo \ vtls/libcurl_la-schannel_verify.lo \ vtls/libcurl_la-sectransp.lo vtls/libcurl_la-gskit.lo \ vtls/libcurl_la-mbedtls.lo vtls/libcurl_la-mesalink.lo | > > | > | > | | | | 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | vtls/libcurl_la-vtls.lo vtls/libcurl_la-nss.lo \ vtls/libcurl_la-polarssl.lo \ vtls/libcurl_la-polarssl_threadlock.lo \ vtls/libcurl_la-wolfssl.lo vtls/libcurl_la-schannel.lo \ vtls/libcurl_la-schannel_verify.lo \ vtls/libcurl_la-sectransp.lo vtls/libcurl_la-gskit.lo \ vtls/libcurl_la-mbedtls.lo vtls/libcurl_la-mesalink.lo am__objects_4 = vquic/libcurl_la-ngtcp2.lo vquic/libcurl_la-quiche.lo am__objects_5 = vssh/libcurl_la-libssh2.lo vssh/libcurl_la-libssh.lo am__objects_6 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) am__objects_7 = am__objects_8 = $(am__objects_7) $(am__objects_7) $(am__objects_7) \ $(am__objects_7) am_libcurl_la_OBJECTS = $(am__objects_6) $(am__objects_8) libcurl_la_OBJECTS = $(am_libcurl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libcurl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcurl_la_CFLAGS) \ $(CFLAGS) $(libcurl_la_LDFLAGS) $(LDFLAGS) -o $@ libcurlu_la_LIBADD = am__objects_9 = libcurlu_la-file.lo libcurlu_la-timeval.lo \ libcurlu_la-base64.lo libcurlu_la-hostip.lo \ libcurlu_la-progress.lo libcurlu_la-formdata.lo \ libcurlu_la-cookie.lo libcurlu_la-http.lo libcurlu_la-sendf.lo \ libcurlu_la-ftp.lo libcurlu_la-url.lo libcurlu_la-dict.lo \ libcurlu_la-if2ip.lo libcurlu_la-speedcheck.lo \ libcurlu_la-ldap.lo libcurlu_la-version.lo \ libcurlu_la-getenv.lo libcurlu_la-escape.lo \ |
︙ | ︙ | |||
283 284 285 286 287 288 289 | libcurlu_la-md5.lo libcurlu_la-http_negotiate.lo \ libcurlu_la-inet_pton.lo libcurlu_la-strtoofft.lo \ libcurlu_la-strerror.lo libcurlu_la-amigaos.lo \ libcurlu_la-hostasyn.lo libcurlu_la-hostip4.lo \ libcurlu_la-hostip6.lo libcurlu_la-hostsyn.lo \ libcurlu_la-inet_ntop.lo libcurlu_la-parsedate.lo \ libcurlu_la-select.lo libcurlu_la-tftp.lo libcurlu_la-splay.lo \ | | | | | | | | | > > > > > | | | 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | libcurlu_la-md5.lo libcurlu_la-http_negotiate.lo \ libcurlu_la-inet_pton.lo libcurlu_la-strtoofft.lo \ libcurlu_la-strerror.lo libcurlu_la-amigaos.lo \ libcurlu_la-hostasyn.lo libcurlu_la-hostip4.lo \ libcurlu_la-hostip6.lo libcurlu_la-hostsyn.lo \ libcurlu_la-inet_ntop.lo libcurlu_la-parsedate.lo \ libcurlu_la-select.lo libcurlu_la-tftp.lo libcurlu_la-splay.lo \ libcurlu_la-strdup.lo libcurlu_la-socks.lo \ libcurlu_la-curl_addrinfo.lo libcurlu_la-socks_gssapi.lo \ libcurlu_la-socks_sspi.lo libcurlu_la-curl_sspi.lo \ libcurlu_la-slist.lo libcurlu_la-nonblock.lo \ libcurlu_la-curl_memrchr.lo libcurlu_la-imap.lo \ libcurlu_la-pop3.lo libcurlu_la-smtp.lo \ libcurlu_la-pingpong.lo libcurlu_la-rtsp.lo \ libcurlu_la-curl_threads.lo libcurlu_la-warnless.lo \ libcurlu_la-hmac.lo libcurlu_la-curl_rtmp.lo \ libcurlu_la-openldap.lo libcurlu_la-curl_gethostname.lo \ libcurlu_la-gopher.lo libcurlu_la-idn_win32.lo \ libcurlu_la-http_proxy.lo libcurlu_la-non-ascii.lo \ libcurlu_la-asyn-ares.lo libcurlu_la-asyn-thread.lo \ libcurlu_la-curl_gssapi.lo libcurlu_la-http_ntlm.lo \ libcurlu_la-curl_ntlm_wb.lo libcurlu_la-curl_ntlm_core.lo \ libcurlu_la-curl_sasl.lo libcurlu_la-rand.lo \ libcurlu_la-curl_multibyte.lo libcurlu_la-hostcheck.lo \ libcurlu_la-conncache.lo libcurlu_la-dotdot.lo \ libcurlu_la-x509asn1.lo libcurlu_la-http2.lo \ libcurlu_la-smb.lo libcurlu_la-curl_endian.lo \ libcurlu_la-curl_des.lo libcurlu_la-system_win32.lo \ libcurlu_la-mime.lo libcurlu_la-sha256.lo \ libcurlu_la-setopt.lo libcurlu_la-curl_path.lo \ libcurlu_la-curl_ctype.lo libcurlu_la-curl_range.lo \ libcurlu_la-psl.lo libcurlu_la-doh.lo libcurlu_la-urlapi.lo \ libcurlu_la-curl_get_line.lo libcurlu_la-altsvc.lo am__objects_10 = vauth/libcurlu_la-vauth.lo \ vauth/libcurlu_la-cleartext.lo vauth/libcurlu_la-cram.lo \ vauth/libcurlu_la-digest.lo vauth/libcurlu_la-digest_sspi.lo \ vauth/libcurlu_la-krb5_gssapi.lo \ vauth/libcurlu_la-krb5_sspi.lo vauth/libcurlu_la-ntlm.lo \ vauth/libcurlu_la-ntlm_sspi.lo vauth/libcurlu_la-oauth2.lo \ vauth/libcurlu_la-spnego_gssapi.lo \ vauth/libcurlu_la-spnego_sspi.lo am__objects_11 = vtls/libcurlu_la-openssl.lo vtls/libcurlu_la-gtls.lo \ vtls/libcurlu_la-vtls.lo vtls/libcurlu_la-nss.lo \ vtls/libcurlu_la-polarssl.lo \ vtls/libcurlu_la-polarssl_threadlock.lo \ vtls/libcurlu_la-wolfssl.lo vtls/libcurlu_la-schannel.lo \ vtls/libcurlu_la-schannel_verify.lo \ vtls/libcurlu_la-sectransp.lo vtls/libcurlu_la-gskit.lo \ vtls/libcurlu_la-mbedtls.lo vtls/libcurlu_la-mesalink.lo am__objects_12 = vquic/libcurlu_la-ngtcp2.lo \ vquic/libcurlu_la-quiche.lo am__objects_13 = vssh/libcurlu_la-libssh2.lo \ vssh/libcurlu_la-libssh.lo am__objects_14 = $(am__objects_9) $(am__objects_10) $(am__objects_11) \ $(am__objects_12) $(am__objects_13) am_libcurlu_la_OBJECTS = $(am__objects_14) $(am__objects_8) libcurlu_la_OBJECTS = $(am_libcurlu_la_OBJECTS) libcurlu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcurlu_la_CFLAGS) \ $(CFLAGS) $(libcurlu_la_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_UNITTESTS_TRUE@am_libcurlu_la_rpath = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) |
︙ | ︙ | |||
437 438 439 440 441 442 443 | ./$(DEPDIR)/libcurl_la-slist.Plo \ ./$(DEPDIR)/libcurl_la-smb.Plo ./$(DEPDIR)/libcurl_la-smtp.Plo \ ./$(DEPDIR)/libcurl_la-socks.Plo \ ./$(DEPDIR)/libcurl_la-socks_gssapi.Plo \ ./$(DEPDIR)/libcurl_la-socks_sspi.Plo \ ./$(DEPDIR)/libcurl_la-speedcheck.Plo \ ./$(DEPDIR)/libcurl_la-splay.Plo \ | < < | 445 446 447 448 449 450 451 452 453 454 455 456 457 458 | ./$(DEPDIR)/libcurl_la-slist.Plo \ ./$(DEPDIR)/libcurl_la-smb.Plo ./$(DEPDIR)/libcurl_la-smtp.Plo \ ./$(DEPDIR)/libcurl_la-socks.Plo \ ./$(DEPDIR)/libcurl_la-socks_gssapi.Plo \ ./$(DEPDIR)/libcurl_la-socks_sspi.Plo \ ./$(DEPDIR)/libcurl_la-speedcheck.Plo \ ./$(DEPDIR)/libcurl_la-splay.Plo \ ./$(DEPDIR)/libcurl_la-strcase.Plo \ ./$(DEPDIR)/libcurl_la-strdup.Plo \ ./$(DEPDIR)/libcurl_la-strerror.Plo \ ./$(DEPDIR)/libcurl_la-strtok.Plo \ ./$(DEPDIR)/libcurl_la-strtoofft.Plo \ ./$(DEPDIR)/libcurl_la-system_win32.Plo \ ./$(DEPDIR)/libcurl_la-telnet.Plo \ |
︙ | ︙ | |||
549 550 551 552 553 554 555 | ./$(DEPDIR)/libcurlu_la-smb.Plo \ ./$(DEPDIR)/libcurlu_la-smtp.Plo \ ./$(DEPDIR)/libcurlu_la-socks.Plo \ ./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo \ ./$(DEPDIR)/libcurlu_la-socks_sspi.Plo \ ./$(DEPDIR)/libcurlu_la-speedcheck.Plo \ ./$(DEPDIR)/libcurlu_la-splay.Plo \ | < < | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 | ./$(DEPDIR)/libcurlu_la-smb.Plo \ ./$(DEPDIR)/libcurlu_la-smtp.Plo \ ./$(DEPDIR)/libcurlu_la-socks.Plo \ ./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo \ ./$(DEPDIR)/libcurlu_la-socks_sspi.Plo \ ./$(DEPDIR)/libcurlu_la-speedcheck.Plo \ ./$(DEPDIR)/libcurlu_la-splay.Plo \ ./$(DEPDIR)/libcurlu_la-strcase.Plo \ ./$(DEPDIR)/libcurlu_la-strdup.Plo \ ./$(DEPDIR)/libcurlu_la-strerror.Plo \ ./$(DEPDIR)/libcurlu_la-strtok.Plo \ ./$(DEPDIR)/libcurlu_la-strtoofft.Plo \ ./$(DEPDIR)/libcurlu_la-system_win32.Plo \ ./$(DEPDIR)/libcurlu_la-telnet.Plo \ |
︙ | ︙ | |||
591 592 593 594 595 596 597 598 599 600 601 602 603 604 | vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo \ vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo \ vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo \ vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo \ vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo \ vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo \ vauth/$(DEPDIR)/libcurlu_la-vauth.Plo \ vtls/$(DEPDIR)/libcurl_la-gskit.Plo \ vtls/$(DEPDIR)/libcurl_la-gtls.Plo \ vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo \ vtls/$(DEPDIR)/libcurl_la-mesalink.Plo \ vtls/$(DEPDIR)/libcurl_la-nss.Plo \ vtls/$(DEPDIR)/libcurl_la-openssl.Plo \ vtls/$(DEPDIR)/libcurl_la-polarssl.Plo \ | > > > > > > > > | 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 | vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo \ vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo \ vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo \ vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo \ vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo \ vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo \ vauth/$(DEPDIR)/libcurlu_la-vauth.Plo \ vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo \ vquic/$(DEPDIR)/libcurl_la-quiche.Plo \ vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo \ vquic/$(DEPDIR)/libcurlu_la-quiche.Plo \ vssh/$(DEPDIR)/libcurl_la-libssh.Plo \ vssh/$(DEPDIR)/libcurl_la-libssh2.Plo \ vssh/$(DEPDIR)/libcurlu_la-libssh.Plo \ vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo \ vtls/$(DEPDIR)/libcurl_la-gskit.Plo \ vtls/$(DEPDIR)/libcurl_la-gtls.Plo \ vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo \ vtls/$(DEPDIR)/libcurl_la-mesalink.Plo \ vtls/$(DEPDIR)/libcurl_la-nss.Plo \ vtls/$(DEPDIR)/libcurl_la-openssl.Plo \ vtls/$(DEPDIR)/libcurl_la-polarssl.Plo \ |
︙ | ︙ | |||
804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
894 895 896 897 898 899 900 | # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### AUTOMAKE_OPTIONS = foreign nostdinc CMAKE_DIST = CMakeLists.txt curl_config.h.cmake | | | | 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 | # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### AUTOMAKE_OPTIONS = foreign nostdinc CMAKE_DIST = CMakeLists.txt curl_config.h.cmake EXTRA_DIST = Makefile.m32 config-win32.h config-win32ce.h \ config-plan9.h config-riscos.h config-mac.h curl_config.h.in \ makefile.dj config-dos.h libcurl.plist libcurl.rc config-amigaos.h \ makefile.amiga Makefile.netware nwlib.c nwos.c config-win32ce.h \ config-os400.h setup-os400.h config-symbian.h Makefile.Watcom \ config-tpf.h mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST) \ firefox-db2pem.sh config-vxworks.h Makefile.vxworks checksrc.pl lib_LTLIBRARIES = libcurl.la |
︙ | ︙ | |||
930 931 932 933 934 935 936 | # 1. if there are only source changes, use C:R+1:A # 2. if interfaces were added use C+1:0:A+1 # 3. if interfaces were removed, then use C+1:0:0 # # For the full guide on libcurl ABI rules, see docs/libcurl/ABI AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/lib \ -I$(top_srcdir)/lib $(am__append_1) -DBUILDING_LIBCURL | | | 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 | # 1. if there are only source changes, use C:R+1:A # 2. if interfaces were added use C+1:0:A+1 # 3. if interfaces were removed, then use C+1:0:0 # # For the full guide on libcurl ABI rules, see docs/libcurl/ABI AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/lib \ -I$(top_srcdir)/lib $(am__append_1) -DBUILDING_LIBCURL VERSIONINFO = -version-info 10:0:6 AM_LDFLAGS = AM_CFLAGS = libcurl_la_CPPFLAGS_EXTRA = $(am__append_7) $(am__append_8) libcurl_la_LDFLAGS_EXTRA = $(am__append_2) $(am__append_3) \ $(am__append_4) $(am__append_5) $(am__append_6) libcurl_la_CFLAGS_EXTRA = $(am__append_9) libcurl_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcurl_la_CPPFLAGS_EXTRA) |
︙ | ︙ | |||
959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 | vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h \ vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h \ vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h \ vtls/mbedtls.h vtls/mesalink.h LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \ getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c \ fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \ strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ | > > > | | 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 | vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h \ vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h \ vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h \ vtls/mbedtls.h vtls/mesalink.h LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \ getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c \ fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \ strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ curl_addrinfo.c socks_gssapi.c socks_sspi.c \ curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c \ pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c \ openldap.c curl_gethostname.c gopher.c idn_win32.c \ http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c \ http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c \ curl_multibyte.c hostcheck.c conncache.c dotdot.c \ x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c \ |
︙ | ︙ | |||
998 999 1000 1001 1002 1003 1004 | curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \ http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_setup_once.h multihandle.h setup-vms.h dotdot.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h \ curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h \ | | | > > | > > | 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 | curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \ http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_setup_once.h multihandle.h setup-vms.h dotdot.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h \ curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h \ curl_get_line.h altsvc.h quic.h LIB_RCFILES = libcurl.rc CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \ $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES) HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \ $(LIB_VQUIC_HFILES) # Makefile.inc provides the CSOURCES and HHEADERS defines libcurl_la_SOURCES = $(CSOURCES) $(HHEADERS) libcurlu_la_SOURCES = $(CSOURCES) $(HHEADERS) CHECKSRC = $(CS_$(V)) CS_0 = @echo " RUN " $@; CS_1 = |
︙ | ︙ | |||
1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 | vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurl_la-gskit.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurl_la-mbedtls.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurl_la-mesalink.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) libcurl.la: $(libcurl_la_OBJECTS) $(libcurl_la_DEPENDENCIES) $(EXTRA_libcurl_la_DEPENDENCIES) $(AM_V_CCLD)$(libcurl_la_LINK) -rpath $(libdir) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS) vauth/libcurlu_la-vauth.lo: vauth/$(am__dirstamp) \ vauth/$(DEPDIR)/$(am__dirstamp) vauth/libcurlu_la-cleartext.lo: vauth/$(am__dirstamp) \ vauth/$(DEPDIR)/$(am__dirstamp) | > > > > > > > > > > > > > > > > > > > > | 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 | vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurl_la-gskit.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurl_la-mbedtls.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurl_la-mesalink.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vquic/$(am__dirstamp): @$(MKDIR_P) vquic @: > vquic/$(am__dirstamp) vquic/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) vquic/$(DEPDIR) @: > vquic/$(DEPDIR)/$(am__dirstamp) vquic/libcurl_la-ngtcp2.lo: vquic/$(am__dirstamp) \ vquic/$(DEPDIR)/$(am__dirstamp) vquic/libcurl_la-quiche.lo: vquic/$(am__dirstamp) \ vquic/$(DEPDIR)/$(am__dirstamp) vssh/$(am__dirstamp): @$(MKDIR_P) vssh @: > vssh/$(am__dirstamp) vssh/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) vssh/$(DEPDIR) @: > vssh/$(DEPDIR)/$(am__dirstamp) vssh/libcurl_la-libssh2.lo: vssh/$(am__dirstamp) \ vssh/$(DEPDIR)/$(am__dirstamp) vssh/libcurl_la-libssh.lo: vssh/$(am__dirstamp) \ vssh/$(DEPDIR)/$(am__dirstamp) libcurl.la: $(libcurl_la_OBJECTS) $(libcurl_la_DEPENDENCIES) $(EXTRA_libcurl_la_DEPENDENCIES) $(AM_V_CCLD)$(libcurl_la_LINK) -rpath $(libdir) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS) vauth/libcurlu_la-vauth.lo: vauth/$(am__dirstamp) \ vauth/$(DEPDIR)/$(am__dirstamp) vauth/libcurlu_la-cleartext.lo: vauth/$(am__dirstamp) \ vauth/$(DEPDIR)/$(am__dirstamp) |
︙ | ︙ | |||
1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 | vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurlu_la-gskit.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurlu_la-mbedtls.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurlu_la-mesalink.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) libcurlu.la: $(libcurlu_la_OBJECTS) $(libcurlu_la_DEPENDENCIES) $(EXTRA_libcurlu_la_DEPENDENCIES) $(AM_V_CCLD)$(libcurlu_la_LINK) $(am_libcurlu_la_rpath) $(libcurlu_la_OBJECTS) $(libcurlu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f vauth/*.$(OBJEXT) -rm -f vauth/*.lo -rm -f vtls/*.$(OBJEXT) -rm -f vtls/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-altsvc.Plo@am__quote@ # am--include-marker | > > > > > > > > > > > > | 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 | vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurlu_la-gskit.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurlu_la-mbedtls.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurlu_la-mesalink.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vquic/libcurlu_la-ngtcp2.lo: vquic/$(am__dirstamp) \ vquic/$(DEPDIR)/$(am__dirstamp) vquic/libcurlu_la-quiche.lo: vquic/$(am__dirstamp) \ vquic/$(DEPDIR)/$(am__dirstamp) vssh/libcurlu_la-libssh2.lo: vssh/$(am__dirstamp) \ vssh/$(DEPDIR)/$(am__dirstamp) vssh/libcurlu_la-libssh.lo: vssh/$(am__dirstamp) \ vssh/$(DEPDIR)/$(am__dirstamp) libcurlu.la: $(libcurlu_la_OBJECTS) $(libcurlu_la_DEPENDENCIES) $(EXTRA_libcurlu_la_DEPENDENCIES) $(AM_V_CCLD)$(libcurlu_la_LINK) $(am_libcurlu_la_rpath) $(libcurlu_la_OBJECTS) $(libcurlu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f vauth/*.$(OBJEXT) -rm -f vauth/*.lo -rm -f vquic/*.$(OBJEXT) -rm -f vquic/*.lo -rm -f vssh/*.$(OBJEXT) -rm -f vssh/*.lo -rm -f vtls/*.$(OBJEXT) -rm -f vtls/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-altsvc.Plo@am__quote@ # am--include-marker |
︙ | ︙ | |||
1336 1337 1338 1339 1340 1341 1342 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-smb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-smtp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-socks.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-socks_gssapi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-socks_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-speedcheck.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-splay.Plo@am__quote@ # am--include-marker | < < | 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-smb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-smtp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-socks.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-socks_gssapi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-socks_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-speedcheck.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-splay.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strcase.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strdup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strerror.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strtok.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-strtoofft.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-system_win32.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-telnet.Plo@am__quote@ # am--include-marker |
︙ | ︙ | |||
1448 1449 1450 1451 1452 1453 1454 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-smb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-smtp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-socks.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-socks_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-speedcheck.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-splay.Plo@am__quote@ # am--include-marker | < < | 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-smb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-smtp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-socks.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-socks_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-speedcheck.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-splay.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strcase.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strdup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strerror.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strtok.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-strtoofft.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-system_win32.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-telnet.Plo@am__quote@ # am--include-marker |
︙ | ︙ | |||
1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 | @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-vauth.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gskit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gtls.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mesalink.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-nss.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-openssl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-polarssl.Plo@am__quote@ # am--include-marker | > > > > > > > > | 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 | @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-vauth.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-quiche.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-quiche.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-libssh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gskit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gtls.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mesalink.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-nss.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-openssl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-polarssl.Plo@am__quote@ # am--include-marker |
︙ | ︙ | |||
1960 1961 1962 1963 1964 1965 1966 | libcurl_la-socks.lo: socks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-socks.lo -MD -MP -MF $(DEPDIR)/libcurl_la-socks.Tpo -c -o libcurl_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-socks.Tpo $(DEPDIR)/libcurl_la-socks.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socks.c' object='libcurl_la-socks.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c | < < < < < < < < < < < < < < | 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 | libcurl_la-socks.lo: socks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-socks.lo -MD -MP -MF $(DEPDIR)/libcurl_la-socks.Tpo -c -o libcurl_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-socks.Tpo $(DEPDIR)/libcurl_la-socks.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socks.c' object='libcurl_la-socks.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c libcurl_la-curl_addrinfo.lo: curl_addrinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-curl_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_addrinfo.Tpo -c -o libcurl_la-curl_addrinfo.lo `test -f 'curl_addrinfo.c' || echo '$(srcdir)/'`curl_addrinfo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_addrinfo.Tpo $(DEPDIR)/libcurl_la-curl_addrinfo.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_addrinfo.c' object='libcurl_la-curl_addrinfo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-curl_addrinfo.lo `test -f 'curl_addrinfo.c' || echo '$(srcdir)/'`curl_addrinfo.c |
︙ | ︙ | |||
2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 | vtls/libcurl_la-mesalink.lo: vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-mesalink.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-mesalink.Tpo -c -o vtls/libcurl_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-mesalink.Tpo vtls/$(DEPDIR)/libcurl_la-mesalink.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/mesalink.c' object='vtls/libcurl_la-mesalink.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c libcurlu_la-file.lo: file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-file.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-file.Tpo -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-file.Tpo $(DEPDIR)/libcurlu_la-file.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file.c' object='libcurlu_la-file.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 | vtls/libcurl_la-mesalink.lo: vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-mesalink.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-mesalink.Tpo -c -o vtls/libcurl_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-mesalink.Tpo vtls/$(DEPDIR)/libcurl_la-mesalink.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/mesalink.c' object='vtls/libcurl_la-mesalink.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c vquic/libcurl_la-ngtcp2.lo: vquic/ngtcp2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-ngtcp2.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-ngtcp2.Tpo -c -o vquic/libcurl_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-ngtcp2.Tpo vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/ngtcp2.c' object='vquic/libcurl_la-ngtcp2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c vquic/libcurl_la-quiche.lo: vquic/quiche.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-quiche.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-quiche.Tpo -c -o vquic/libcurl_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-quiche.Tpo vquic/$(DEPDIR)/libcurl_la-quiche.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/quiche.c' object='vquic/libcurl_la-quiche.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c vssh/libcurl_la-libssh2.lo: vssh/libssh2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vssh/libcurl_la-libssh2.lo -MD -MP -MF vssh/$(DEPDIR)/libcurl_la-libssh2.Tpo -c -o vssh/libcurl_la-libssh2.lo `test -f 'vssh/libssh2.c' || echo '$(srcdir)/'`vssh/libssh2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurl_la-libssh2.Tpo vssh/$(DEPDIR)/libcurl_la-libssh2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vssh/libssh2.c' object='vssh/libcurl_la-libssh2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurl_la-libssh2.lo `test -f 'vssh/libssh2.c' || echo '$(srcdir)/'`vssh/libssh2.c vssh/libcurl_la-libssh.lo: vssh/libssh.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vssh/libcurl_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurl_la-libssh.Tpo -c -o vssh/libcurl_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurl_la-libssh.Tpo vssh/$(DEPDIR)/libcurl_la-libssh.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vssh/libssh.c' object='vssh/libcurl_la-libssh.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurl_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c libcurlu_la-file.lo: file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-file.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-file.Tpo -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-file.Tpo $(DEPDIR)/libcurlu_la-file.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file.c' object='libcurlu_la-file.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c |
︙ | ︙ | |||
2919 2920 2921 2922 2923 2924 2925 | libcurlu_la-socks.lo: socks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-socks.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-socks.Tpo -c -o libcurlu_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-socks.Tpo $(DEPDIR)/libcurlu_la-socks.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socks.c' object='libcurlu_la-socks.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c | < < < < < < < < < < < < < < | 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 | libcurlu_la-socks.lo: socks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-socks.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-socks.Tpo -c -o libcurlu_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-socks.Tpo $(DEPDIR)/libcurlu_la-socks.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socks.c' object='libcurlu_la-socks.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-socks.lo `test -f 'socks.c' || echo '$(srcdir)/'`socks.c libcurlu_la-curl_addrinfo.lo: curl_addrinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-curl_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_addrinfo.Tpo -c -o libcurlu_la-curl_addrinfo.lo `test -f 'curl_addrinfo.c' || echo '$(srcdir)/'`curl_addrinfo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_addrinfo.Tpo $(DEPDIR)/libcurlu_la-curl_addrinfo.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_addrinfo.c' object='libcurlu_la-curl_addrinfo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-curl_addrinfo.lo `test -f 'curl_addrinfo.c' || echo '$(srcdir)/'`curl_addrinfo.c |
︙ | ︙ | |||
3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 | vtls/libcurlu_la-mesalink.lo: vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-mesalink.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-mesalink.Tpo -c -o vtls/libcurlu_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-mesalink.Tpo vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/mesalink.c' object='vtls/libcurlu_la-mesalink.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf vauth/.libs vauth/_libs -rm -rf vtls/.libs vtls/_libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 | vtls/libcurlu_la-mesalink.lo: vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-mesalink.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-mesalink.Tpo -c -o vtls/libcurlu_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-mesalink.Tpo vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/mesalink.c' object='vtls/libcurlu_la-mesalink.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-mesalink.lo `test -f 'vtls/mesalink.c' || echo '$(srcdir)/'`vtls/mesalink.c vquic/libcurlu_la-ngtcp2.lo: vquic/ngtcp2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-ngtcp2.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Tpo -c -o vquic/libcurlu_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Tpo vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/ngtcp2.c' object='vquic/libcurlu_la-ngtcp2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c vquic/libcurlu_la-quiche.lo: vquic/quiche.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-quiche.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-quiche.Tpo -c -o vquic/libcurlu_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-quiche.Tpo vquic/$(DEPDIR)/libcurlu_la-quiche.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/quiche.c' object='vquic/libcurlu_la-quiche.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c vssh/libcurlu_la-libssh2.lo: vssh/libssh2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vssh/libcurlu_la-libssh2.lo -MD -MP -MF vssh/$(DEPDIR)/libcurlu_la-libssh2.Tpo -c -o vssh/libcurlu_la-libssh2.lo `test -f 'vssh/libssh2.c' || echo '$(srcdir)/'`vssh/libssh2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurlu_la-libssh2.Tpo vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vssh/libssh2.c' object='vssh/libcurlu_la-libssh2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurlu_la-libssh2.lo `test -f 'vssh/libssh2.c' || echo '$(srcdir)/'`vssh/libssh2.c vssh/libcurlu_la-libssh.lo: vssh/libssh.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vssh/libcurlu_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo -c -o vssh/libcurlu_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo vssh/$(DEPDIR)/libcurlu_la-libssh.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vssh/libssh.c' object='vssh/libcurlu_la-libssh.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurlu_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf vauth/.libs vauth/_libs -rm -rf vquic/.libs vquic/_libs -rm -rf vssh/.libs vssh/_libs -rm -rf vtls/.libs vtls/_libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags |
︙ | ︙ | |||
3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 | clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f vauth/$(DEPDIR)/$(am__dirstamp) -rm -f vauth/$(am__dirstamp) -rm -f vtls/$(DEPDIR)/$(am__dirstamp) -rm -f vtls/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am | > > > > | 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 | clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f vauth/$(DEPDIR)/$(am__dirstamp) -rm -f vauth/$(am__dirstamp) -rm -f vquic/$(DEPDIR)/$(am__dirstamp) -rm -f vquic/$(am__dirstamp) -rm -f vssh/$(DEPDIR)/$(am__dirstamp) -rm -f vssh/$(am__dirstamp) -rm -f vtls/$(DEPDIR)/$(am__dirstamp) -rm -f vtls/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am |
︙ | ︙ | |||
3700 3701 3702 3703 3704 3705 3706 | -rm -f ./$(DEPDIR)/libcurl_la-smb.Plo -rm -f ./$(DEPDIR)/libcurl_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurl_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurl_la-splay.Plo | < < | 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 | -rm -f ./$(DEPDIR)/libcurl_la-smb.Plo -rm -f ./$(DEPDIR)/libcurl_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurl_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurl_la-splay.Plo -rm -f ./$(DEPDIR)/libcurl_la-strcase.Plo -rm -f ./$(DEPDIR)/libcurl_la-strdup.Plo -rm -f ./$(DEPDIR)/libcurl_la-strerror.Plo -rm -f ./$(DEPDIR)/libcurl_la-strtok.Plo -rm -f ./$(DEPDIR)/libcurl_la-strtoofft.Plo -rm -f ./$(DEPDIR)/libcurl_la-system_win32.Plo -rm -f ./$(DEPDIR)/libcurl_la-telnet.Plo |
︙ | ︙ | |||
3812 3813 3814 3815 3816 3817 3818 | -rm -f ./$(DEPDIR)/libcurlu_la-smb.Plo -rm -f ./$(DEPDIR)/libcurlu_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurlu_la-splay.Plo | < < | 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 | -rm -f ./$(DEPDIR)/libcurlu_la-smb.Plo -rm -f ./$(DEPDIR)/libcurlu_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurlu_la-splay.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strcase.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strdup.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strerror.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strtok.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strtoofft.Plo -rm -f ./$(DEPDIR)/libcurlu_la-system_win32.Plo -rm -f ./$(DEPDIR)/libcurlu_la-telnet.Plo |
︙ | ︙ | |||
3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 | -rm -f vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-polarssl.Plo | > > > > > > > > | 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 | -rm -f vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo -rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo -rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo -rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo -rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo -rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo -rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo -rm -f vssh/$(DEPDIR)/libcurlu_la-libssh.Plo -rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-polarssl.Plo |
︙ | ︙ | |||
4019 4020 4021 4022 4023 4024 4025 | -rm -f ./$(DEPDIR)/libcurl_la-smb.Plo -rm -f ./$(DEPDIR)/libcurl_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurl_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurl_la-splay.Plo | < < | 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 | -rm -f ./$(DEPDIR)/libcurl_la-smb.Plo -rm -f ./$(DEPDIR)/libcurl_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurl_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurl_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurl_la-splay.Plo -rm -f ./$(DEPDIR)/libcurl_la-strcase.Plo -rm -f ./$(DEPDIR)/libcurl_la-strdup.Plo -rm -f ./$(DEPDIR)/libcurl_la-strerror.Plo -rm -f ./$(DEPDIR)/libcurl_la-strtok.Plo -rm -f ./$(DEPDIR)/libcurl_la-strtoofft.Plo -rm -f ./$(DEPDIR)/libcurl_la-system_win32.Plo -rm -f ./$(DEPDIR)/libcurl_la-telnet.Plo |
︙ | ︙ | |||
4131 4132 4133 4134 4135 4136 4137 | -rm -f ./$(DEPDIR)/libcurlu_la-smb.Plo -rm -f ./$(DEPDIR)/libcurlu_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurlu_la-splay.Plo | < < | 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 | -rm -f ./$(DEPDIR)/libcurlu_la-smb.Plo -rm -f ./$(DEPDIR)/libcurlu_la-smtp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_gssapi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-socks_sspi.Plo -rm -f ./$(DEPDIR)/libcurlu_la-speedcheck.Plo -rm -f ./$(DEPDIR)/libcurlu_la-splay.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strcase.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strdup.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strerror.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strtok.Plo -rm -f ./$(DEPDIR)/libcurlu_la-strtoofft.Plo -rm -f ./$(DEPDIR)/libcurlu_la-system_win32.Plo -rm -f ./$(DEPDIR)/libcurlu_la-telnet.Plo |
︙ | ︙ | |||
4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 | -rm -f vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-polarssl.Plo | > > > > > > > > | 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 | -rm -f vauth/$(DEPDIR)/libcurlu_la-krb5_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-ntlm_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-oauth2.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo -rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo -rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo -rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo -rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo -rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo -rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo -rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo -rm -f vssh/$(DEPDIR)/libcurlu_la-libssh.Plo -rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo -rm -f vtls/$(DEPDIR)/libcurl_la-polarssl.Plo |
︙ | ︙ | |||
4240 4241 4242 4243 4244 4245 4246 | uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile checksrc: $(CHECKSRC)(@PERL@ $(srcdir)/checksrc.pl -D$(srcdir) -W$(srcdir)/curl_config.h \ | | | 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 | uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile checksrc: $(CHECKSRC)(@PERL@ $(srcdir)/checksrc.pl -D$(srcdir) -W$(srcdir)/curl_config.h \ $(srcdir)/*.[ch] $(srcdir)/vauth/*.[ch] $(srcdir)/vtls/*.[ch] $(srcdir)/vquic/*.[ch] $(srcdir)/vssh/*.[ch]) # for debug builds, we scan the sources on all regular make invokes @CURLDEBUG_TRUE@all-local: checksrc tidy: $(TIDY) $(CSOURCES) $(TIDYFLAGS) -- $(AM_CPPFLAGS) $(CPPFLAGS) -DHAVE_CONFIG_H # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: |
Changes to jni/curl/lib/Makefile.inc.
︙ | ︙ | |||
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | vtls/wolfssl.c vtls/schannel.c vtls/schannel_verify.c \ vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h \ vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h \ vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h \ vtls/mbedtls.h vtls/mesalink.h LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \ getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c \ fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \ strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ | > > > > > > | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | vtls/wolfssl.c vtls/schannel.c vtls/schannel_verify.c \ vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h \ vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h \ vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h \ vtls/mbedtls.h vtls/mesalink.h LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \ getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c \ fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \ strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ curl_addrinfo.c socks_gssapi.c socks_sspi.c \ curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c \ pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c \ openldap.c curl_gethostname.c gopher.c idn_win32.c \ http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c \ http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c \ curl_multibyte.c hostcheck.c conncache.c dotdot.c \ x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c \ |
︙ | ︙ | |||
72 73 74 75 76 77 78 | curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \ http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_setup_once.h multihandle.h setup-vms.h dotdot.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h \ curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h \ | | | > | > | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \ http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_setup_once.h multihandle.h setup-vms.h dotdot.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h \ curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h \ curl_get_line.h altsvc.h quic.h LIB_RCFILES = libcurl.rc CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \ $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES) HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \ $(LIB_VQUIC_HFILES) |
Changes to jni/curl/lib/altsvc.c.
︙ | ︙ | |||
50 51 52 53 54 55 56 | static enum alpnid alpn2alpnid(char *name) { if(strcasecompare(name, "h1")) return ALPN_h1; if(strcasecompare(name, "h2")) return ALPN_h2; | > | | > > | > | | > | | | | | | | | | | | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | static enum alpnid alpn2alpnid(char *name) { if(strcasecompare(name, "h1")) return ALPN_h1; if(strcasecompare(name, "h2")) return ALPN_h2; #if (defined(USE_QUICHE) || defined(USE_NGHTTP2)) && !defined(UNITTESTS) if(strcasecompare(name, "h3-22")) return ALPN_h3; #else if(strcasecompare(name, "h3")) return ALPN_h3; #endif return ALPN_none; /* unknown, probably rubbish input */ } /* Given the ALPN ID, return the name */ const char *Curl_alpnid2str(enum alpnid id) { switch(id) { case ALPN_h1: return "h1"; case ALPN_h2: return "h2"; case ALPN_h3: #if (defined(USE_QUICHE) || defined(USE_NGHTTP2)) && !defined(UNITTESTS) return "h3-22"; #else return "h3"; #endif default: return ""; /* bad */ } } static void altsvc_free(struct altsvc *as) { free(as->src.host); free(as->dst.host); free(as); } static struct altsvc *altsvc_createid(const char *srchost, const char *dsthost, enum alpnid srcalpnid, enum alpnid dstalpnid, unsigned int srcport, unsigned int dstport) { struct altsvc *as = calloc(sizeof(struct altsvc), 1); if(!as) return NULL; as->src.host = strdup(srchost); if(!as->src.host) goto error; as->dst.host = strdup(dsthost); if(!as->dst.host) goto error; as->src.alpnid = srcalpnid; as->dst.alpnid = dstalpnid; as->src.port = curlx_ultous(srcport); as->dst.port = curlx_ultous(dstport); return as; error: altsvc_free(as); return NULL; } |
︙ | ︙ | |||
222 223 224 225 226 227 228 | fprintf(fp, "%s %s %u " "%s %s %u " "\"%d%02d%02d " "%02d:%02d:%02d\" " "%u %d\n", | | | | 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | fprintf(fp, "%s %s %u " "%s %s %u " "\"%d%02d%02d " "%02d:%02d:%02d\" " "%u %d\n", Curl_alpnid2str(as->src.alpnid), as->src.host, as->src.port, Curl_alpnid2str(as->dst.alpnid), as->dst.host, as->dst.port, stamp.tm_year + 1900, stamp.tm_mon + 1, stamp.tm_mday, stamp.tm_hour, stamp.tm_min, stamp.tm_sec, as->persist, as->prio); return CURLE_OK; } /* ---- library-wide functions below ---- */ |
︙ | ︙ | |||
248 249 250 251 252 253 254 | Curl_llist_init(&asi->list, NULL); /* set default behavior */ asi->flags = CURLALTSVC_H1 #ifdef USE_NGHTTP2 | CURLALTSVC_H2 #endif | | | 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | Curl_llist_init(&asi->list, NULL); /* set default behavior */ asi->flags = CURLALTSVC_H1 #ifdef USE_NGHTTP2 | CURLALTSVC_H2 #endif #ifdef ENABLE_QUIC | CURLALTSVC_H3 #endif ; return asi; } /* |
︙ | ︙ | |||
339 340 341 342 343 344 345 | { size_t len; const char *protop; const char *p = *ptr; while(*p && ISBLANK(*p)) p++; protop = p; | | | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | { size_t len; const char *protop; const char *p = *ptr; while(*p && ISBLANK(*p)) p++; protop = p; while(*p && !ISBLANK(*p) && (*p != ';') && (*p != '=')) p++; len = p - protop; if(!len || (len >= buflen)) return CURLE_BAD_FUNCTION_ARGUMENT; memcpy(alpnbuf, protop, len); alpnbuf[len] = 0; |
︙ | ︙ | |||
361 362 363 364 365 366 367 | const char *srchost, unsigned short srcport) { struct curl_llist_element *e; struct curl_llist_element *n; for(e = asi->list.head; e; e = n) { struct altsvc *as = e->ptr; n = e->next; | | | | | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | const char *srchost, unsigned short srcport) { struct curl_llist_element *e; struct curl_llist_element *n; for(e = asi->list.head; e; e = n) { struct altsvc *as = e->ptr; n = e->next; if((srcalpnid == as->src.alpnid) && (srcport == as->src.port) && strcasecompare(srchost, as->src.host)) { Curl_llist_remove(&asi->list, e, NULL); altsvc_free(as); asi->num--; } } } |
︙ | ︙ | |||
531 532 533 534 535 536 537 | /* * Return TRUE on a match */ bool Curl_altsvc_lookup(struct altsvcinfo *asi, enum alpnid srcalpnid, const char *srchost, int srcport, | | | | > | | | > < | < | 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 | /* * Return TRUE on a match */ bool Curl_altsvc_lookup(struct altsvcinfo *asi, enum alpnid srcalpnid, const char *srchost, int srcport, struct altsvc **dstentry, const int versions) /* one or more bits */ { struct curl_llist_element *e; struct curl_llist_element *n; time_t now = time(NULL); DEBUGASSERT(asi); DEBUGASSERT(srchost); DEBUGASSERT(dstentry); for(e = asi->list.head; e; e = n) { struct altsvc *as = e->ptr; n = e->next; if(as->expires < now) { /* an expired entry, remove */ Curl_llist_remove(&asi->list, e, NULL); altsvc_free(as); continue; } if((as->src.alpnid == srcalpnid) && strcasecompare(as->src.host, srchost) && (as->src.port == srcport) && (versions & as->dst.alpnid)) { /* match */ *dstentry = as; return TRUE; } } return FALSE; } #endif /* CURL_DISABLE_HTTP || USE_ALTSVC */ |
Changes to jni/curl/lib/altsvc.h.
︙ | ︙ | |||
24 25 26 27 28 29 30 | #include "curl_setup.h" #if !defined(CURL_DISABLE_HTTP) && defined(USE_ALTSVC) #include <curl/curl.h> #include "llist.h" enum alpnid { | | | | | > | > > > > | | < < < < | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include "curl_setup.h" #if !defined(CURL_DISABLE_HTTP) && defined(USE_ALTSVC) #include <curl/curl.h> #include "llist.h" enum alpnid { ALPN_none = 0, ALPN_h1 = CURLALTSVC_H1, ALPN_h2 = CURLALTSVC_H2, ALPN_h3 = CURLALTSVC_H3 }; struct althost { char *host; unsigned short port; enum alpnid alpnid; }; struct altsvc { struct althost src; struct althost dst; time_t expires; bool persist; int prio; struct curl_llist_element node; }; struct altsvcinfo { |
︙ | ︙ | |||
64 65 66 67 68 69 70 | CURLcode Curl_altsvc_parse(struct Curl_easy *data, struct altsvcinfo *altsvc, const char *value, enum alpnid srcalpn, const char *srchost, unsigned short srcport); bool Curl_altsvc_lookup(struct altsvcinfo *asi, enum alpnid srcalpnid, const char *srchost, int srcport, | | | | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | CURLcode Curl_altsvc_parse(struct Curl_easy *data, struct altsvcinfo *altsvc, const char *value, enum alpnid srcalpn, const char *srchost, unsigned short srcport); bool Curl_altsvc_lookup(struct altsvcinfo *asi, enum alpnid srcalpnid, const char *srchost, int srcport, struct altsvc **dstentry, int versions); /* one or more CURLALTSVC_H* bits */ #else /* disabled */ #define Curl_altsvc_save(a,b) #endif /* CURL_DISABLE_HTTP || USE_ALTSVC */ #endif /* HEADER_CURL_ALTSVC_H */ |
Changes to jni/curl/lib/asyn-ares.c.
︙ | ︙ | |||
249 250 251 252 253 254 255 | * with ares. The caller must make sure that this function is only called when * we have a working ares channel. * * Returns: sockets-in-use-bitmap */ int Curl_resolver_getsock(struct connectdata *conn, | | < < | | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | * with ares. The caller must make sure that this function is only called when * we have a working ares channel. * * Returns: sockets-in-use-bitmap */ int Curl_resolver_getsock(struct connectdata *conn, curl_socket_t *socks) { struct timeval maxtime; struct timeval timebuf; struct timeval *timeout; long milli; int max = ares_getsock((ares_channel)conn->data->state.resolver, (ares_socket_t *)socks, MAX_SOCKSPEREASYHANDLE); maxtime.tv_sec = CURL_TIMEOUT_RESOLVE; maxtime.tv_usec = 0; timeout = ares_timeout((ares_channel)conn->data->state.resolver, &maxtime, &timebuf); milli = (timeout->tv_sec * 1000) + (timeout->tv_usec/1000); |
︙ | ︙ |
Changes to jni/curl/lib/asyn-thread.c.
︙ | ︙ | |||
159 160 161 162 163 164 165 166 167 168 169 170 171 172 | struct thread_sync_data { curl_mutex_t * mtx; int done; char *hostname; /* hostname to resolve, Curl_async.hostname duplicate */ int port; int sock_error; Curl_addrinfo *res; #ifdef HAVE_GETADDRINFO struct addrinfo hints; #endif struct thread_data *td; /* for thread-self cleanup */ }; | > > > > | 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | struct thread_sync_data { curl_mutex_t * mtx; int done; char *hostname; /* hostname to resolve, Curl_async.hostname duplicate */ int port; #ifdef HAVE_SOCKETPAIR struct connectdata *conn; curl_socket_t sock_pair[2]; /* socket pair */ #endif int sock_error; Curl_addrinfo *res; #ifdef HAVE_GETADDRINFO struct addrinfo hints; #endif struct thread_data *td; /* for thread-self cleanup */ }; |
︙ | ︙ | |||
193 194 195 196 197 198 199 200 201 202 203 204 205 206 | } free(tsd->hostname); if(tsd->res) Curl_freeaddrinfo(tsd->res); memset(tsd, 0, sizeof(*tsd)); } /* Initialize resolver thread synchronization data */ static int init_thread_sync_data(struct thread_data * td, const char *hostname, | > > > > > > > > > | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | } free(tsd->hostname); if(tsd->res) Curl_freeaddrinfo(tsd->res); #ifdef HAVE_SOCKETPAIR /* * close one end of the socket pair (may be done in resolver thread); * the other end (for reading) is always closed in the parent thread. */ if(tsd->sock_pair[1] != CURL_SOCKET_BAD) { sclose(tsd->sock_pair[1]); } #endif memset(tsd, 0, sizeof(*tsd)); } /* Initialize resolver thread synchronization data */ static int init_thread_sync_data(struct thread_data * td, const char *hostname, |
︙ | ︙ | |||
226 227 228 229 230 231 232 233 234 235 236 237 238 239 | tsd->mtx = malloc(sizeof(curl_mutex_t)); if(tsd->mtx == NULL) goto err_exit; Curl_mutex_init(tsd->mtx); tsd->sock_error = CURL_ASYNC_SUCCESS; /* Copying hostname string because original can be destroyed by parent * thread during gethostbyname execution. */ tsd->hostname = strdup(hostname); if(!tsd->hostname) | > > > > > > > > | 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 | tsd->mtx = malloc(sizeof(curl_mutex_t)); if(tsd->mtx == NULL) goto err_exit; Curl_mutex_init(tsd->mtx); #ifdef HAVE_SOCKETPAIR /* create socket pair */ if(socketpair(AF_LOCAL, SOCK_STREAM, 0, &tsd->sock_pair[0]) < 0) { tsd->sock_pair[0] = CURL_SOCKET_BAD; tsd->sock_pair[1] = CURL_SOCKET_BAD; goto err_exit; } #endif tsd->sock_error = CURL_ASYNC_SUCCESS; /* Copying hostname string because original can be destroyed by parent * thread during gethostbyname execution. */ tsd->hostname = strdup(hostname); if(!tsd->hostname) |
︙ | ︙ | |||
272 273 274 275 276 277 278 279 280 281 282 283 284 285 | */ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg) { struct thread_sync_data *tsd = (struct thread_sync_data*)arg; struct thread_data *td = tsd->td; char service[12]; int rc; msnprintf(service, sizeof(service), "%d", tsd->port); rc = Curl_getaddrinfo_ex(tsd->hostname, service, &tsd->hints, &tsd->res); if(rc != 0) { tsd->sock_error = SOCKERRNO?SOCKERRNO:rc; | > > > | 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 | */ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg) { struct thread_sync_data *tsd = (struct thread_sync_data*)arg; struct thread_data *td = tsd->td; char service[12]; int rc; #ifdef HAVE_SOCKETPAIR char buf[1]; #endif msnprintf(service, sizeof(service), "%d", tsd->port); rc = Curl_getaddrinfo_ex(tsd->hostname, service, &tsd->hints, &tsd->res); if(rc != 0) { tsd->sock_error = SOCKERRNO?SOCKERRNO:rc; |
︙ | ︙ | |||
294 295 296 297 298 299 300 301 302 303 304 305 306 307 | if(tsd->done) { /* too late, gotta clean up the mess */ Curl_mutex_release(tsd->mtx); destroy_thread_sync_data(tsd); free(td); } else { tsd->done = 1; Curl_mutex_release(tsd->mtx); } return 0; } | > > > > > > > > > > | 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 | if(tsd->done) { /* too late, gotta clean up the mess */ Curl_mutex_release(tsd->mtx); destroy_thread_sync_data(tsd); free(td); } else { #ifdef HAVE_SOCKETPAIR if(tsd->sock_pair[1] != CURL_SOCKET_BAD) { /* DNS has been resolved, signal client task */ buf[0] = 1; if(write(tsd->sock_pair[1], buf, sizeof(buf)) < 0) { /* update sock_erro to errno */ tsd->sock_error = SOCKERRNO; } } #endif tsd->done = 1; Curl_mutex_release(tsd->mtx); } return 0; } |
︙ | ︙ | |||
344 345 346 347 348 349 350 351 352 353 354 355 356 357 | * destroy_async_data() cleans up async resolver data and thread handle. */ static void destroy_async_data(struct Curl_async *async) { if(async->os_specific) { struct thread_data *td = (struct thread_data*) async->os_specific; int done; /* * if the thread is still blocking in the resolve syscall, detach it and * let the thread do the cleanup... */ Curl_mutex_acquire(td->tsd.mtx); done = td->tsd.done; | > > > > | 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | * destroy_async_data() cleans up async resolver data and thread handle. */ static void destroy_async_data(struct Curl_async *async) { if(async->os_specific) { struct thread_data *td = (struct thread_data*) async->os_specific; int done; #ifdef HAVE_SOCKETPAIR curl_socket_t sock_rd = td->tsd.sock_pair[0]; struct connectdata *conn = td->tsd.conn; #endif /* * if the thread is still blocking in the resolve syscall, detach it and * let the thread do the cleanup... */ Curl_mutex_acquire(td->tsd.mtx); done = td->tsd.done; |
︙ | ︙ | |||
365 366 367 368 369 370 371 372 373 374 375 376 377 378 | if(td->thread_hnd != curl_thread_t_null) Curl_thread_join(&td->thread_hnd); destroy_thread_sync_data(&td->tsd); free(async->os_specific); } } async->os_specific = NULL; free(async->hostname); async->hostname = NULL; } | > > > > > > > > > | 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 | if(td->thread_hnd != curl_thread_t_null) Curl_thread_join(&td->thread_hnd); destroy_thread_sync_data(&td->tsd); free(async->os_specific); } #ifdef HAVE_SOCKETPAIR /* * ensure CURLMOPT_SOCKETFUNCTION fires CURL_POLL_REMOVE * before the FD is invalidated to avoid EBADF on EPOLL_CTL_DEL */ if(conn) Curl_multi_closed(conn->data, sock_rd); sclose(sock_rd); #endif } async->os_specific = NULL; free(async->hostname); async->hostname = NULL; } |
︙ | ︙ | |||
565 566 567 568 569 570 571 | return result; } destroy_async_data(&conn->async); *entry = conn->async.dns; } else { /* poll for name lookup done with exponential backoff up to 250ms */ | > | | | 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 | return result; } destroy_async_data(&conn->async); *entry = conn->async.dns; } else { /* poll for name lookup done with exponential backoff up to 250ms */ /* should be fine even if this converts to 32 bit */ time_t elapsed = (time_t)Curl_timediff(Curl_now(), data->progress.t_startsingle); if(elapsed < 0) elapsed = 0; if(td->poll_interval == 0) /* Start at 1ms poll interval */ td->poll_interval = 1; else if(elapsed >= td->interval_end) |
︙ | ︙ | |||
588 589 590 591 592 593 594 | Curl_expire(conn->data, td->poll_interval, EXPIRE_ASYNC_NAME); } return CURLE_OK; } int Curl_resolver_getsock(struct connectdata *conn, | | < > > > > > | > > > > > > > > > > | | | | | | | | | | > > > > > | | 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 | Curl_expire(conn->data, td->poll_interval, EXPIRE_ASYNC_NAME); } return CURLE_OK; } int Curl_resolver_getsock(struct connectdata *conn, curl_socket_t *socks) { int ret_val = 0; time_t milli; timediff_t ms; struct Curl_easy *data = conn->data; struct resdata *reslv = (struct resdata *)data->state.resolver; #ifdef HAVE_SOCKETPAIR struct thread_data *td = (struct thread_data*)conn->async.os_specific; #else (void)socks; #endif #ifdef HAVE_SOCKETPAIR if(td) { /* return read fd to client for polling the DNS resolution status */ socks[0] = td->tsd.sock_pair[0]; DEBUGASSERT(td->tsd.conn == conn || !td->tsd.conn); td->tsd.conn = conn; ret_val = GETSOCK_READSOCK(0); } else { #endif ms = Curl_timediff(Curl_now(), reslv->start); if(ms < 3) milli = 0; else if(ms <= 50) milli = (time_t)ms/3; else if(ms <= 250) milli = 50; else milli = 200; Curl_expire(data, milli, EXPIRE_ASYNC_NAME); #ifdef HAVE_SOCKETPAIR } #endif return ret_val; } #ifndef HAVE_GETADDRINFO /* * Curl_getaddrinfo() - for platforms without getaddrinfo */ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn, |
︙ | ︙ | |||
702 703 704 705 706 707 708 | if((pf != PF_INET) && !Curl_ipv6works()) /* The stack seems to be a non-IPv6 one */ pf = PF_INET; #endif /* CURLRES_IPV6 */ memset(&hints, 0, sizeof(hints)); hints.ai_family = pf; | | > | 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 | if((pf != PF_INET) && !Curl_ipv6works()) /* The stack seems to be a non-IPv6 one */ pf = PF_INET; #endif /* CURLRES_IPV6 */ memset(&hints, 0, sizeof(hints)); hints.ai_family = pf; hints.ai_socktype = (conn->transport == TRNSPRT_TCP)? SOCK_STREAM : SOCK_DGRAM; msnprintf(sbuf, sizeof(sbuf), "%d", port); reslv->start = Curl_now(); /* fire up a new resolver thread! */ if(init_resolve_thread(conn, hostname, port, &hints)) { *waitp = 1; /* expect asynchronous response */ |
︙ | ︙ |
Changes to jni/curl/lib/asyn.h.
︙ | ︙ | |||
110 111 112 113 114 115 116 | * * This function is called from the multi_getsock() function. 'sock' is a * pointer to an array to hold the file descriptors, with 'numsock' being the * size of that array (in number of entries). This function is supposed to * return bitmask indicating what file descriptors (referring to array indexes * in the 'sock' array) to wait for, read/write. */ | | < | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | * * This function is called from the multi_getsock() function. 'sock' is a * pointer to an array to hold the file descriptors, with 'numsock' being the * size of that array (in number of entries). This function is supposed to * return bitmask indicating what file descriptors (referring to array indexes * in the 'sock' array) to wait for, read/write. */ int Curl_resolver_getsock(struct connectdata *conn, curl_socket_t *sock); /* * Curl_resolver_is_resolved() * * Called repeatedly to check if a previous name resolve request has * completed. It should also make sure to time-out if the operation seems to * take too long. |
︙ | ︙ |
Changes to jni/curl/lib/base64.c.
︙ | ︙ | |||
20 21 22 23 24 25 26 | * ***************************************************************************/ /* Base64 encoding/decoding */ #include "curl_setup.h" | | | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | * ***************************************************************************/ /* Base64 encoding/decoding */ #include "curl_setup.h" #if !defined(CURL_DISABLE_HTTP_AUTH) || defined(USE_SSH) || \ !defined(CURL_DISABLE_LDAP) || \ !defined(CURL_DISABLE_DOH) || defined(USE_SSL) #include "urldata.h" /* for the Curl_easy definition */ #include "warnless.h" #include "curl_base64.h" #include "non-ascii.h" |
︙ | ︙ |
Changes to jni/curl/lib/config-os400.h.
︙ | ︙ | |||
429 430 431 432 433 434 435 436 437 438 439 440 441 442 | #define STDC_HEADERS /* Define if you can safely include both <sys/time.h> and <time.h>. */ #define TIME_WITH_SYS_TIME /* Define to enable alt-svc support (experimental) */ #undef USE_ALTSVC /* Version number of package */ #undef VERSION /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS | > > > | 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 | #define STDC_HEADERS /* Define if you can safely include both <sys/time.h> and <time.h>. */ #define TIME_WITH_SYS_TIME /* Define to enable alt-svc support (experimental) */ #undef USE_ALTSVC /* Define to enable HTTP3 support (experimental, requires NGTCP2 or QUICHE) */ #undef ENABLE_QUIC /* Version number of package */ #undef VERSION /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS |
︙ | ︙ |
Added jni/curl/lib/config-plan9.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | #ifndef HEADER_CURL_CONFIG_PLAN9_H #define HEADER_CURL_CONFIG_PLAN9_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #define BUILDING_LIBCURL 1 #define CURL_CA_BUNDLE "/sys/lib/tls/ca.pem" #define CURL_CA_PATH "/sys/lib/tls" #define CURL_STATICLIB 1 #define ENABLE_IPV6 1 #define CURL_DISABLE_LDAP 1 #define NEED_REENTRANT 1 #define OS "plan9" #define PACKAGE "curl" #define PACKAGE_NAME "curl" #define PACKAGE_BUGREPORT "a suitable mailing list: https://curl.haxx.se/mail/" #define PACKAGE_STRING "curl -" #define PACKAGE_TARNAME "curl" #define PACKAGE_VERSION "-" #define RANDOM_FILE "/dev/random" #define VERSION "0.0.0" /* TODO */ #define RETSIGTYPE void #define STDC_HEADERS 1 #ifdef _BITS64 #error not implement #else #define SIZEOF_INT 4 #define SIZEOF_SHORT 2 #define SIZEOF_LONG 4 #define SIZEOF_OFF_T 8 #define SIZEOF_CURL_OFF_T 4 /* curl_off_t = timediff_t = int */ #define SIZEOF_SIZE_T 4 #define SIZEOF_TIME_T 4 #endif #define HAVE_GETNAMEINFO 1 #define GETNAMEINFO_QUAL_ARG1 const #define GETNAMEINFO_TYPE_ARG1 struct sockaddr * #define GETNAMEINFO_TYPE_ARG2 int #define GETNAMEINFO_TYPE_ARG46 long #define GETNAMEINFO_TYPE_ARG7 int #define HAVE_RECV 1 #define RECV_TYPE_ARG1 int #define RECV_TYPE_ARG2 void * #define RECV_TYPE_ARG3 int #define RECV_TYPE_ARG4 int #define RECV_TYPE_RETV int #define HAVE_RECVFROM 1 #define RECVFROM_TYPE_ARG1 int #define RECVFROM_TYPE_ARG2 void #define RECVFROM_TYPE_ARG2_IS_VOID 1 #define RECVFROM_TYPE_ARG3 int #define RECVFROM_TYPE_ARG4 int #define RECVFROM_TYPE_ARG5 void #define RECVFROM_TYPE_ARG5_IS_VOID 1 #define RECVFROM_TYPE_ARG6 int #define RECVFROM_TYPE_ARG6_IS_VOID 1 #define RECVFROM_TYPE_RETV int #define HAVE_SELECT 1 #define SELECT_TYPE_ARG1 int #define SELECT_TYPE_ARG234 fd_set * #define SELECT_TYPE_ARG5 struct timeval * #define SELECT_TYPE_RETV int #define HAVE_SEND 1 #define SEND_TYPE_ARG1 int #define SEND_TYPE_ARG2 void * #define SEND_QUAL_ARG2 #define SEND_TYPE_ARG3 int #define SEND_TYPE_ARG4 int #define SEND_TYPE_RETV int #define HAVE_ALARM 1 #define HAVE_ARPA_INET_H 1 #define HAVE_ASSERT_H 1 #define HAVE_BASENAME 1 #define HAVE_BOOL_T 1 #define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1 #define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1 #define HAVE_ERRNO_H 1 #define HAVE_FCNTL 1 #define HAVE_FCNTL_H 1 #define HAVE_FDOPEN 1 #define HAVE_FORK 1 #define HAVE_FREEADDRINFO 1 #define HAVE_FTRUNCATE 1 #define HAVE_GETADDRINFO 1 #define HAVE_GETEUID 1 #define HAVE_GETHOSTBYADDR 1 #define HAVE_GETHOSTBYNAME 1 #define HAVE_GETHOSTNAME 1 #define HAVE_GETPPID 1 #define HAVE_GETPROTOBYNAME 1 #define HAVE_GETPWUID 1 #define HAVE_GETTIMEOFDAY 1 #define HAVE_GMTIME_R 1 #define HAVE_INET_ADDR 1 #define HAVE_INET_NTOP 1 #define HAVE_INET_PTON 1 #define HAVE_INTTYPES_H 1 #define HAVE_IOCTL 1 #define HAVE_LIBGEN_H 1 #define HAVE_LIBSSL 1 #define HAVE_LIBZ 1 #define HAVE_LL 1 #define HAVE_LOCALE_H 1 #define HAVE_LOCALTIME_R 1 #define HAVE_LONGLONG 1 #define HAVE_NETDB_H 1 #define HAVE_NETINET_IN_H 1 #define HAVE_NETINET_TCP_H 1 #define HAVE_PWD_H 1 #define HAVE_SYS_SELECT_H 1 #define USE_OPENSSL 1 #define HAVE_OPENSSL_CRYPTO_H 1 #define HAVE_OPENSSL_ENGINE_H 1 #define HAVE_OPENSSL_ERR_H 1 #define HAVE_OPENSSL_PEM_H 1 #define HAVE_OPENSSL_PKCS12_H 1 #define HAVE_OPENSSL_RSA_H 1 #define HAVE_OPENSSL_SSL_H 1 #define HAVE_OPENSSL_X509_H 1 #define HAVE_PERROR 1 #define HAVE_PIPE 1 #define HAVE_POLL 1 #define HAVE_POLL_FINE 1 #define HAVE_POLL_H 1 #define HAVE_PTHREAD_H 1 #define HAVE_RAND_STATUS 1 #define HAVE_SETJMP_H 1 #define HAVE_SETLOCALE 1 #define HAVE_SETSOCKOPT 1 #define HAVE_SOCK_OPTS 1 /* for /sys/include/ape/sys/socket.h */ #define HAVE_SIGACTION 1 #define HAVE_SIGNAL 1 #define HAVE_SIGNAL_H 1 #define HAVE_SIGSETJMP 1 #define HAVE_SIG_ATOMIC_T 1 #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 #define HAVE_SOCKET 1 #define HAVE_SSL_GET_SHUTDOWN 1 #define HAVE_STDBOOL_H 1 #define HAVE_STDINT_H 1 #define HAVE_STDIO_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRCASECMP 1 #define HAVE_STRDUP 1 #define HAVE_STRING_H 1 #define HAVE_STRNCASECMP 1 #define HAVE_STRSTR 1 #define HAVE_STRTOK_R 1 #define HAVE_STRTOLL 1 #define HAVE_STRUCT_TIMEVAL 1 #define HAVE_SYS_IOCTL_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_RESOURCE_H 1 #define HAVE_SYS_SOCKET_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_UIO_H 1 #define HAVE_SYS_UN_H 1 #define HAVE_TERMIOS_H 1 #define HAVE_TIME_H 1 #define HAVE_UNAME 1 #define HAVE_UNISTD_H 1 #define HAVE_UTIME 1 #define HAVE_UTIME_H 1 #define HAVE_WRITEV 1 #define HAVE_ZLIB_H 1 #define HAVE_POSIX_STRERROR_R 1 #define HAVE_STRERROR_R 1 #define STRERROR_R_TYPE_ARG3 int #define TIME_WITH_SYS_TIME 1 #define USE_BLOCKING_SOCKETS 1 #define USE_MANUAL 1 #define __attribute__(x) #ifndef __cplusplus #undef inline #endif #endif /* HEADER_CURL_CONFIG_PLAN9_H */ |
Changes to jni/curl/lib/connect.c.
︙ | ︙ | |||
71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include "inet_pton.h" #include "vtls/vtls.h" /* for Curl_ssl_check_cxn() */ #include "progress.h" #include "warnless.h" #include "conncache.h" #include "multihandle.h" #include "system_win32.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" #ifdef __SYMBIAN32__ | > > | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include "inet_pton.h" #include "vtls/vtls.h" /* for Curl_ssl_check_cxn() */ #include "progress.h" #include "warnless.h" #include "conncache.h" #include "multihandle.h" #include "system_win32.h" #include "quic.h" #include "socks.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" #ifdef __SYMBIAN32__ |
︙ | ︙ | |||
161 162 163 164 165 166 167 | #endif } } static CURLcode singleipconnect(struct connectdata *conn, const Curl_addrinfo *ai, /* start connecting to this */ | | | 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | #endif } } static CURLcode singleipconnect(struct connectdata *conn, const Curl_addrinfo *ai, /* start connecting to this */ int sockindex); /* 0 or 1 among the temp ones */ /* * Curl_timeleft() returns the amount of milliseconds left allowed for the * transfer/connection. If the value is negative, the timeout time has already * elapsed. * * The start time is stored in progress.t_startsingle - as set with |
︙ | ︙ | |||
591 592 593 594 595 596 597 | if(conn->tempaddr[other]) { /* we can safely skip addresses of the other protocol family */ while(ai && ai->ai_family != family) ai = ai->ai_next; } if(ai) { | | | 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 | if(conn->tempaddr[other]) { /* we can safely skip addresses of the other protocol family */ while(ai && ai->ai_family != family) ai = ai->ai_next; } if(ai) { result = singleipconnect(conn, ai, tempindex); if(result == CURLE_COULDNT_CONNECT) { ai = ai->ai_next; continue; } conn->tempaddr[tempindex] = ai; } |
︙ | ︙ | |||
621 622 623 624 625 626 627 | memcpy(conn->data->info.conn_local_ip, conn->local_ip, MAX_IPADR_LEN); conn->data->info.conn_scheme = conn->handler->scheme; conn->data->info.conn_protocol = conn->handler->protocol; conn->data->info.conn_primary_port = conn->primary_port; conn->data->info.conn_local_port = conn->local_port; } | < < < | | > > | 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 | memcpy(conn->data->info.conn_local_ip, conn->local_ip, MAX_IPADR_LEN); conn->data->info.conn_scheme = conn->handler->scheme; conn->data->info.conn_protocol = conn->handler->protocol; conn->data->info.conn_primary_port = conn->primary_port; conn->data->info.conn_local_port = conn->local_port; } /* retrieves ip address and port from a sockaddr structure. note it calls Curl_inet_ntop which sets errno on fail, not SOCKERRNO. */ bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, char *addr, long *port) { struct sockaddr_in *si = NULL; #ifdef ENABLE_IPV6 struct sockaddr_in6 *si6 = NULL; #endif #if defined(HAVE_SYS_UN_H) && defined(AF_UNIX) struct sockaddr_un *su = NULL; #else (void)salen; #endif switch(sa->sa_family) { case AF_INET: si = (struct sockaddr_in *)(void *) sa; if(Curl_inet_ntop(sa->sa_family, &si->sin_addr, addr, MAX_IPADR_LEN)) { |
︙ | ︙ | |||
660 661 662 663 664 665 666 | *port = us_port; return TRUE; } break; #endif #if defined(HAVE_SYS_UN_H) && defined(AF_UNIX) case AF_UNIX: | > | | > > > | | | > | | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 | *port = us_port; return TRUE; } break; #endif #if defined(HAVE_SYS_UN_H) && defined(AF_UNIX) case AF_UNIX: if(salen > sizeof(sa_family_t)) { su = (struct sockaddr_un*)sa; msnprintf(addr, MAX_IPADR_LEN, "%s", su->sun_path); } else addr[0] = 0; /* socket with no name */ *port = 0; return TRUE; #endif default: break; } addr[0] = '\0'; *port = 0; errno = EAFNOSUPPORT; return FALSE; } /* retrieves the start/end point information of a socket of an established connection */ void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd) { if(conn->transport != TRNSPRT_TCP) /* there's no TCP connection! */ return; #if defined(HAVE_GETPEERNAME) || defined(HAVE_GETSOCKNAME) if(!conn->bits.reuse && !conn->bits.tcp_fastopen) { struct Curl_easy *data = conn->data; char buffer[STRERROR_LEN]; struct Curl_sockaddr_storage ssrem; struct Curl_sockaddr_storage ssloc; curl_socklen_t plen; curl_socklen_t slen; #ifdef HAVE_GETPEERNAME plen = sizeof(struct Curl_sockaddr_storage); if(getpeername(sockfd, (struct sockaddr*) &ssrem, &plen)) { int error = SOCKERRNO; failf(data, "getpeername() failed with errno %d: %s", error, Curl_strerror(error, buffer, sizeof(buffer))); return; } #endif #ifdef HAVE_GETSOCKNAME slen = sizeof(struct Curl_sockaddr_storage); memset(&ssloc, 0, sizeof(ssloc)); if(getsockname(sockfd, (struct sockaddr*) &ssloc, &slen)) { int error = SOCKERRNO; failf(data, "getsockname() failed with errno %d: %s", error, Curl_strerror(error, buffer, sizeof(buffer))); return; } #endif #ifdef HAVE_GETPEERNAME if(!Curl_addr2string((struct sockaddr*)&ssrem, plen, conn->primary_ip, &conn->primary_port)) { failf(data, "ssrem inet_ntop() failed with errno %d: %s", errno, Curl_strerror(errno, buffer, sizeof(buffer))); return; } memcpy(conn->ip_addr_str, conn->primary_ip, MAX_IPADR_LEN); #endif #ifdef HAVE_GETSOCKNAME if(!Curl_addr2string((struct sockaddr*)&ssloc, slen, conn->local_ip, &conn->local_port)) { failf(data, "ssloc inet_ntop() failed with errno %d: %s", errno, Curl_strerror(errno, buffer, sizeof(buffer))); return; } #endif } #else /* !HAVE_GETSOCKNAME && !HAVE_GETPEERNAME */ (void)sockfd; /* unused */ #endif /* persist connection info in session handle */ Curl_persistconninfo(conn); } /* after a TCP connection to the proxy has been verified, this function does the next magic step. Note: this function's sub-functions call failf() */ static CURLcode connected_proxy(struct connectdata *conn, int sockindex) { CURLcode result = CURLE_OK; if(conn->bits.socksproxy) { #ifndef CURL_DISABLE_PROXY /* for the secondary socket (FTP), use the "connect to host" * but ignore the "connect to port" (use the secondary port) */ const char * const host = conn->bits.httpproxy ? conn->http_proxy.host.name : conn->bits.conn_to_host ? conn->conn_to_host.name : sockindex == SECONDARYSOCKET ? conn->secondaryhostname : conn->host.name; const int port = conn->bits.httpproxy ? (int)conn->http_proxy.port : sockindex == SECONDARYSOCKET ? conn->secondary_port : conn->bits.conn_to_port ? conn->conn_to_port : conn->remote_port; conn->bits.socksproxy_connecting = TRUE; switch(conn->socks_proxy.proxytype) { case CURLPROXY_SOCKS5: case CURLPROXY_SOCKS5_HOSTNAME: result = Curl_SOCKS5(conn->socks_proxy.user, conn->socks_proxy.passwd, host, port, sockindex, conn); break; case CURLPROXY_SOCKS4: case CURLPROXY_SOCKS4A: result = Curl_SOCKS4(conn->socks_proxy.user, host, port, sockindex, conn); break; default: failf(conn->data, "unknown proxytype option given"); result = CURLE_COULDNT_CONNECT; } /* switch proxytype */ conn->bits.socksproxy_connecting = FALSE; #else (void)sockindex; #endif /* CURL_DISABLE_PROXY */ } return result; } /* * Curl_is_connected() checks if the socket has connected. */ CURLcode Curl_is_connected(struct connectdata *conn, int sockindex, |
︙ | ︙ | |||
776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 | return CURLE_OPERATION_TIMEDOUT; } for(i = 0; i<2; i++) { const int other = i ^ 1; if(conn->tempsock[i] == CURL_SOCKET_BAD) continue; #ifdef mpeix /* Call this function once now, and ignore the results. We do this to "clear" the error state on the socket so that we can later read it reliably. This is reported necessary on the MPE/iX operating system. */ (void)verifyconnect(conn->tempsock[i], NULL); #endif /* check socket for connect */ rc = SOCKET_WRITABLE(conn->tempsock[i], 0); if(rc == 0) { /* no connection yet */ error = 0; if(Curl_timediff(now, conn->connecttime) >= conn->timeoutms_per_addr) { | > > > > > > > > > > > > > > > > > > | | | 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 | return CURLE_OPERATION_TIMEDOUT; } for(i = 0; i<2; i++) { const int other = i ^ 1; if(conn->tempsock[i] == CURL_SOCKET_BAD) continue; #ifdef ENABLE_QUIC if(conn->transport == TRNSPRT_QUIC) { result = Curl_quic_is_connected(conn, i, connected); if(result) { error = SOCKERRNO; goto error; } if(*connected) { /* use this socket from now on */ conn->sock[sockindex] = conn->tempsock[i]; conn->ip_addr = conn->tempaddr[i]; conn->tempsock[i] = CURL_SOCKET_BAD; connkeep(conn, "HTTP/3 default"); } return result; } #endif #ifdef mpeix /* Call this function once now, and ignore the results. We do this to "clear" the error state on the socket so that we can later read it reliably. This is reported necessary on the MPE/iX operating system. */ (void)verifyconnect(conn->tempsock[i], NULL); #endif /* check socket for connect */ rc = SOCKET_WRITABLE(conn->tempsock[i], 0); if(rc == 0) { /* no connection yet */ error = 0; if(Curl_timediff(now, conn->connecttime) >= conn->timeoutms_per_addr) { infof(data, "After %" CURL_FORMAT_TIMEDIFF_T "ms connect time, move on!\n", conn->timeoutms_per_addr); error = ETIMEDOUT; } /* should we try another protocol family? */ if(i == 0 && conn->tempaddr[1] == NULL && (Curl_timediff(now, conn->connecttime) >= data->set.happy_eyeballs_timeout)) { |
︙ | ︙ | |||
821 822 823 824 825 826 827 | /* close the other socket, if open */ if(conn->tempsock[other] != CURL_SOCKET_BAD) { Curl_closesocket(conn, conn->tempsock[other]); conn->tempsock[other] = CURL_SOCKET_BAD; } /* see if we need to do any proxy magic first once we connected */ | | > > > | | | | 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 | /* close the other socket, if open */ if(conn->tempsock[other] != CURL_SOCKET_BAD) { Curl_closesocket(conn, conn->tempsock[other]); conn->tempsock[other] = CURL_SOCKET_BAD; } /* see if we need to do any proxy magic first once we connected */ result = connected_proxy(conn, sockindex); if(result) return result; conn->bits.tcpconnect[sockindex] = TRUE; *connected = TRUE; if(sockindex == FIRSTSOCKET) Curl_pgrsTime(data, TIMER_CONNECT); /* connect done */ Curl_updateconninfo(conn, conn->sock[sockindex]); Curl_verboseconnect(conn); return CURLE_OK; } infof(data, "Connection failed\n"); } else if(rc & CURL_CSELECT_ERR) (void)verifyconnect(conn->tempsock[i], &error); #ifdef ENABLE_QUIC error: #endif /* * The connection failed here, we should attempt to connect to the "next * address" for the given host. But first remember the latest error. */ if(error) { data->state.os_errno = error; SET_SOCKERRNO(error); if(conn->tempaddr[i]) { CURLcode status; char ipaddress[MAX_IPADR_LEN]; char buffer[STRERROR_LEN]; Curl_printable_address(conn->tempaddr[i], ipaddress, MAX_IPADR_LEN); infof(data, "connect to %s port %ld failed: %s\n", ipaddress, conn->port, Curl_strerror(error, buffer, sizeof(buffer))); conn->timeoutms_per_addr = conn->tempaddr[i]->ai_next == NULL ? allow : allow / 2; status = trynextip(conn, sockindex, i); if((status != CURLE_COULDNT_CONNECT) || conn->tempsock[other] == CURL_SOCKET_BAD) /* the last attempt failed and no other sockets remain open */ result = status; } } } if(result) { |
︙ | ︙ | |||
1000 1001 1002 1003 1004 1005 1006 | * CURL_SOCKET_BAD. Other errors will however return proper errors. * * singleipconnect() connects to the given IP only, and it may return without * having connected. */ static CURLcode singleipconnect(struct connectdata *conn, const Curl_addrinfo *ai, | | | | | | 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 | * CURL_SOCKET_BAD. Other errors will however return proper errors. * * singleipconnect() connects to the given IP only, and it may return without * having connected. */ static CURLcode singleipconnect(struct connectdata *conn, const Curl_addrinfo *ai, int sockindex) { struct Curl_sockaddr_ex addr; int rc = -1; int error = 0; bool isconnected = FALSE; struct Curl_easy *data = conn->data; curl_socket_t sockfd; CURLcode result; char ipaddress[MAX_IPADR_LEN]; long port; bool is_tcp; #ifdef TCP_FASTOPEN_CONNECT int optval = 1; #endif char buffer[STRERROR_LEN]; curl_socket_t *sockp = &conn->tempsock[sockindex]; *sockp = CURL_SOCKET_BAD; result = Curl_socket(conn, ai, &addr, &sockfd); if(result) /* Failed to create the socket, but still return OK since we signal the lack of socket as well. This allows the parent function to keep looping over alternative addresses/socket families etc. */ return CURLE_OK; /* store remote address and port used in this connection attempt */ if(!Curl_addr2string((struct sockaddr*)&addr.sa_addr, addr.addrlen, ipaddress, &port)) { /* malformed address or bug in inet_ntop, try next address */ failf(data, "sa_addr inet_ntop() failed with errno %d: %s", errno, Curl_strerror(errno, buffer, sizeof(buffer))); Curl_closesocket(conn, sockfd); return CURLE_OK; } infof(data, " Trying %s:%ld...\n", ipaddress, port); |
︙ | ︙ | |||
1095 1096 1097 1098 1099 1100 1101 | /* set socket non-blocking */ (void)curlx_nonblock(sockfd, TRUE); conn->connecttime = Curl_now(); if(conn->num_addr > 1) Curl_expire(data, conn->timeoutms_per_addr, EXPIRE_DNS_PER_NAME); | | | | 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 | /* set socket non-blocking */ (void)curlx_nonblock(sockfd, TRUE); conn->connecttime = Curl_now(); if(conn->num_addr > 1) Curl_expire(data, conn->timeoutms_per_addr, EXPIRE_DNS_PER_NAME); /* Connect TCP and QUIC sockets */ if(!isconnected && (conn->transport != TRNSPRT_UDP)) { if(conn->bits.tcp_fastopen) { #if defined(CONNECT_DATA_IDEMPOTENT) /* Darwin */ # if defined(HAVE_BUILTIN_AVAILABLE) /* while connectx function is available since macOS 10.11 / iOS 9, it did not have the interface declared correctly until Xcode 9 / macOS SDK 10.13 */ if(__builtin_available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 2.0, *)) { |
︙ | ︙ | |||
1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 | } else { rc = connect(sockfd, &addr.sa_addr, addr.addrlen); } if(-1 == rc) error = SOCKERRNO; } else { *sockp = sockfd; return CURLE_OK; } if(-1 == rc) { | > > > > > > > > > > | 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 | } else { rc = connect(sockfd, &addr.sa_addr, addr.addrlen); } if(-1 == rc) error = SOCKERRNO; #ifdef ENABLE_QUIC else if(conn->transport == TRNSPRT_QUIC) { /* pass in 'sockfd' separately since it hasn't been put into the tempsock array at this point */ result = Curl_quic_connect(conn, sockfd, sockindex, &addr.sa_addr, addr.addrlen); if(result) error = SOCKERRNO; } #endif } else { *sockp = sockfd; return CURLE_OK; } if(-1 == rc) { |
︙ | ︙ | |||
1215 1216 1217 1218 1219 1220 1221 | /* Max time for the next connection attempt */ conn->timeoutms_per_addr = conn->tempaddr[0]->ai_next == NULL ? timeout_ms : timeout_ms / 2; /* start connecting to first IP */ while(conn->tempaddr[0]) { | | | 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 | /* Max time for the next connection attempt */ conn->timeoutms_per_addr = conn->tempaddr[0]->ai_next == NULL ? timeout_ms : timeout_ms / 2; /* start connecting to first IP */ while(conn->tempaddr[0]) { result = singleipconnect(conn, conn->tempaddr[0], 0); if(!result) break; conn->tempaddr[0] = conn->tempaddr[0]->ai_next; } if(conn->tempsock[0] == CURL_SOCKET_BAD) { if(!result) |
︙ | ︙ | |||
1382 1383 1384 1385 1386 1387 1388 | * curl_sockaddr structure with enough space available to directly hold * any protocol-specific address structures. The variable declared here * will be used to pass / receive data to/from the fopensocket callback * if this has been set, before that, it is initialized from parameters. */ addr->family = ai->ai_family; | | > | | 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 | * curl_sockaddr structure with enough space available to directly hold * any protocol-specific address structures. The variable declared here * will be used to pass / receive data to/from the fopensocket callback * if this has been set, before that, it is initialized from parameters. */ addr->family = ai->ai_family; addr->socktype = (conn->transport == TRNSPRT_TCP) ? SOCK_STREAM : SOCK_DGRAM; addr->protocol = conn->transport != TRNSPRT_TCP ? IPPROTO_UDP : ai->ai_protocol; addr->addrlen = ai->ai_addrlen; if(addr->addrlen > sizeof(struct Curl_sockaddr_storage)) addr->addrlen = sizeof(struct Curl_sockaddr_storage); memcpy(&addr->sa_addr, ai->ai_addr, addr->addrlen); if(data->set.fopensocket) { |
︙ | ︙ |
Changes to jni/curl/lib/connect.h.
︙ | ︙ | |||
46 47 48 49 50 51 52 53 54 55 56 57 58 59 | * Used to extract socket and connectdata struct for the most recent * transfer on the given Curl_easy. * * The returned socket will be CURL_SOCKET_BAD in case of failure! */ curl_socket_t Curl_getconnectinfo(struct Curl_easy *data, struct connectdata **connp); /* * Check if a connection seems to be alive. */ bool Curl_connalive(struct connectdata *conn); #ifdef USE_WINSOCK | > > > | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | * Used to extract socket and connectdata struct for the most recent * transfer on the given Curl_easy. * * The returned socket will be CURL_SOCKET_BAD in case of failure! */ curl_socket_t Curl_getconnectinfo(struct Curl_easy *data, struct connectdata **connp); bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, char *addr, long *port); /* * Check if a connection seems to be alive. */ bool Curl_connalive(struct connectdata *conn); #ifdef USE_WINSOCK |
︙ | ︙ |
Changes to jni/curl/lib/cookie.c.
︙ | ︙ | |||
815 816 817 818 819 820 821 | if(ptr[0]=='.') /* skip preceding dots */ ptr++; co->domain = strdup(ptr); if(!co->domain) badcookie = TRUE; break; case 1: | < < < | | < < < | < < | 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 | if(ptr[0]=='.') /* skip preceding dots */ ptr++; co->domain = strdup(ptr); if(!co->domain) badcookie = TRUE; break; case 1: /* flag: A TRUE/FALSE value indicating if all machines within a given domain can access the variable. Set TRUE when the cookie says .domain.com and to false when the domain is complete www.domain.com */ co->tailmatch = strcasecompare(ptr, "TRUE")?TRUE:FALSE; break; case 2: /* The file format allows the path field to remain not filled in */ if(strcmp("TRUE", ptr) && strcmp("FALSE", ptr)) { /* only if the path doesn't look like a boolean option! */ co->path = strdup(ptr); if(!co->path) badcookie = TRUE; else { co->spath = sanitize_cookie_path(co->path); |
︙ | ︙ |
Changes to jni/curl/lib/curl_config.h.in.
︙ | ︙ | |||
481 482 483 484 485 486 487 488 489 490 491 492 493 494 | #undef HAVE_NETINET_TCP_H /* Define to 1 if you have the <net/if.h> header file. */ #undef HAVE_NET_IF_H /* Define to 1 if you have the <nghttp2/nghttp2.h> header file. */ #undef HAVE_NGHTTP2_NGHTTP2_H /* if you have an old MIT Kerberos version, lacking GSS_C_NT_HOSTBASED_SERVICE */ #undef HAVE_OLD_GSSMIT /* Define to 1 if you have the <openssl/crypto.h> header file. */ #undef HAVE_OPENSSL_CRYPTO_H | > > > > > > > > > | 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 | #undef HAVE_NETINET_TCP_H /* Define to 1 if you have the <net/if.h> header file. */ #undef HAVE_NET_IF_H /* Define to 1 if you have the <nghttp2/nghttp2.h> header file. */ #undef HAVE_NGHTTP2_NGHTTP2_H /* Define to 1 if you have the <nghttp3/nghttp3.h> header file. */ #undef HAVE_NGHTTP3_NGHTTP3_H /* Define to 1 if you have the <ngtcp2/ngtcp2_crypto.h> header file. */ #undef HAVE_NGTCP2_NGTCP2_CRYPTO_H /* Define to 1 if you have the <ngtcp2/ngtcp2.h> header file. */ #undef HAVE_NGTCP2_NGTCP2_H /* if you have an old MIT Kerberos version, lacking GSS_C_NT_HOSTBASED_SERVICE */ #undef HAVE_OLD_GSSMIT /* Define to 1 if you have the <openssl/crypto.h> header file. */ #undef HAVE_OPENSSL_CRYPTO_H |
︙ | ︙ | |||
539 540 541 542 543 544 545 546 547 548 549 550 551 552 | #undef HAVE_PROTO_BSDSOCKET_H /* if you have <pthread.h> */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the <pwd.h> header file. */ #undef HAVE_PWD_H /* Define to 1 if you have the `RAND_egd' function. */ #undef HAVE_RAND_EGD /* Define to 1 if you have the recv function. */ #undef HAVE_RECV | > > > | 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 | #undef HAVE_PROTO_BSDSOCKET_H /* if you have <pthread.h> */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the <pwd.h> header file. */ #undef HAVE_PWD_H /* Define to 1 if you have the <quiche.h> header file. */ #undef HAVE_QUICHE_H /* Define to 1 if you have the `RAND_egd' function. */ #undef HAVE_RAND_EGD /* Define to 1 if you have the recv function. */ #undef HAVE_RECV |
︙ | ︙ | |||
734 735 736 737 738 739 740 741 742 743 744 745 746 747 | #undef HAVE_TIME_H /* Define this if time_t is unsigned */ #undef HAVE_TIME_T_UNSIGNED /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `utime' function. */ #undef HAVE_UTIME /* Define to 1 if you have the `utimes' function. */ #undef HAVE_UTIMES | > > > | 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 | #undef HAVE_TIME_H /* Define this if time_t is unsigned */ #undef HAVE_TIME_T_UNSIGNED /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `usleep' function. */ #undef HAVE_USLEEP /* Define to 1 if you have the `utime' function. */ #undef HAVE_UTIME /* Define to 1 if you have the `utimes' function. */ #undef HAVE_UTIMES |
︙ | ︙ | |||
966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 | /* Define to enable metalink support */ #undef USE_METALINK /* if nghttp2 is in use */ #undef USE_NGHTTP2 /* if NSS is enabled */ #undef USE_NSS /* Use OpenLDAP-specific code */ #undef USE_OPENLDAP /* if OpenSSL is in use */ #undef USE_OPENSSL /* to enable Windows native SSL/TLS support */ #undef USE_SCHANNEL /* enable Secure Transport */ #undef USE_SECTRANSP | > > > > > > > > > > > > | 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 | /* Define to enable metalink support */ #undef USE_METALINK /* if nghttp2 is in use */ #undef USE_NGHTTP2 /* if nghttp3 is in use */ #undef USE_NGHTTP3 /* if ngtcp2 is in use */ #undef USE_NGTCP2 /* if ngtcp2_crypto_openssl is in use */ #undef USE_NGTCP2_CRYPTO_OPENSSL /* if NSS is enabled */ #undef USE_NSS /* Use OpenLDAP-specific code */ #undef USE_OPENLDAP /* if OpenSSL is in use */ #undef USE_OPENSSL /* if quiche is in use */ #undef USE_QUICHE /* to enable Windows native SSL/TLS support */ #undef USE_SCHANNEL /* enable Secure Transport */ #undef USE_SECTRANSP |
︙ | ︙ |
Changes to jni/curl/lib/curl_md4.h.
︙ | ︙ | |||
20 21 22 23 24 25 26 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" | | | | | < < | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #if !defined(CURL_DISABLE_CRYPTO_AUTH) #define MD4_DIGEST_LENGTH 16 void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len); #endif /* !defined(CURL_DISABLE_CRYPTO_AUTH) */ #endif /* HEADER_CURL_MD4_H */ |
Changes to jni/curl/lib/curl_ntlm_core.c.
︙ | ︙ | |||
51 52 53 54 55 56 57 | */ #if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO) #ifdef USE_OPENSSL # include <openssl/des.h> | < < < < < < < < < < | < < > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | */ #if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO) #ifdef USE_OPENSSL # include <openssl/des.h> # include <openssl/md5.h> # include <openssl/ssl.h> # include <openssl/rand.h> # if (OPENSSL_VERSION_NUMBER < 0x00907001L) # define DES_key_schedule des_key_schedule # define DES_cblock des_cblock # define DES_set_odd_parity des_set_odd_parity # define DES_set_key des_set_key # define DES_ecb_encrypt des_ecb_encrypt # define DESKEY(x) x # define DESKEYARG(x) x # else # define DESKEYARG(x) *x # define DESKEY(x) &x # endif #elif defined(USE_GNUTLS_NETTLE) # include <nettle/des.h> #elif defined(USE_GNUTLS) # include <gcrypt.h> # define MD5_DIGEST_LENGTH 16 #elif defined(USE_NSS) # include <nss.h> # include <pk11pub.h> # include <hasht.h> # define MD5_DIGEST_LENGTH MD5_LENGTH #elif defined(USE_MBEDTLS) # include <mbedtls/des.h> # include "curl_md4.h" #elif defined(USE_SECTRANSP) # include <CommonCrypto/CommonCryptor.h> # include <CommonCrypto/CommonDigest.h> #elif defined(USE_OS400CRYPTO) # include "cipher.mih" /* mih/cipher */ #elif defined(USE_WIN32_CRYPTO) # include <wincrypt.h> #else # error "Can't compile NTLM support without a crypto library." #endif #include "urldata.h" #include "non-ascii.h" #include "strcase.h" #include "curl_ntlm_core.h" #include "curl_md5.h" #include "curl_hmac.h" #include "warnless.h" #include "curl_endian.h" #include "curl_des.h" #include "curl_md4.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" #define NTLM_HMAC_MD5_LEN (16) #define NTLMv2_BLOB_SIGNATURE "\x01\x01\x00\x00" |
︙ | ︙ | |||
548 549 550 551 552 553 554 | unsigned char *ntbuffer /* 21 bytes */) { size_t len = strlen(password); unsigned char *pw; CURLcode result; if(len > SIZE_T_MAX/2) /* avoid integer overflow */ return CURLE_OUT_OF_MEMORY; | | < | < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < | < | 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 | unsigned char *ntbuffer /* 21 bytes */) { size_t len = strlen(password); unsigned char *pw; CURLcode result; if(len > SIZE_T_MAX/2) /* avoid integer overflow */ return CURLE_OUT_OF_MEMORY; pw = len ? malloc(len * 2) : (unsigned char *)strdup(""); if(!pw) return CURLE_OUT_OF_MEMORY; ascii_to_unicode_le(pw, password, len); /* * The NT hashed password needs to be created using the password in the * network encoding not the host encoding. */ result = Curl_convert_to_network(data, (char *)pw, len * 2); if(result) return result; /* Create NT hashed password. */ Curl_md4it(ntbuffer, pw, 2 * len); memset(ntbuffer + 16, 0, 21 - 16); free(pw); return CURLE_OK; } #if defined(USE_NTLM_V2) && !defined(USE_WINDOWS_SSPI) |
︙ | ︙ |
Changes to jni/curl/lib/curl_path.c.
︙ | ︙ | |||
51 52 53 54 55 56 57 | real_path = malloc(working_path_len + 1); if(real_path == NULL) { free(working_path); return CURLE_OUT_OF_MEMORY; } if((working_path_len > 3) && (!memcmp(working_path, "/~/", 3))) /* It is referenced to the home directory, so strip the leading '/~/' */ | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | real_path = malloc(working_path_len + 1); if(real_path == NULL) { free(working_path); return CURLE_OUT_OF_MEMORY; } if((working_path_len > 3) && (!memcmp(working_path, "/~/", 3))) /* It is referenced to the home directory, so strip the leading '/~/' */ memcpy(real_path, working_path + 3, working_path_len - 2); else memcpy(real_path, working_path, 1 + working_path_len); } else if(conn->handler->protocol & CURLPROTO_SFTP) { if((working_path_len > 1) && (working_path[1] == '~')) { size_t homelen = strlen(homedir); real_path = malloc(homelen + working_path_len + 1); |
︙ | ︙ |
Changes to jni/curl/lib/curl_rtmp.c.
︙ | ︙ | |||
195 196 197 198 199 200 201 | RTMP_Init(r); RTMP_SetBufferMS(r, DEF_BUFTIME); if(!RTMP_SetupURL(r, conn->data->change.url)) { RTMP_Free(r); return CURLE_URL_MALFORMAT; } | | | | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | RTMP_Init(r); RTMP_SetBufferMS(r, DEF_BUFTIME); if(!RTMP_SetupURL(r, conn->data->change.url)) { RTMP_Free(r); return CURLE_URL_MALFORMAT; } conn->proto.rtmp = r; return CURLE_OK; } static CURLcode rtmp_connect(struct connectdata *conn, bool *done) { RTMP *r = conn->proto.rtmp; SET_RCVTIMEO(tv, 10); r->m_sb.sb_socket = (int)conn->sock[FIRSTSOCKET]; /* We have to know if it's a write before we send the * connect request packet */ |
︙ | ︙ | |||
236 237 238 239 240 241 242 | conn->send[FIRSTSOCKET] = rtmp_send; return CURLE_OK; } static CURLcode rtmp_do(struct connectdata *conn, bool *done) { struct Curl_easy *data = conn->data; | | | 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | conn->send[FIRSTSOCKET] = rtmp_send; return CURLE_OK; } static CURLcode rtmp_do(struct connectdata *conn, bool *done) { struct Curl_easy *data = conn->data; RTMP *r = conn->proto.rtmp; if(!RTMP_ConnectStream(r, 0)) return CURLE_FAILED_INIT; if(conn->data->set.upload) { Curl_pgrsSetUploadSize(data, data->state.infilesize); Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET); |
︙ | ︙ | |||
264 265 266 267 268 269 270 | return CURLE_OK; } static CURLcode rtmp_disconnect(struct connectdata *conn, bool dead_connection) { | | | | | | 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 | return CURLE_OK; } static CURLcode rtmp_disconnect(struct connectdata *conn, bool dead_connection) { RTMP *r = conn->proto.rtmp; (void)dead_connection; if(r) { conn->proto.rtmp = NULL; RTMP_Close(r); RTMP_Free(r); } return CURLE_OK; } static ssize_t rtmp_recv(struct connectdata *conn, int sockindex, char *buf, size_t len, CURLcode *err) { RTMP *r = conn->proto.rtmp; ssize_t nread; (void)sockindex; /* unused */ nread = RTMP_Read(r, buf, curlx_uztosi(len)); if(nread < 0) { if(r->m_read.status == RTMP_READ_COMPLETE || r->m_read.status == RTMP_READ_EOF) { conn->data->req.size = conn->data->req.bytecount; nread = 0; } else *err = CURLE_RECV_ERROR; } return nread; } static ssize_t rtmp_send(struct connectdata *conn, int sockindex, const void *buf, size_t len, CURLcode *err) { RTMP *r = conn->proto.rtmp; ssize_t num; (void)sockindex; /* unused */ num = RTMP_Write(r, (char *)buf, curlx_uztosi(len)); if(num < 0) *err = CURLE_SEND_ERROR; return num; } #endif /* USE_LIBRTMP */ |
Changes to jni/curl/lib/curl_sasl.c.
︙ | ︙ | |||
366 367 368 369 370 371 372 | } else if(enabledmechs & SASL_MECH_PLAIN) { mech = SASL_MECH_STRING_PLAIN; state1 = SASL_PLAIN; sasl->authused = SASL_MECH_PLAIN; if(force_ir || data->set.sasl_ir) | | > | | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | } else if(enabledmechs & SASL_MECH_PLAIN) { mech = SASL_MECH_STRING_PLAIN; state1 = SASL_PLAIN; sasl->authused = SASL_MECH_PLAIN; if(force_ir || data->set.sasl_ir) result = Curl_auth_create_plain_message(data, conn->sasl_authzid, conn->user, conn->passwd, &resp, &len); } else if(enabledmechs & SASL_MECH_LOGIN) { mech = SASL_MECH_STRING_LOGIN; state1 = SASL_LOGIN; state2 = SASL_LOGIN_PASSWD; sasl->authused = SASL_MECH_LOGIN; |
︙ | ︙ | |||
449 450 451 452 453 454 455 | } switch(sasl->state) { case SASL_STOP: *progress = SASL_DONE; return result; case SASL_PLAIN: | | > | | 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 | } switch(sasl->state) { case SASL_STOP: *progress = SASL_DONE; return result; case SASL_PLAIN: result = Curl_auth_create_plain_message(data, conn->sasl_authzid, conn->user, conn->passwd, &resp, &len); break; case SASL_LOGIN: result = Curl_auth_create_login_message(data, conn->user, &resp, &len); newstate = SASL_LOGIN_PASSWD; break; case SASL_LOGIN_PASSWD: result = Curl_auth_create_login_message(data, conn->passwd, &resp, &len); |
︙ | ︙ |
Changes to jni/curl/lib/curl_setup.h.
︙ | ︙ | |||
91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #ifdef TPF # include "config-tpf.h" #endif #ifdef __VXWORKS__ # include "config-vxworks.h" #endif #endif /* HAVE_CONFIG_H */ /* ================================================================ */ /* Definition of preprocessor macros/symbols which modify compiler */ /* behavior or generated code characteristics must be done here, */ /* as appropriate, before any system header file is included. It is */ | > > > > | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #ifdef TPF # include "config-tpf.h" #endif #ifdef __VXWORKS__ # include "config-vxworks.h" #endif #ifdef __PLAN9__ # include "config-plan9.h" #endif #endif /* HAVE_CONFIG_H */ /* ================================================================ */ /* Definition of preprocessor macros/symbols which modify compiler */ /* behavior or generated code characteristics must be done here, */ /* as appropriate, before any system header file is included. It is */ |
︙ | ︙ | |||
478 479 480 481 482 483 484 | 4. set the SIGALRM signal timeout 5. set dir/file naming defines */ #ifdef WIN32 # define DIR_CHAR "\\" | < | 482 483 484 485 486 487 488 489 490 491 492 493 494 495 | 4. set the SIGALRM signal timeout 5. set dir/file naming defines */ #ifdef WIN32 # define DIR_CHAR "\\" #else /* WIN32 */ # ifdef MSDOS /* Watt-32 */ # include <sys/ioctl.h> # define select(n,r,w,x,t) select_s(n,r,w,x,t) |
︙ | ︙ | |||
504 505 506 507 508 509 510 | # ifdef __minix /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */ extern char *strtok_r(char *s, const char *delim, char **last); extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp); # endif # define DIR_CHAR "/" | < < < < < < < < | 507 508 509 510 511 512 513 514 515 516 517 518 519 520 | # ifdef __minix /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */ extern char *strtok_r(char *s, const char *delim, char **last); extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp); # endif # define DIR_CHAR "/" # ifndef fileno /* sunos 4 have this as a macro! */ int fileno(FILE *stream); # endif #endif /* WIN32 */ |
︙ | ︙ | |||
822 823 824 825 826 827 828 829 830 | #endif #ifdef DEBUGBUILD #define UNITTEST #else #define UNITTEST static #endif #endif /* HEADER_CURL_SETUP_H */ | > > > > | 817 818 819 820 821 822 823 824 825 826 827 828 829 | #endif #ifdef DEBUGBUILD #define UNITTEST #else #define UNITTEST static #endif #if defined(USE_NGTCP2) || defined(USE_QUICHE) #define ENABLE_QUIC #endif #endif /* HEADER_CURL_SETUP_H */ |
Changes to jni/curl/lib/doh.h.
︙ | ︙ | |||
36 37 38 39 40 41 42 | const char *hostname, int port, int *waitp); CURLcode Curl_doh_is_resolved(struct connectdata *conn, struct Curl_dns_entry **dns); | | < | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | const char *hostname, int port, int *waitp); CURLcode Curl_doh_is_resolved(struct connectdata *conn, struct Curl_dns_entry **dns); int Curl_doh_getsock(struct connectdata *conn, curl_socket_t *socks); typedef enum { DOH_OK, DOH_DNS_BAD_LABEL, /* 1 */ DOH_DNS_OUT_OF_RANGE, /* 2 */ DOH_DNS_LABEL_LOOP, /* 3 */ DOH_TOO_SMALL_BUFFER, /* 4 */ |
︙ | ︙ |
Changes to jni/curl/lib/easy.c.
︙ | ︙ | |||
183 184 185 186 187 188 189 | if(Curl_resolver_global_init()) { DEBUGF(fprintf(stderr, "Error: resolver_global_init failed\n")); return CURLE_FAILED_INIT; } (void)Curl_ipv6works(); | < < < < < < < | | < | 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | if(Curl_resolver_global_init()) { DEBUGF(fprintf(stderr, "Error: resolver_global_init failed\n")); return CURLE_FAILED_INIT; } (void)Curl_ipv6works(); #if defined(USE_SSH) if(Curl_ssh_init()) { return CURLE_FAILED_INIT; } #endif if(flags & CURL_GLOBAL_ACK_EINTR) Curl_ack_eintr = 1; |
︙ | ︙ | |||
270 271 272 273 274 275 276 | #ifdef WIN32 Curl_win32_cleanup(init_flags); #endif Curl_amiga_cleanup(); | < < < | < < < | 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | #ifdef WIN32 Curl_win32_cleanup(init_flags); #endif Curl_amiga_cleanup(); Curl_ssh_cleanup(); init_flags = 0; } /* * curl_easy_init() is the external interface to alloc, setup and init an * easy handle that is returned. If anything goes wrong, NULL is returned. |
︙ | ︙ | |||
598 599 600 601 602 603 604 | { bool done = FALSE; CURLMcode mcode = CURLM_OK; CURLcode result = CURLE_OK; while(!done && !mcode) { int still_running = 0; | < | | < < < < < < < < < < < < < < < | 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 | { bool done = FALSE; CURLMcode mcode = CURLM_OK; CURLcode result = CURLE_OK; while(!done && !mcode) { int still_running = 0; mcode = curl_multi_poll(multi, NULL, 0, 1000, NULL); if(!mcode) mcode = curl_multi_perform(multi, &still_running); /* only read 'still_running' if curl_multi_perform() return OK */ if(!mcode && !still_running) { int rc; CURLMsg *msg = curl_multi_info_read(multi, &rc); if(msg) { result = msg->data.result; |
︙ | ︙ | |||
938 939 940 941 942 943 944 945 946 947 948 949 950 951 | /* * curl_easy_reset() is an external interface that allows an app to re- * initialize a session handle to the default values. */ void curl_easy_reset(struct Curl_easy *data) { Curl_free_request_state(data); /* zero out UserDefined data: */ Curl_freeset(data); memset(&data->set, 0, sizeof(struct UserDefined)); (void)Curl_init_userdefined(data); | > > | 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 | /* * curl_easy_reset() is an external interface that allows an app to re- * initialize a session handle to the default values. */ void curl_easy_reset(struct Curl_easy *data) { long old_buffer_size = data->set.buffer_size; Curl_free_request_state(data); /* zero out UserDefined data: */ Curl_freeset(data); memset(&data->set, 0, sizeof(struct UserDefined)); (void)Curl_init_userdefined(data); |
︙ | ︙ | |||
961 962 963 964 965 966 967 968 969 970 971 972 973 974 | /* zero out authentication data: */ memset(&data->state.authhost, 0, sizeof(struct auth)); memset(&data->state.authproxy, 0, sizeof(struct auth)); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH) Curl_http_auth_cleanup_digest(data); #endif } /* * curl_easy_pause() allows an application to pause or unpause a specific * transfer and direction. This function sets the full new state for the * current connection this easy handle operates on. * | > > > > > > > > > > > > | 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 | /* zero out authentication data: */ memset(&data->state.authhost, 0, sizeof(struct auth)); memset(&data->state.authproxy, 0, sizeof(struct auth)); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH) Curl_http_auth_cleanup_digest(data); #endif /* resize receive buffer */ if(old_buffer_size != data->set.buffer_size) { char *newbuff = realloc(data->state.buffer, data->set.buffer_size + 1); if(!newbuff) { DEBUGF(fprintf(stderr, "Error: realloc of buffer failed\n")); /* nothing we can do here except use the old size */ data->set.buffer_size = old_buffer_size; } else data->state.buffer = newbuff; } } /* * curl_easy_pause() allows an application to pause or unpause a specific * transfer and direction. This function sets the full new state for the * current connection this easy handle operates on. * |
︙ | ︙ | |||
1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 | if(!result && !n1) return CURLE_AGAIN; *n = (size_t)n1; return result; } /* * Performs connection upkeep for the given session handle. */ CURLcode curl_easy_upkeep(struct Curl_easy *data) { /* Verify that we got an easy handle we can work with. */ if(!GOOD_EASY_HANDLE(data)) return CURLE_BAD_FUNCTION_ARGUMENT; if(data->multi_easy) { /* Use the common function to keep connections alive. */ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 | if(!result && !n1) return CURLE_AGAIN; *n = (size_t)n1; return result; } /* * Wrapper to call functions in Curl_conncache_foreach() * * Returns always 0. */ static int conn_upkeep(struct connectdata *conn, void *param) { /* Param is unused. */ (void)param; if(conn->handler->connection_check) { /* Do a protocol-specific keepalive check on the connection. */ conn->handler->connection_check(conn, CONNCHECK_KEEPALIVE); } return 0; /* continue iteration */ } static CURLcode upkeep(struct conncache *conn_cache, void *data) { /* Loop over every connection and make connection alive. */ Curl_conncache_foreach(data, conn_cache, data, conn_upkeep); return CURLE_OK; } /* * Performs connection upkeep for the given session handle. */ CURLcode curl_easy_upkeep(struct Curl_easy *data) { /* Verify that we got an easy handle we can work with. */ if(!GOOD_EASY_HANDLE(data)) return CURLE_BAD_FUNCTION_ARGUMENT; if(data->multi_easy) { /* Use the common function to keep connections alive. */ return upkeep(&data->multi_easy->conn_cache, data); } else { /* No connections, so just return success */ return CURLE_OK; } } |
Changes to jni/curl/lib/ftp.c.
︙ | ︙ | |||
128 129 130 131 132 133 134 | static CURLcode ftp_do(struct connectdata *conn, bool *done); static CURLcode ftp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode ftp_connect(struct connectdata *conn, bool *done); static CURLcode ftp_disconnect(struct connectdata *conn, bool dead_connection); static CURLcode ftp_do_more(struct connectdata *conn, int *completed); static CURLcode ftp_multi_statemach(struct connectdata *conn, bool *done); | | < | < | 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | static CURLcode ftp_do(struct connectdata *conn, bool *done); static CURLcode ftp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode ftp_connect(struct connectdata *conn, bool *done); static CURLcode ftp_disconnect(struct connectdata *conn, bool dead_connection); static CURLcode ftp_do_more(struct connectdata *conn, int *completed); static CURLcode ftp_multi_statemach(struct connectdata *conn, bool *done); static int ftp_getsock(struct connectdata *conn, curl_socket_t *socks); static int ftp_domore_getsock(struct connectdata *conn, curl_socket_t *socks); static CURLcode ftp_doing(struct connectdata *conn, bool *dophase_done); static CURLcode ftp_setup_connection(struct connectdata * conn); static CURLcode init_wc_data(struct connectdata *conn); static CURLcode wc_statemach(struct connectdata *conn); |
︙ | ︙ | |||
378 379 380 381 382 383 384 | { struct Curl_easy *data = conn->data; curl_socket_t ctrl_sock = conn->sock[FIRSTSOCKET]; curl_socket_t data_sock = conn->sock[SECONDARYSOCKET]; struct ftp_conn *ftpc = &conn->proto.ftpc; struct pingpong *pp = &ftpc->pp; int result; | | | 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 | { struct Curl_easy *data = conn->data; curl_socket_t ctrl_sock = conn->sock[FIRSTSOCKET]; curl_socket_t data_sock = conn->sock[SECONDARYSOCKET]; struct ftp_conn *ftpc = &conn->proto.ftpc; struct pingpong *pp = &ftpc->pp; int result; timediff_t timeout_ms; ssize_t nread; int ftpcode; *received = FALSE; timeout_ms = ftp_timeleft_accept(data); infof(data, "Checking for server connect\n"); |
︙ | ︙ | |||
489 490 491 492 493 494 495 | * us. This function checks whether data connection is established if so it is * accepted. * */ static CURLcode AllowServerConnect(struct connectdata *conn, bool *connected) { struct Curl_easy *data = conn->data; | | | 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 | * us. This function checks whether data connection is established if so it is * accepted. * */ static CURLcode AllowServerConnect(struct connectdata *conn, bool *connected) { struct Curl_easy *data = conn->data; timediff_t timeout_ms; CURLcode result = CURLE_OK; *connected = FALSE; infof(data, "Preparing for accepting server on data port\n"); /* Save the time we start accepting server connect */ Curl_pgrsTime(data, TIMER_STARTACCEPT); |
︙ | ︙ | |||
806 807 808 809 810 811 812 | state(conn, FTP_PWD); return CURLE_OK; } /* For the FTP "protocol connect" and "doing" phases only */ static int ftp_getsock(struct connectdata *conn, | | < | | < < < < | 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 | state(conn, FTP_PWD); return CURLE_OK; } /* For the FTP "protocol connect" and "doing" phases only */ static int ftp_getsock(struct connectdata *conn, curl_socket_t *socks) { return Curl_pp_getsock(&conn->proto.ftpc.pp, socks); } /* For the FTP "DO_MORE" phase only */ static int ftp_domore_getsock(struct connectdata *conn, curl_socket_t *socks) { struct ftp_conn *ftpc = &conn->proto.ftpc; /* When in DO_MORE state, we could be either waiting for us to connect to a * remote site, or we could wait for that site to connect to us. Or just * handle ordinary commands. */ if(FTP_STOP == ftpc->state) { int bits = GETSOCK_READSOCK(0); |
︙ | ︙ | |||
852 853 854 855 856 857 858 | else { socks[1] = conn->sock[SECONDARYSOCKET]; bits |= GETSOCK_WRITESOCK(1) | GETSOCK_READSOCK(1); } return bits; } | | | 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 | else { socks[1] = conn->sock[SECONDARYSOCKET]; bits |= GETSOCK_WRITESOCK(1) | GETSOCK_READSOCK(1); } return bits; } return Curl_pp_getsock(&conn->proto.ftpc.pp, socks); } /* This is called after the FTP_QUOTE state is passed. ftp_state_cwd() sends the range of CWD commands to the server to change to the correct directory. It may also need to send MKD commands to create missing ones, if that option is enabled. |
︙ | ︙ |
Changes to jni/curl/lib/getenv.c.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
31 32 33 34 35 36 37 | char *GetEnv(const char *variable) { #if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) (void)variable; return NULL; #else #ifdef WIN32 | | | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | char *GetEnv(const char *variable) { #if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) (void)variable; return NULL; #else #ifdef WIN32 char env[4096]; char *temp = getenv(variable); env[0] = '\0'; if(temp != NULL) ExpandEnvironmentStringsA(temp, env, sizeof(env)); return (env[0] != '\0')?strdup(env):NULL; #else char *env = getenv(variable); |
︙ | ︙ |
Changes to jni/curl/lib/getinfo.c.
︙ | ︙ | |||
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | break; case 11: *param_longp = CURL_HTTP_VERSION_1_1; break; case 20: *param_longp = CURL_HTTP_VERSION_2_0; break; default: *param_longp = CURL_HTTP_VERSION_NONE; break; } break; case CURLINFO_PROTOCOL: *param_longp = data->info.conn_protocol; break; | > > > < | 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | break; case 11: *param_longp = CURL_HTTP_VERSION_1_1; break; case 20: *param_longp = CURL_HTTP_VERSION_2_0; break; case 30: *param_longp = CURL_HTTP_VERSION_3; break; default: *param_longp = CURL_HTTP_VERSION_NONE; break; } break; case CURLINFO_PROTOCOL: *param_longp = data->info.conn_protocol; break; default: return CURLE_UNKNOWN_OPTION; } return CURLE_OK; } |
︙ | ︙ | |||
297 298 299 300 301 302 303 | break; case CURLINFO_STARTTRANSFER_TIME_T: *param_offt = data->progress.t_starttransfer; break; case CURLINFO_REDIRECT_TIME_T: *param_offt = data->progress.t_redirect; break; | | > > | 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 | break; case CURLINFO_STARTTRANSFER_TIME_T: *param_offt = data->progress.t_starttransfer; break; case CURLINFO_REDIRECT_TIME_T: *param_offt = data->progress.t_redirect; break; case CURLINFO_RETRY_AFTER: *param_offt = data->info.retry_after; break; default: return CURLE_UNKNOWN_OPTION; } return CURLE_OK; } |
︙ | ︙ |
Changes to jni/curl/lib/hostip.c.
︙ | ︙ | |||
620 621 622 623 624 625 626 | * CURLRESOLV_PENDING (1) = waiting for response, no pointer */ int Curl_resolv_timeout(struct connectdata *conn, const char *hostname, int port, struct Curl_dns_entry **entry, | | | 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 | * CURLRESOLV_PENDING (1) = waiting for response, no pointer */ int Curl_resolv_timeout(struct connectdata *conn, const char *hostname, int port, struct Curl_dns_entry **entry, timediff_t timeoutms) { #ifdef USE_ALARM_TIMEOUT #ifdef HAVE_SIGACTION struct sigaction keep_sigact; /* store the old struct here */ volatile bool keep_copysig = FALSE; /* whether old sigact has been saved */ struct sigaction sigact; #else |
︙ | ︙ | |||
1023 1024 1025 1026 1027 1028 1029 | { if(conn->data->set.doh) return Curl_doh_is_resolved(conn, dns); return Curl_resolver_is_resolved(conn, dns); } int Curl_resolv_getsock(struct connectdata *conn, | | < | < | 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 | { if(conn->data->set.doh) return Curl_doh_is_resolved(conn, dns); return Curl_resolver_is_resolved(conn, dns); } int Curl_resolv_getsock(struct connectdata *conn, curl_socket_t *socks) { #ifdef CURLRES_ASYNCH if(conn->data->set.doh) /* nothing to wait for during DOH resolve, those handles have their own sockets */ return GETSOCK_BLANK; return Curl_resolver_getsock(conn, socks); #else (void)conn; (void)socks; return GETSOCK_BLANK; #endif } /* Call this function after Curl_connect() has returned async=TRUE and then a successful name resolve has been received. |
︙ | ︙ |
Changes to jni/curl/lib/hostip.h.
︙ | ︙ | |||
21 22 23 24 25 26 27 28 29 30 31 32 33 34 | * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #include "hash.h" #include "curl_addrinfo.h" #include "asyn.h" #ifdef HAVE_SETJMP_H #include <setjmp.h> #endif #ifdef NETWARE | > | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #include "hash.h" #include "curl_addrinfo.h" #include "timeval.h" /* for timediff_t */ #include "asyn.h" #ifdef HAVE_SETJMP_H #include <setjmp.h> #endif #ifdef NETWARE |
︙ | ︙ | |||
85 86 87 88 89 90 91 | int Curl_resolv(struct connectdata *conn, const char *hostname, int port, bool allowDOH, struct Curl_dns_entry **dnsentry); int Curl_resolv_timeout(struct connectdata *conn, const char *hostname, int port, struct Curl_dns_entry **dnsentry, | | | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | int Curl_resolv(struct connectdata *conn, const char *hostname, int port, bool allowDOH, struct Curl_dns_entry **dnsentry); int Curl_resolv_timeout(struct connectdata *conn, const char *hostname, int port, struct Curl_dns_entry **dnsentry, timediff_t timeoutms); #ifdef CURLRES_IPV6 /* * Curl_ipv6works() returns TRUE if IPv6 seems to work. */ bool Curl_ipv6works(void); #else |
︙ | ︙ | |||
236 237 238 239 240 241 242 | * Populate the cache with specified entries from CURLOPT_RESOLVE. */ CURLcode Curl_loadhostpairs(struct Curl_easy *data); CURLcode Curl_resolv_check(struct connectdata *conn, struct Curl_dns_entry **dns); int Curl_resolv_getsock(struct connectdata *conn, | | < | 237 238 239 240 241 242 243 244 245 246 | * Populate the cache with specified entries from CURLOPT_RESOLVE. */ CURLcode Curl_loadhostpairs(struct Curl_easy *data); CURLcode Curl_resolv_check(struct connectdata *conn, struct Curl_dns_entry **dns); int Curl_resolv_getsock(struct connectdata *conn, curl_socket_t *socks); #endif /* HEADER_CURL_HOSTIP_H */ |
Changes to jni/curl/lib/hostip6.c.
︙ | ︙ | |||
161 162 163 164 165 166 167 | if((pf != PF_INET) && !Curl_ipv6works()) /* The stack seems to be a non-IPv6 one */ pf = PF_INET; memset(&hints, 0, sizeof(hints)); hints.ai_family = pf; | | > | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | if((pf != PF_INET) && !Curl_ipv6works()) /* The stack seems to be a non-IPv6 one */ pf = PF_INET; memset(&hints, 0, sizeof(hints)); hints.ai_family = pf; hints.ai_socktype = (conn->transport == TRNSPRT_TCP) ? SOCK_STREAM : SOCK_DGRAM; #ifndef USE_RESOLVE_ON_IPS /* * The AI_NUMERICHOST must not be set to get synthesized IPv6 address from * an IPv4 address on iOS and Mac OS X. */ if((1 == Curl_inet_pton(AF_INET, hostname, addrbuf)) || |
︙ | ︙ |
Changes to jni/curl/lib/http.c.
︙ | ︙ | |||
84 85 86 87 88 89 90 | #include "memdebug.h" /* * Forward declarations. */ static int http_getsock_do(struct connectdata *conn, | | < | < | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #include "memdebug.h" /* * Forward declarations. */ static int http_getsock_do(struct connectdata *conn, curl_socket_t *socks); static int http_should_fail(struct connectdata *conn); #ifndef CURL_DISABLE_PROXY static CURLcode add_haproxy_protocol_header(struct connectdata *conn); #endif #ifdef USE_SSL static CURLcode https_connecting(struct connectdata *conn, bool *done); static int https_getsock(struct connectdata *conn, curl_socket_t *socks); #else #define https_connecting(x,y) CURLE_COULDNT_CONNECT #endif static CURLcode http_setup_conn(struct connectdata *conn); /* * HTTP handler interface. |
︙ | ︙ | |||
167 168 169 170 171 172 173 | http = calloc(1, sizeof(struct HTTP)); if(!http) return CURLE_OUT_OF_MEMORY; Curl_mime_initpart(&http->form, conn->data); data->req.protop = http; | > > > > > > > > > > > | | | | > | 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | http = calloc(1, sizeof(struct HTTP)); if(!http) return CURLE_OUT_OF_MEMORY; Curl_mime_initpart(&http->form, conn->data); data->req.protop = http; if(data->set.httpversion == CURL_HTTP_VERSION_3) { if(conn->handler->flags & PROTOPT_SSL) /* Only go HTTP/3 directly on HTTPS URLs. It needs a UDP socket and does the QUIC dance. */ conn->transport = TRNSPRT_QUIC; else { failf(data, "HTTP/3 requested for non-HTTPS URL"); return CURLE_URL_MALFORMAT; } } else { if(!CONN_INUSE(conn)) /* if not already multi-using, setup connection details */ Curl_http2_setup_conn(conn); Curl_http2_setup_req(data); } return CURLE_OK; } #ifndef CURL_DISABLE_PROXY /* * checkProxyHeaders() checks the linked list of custom proxy headers * if proxy headers are not available, then it will lookup into http header |
︙ | ︙ | |||
1132 1133 1134 1135 1136 1137 1138 | } /* * Curl_add_buffer_free() frees all associated resources. */ void Curl_add_buffer_free(Curl_send_buffer **inp) { | | > > > | | > | 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 | } /* * Curl_add_buffer_free() frees all associated resources. */ void Curl_add_buffer_free(Curl_send_buffer **inp) { Curl_send_buffer *in; if(!inp) return; in = *inp; if(in) { /* deal with NULL input */ free(in->buffer); free(in); } *inp = NULL; } /* * Curl_add_buffer_send() sends a header buffer and frees all associated * memory. Body data may be appended to the header data if desired. * |
︙ | ︙ | |||
1493 1494 1495 1496 1497 1498 1499 | return CURLE_OK; } /* this returns the socket to wait for in the DO and DOING state for the multi interface and then we're always _sending_ a request and thus we wait for the single socket to become writable only */ static int http_getsock_do(struct connectdata *conn, | | < < | 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 | return CURLE_OK; } /* this returns the socket to wait for in the DO and DOING state for the multi interface and then we're always _sending_ a request and thus we wait for the single socket to become writable only */ static int http_getsock_do(struct connectdata *conn, curl_socket_t *socks) { /* write mode */ socks[0] = conn->sock[FIRSTSOCKET]; return GETSOCK_WRITESOCK(0); } #ifndef CURL_DISABLE_PROXY static CURLcode add_haproxy_protocol_header(struct connectdata *conn) { |
︙ | ︙ | |||
1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 | #endif #ifdef USE_SSL static CURLcode https_connecting(struct connectdata *conn, bool *done) { CURLcode result; DEBUGASSERT((conn) && (conn->handler->flags & PROTOPT_SSL)); /* perform SSL initialization for this socket */ result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, done); if(result) connclose(conn, "Failed HTTPS connection"); return result; } static int https_getsock(struct connectdata *conn, | > > > > > > > | < | | 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 | #endif #ifdef USE_SSL static CURLcode https_connecting(struct connectdata *conn, bool *done) { CURLcode result; DEBUGASSERT((conn) && (conn->handler->flags & PROTOPT_SSL)); #ifdef ENABLE_QUIC if(conn->transport == TRNSPRT_QUIC) { *done = TRUE; return CURLE_OK; } #endif /* perform SSL initialization for this socket */ result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, done); if(result) connclose(conn, "Failed HTTPS connection"); return result; } static int https_getsock(struct connectdata *conn, curl_socket_t *socks) { if(conn->handler->flags & PROTOPT_SSL) return Curl_ssl_getsock(conn, socks); return GETSOCK_BLANK; } #endif /* USE_SSL */ /* * Curl_http_done() gets called after a single HTTP request has been * performed. |
︙ | ︙ | |||
1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 | return ((data->set.httpversion == CURL_HTTP_VERSION_NONE) || (data->set.httpversion >= CURL_HTTP_VERSION_1_1)); } static const char *get_http_string(const struct Curl_easy *data, const struct connectdata *conn) { #ifdef USE_NGHTTP2 if(conn->proto.httpc.h2) return "2"; #endif if(use_http_1_1plus(data, conn)) return "1.1"; return "1.0"; } /* check and possibly add an Expect: header */ static CURLcode expect100(struct Curl_easy *data, struct connectdata *conn, Curl_send_buffer *req_buffer) { CURLcode result = CURLE_OK; data->state.expect100header = FALSE; /* default to false unless it is set to TRUE below */ if(use_http_1_1plus(data, conn) && | > > > > > > | | 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 | return ((data->set.httpversion == CURL_HTTP_VERSION_NONE) || (data->set.httpversion >= CURL_HTTP_VERSION_1_1)); } static const char *get_http_string(const struct Curl_easy *data, const struct connectdata *conn) { #ifdef ENABLE_QUIC if((data->set.httpversion == CURL_HTTP_VERSION_3) || (conn->httpversion == 30)) return "3"; #endif #ifdef USE_NGHTTP2 if(conn->proto.httpc.h2) return "2"; #endif if(use_http_1_1plus(data, conn)) return "1.1"; return "1.0"; } /* check and possibly add an Expect: header */ static CURLcode expect100(struct Curl_easy *data, struct connectdata *conn, Curl_send_buffer *req_buffer) { CURLcode result = CURLE_OK; data->state.expect100header = FALSE; /* default to false unless it is set to TRUE below */ if(use_http_1_1plus(data, conn) && (conn->httpversion < 20)) { /* if not doing HTTP 1.0 or version 2, or disabled explicitly, we add an Expect: 100-continue to the headers which actually speeds up post operations (as there is one packet coming back from the web server) */ const char *ptr = Curl_checkheaders(conn, "Expect"); if(ptr) { data->state.expect100header = Curl_compareheader(ptr, "Expect:", "100-continue"); |
︙ | ︙ | |||
1696 1697 1698 1699 1700 1701 1702 | HEADER_CONNECT /* sending CONNECT to a proxy */ }; /* used to compile the provided trailers into one buffer will return an error code if one of the headers is not formatted correctly */ CURLcode Curl_http_compile_trailers(struct curl_slist *trailers, | | | 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 | HEADER_CONNECT /* sending CONNECT to a proxy */ }; /* used to compile the provided trailers into one buffer will return an error code if one of the headers is not formatted correctly */ CURLcode Curl_http_compile_trailers(struct curl_slist *trailers, Curl_send_buffer **buffer, struct Curl_easy *handle) { char *ptr = NULL; CURLcode result = CURLE_OK; const char *endofline_native = NULL; const char *endofline_network = NULL; |
︙ | ︙ | |||
1722 1723 1724 1725 1726 1727 1728 | endofline_network = "\x0d\x0a"; } while(trailers) { /* only add correctly formatted trailers */ ptr = strchr(trailers->data, ':'); if(ptr && *(ptr + 1) == ' ') { | | | | 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 | endofline_network = "\x0d\x0a"; } while(trailers) { /* only add correctly formatted trailers */ ptr = strchr(trailers->data, ':'); if(ptr && *(ptr + 1) == ' ') { result = Curl_add_bufferf(buffer, "%s%s", trailers->data, endofline_native); if(result) return result; } else infof(handle, "Malformatted trailing header ! Skipping trailer."); trailers = trailers->next; } result = Curl_add_buffer(buffer, endofline_network, strlen(endofline_network)); return result; } CURLcode Curl_add_custom_headers(struct connectdata *conn, bool is_connect, Curl_send_buffer *req_buffer) |
︙ | ︙ | |||
1847 1848 1849 1850 1851 1852 1853 | checkprefix("Content-Length:", compare)) ; else if(conn->allocptr.te && /* when asking for Transfer-Encoding, don't pass on a custom Connection: */ checkprefix("Connection:", compare)) ; | | | 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 | checkprefix("Content-Length:", compare)) ; else if(conn->allocptr.te && /* when asking for Transfer-Encoding, don't pass on a custom Connection: */ checkprefix("Connection:", compare)) ; else if((conn->httpversion >= 20) && checkprefix("Transfer-Encoding:", compare)) /* HTTP/2 doesn't support chunked requests */ ; else if((checkprefix("Authorization:", compare) || checkprefix("Cookie:", compare)) && /* be careful of sending this potentially sensitive header to other hosts */ |
︙ | ︙ | |||
1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 | #if !defined(CURL_DISABLE_COOKIES) char *addcookies = NULL; #endif curl_off_t included_body = 0; const char *httpstring; Curl_send_buffer *req_buffer; curl_off_t postsize = 0; /* curl_off_t to handle large file sizes */ /* Always consider the DO phase done after this function call, even if there may be parts of the request that is not yet sent, since we can deal with the rest of the request in the PERFORM phase. */ *done = TRUE; | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 | #if !defined(CURL_DISABLE_COOKIES) char *addcookies = NULL; #endif curl_off_t included_body = 0; const char *httpstring; Curl_send_buffer *req_buffer; curl_off_t postsize = 0; /* curl_off_t to handle large file sizes */ char *altused = NULL; /* Always consider the DO phase done after this function call, even if there may be parts of the request that is not yet sent, since we can deal with the rest of the request in the PERFORM phase. */ *done = TRUE; if(conn->transport != TRNSPRT_QUIC) { if(conn->httpversion < 20) { /* unless the connection is re-used and already http2 */ switch(conn->negnpn) { case CURL_HTTP_VERSION_2: conn->httpversion = 20; /* we know we're on HTTP/2 now */ result = Curl_http2_switched(conn, NULL, 0); if(result) return result; break; case CURL_HTTP_VERSION_1_1: /* continue with HTTP/1.1 when explicitly requested */ break; default: /* Check if user wants to use HTTP/2 with clear TCP*/ #ifdef USE_NGHTTP2 if(conn->data->set.httpversion == CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE) { if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) { /* We don't support HTTP/2 proxies yet. Also it's debatable whether or not this setting should apply to HTTP/2 proxies. */ infof(data, "Ignoring HTTP/2 prior knowledge due to proxy\n"); break; } DEBUGF(infof(data, "HTTP/2 over clean TCP\n")); conn->httpversion = 20; result = Curl_http2_switched(conn, NULL, 0); if(result) return result; } #endif break; } } else { /* prepare for a http2 request */ result = Curl_http2_setup(conn); if(result) return result; } } http = data->req.protop; DEBUGASSERT(http); if(!data->state.this_is_a_follow) { /* Free to avoid leaking memory on multiple requests*/ free(data->state.first_host); |
︙ | ︙ | |||
2222 2223 2224 2225 2226 2227 2228 | /* Some kind of TE is requested, check if 'chunked' is chosen */ data->req.upload_chunky = Curl_compareheader(ptr, "Transfer-Encoding:", "chunked"); } else { if((conn->handler->protocol & PROTO_FAMILY_HTTP) && (((httpreq == HTTPREQ_POST_MIME || httpreq == HTTPREQ_POST_FORM) && | | > | > | | | 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 | /* Some kind of TE is requested, check if 'chunked' is chosen */ data->req.upload_chunky = Curl_compareheader(ptr, "Transfer-Encoding:", "chunked"); } else { if((conn->handler->protocol & PROTO_FAMILY_HTTP) && (((httpreq == HTTPREQ_POST_MIME || httpreq == HTTPREQ_POST_FORM) && http->postsize < 0) || ((data->set.upload || httpreq == HTTPREQ_POST) && data->state.infilesize == -1))) { if(conn->bits.authneg) /* don't enable chunked during auth neg */ ; else if(use_http_1_1plus(data, conn)) { if(conn->httpversion < 20) /* HTTP, upload, unknown file size and not HTTP 1.0 */ data->req.upload_chunky = TRUE; } else { failf(data, "Chunky upload is not supported by HTTP 1.0"); return CURLE_UPLOAD_FAILED; } } else { |
︙ | ︙ | |||
2330 2331 2332 2333 2334 2335 2336 | /* The path sent to the proxy is in fact the entire URL. But if the remote host is a IDN-name, we must make sure that the request we produce only uses the encoded host name! */ /* and no fragment part */ CURLUcode uc; | < | 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 | /* The path sent to the proxy is in fact the entire URL. But if the remote host is a IDN-name, we must make sure that the request we produce only uses the encoded host name! */ /* and no fragment part */ CURLUcode uc; CURLU *h = curl_url_dup(data->state.uh); if(!h) return CURLE_OUT_OF_MEMORY; if(conn->host.dispname != conn->host.name) { uc = curl_url_set(h, CURLUPART_HOST, conn->host.name, 0); if(uc) { |
︙ | ︙ | |||
2361 2362 2363 2364 2365 2366 2367 | } uc = curl_url_set(h, CURLUPART_PASSWORD, NULL, 0); if(uc) { curl_url_cleanup(h); return CURLE_OUT_OF_MEMORY; } } | | > > | < < < < < < | 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 | } uc = curl_url_set(h, CURLUPART_PASSWORD, NULL, 0); if(uc) { curl_url_cleanup(h); return CURLE_OUT_OF_MEMORY; } } /* Extract the the URL to use in the request. Store in STRING_TEMP_URL for clean-up reasons if the function returns before the free() further down. */ uc = curl_url_get(h, CURLUPART_URL, &data->set.str[STRING_TEMP_URL], 0); if(uc) { curl_url_cleanup(h); return CURLE_OUT_OF_MEMORY; } curl_url_cleanup(h); if(strcasecompare("ftp", data->state.up.scheme)) { if(data->set.proxy_transfer_mode) { /* when doing ftp, append ;type=<a|i> if not present */ char *type = strstr(path, ";type="); if(type && type[6] && type[7] == 0) { |
︙ | ︙ | |||
2552 2553 2554 2555 2556 2557 2558 2559 2560 | return result; if(data->set.str[STRING_TARGET]) { path = data->set.str[STRING_TARGET]; query = NULL; } /* url */ if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) { | > | > > > | > > > > > > > > | > | 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 | return result; if(data->set.str[STRING_TARGET]) { path = data->set.str[STRING_TARGET]; query = NULL; } #ifndef CURL_DISABLE_PROXY /* url */ if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) { char *url = data->set.str[STRING_TEMP_URL]; result = Curl_add_buffer(&req_buffer, url, strlen(url)); Curl_safefree(data->set.str[STRING_TEMP_URL]); } else #endif if(paste_ftp_userpwd) result = Curl_add_bufferf(&req_buffer, "ftp://%s:%s@%s", conn->user, conn->passwd, path + sizeof("ftp://") - 1); else { result = Curl_add_buffer(&req_buffer, path, strlen(path)); if(result) return result; if(query) result = Curl_add_bufferf(&req_buffer, "?%s", query); } if(result) return result; #ifdef USE_ALTSVC if(conn->bits.altused && !Curl_checkheaders(conn, "Alt-Used")) { altused = aprintf("Alt-Used: %s:%d\r\n", conn->conn_to_host.name, conn->conn_to_port); if(!altused) return CURLE_OUT_OF_MEMORY; } #endif result = Curl_add_bufferf(&req_buffer, "%s" /* ftp typecode (;type=x) */ " HTTP/%s\r\n" /* HTTP version */ "%s" /* host */ "%s" /* proxyuserpwd */ "%s" /* userpwd */ "%s" /* range */ "%s" /* user agent */ "%s" /* accept */ "%s" /* TE: */ "%s" /* accept-encoding */ "%s" /* referer */ "%s" /* Proxy-Connection */ "%s" /* transfer-encoding */ "%s",/* Alt-Used */ ftp_typecode, httpstring, (conn->allocptr.host?conn->allocptr.host:""), conn->allocptr.proxyuserpwd? conn->allocptr.proxyuserpwd:"", conn->allocptr.userpwd?conn->allocptr.userpwd:"", |
︙ | ︙ | |||
2611 2612 2613 2614 2615 2616 2617 | conn->allocptr.accept_encoding:"", (data->change.referer && conn->allocptr.ref)? conn->allocptr.ref:"" /* Referer: <data> */, (conn->bits.httpproxy && !conn->bits.tunnel_proxy && !Curl_checkProxyheaders(conn, "Proxy-Connection"))? "Proxy-Connection: Keep-Alive\r\n":"", | | > > | 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 | conn->allocptr.accept_encoding:"", (data->change.referer && conn->allocptr.ref)? conn->allocptr.ref:"" /* Referer: <data> */, (conn->bits.httpproxy && !conn->bits.tunnel_proxy && !Curl_checkProxyheaders(conn, "Proxy-Connection"))? "Proxy-Connection: Keep-Alive\r\n":"", te, altused ? altused : "" ); /* clear userpwd and proxyuserpwd to avoid re-using old credentials * from re-used connections */ Curl_safefree(conn->allocptr.userpwd); Curl_safefree(conn->allocptr.proxyuserpwd); free(altused); if(result) return result; if(!(conn->handler->flags&PROTOPT_SSL) && conn->httpversion != 20 && (data->set.httpversion == CURL_HTTP_VERSION_2)) { |
︙ | ︙ | |||
3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 | * https://tools.ietf.org/html/rfc7230#section-3.1.2 * * The response code is always a three-digit number in HTTP as the spec * says. We try to allow any number here, but we cannot make * guarantees on future behaviors since it isn't within the protocol. */ char separator; nc = sscanf(HEADER1, " HTTP/%1d.%1d%c%3d", &httpversion_major, &conn->httpversion, &separator, &k->httpcode); | > | | | 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 | * https://tools.ietf.org/html/rfc7230#section-3.1.2 * * The response code is always a three-digit number in HTTP as the spec * says. We try to allow any number here, but we cannot make * guarantees on future behaviors since it isn't within the protocol. */ char separator; char twoorthree[2]; nc = sscanf(HEADER1, " HTTP/%1d.%1d%c%3d", &httpversion_major, &conn->httpversion, &separator, &k->httpcode); if(nc == 1 && httpversion_major >= 2 && 2 == sscanf(HEADER1, " HTTP/%1[23] %d", twoorthree, &k->httpcode)) { conn->httpversion = 0; nc = 4; separator = ' '; } if((nc == 4) && (' ' == separator)) { conn->httpversion += 10 * httpversion_major; |
︙ | ︙ | |||
3702 3703 3704 3705 3706 3707 3708 | nc = 1; k->httpcode = 200; conn->httpversion = 10; } } } else { | | | 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 | nc = 1; k->httpcode = 200; conn->httpversion = 10; } } } else { failf(data, "Unsupported HTTP version in response"); return CURLE_UNSUPPORTED_PROTOCOL; } } else if(conn->handler->protocol & CURLPROTO_RTSP) { char separator; nc = sscanf(HEADER1, " RTSP/%1d.%1d%c%3d", |
︙ | ︙ | |||
3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 | * 2616). zlib cannot handle compress. However, errors are * handled further down when the response body is processed */ result = Curl_build_unencoding_stack(conn, k->p + 17, FALSE); if(result) return result; } else if(!k->http_bodyless && checkprefix("Content-Range:", k->p)) { /* Content-Range: bytes [num]- Content-Range: bytes: [num]- Content-Range: [num]- Content-Range: [asterisk]/[total] The second format was added since Sun's webserver | > > > > > > > > > > > > > | 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 | * 2616). zlib cannot handle compress. However, errors are * handled further down when the response body is processed */ result = Curl_build_unencoding_stack(conn, k->p + 17, FALSE); if(result) return result; } else if(checkprefix("Retry-After:", k->p)) { /* Retry-After = HTTP-date / delay-seconds */ curl_off_t retry_after = 0; /* zero for unknown or "now" */ time_t date = curl_getdate(&k->p[12], NULL); if(-1 == date) { /* not a date, try it as a decimal number */ (void)curlx_strtoofft(&k->p[12], NULL, 10, &retry_after); } else /* convert date to number of seconds into the future */ retry_after = date - time(NULL); data->info.retry_after = retry_after; /* store it */ } else if(!k->http_bodyless && checkprefix("Content-Range:", k->p)) { /* Content-Range: bytes [num]- Content-Range: bytes: [num]- Content-Range: [num]- Content-Range: [asterisk]/[total] The second format was added since Sun's webserver |
︙ | ︙ |
Changes to jni/curl/lib/http.h.
︙ | ︙ | |||
71 72 73 74 75 76 77 | CURLcode Curl_add_timecondition(const struct connectdata *conn, Curl_send_buffer *buf); CURLcode Curl_add_custom_headers(struct connectdata *conn, bool is_connect, Curl_send_buffer *req_buffer); CURLcode Curl_http_compile_trailers(struct curl_slist *trailers, | | | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | CURLcode Curl_add_timecondition(const struct connectdata *conn, Curl_send_buffer *buf); CURLcode Curl_add_custom_headers(struct connectdata *conn, bool is_connect, Curl_send_buffer *req_buffer); CURLcode Curl_http_compile_trailers(struct curl_slist *trailers, Curl_send_buffer **buffer, struct Curl_easy *handle); /* protocol-specific functions set up to be called by the main engine */ CURLcode Curl_http(struct connectdata *conn, bool *done); CURLcode Curl_http_done(struct connectdata *, CURLcode, bool premature); CURLcode Curl_http_connect(struct connectdata *conn, bool *done); |
︙ | ︙ | |||
121 122 123 124 125 126 127 128 129 130 131 132 133 134 | * */ #ifndef EXPECT_100_THRESHOLD #define EXPECT_100_THRESHOLD 1024 #endif #endif /* CURL_DISABLE_HTTP */ /**************************************************************************** * HTTP unique setup ***************************************************************************/ struct HTTP { curl_mimepart *sendit; curl_off_t postsize; /* off_t to handle large file sizes */ | > > > > | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | * */ #ifndef EXPECT_100_THRESHOLD #define EXPECT_100_THRESHOLD 1024 #endif #endif /* CURL_DISABLE_HTTP */ #ifdef USE_NGHTTP3 struct h3out; /* see ngtcp2 */ #endif /**************************************************************************** * HTTP unique setup ***************************************************************************/ struct HTTP { curl_mimepart *sendit; curl_off_t postsize; /* off_t to handle large file sizes */ |
︙ | ︙ | |||
168 169 170 171 172 173 174 | Curl_send_buffer *header_recvbuf; size_t nread_header_recvbuf; /* number of bytes in header_recvbuf fed into upper layer */ Curl_send_buffer *trailer_recvbuf; int status_code; /* HTTP status code */ const uint8_t *pausedata; /* pointer to data received in on_data_chunk */ size_t pauselen; /* the number of bytes left in data */ | < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | Curl_send_buffer *header_recvbuf; size_t nread_header_recvbuf; /* number of bytes in header_recvbuf fed into upper layer */ Curl_send_buffer *trailer_recvbuf; int status_code; /* HTTP status code */ const uint8_t *pausedata; /* pointer to data received in on_data_chunk */ size_t pauselen; /* the number of bytes left in data */ bool close_handled; /* TRUE if stream closure is handled by libcurl */ char **push_headers; /* allocated array */ size_t push_headers_used; /* number of entries filled in */ size_t push_headers_alloc; /* number of entries allocated */ #endif #if defined(USE_NGHTTP2) || defined(USE_NGHTTP3) bool closed; /* TRUE on HTTP2 stream close */ char *mem; /* points to a buffer in memory to store received data */ size_t len; /* size of the buffer 'mem' points to */ size_t memlen; /* size of data copied to mem */ #endif #if defined(USE_NGHTTP2) || defined(ENABLE_QUIC) /* fields used by both HTTP/2 and HTTP/3 */ const uint8_t *upload_mem; /* points to a buffer to read from */ size_t upload_len; /* size of the buffer 'upload_mem' points to */ curl_off_t upload_left; /* number of bytes left to upload */ #endif #ifdef ENABLE_QUIC /*********** for HTTP/3 we store stream-local data here *************/ int64_t stream3_id; /* stream we are interested in */ bool firstbody; /* FALSE until body arrives */ bool h3req; /* FALSE until request is issued */ bool upload_done; #endif #ifdef USE_NGHTTP3 struct h3out *h3out; /* per-stream buffers for upload */ #endif }; #ifdef USE_NGHTTP2 /* h2 settings for this connection */ struct h2settings { uint32_t max_concurrent_streams; bool enable_push; |
︙ | ︙ |
Changes to jni/curl/lib/http2.c.
︙ | ︙ | |||
96 97 98 99 100 101 102 | */ void Curl_http2_init_userset(struct UserDefined *set) { set->stream_weight = NGHTTP2_DEFAULT_WEIGHT; } static int http2_perform_getsock(const struct connectdata *conn, | | < < < < < | < < | | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | */ void Curl_http2_init_userset(struct UserDefined *set) { set->stream_weight = NGHTTP2_DEFAULT_WEIGHT; } static int http2_perform_getsock(const struct connectdata *conn, curl_socket_t *sock) { const struct http_conn *c = &conn->proto.httpc; struct SingleRequest *k = &conn->data->req; int bitmap = GETSOCK_BLANK; sock[0] = conn->sock[FIRSTSOCKET]; /* in a HTTP/2 connection we can basically always get a frame so we should always be ready for one */ bitmap |= GETSOCK_READSOCK(FIRSTSOCKET); /* we're still uploading or the HTTP/2 layer wants to send data */ if(((k->keepon & (KEEP_SEND|KEEP_SEND_PAUSE)) == KEEP_SEND) || nghttp2_session_want_write(c->h2)) bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET); return bitmap; } static int http2_getsock(struct connectdata *conn, curl_socket_t *socks) { return http2_perform_getsock(conn, socks); } /* * http2_stream_free() free HTTP2 stream related data */ static void http2_stream_free(struct HTTP *http) { |
︙ | ︙ | |||
236 237 238 239 240 241 242 | if(checks_to_perform & CONNCHECK_ISDEAD) { if(http2_connisdead(check)) ret_val |= CONNRESULT_DEAD; } if(checks_to_perform & CONNCHECK_KEEPALIVE) { struct curltime now = Curl_now(); | | | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | if(checks_to_perform & CONNCHECK_ISDEAD) { if(http2_connisdead(check)) ret_val |= CONNRESULT_DEAD; } if(checks_to_perform & CONNCHECK_KEEPALIVE) { struct curltime now = Curl_now(); timediff_t elapsed = Curl_timediff(now, check->keepalive); if(elapsed > check->upkeep_interval_ms) { /* Perform an HTTP/2 PING */ rc = nghttp2_submit_ping(c->h2, 0, ZERO_NULL); if(!rc) { /* Successfully added a PING frame to the session. Need to flag this so the frame is sent. */ |
︙ | ︙ | |||
1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 | struct HTTP *stream = data->req.protop; (void)sockindex; /* we always do HTTP2 on sockindex 0 */ if(should_close_session(httpc)) { H2BUGF(infof(data, "http2_recv: nothing to do in this session\n")); *err = CURLE_HTTP2; return -1; } /* Nullify here because we call nghttp2_session_send() and they might refer to the old buffer. */ stream->upload_mem = NULL; | > > > > > | 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 | struct HTTP *stream = data->req.protop; (void)sockindex; /* we always do HTTP2 on sockindex 0 */ if(should_close_session(httpc)) { H2BUGF(infof(data, "http2_recv: nothing to do in this session\n")); if(conn->bits.close) { /* already marked for closure, return OK and we're done */ *err = CURLE_OK; return 0; } *err = CURLE_HTTP2; return -1; } /* Nullify here because we call nghttp2_session_send() and they might refer to the old buffer. */ stream->upload_mem = NULL; |
︙ | ︙ | |||
1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 | already so we need it called again asap */ H2BUGF(infof(data, "Data returned for PAUSED stream %u\n", stream->stream_id)); } else if(!stream->closed) { drained_transfer(data, httpc); } return retlen; } /* If this stream is closed, return 0 to signal the http routine to close the connection */ if(stream->closed) return 0; | > > > | 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 | already so we need it called again asap */ H2BUGF(infof(data, "Data returned for PAUSED stream %u\n", stream->stream_id)); } else if(!stream->closed) { drained_transfer(data, httpc); } else /* this stream is closed, trigger a another read ASAP to detect that */ Curl_expire(data, 0, EXPIRE_RUN_NOW); return retlen; } /* If this stream is closed, return 0 to signal the http routine to close the connection */ if(stream->closed) return 0; |
︙ | ︙ |
Changes to jni/curl/lib/http_negotiate.c.
︙ | ︙ | |||
144 145 146 147 148 149 150 | if(neg_ctx->noauthpersist && *state == GSS_AUTHSUCC) { infof(conn->data, "Curl_output_negotiate, " "no persistent authentication: cleanup existing context"); Curl_http_auth_cleanup_negotiate(conn); } if(!neg_ctx->context) { result = Curl_input_negotiate(conn, proxy, "Negotiate"); | | | | 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | if(neg_ctx->noauthpersist && *state == GSS_AUTHSUCC) { infof(conn->data, "Curl_output_negotiate, " "no persistent authentication: cleanup existing context"); Curl_http_auth_cleanup_negotiate(conn); } if(!neg_ctx->context) { result = Curl_input_negotiate(conn, proxy, "Negotiate"); if(result == CURLE_AUTH_ERROR) { /* negotiate auth failed, let's continue unauthenticated to stay * compatible with the behavior before curl-7_64_0-158-g6c6035532 */ authp->done = TRUE; return CURLE_OK; } else if(result) return result; } result = Curl_auth_create_spnego_message(conn->data, |
︙ | ︙ |
Changes to jni/curl/lib/imap.c.
︙ | ︙ | |||
91 92 93 94 95 96 97 | static CURLcode imap_regular_transfer(struct connectdata *conn, bool *done); static CURLcode imap_do(struct connectdata *conn, bool *done); static CURLcode imap_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode imap_connect(struct connectdata *conn, bool *done); static CURLcode imap_disconnect(struct connectdata *conn, bool dead); static CURLcode imap_multi_statemach(struct connectdata *conn, bool *done); | | < | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | static CURLcode imap_regular_transfer(struct connectdata *conn, bool *done); static CURLcode imap_do(struct connectdata *conn, bool *done); static CURLcode imap_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode imap_connect(struct connectdata *conn, bool *done); static CURLcode imap_disconnect(struct connectdata *conn, bool dead); static CURLcode imap_multi_statemach(struct connectdata *conn, bool *done); static int imap_getsock(struct connectdata *conn, curl_socket_t *socks); static CURLcode imap_doing(struct connectdata *conn, bool *dophase_done); static CURLcode imap_setup_connection(struct connectdata *conn); static char *imap_atom(const char *str, bool escape_only); static CURLcode imap_sendf(struct connectdata *conn, const char *fmt, ...); static CURLcode imap_parse_url_options(struct connectdata *conn); static CURLcode imap_parse_url_path(struct connectdata *conn); static CURLcode imap_parse_custom_request(struct connectdata *conn); |
︙ | ︙ | |||
1388 1389 1390 1391 1392 1393 1394 | if(!imap) result = CURLE_OUT_OF_MEMORY; return result; } /* For the IMAP "protocol connect" and "doing" phases only */ | | < | | 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 | if(!imap) result = CURLE_OUT_OF_MEMORY; return result; } /* For the IMAP "protocol connect" and "doing" phases only */ static int imap_getsock(struct connectdata *conn, curl_socket_t *socks) { return Curl_pp_getsock(&conn->proto.imapc.pp, socks); } /*********************************************************************** * * imap_connect() * * This function should do everything that is to be considered a part of the |
︙ | ︙ |
Changes to jni/curl/lib/libcurl.plist.
︙ | ︙ | |||
11 12 13 14 15 16 17 | <key>CFBundleExecutable</key> <string>curl</string> <key>CFBundleIdentifier</key> <string>se.haxx.curl.libcurl</string> <key>CFBundleVersion</key> | | | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <key>CFBundleExecutable</key> <string>curl</string> <key>CFBundleIdentifier</key> <string>se.haxx.curl.libcurl</string> <key>CFBundleVersion</key> <string>7.66.0</string> <key>CFBundleName</key> <string>libcurl</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleShortVersionString</key> <string>libcurl 7.66.0</string> <key>CFBundleGetInfoString</key> <string>libcurl.plist 7.66.0</string> </dict> </plist> |
Changes to jni/curl/lib/md4.c.
|
| > > > > > > > > > > > > > > > > > > > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #if !defined(CURL_DISABLE_CRYPTO_AUTH) #include "curl_md4.h" #include "warnless.h" #ifdef USE_OPENSSL #include <openssl/opensslconf.h> #endif #ifdef USE_MBEDTLS #include <mbedtls/config.h> #endif #if defined(USE_GNUTLS_NETTLE) #include <nettle/md4.h> #include "curl_memory.h" /* The last #include file should be: */ #include "memdebug.h" typedef struct md4_ctx MD4_CTX; static void MD4_Init(MD4_CTX *ctx) { md4_init(ctx); } static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) { md4_update(ctx, size, data); } static void MD4_Final(unsigned char *result, MD4_CTX *ctx) { md4_digest(ctx, MD4_DIGEST_SIZE, result); } #elif defined(USE_GNUTLS) #include <gcrypt.h> #include "curl_memory.h" /* The last #include file should be: */ #include "memdebug.h" typedef struct gcry_md_hd_t MD4_CTX; static void MD4_Init(MD4_CTX *ctx) { gcry_md_open(ctx, GCRY_MD_MD4, 0); } static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) { gcry_md_write(*ctx, data, size); } static void MD4_Final(unsigned char *result, MD4_CTX *ctx) { memcpy(result, gcry_md_read(ctx, 0), MD4_DIGEST_LENGTH); gcry_md_close(ctx); } #elif defined(USE_OPENSSL) && !defined(OPENSSL_NO_MD4) /* When OpenSSL is available we use the MD4-functions from OpenSSL */ #include <openssl/md4.h> #elif defined(USE_SECTRANSP) #include <CommonCrypto/CommonDigest.h> #include "curl_memory.h" /* The last #include file should be: */ #include "memdebug.h" typedef struct { void *data; unsigned long size; } MD4_CTX; static void MD4_Init(MD4_CTX *ctx) { ctx->data = NULL; ctx->size = 0; } static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) { if(ctx->data == NULL) { ctx->data = malloc(size); if(ctx->data != NULL) { memcpy(ctx->data, data, size); ctx->size = size; } } } static void MD4_Final(unsigned char *result, MD4_CTX *ctx) { if(ctx->data != NULL) { (void)CC_MD4(ctx->data, (CC_LONG) ctx->size, result); Curl_safefree(ctx->data); ctx->size = 0; } } #elif defined(USE_WIN32_CRYPTO) #include <wincrypt.h> #include "curl_memory.h" /* The last #include file should be: */ #include "memdebug.h" typedef struct { HCRYPTPROV hCryptProv; HCRYPTHASH hHash; } MD4_CTX; static void MD4_Init(MD4_CTX *ctx) { ctx->hCryptProv = 0; ctx->hHash = 0; if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { CryptCreateHash(ctx->hCryptProv, CALG_MD4, 0, 0, &ctx->hHash); } } static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) { CryptHashData(ctx->hHash, data, (unsigned int) size, 0); } static void MD4_Final(unsigned char *result, MD4_CTX *ctx) { unsigned long length = 0; CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0); if(length == MD4_DIGEST_LENGTH) CryptGetHashParam(ctx->hHash, HP_HASHVAL, result, &length, 0); if(ctx->hHash) CryptDestroyHash(ctx->hHash); if(ctx->hCryptProv) CryptReleaseContext(ctx->hCryptProv, 0); } #elif(defined(USE_MBEDTLS) && defined(MBEDTLS_MD4_C)) #include <mbedtls/md4.h> #include "curl_memory.h" /* The last #include file should be: */ #include "memdebug.h" typedef struct { void *data; unsigned long size; } MD4_CTX; static void MD4_Init(MD4_CTX *ctx) { ctx->data = NULL; ctx->size = 0; } static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) { if(ctx->data == NULL) { ctx->data = malloc(size); if(ctx->data != NULL) { memcpy(ctx->data, data, size); ctx->size = size; } } } static void MD4_Final(unsigned char *result, MD4_CTX *ctx) { if(ctx->data != NULL) { mbedtls_md4(ctx->data, ctx->size, result); Curl_safefree(ctx->data); ctx->size = 0; } } #else /* When no other crypto library is available, or the crypto library doesn't * support MD4, we use this code segment this implementation of it * * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. * MD4 Message-Digest Algorithm (RFC 1320). * * Homepage: https://openwall.info/wiki/people/solar/software/public-domain-source-code/md4 * * Author: |
︙ | ︙ | |||
32 33 34 35 36 37 38 | * * The primary goals of this implementation are portability and ease of use. * It is meant to be fast, but not as fast as possible. Some known * optimizations are not included to reduce source code size and avoid * compile-time configuration. */ | < < < < < < < < < < < < < < < < < < < < | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | * * The primary goals of this implementation are portability and ease of use. * It is meant to be fast, but not as fast as possible. Some known * optimizations are not included to reduce source code size and avoid * compile-time configuration. */ #include <string.h> /* Any 32-bit or wider unsigned integer data type will do */ typedef unsigned int MD4_u32plus; typedef struct { |
︙ | ︙ | |||
301 302 303 304 305 306 307 | result[13] = curlx_ultouc((ctx->d >> 8)&0xff); result[14] = curlx_ultouc((ctx->d >> 16)&0xff); result[15] = curlx_ultouc(ctx->d >> 24); memset(ctx, 0, sizeof(*ctx)); } | | | < < | 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 | result[13] = curlx_ultouc((ctx->d >> 8)&0xff); result[14] = curlx_ultouc((ctx->d >> 16)&0xff); result[15] = curlx_ultouc(ctx->d >> 24); memset(ctx, 0, sizeof(*ctx)); } #endif /* CRYPTO LIBS */ void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len) { MD4_CTX ctx; MD4_Init(&ctx); MD4_Update(&ctx, input, curlx_uztoui(len)); MD4_Final(output, &ctx); } #endif /* CURL_DISABLE_CRYPTO_AUTH */ |
Changes to jni/curl/lib/multi.c.
︙ | ︙ | |||
814 815 816 817 818 819 820 | DEBUGASSERT(conn); data->conn = conn; Curl_llist_insert_next(&conn->easyq, conn->easyq.tail, data, &data->conn_queue); } static int waitconnect_getsock(struct connectdata *conn, | | < < < < | | > > > > > > | < < < < | < | > > > > > > > > > > > > > > > > > > > > | > | < < | 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 | DEBUGASSERT(conn); data->conn = conn; Curl_llist_insert_next(&conn->easyq, conn->easyq.tail, data, &data->conn_queue); } static int waitconnect_getsock(struct connectdata *conn, curl_socket_t *sock) { int i; int s = 0; int rc = 0; #ifdef USE_SSL if(CONNECT_FIRSTSOCKET_PROXY_SSL()) return Curl_ssl_getsock(conn, sock); #endif for(i = 0; i<2; i++) { if(conn->tempsock[i] != CURL_SOCKET_BAD) { sock[s] = conn->tempsock[i]; rc |= GETSOCK_WRITESOCK(s); #ifdef ENABLE_QUIC if(conn->transport == TRNSPRT_QUIC) /* when connecting QUIC, we want to read the socket too */ rc |= GETSOCK_READSOCK(s); #endif s++; } } return rc; } static int waitproxyconnect_getsock(struct connectdata *conn, curl_socket_t *sock) { sock[0] = conn->sock[FIRSTSOCKET]; /* when we've sent a CONNECT to a proxy, we should rather wait for the socket to become readable to be able to get the response headers */ if(conn->connect_state) return GETSOCK_READSOCK(0); return GETSOCK_WRITESOCK(0); } static int domore_getsock(struct connectdata *conn, curl_socket_t *socks) { if(conn && conn->handler->domore_getsock) return conn->handler->domore_getsock(conn, socks); return GETSOCK_BLANK; } static int doing_getsock(struct connectdata *conn, curl_socket_t *socks) { if(conn && conn->handler->doing_getsock) return conn->handler->doing_getsock(conn, socks); return GETSOCK_BLANK; } static int protocol_getsock(struct connectdata *conn, curl_socket_t *socks) { if(conn->handler->proto_getsock) return conn->handler->proto_getsock(conn, socks); /* Backup getsock logic. Since there is a live socket in use, we must wait for it or it will be removed from watching when the multi_socket API is used. */ socks[0] = conn->sock[FIRSTSOCKET]; return GETSOCK_READSOCK(0) | GETSOCK_WRITESOCK(0); } /* returns bitmapped flags for this handle and its sockets. The 'socks[]' array contains MAX_SOCKSPEREASYHANDLE entries. */ static int multi_getsock(struct Curl_easy *data, curl_socket_t *socks) { /* The no connection case can happen when this is called from curl_multi_remove_handle() => singlesocket() => multi_getsock(). */ if(!data->conn) return 0; |
︙ | ︙ | |||
901 902 903 904 905 906 907 | case CURLM_STATE_LAST: /* this will get called with CURLM_STATE_COMPLETED when a handle is removed */ #endif return 0; case CURLM_STATE_WAITRESOLVE: | | | | | | | | | 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 | case CURLM_STATE_LAST: /* this will get called with CURLM_STATE_COMPLETED when a handle is removed */ #endif return 0; case CURLM_STATE_WAITRESOLVE: return Curl_resolv_getsock(data->conn, socks); case CURLM_STATE_PROTOCONNECT: case CURLM_STATE_SENDPROTOCONNECT: return protocol_getsock(data->conn, socks); case CURLM_STATE_DO: case CURLM_STATE_DOING: return doing_getsock(data->conn, socks); case CURLM_STATE_WAITPROXYCONNECT: return waitproxyconnect_getsock(data->conn, socks); case CURLM_STATE_WAITCONNECT: return waitconnect_getsock(data->conn, socks); case CURLM_STATE_DO_MORE: return domore_getsock(data->conn, socks); case CURLM_STATE_DO_DONE: /* since is set after DO is completed, we switch to waiting for the same as the *PERFORM states */ case CURLM_STATE_PERFORM: return Curl_single_getsock(data->conn, socks); } } CURLMcode curl_multi_fdset(struct Curl_multi *multi, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd) |
︙ | ︙ | |||
950 951 952 953 954 955 956 | return CURLM_BAD_HANDLE; if(multi->in_callback) return CURLM_RECURSIVE_API_CALL; data = multi->easyp; while(data) { | | | 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 | return CURLM_BAD_HANDLE; if(multi->in_callback) return CURLM_RECURSIVE_API_CALL; data = multi->easyp; while(data) { int bitmap = multi_getsock(data, sockbunch); for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) { curl_socket_t s = CURL_SOCKET_BAD; if((bitmap & GETSOCK_READSOCK(i)) && VALID_SOCK((sockbunch[i]))) { FD_SET(sockbunch[i], read_fd_set); s = sockbunch[i]; |
︙ | ︙ | |||
980 981 982 983 984 985 986 | *max_fd = this_max_fd; return CURLM_OK; } #define NUM_POLLS_ON_STACK 10 | | | | | | | < < < | | 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 | *max_fd = this_max_fd; return CURLM_OK; } #define NUM_POLLS_ON_STACK 10 static CURLMcode Curl_multi_wait(struct Curl_multi *multi, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret, bool extrawait) /* when no socket, wait */ { struct Curl_easy *data; curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE]; int bitmap; unsigned int i; unsigned int nfds = 0; unsigned int curlfds; bool ufds_malloc = FALSE; long timeout_internal; int retcode = 0; struct pollfd a_few_on_stack[NUM_POLLS_ON_STACK]; struct pollfd *ufds = &a_few_on_stack[0]; if(!GOOD_MULTI_HANDLE(multi)) return CURLM_BAD_HANDLE; if(multi->in_callback) return CURLM_RECURSIVE_API_CALL; /* Count up how many fds we have from the multi handle */ data = multi->easyp; while(data) { bitmap = multi_getsock(data, sockbunch); for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) { curl_socket_t s = CURL_SOCKET_BAD; if(bitmap & GETSOCK_READSOCK(i)) { ++nfds; s = sockbunch[i]; |
︙ | ︙ | |||
1061 1062 1063 1064 1065 1066 1067 | /* only do the second loop if we found descriptors in the first stage run above */ if(curlfds) { /* Add the curl handles to our pollfds first */ data = multi->easyp; while(data) { | | | 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 | /* only do the second loop if we found descriptors in the first stage run above */ if(curlfds) { /* Add the curl handles to our pollfds first */ data = multi->easyp; while(data) { bitmap = multi_getsock(data, sockbunch); for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) { curl_socket_t s = CURL_SOCKET_BAD; if(bitmap & GETSOCK_READSOCK(i)) { ufds[nfds].fd = sockbunch[i]; ufds[nfds].events = POLLIN; |
︙ | ︙ | |||
1130 1131 1132 1133 1134 1135 1136 | } } if(ufds_malloc) free(ufds); if(ret) *ret = retcode; | | > > > | > > > > > > > | > > > > > > > > > | 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 | } } if(ufds_malloc) free(ufds); if(ret) *ret = retcode; if(!extrawait || extra_fds || curlfds) /* if any socket was checked */ ; else { long sleep_ms = 0; /* Avoid busy-looping when there's nothing particular to wait for */ if(!curl_multi_timeout(multi, &sleep_ms) && sleep_ms) { if(sleep_ms > timeout_ms) sleep_ms = timeout_ms; Curl_wait_ms((int)sleep_ms); } } return CURLM_OK; } CURLMcode curl_multi_wait(struct Curl_multi *multi, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret) { return Curl_multi_wait(multi, extra_fds, extra_nfds, timeout_ms, ret, FALSE); } CURLMcode curl_multi_poll(struct Curl_multi *multi, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret) { return Curl_multi_wait(multi, extra_fds, extra_nfds, timeout_ms, ret, TRUE); } /* * multi_ischanged() is called * * Returns TRUE/FALSE whether the state is changed to trigger a CONNECT_PEND * => CONNECT action. |
︙ | ︙ | |||
1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 | if(!result && (*complete == 1)) /* do_complete must be called after the protocol-specific DO function */ do_complete(conn); return result; } static CURLMcode multi_runsingle(struct Curl_multi *multi, struct curltime now, struct Curl_easy *data) { struct Curl_message *msg = NULL; bool connected; bool async; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 | if(!result && (*complete == 1)) /* do_complete must be called after the protocol-specific DO function */ do_complete(conn); return result; } /* * We are doing protocol-specific connecting and this is being called over and * over from the multi interface until the connection phase is done on * protocol layer. */ static CURLcode protocol_connecting(struct connectdata *conn, bool *done) { CURLcode result = CURLE_OK; if(conn && conn->handler->connecting) { *done = FALSE; result = conn->handler->connecting(conn, done); } else *done = TRUE; return result; } /* * We are DOING this is being called over and over from the multi interface * until the DOING phase is done on protocol layer. */ static CURLcode protocol_doing(struct connectdata *conn, bool *done) { CURLcode result = CURLE_OK; if(conn && conn->handler->doing) { *done = FALSE; result = conn->handler->doing(conn, done); } else *done = TRUE; return result; } /* * We have discovered that the TCP connection has been successful, we can now * proceed with some action. * */ static CURLcode protocol_connect(struct connectdata *conn, bool *protocol_done) { CURLcode result = CURLE_OK; DEBUGASSERT(conn); DEBUGASSERT(protocol_done); *protocol_done = FALSE; if(conn->bits.tcpconnect[FIRSTSOCKET] && conn->bits.protoconnstart) { /* We already are connected, get back. This may happen when the connect worked fine in the first call, like when we connect to a local server or proxy. Note that we don't know if the protocol is actually done. Unless this protocol doesn't have any protocol-connect callback, as then we know we're done. */ if(!conn->handler->connecting) *protocol_done = TRUE; return CURLE_OK; } if(!conn->bits.protoconnstart) { result = Curl_proxy_connect(conn, FIRSTSOCKET); if(result) return result; if(CONNECT_FIRSTSOCKET_PROXY_SSL()) /* wait for HTTPS proxy SSL initialization to complete */ return CURLE_OK; if(conn->bits.tunnel_proxy && conn->bits.httpproxy && Curl_connect_ongoing(conn)) /* when using an HTTP tunnel proxy, await complete tunnel establishment before proceeding further. Return CURLE_OK so we'll be called again */ return CURLE_OK; if(conn->handler->connect_it) { /* is there a protocol-specific connect() procedure? */ /* Call the protocol-specific connect function */ result = conn->handler->connect_it(conn, protocol_done); } else *protocol_done = TRUE; /* it has started, possibly even completed but that knowledge isn't stored in this bit! */ if(!result) conn->bits.protoconnstart = TRUE; } return result; /* pass back status */ } static CURLMcode multi_runsingle(struct Curl_multi *multi, struct curltime now, struct Curl_easy *data) { struct Curl_message *msg = NULL; bool connected; bool async; bool protocol_connected = FALSE; bool dophase_done = FALSE; bool done = FALSE; CURLMcode rc; CURLcode result = CURLE_OK; timediff_t timeout_ms; timediff_t recv_timeout_ms; timediff_t send_timeout_ms; |
︙ | ︙ | |||
1369 1370 1371 1372 1373 1374 1375 | Curl_pgrsTime(data, TIMER_STARTSINGLE); if(data->set.timeout) Curl_expire(data, data->set.timeout, EXPIRE_TIMEOUT); if(data->set.connecttimeout) Curl_expire(data, data->set.connecttimeout, EXPIRE_CONNECTTIMEOUT); | | | 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 | Curl_pgrsTime(data, TIMER_STARTSINGLE); if(data->set.timeout) Curl_expire(data, data->set.timeout, EXPIRE_TIMEOUT); if(data->set.connecttimeout) Curl_expire(data, data->set.connecttimeout, EXPIRE_CONNECTTIMEOUT); result = Curl_connect(data, &async, &protocol_connected); if(CURLE_NO_CONNECTION_AVAILABLE == result) { /* There was no connection available. We will go to the pending state and wait for an available connection. */ multistate(data, CURLM_STATE_CONNECT_PEND); /* add this handle to the list of connect-pending handles */ Curl_llist_insert_next(&multi->pending, multi->pending.tail, data, |
︙ | ︙ | |||
1397 1398 1399 1400 1401 1402 1403 | multistate(data, CURLM_STATE_WAITRESOLVE); else { /* after the connect has been sent off, go WAITCONNECT unless the protocol connect is already done and we can go directly to WAITDO or DO! */ rc = CURLM_CALL_MULTI_PERFORM; | | | 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 | multistate(data, CURLM_STATE_WAITRESOLVE); else { /* after the connect has been sent off, go WAITCONNECT unless the protocol connect is already done and we can go directly to WAITDO or DO! */ rc = CURLM_CALL_MULTI_PERFORM; if(protocol_connected) multistate(data, CURLM_STATE_DO); else { #ifndef CURL_DISABLE_HTTP if(Curl_connect_ongoing(data->conn)) multistate(data, CURLM_STATE_WAITPROXYCONNECT); else #endif |
︙ | ︙ | |||
1452 1453 1454 1455 1456 1457 1458 | that new sockets have been opened in an attempt to contact another resolver. */ singlesocket(multi, data); if(dns) { /* Perform the next step in the connection phase, and then move on to the WAITCONNECT state */ | | | | 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 | that new sockets have been opened in an attempt to contact another resolver. */ singlesocket(multi, data); if(dns) { /* Perform the next step in the connection phase, and then move on to the WAITCONNECT state */ result = Curl_once_resolved(data->conn, &protocol_connected); if(result) /* if Curl_once_resolved() returns failure, the connection struct is already freed and gone */ data->conn = NULL; /* no more connection */ else { /* call again please so that we get the next socket setup */ rc = CURLM_CALL_MULTI_PERFORM; if(protocol_connected) multistate(data, CURLM_STATE_DO); else { #ifndef CURL_DISABLE_HTTP if(Curl_connect_ongoing(data->conn)) multistate(data, CURLM_STATE_WAITPROXYCONNECT); else #endif |
︙ | ︙ | |||
1486 1487 1488 1489 1490 1491 1492 | } break; #ifndef CURL_DISABLE_HTTP case CURLM_STATE_WAITPROXYCONNECT: /* this is HTTP-specific, but sending CONNECT to a proxy is HTTP... */ DEBUGASSERT(data->conn); | | | 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 | } break; #ifndef CURL_DISABLE_HTTP case CURLM_STATE_WAITPROXYCONNECT: /* this is HTTP-specific, but sending CONNECT to a proxy is HTTP... */ DEBUGASSERT(data->conn); result = Curl_http_connect(data->conn, &protocol_connected); if(data->conn->bits.proxy_connect_closed) { rc = CURLM_CALL_MULTI_PERFORM; /* connect back to proxy again */ result = CURLE_OK; multi_done(data, CURLE_OK, FALSE); multistate(data, CURLM_STATE_CONNECT); |
︙ | ︙ | |||
1537 1538 1539 1540 1541 1542 1543 | multi_done(data, result, TRUE); stream_error = TRUE; break; } break; case CURLM_STATE_SENDPROTOCONNECT: | | | | | | 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 | multi_done(data, result, TRUE); stream_error = TRUE; break; } break; case CURLM_STATE_SENDPROTOCONNECT: result = protocol_connect(data->conn, &protocol_connected); if(!result && !protocol_connected) /* switch to waiting state */ multistate(data, CURLM_STATE_PROTOCONNECT); else if(!result) { /* protocol connect has completed, go WAITDO or DO */ multistate(data, CURLM_STATE_DO); rc = CURLM_CALL_MULTI_PERFORM; } else if(result) { /* failure detected */ Curl_posttransfer(data); multi_done(data, result, TRUE); stream_error = TRUE; } break; case CURLM_STATE_PROTOCONNECT: /* protocol-specific connect phase */ result = protocol_connecting(data->conn, &protocol_connected); if(!result && protocol_connected) { /* after the connect has completed, go WAITDO or DO */ multistate(data, CURLM_STATE_DO); rc = CURLM_CALL_MULTI_PERFORM; } else if(result) { /* failure detected */ Curl_posttransfer(data); |
︙ | ︙ | |||
1679 1680 1681 1682 1683 1684 1685 | } } break; case CURLM_STATE_DOING: /* we continue DOING until the DO phase is complete */ DEBUGASSERT(data->conn); | | < | 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 | } } break; case CURLM_STATE_DOING: /* we continue DOING until the DO phase is complete */ DEBUGASSERT(data->conn); result = protocol_doing(data->conn, &dophase_done); if(!result) { if(dophase_done) { /* after DO, go DO_DONE or DO_MORE */ multistate(data, data->conn->bits.do_more? CURLM_STATE_DO_MORE: CURLM_STATE_DO_DONE); rc = CURLM_CALL_MULTI_PERFORM; |
︙ | ︙ | |||
2008 2009 2010 2011 2012 2013 2014 | /* Check if we can move pending requests to send pipe */ process_pending_handles(multi); /* connection */ if(data->conn) { if(stream_error) { /* Don't attempt to send data over a connection that timed out */ bool dead_connection = result == CURLE_OPERATION_TIMEDOUT; | | < > > > | 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 | /* Check if we can move pending requests to send pipe */ process_pending_handles(multi); /* connection */ if(data->conn) { if(stream_error) { /* Don't attempt to send data over a connection that timed out */ bool dead_connection = result == CURLE_OPERATION_TIMEDOUT; struct connectdata *conn = data->conn; /* This is where we make sure that the conn pointer is reset. We don't have to do this in every case block above where a failure is detected */ detach_connnection(data); /* disconnect properly */ Curl_disconnect(data, conn, dead_connection); } } else if(data->mstate == CURLM_STATE_CONNECT) { /* Curl_connect() failed */ (void)Curl_posttransfer(data); } |
︙ | ︙ | |||
2230 2231 2232 2233 2234 2235 2236 | int actions[MAX_SOCKSPEREASYHANDLE]; for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) socks[i] = CURL_SOCKET_BAD; /* Fill in the 'current' struct with the state as it is now: what sockets to supervise and for what actions */ | | | 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 | int actions[MAX_SOCKSPEREASYHANDLE]; for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) socks[i] = CURL_SOCKET_BAD; /* Fill in the 'current' struct with the state as it is now: what sockets to supervise and for what actions */ curraction = multi_getsock(data, socks); /* We have 0 .. N sockets already and we get to know about the 0 .. M sockets we should have from now on. Detect the differences, remove no longer supervised ones and add new ones */ /* walk over the sockets we got right now */ for(i = 0; (i< MAX_SOCKSPEREASYHANDLE) && |
︙ | ︙ | |||
2842 2843 2844 2845 2846 2847 2848 | * this'-time for the transfer, to be extracted by curl_multi_timeout() * * The timeout will be added to a queue of timeouts if it defines a moment in * time that is later than the current head of queue. * * Expire replaces a former timeout using the same id if already set. */ | | | | 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 | * this'-time for the transfer, to be extracted by curl_multi_timeout() * * The timeout will be added to a queue of timeouts if it defines a moment in * time that is later than the current head of queue. * * Expire replaces a former timeout using the same id if already set. */ void Curl_expire(struct Curl_easy *data, timediff_t milli, expire_id id) { struct Curl_multi *multi = data->multi; struct curltime *nowp = &data->state.expiretime; struct curltime set; /* this is only interesting while there is still an associated multi struct remaining! */ if(!multi) return; DEBUGASSERT(id < EXPIRE_LAST); set = Curl_now(); set.tv_sec += (time_t)(milli/1000); /* might be a 64 to 32 bit conversion */ set.tv_usec += (unsigned int)(milli%1000)*1000; if(set.tv_usec >= 1000000) { set.tv_sec++; set.tv_usec -= 1000000; } |
︙ | ︙ |
Changes to jni/curl/lib/multiif.h.
︙ | ︙ | |||
23 24 25 26 27 28 29 | ***************************************************************************/ /* * Prototypes for library-wide functions provided by multi.c */ void Curl_updatesocket(struct Curl_easy *data); | | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ***************************************************************************/ /* * Prototypes for library-wide functions provided by multi.c */ void Curl_updatesocket(struct Curl_easy *data); void Curl_expire(struct Curl_easy *data, timediff_t milli, expire_id); void Curl_expire_clear(struct Curl_easy *data); void Curl_expire_done(struct Curl_easy *data, expire_id id); void Curl_update_timer(struct Curl_multi *multi); void Curl_attach_connnection(struct Curl_easy *data, struct connectdata *conn); bool Curl_multiplex_wanted(const struct Curl_multi *multi); void Curl_set_in_callback(struct Curl_easy *data, bool value); |
︙ | ︙ | |||
85 86 87 88 89 90 91 | /* * Add a handle and move it into PERFORM state at once. For pushed streams. */ CURLMcode Curl_multi_add_perform(struct Curl_multi *multi, struct Curl_easy *data, struct connectdata *conn); | < < < < < < < | 85 86 87 88 89 90 91 92 | /* * Add a handle and move it into PERFORM state at once. For pushed streams. */ CURLMcode Curl_multi_add_perform(struct Curl_multi *multi, struct Curl_easy *data, struct connectdata *conn); #endif /* HEADER_CURL_MULTIIF_H */ |
Changes to jni/curl/lib/netrc.c.
︙ | ︙ | |||
41 42 43 44 45 46 47 | enum host_lookup_state { NOTHING, HOSTFOUND, /* the 'machine' keyword was found */ HOSTVALID /* this is "our" machine! */ }; | < > | > | < > | | | | | | | | < < < | < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | enum host_lookup_state { NOTHING, HOSTFOUND, /* the 'machine' keyword was found */ HOSTVALID /* this is "our" machine! */ }; #define NETRC_FILE_MISSING 1 #define NETRC_FAILED -1 #define NETRC_SUCCESS 0 /* * Returns zero on success. */ static int parsenetrc(const char *host, char **loginp, char **passwordp, bool *login_changed, bool *password_changed, char *netrcfile) { FILE *file; int retcode = NETRC_FILE_MISSING; char *login = *loginp; char *password = *passwordp; bool specific_login = (login && *login != 0); bool login_alloc = FALSE; bool password_alloc = FALSE; enum host_lookup_state state = NOTHING; char state_login = 0; /* Found a login keyword */ char state_password = 0; /* Found a password keyword */ int state_our_login = FALSE; /* With specific_login, found *our* login name */ DEBUGASSERT(netrcfile); file = fopen(netrcfile, FOPEN_READTEXT); if(file) { char *tok; char *tok_buf; bool done = FALSE; char netrcbuffer[4096]; int netrcbuffsize = (int)sizeof(netrcbuffer); |
︙ | ︙ | |||
144 145 146 147 148 149 150 | delimiter that starts the stuff entered for this machine, after this we need to search for 'login' and 'password'. */ state = HOSTFOUND; } else if(strcasecompare("default", tok)) { state = HOSTVALID; | | | | | | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | delimiter that starts the stuff entered for this machine, after this we need to search for 'login' and 'password'. */ state = HOSTFOUND; } else if(strcasecompare("default", tok)) { state = HOSTVALID; retcode = NETRC_SUCCESS; /* we did find our host */ } break; case HOSTFOUND: if(strcasecompare(host, tok)) { /* and yes, this is our host! */ state = HOSTVALID; retcode = NETRC_SUCCESS; /* we did find our host */ } else /* not our host */ state = NOTHING; break; case HOSTVALID: /* we are now parsing sub-keywords concerning "our" host */ if(state_login) { if(specific_login) { state_our_login = strcasecompare(login, tok); } else if(!login || strcmp(login, tok)) { if(login_alloc) { free(login); login_alloc = FALSE; } login = strdup(tok); if(!login) { retcode = NETRC_FAILED; /* allocation failed */ goto out; } login_alloc = TRUE; } state_login = 0; } else if(state_password) { if((state_our_login || !specific_login) && (!password || strcmp(password, tok))) { if(password_alloc) { free(password); password_alloc = FALSE; } password = strdup(tok); if(!password) { retcode = NETRC_FAILED; /* allocation failed */ goto out; } password_alloc = TRUE; } state_password = 0; } else if(strcasecompare("login", tok)) |
︙ | ︙ | |||
211 212 213 214 215 216 217 218 219 220 221 222 223 224 | tok = strtok_r(NULL, " \t\n", &tok_buf); } /* while(tok) */ } /* while fgets() */ out: if(!retcode) { *login_changed = FALSE; *password_changed = FALSE; if(login_alloc) { if(*loginp) free(*loginp); *loginp = login; *login_changed = TRUE; | > | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | tok = strtok_r(NULL, " \t\n", &tok_buf); } /* while(tok) */ } /* while fgets() */ out: if(!retcode) { /* success */ *login_changed = FALSE; *password_changed = FALSE; if(login_alloc) { if(*loginp) free(*loginp); *loginp = login; *login_changed = TRUE; |
︙ | ︙ | |||
237 238 239 240 241 242 243 244 245 | free(password); } fclose(file); } return retcode; } #endif | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 | free(password); } fclose(file); } return retcode; } /* * @unittest: 1304 * * *loginp and *passwordp MUST be allocated if they aren't NULL when passed * in. */ int Curl_parsenetrc(const char *host, char **loginp, char **passwordp, bool *login_changed, bool *password_changed, char *netrcfile) { int retcode = 1; char *filealloc = NULL; if(!netrcfile) { char *home = NULL; char *homea = curl_getenv("HOME"); /* portable environment reader */ if(homea) { home = homea; #if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID) } else { struct passwd pw, *pw_res; char pwbuf[1024]; if(!getpwuid_r(geteuid(), &pw, pwbuf, sizeof(pwbuf), &pw_res) && pw_res) { home = pw.pw_dir; } #elif defined(HAVE_GETPWUID) && defined(HAVE_GETEUID) } else { struct passwd *pw; pw = getpwuid(geteuid()); if(pw) { home = pw->pw_dir; } #endif } if(!home) return retcode; /* no home directory found (or possibly out of memory) */ filealloc = curl_maprintf("%s%s.netrc", home, DIR_CHAR); if(!filealloc) { free(homea); return -1; } retcode = parsenetrc(host, loginp, passwordp, login_changed, password_changed, filealloc); free(filealloc); #ifdef WIN32 if(retcode == NETRC_FILE_MISSING) { /* fallback to the old-style "_netrc" file */ filealloc = curl_maprintf("%s%s_netrc", home, DIR_CHAR); if(!filealloc) { free(homea); return -1; } retcode = parsenetrc(host, loginp, passwordp, login_changed, password_changed, filealloc); free(filealloc); } #endif free(homea); } else retcode = parsenetrc(host, loginp, passwordp, login_changed, password_changed, netrcfile); return retcode; } #endif |
Changes to jni/curl/lib/openldap.c.
︙ | ︙ | |||
147 148 149 150 151 152 153 | "bad host or port", "bad or missing attributes", "bad or missing scope", "bad or missing filter", "bad or missing extensions" }; | | | | | | | | 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | "bad host or port", "bad or missing attributes", "bad or missing scope", "bad or missing filter", "bad or missing extensions" }; struct ldapconninfo { LDAP *ld; Curl_recv *recv; /* for stacking SSL handler */ Curl_send *send; int proto; int msgid; bool ssldone; bool sslinst; bool didbind; }; typedef struct ldapreqinfo { int msgid; int nument; } ldapreqinfo; static CURLcode ldap_setup_connection(struct connectdata *conn) { struct ldapconninfo *li; LDAPURLDesc *lud; struct Curl_easy *data = conn->data; int rc, proto; CURLcode status; rc = ldap_url_parse(data->change.url, &lud); if(rc != LDAP_URL_SUCCESS) { const char *msg = "url parsing problem"; status = CURLE_URL_MALFORMAT; if(rc > LDAP_URL_SUCCESS && rc <= LDAP_URL_ERR_BADEXTS) { if(rc == LDAP_URL_ERR_MEM) status = CURLE_OUT_OF_MEMORY; msg = url_errs[rc]; } failf(conn->data, "LDAP local: %s", msg); return status; } proto = ldap_pvt_url_scheme2proto(lud->lud_scheme); ldap_free_urldesc(lud); li = calloc(1, sizeof(struct ldapconninfo)); if(!li) return CURLE_OUT_OF_MEMORY; li->proto = proto; conn->proto.ldapc = li; connkeep(conn, "OpenLDAP default"); return CURLE_OK; } #ifdef USE_SSL static Sockbuf_IO ldapsb_tls; #endif static CURLcode ldap_connect(struct connectdata *conn, bool *done) { struct ldapconninfo *li = conn->proto.ldapc; struct Curl_easy *data = conn->data; int rc, proto = LDAP_VERSION3; char hosturl[1024]; char *ptr; (void)done; |
︙ | ︙ | |||
248 249 250 251 252 253 254 | #endif return CURLE_OK; } static CURLcode ldap_connecting(struct connectdata *conn, bool *done) { | | | 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | #endif return CURLE_OK; } static CURLcode ldap_connecting(struct connectdata *conn, bool *done) { struct ldapconninfo *li = conn->proto.ldapc; struct Curl_easy *data = conn->data; LDAPMessage *msg = NULL; struct timeval tv = {0, 1}, *tvp; int rc, err; char *info = NULL; #ifdef USE_SSL |
︙ | ︙ | |||
353 354 355 356 357 358 359 | *done = TRUE; return CURLE_OK; } static CURLcode ldap_disconnect(struct connectdata *conn, bool dead_connection) { | | | | | 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 | *done = TRUE; return CURLE_OK; } static CURLcode ldap_disconnect(struct connectdata *conn, bool dead_connection) { struct ldapconninfo *li = conn->proto.ldapc; (void) dead_connection; if(li) { if(li->ld) { ldap_unbind_ext(li->ld, NULL, NULL); li->ld = NULL; } conn->proto.ldapc = NULL; free(li); } return CURLE_OK; } static CURLcode ldap_do(struct connectdata *conn, bool *done) { struct ldapconninfo *li = conn->proto.ldapc; ldapreqinfo *lr; CURLcode status = CURLE_OK; int rc = 0; LDAPURLDesc *ludp = NULL; int msgid; struct Curl_easy *data = conn->data; |
︙ | ︙ | |||
423 424 425 426 427 428 429 | (void)res; (void)premature; if(lr) { /* if there was a search in progress, abandon it */ if(lr->msgid) { | | | | 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 | (void)res; (void)premature; if(lr) { /* if there was a search in progress, abandon it */ if(lr->msgid) { struct ldapconninfo *li = conn->proto.ldapc; ldap_abandon_ext(li->ld, lr->msgid, NULL, NULL); lr->msgid = 0; } conn->data->req.protop = NULL; free(lr); } return CURLE_OK; } static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf, size_t len, CURLcode *err) { struct ldapconninfo *li = conn->proto.ldapc; struct Curl_easy *data = conn->data; ldapreqinfo *lr = data->req.protop; int rc, ret; LDAPMessage *msg = NULL; LDAPMessage *ent; BerElement *ber = NULL; struct timeval tv = {0, 1}; |
︙ | ︙ | |||
714 715 716 717 718 719 720 | return 0; } static ber_slen_t ldapsb_tls_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) { struct connectdata *conn = sbiod->sbiod_pvt; | | | | 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 | return 0; } static ber_slen_t ldapsb_tls_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) { struct connectdata *conn = sbiod->sbiod_pvt; struct ldapconninfo *li = conn->proto.ldapc; ber_slen_t ret; CURLcode err = CURLE_RECV_ERROR; ret = (li->recv)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } return ret; } static ber_slen_t ldapsb_tls_write(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) { struct connectdata *conn = sbiod->sbiod_pvt; struct ldapconninfo *li = conn->proto.ldapc; ber_slen_t ret; CURLcode err = CURLE_SEND_ERROR; ret = (li->send)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } |
︙ | ︙ |
Changes to jni/curl/lib/pingpong.c.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
56 57 58 59 60 61 62 | remaining time, or use pp->response because SERVER_RESPONSE_TIMEOUT is supposed to govern the response for any given server response, not for the time from connect to the given server response. */ /* Without a requested timeout, we only wait 'response_time' seconds for the full response to arrive before we bail out */ timeout_ms = response_time - | | | | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | remaining time, or use pp->response because SERVER_RESPONSE_TIMEOUT is supposed to govern the response for any given server response, not for the time from connect to the given server response. */ /* Without a requested timeout, we only wait 'response_time' seconds for the full response to arrive before we bail out */ timeout_ms = response_time - (time_t)Curl_timediff(Curl_now(), pp->response); /* spent time */ if(data->set.timeout && !disconnecting) { /* if timeout is requested, find out how much remaining time we have */ time_t timeout2_ms = data->set.timeout - /* timeout time */ (time_t)Curl_timediff(Curl_now(), conn->now); /* spent time */ /* pick the lowest number */ timeout_ms = CURLMIN(timeout_ms, timeout2_ms); } return timeout_ms; } |
︙ | ︙ | |||
459 460 461 462 463 464 465 | pp->pending_resp = FALSE; return result; } int Curl_pp_getsock(struct pingpong *pp, | | < < < < < | 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 | pp->pending_resp = FALSE; return result; } int Curl_pp_getsock(struct pingpong *pp, curl_socket_t *socks) { struct connectdata *conn = pp->conn; socks[0] = conn->sock[FIRSTSOCKET]; if(pp->sendleft) { /* write mode */ return GETSOCK_WRITESOCK(0); } |
︙ | ︙ |
Changes to jni/curl/lib/pingpong.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_PINGPONG_H #define HEADER_CURL_PINGPONG_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef HEADER_CURL_PINGPONG_H #define HEADER_CURL_PINGPONG_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
131 132 133 134 135 136 137 | CURLcode Curl_pp_flushsend(struct pingpong *pp); /* call this when a pingpong connection is disconnected */ CURLcode Curl_pp_disconnect(struct pingpong *pp); | | < | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | CURLcode Curl_pp_flushsend(struct pingpong *pp); /* call this when a pingpong connection is disconnected */ CURLcode Curl_pp_disconnect(struct pingpong *pp); int Curl_pp_getsock(struct pingpong *pp, curl_socket_t *socks); /*********************************************************************** * * Curl_pp_moredata() * * Returns whether there are still more data in the cache and so a call * to Curl_pp_readresp() will not block. */ bool Curl_pp_moredata(struct pingpong *pp); #endif /* HEADER_CURL_PINGPONG_H */ |
Changes to jni/curl/lib/pop3.c.
︙ | ︙ | |||
91 92 93 94 95 96 97 | static CURLcode pop3_regular_transfer(struct connectdata *conn, bool *done); static CURLcode pop3_do(struct connectdata *conn, bool *done); static CURLcode pop3_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode pop3_connect(struct connectdata *conn, bool *done); static CURLcode pop3_disconnect(struct connectdata *conn, bool dead); static CURLcode pop3_multi_statemach(struct connectdata *conn, bool *done); | | < | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | static CURLcode pop3_regular_transfer(struct connectdata *conn, bool *done); static CURLcode pop3_do(struct connectdata *conn, bool *done); static CURLcode pop3_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode pop3_connect(struct connectdata *conn, bool *done); static CURLcode pop3_disconnect(struct connectdata *conn, bool dead); static CURLcode pop3_multi_statemach(struct connectdata *conn, bool *done); static int pop3_getsock(struct connectdata *conn, curl_socket_t *socks); static CURLcode pop3_doing(struct connectdata *conn, bool *dophase_done); static CURLcode pop3_setup_connection(struct connectdata *conn); static CURLcode pop3_parse_url_options(struct connectdata *conn); static CURLcode pop3_parse_url_path(struct connectdata *conn); static CURLcode pop3_parse_custom_request(struct connectdata *conn); static CURLcode pop3_perform_auth(struct connectdata *conn, const char *mech, const char *initresp); |
︙ | ︙ | |||
1051 1052 1053 1054 1055 1056 1057 | if(!pop3) result = CURLE_OUT_OF_MEMORY; return result; } /* For the POP3 "protocol connect" and "doing" phases only */ | | < | | 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 | if(!pop3) result = CURLE_OUT_OF_MEMORY; return result; } /* For the POP3 "protocol connect" and "doing" phases only */ static int pop3_getsock(struct connectdata *conn, curl_socket_t *socks) { return Curl_pp_getsock(&conn->proto.pop3c.pp, socks); } /*********************************************************************** * * pop3_connect() * * This function should do everything that is to be considered a part of the |
︙ | ︙ |
Changes to jni/curl/lib/progress.c.
︙ | ︙ | |||
22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include "curl_setup.h" #include "urldata.h" #include "sendf.h" #include "multiif.h" #include "progress.h" #include "curl_printf.h" /* check rate limits within this many recent milliseconds, at minimum. */ #define MIN_RATE_LIMIT_PERIOD 3000 #ifndef CURL_DISABLE_PROGRESS_METER /* Provide a string that is 2 + 1 + 2 + 1 + 2 = 8 letters long (plus the zero | > | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include "curl_setup.h" #include "urldata.h" #include "sendf.h" #include "multiif.h" #include "progress.h" #include "timeval.h" #include "curl_printf.h" /* check rate limits within this many recent milliseconds, at minimum. */ #define MIN_RATE_LIMIT_PERIOD 3000 #ifndef CURL_DISABLE_PROGRESS_METER /* Provide a string that is 2 + 1 + 2 + 1 + 2 = 8 letters long (plus the zero |
︙ | ︙ | |||
164 165 166 167 168 169 170 | /* * @unittest: 1399 */ void Curl_pgrsTime(struct Curl_easy *data, timerid timer) { struct curltime now = Curl_now(); | | | 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | /* * @unittest: 1399 */ void Curl_pgrsTime(struct Curl_easy *data, timerid timer) { struct curltime now = Curl_now(); timediff_t *delta = NULL; switch(timer) { default: case TIMER_NONE: /* mistake filter */ break; case TIMER_STARTOP: |
︙ | ︙ | |||
234 235 236 237 238 239 240 241 242 243 244 245 246 247 | data->progress.speeder_c = 0; /* reset the progress meter display */ data->progress.start = Curl_now(); data->progress.is_t_startransfer_set = false; data->progress.ul_limit_start.tv_sec = 0; data->progress.ul_limit_start.tv_usec = 0; data->progress.dl_limit_start.tv_sec = 0; data->progress.dl_limit_start.tv_usec = 0; /* clear all bits except HIDE and HEADERS_OUT */ data->progress.flags &= PGRS_HIDE|PGRS_HEADERS_OUT; Curl_ratelimit(data, data->progress.start); } /* * This is used to handle speed limits, calculating how many milliseconds to | > > | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | data->progress.speeder_c = 0; /* reset the progress meter display */ data->progress.start = Curl_now(); data->progress.is_t_startransfer_set = false; data->progress.ul_limit_start.tv_sec = 0; data->progress.ul_limit_start.tv_usec = 0; data->progress.dl_limit_start.tv_sec = 0; data->progress.dl_limit_start.tv_usec = 0; data->progress.downloaded = 0; data->progress.uploaded = 0; /* clear all bits except HIDE and HEADERS_OUT */ data->progress.flags &= PGRS_HIDE|PGRS_HEADERS_OUT; Curl_ratelimit(data, data->progress.start); } /* * This is used to handle speed limits, calculating how many milliseconds to |
︙ | ︙ | |||
264 265 266 267 268 269 270 | timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize, curl_off_t startsize, curl_off_t limit, struct curltime start, struct curltime now) { curl_off_t size = cursize - startsize; | | | | | | 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 | timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize, curl_off_t startsize, curl_off_t limit, struct curltime start, struct curltime now) { curl_off_t size = cursize - startsize; timediff_t minimum; timediff_t actual; if(!limit || !size) return 0; /* * 'minimum' is the number of milliseconds 'size' should take to download to * stay below 'limit'. */ if(size < CURL_OFF_T_MAX/1000) minimum = (time_t) (CURL_OFF_T_C(1000) * size / limit); else { minimum = (time_t) (size / limit); if(minimum < TIMEDIFF_T_MAX/1000) minimum *= 1000; else minimum = TIMEDIFF_T_MAX; } /* * 'actual' is the time in milliseconds it took to actually download the * last 'size' bytes. */ actual = Curl_timediff(now, start); |
︙ | ︙ |
Added jni/curl/lib/quic.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #ifndef HEADER_CURL_QUIC_H #define HEADER_CURL_QUIC_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #ifdef ENABLE_QUIC #ifdef USE_NGTCP2 #include "vquic/ngtcp2.h" #endif #ifdef USE_QUICHE #include "vquic/quiche.h" #endif #include "urldata.h" /* functions provided by the specific backends */ CURLcode Curl_quic_connect(struct connectdata *conn, curl_socket_t sockfd, int sockindex, const struct sockaddr *addr, socklen_t addrlen); CURLcode Curl_quic_is_connected(struct connectdata *conn, curl_socket_t sockfd, bool *connected); int Curl_quic_ver(char *p, size_t len); CURLcode Curl_quic_done_sending(struct connectdata *conn); #else /* ENABLE_QUIC */ #define Curl_quic_done_sending(x) #endif /* !ENABLE_QUIC */ #endif /* HEADER_CURL_QUIC_H */ |
Changes to jni/curl/lib/rtsp.c.
︙ | ︙ | |||
48 49 50 51 52 53 54 | ((int)((unsigned char)((p)[3])))) /* protocol-specific functions set up to be called by the main engine */ static CURLcode rtsp_do(struct connectdata *conn, bool *done); static CURLcode rtsp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode rtsp_connect(struct connectdata *conn, bool *done); static CURLcode rtsp_disconnect(struct connectdata *conn, bool dead); | < | < < | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | ((int)((unsigned char)((p)[3])))) /* protocol-specific functions set up to be called by the main engine */ static CURLcode rtsp_do(struct connectdata *conn, bool *done); static CURLcode rtsp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode rtsp_connect(struct connectdata *conn, bool *done); static CURLcode rtsp_disconnect(struct connectdata *conn, bool dead); static int rtsp_getsock_do(struct connectdata *conn, curl_socket_t *socks); /* * Parse and write out any available RTP data. * * nread: amount of data left after k->str. will be modified if RTP * data is parsed and k->str is moved up * readmore: whether or not the RTP parser needs more data right away |
︙ | ︙ | |||
73 74 75 76 77 78 79 | static unsigned int rtsp_conncheck(struct connectdata *check, unsigned int checks_to_perform); /* this returns the socket to wait for in the DO and DOING state for the multi interface and then we're always _sending_ a request and thus we wait for the single socket to become writable only */ static int rtsp_getsock_do(struct connectdata *conn, | | < < | 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | static unsigned int rtsp_conncheck(struct connectdata *check, unsigned int checks_to_perform); /* this returns the socket to wait for in the DO and DOING state for the multi interface and then we're always _sending_ a request and thus we wait for the single socket to become writable only */ static int rtsp_getsock_do(struct connectdata *conn, curl_socket_t *socks) { /* write mode */ socks[0] = conn->sock[FIRSTSOCKET]; return GETSOCK_WRITESOCK(0); } static CURLcode rtp_client_write(struct connectdata *conn, char *ptr, size_t len); |
︙ | ︙ |
Changes to jni/curl/lib/security.c.
︙ | ︙ | |||
187 188 189 190 191 192 193 | } static CURLcode read_data(struct connectdata *conn, curl_socket_t fd, struct krb5buffer *buf) { int len; | < | | < | 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | } static CURLcode read_data(struct connectdata *conn, curl_socket_t fd, struct krb5buffer *buf) { int len; CURLcode result; result = socket_read(fd, &len, sizeof(len)); if(result) return result; if(len) { /* only realloc if there was a length */ len = ntohl(len); buf->data = Curl_saferealloc(buf->data, len); } if(!len || !buf->data) return CURLE_OUT_OF_MEMORY; result = socket_read(fd, buf->data, len); if(result) return result; buf->size = conn->mech->decode(conn->app_data, buf->data, len, conn->data_prot, conn); buf->index = 0; return CURLE_OK; |
︙ | ︙ |
Changes to jni/curl/lib/select.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_SELECT_H #define HEADER_CURL_SELECT_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef HEADER_CURL_SELECT_H #define HEADER_CURL_SELECT_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
73 74 75 76 77 78 79 | #define CURL_CSELECT_IN2 (CURL_CSELECT_ERR << 1) int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2, curl_socket_t writefd, time_t timeout_ms); #define SOCKET_READABLE(x,z) \ | | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #define CURL_CSELECT_IN2 (CURL_CSELECT_ERR << 1) int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2, curl_socket_t writefd, time_t timeout_ms); #define SOCKET_READABLE(x,z) \ Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, (time_t)z) #define SOCKET_WRITABLE(x,z) \ Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, (time_t)z) int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms); /* On non-DOS and non-Winsock platforms, when Curl_ack_eintr is set, * EINTR condition is honored and function might exit early without * awaiting full timeout. Otherwise EINTR will be ignored and full * timeout will elapse. */ |
︙ | ︙ |
Changes to jni/curl/lib/setopt.c.
︙ | ︙ | |||
805 806 807 808 809 810 811 812 813 814 815 816 817 818 | /* * This sets a requested HTTP version to be used. The value is one of * the listed enums in curl/curl.h. */ arg = va_arg(param, long); if(arg < CURL_HTTP_VERSION_NONE) return CURLE_BAD_FUNCTION_ARGUMENT; #ifndef USE_NGHTTP2 if(arg >= CURL_HTTP_VERSION_2) return CURLE_UNSUPPORTED_PROTOCOL; #else if(arg > CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE) return CURLE_UNSUPPORTED_PROTOCOL; if(arg == CURL_HTTP_VERSION_NONE) | > > > > > | 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 | /* * This sets a requested HTTP version to be used. The value is one of * the listed enums in curl/curl.h. */ arg = va_arg(param, long); if(arg < CURL_HTTP_VERSION_NONE) return CURLE_BAD_FUNCTION_ARGUMENT; #ifdef ENABLE_QUIC if(arg == CURL_HTTP_VERSION_3) ; else #endif #ifndef USE_NGHTTP2 if(arg >= CURL_HTTP_VERSION_2) return CURLE_UNSUPPORTED_PROTOCOL; #else if(arg > CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE) return CURLE_UNSUPPORTED_PROTOCOL; if(arg == CURL_HTTP_VERSION_NONE) |
︙ | ︙ | |||
1774 1775 1776 1777 1778 1779 1780 | case CURLOPT_SSL_VERIFYHOST: /* * Enable verification of the host name in the peer certificate */ arg = va_arg(param, long); /* Obviously people are not reading documentation and too many thought | | < < | < < < < < | < < < < | < < < < < | | 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 | case CURLOPT_SSL_VERIFYHOST: /* * Enable verification of the host name in the peer certificate */ arg = va_arg(param, long); /* Obviously people are not reading documentation and too many thought this argument took a boolean when it wasn't and misused it. Treat 1 and 2 the same */ data->set.ssl.primary.verifyhost = (bool)((arg & 3) ? TRUE : FALSE); /* Update the current connection ssl_config. */ if(data->conn) { data->conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost; } break; #ifndef CURL_DISABLE_PROXY case CURLOPT_PROXY_SSL_VERIFYHOST: /* * Enable verification of the host name in the peer certificate for proxy */ arg = va_arg(param, long); /* Treat both 1 and 2 as TRUE */ data->set.proxy_ssl.primary.verifyhost = (bool)((arg & 3)?TRUE:FALSE); /* Update the current connection proxy_ssl_config. */ if(data->conn) { data->conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost; } break; |
︙ | ︙ | |||
2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 | break; case CURLOPT_MAIL_RCPT: /* Set the list of mail recipients */ data->set.mail_rcpt = va_arg(param, struct curl_slist *); break; #endif case CURLOPT_SASL_IR: /* Enable/disable SASL initial response */ data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE; break; #ifndef CURL_DISABLE_RTSP case CURLOPT_RTSP_REQUEST: | > > > > > > | 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 | break; case CURLOPT_MAIL_RCPT: /* Set the list of mail recipients */ data->set.mail_rcpt = va_arg(param, struct curl_slist *); break; #endif case CURLOPT_SASL_AUTHZID: /* Authorisation identity (identity to act as) */ result = Curl_setstropt(&data->set.str[STRING_SASL_AUTHZID], va_arg(param, char *)); break; case CURLOPT_SASL_IR: /* Enable/disable SASL initial response */ data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE; break; #ifndef CURL_DISABLE_RTSP case CURLOPT_RTSP_REQUEST: |
︙ | ︙ |
Changes to jni/curl/lib/smb.c.
1 2 3 4 5 6 7 8 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2014, Bill Nagel <wnagel@tycoint.com>, Exacq Technologies | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2014, Bill Nagel <wnagel@tycoint.com>, Exacq Technologies * Copyright (C) 2016-2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
60 61 62 63 64 65 66 | static CURLcode smb_connect(struct connectdata *conn, bool *done); static CURLcode smb_connection_state(struct connectdata *conn, bool *done); static CURLcode smb_do(struct connectdata *conn, bool *done); static CURLcode smb_request_state(struct connectdata *conn, bool *done); static CURLcode smb_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode smb_disconnect(struct connectdata *conn, bool dead); | | < | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | static CURLcode smb_connect(struct connectdata *conn, bool *done); static CURLcode smb_connection_state(struct connectdata *conn, bool *done); static CURLcode smb_do(struct connectdata *conn, bool *done); static CURLcode smb_request_state(struct connectdata *conn, bool *done); static CURLcode smb_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode smb_disconnect(struct connectdata *conn, bool dead); static int smb_getsock(struct connectdata *conn, curl_socket_t *socks); static CURLcode smb_parse_url_path(struct connectdata *conn); /* * SMB handler interface */ const struct Curl_handler Curl_handler_smb = { "SMB", /* scheme */ |
︙ | ︙ | |||
603 604 605 606 607 608 609 610 611 612 613 614 615 616 | return smb_send(conn, sizeof(*msg), (size_t) upload_size); } static CURLcode smb_send_and_recv(struct connectdata *conn, void **msg) { struct smb_conn *smbc = &conn->proto.smbc; CURLcode result; /* Check if there is data in the transfer buffer */ if(!smbc->send_size && smbc->upload_size) { size_t nread = smbc->upload_size > conn->data->set.upload_buffer_size ? conn->data->set.upload_buffer_size : smbc->upload_size; conn->data->req.upload_fromhere = conn->data->state.ulbuf; | > | 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 | return smb_send(conn, sizeof(*msg), (size_t) upload_size); } static CURLcode smb_send_and_recv(struct connectdata *conn, void **msg) { struct smb_conn *smbc = &conn->proto.smbc; CURLcode result; *msg = NULL; /* if it returns early */ /* Check if there is data in the transfer buffer */ if(!smbc->send_size && smbc->upload_size) { size_t nread = smbc->upload_size > conn->data->set.upload_buffer_size ? conn->data->set.upload_buffer_size : smbc->upload_size; conn->data->req.upload_fromhere = conn->data->state.ulbuf; |
︙ | ︙ | |||
932 933 934 935 936 937 938 | (void) dead; Curl_safefree(smbc->share); Curl_safefree(smbc->domain); Curl_safefree(smbc->recv_buf); return CURLE_OK; } | | < < < < | 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 | (void) dead; Curl_safefree(smbc->share); Curl_safefree(smbc->domain); Curl_safefree(smbc->recv_buf); return CURLE_OK; } static int smb_getsock(struct connectdata *conn, curl_socket_t *socks) { socks[0] = conn->sock[FIRSTSOCKET]; return GETSOCK_READSOCK(0) | GETSOCK_WRITESOCK(0); } static CURLcode smb_do(struct connectdata *conn, bool *done) { struct smb_conn *smbc = &conn->proto.smbc; |
︙ | ︙ |
Changes to jni/curl/lib/smtp.c.
︙ | ︙ | |||
91 92 93 94 95 96 97 | static CURLcode smtp_regular_transfer(struct connectdata *conn, bool *done); static CURLcode smtp_do(struct connectdata *conn, bool *done); static CURLcode smtp_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode smtp_connect(struct connectdata *conn, bool *done); static CURLcode smtp_disconnect(struct connectdata *conn, bool dead); static CURLcode smtp_multi_statemach(struct connectdata *conn, bool *done); | | < | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | static CURLcode smtp_regular_transfer(struct connectdata *conn, bool *done); static CURLcode smtp_do(struct connectdata *conn, bool *done); static CURLcode smtp_done(struct connectdata *conn, CURLcode status, bool premature); static CURLcode smtp_connect(struct connectdata *conn, bool *done); static CURLcode smtp_disconnect(struct connectdata *conn, bool dead); static CURLcode smtp_multi_statemach(struct connectdata *conn, bool *done); static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks); static CURLcode smtp_doing(struct connectdata *conn, bool *dophase_done); static CURLcode smtp_setup_connection(struct connectdata *conn); static CURLcode smtp_parse_url_options(struct connectdata *conn); static CURLcode smtp_parse_url_path(struct connectdata *conn); static CURLcode smtp_parse_custom_request(struct connectdata *conn); static CURLcode smtp_perform_auth(struct connectdata *conn, const char *mech, const char *initresp); |
︙ | ︙ | |||
711 712 713 714 715 716 717 | if(data->set.use_ssl <= CURLUSESSL_TRY || conn->ssl[FIRSTSOCKET].use) result = smtp_perform_helo(conn); else { failf(data, "Remote access denied: %d", smtpcode); result = CURLE_REMOTE_ACCESS_DENIED; } } | | | 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 | if(data->set.use_ssl <= CURLUSESSL_TRY || conn->ssl[FIRSTSOCKET].use) result = smtp_perform_helo(conn); else { failf(data, "Remote access denied: %d", smtpcode); result = CURLE_REMOTE_ACCESS_DENIED; } } else if(len >= 4) { line += 4; len -= 4; /* Does the server support the STARTTLS capability? */ if(len >= 8 && !memcmp(line, "STARTTLS", 8)) smtpc->tls_supported = TRUE; |
︙ | ︙ | |||
782 783 784 785 786 787 788 789 790 791 792 793 794 795 | result = CURLE_USE_SSL_FAILED; } } else result = smtp_perform_authentication(conn); } } return result; } /* For HELO responses */ static CURLcode smtp_state_helo_resp(struct connectdata *conn, int smtpcode, smtpstate instate) | > > > > | 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 | result = CURLE_USE_SSL_FAILED; } } else result = smtp_perform_authentication(conn); } } else { failf(data, "Unexpectedly short EHLO response"); result = CURLE_WEIRD_SERVER_REPLY; } return result; } /* For HELO responses */ static CURLcode smtp_state_helo_resp(struct connectdata *conn, int smtpcode, smtpstate instate) |
︙ | ︙ | |||
1110 1111 1112 1113 1114 1115 1116 | if(!smtp) result = CURLE_OUT_OF_MEMORY; return result; } /* For the SMTP "protocol connect" and "doing" phases only */ | | < | | 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 | if(!smtp) result = CURLE_OUT_OF_MEMORY; return result; } /* For the SMTP "protocol connect" and "doing" phases only */ static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks) { return Curl_pp_getsock(&conn->proto.smtpc.pp, socks); } /*********************************************************************** * * smtp_connect() * * This function should do everything that is to be considered a part of |
︙ | ︙ |
Deleted jni/curl/lib/ssh-libssh.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/curl/lib/ssh.c.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/curl/lib/ssh.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_SSH_H #define HEADER_CURL_SSH_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef HEADER_CURL_SSH_H #define HEADER_CURL_SSH_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
235 236 237 238 239 240 241 242 | #else /* use build-time if run-time not possible */ #define CURL_LIBSSH2_VERSION LIBSSH2_VERSION #endif extern const struct Curl_handler Curl_handler_scp; extern const struct Curl_handler Curl_handler_sftp; | > > > > > > > > > | | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | #else /* use build-time if run-time not possible */ #define CURL_LIBSSH2_VERSION LIBSSH2_VERSION #endif extern const struct Curl_handler Curl_handler_scp; extern const struct Curl_handler Curl_handler_sftp; #endif /* USE_LIBSSH2 */ #ifdef USE_SSH /* generic SSH backend functions */ CURLcode Curl_ssh_init(void); void Curl_ssh_cleanup(void); size_t Curl_ssh_version(char *buffer, size_t buflen); #else /* for non-SSH builds */ #define Curl_ssh_cleanup() #endif #endif /* HEADER_CURL_SSH_H */ |
Changes to jni/curl/lib/strerror.c.
︙ | ︙ | |||
307 308 309 310 311 312 313 314 315 316 317 318 319 320 | case CURLE_HTTP2_STREAM: return "Stream error in the HTTP/2 framing layer"; case CURLE_RECURSIVE_API_CALL: return "API function called from within callback"; /* error codes not used by current libcurl */ case CURLE_OBSOLETE20: case CURLE_OBSOLETE24: case CURLE_OBSOLETE29: case CURLE_OBSOLETE32: case CURLE_OBSOLETE40: case CURLE_OBSOLETE44: | > > > | 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 | case CURLE_HTTP2_STREAM: return "Stream error in the HTTP/2 framing layer"; case CURLE_RECURSIVE_API_CALL: return "API function called from within callback"; case CURLE_AUTH_ERROR: return "An authentication function returned an error"; /* error codes not used by current libcurl */ case CURLE_OBSOLETE20: case CURLE_OBSOLETE24: case CURLE_OBSOLETE29: case CURLE_OBSOLETE32: case CURLE_OBSOLETE40: case CURLE_OBSOLETE44: |
︙ | ︙ |
Changes to jni/curl/lib/tftp.c.
︙ | ︙ | |||
153 154 155 156 157 158 159 | bool dead_connection); static CURLcode tftp_do(struct connectdata *conn, bool *done); static CURLcode tftp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode tftp_setup_connection(struct connectdata * conn); static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done); static CURLcode tftp_doing(struct connectdata *conn, bool *dophase_done); | | < | 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | bool dead_connection); static CURLcode tftp_do(struct connectdata *conn, bool *done); static CURLcode tftp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode tftp_setup_connection(struct connectdata * conn); static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done); static CURLcode tftp_doing(struct connectdata *conn, bool *dophase_done); static int tftp_getsock(struct connectdata *conn, curl_socket_t *socks); static CURLcode tftp_translate_code(tftp_error_t error); /* * TFTP protocol handler. */ |
︙ | ︙ | |||
400 401 402 403 404 405 406 | } } } return CURLE_OK; } | | | | | | > | 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 | } } } return CURLE_OK; } static CURLcode tftp_option_add(tftp_state_data_t *state, size_t *csize, char *buf, const char *option) { if(( strlen(option) + *csize + 1) > (size_t)state->blksize) return CURLE_TFTP_ILLEGAL; strcpy(buf, option); *csize += strlen(option) + 1; return CURLE_OK; } static CURLcode tftp_connect_for_tx(tftp_state_data_t *state, tftp_event_t event) { CURLcode result; #ifndef CURL_DISABLE_VERBOSE_STRINGS |
︙ | ︙ | |||
507 508 509 510 511 512 513 | /* add tsize option */ if(data->set.upload && (data->state.infilesize != -1)) msnprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T, data->state.infilesize); else strcpy(buf, "0"); /* the destination is large enough */ | | | | > | | > > | | | > | | > | | | > | | > > > > > > | 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 | /* add tsize option */ if(data->set.upload && (data->state.infilesize != -1)) msnprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T, data->state.infilesize); else strcpy(buf, "0"); /* the destination is large enough */ result = tftp_option_add(state, &sbytes, (char *)state->spacket.data + sbytes, TFTP_OPTION_TSIZE); if(result == CURLE_OK) result = tftp_option_add(state, &sbytes, (char *)state->spacket.data + sbytes, buf); /* add blksize option */ msnprintf(buf, sizeof(buf), "%d", state->requested_blksize); if(result == CURLE_OK) result = tftp_option_add(state, &sbytes, (char *)state->spacket.data + sbytes, TFTP_OPTION_BLKSIZE); if(result == CURLE_OK) result = tftp_option_add(state, &sbytes, (char *)state->spacket.data + sbytes, buf); /* add timeout option */ msnprintf(buf, sizeof(buf), "%d", state->retry_time); if(result == CURLE_OK) result = tftp_option_add(state, &sbytes, (char *)state->spacket.data + sbytes, TFTP_OPTION_INTERVAL); if(result == CURLE_OK) result = tftp_option_add(state, &sbytes, (char *)state->spacket.data + sbytes, buf); if(result != CURLE_OK) { failf(data, "TFTP buffer too small for options"); free(filename); return CURLE_TFTP_ILLEGAL; } } /* the typecase for the 3rd argument is mostly for systems that do not have a size_t argument, like older unixes that want an 'int' */ senddata = sendto(state->sockfd, (void *)state->spacket.data, (SEND_TYPE_ARG3)sbytes, 0, state->conn->ip_addr->ai_addr, |
︙ | ︙ | |||
969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 | * The connect callback * **********************************************************/ static CURLcode tftp_connect(struct connectdata *conn, bool *done) { tftp_state_data_t *state; int blksize; blksize = TFTP_BLKSIZE_DEFAULT; state = conn->proto.tftpc = calloc(1, sizeof(tftp_state_data_t)); if(!state) return CURLE_OUT_OF_MEMORY; /* alloc pkt buffers based on specified blksize */ if(conn->data->set.tftp_blksize) { blksize = (int)conn->data->set.tftp_blksize; if(blksize > TFTP_BLKSIZE_MAX || blksize < TFTP_BLKSIZE_MIN) return CURLE_TFTP_ILLEGAL; } if(!state->rpacket.data) { | > > > > > > | | | | 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 | * The connect callback * **********************************************************/ static CURLcode tftp_connect(struct connectdata *conn, bool *done) { tftp_state_data_t *state; int blksize; int need_blksize; blksize = TFTP_BLKSIZE_DEFAULT; state = conn->proto.tftpc = calloc(1, sizeof(tftp_state_data_t)); if(!state) return CURLE_OUT_OF_MEMORY; /* alloc pkt buffers based on specified blksize */ if(conn->data->set.tftp_blksize) { blksize = (int)conn->data->set.tftp_blksize; if(blksize > TFTP_BLKSIZE_MAX || blksize < TFTP_BLKSIZE_MIN) return CURLE_TFTP_ILLEGAL; } need_blksize = blksize; /* default size is the fallback when no OACK is received */ if(need_blksize < TFTP_BLKSIZE_DEFAULT) need_blksize = TFTP_BLKSIZE_DEFAULT; if(!state->rpacket.data) { state->rpacket.data = calloc(1, need_blksize + 2 + 2); if(!state->rpacket.data) return CURLE_OUT_OF_MEMORY; } if(!state->spacket.data) { state->spacket.data = calloc(1, need_blksize + 2 + 2); if(!state->spacket.data) return CURLE_OUT_OF_MEMORY; } /* we don't keep TFTP connections up basically because there's none or very * little gain for UDP */ connclose(conn, "TFTP"); state->conn = conn; state->sockfd = state->conn->sock[FIRSTSOCKET]; state->state = TFTP_STATE_START; state->error = TFTP_ERR_NONE; state->blksize = TFTP_BLKSIZE_DEFAULT; /* Unless updated by OACK response */ state->requested_blksize = blksize; ((struct sockaddr *)&state->local_addr)->sa_family = (CURL_SA_FAMILY_T)(conn->ip_addr->ai_family); tftp_set_timeouts(state); |
︙ | ︙ | |||
1078 1079 1080 1081 1082 1083 1084 | /********************************************************** * * tftp_getsock * * The getsock callback * **********************************************************/ | | < < < < < | 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 | /********************************************************** * * tftp_getsock * * The getsock callback * **********************************************************/ static int tftp_getsock(struct connectdata *conn, curl_socket_t *socks) { socks[0] = conn->sock[FIRSTSOCKET]; return GETSOCK_READSOCK(0); } /********************************************************** * * tftp_receive_packet * |
︙ | ︙ | |||
1372 1373 1374 1375 1376 1377 1378 | } static CURLcode tftp_setup_connection(struct connectdata * conn) { struct Curl_easy *data = conn->data; char *type; | | | 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 | } static CURLcode tftp_setup_connection(struct connectdata * conn) { struct Curl_easy *data = conn->data; char *type; conn->transport = TRNSPRT_UDP; /* TFTP URLs support an extension like ";mode=<typecode>" that * we'll try to get now! */ type = strstr(data->state.up.path, ";mode="); if(!type) type = strstr(conn->host.rawalloc, ";mode="); |
︙ | ︙ |
Changes to jni/curl/lib/timeval.c.
︙ | ︙ | |||
170 171 172 173 174 175 176 | now.tv_sec = time(NULL); now.tv_usec = 0; return now; } #endif | < < < < < < < < | | | | | | | | | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | now.tv_sec = time(NULL); now.tv_usec = 0; return now; } #endif /* * Returns: time difference in number of milliseconds. For too large diffs it * returns max value. * * @unittest: 1323 */ timediff_t Curl_timediff(struct curltime newer, struct curltime older) { timediff_t diff = (timediff_t)newer.tv_sec-older.tv_sec; if(diff >= (TIMEDIFF_T_MAX/1000)) return TIMEDIFF_T_MAX; else if(diff <= (TIMEDIFF_T_MIN/1000)) return TIMEDIFF_T_MIN; return diff * 1000 + (newer.tv_usec-older.tv_usec)/1000; } /* * Returns: time difference in number of microseconds. For too large diffs it * returns max value. */ timediff_t Curl_timediff_us(struct curltime newer, struct curltime older) { timediff_t diff = (timediff_t)newer.tv_sec-older.tv_sec; if(diff >= (TIMEDIFF_T_MAX/1000000)) return TIMEDIFF_T_MAX; else if(diff <= (TIMEDIFF_T_MIN/1000000)) return TIMEDIFF_T_MIN; return diff * 1000000 + newer.tv_usec-older.tv_usec; } |
Changes to jni/curl/lib/timeval.h.
︙ | ︙ | |||
20 21 22 23 24 25 26 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" | | < < | | > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" /* Use a larger type even for 32 bit time_t systems so that we can keep microsecond accuracy in it */ typedef curl_off_t timediff_t; #define CURL_FORMAT_TIMEDIFF_T CURL_FORMAT_CURL_OFF_T #define TIMEDIFF_T_MAX CURL_OFF_T_MAX #define TIMEDIFF_T_MIN CURL_OFF_T_MIN struct curltime { time_t tv_sec; /* seconds */ int tv_usec; /* microseconds */ }; struct curltime Curl_now(void); |
︙ | ︙ |
Changes to jni/curl/lib/transfer.c.
︙ | ︙ | |||
172 173 174 175 176 177 178 | sending_http_headers = TRUE; } #endif #ifndef CURL_DISABLE_HTTP if(data->state.trailers_state == TRAILERS_INITIALIZED) { struct curl_slist *trailers = NULL; | | | > | | | | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | sending_http_headers = TRUE; } #endif #ifndef CURL_DISABLE_HTTP if(data->state.trailers_state == TRAILERS_INITIALIZED) { struct curl_slist *trailers = NULL; CURLcode result; int trailers_ret_code; /* at this point we already verified that the callback exists so we compile and store the trailers buffer, then proceed */ infof(data, "Moving trailers state machine from initialized to sending.\n"); data->state.trailers_state = TRAILERS_SENDING; data->state.trailers_buf = Curl_add_buffer_init(); if(!data->state.trailers_buf) { failf(data, "Unable to allocate trailing headers buffer !"); return CURLE_OUT_OF_MEMORY; } data->state.trailers_bytes_sent = 0; Curl_set_in_callback(data, true); trailers_ret_code = data->set.trailer_callback(&trailers, data->set.trailer_data); Curl_set_in_callback(data, false); if(trailers_ret_code == CURL_TRAILERFUNC_OK) { result = Curl_http_compile_trailers(trailers, &data->state.trailers_buf, data); } else { failf(data, "operation aborted by trailing headers callback"); *nreadp = 0; result = CURLE_ABORTED_BY_CALLBACK; } if(result) { Curl_add_buffer_free(&data->state.trailers_buf); curl_slist_free_all(trailers); return result; } infof(data, "Successfully compiled trailers.\r\n"); curl_slist_free_all(trailers); } #endif /* if we are transmitting trailing data, we don't need to write |
︙ | ︙ | |||
493 494 495 496 497 498 499 | /* For HTTP/2, we may read up everything including response body with header fields in Curl_http_readwrite_headers. If no content-length is provided, curl waits for the connection close, which we emulate it using conn->proto.httpc.closed = TRUE. The thing is if we read everything, then http2_recv won't be called and we cannot signal the HTTP/2 stream has closed. As a workaround, we return nonzero here to call http2_recv. */ | | | 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 | /* For HTTP/2, we may read up everything including response body with header fields in Curl_http_readwrite_headers. If no content-length is provided, curl waits for the connection close, which we emulate it using conn->proto.httpc.closed = TRUE. The thing is if we read everything, then http2_recv won't be called and we cannot signal the HTTP/2 stream has closed. As a workaround, we return nonzero here to call http2_recv. */ ((conn->handler->protocol&PROTO_FAMILY_HTTP) && conn->httpversion >= 20); #else Curl_ssl_data_pending(conn, FIRSTSOCKET); #endif } /* * Check to see if CURLOPT_TIMECONDITION was met by comparing the time of the |
︙ | ︙ | |||
597 598 599 600 601 602 603 | else { /* read nothing but since we wanted nothing we consider this an OK situation to proceed from */ DEBUGF(infof(data, "readwrite_data: we're done!\n")); nread = 0; } | | | 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 | else { /* read nothing but since we wanted nothing we consider this an OK situation to proceed from */ DEBUGF(infof(data, "readwrite_data: we're done!\n")); nread = 0; } if(!k->bytecount) { Curl_pgrsTime(data, TIMER_STARTTRANSFER); if(k->exp100 > EXP100_SEND_DATA) /* set time stamp to compare with when waiting for the 100 */ k->start100 = Curl_now(); } *didwhat |= KEEP_RECV; |
︙ | ︙ | |||
938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 | } CURLcode Curl_done_sending(struct connectdata *conn, struct SingleRequest *k) { k->keepon &= ~KEEP_SEND; /* we're done writing */ Curl_http2_done_sending(conn); if(conn->bits.rewindaftersend) { CURLcode result = Curl_readrewind(conn); if(result) return result; } return CURLE_OK; | > > | 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 | } CURLcode Curl_done_sending(struct connectdata *conn, struct SingleRequest *k) { k->keepon &= ~KEEP_SEND; /* we're done writing */ /* These functions should be moved into the handler struct! */ Curl_http2_done_sending(conn); Curl_quic_done_sending(conn); if(conn->bits.rewindaftersend) { CURLcode result = Curl_readrewind(conn); if(result) return result; } return CURLE_OK; |
︙ | ︙ | |||
1350 1351 1352 1353 1354 1355 1356 | * Curl_single_getsock() gets called by the multi interface code when the app * has requested to get the sockets for the current connection. This function * will then be called once for every connection that the multi interface * keeps track of. This function will only be called for connections that are * in the proper state to have this information available. */ int Curl_single_getsock(const struct connectdata *conn, | | < < | < < < < | 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 | * Curl_single_getsock() gets called by the multi interface code when the app * has requested to get the sockets for the current connection. This function * will then be called once for every connection that the multi interface * keeps track of. This function will only be called for connections that are * in the proper state to have this information available. */ int Curl_single_getsock(const struct connectdata *conn, curl_socket_t *sock) { const struct Curl_easy *data = conn->data; int bitmap = GETSOCK_BLANK; unsigned sockindex = 0; if(conn->handler->perform_getsock) return conn->handler->perform_getsock(conn, sock); /* don't include HOLD and PAUSE connections */ if((data->req.keepon & KEEP_RECVBITS) == KEEP_RECV) { DEBUGASSERT(conn->sockfd != CURL_SOCKET_BAD); bitmap |= GETSOCK_READSOCK(sockindex); |
︙ | ︙ |
Changes to jni/curl/lib/transfer.h.
︙ | ︙ | |||
43 44 45 46 47 48 49 | CURLcode Curl_follow(struct Curl_easy *data, char *newurl, followtype type); CURLcode Curl_readwrite(struct connectdata *conn, struct Curl_easy *data, bool *done, bool *comeback); int Curl_single_getsock(const struct connectdata *conn, | | < | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | CURLcode Curl_follow(struct Curl_easy *data, char *newurl, followtype type); CURLcode Curl_readwrite(struct connectdata *conn, struct Curl_easy *data, bool *done, bool *comeback); int Curl_single_getsock(const struct connectdata *conn, curl_socket_t *socks); CURLcode Curl_readrewind(struct connectdata *conn); CURLcode Curl_fillreadbuffer(struct connectdata *conn, size_t bytes, size_t *nreadp); CURLcode Curl_retry_request(struct connectdata *conn, char **url); bool Curl_meets_timecondition(struct Curl_easy *data, time_t timeofdoc); CURLcode Curl_get_upload_buffer(struct Curl_easy *data); |
︙ | ︙ |
Changes to jni/curl/lib/url.c.
︙ | ︙ | |||
108 109 110 111 112 113 114 | #include "curl_ldap.h" #include "ssh.h" #include "imap.h" #include "url.h" #include "connect.h" #include "inet_ntop.h" #include "http_ntlm.h" | < | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | #include "curl_ldap.h" #include "ssh.h" #include "imap.h" #include "url.h" #include "connect.h" #include "inet_ntop.h" #include "http_ntlm.h" #include "curl_rtmp.h" #include "gopher.h" #include "http_proxy.h" #include "conncache.h" #include "multihandle.h" #include "dotdot.h" #include "strdup.h" |
︙ | ︙ | |||
542 543 544 545 546 547 548 | set->buffer_size = READBUFFER_SIZE; set->upload_buffer_size = UPLOADBUFFER_DEFAULT; set->happy_eyeballs_timeout = CURL_HET_DEFAULT; set->fnmatch = ZERO_NULL; set->upkeep_interval_ms = CURL_UPKEEP_INTERVAL_DEFAULT; set->maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */ set->maxage_conn = 118; | | | 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 | set->buffer_size = READBUFFER_SIZE; set->upload_buffer_size = UPLOADBUFFER_DEFAULT; set->happy_eyeballs_timeout = CURL_HET_DEFAULT; set->fnmatch = ZERO_NULL; set->upkeep_interval_ms = CURL_UPKEEP_INTERVAL_DEFAULT; set->maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */ set->maxage_conn = 118; set->http09_allowed = FALSE; set->httpversion = #ifdef USE_NGHTTP2 CURL_HTTP_VERSION_2TLS #else CURL_HTTP_VERSION_1_1 #endif ; |
︙ | ︙ | |||
711 712 713 714 715 716 717 718 719 720 721 722 723 724 | free_idnconverted_hostname(&conn->conn_to_host); free_idnconverted_hostname(&conn->http_proxy.host); free_idnconverted_hostname(&conn->socks_proxy.host); Curl_safefree(conn->user); Curl_safefree(conn->passwd); Curl_safefree(conn->oauth_bearer); Curl_safefree(conn->options); Curl_safefree(conn->http_proxy.user); Curl_safefree(conn->socks_proxy.user); Curl_safefree(conn->http_proxy.passwd); Curl_safefree(conn->socks_proxy.passwd); Curl_safefree(conn->allocptr.proxyuserpwd); Curl_safefree(conn->allocptr.uagent); | > | 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 | free_idnconverted_hostname(&conn->conn_to_host); free_idnconverted_hostname(&conn->http_proxy.host); free_idnconverted_hostname(&conn->socks_proxy.host); Curl_safefree(conn->user); Curl_safefree(conn->passwd); Curl_safefree(conn->oauth_bearer); Curl_safefree(conn->sasl_authzid); Curl_safefree(conn->options); Curl_safefree(conn->http_proxy.user); Curl_safefree(conn->socks_proxy.user); Curl_safefree(conn->http_proxy.passwd); Curl_safefree(conn->socks_proxy.passwd); Curl_safefree(conn->allocptr.proxyuserpwd); Curl_safefree(conn->allocptr.uagent); |
︙ | ︙ | |||
968 969 970 971 972 973 974 | * This function scans the connection cache for half-open/dead connections, * closes and removes them. * The cleanup is done at most once per second. */ static void prune_dead_connections(struct Curl_easy *data) { struct curltime now = Curl_now(); | > | | 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 | * This function scans the connection cache for half-open/dead connections, * closes and removes them. * The cleanup is done at most once per second. */ static void prune_dead_connections(struct Curl_easy *data) { struct curltime now = Curl_now(); timediff_t elapsed = Curl_timediff(now, data->state.conn_cache->last_cleanup); if(elapsed >= 1000L) { struct prunedead prune; prune.data = data; prune.extracted = NULL; while(Curl_conncache_foreach(data, data->state.conn_cache, &prune, call_extract_if_dead)) { |
︙ | ︙ | |||
1367 1368 1369 1370 1371 1372 1373 | "Found pending candidate for reuse and CURLOPT_PIPEWAIT is set\n"); *waitpipe = TRUE; } return FALSE; /* no matching connecting exists */ } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 | "Found pending candidate for reuse and CURLOPT_PIPEWAIT is set\n"); *waitpipe = TRUE; } return FALSE; /* no matching connecting exists */ } /* * verboseconnect() displays verbose information after a connect */ #ifndef CURL_DISABLE_VERBOSE_STRINGS void Curl_verboseconnect(struct connectdata *conn) { if(conn->data->set.verbose) infof(conn->data, "Connected to %s (%s) port %ld (#%ld)\n", conn->bits.socksproxy ? conn->socks_proxy.host.dispname : conn->bits.httpproxy ? conn->http_proxy.host.dispname : conn->bits.conn_to_host ? conn->conn_to_host.dispname : conn->host.dispname, conn->ip_addr_str, conn->port, conn->connection_id); } #endif /* * Helpers for IDNA conversions. */ static bool is_ASCII_name(const char *hostname) { const unsigned char *ch = (const unsigned char *)hostname; |
︙ | ︙ | |||
1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 | conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost; conn->proxy_ssl_config.verifystatus = data->set.proxy_ssl.primary.verifystatus; conn->proxy_ssl_config.verifypeer = data->set.proxy_ssl.primary.verifypeer; conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost; conn->ip_version = data->set.ipver; conn->bits.connect_only = data->set.connect_only; #if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \ defined(NTLM_WB_ENABLED) conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD; #endif /* Initialize the easy handle list */ | > | 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 | conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost; conn->proxy_ssl_config.verifystatus = data->set.proxy_ssl.primary.verifystatus; conn->proxy_ssl_config.verifypeer = data->set.proxy_ssl.primary.verifypeer; conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost; conn->ip_version = data->set.ipver; conn->bits.connect_only = data->set.connect_only; conn->transport = TRNSPRT_TCP; /* most of them are TCP streams */ #if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \ defined(NTLM_WB_ENABLED) conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD; #endif /* Initialize the easy handle list */ |
︙ | ︙ | |||
2106 2107 2108 2109 2110 2111 2112 | * * This MUST get called after proxy magic has been figured out. */ static CURLcode setup_connection_internals(struct connectdata *conn) { const struct Curl_handler * p; CURLcode result; | < | 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 | * * This MUST get called after proxy magic has been figured out. */ static CURLcode setup_connection_internals(struct connectdata *conn) { const struct Curl_handler * p; CURLcode result; /* Perform setup complement if some. */ p = conn->handler; if(p->setup_connection) { result = (*p->setup_connection)(conn); |
︙ | ︙ | |||
2856 2857 2858 2859 2860 2861 2862 | int ret; ret = Curl_parsenetrc(conn->host.name, userp, passwdp, &netrc_user_changed, &netrc_passwd_changed, data->set.str[STRING_NETRC_FILE]); if(ret > 0) { | | < | 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 | int ret; ret = Curl_parsenetrc(conn->host.name, userp, passwdp, &netrc_user_changed, &netrc_passwd_changed, data->set.str[STRING_NETRC_FILE]); if(ret > 0) { infof(data, "Couldn't find host %s in the .netrc file; using defaults\n", conn->host.name); } else if(ret < 0) { return CURLE_OUT_OF_MEMORY; } else { /* set bits.netrc TRUE to remember that we got the name from a .netrc |
︙ | ︙ | |||
3154 3155 3156 3157 3158 3159 3160 | conn_to_host = conn_to_host->next; } #ifdef USE_ALTSVC if(data->asi && !host && (port == -1) && (conn->handler->protocol == CURLPROTO_HTTPS)) { /* no connect_to match, try alt-svc! */ | < < | > > > > > > > > > > > > > | | > > > > > > > > > > | | > | | > > > > > > > > > > > > > > > > > | 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 | conn_to_host = conn_to_host->next; } #ifdef USE_ALTSVC if(data->asi && !host && (port == -1) && (conn->handler->protocol == CURLPROTO_HTTPS)) { /* no connect_to match, try alt-svc! */ enum alpnid srcalpnid; bool hit; struct altsvc *as; const int allowed_versions = ( ALPN_h1 #ifdef USE_NGHTTP2 | ALPN_h2 #endif #ifdef ENABLE_QUIC | ALPN_h3 #endif ) & data->asi->flags; host = conn->host.rawalloc; #ifdef USE_NGHTTP2 /* with h2 support, check that first */ srcalpnid = ALPN_h2; hit = Curl_altsvc_lookup(data->asi, srcalpnid, host, conn->remote_port, /* from */ &as /* to */, allowed_versions); if(!hit) #endif { srcalpnid = ALPN_h1; hit = Curl_altsvc_lookup(data->asi, srcalpnid, host, conn->remote_port, /* from */ &as /* to */, allowed_versions); } if(hit) { char *hostd = strdup((char *)as->dst.host); if(!hostd) return CURLE_OUT_OF_MEMORY; conn->conn_to_host.rawalloc = hostd; conn->conn_to_host.name = hostd; conn->bits.conn_to_host = TRUE; conn->conn_to_port = as->dst.port; conn->bits.conn_to_port = TRUE; conn->bits.altused = TRUE; infof(data, "Alt-svc connecting from [%s]%s:%d to [%s]%s:%d\n", Curl_alpnid2str(srcalpnid), host, conn->remote_port, Curl_alpnid2str(as->dst.alpnid), hostd, as->dst.port); if(srcalpnid != as->dst.alpnid) { /* protocol version switch */ switch(as->dst.alpnid) { case ALPN_h1: conn->httpversion = 11; break; case ALPN_h2: conn->httpversion = 20; break; case ALPN_h3: conn->transport = TRNSPRT_QUIC; conn->httpversion = 30; break; default: /* shouldn't be possible */ break; } } } } #endif return result; } |
︙ | ︙ | |||
3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 | if(data->set.str[STRING_BEARER]) { conn->oauth_bearer = strdup(data->set.str[STRING_BEARER]); if(!conn->oauth_bearer) { result = CURLE_OUT_OF_MEMORY; goto out; } } #ifdef USE_UNIX_SOCKETS if(data->set.str[STRING_UNIX_SOCKET_PATH]) { conn->unix_domain_socket = strdup(data->set.str[STRING_UNIX_SOCKET_PATH]); if(conn->unix_domain_socket == NULL) { result = CURLE_OUT_OF_MEMORY; goto out; | > > > > > > > > | 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 | if(data->set.str[STRING_BEARER]) { conn->oauth_bearer = strdup(data->set.str[STRING_BEARER]); if(!conn->oauth_bearer) { result = CURLE_OUT_OF_MEMORY; goto out; } } if(data->set.str[STRING_SASL_AUTHZID]) { conn->sasl_authzid = strdup(data->set.str[STRING_SASL_AUTHZID]); if(!conn->sasl_authzid) { result = CURLE_OUT_OF_MEMORY; goto out; } } #ifdef USE_UNIX_SOCKETS if(data->set.str[STRING_UNIX_SOCKET_PATH]) { conn->unix_domain_socket = strdup(data->set.str[STRING_UNIX_SOCKET_PATH]); if(conn->unix_domain_socket == NULL) { result = CURLE_OUT_OF_MEMORY; goto out; |
︙ | ︙ | |||
4158 4159 4160 4161 4162 4163 4164 | default: family = 0; break; } return family; } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 4032 4033 4034 4035 4036 4037 4038 | default: family = 0; break; } return family; } |
Changes to jni/curl/lib/url.h.
︙ | ︙ | |||
49 50 51 52 53 54 55 | void Curl_freeset(struct Curl_easy * data); CURLcode Curl_uc_to_curlcode(CURLUcode uc); CURLcode Curl_close(struct Curl_easy *data); /* opposite of curl_open() */ CURLcode Curl_connect(struct Curl_easy *, bool *async, bool *protocol_connect); CURLcode Curl_disconnect(struct Curl_easy *data, struct connectdata *, bool dead_connection); | < < < < < < < < < < < < < | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | void Curl_freeset(struct Curl_easy * data); CURLcode Curl_uc_to_curlcode(CURLUcode uc); CURLcode Curl_close(struct Curl_easy *data); /* opposite of curl_open() */ CURLcode Curl_connect(struct Curl_easy *, bool *async, bool *protocol_connect); CURLcode Curl_disconnect(struct Curl_easy *data, struct connectdata *, bool dead_connection); CURLcode Curl_setup_conn(struct connectdata *conn, bool *protocol_done); void Curl_free_request_state(struct Curl_easy *data); CURLcode Curl_parse_login_details(const char *login, const size_t len, char **userptr, char **passwdptr, char **optionsptr); const struct Curl_handler *Curl_builtin_scheme(const char *scheme); #define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */ #define CURL_DEFAULT_HTTPS_PROXY_PORT 443 /* default https proxy port unless specified */ #ifdef CURL_DISABLE_VERBOSE_STRINGS #define Curl_verboseconnect(x) Curl_nop_stmt #else void Curl_verboseconnect(struct connectdata *conn); #endif #define CONNECT_PROXY_SSL()\ |
︙ | ︙ |
Changes to jni/curl/lib/urlapi.c.
︙ | ︙ | |||
25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include "urldata.h" #include "urlapi-int.h" #include "strcase.h" #include "dotdot.h" #include "url.h" #include "escape.h" #include "curl_ctype.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" /* MSDOS/Windows style drive prefix, eg c: in c:foo */ | > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include "urldata.h" #include "urlapi-int.h" #include "strcase.h" #include "dotdot.h" #include "url.h" #include "escape.h" #include "curl_ctype.h" #include "inet_pton.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" /* MSDOS/Windows style drive prefix, eg c: in c:foo */ |
︙ | ︙ | |||
587 588 589 590 591 592 593 | return CURLUE_MALFORMED_INPUT; } return CURLUE_OK; } static CURLUcode hostname_check(struct Curl_URL *u, char *hostname) { | < > > < | > > < > | 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 | return CURLUE_MALFORMED_INPUT; } return CURLUE_OK; } static CURLUcode hostname_check(struct Curl_URL *u, char *hostname) { size_t len; size_t hlen = strlen(hostname); if(hostname[0] == '[') { char dest[16]; /* fits a binary IPv6 address */ const char *l = "0123456789abcdefABCDEF:."; hostname++; hlen -= 2; if(hostname[hlen] != ']') return CURLUE_MALFORMED_INPUT; /* only valid letters are ok */ len = strspn(hostname, l); if(hlen != len) { hlen = len; if(hostname[len] == '%') { /* this could now be '%[zone id]' */ char zoneid[16]; int i = 0; char *h = &hostname[len + 1]; /* pass '25' if present and is a url encoded percent sign */ if(!strncmp(h, "25", 2) && h[2] && (h[2] != ']')) |
︙ | ︙ | |||
624 625 626 627 628 629 630 631 632 633 634 635 636 637 | hostname[len] = ']'; /* insert end bracket */ hostname[len + 1] = 0; /* terminate the hostname */ } else return CURLUE_MALFORMED_INPUT; /* hostname is fine */ } } else { /* letters from the second string is not ok */ len = strcspn(hostname, " "); if(hlen != len) /* hostname with bad content */ return CURLUE_MALFORMED_INPUT; | > > > > > > | 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 | hostname[len] = ']'; /* insert end bracket */ hostname[len + 1] = 0; /* terminate the hostname */ } else return CURLUE_MALFORMED_INPUT; /* hostname is fine */ } #ifdef ENABLE_IPV6 hostname[hlen] = 0; /* end the address there */ if(1 != Curl_inet_pton(AF_INET6, hostname, dest)) return CURLUE_MALFORMED_INPUT; hostname[hlen] = ']'; /* restore ending bracket */ #endif } else { /* letters from the second string is not ok */ len = strcspn(hostname, " "); if(hlen != len) /* hostname with bad content */ return CURLUE_MALFORMED_INPUT; |
︙ | ︙ |
Changes to jni/curl/lib/urldata.h.
︙ | ︙ | |||
125 126 127 128 129 130 131 132 133 134 135 136 137 138 | #include "file.h" #include "ssh.h" #include "http.h" #include "rtsp.h" #include "smb.h" #include "wildcard.h" #include "multihandle.h" #ifdef HAVE_GSSAPI # ifdef HAVE_GSSGNU # include <gss.h> # elif defined HAVE_GSSAPI_GSSAPI_H # include <gssapi/gssapi.h> # else | > | 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | #include "file.h" #include "ssh.h" #include "http.h" #include "rtsp.h" #include "smb.h" #include "wildcard.h" #include "multihandle.h" #include "quic.h" #ifdef HAVE_GSSAPI # ifdef HAVE_GSSGNU # include <gss.h> # elif defined HAVE_GSSAPI_GSSAPI_H # include <gssapi/gssapi.h> # else |
︙ | ︙ | |||
400 401 402 403 404 405 406 407 408 409 410 411 412 413 | /* always modify bits.close with the connclose() and connkeep() macros! */ bool proxy_ssl_connected[2]; /* TRUE when SSL initialization for HTTPS proxy is complete */ bool tcpconnect[2]; /* the TCP layer (or similar) is connected, this is set the first time on the first connect function call */ bit close:1; /* if set, we close the connection after this request */ bit reuse:1; /* if set, this is a re-used connection */ bit conn_to_host:1; /* if set, this connection has a "connect to host" that overrides the host in the URL */ bit conn_to_port:1; /* if set, this connection has a "connect to port" that overrides the port in the URL (remote port) */ bit proxy:1; /* if set, this transfer is done through a proxy - any type */ bit httpproxy:1; /* if set, this transfer is done through a http proxy */ bit socksproxy:1; /* if set, this transfer is done through a socks proxy */ | > | 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 | /* always modify bits.close with the connclose() and connkeep() macros! */ bool proxy_ssl_connected[2]; /* TRUE when SSL initialization for HTTPS proxy is complete */ bool tcpconnect[2]; /* the TCP layer (or similar) is connected, this is set the first time on the first connect function call */ bit close:1; /* if set, we close the connection after this request */ bit reuse:1; /* if set, this is a re-used connection */ bit altused:1; /* this is an alt-svc "redirect" */ bit conn_to_host:1; /* if set, this connection has a "connect to host" that overrides the host in the URL */ bit conn_to_port:1; /* if set, this connection has a "connect to port" that overrides the port in the URL (remote port) */ bit proxy:1; /* if set, this transfer is done through a proxy - any type */ bit httpproxy:1; /* if set, this transfer is done through a http proxy */ bit socksproxy:1; /* if set, this transfer is done through a socks proxy */ |
︙ | ︙ | |||
659 660 661 662 663 664 665 | /* See above. */ CURLcode (*connecting)(struct connectdata *, bool *done); CURLcode (*doing)(struct connectdata *, bool *done); /* Called from the multi interface during the PROTOCONNECT phase, and it should then return a proper fd set */ int (*proto_getsock)(struct connectdata *conn, | | < | < | < | < | 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 | /* See above. */ CURLcode (*connecting)(struct connectdata *, bool *done); CURLcode (*doing)(struct connectdata *, bool *done); /* Called from the multi interface during the PROTOCONNECT phase, and it should then return a proper fd set */ int (*proto_getsock)(struct connectdata *conn, curl_socket_t *socks); /* Called from the multi interface during the DOING phase, and it should then return a proper fd set */ int (*doing_getsock)(struct connectdata *conn, curl_socket_t *socks); /* Called from the multi interface during the DO_MORE phase, and it should then return a proper fd set */ int (*domore_getsock)(struct connectdata *conn, curl_socket_t *socks); /* Called from the multi interface during the DO_DONE, PERFORM and WAITPERFORM phases, and it should then return a proper fd set. Not setting this will make libcurl use the generic default one. */ int (*perform_getsock)(const struct connectdata *conn, curl_socket_t *socks); /* This function *MAY* be set to a protocol-dependent function that is run * by the curl_disconnect(), as a step in the disconnection. If the handler * is called because the connection has been considered dead, dead_connection * is set to TRUE. */ CURLcode (*disconnect)(struct connectdata *, bool dead_connection); |
︙ | ︙ | |||
778 779 780 781 782 783 784 785 786 787 788 789 790 791 | TUNNEL_CONNECT, /* CONNECT has been sent off */ TUNNEL_COMPLETE /* CONNECT response received completely */ } tunnel_state; bit chunked_encoding:1; bit close_connection:1; }; /* * The connectdata struct contains all fields and variables that should be * unique for an entire connection. */ struct connectdata { /* 'data' is the CURRENT Curl_easy using this connection -- take great caution that this might very well vary between different times this | > > | 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 | TUNNEL_CONNECT, /* CONNECT has been sent off */ TUNNEL_COMPLETE /* CONNECT response received completely */ } tunnel_state; bit chunked_encoding:1; bit close_connection:1; }; struct ldapconninfo; /* * The connectdata struct contains all fields and variables that should be * unique for an entire connection. */ struct connectdata { /* 'data' is the CURRENT Curl_easy using this connection -- take great caution that this might very well vary between different times this |
︙ | ︙ | |||
827 828 829 830 831 832 833 | /* 'ip_addr_str' is the ip_addr data as a human readable string. It remains available as long as the connection does, which is longer than the ip_addr itself. */ char ip_addr_str[MAX_IPADR_LEN]; unsigned int scope_id; /* Scope id for IPv6 */ | > > > > > | > > > > | 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 | /* 'ip_addr_str' is the ip_addr data as a human readable string. It remains available as long as the connection does, which is longer than the ip_addr itself. */ char ip_addr_str[MAX_IPADR_LEN]; unsigned int scope_id; /* Scope id for IPv6 */ enum { TRNSPRT_TCP = 3, TRNSPRT_UDP = 4, TRNSPRT_QUIC = 5 } transport; #ifdef ENABLE_QUIC struct quicsocket hequic[2]; /* two, for happy eyeballs! */ struct quicsocket *quic; #endif struct hostname host; char *hostname_resolve; /* host name to resolve to address, allocated */ char *secondaryhostname; /* secondary socket host name (ftp) */ struct hostname conn_to_host; /* the host to connect to. valid only if bits.conn_to_host is set */ |
︙ | ︙ | |||
866 867 868 869 870 871 872 | char local_ip[MAX_IPADR_LEN]; long local_port; char *user; /* user name string, allocated */ char *passwd; /* password string, allocated */ char *options; /* options string, allocated */ | | > | 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 | char local_ip[MAX_IPADR_LEN]; long local_port; char *user; /* user name string, allocated */ char *passwd; /* password string, allocated */ char *options; /* options string, allocated */ char *oauth_bearer; /* bearer token for OAuth 2.0, allocated */ char *sasl_authzid; /* authorisation identity string, allocated */ int httpversion; /* the HTTP version*10 reported by the server */ int rtspversion; /* the RTSP version*10 reported by the server */ struct curltime now; /* "current" time */ struct curltime created; /* creation time */ struct curltime lastused; /* when returned to the connection cache */ |
︙ | ︙ | |||
900 901 902 903 904 905 906 | /* connecttime: when connect() is called on the current IP address. Used to be able to track when to move on to try next IP - but only when the multi interface is used. */ struct curltime connecttime; /* The two fields below get set in Curl_connecthost */ int num_addr; /* number of addresses to try to connect to */ | | | | 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 | /* connecttime: when connect() is called on the current IP address. Used to be able to track when to move on to try next IP - but only when the multi interface is used. */ struct curltime connecttime; /* The two fields below get set in Curl_connecthost */ int num_addr; /* number of addresses to try to connect to */ timediff_t timeoutms_per_addr; /* how long time in milliseconds to spend on trying to connect to each IP address */ const struct Curl_handler *handler; /* Connection's protocol handler */ const struct Curl_handler *given; /* The protocol first given */ long ip_version; /* copied from the Curl_easy at creation time */ /* Protocols can use a custom keepalive mechanism to keep connections alive. |
︙ | ︙ | |||
1006 1007 1008 1009 1010 1011 1012 | struct ssh_conn sshc; struct tftp_state_data *tftpc; struct imap_conn imapc; struct pop3_conn pop3c; struct smtp_conn smtpc; struct rtsp_conn rtspc; struct smb_conn smbc; | | > | 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 | struct ssh_conn sshc; struct tftp_state_data *tftpc; struct imap_conn imapc; struct pop3_conn pop3c; struct smtp_conn smtpc; struct rtsp_conn rtspc; struct smb_conn smbc; void *rtmp; struct ldapconninfo *ldapc; } proto; int cselect_bits; /* bitmask of socket events */ int waitfor; /* current READ/WRITE bits to wait for */ #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) int socks5_gssapi_enctype; |
︙ | ︙ | |||
1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 | curl_off_t header_size; /* size of read header(s) in bytes */ curl_off_t request_size; /* the amount of bytes sent in the request(s) */ unsigned long proxyauthavail; /* what proxy auth types were announced */ unsigned long httpauthavail; /* what host auth types were announced */ long numconnects; /* how many new connection did libcurl created */ char *contenttype; /* the content type of the object */ char *wouldredirect; /* URL this would've been redirected to if asked to */ /* PureInfo members 'conn_primary_ip', 'conn_primary_port', 'conn_local_ip' and, 'conn_local_port' are copied over from the connectdata struct in order to allow curl_easy_getinfo() to return this information even when the session handle is no longer associated with a connection, and also allow curl_easy_reset() to clear this information from the session handle without disturbing information which is still alive, and that might be reused, in the connection cache. */ char conn_primary_ip[MAX_IPADR_LEN]; long conn_primary_port; char conn_local_ip[MAX_IPADR_LEN]; long conn_local_port; const char *conn_scheme; unsigned int conn_protocol; struct curl_certinfo certs; /* info about the certs, only populated in OpenSSL, GnuTLS, Schannel, NSS and GSKit builds. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ | > < | | | | | | | | 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 | curl_off_t header_size; /* size of read header(s) in bytes */ curl_off_t request_size; /* the amount of bytes sent in the request(s) */ unsigned long proxyauthavail; /* what proxy auth types were announced */ unsigned long httpauthavail; /* what host auth types were announced */ long numconnects; /* how many new connection did libcurl created */ char *contenttype; /* the content type of the object */ char *wouldredirect; /* URL this would've been redirected to if asked to */ curl_off_t retry_after; /* info from Retry-After: header */ /* PureInfo members 'conn_primary_ip', 'conn_primary_port', 'conn_local_ip' and, 'conn_local_port' are copied over from the connectdata struct in order to allow curl_easy_getinfo() to return this information even when the session handle is no longer associated with a connection, and also allow curl_easy_reset() to clear this information from the session handle without disturbing information which is still alive, and that might be reused, in the connection cache. */ char conn_primary_ip[MAX_IPADR_LEN]; long conn_primary_port; char conn_local_ip[MAX_IPADR_LEN]; long conn_local_port; const char *conn_scheme; unsigned int conn_protocol; struct curl_certinfo certs; /* info about the certs, only populated in OpenSSL, GnuTLS, Schannel, NSS and GSKit builds. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ bit timecond:1; /* set to TRUE if the time condition didn't match, which thus made the document NOT get fetched */ }; struct Progress { time_t lastshow; /* time() of the last displayed progress meter or NULL to force redraw at next call */ curl_off_t size_dl; /* total expected size */ curl_off_t size_ul; /* total expected size */ curl_off_t downloaded; /* transferred so far */ curl_off_t uploaded; /* transferred so far */ curl_off_t current_speed; /* uses the currently fastest transfer */ int width; /* screen width at download start */ int flags; /* see progress.h */ timediff_t timespent; curl_off_t dlspeed; curl_off_t ulspeed; timediff_t t_nslookup; timediff_t t_connect; timediff_t t_appconnect; timediff_t t_pretransfer; timediff_t t_starttransfer; timediff_t t_redirect; struct curltime start; struct curltime t_startsingle; struct curltime t_startop; struct curltime t_acceptdata; |
︙ | ︙ | |||
1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 | EXPIRE_HAPPY_EYEBALLS_DNS, /* See asyn-ares.c */ EXPIRE_HAPPY_EYEBALLS, EXPIRE_MULTI_PENDING, EXPIRE_RUN_NOW, EXPIRE_SPEEDCHECK, EXPIRE_TIMEOUT, EXPIRE_TOOFAST, EXPIRE_LAST /* not an actual timer, used as a marker only */ } expire_id; typedef enum { TRAILERS_NONE, TRAILERS_INITIALIZED, | > | 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 | EXPIRE_HAPPY_EYEBALLS_DNS, /* See asyn-ares.c */ EXPIRE_HAPPY_EYEBALLS, EXPIRE_MULTI_PENDING, EXPIRE_RUN_NOW, EXPIRE_SPEEDCHECK, EXPIRE_TIMEOUT, EXPIRE_TOOFAST, EXPIRE_QUIC, EXPIRE_LAST /* not an actual timer, used as a marker only */ } expire_id; typedef enum { TRAILERS_NONE, TRAILERS_INITIALIZED, |
︙ | ︙ | |||
1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 | STRING_UNIX_SOCKET_PATH, /* path to Unix socket, if used */ #endif STRING_TARGET, /* CURLOPT_REQUEST_TARGET */ STRING_DOH, /* CURLOPT_DOH_URL */ #ifdef USE_ALTSVC STRING_ALTSVC, /* CURLOPT_ALTSVC */ #endif /* -- end of zero-terminated strings -- */ STRING_LASTZEROTERMINATED, /* -- below this are pointers to binary data that cannot be strdup'ed. --- */ STRING_COPYPOSTFIELDS, /* if POST, set the fields' values here */ | > > > > | 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 | STRING_UNIX_SOCKET_PATH, /* path to Unix socket, if used */ #endif STRING_TARGET, /* CURLOPT_REQUEST_TARGET */ STRING_DOH, /* CURLOPT_DOH_URL */ #ifdef USE_ALTSVC STRING_ALTSVC, /* CURLOPT_ALTSVC */ #endif STRING_SASL_AUTHZID, /* CURLOPT_SASL_AUTHZID */ #ifndef CURL_DISABLE_PROXY STRING_TEMP_URL, /* temp URL storage for proxy use */ #endif /* -- end of zero-terminated strings -- */ STRING_LASTZEROTERMINATED, /* -- below this are pointers to binary data that cannot be strdup'ed. --- */ STRING_COPYPOSTFIELDS, /* if POST, set the fields' values here */ |
︙ | ︙ |
Changes to jni/curl/lib/vauth/digest_sspi.c.
︙ | ︙ | |||
56 57 58 59 60 61 62 63 64 65 66 67 68 69 | { PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for Digest */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_DIGEST), &SecurityPackage); return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_create_digest_md5_message() * | > > > > > | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | { PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for Digest */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_DIGEST), &SecurityPackage); /* Release the package buffer as it is not required anymore */ if(status == SEC_E_OK) { s_pSecFn->FreeContextBuffer(SecurityPackage); } return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_create_digest_md5_message() * |
︙ | ︙ | |||
216 217 218 219 220 221 222 | else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) { s_pSecFn->FreeCredentialsHandle(&credentials); Curl_sspi_free_identity(p_identity); free(spn); free(output_token); free(input_token); | > > > | | 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) { s_pSecFn->FreeCredentialsHandle(&credentials); Curl_sspi_free_identity(p_identity); free(spn); free(output_token); free(input_token); if(status == SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } /* Base64 encode the response */ result = Curl_base64_encode(data, (char *) output_token, resp_buf.cbBuffer, outptr, outlen); /* Free our handles */ |
︙ | ︙ | |||
603 604 605 606 607 608 609 | s_pSecFn->FreeCredentialsHandle(&credentials); Curl_sspi_free_identity(p_identity); free(output_token); Curl_safefree(digest->http_context); | > | > > | 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 | s_pSecFn->FreeCredentialsHandle(&credentials); Curl_sspi_free_identity(p_identity); free(output_token); Curl_safefree(digest->http_context); if(status == SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } output_token_len = resp_buf.cbBuffer; s_pSecFn->FreeCredentialsHandle(&credentials); Curl_sspi_free_identity(p_identity); } |
︙ | ︙ |
Changes to jni/curl/lib/vauth/krb5_gssapi.c.
︙ | ︙ | |||
117 118 119 120 121 122 123 | GSS_C_NT_HOSTBASED_SERVICE, &krb5->spn); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_import_name() failed: ", major_status, minor_status); free(spn); | | | 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | GSS_C_NT_HOSTBASED_SERVICE, &krb5->spn); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_import_name() failed: ", major_status, minor_status); free(spn); return CURLE_AUTH_ERROR; } free(spn); } if(chlg64 && *chlg64) { /* Decode the base-64 encoded challenge message */ |
︙ | ︙ | |||
164 165 166 167 168 169 170 | if(GSS_ERROR(major_status)) { if(output_token.value) gss_release_buffer(&unused_status, &output_token); Curl_gss_log_error(data, "gss_init_sec_context() failed: ", major_status, minor_status); | | | 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | if(GSS_ERROR(major_status)) { if(output_token.value) gss_release_buffer(&unused_status, &output_token); Curl_gss_log_error(data, "gss_init_sec_context() failed: ", major_status, minor_status); return CURLE_AUTH_ERROR; } if(output_token.value && output_token.length) { /* Base64 encode the response */ result = Curl_base64_encode(data, (char *) output_token.value, output_token.length, outptr, outlen); |
︙ | ︙ | |||
248 249 250 251 252 253 254 | NULL, NULL); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_inquire_context() failed: ", major_status, minor_status); free(chlg); | | | | 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | NULL, NULL); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_inquire_context() failed: ", major_status, minor_status); free(chlg); return CURLE_AUTH_ERROR; } /* Convert the username from internal format to a displayable token */ major_status = gss_display_name(&minor_status, username, &username_token, NULL); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_display_name() failed: ", major_status, minor_status); free(chlg); return CURLE_AUTH_ERROR; } /* Setup the challenge "input" security buffer */ input_token.value = chlg; input_token.length = chlglen; /* Decrypt the inbound challenge and obtain the qop */ |
︙ | ︙ | |||
351 352 353 354 355 356 357 | &output_token); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_wrap() failed: ", major_status, minor_status); free(message); | | | 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 | &output_token); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_wrap() failed: ", major_status, minor_status); free(message); return CURLE_AUTH_ERROR; } /* Base64 encode the response */ result = Curl_base64_encode(data, (char *) output_token.value, output_token.length, outptr, outlen); /* Free the output buffer */ |
︙ | ︙ |
Changes to jni/curl/lib/vauth/krb5_sspi.c.
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for Kerberos */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_KERBEROS), &SecurityPackage); return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_create_gssapi_user_message() * | > > > > > | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for Kerberos */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_KERBEROS), &SecurityPackage); /* Release the package buffer as it is not required anymore */ if(status == SEC_E_OK) { s_pSecFn->FreeContextBuffer(SecurityPackage); } return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_create_gssapi_user_message() * |
︙ | ︙ | |||
212 213 214 215 216 217 218 219 220 | chlg ? &chlg_desc : NULL, 0, &context, &resp_desc, &attrs, &expiry); /* Free the decoded challenge as it is not required anymore */ free(chlg); if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) { | > > > > | | 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | chlg ? &chlg_desc : NULL, 0, &context, &resp_desc, &attrs, &expiry); /* Free the decoded challenge as it is not required anymore */ free(chlg); if(status == SEC_E_INSUFFICIENT_MEMORY) { return CURLE_OUT_OF_MEMORY; } if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) { return CURLE_AUTH_ERROR; } if(memcmp(&context, krb5->context, sizeof(context))) { s_pSecFn->DeleteSecurityContext(krb5->context); memcpy(krb5->context, &context, sizeof(context)); } |
︙ | ︙ | |||
305 306 307 308 309 310 311 | /* Get our response size information */ status = s_pSecFn->QueryContextAttributes(krb5->context, SECPKG_ATTR_SIZES, &sizes); if(status != SEC_E_OK) { free(chlg); | > | > > > > > | | 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | /* Get our response size information */ status = s_pSecFn->QueryContextAttributes(krb5->context, SECPKG_ATTR_SIZES, &sizes); if(status != SEC_E_OK) { free(chlg); if(status == SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } /* Get the fully qualified username back from the context */ status = s_pSecFn->QueryCredentialsAttributes(krb5->credentials, SECPKG_CRED_ATTR_NAMES, &names); if(status != SEC_E_OK) { free(chlg); if(status == SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } /* Setup the "input" security buffer */ input_desc.ulVersion = SECBUFFER_VERSION; input_desc.cBuffers = 2; input_desc.pBuffers = input_buf; input_buf[0].BufferType = SECBUFFER_STREAM; |
︙ | ︙ | |||
434 435 436 437 438 439 440 | status = s_pSecFn->EncryptMessage(krb5->context, KERB_WRAP_NO_ENCRYPT, &wrap_desc, 0); if(status != SEC_E_OK) { free(padding); free(message); free(trailer); | > | > > | 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 | status = s_pSecFn->EncryptMessage(krb5->context, KERB_WRAP_NO_ENCRYPT, &wrap_desc, 0); if(status != SEC_E_OK) { free(padding); free(message); free(trailer); if(status == SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } /* Allocate the encryption (wrap) buffer */ appdatalen = wrap_buf[0].cbBuffer + wrap_buf[1].cbBuffer + wrap_buf[2].cbBuffer; appdata = malloc(appdatalen); if(!appdata) { |
︙ | ︙ |
Changes to jni/curl/lib/vauth/ntlm_sspi.c.
︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 | { PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for NTLM */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NTLM), &SecurityPackage); return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_create_ntlm_type1_message() * | > > > > > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | { PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for NTLM */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NTLM), &SecurityPackage); /* Release the package buffer as it is not required anymore */ if(status == SEC_E_OK) { s_pSecFn->FreeContextBuffer(SecurityPackage); } return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_create_ntlm_type1_message() * |
︙ | ︙ | |||
165 166 167 168 169 170 171 172 | 0, 0, SECURITY_NETWORK_DREP, NULL, 0, ntlm->context, &type_1_desc, &attrs, &expiry); if(status == SEC_I_COMPLETE_NEEDED || status == SEC_I_COMPLETE_AND_CONTINUE) s_pSecFn->CompleteAuthToken(ntlm->context, &type_1_desc); else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) | > > | | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | 0, 0, SECURITY_NETWORK_DREP, NULL, 0, ntlm->context, &type_1_desc, &attrs, &expiry); if(status == SEC_I_COMPLETE_NEEDED || status == SEC_I_COMPLETE_AND_CONTINUE) s_pSecFn->CompleteAuthToken(ntlm->context, &type_1_desc); else if(status == SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) return CURLE_AUTH_ERROR; /* Base64 encode the response */ return Curl_base64_encode(data, (char *) ntlm->output_token, type_1_buf.cbBuffer, outptr, outlen); } /* |
︙ | ︙ | |||
312 313 314 315 316 317 318 | 0, ntlm->context, &type_3_desc, &attrs, &expiry); if(status != SEC_E_OK) { infof(data, "NTLM handshake failure (type-3 message): Status=%x\n", status); | > > > | | 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 | 0, ntlm->context, &type_3_desc, &attrs, &expiry); if(status != SEC_E_OK) { infof(data, "NTLM handshake failure (type-3 message): Status=%x\n", status); if(status == SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } /* Base64 encode the response */ result = Curl_base64_encode(data, (char *) ntlm->output_token, type_3_buf.cbBuffer, outptr, outlen); Curl_auth_cleanup_ntlm(ntlm); |
︙ | ︙ |
Changes to jni/curl/lib/vauth/spnego_gssapi.c.
︙ | ︙ | |||
117 118 119 120 121 122 123 | &nego->spn); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_import_name() failed: ", major_status, minor_status); free(spn); | | | 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | &nego->spn); if(GSS_ERROR(major_status)) { Curl_gss_log_error(data, "gss_import_name() failed: ", major_status, minor_status); free(spn); return CURLE_AUTH_ERROR; } free(spn); } if(chlg64 && *chlg64) { /* Decode the base-64 encoded challenge message */ |
︙ | ︙ | |||
166 167 168 169 170 171 172 | if(GSS_ERROR(major_status)) { if(output_token.value) gss_release_buffer(&unused_status, &output_token); Curl_gss_log_error(data, "gss_init_sec_context() failed: ", major_status, minor_status); | | | | 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | if(GSS_ERROR(major_status)) { if(output_token.value) gss_release_buffer(&unused_status, &output_token); Curl_gss_log_error(data, "gss_init_sec_context() failed: ", major_status, minor_status); return CURLE_AUTH_ERROR; } if(!output_token.value || !output_token.length) { if(output_token.value) gss_release_buffer(&unused_status, &output_token); return CURLE_AUTH_ERROR; } /* Free previous token */ if(nego->output_token.length && nego->output_token.value) gss_release_buffer(&unused_status, &nego->output_token); nego->output_token = output_token; |
︙ | ︙ |
Changes to jni/curl/lib/vauth/spnego_sspi.c.
︙ | ︙ | |||
54 55 56 57 58 59 60 61 62 63 64 65 66 67 | PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for Negotiate */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NEGOTIATE), &SecurityPackage); return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_decode_spnego_message() * | > > > > > > | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | PSecPkgInfo SecurityPackage; SECURITY_STATUS status; /* Query the security package for Negotiate */ status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NEGOTIATE), &SecurityPackage); /* Release the package buffer as it is not required anymore */ if(status == SEC_E_OK) { s_pSecFn->FreeContextBuffer(SecurityPackage); } return (status == SEC_E_OK ? TRUE : FALSE); } /* * Curl_auth_decode_spnego_message() * |
︙ | ︙ | |||
161 162 163 164 165 166 167 | nego->status = s_pSecFn->AcquireCredentialsHandle(NULL, (TCHAR *)TEXT(SP_NAME_NEGOTIATE), SECPKG_CRED_OUTBOUND, NULL, nego->p_identity, NULL, NULL, nego->credentials, &expiry); if(nego->status != SEC_E_OK) | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | nego->status = s_pSecFn->AcquireCredentialsHandle(NULL, (TCHAR *)TEXT(SP_NAME_NEGOTIATE), SECPKG_CRED_OUTBOUND, NULL, nego->p_identity, NULL, NULL, nego->credentials, &expiry); if(nego->status != SEC_E_OK) return CURLE_AUTH_ERROR; /* Allocate our new context handle */ nego->context = calloc(1, sizeof(CtxtHandle)); if(!nego->context) return CURLE_OUT_OF_MEMORY; } |
︙ | ︙ | |||
247 248 249 250 251 252 253 | /* Free the decoded challenge as it is not required anymore */ free(chlg); if(GSS_ERROR(nego->status)) { char buffer[STRERROR_LEN]; failf(data, "InitializeSecurityContext failed: %s", Curl_sspi_strerror(nego->status, buffer, sizeof(buffer))); | > > | > > > > > > > > > | | 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | /* Free the decoded challenge as it is not required anymore */ free(chlg); if(GSS_ERROR(nego->status)) { char buffer[STRERROR_LEN]; failf(data, "InitializeSecurityContext failed: %s", Curl_sspi_strerror(nego->status, buffer, sizeof(buffer))); if(nego->status == (DWORD)SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } if(nego->status == SEC_I_COMPLETE_NEEDED || nego->status == SEC_I_COMPLETE_AND_CONTINUE) { nego->status = s_pSecFn->CompleteAuthToken(nego->context, &resp_desc); if(GSS_ERROR(nego->status)) { char buffer[STRERROR_LEN]; failf(data, "CompleteAuthToken failed: %s", Curl_sspi_strerror(nego->status, buffer, sizeof(buffer))); if(nego->status == (DWORD)SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; return CURLE_AUTH_ERROR; } } nego->output_token_length = resp_buf.cbBuffer; return result; } |
︙ | ︙ |
Changes to jni/curl/lib/version.c.
︙ | ︙ | |||
23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include "curl_setup.h" #include <curl/curl.h> #include "urldata.h" #include "vtls/vtls.h" #include "http2.h" #include "ssh.h" #include "curl_printf.h" #ifdef USE_ARES # if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \ (defined(WIN32) || defined(__SYMBIAN32__)) # define CARES_STATICLIB # endif | > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include "curl_setup.h" #include <curl/curl.h> #include "urldata.h" #include "vtls/vtls.h" #include "http2.h" #include "ssh.h" #include "quic.h" #include "curl_printf.h" #ifdef USE_ARES # if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \ (defined(WIN32) || defined(__SYMBIAN32__)) # define CARES_STATICLIB # endif |
︙ | ︙ | |||
49 50 51 52 53 54 55 | #include <iconv.h> #endif #ifdef USE_LIBRTMP #include <librtmp/rtmp.h> #endif | < < < < < < < < < < < < | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <iconv.h> #endif #ifdef USE_LIBRTMP #include <librtmp/rtmp.h> #endif #ifdef HAVE_ZLIB_H #include <zlib.h> #ifdef __SYMBIAN32__ /* zlib pollutes the namespace with this definition */ #undef WIN32 #endif #endif |
︙ | ︙ | |||
98 99 100 101 102 103 104 | return msnprintf(buf, bufsz, "%u.%u.%u", major, minor, patch); } #endif char *curl_version(void) { static bool initialized; | | | 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | return msnprintf(buf, bufsz, "%u.%u.%u", major, minor, patch); } #endif char *curl_version(void) { static bool initialized; static char version[250]; char *ptr = version; size_t len; size_t left = sizeof(version); if(initialized) return version; |
︙ | ︙ | |||
168 169 170 171 172 173 174 | #else /* version unknown */ len = msnprintf(ptr, left, " iconv"); #endif /* _LIBICONV_VERSION */ left -= len; ptr += len; #endif | | < | | | < > | > > > > > | 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | #else /* version unknown */ len = msnprintf(ptr, left, " iconv"); #endif /* _LIBICONV_VERSION */ left -= len; ptr += len; #endif #ifdef USE_SSH if(left) { *ptr++=' '; left--; } len = Curl_ssh_version(ptr, left); left -= len; ptr += len; #endif #ifdef USE_NGHTTP2 len = Curl_http2_ver(ptr, left); left -= len; ptr += len; #endif #ifdef ENABLE_QUIC len = Curl_quic_ver(ptr, left); left -= len; ptr += len; #endif #ifdef USE_LIBRTMP { char suff[2]; if(RTMP_LIB_VERSION & 0xff) { suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1; suff[1] = '\0'; |
︙ | ︙ | |||
353 354 355 356 357 358 359 360 361 362 363 364 365 366 | | CURL_VERSION_CONV #endif #if defined(USE_TLS_SRP) | CURL_VERSION_TLSAUTH_SRP #endif #if defined(USE_NGHTTP2) | CURL_VERSION_HTTP2 #endif #if defined(USE_UNIX_SOCKETS) | CURL_VERSION_UNIX_SOCKETS #endif #if defined(USE_LIBPSL) | CURL_VERSION_PSL #endif | > > > | 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 | | CURL_VERSION_CONV #endif #if defined(USE_TLS_SRP) | CURL_VERSION_TLSAUTH_SRP #endif #if defined(USE_NGHTTP2) | CURL_VERSION_HTTP2 #endif #if defined(ENABLE_QUIC) | CURL_VERSION_HTTP3 #endif #if defined(USE_UNIX_SOCKETS) | CURL_VERSION_UNIX_SOCKETS #endif #if defined(USE_LIBPSL) | CURL_VERSION_PSL #endif |
︙ | ︙ | |||
381 382 383 384 385 386 387 388 389 390 391 392 393 394 | NULL, /* c-ares version */ 0, /* c-ares version numerical */ NULL, /* libidn version */ 0, /* iconv version */ NULL, /* ssh lib version */ 0, /* brotli_ver_num */ NULL, /* brotli version */ }; curl_version_info_data *curl_version_info(CURLversion stamp) { static bool initialized; #if defined(USE_SSH) static char ssh_buffer[80]; | > > > | 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 | NULL, /* c-ares version */ 0, /* c-ares version numerical */ NULL, /* libidn version */ 0, /* iconv version */ NULL, /* ssh lib version */ 0, /* brotli_ver_num */ NULL, /* brotli version */ 0, /* nghttp2 version number */ NULL, /* nghttp2 version string */ NULL /* quic library string */ }; curl_version_info_data *curl_version_info(CURLversion stamp) { static bool initialized; #if defined(USE_SSH) static char ssh_buffer[80]; |
︙ | ︙ | |||
442 443 444 445 446 447 448 | version_info.iconv_ver_num = _LIBICONV_VERSION; #else /* version unknown */ version_info.iconv_ver_num = -1; #endif /* _LIBICONV_VERSION */ #endif | | | < < < > > > > > > > > > > > > > > > > | 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 | version_info.iconv_ver_num = _LIBICONV_VERSION; #else /* version unknown */ version_info.iconv_ver_num = -1; #endif /* _LIBICONV_VERSION */ #endif #if defined(USE_SSH) Curl_ssh_version(ssh_buffer, sizeof(ssh_buffer)); version_info.libssh_version = ssh_buffer; #endif #ifdef HAVE_BROTLI version_info.brotli_ver_num = BrotliDecoderVersion(); brotli_version(brotli_buffer, sizeof(brotli_buffer)); version_info.brotli_version = brotli_buffer; #endif #ifdef USE_NGHTTP2 { nghttp2_info *h2 = nghttp2_version(0); version_info.nghttp2_ver_num = h2->version_num; version_info.nghttp2_version = h2->version_str; } #endif #ifdef ENABLE_QUIC { static char quicbuffer[80]; Curl_quic_ver(quicbuffer, sizeof(quicbuffer)); version_info.quic_version = quicbuffer; } #endif (void)stamp; /* avoid compiler warnings, we don't use this */ initialized = true; return &version_info; } |
Added jni/curl/lib/vquic/ngtcp2.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #ifdef USE_NGTCP2 #include <ngtcp2/ngtcp2.h> #include <ngtcp2/ngtcp2_crypto.h> #include <nghttp3/nghttp3.h> #include <openssl/err.h> #include "urldata.h" #include "sendf.h" #include "strdup.h" #include "rand.h" #include "ngtcp2.h" #include "multiif.h" #include "strcase.h" #include "connect.h" #include "strerror.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" /* #define DEBUG_NGTCP2 */ #define DEBUG_HTTP3 #ifdef DEBUG_HTTP3 #define H3BUGF(x) x #else #define H3BUGF(x) do { } WHILE_FALSE #endif /* * This holds outgoing HTTP/3 stream data that is used by nghttp3 until acked. * It is used as a circular buffer. Add new bytes at the end until it reaches * the far end, then start over at index 0 again. */ #define H3_SEND_SIZE (20*1024) struct h3out { uint8_t buf[H3_SEND_SIZE]; size_t used; /* number of bytes used in the buffer */ size_t windex; /* index in the buffer where to start writing the next data block */ }; #define QUIC_MAX_STREAMS (256*1024) #define QUIC_MAX_DATA (1*1024*1024) #define QUIC_IDLE_TIMEOUT 60000 /* milliseconds */ #define QUIC_CIPHERS \ "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_" \ "POLY1305_SHA256:TLS_AES_128_CCM_SHA256" #define QUIC_GROUPS "P-256:X25519:P-384:P-521" static CURLcode ng_process_ingress(struct connectdata *conn, curl_socket_t sockfd, struct quicsocket *qs); static CURLcode ng_flush_egress(struct connectdata *conn, int sockfd, struct quicsocket *qs); static int cb_h3_acked_stream_data(nghttp3_conn *conn, int64_t stream_id, size_t datalen, void *user_data, void *stream_user_data); static ngtcp2_tstamp timestamp(void) { struct curltime ct = Curl_now(); return ct.tv_sec * NGTCP2_SECONDS + ct.tv_usec * NGTCP2_MICROSECONDS; } #ifdef DEBUG_NGTCP2 static void quic_printf(void *user_data, const char *fmt, ...) { va_list ap; (void)user_data; /* TODO, use this to do infof() instead long-term */ va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); fprintf(stderr, "\n"); } #endif static ngtcp2_crypto_level quic_from_ossl_level(OSSL_ENCRYPTION_LEVEL ossl_level) { switch(ossl_level) { case ssl_encryption_initial: return NGTCP2_CRYPTO_LEVEL_INITIAL; case ssl_encryption_early_data: return NGTCP2_CRYPTO_LEVEL_EARLY; case ssl_encryption_handshake: return NGTCP2_CRYPTO_LEVEL_HANDSHAKE; case ssl_encryption_application: return NGTCP2_CRYPTO_LEVEL_APP; default: assert(0); } } static int setup_initial_crypto_context(struct quicsocket *qs) { const ngtcp2_cid *dcid = ngtcp2_conn_get_dcid(qs->qconn); if(ngtcp2_crypto_derive_and_install_initial_key( qs->qconn, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, dcid, NGTCP2_CRYPTO_SIDE_CLIENT) != 0) return -1; return 0; } static void quic_settings(ngtcp2_settings *s, uint64_t stream_buffer_size) { ngtcp2_settings_default(s); #ifdef DEBUG_NGTCP2 s->log_printf = quic_printf; #else s->log_printf = NULL; #endif s->initial_ts = timestamp(); s->max_stream_data_bidi_local = stream_buffer_size; s->max_stream_data_bidi_remote = QUIC_MAX_STREAMS; s->max_stream_data_uni = QUIC_MAX_STREAMS; s->max_data = QUIC_MAX_DATA; s->max_streams_bidi = 1; s->max_streams_uni = 3; s->idle_timeout = QUIC_IDLE_TIMEOUT; } static FILE *keylog_file; /* not thread-safe */ static void keylog_callback(const SSL *ssl, const char *line) { (void)ssl; fputs(line, keylog_file); fputc('\n', keylog_file); fflush(keylog_file); } static int init_ngh3_conn(struct quicsocket *qs); static int quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL ossl_level, const uint8_t *rx_secret, const uint8_t *tx_secret, size_t secretlen) { struct quicsocket *qs = (struct quicsocket *)SSL_get_app_data(ssl); int level = quic_from_ossl_level(ossl_level); if(ngtcp2_crypto_derive_and_install_key( qs->qconn, ssl, NULL, NULL, NULL, NULL, NULL, NULL, level, rx_secret, tx_secret, secretlen, NGTCP2_CRYPTO_SIDE_CLIENT) != 0) return 0; if(level == NGTCP2_CRYPTO_LEVEL_APP && init_ngh3_conn(qs) != CURLE_OK) return 0; return 1; } static int quic_add_handshake_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL ossl_level, const uint8_t *data, size_t len) { struct quicsocket *qs = (struct quicsocket *)SSL_get_app_data(ssl); struct quic_handshake *crypto_data; ngtcp2_crypto_level level = quic_from_ossl_level(ossl_level); int rv; crypto_data = &qs->client_crypto_data[level]; if(crypto_data->buf == NULL) { crypto_data->buf = malloc(4096); crypto_data->alloclen = 4096; /* TODO Explode if malloc failed */ } /* TODO Just pretend that handshake does not grow more than 4KiB for now */ assert(crypto_data->len + len <= crypto_data->alloclen); memcpy(&crypto_data->buf[crypto_data->len], data, len); crypto_data->len += len; rv = ngtcp2_conn_submit_crypto_data( qs->qconn, level, (uint8_t *)(&crypto_data->buf[crypto_data->len] - len), len); if(rv) { fprintf(stderr, "write_client_handshake failed\n"); } assert(0 == rv); return 1; } static int quic_flush_flight(SSL *ssl) { (void)ssl; return 1; } static int quic_send_alert(SSL *ssl, enum ssl_encryption_level_t level, uint8_t alert) { struct quicsocket *qs = (struct quicsocket *)SSL_get_app_data(ssl); (void)level; qs->tls_alert = alert; return 1; } static SSL_QUIC_METHOD quic_method = {quic_set_encryption_secrets, quic_add_handshake_data, quic_flush_flight, quic_send_alert}; static SSL_CTX *quic_ssl_ctx(struct Curl_easy *data) { SSL_CTX *ssl_ctx = SSL_CTX_new(TLS_method()); const char *keylog_filename; SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_3_VERSION); SSL_CTX_set_max_proto_version(ssl_ctx, TLS1_3_VERSION); SSL_CTX_set_default_verify_paths(ssl_ctx); if(SSL_CTX_set_ciphersuites(ssl_ctx, QUIC_CIPHERS) != 1) { failf(data, "SSL_CTX_set_ciphersuites: %s", ERR_error_string(ERR_get_error(), NULL)); return NULL; } if(SSL_CTX_set1_groups_list(ssl_ctx, QUIC_GROUPS) != 1) { failf(data, "SSL_CTX_set1_groups_list failed"); return NULL; } SSL_CTX_set_quic_method(ssl_ctx, &quic_method); keylog_filename = getenv("SSLKEYLOGFILE"); if(keylog_filename) { keylog_file = fopen(keylog_filename, "wb"); if(keylog_file) { SSL_CTX_set_keylog_callback(ssl_ctx, keylog_callback); } } return ssl_ctx; } /** SSL callbacks ***/ static int quic_init_ssl(struct quicsocket *qs) { const uint8_t *alpn = NULL; size_t alpnlen = 0; /* this will need some attention when HTTPS proxy over QUIC get fixed */ const char * const hostname = qs->conn->host.name; if(qs->ssl) SSL_free(qs->ssl); qs->ssl = SSL_new(qs->sslctx); SSL_set_app_data(qs->ssl, qs); SSL_set_connect_state(qs->ssl); switch(qs->version) { #ifdef NGTCP2_PROTO_VER case NGTCP2_PROTO_VER: alpn = (const uint8_t *)NGTCP2_ALPN_H3; alpnlen = sizeof(NGTCP2_ALPN_H3) - 1; break; #endif } if(alpn) SSL_set_alpn_protos(qs->ssl, alpn, (int)alpnlen); /* set SNI */ SSL_set_tlsext_host_name(qs->ssl, hostname); return 0; } static int cb_initial(ngtcp2_conn *quic, void *user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; if(ngtcp2_crypto_read_write_crypto_data( quic, qs->ssl, NGTCP2_CRYPTO_LEVEL_INITIAL, NULL, 0) != 0) return NGTCP2_ERR_CALLBACK_FAILURE; return 0; } static int cb_recv_crypto_data(ngtcp2_conn *tconn, ngtcp2_crypto_level crypto_level, uint64_t offset, const uint8_t *data, size_t datalen, void *user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; (void)offset; if(ngtcp2_crypto_read_write_crypto_data(tconn, qs->ssl, crypto_level, data, datalen) != 0) return NGTCP2_ERR_CRYPTO; return 0; } static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; (void)tconn; infof(qs->conn->data, "QUIC handshake is completed\n"); return 0; } static int cb_recv_stream_data(ngtcp2_conn *tconn, int64_t stream_id, int fin, uint64_t offset, const uint8_t *buf, size_t buflen, void *user_data, void *stream_user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; ssize_t nconsumed; (void)offset; (void)stream_user_data; infof(qs->conn->data, "Received %ld bytes data on stream %u\n", buflen, stream_id); nconsumed = nghttp3_conn_read_stream(qs->h3conn, stream_id, buf, buflen, fin); if(nconsumed < 0) { failf(qs->conn->data, "nghttp3_conn_read_stream returned error: %s\n", nghttp3_strerror((int)nconsumed)); return NGTCP2_ERR_CALLBACK_FAILURE; } ngtcp2_conn_extend_max_stream_offset(tconn, stream_id, nconsumed); ngtcp2_conn_extend_max_offset(tconn, nconsumed); return 0; } static int cb_acked_stream_data_offset(ngtcp2_conn *tconn, int64_t stream_id, uint64_t offset, size_t datalen, void *user_data, void *stream_user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; int rv; (void)stream_id; (void)tconn; (void)offset; (void)datalen; (void)stream_user_data; rv = nghttp3_conn_add_ack_offset(qs->h3conn, stream_id, datalen); if(rv != 0) { failf(qs->conn->data, "nghttp3_conn_add_ack_offset returned error: %s\n", nghttp3_strerror(rv)); return NGTCP2_ERR_CALLBACK_FAILURE; } return 0; } static int cb_stream_close(ngtcp2_conn *tconn, int64_t stream_id, uint64_t app_error_code, void *user_data, void *stream_user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; int rv; (void)tconn; (void)stream_user_data; /* stream is closed... */ rv = nghttp3_conn_close_stream(qs->h3conn, stream_id, app_error_code); if(rv != 0) { failf(qs->conn->data, "nghttp3_conn_close_stream returned error: %s\n", nghttp3_strerror(rv)); return NGTCP2_ERR_CALLBACK_FAILURE; } return 0; } static int cb_stream_reset(ngtcp2_conn *tconn, int64_t stream_id, uint64_t final_size, uint64_t app_error_code, void *user_data, void *stream_user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; int rv; (void)tconn; (void)final_size; (void)app_error_code; (void)stream_user_data; rv = nghttp3_conn_reset_stream(qs->h3conn, stream_id); if(rv != 0) { failf(qs->conn->data, "nghttp3_conn_reset_stream returned error: %s\n", nghttp3_strerror(rv)); return NGTCP2_ERR_CALLBACK_FAILURE; } return 0; } static int cb_recv_retry(ngtcp2_conn *tconn, const ngtcp2_pkt_hd *hd, const ngtcp2_pkt_retry *retry, void *user_data) { /* Re-generate handshake secrets here because connection ID might change. */ struct quicsocket *qs = (struct quicsocket *)user_data; (void)tconn; (void)hd; (void)retry; setup_initial_crypto_context(qs); return 0; } static int cb_extend_max_local_streams_bidi(ngtcp2_conn *tconn, uint64_t max_streams, void *user_data) { (void)tconn; (void)max_streams; (void)user_data; return 0; } static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t stream_id, uint64_t max_data, void *user_data, void *stream_user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; int rv; (void)tconn; (void)max_data; (void)stream_user_data; rv = nghttp3_conn_unblock_stream(qs->h3conn, stream_id); if(rv != 0) { failf(qs->conn->data, "nghttp3_conn_unblock_stream returned error: %s\n", nghttp3_strerror(rv)); return NGTCP2_ERR_CALLBACK_FAILURE; } return 0; } static int cb_get_new_connection_id(ngtcp2_conn *tconn, ngtcp2_cid *cid, uint8_t *token, size_t cidlen, void *user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; CURLcode result; (void)tconn; result = Curl_rand(qs->conn->data, cid->data, cidlen); if(result) return NGTCP2_ERR_CALLBACK_FAILURE; cid->datalen = cidlen; result = Curl_rand(qs->conn->data, token, NGTCP2_STATELESS_RESET_TOKENLEN); if(result) return NGTCP2_ERR_CALLBACK_FAILURE; return 0; } static ngtcp2_conn_callbacks ng_callbacks = { cb_initial, NULL, /* recv_client_initial */ cb_recv_crypto_data, cb_handshake_completed, NULL, /* recv_version_negotiation */ ngtcp2_crypto_encrypt_cb, ngtcp2_crypto_decrypt_cb, ngtcp2_crypto_hp_mask_cb, cb_recv_stream_data, NULL, /* acked_crypto_offset */ cb_acked_stream_data_offset, NULL, /* stream_open */ cb_stream_close, NULL, /* recv_stateless_reset */ cb_recv_retry, cb_extend_max_local_streams_bidi, NULL, /* extend_max_local_streams_uni */ NULL, /* rand */ cb_get_new_connection_id, NULL, /* remove_connection_id */ NULL, /* update_key */ NULL, /* path_validation */ NULL, /* select_preferred_addr */ cb_stream_reset, NULL, /* extend_max_remote_streams_bidi */ NULL, /* extend_max_remote_streams_uni */ cb_extend_max_stream_data, }; /* * Might be called twice for happy eyeballs. */ CURLcode Curl_quic_connect(struct connectdata *conn, curl_socket_t sockfd, int sockindex, const struct sockaddr *addr, socklen_t addrlen) { int rc; int rv; CURLcode result; ngtcp2_path path; /* TODO: this must be initialized properly */ struct Curl_easy *data = conn->data; struct quicsocket *qs = &conn->hequic[sockindex]; char ipbuf[40]; long port; uint8_t paramsbuf[64]; ngtcp2_transport_params params; ssize_t nwrite; qs->conn = conn; /* extract the used address as a string */ if(!Curl_addr2string((struct sockaddr*)addr, addrlen, ipbuf, &port)) { char buffer[STRERROR_LEN]; failf(data, "ssrem inet_ntop() failed with errno %d: %s", errno, Curl_strerror(errno, buffer, sizeof(buffer))); return CURLE_BAD_FUNCTION_ARGUMENT; } infof(data, "Connect socket %d over QUIC to %s:%ld\n", sockfd, ipbuf, port); qs->version = NGTCP2_PROTO_VER; qs->sslctx = quic_ssl_ctx(data); if(!qs->sslctx) return CURLE_FAILED_INIT; /* TODO: better return code */ if(quic_init_ssl(qs)) return CURLE_FAILED_INIT; /* TODO: better return code */ qs->dcid.datalen = NGTCP2_MAX_CIDLEN; result = Curl_rand(data, qs->dcid.data, NGTCP2_MAX_CIDLEN); if(result) return result; qs->scid.datalen = NGTCP2_MAX_CIDLEN; result = Curl_rand(data, qs->scid.data, NGTCP2_MAX_CIDLEN); if(result) return result; quic_settings(&qs->settings, data->set.buffer_size); qs->local_addrlen = sizeof(qs->local_addr); rv = getsockname(sockfd, (struct sockaddr *)&qs->local_addr, &qs->local_addrlen); if(rv == -1) return CURLE_FAILED_INIT; ngtcp2_addr_init(&path.local, (uint8_t *)&qs->local_addr, qs->local_addrlen, NULL); ngtcp2_addr_init(&path.remote, (uint8_t*)addr, addrlen, NULL); #ifdef NGTCP2_PROTO_VER #define QUICVER NGTCP2_PROTO_VER #else #error "unsupported ngtcp2 version" #endif rc = ngtcp2_conn_client_new(&qs->qconn, &qs->dcid, &qs->scid, &path, QUICVER, &ng_callbacks, &qs->settings, NULL, qs); if(rc) return CURLE_FAILED_INIT; /* TODO: create a QUIC error code */ ngtcp2_conn_get_local_transport_params(qs->qconn, ¶ms); nwrite = ngtcp2_encode_transport_params( paramsbuf, sizeof(paramsbuf), NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO, ¶ms); if(nwrite < 0) { fprintf(stderr, "ngtcp2_encode_transport_params: %s\n", ngtcp2_strerror((int)nwrite)); return CURLE_FAILED_INIT; } if(!SSL_set_quic_transport_params(qs->ssl, paramsbuf, nwrite)) return CURLE_FAILED_INIT; rc = setup_initial_crypto_context(qs); if(rc) return CURLE_FAILED_INIT; /* TODO: better return code */ return CURLE_OK; } /* * Store ngtp2 version info in this buffer, Prefix with a space. Return total * length written. */ int Curl_quic_ver(char *p, size_t len) { ngtcp2_info *ng2 = ngtcp2_version(0); nghttp3_info *ht3 = nghttp3_version(0); return msnprintf(p, len, " ngtcp2/%s nghttp3/%s", ng2->version_str, ht3->version_str); } static int ng_getsock(struct connectdata *conn, curl_socket_t *socks) { struct SingleRequest *k = &conn->data->req; int bitmap = GETSOCK_BLANK; socks[0] = conn->sock[FIRSTSOCKET]; /* in a HTTP/2 connection we can basically always get a frame so we should always be ready for one */ bitmap |= GETSOCK_READSOCK(FIRSTSOCKET); /* we're still uploading or the HTTP/2 layer wants to send data */ if((k->keepon & (KEEP_SEND|KEEP_SEND_PAUSE)) == KEEP_SEND) bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET); return bitmap; } static int ng_perform_getsock(const struct connectdata *conn, curl_socket_t *socks) { return ng_getsock((struct connectdata *)conn, socks); } static CURLcode ng_disconnect(struct connectdata *conn, bool dead_connection) { (void)conn; (void)dead_connection; return CURLE_OK; } static unsigned int ng_conncheck(struct connectdata *conn, unsigned int checks_to_perform) { (void)conn; (void)checks_to_perform; return CONNRESULT_NONE; } static const struct Curl_handler Curl_handler_http3 = { "HTTPS", /* scheme */ ZERO_NULL, /* setup_connection */ Curl_http, /* do_it */ Curl_http_done, /* done */ ZERO_NULL, /* do_more */ ZERO_NULL, /* connect_it */ ZERO_NULL, /* connecting */ ZERO_NULL, /* doing */ ng_getsock, /* proto_getsock */ ng_getsock, /* doing_getsock */ ZERO_NULL, /* domore_getsock */ ng_perform_getsock, /* perform_getsock */ ng_disconnect, /* disconnect */ ZERO_NULL, /* readwrite */ ng_conncheck, /* connection_check */ PORT_HTTP, /* defport */ CURLPROTO_HTTPS, /* protocol */ PROTOPT_SSL | PROTOPT_STREAM /* flags */ }; static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id, uint64_t app_error_code, void *user_data, void *stream_user_data) { struct Curl_easy *data = stream_user_data; struct HTTP *stream = data->req.protop; (void)conn; (void)stream_id; (void)app_error_code; (void)user_data; fprintf(stderr, "cb_h3_stream_close CALLED\n"); stream->closed = TRUE; Curl_expire(data, 0, EXPIRE_QUIC); return 0; } static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream_id, const uint8_t *buf, size_t buflen, void *user_data, void *stream_user_data) { struct quicsocket *qs = user_data; size_t ncopy; struct Curl_easy *data = stream_user_data; struct HTTP *stream = data->req.protop; (void)conn; fprintf(stderr, "cb_h3_recv_data CALLED with %d bytes\n", buflen); /* TODO: this needs to be handled properly */ DEBUGASSERT(buflen <= stream->len); ncopy = CURLMIN(stream->len, buflen); memcpy(stream->mem, buf, ncopy); stream->len -= ncopy; stream->memlen += ncopy; #if 0 /* extra debugging of incoming h3 data */ fprintf(stderr, "!! Copies %zd bytes to %p (total %zd)\n", ncopy, stream->mem, stream->memlen); { size_t i; for(i = 0; i < ncopy; i++) { fprintf(stderr, "!! data[%d]: %02x '%c'\n", i, buf[i], buf[i]); } } #endif stream->mem += ncopy; ngtcp2_conn_extend_max_stream_offset(qs->qconn, stream_id, buflen); ngtcp2_conn_extend_max_offset(qs->qconn, buflen); return 0; } static int cb_h3_deferred_consume(nghttp3_conn *conn, int64_t stream_id, size_t consumed, void *user_data, void *stream_user_data) { struct quicsocket *qs = user_data; (void)conn; (void)stream_user_data; fprintf(stderr, "cb_h3_deferred_consume CALLED\n"); ngtcp2_conn_extend_max_stream_offset(qs->qconn, stream_id, consumed); ngtcp2_conn_extend_max_offset(qs->qconn, consumed); return 0; } /* Decode HTTP status code. Returns -1 if no valid status code was decoded. (duplicate from http2.c) */ static int decode_status_code(const uint8_t *value, size_t len) { int i; int res; if(len != 3) { return -1; } res = 0; for(i = 0; i < 3; ++i) { char c = value[i]; if(c < '0' || c > '9') { return -1; } res *= 10; res += c - '0'; } return res; } static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id, void *user_data, void *stream_user_data) { struct Curl_easy *data = stream_user_data; struct HTTP *stream = data->req.protop; (void)conn; (void)stream_id; (void)user_data; if(stream->memlen >= 2) { memcpy(stream->mem, "\r\n", 2); stream->len -= 2; stream->memlen += 2; stream->mem += 2; } return 0; } static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id, int32_t token, nghttp3_rcbuf *name, nghttp3_rcbuf *value, uint8_t flags, void *user_data, void *stream_user_data) { nghttp3_vec h3name = nghttp3_rcbuf_get_buf(name); nghttp3_vec h3val = nghttp3_rcbuf_get_buf(value); struct Curl_easy *data = stream_user_data; struct HTTP *stream = data->req.protop; size_t ncopy; (void)conn; (void)stream_id; (void)token; (void)flags; (void)user_data; fprintf(stderr, "cb_h3_recv_header called!\n"); if(h3name.len == sizeof(":status") - 1 && !memcmp(":status", h3name.base, h3name.len)) { int status = decode_status_code(h3val.base, h3val.len); DEBUGASSERT(status != -1); msnprintf(stream->mem, stream->len, "HTTP/3 %03d \r\n", status); } else { /* store as a HTTP1-style header */ msnprintf(stream->mem, stream->len, "%.*s: %.*s\n", h3name.len, h3name.base, h3val.len, h3val.base); } ncopy = strlen(stream->mem); stream->len -= ncopy; stream->memlen += ncopy; stream->mem += ncopy; return 0; } static int cb_h3_send_stop_sending(nghttp3_conn *conn, int64_t stream_id, uint64_t app_error_code, void *user_data, void *stream_user_data) { (void)conn; (void)stream_id; (void)app_error_code; (void)user_data; (void)stream_user_data; fprintf(stderr, "cb_h3_send_stop_sending CALLED\n"); return 0; } static nghttp3_conn_callbacks ngh3_callbacks = { cb_h3_acked_stream_data, /* acked_stream_data */ cb_h3_stream_close, cb_h3_recv_data, cb_h3_deferred_consume, NULL, /* begin_headers */ cb_h3_recv_header, cb_h3_end_headers, NULL, /* begin_trailers */ cb_h3_recv_header, NULL, /* end_trailers */ NULL, /* http_begin_push_promise */ NULL, /* http_recv_push_promise */ NULL, /* http_end_push_promise */ NULL, /* http_cancel_push */ cb_h3_send_stop_sending, NULL, /* push_stream */ NULL, /* end_stream */ }; static int init_ngh3_conn(struct quicsocket *qs) { CURLcode result; int rc; int64_t ctrl_stream_id, qpack_enc_stream_id, qpack_dec_stream_id; if(ngtcp2_conn_get_max_local_streams_uni(qs->qconn) < 3) { failf(qs->conn->data, "too few available QUIC streams"); return CURLE_FAILED_INIT; } nghttp3_conn_settings_default(&qs->h3settings); rc = nghttp3_conn_client_new(&qs->h3conn, &ngh3_callbacks, &qs->h3settings, nghttp3_mem_default(), qs); if(rc) { result = CURLE_OUT_OF_MEMORY; goto fail; } rc = ngtcp2_conn_open_uni_stream(qs->qconn, &ctrl_stream_id, NULL); if(rc) { result = CURLE_FAILED_INIT; goto fail; } rc = nghttp3_conn_bind_control_stream(qs->h3conn, ctrl_stream_id); if(rc) { result = CURLE_FAILED_INIT; goto fail; } rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_enc_stream_id, NULL); if(rc) { result = CURLE_FAILED_INIT; goto fail; } rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_dec_stream_id, NULL); if(rc) { result = CURLE_FAILED_INIT; goto fail; } rc = nghttp3_conn_bind_qpack_streams(qs->h3conn, qpack_enc_stream_id, qpack_dec_stream_id); if(rc) { result = CURLE_FAILED_INIT; goto fail; } return CURLE_OK; fail: return result; } static Curl_recv ngh3_stream_recv; static Curl_send ngh3_stream_send; /* incoming data frames on the h3 stream */ static ssize_t ngh3_stream_recv(struct connectdata *conn, int sockindex, char *buf, size_t buffersize, CURLcode *curlcode) { curl_socket_t sockfd = conn->sock[sockindex]; struct HTTP *stream = conn->data->req.protop; struct quicsocket *qs = conn->quic; fprintf(stderr, "ngh3_stream_recv CALLED (easy %p, socket %d)\n", conn->data, sockfd); if(!stream->memlen) { /* remember where to store incoming data for this stream and how big the buffer is */ stream->mem = buf; stream->len = buffersize; } /* else, there's data in the buffer already */ if(ng_process_ingress(conn, sockfd, qs)) { *curlcode = CURLE_RECV_ERROR; return -1; } if(ng_flush_egress(conn, sockfd, qs)) { *curlcode = CURLE_SEND_ERROR; return -1; } if(stream->memlen) { ssize_t memlen = stream->memlen; /* data arrived */ *curlcode = CURLE_OK; /* reset to allow more data to come */ stream->memlen = 0; stream->mem = buf; stream->len = buffersize; H3BUGF(infof(conn->data, "!! ngh3_stream_recv returns %zd bytes at %p\n", memlen, buf)); return memlen; } if(stream->closed) { *curlcode = CURLE_OK; return 0; } infof(conn->data, "ngh3_stream_recv returns 0 bytes and EAGAIN\n"); *curlcode = CURLE_AGAIN; return -1; } /* this amount of data has now been acked on this stream */ static int cb_h3_acked_stream_data(nghttp3_conn *conn, int64_t stream_id, size_t datalen, void *user_data, void *stream_user_data) { struct Curl_easy *data = stream_user_data; struct HTTP *stream = data->req.protop; (void)conn; (void)stream_id; (void)user_data; if(!data->set.postfields) { stream->h3out->used -= datalen; fprintf(stderr, "cb_h3_acked_stream_data, %zd bytes, %zd left unacked\n", datalen, stream->h3out->used); DEBUGASSERT(stream->h3out->used < H3_SEND_SIZE); } return 0; } static int cb_h3_readfunction(nghttp3_conn *conn, int64_t stream_id, const uint8_t **pdata, size_t *pdatalen, uint32_t *pflags, void *user_data, void *stream_user_data) { struct Curl_easy *data = stream_user_data; size_t nread; struct HTTP *stream = data->req.protop; (void)conn; (void)stream_id; (void)user_data; if(data->set.postfields) { *pdata = data->set.postfields; *pdatalen = data->state.infilesize; *pflags = NGHTTP3_DATA_FLAG_EOF; return 0; } nread = CURLMIN(stream->upload_len, H3_SEND_SIZE - stream->h3out->used); if(nread > 0) { /* nghttp3 wants us to hold on to the data until it tells us it is okay to delete it. Append the data at the end of the h3out buffer. Since we can only return consecutive data, copy the amount that fits and the next part comes in next invoke. */ struct h3out *out = stream->h3out; if(nread + out->windex > H3_SEND_SIZE) nread = H3_SEND_SIZE - out->windex; memcpy(&out->buf[out->windex], stream->upload_mem, nread); out->windex += nread; out->used += nread; /* that's the chunk we return to nghttp3 */ *pdata = &out->buf[out->windex]; *pdatalen = nread; if(out->windex == H3_SEND_SIZE) out->windex = 0; /* wrap */ stream->upload_mem += nread; stream->upload_len -= nread; if(data->state.infilesize != -1) { stream->upload_left -= nread; if(!stream->upload_left) *pflags = NGHTTP3_DATA_FLAG_EOF; } fprintf(stderr, "cb_h3_readfunction %zd bytes%s (at %zd unacked)\n", nread, *pflags == NGHTTP3_DATA_FLAG_EOF?" EOF":"", out->used); } if(stream->upload_done && !stream->upload_len && (stream->upload_left <= 0)) { H3BUGF(infof(data, "!!!!!!!!! cb_h3_readfunction sets EOF\n")); *pdata = NULL; *pdatalen = 0; *pflags = NGHTTP3_DATA_FLAG_EOF; } else if(!nread) { *pdatalen = 0; return NGHTTP3_ERR_WOULDBLOCK; } return 0; } /* Index where :authority header field will appear in request header field list. */ #define AUTHORITY_DST_IDX 3 static CURLcode http_request(struct connectdata *conn, const void *mem, size_t len) { struct HTTP *stream = conn->data->req.protop; size_t nheader; size_t i; size_t authority_idx; char *hdbuf = (char *)mem; char *end, *line_end; struct quicsocket *qs = conn->quic; CURLcode result = CURLE_OK; struct Curl_easy *data = conn->data; nghttp3_nv *nva = NULL; int64_t stream3_id; int rc; struct h3out *h3out = NULL; rc = ngtcp2_conn_open_bidi_stream(qs->qconn, &stream3_id, NULL); if(rc) { failf(conn->data, "can get bidi streams"); result = CURLE_SEND_ERROR; goto fail; } stream->stream3_id = stream3_id; stream->h3req = TRUE; /* senf off! */ /* Calculate number of headers contained in [mem, mem + len). Assumes a correctly generated HTTP header field block. */ nheader = 0; for(i = 1; i < len; ++i) { if(hdbuf[i] == '\n' && hdbuf[i - 1] == '\r') { ++nheader; ++i; } } if(nheader < 2) goto fail; /* We counted additional 2 \r\n in the first and last line. We need 3 new headers: :method, :path and :scheme. Therefore we need one more space. */ nheader += 1; nva = malloc(sizeof(nghttp3_nv) * nheader); if(!nva) { result = CURLE_OUT_OF_MEMORY; goto fail; } /* Extract :method, :path from request line We do line endings with CRLF so checking for CR is enough */ line_end = memchr(hdbuf, '\r', len); if(!line_end) { result = CURLE_BAD_FUNCTION_ARGUMENT; /* internal error */ goto fail; } /* Method does not contain spaces */ end = memchr(hdbuf, ' ', line_end - hdbuf); if(!end || end == hdbuf) goto fail; nva[0].name = (unsigned char *)":method"; nva[0].namelen = strlen((char *)nva[0].name); nva[0].value = (unsigned char *)hdbuf; nva[0].valuelen = (size_t)(end - hdbuf); nva[0].flags = NGHTTP3_NV_FLAG_NONE; hdbuf = end + 1; /* Path may contain spaces so scan backwards */ end = NULL; for(i = (size_t)(line_end - hdbuf); i; --i) { if(hdbuf[i - 1] == ' ') { end = &hdbuf[i - 1]; break; } } if(!end || end == hdbuf) goto fail; nva[1].name = (unsigned char *)":path"; nva[1].namelen = strlen((char *)nva[1].name); nva[1].value = (unsigned char *)hdbuf; nva[1].valuelen = (size_t)(end - hdbuf); nva[1].flags = NGHTTP3_NV_FLAG_NONE; nva[2].name = (unsigned char *)":scheme"; nva[2].namelen = strlen((char *)nva[2].name); if(conn->handler->flags & PROTOPT_SSL) nva[2].value = (unsigned char *)"https"; else nva[2].value = (unsigned char *)"http"; nva[2].valuelen = strlen((char *)nva[2].value); nva[2].flags = NGHTTP3_NV_FLAG_NONE; authority_idx = 0; i = 3; while(i < nheader) { size_t hlen; hdbuf = line_end + 2; /* check for next CR, but only within the piece of data left in the given buffer */ line_end = memchr(hdbuf, '\r', len - (hdbuf - (char *)mem)); if(!line_end || (line_end == hdbuf)) goto fail; /* header continuation lines are not supported */ if(*hdbuf == ' ' || *hdbuf == '\t') goto fail; for(end = hdbuf; end < line_end && *end != ':'; ++end) ; if(end == hdbuf || end == line_end) goto fail; hlen = end - hdbuf; if(hlen == 4 && strncasecompare("host", hdbuf, 4)) { authority_idx = i; nva[i].name = (unsigned char *)":authority"; nva[i].namelen = strlen((char *)nva[i].name); } else { nva[i].name = (unsigned char *)hdbuf; nva[i].namelen = (size_t)(end - hdbuf); } nva[i].flags = NGHTTP3_NV_FLAG_NONE; hdbuf = end + 1; while(*hdbuf == ' ' || *hdbuf == '\t') ++hdbuf; end = line_end; #if 0 /* This should probably go in more or less like this */ switch(inspect_header((const char *)nva[i].name, nva[i].namelen, hdbuf, end - hdbuf)) { case HEADERINST_IGNORE: /* skip header fields prohibited by HTTP/2 specification. */ --nheader; continue; case HEADERINST_TE_TRAILERS: nva[i].value = (uint8_t*)"trailers"; nva[i].value_len = sizeof("trailers") - 1; break; default: nva[i].value = (unsigned char *)hdbuf; nva[i].value_len = (size_t)(end - hdbuf); } #endif nva[i].value = (unsigned char *)hdbuf; nva[i].valuelen = (size_t)(end - hdbuf); nva[i].flags = NGHTTP3_NV_FLAG_NONE; ++i; } /* :authority must come before non-pseudo header fields */ if(authority_idx != 0 && authority_idx != AUTHORITY_DST_IDX) { nghttp3_nv authority = nva[authority_idx]; for(i = authority_idx; i > AUTHORITY_DST_IDX; --i) { nva[i] = nva[i - 1]; } nva[i] = authority; } /* Warn stream may be rejected if cumulative length of headers is too large. */ #define MAX_ACC 60000 /* <64KB to account for some overhead */ { size_t acc = 0; for(i = 0; i < nheader; ++i) acc += nva[i].namelen + nva[i].valuelen; if(acc > MAX_ACC) { infof(data, "http_request: Warning: The cumulative length of all " "headers exceeds %zu bytes and that could cause the " "stream to be rejected.\n", MAX_ACC); } } switch(data->set.httpreq) { case HTTPREQ_POST: case HTTPREQ_POST_FORM: case HTTPREQ_POST_MIME: case HTTPREQ_PUT: { nghttp3_data_reader data_reader; if(data->state.infilesize != -1) stream->upload_left = data->state.infilesize; else /* data sending without specifying the data amount up front */ stream->upload_left = -1; /* unknown, but not zero */ data_reader.read_data = cb_h3_readfunction; h3out = calloc(sizeof(struct h3out), 1); if(!h3out) { result = CURLE_OUT_OF_MEMORY; goto fail; } stream->h3out = h3out; rc = nghttp3_conn_submit_request(qs->h3conn, stream->stream3_id, nva, nheader, &data_reader, conn->data); if(rc) { result = CURLE_SEND_ERROR; goto fail; } break; } default: stream->upload_left = 0; /* nothing left to send */ rc = nghttp3_conn_submit_request(qs->h3conn, stream->stream3_id, nva, nheader, NULL, /* no body! */ conn->data); if(rc) { result = CURLE_SEND_ERROR; goto fail; } break; } Curl_safefree(nva); infof(data, "Using HTTP/3 Stream ID: %x (easy handle %p)\n", stream3_id, (void *)data); return CURLE_OK; fail: free(nva); return result; } static ssize_t ngh3_stream_send(struct connectdata *conn, int sockindex, const void *mem, size_t len, CURLcode *curlcode) { ssize_t sent; struct quicsocket *qs = conn->quic; curl_socket_t sockfd = conn->sock[sockindex]; struct HTTP *stream = conn->data->req.protop; if(!stream->h3req) { CURLcode result = http_request(conn, mem, len); if(result) { *curlcode = CURLE_SEND_ERROR; return -1; } sent = len; } else { fprintf(stderr, "ngh3_stream_send() wants to send %zd bytes\n", len); if(!stream->upload_len) { stream->upload_mem = mem; stream->upload_len = len; (void)nghttp3_conn_resume_stream(qs->h3conn, stream->stream3_id); sent = len; } else { *curlcode = CURLE_AGAIN; return -1; } } if(ng_flush_egress(conn, sockfd, qs)) { *curlcode = CURLE_SEND_ERROR; return -1; } *curlcode = CURLE_OK; return sent; } static void ng_has_connected(struct connectdata *conn, int tempindex) { conn->recv[FIRSTSOCKET] = ngh3_stream_recv; conn->send[FIRSTSOCKET] = ngh3_stream_send; conn->handler = &Curl_handler_http3; conn->bits.multiplex = TRUE; /* at least potentially multiplexed */ conn->httpversion = 30; conn->bundle->multiuse = BUNDLE_MULTIPLEX; conn->quic = &conn->hequic[tempindex]; DEBUGF(infof(conn->data, "ngtcp2 established connection!\n")); } /* * There can be multiple connection attempts going on in parallel. */ CURLcode Curl_quic_is_connected(struct connectdata *conn, int sockindex, bool *done) { CURLcode result; struct quicsocket *qs = &conn->hequic[sockindex]; curl_socket_t sockfd = conn->tempsock[sockindex]; result = ng_process_ingress(conn, sockfd, qs); if(result) return result; result = ng_flush_egress(conn, sockfd, qs); if(result) return result; if(ngtcp2_conn_get_handshake_completed(qs->qconn)) { *done = TRUE; ng_has_connected(conn, sockindex); } return result; } static CURLcode ng_process_ingress(struct connectdata *conn, int sockfd, struct quicsocket *qs) { ssize_t recvd; int rv; uint8_t buf[65536]; size_t bufsize = sizeof(buf); struct sockaddr_storage remote_addr; socklen_t remote_addrlen; ngtcp2_path path; ngtcp2_tstamp ts = timestamp(); for(;;) { remote_addrlen = sizeof(remote_addr); while((recvd = recvfrom(sockfd, buf, bufsize, MSG_DONTWAIT, (struct sockaddr *)&remote_addr, &remote_addrlen)) == -1 && errno == EINTR) ; if(recvd == -1) { if(errno == EAGAIN || errno == EWOULDBLOCK) break; failf(conn->data, "ngtcp2: recvfrom() unexpectedly returned %d", recvd); return CURLE_RECV_ERROR; } ngtcp2_addr_init(&path.local, (uint8_t *)&qs->local_addr, qs->local_addrlen, NULL); ngtcp2_addr_init(&path.remote, (uint8_t *)&remote_addr, remote_addrlen, NULL); rv = ngtcp2_conn_read_pkt(qs->qconn, &path, buf, recvd, ts); if(rv != 0) { /* TODO Send CONNECTION_CLOSE if possible */ return CURLE_RECV_ERROR; } } return CURLE_OK; } static CURLcode ng_flush_egress(struct connectdata *conn, int sockfd, struct quicsocket *qs) { int rv; ssize_t sent; ssize_t outlen; uint8_t out[NGTCP2_MAX_PKTLEN_IPV4]; size_t pktlen; ngtcp2_path_storage ps; ngtcp2_tstamp ts = timestamp(); struct sockaddr_storage remote_addr; ngtcp2_tstamp expiry; ngtcp2_duration timeout; int64_t stream_id; ssize_t veccnt; int fin; nghttp3_vec vec[16]; ssize_t ndatalen; switch(qs->local_addr.ss_family) { case AF_INET: pktlen = NGTCP2_MAX_PKTLEN_IPV4; break; case AF_INET6: pktlen = NGTCP2_MAX_PKTLEN_IPV6; break; default: assert(0); } rv = ngtcp2_conn_handle_expiry(qs->qconn, ts); if(rv != 0) { failf(conn->data, "ngtcp2_conn_handle_expiry returned error: %s\n", ngtcp2_strerror(rv)); return CURLE_SEND_ERROR; } ngtcp2_path_storage_zero(&ps); for(;;) { outlen = -1; if(qs->h3conn && ngtcp2_conn_get_max_data_left(qs->qconn)) { veccnt = nghttp3_conn_writev_stream(qs->h3conn, &stream_id, &fin, vec, sizeof(vec) / sizeof(vec[0])); if(veccnt < 0) { failf(conn->data, "nghttp3_conn_writev_stream returned error: %s\n", nghttp3_strerror((int)veccnt)); return CURLE_SEND_ERROR; } else if(veccnt > 0) { outlen = ngtcp2_conn_writev_stream(qs->qconn, &ps.path, out, pktlen, &ndatalen, NGTCP2_WRITE_STREAM_FLAG_MORE, stream_id, fin, (const ngtcp2_vec *)vec, veccnt, ts); if(outlen == 0) { break; } if(outlen < 0) { if(outlen == NGTCP2_ERR_STREAM_DATA_BLOCKED || outlen == NGTCP2_ERR_STREAM_SHUT_WR) { rv = nghttp3_conn_block_stream(qs->h3conn, stream_id); if(rv != 0) { failf(conn->data, "nghttp3_conn_block_stream returned error: %s\n", nghttp3_strerror(rv)); return CURLE_SEND_ERROR; } continue; } else if(outlen == NGTCP2_ERR_WRITE_STREAM_MORE) { assert(ndatalen > 0); rv = nghttp3_conn_add_write_offset(qs->h3conn, stream_id, ndatalen); if(rv != 0) { failf(conn->data, "nghttp3_conn_add_write_offset returned error: %s\n", nghttp3_strerror(rv)); return CURLE_SEND_ERROR; } continue; } else { failf(conn->data, "ngtcp2_conn_writev_stream returned error: %s\n", ngtcp2_strerror((int)outlen)); return CURLE_SEND_ERROR; } } else if(ndatalen > 0) { rv = nghttp3_conn_add_write_offset(qs->h3conn, stream_id, ndatalen); if(rv != 0) { failf(conn->data, "nghttp3_conn_add_write_offset returned error: %s\n", nghttp3_strerror(rv)); return CURLE_SEND_ERROR; } } } } if(outlen < 0) { outlen = ngtcp2_conn_write_pkt(qs->qconn, &ps.path, out, pktlen, ts); if(outlen < 0) { failf(conn->data, "ngtcp2_conn_write_pkt returned error: %s\n", ngtcp2_strerror((int)outlen)); return CURLE_SEND_ERROR; } if(outlen == 0) break; } memcpy(&remote_addr, ps.path.remote.addr, ps.path.remote.addrlen); while((sent = sendto(sockfd, out, outlen, MSG_DONTWAIT, (struct sockaddr *)&remote_addr, (socklen_t)ps.path.remote.addrlen)) == -1 && errno == EINTR) ; if(sent == -1) { if(errno == EAGAIN || errno == EWOULDBLOCK) { /* TODO Cache packet */ break; } else { failf(conn->data, "sendto() returned %zd (errno %d)\n", sent, SOCKERRNO); return CURLE_SEND_ERROR; } } } expiry = ngtcp2_conn_get_expiry(qs->qconn); if(expiry != UINT64_MAX) { if(expiry <= ts) { timeout = NGTCP2_MILLISECONDS; } else { timeout = expiry - ts; } Curl_expire(conn->data, timeout / NGTCP2_MILLISECONDS, EXPIRE_QUIC); } return CURLE_OK; } /* * Called from transfer.c:done_sending when we stop HTTP/3 uploading. */ CURLcode Curl_quic_done_sending(struct connectdata *conn) { if(conn->handler == &Curl_handler_http3) { /* only for HTTP/3 transfers */ struct HTTP *stream = conn->data->req.protop; struct quicsocket *qs = conn->quic; fprintf(stderr, "!!! Curl_quic_done_sending stream %zu\n", stream->stream3_id); stream->upload_done = TRUE; (void)nghttp3_conn_resume_stream(qs->h3conn, stream->stream3_id); } return CURLE_OK; } #endif |
Added jni/curl/lib/vquic/ngtcp2.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #ifndef HEADER_CURL_VQUIC_NGTCP2_H #define HEADER_CURL_VQUIC_NGTCP2_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #ifdef USE_NGTCP2 #include <ngtcp2/ngtcp2.h> #include <nghttp3/nghttp3.h> #include <openssl/ssl.h> struct quic_handshake { char *buf; /* pointer to the buffer */ size_t alloclen; /* size of allocation */ size_t len; /* size of content in buffer */ size_t nread; /* how many bytes have been read */ }; struct quicsocket { struct connectdata *conn; /* point back to the connection */ ngtcp2_conn *qconn; ngtcp2_cid dcid; ngtcp2_cid scid; uint32_t version; ngtcp2_settings settings; SSL_CTX *sslctx; SSL *ssl; struct quic_handshake client_crypto_data[3]; /* the last TLS alert description generated by the local endpoint */ uint8_t tls_alert; struct sockaddr_storage local_addr; socklen_t local_addrlen; nghttp3_conn *h3conn; nghttp3_conn_settings h3settings; }; #include "urldata.h" #endif #endif /* HEADER_CURL_VQUIC_NGTCP2_H */ |
Added jni/curl/lib/vquic/quiche.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #ifdef USE_QUICHE #include <quiche.h> #include <openssl/err.h> #include "urldata.h" #include "sendf.h" #include "strdup.h" #include "rand.h" #include "quic.h" #include "strcase.h" #include "multiif.h" #include "connect.h" #include "strerror.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" #define DEBUG_HTTP3 /* #define DEBUG_QUICHE */ #ifdef DEBUG_HTTP3 #define H3BUGF(x) x #else #define H3BUGF(x) do { } WHILE_FALSE #endif #define QUIC_MAX_STREAMS (256*1024) #define QUIC_MAX_DATA (1*1024*1024) #define QUIC_IDLE_TIMEOUT 60 * 1000 /* milliseconds */ static CURLcode process_ingress(struct connectdata *conn, curl_socket_t sockfd, struct quicsocket *qs); static CURLcode flush_egress(struct connectdata *conn, curl_socket_t sockfd, struct quicsocket *qs); static CURLcode http_request(struct connectdata *conn, const void *mem, size_t len); static Curl_recv h3_stream_recv; static Curl_send h3_stream_send; static int quiche_getsock(struct connectdata *conn, curl_socket_t *socks) { struct SingleRequest *k = &conn->data->req; int bitmap = GETSOCK_BLANK; socks[0] = conn->sock[FIRSTSOCKET]; /* in a HTTP/2 connection we can basically always get a frame so we should always be ready for one */ bitmap |= GETSOCK_READSOCK(FIRSTSOCKET); /* we're still uploading or the HTTP/2 layer wants to send data */ if((k->keepon & (KEEP_SEND|KEEP_SEND_PAUSE)) == KEEP_SEND) bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET); return bitmap; } static int quiche_perform_getsock(const struct connectdata *conn, curl_socket_t *socks) { return quiche_getsock((struct connectdata *)conn, socks); } static CURLcode quiche_disconnect(struct connectdata *conn, bool dead_connection) { struct quicsocket *qs = conn->quic; (void)dead_connection; quiche_h3_config_free(qs->h3config); quiche_h3_conn_free(qs->h3c); quiche_config_free(qs->cfg); quiche_conn_free(qs->conn); return CURLE_OK; } static unsigned int quiche_conncheck(struct connectdata *conn, unsigned int checks_to_perform) { (void)conn; (void)checks_to_perform; return CONNRESULT_NONE; } static CURLcode quiche_do(struct connectdata *conn, bool *done) { struct HTTP *stream = conn->data->req.protop; stream->h3req = FALSE; /* not sent */ return Curl_http(conn, done); } static const struct Curl_handler Curl_handler_http3 = { "HTTPS", /* scheme */ ZERO_NULL, /* setup_connection */ quiche_do, /* do_it */ Curl_http_done, /* done */ ZERO_NULL, /* do_more */ ZERO_NULL, /* connect_it */ ZERO_NULL, /* connecting */ ZERO_NULL, /* doing */ quiche_getsock, /* proto_getsock */ quiche_getsock, /* doing_getsock */ ZERO_NULL, /* domore_getsock */ quiche_perform_getsock, /* perform_getsock */ quiche_disconnect, /* disconnect */ ZERO_NULL, /* readwrite */ quiche_conncheck, /* connection_check */ PORT_HTTP, /* defport */ CURLPROTO_HTTPS, /* protocol */ PROTOPT_SSL | PROTOPT_STREAM /* flags */ }; #ifdef DEBUG_QUICHE static void quiche_debug_log(const char *line, void *argp) { (void)argp; fprintf(stderr, "%s\n", line); } #endif CURLcode Curl_quic_connect(struct connectdata *conn, curl_socket_t sockfd, int sockindex, const struct sockaddr *addr, socklen_t addrlen) { CURLcode result; struct quicsocket *qs = &conn->hequic[sockindex]; struct Curl_easy *data = conn->data; #ifdef DEBUG_QUICHE /* initialize debug log callback only once */ static int debug_log_init = 0; if(!debug_log_init) { quiche_enable_debug_logging(quiche_debug_log, NULL); debug_log_init = 1; } #endif (void)addr; (void)addrlen; qs->cfg = quiche_config_new(QUICHE_PROTOCOL_VERSION); if(!qs->cfg) { failf(data, "can't create quiche config"); return CURLE_FAILED_INIT; } quiche_config_set_idle_timeout(qs->cfg, QUIC_IDLE_TIMEOUT); quiche_config_set_initial_max_data(qs->cfg, QUIC_MAX_DATA); quiche_config_set_initial_max_stream_data_bidi_local(qs->cfg, QUIC_MAX_DATA); quiche_config_set_initial_max_stream_data_bidi_remote(qs->cfg, QUIC_MAX_DATA); quiche_config_set_initial_max_stream_data_uni(qs->cfg, QUIC_MAX_DATA); quiche_config_set_initial_max_streams_bidi(qs->cfg, QUIC_MAX_STREAMS); quiche_config_set_initial_max_streams_uni(qs->cfg, QUIC_MAX_STREAMS); quiche_config_set_application_protos(qs->cfg, (uint8_t *) QUICHE_H3_APPLICATION_PROTOCOL, sizeof(QUICHE_H3_APPLICATION_PROTOCOL) - 1); result = Curl_rand(data, qs->scid, sizeof(qs->scid)); if(result) return result; if(getenv("SSLKEYLOGFILE")) quiche_config_log_keys(qs->cfg); qs->conn = quiche_connect(conn->host.name, (const uint8_t *) qs->scid, sizeof(qs->scid), qs->cfg); if(!qs->conn) { failf(data, "can't create quiche connection"); return CURLE_OUT_OF_MEMORY; } result = flush_egress(conn, sockfd, qs); if(result) return result; #if 0 /* store the used address as a string */ if(!Curl_addr2string((struct sockaddr*)addr, conn->primary_ip, &conn->primary_port)) { char buffer[STRERROR_LEN]; failf(data, "ssrem inet_ntop() failed with errno %d: %s", errno, Curl_strerror(errno, buffer, sizeof(buffer))); return CURLE_BAD_FUNCTION_ARGUMENT; } memcpy(conn->ip_addr_str, conn->primary_ip, MAX_IPADR_LEN); #endif /* for connection reuse purposes: */ conn->ssl[FIRSTSOCKET].state = ssl_connection_complete; infof(data, "Sent QUIC client Initial, ALPN: %s\n", QUICHE_H3_APPLICATION_PROTOCOL + 1); return CURLE_OK; } static CURLcode quiche_has_connected(struct connectdata *conn, int sockindex, int tempindex) { CURLcode result; struct quicsocket *qs = conn->quic = &conn->hequic[tempindex]; conn->recv[sockindex] = h3_stream_recv; conn->send[sockindex] = h3_stream_send; conn->handler = &Curl_handler_http3; conn->bits.multiplex = TRUE; /* at least potentially multiplexed */ conn->httpversion = 30; conn->bundle->multiuse = BUNDLE_MULTIPLEX; qs->h3config = quiche_h3_config_new(0, 1024, 0, 0); if(!qs->h3config) return CURLE_OUT_OF_MEMORY; /* Create a new HTTP/3 connection on the QUIC connection. */ qs->h3c = quiche_h3_conn_new_with_transport(qs->conn, qs->h3config); if(!qs->h3c) { result = CURLE_OUT_OF_MEMORY; goto fail; } if(conn->hequic[1-tempindex].cfg) { qs = &conn->hequic[1-tempindex]; quiche_config_free(qs->cfg); quiche_conn_free(qs->conn); qs->cfg = NULL; qs->conn = NULL; } return CURLE_OK; fail: quiche_h3_config_free(qs->h3config); quiche_h3_conn_free(qs->h3c); return result; } /* * This function gets polled to check if this QUIC connection has connected. */ CURLcode Curl_quic_is_connected(struct connectdata *conn, int sockindex, bool *done) { CURLcode result; struct quicsocket *qs = &conn->hequic[sockindex]; curl_socket_t sockfd = conn->tempsock[sockindex]; result = process_ingress(conn, sockfd, qs); if(result) return result; result = flush_egress(conn, sockfd, qs); if(result) return result; if(quiche_conn_is_established(qs->conn)) { *done = TRUE; result = quiche_has_connected(conn, 0, sockindex); DEBUGF(infof(conn->data, "quiche established connection!\n")); } return result; } static CURLcode process_ingress(struct connectdata *conn, int sockfd, struct quicsocket *qs) { ssize_t recvd; struct Curl_easy *data = conn->data; uint8_t *buf = (uint8_t *)data->state.buffer; size_t bufsize = data->set.buffer_size; /* in case the timeout expired */ quiche_conn_on_timeout(qs->conn); do { recvd = recv(sockfd, buf, bufsize, 0); if((recvd < 0) && ((errno == EAGAIN) || (errno == EWOULDBLOCK))) break; if(recvd < 0) { failf(conn->data, "quiche: recv() unexpectedly returned %d " "(errno: %d, socket %d)", recvd, SOCKERRNO, sockfd); return CURLE_RECV_ERROR; } recvd = quiche_conn_recv(qs->conn, buf, recvd); if(recvd == QUICHE_ERR_DONE) break; if(recvd < 0) { failf(conn->data, "quiche_conn_recv() == %d", recvd); return CURLE_RECV_ERROR; } } while(1); return CURLE_OK; } /* * flush_egress drains the buffers and sends off data. * Calls failf() on errors. */ static CURLcode flush_egress(struct connectdata *conn, int sockfd, struct quicsocket *qs) { ssize_t sent; static uint8_t out[1200]; int64_t timeout_ns; do { sent = quiche_conn_send(qs->conn, out, sizeof(out)); if(sent == QUICHE_ERR_DONE) break; if(sent < 0) { failf(conn->data, "quiche_conn_send returned %zd\n", sent); return CURLE_SEND_ERROR; } sent = send(sockfd, out, sent, 0); if(sent < 0) { failf(conn->data, "send() returned %zd\n", sent); return CURLE_SEND_ERROR; } } while(1); /* time until the next timeout event, as nanoseconds. */ timeout_ns = quiche_conn_timeout_as_nanos(qs->conn); if(timeout_ns) /* expire uses milliseconds */ Curl_expire(conn->data, (timeout_ns + 999999) / 1000000, EXPIRE_QUIC); return CURLE_OK; } struct h3h1header { char *dest; size_t destlen; /* left to use */ size_t nlen; /* used */ }; static int cb_each_header(uint8_t *name, size_t name_len, uint8_t *value, size_t value_len, void *argp) { struct h3h1header *headers = (struct h3h1header *)argp; size_t olen = 0; if((name_len == 7) && !strncmp(":status", (char *)name, 7)) { msnprintf(headers->dest, headers->destlen, "HTTP/3 %.*s\n", (int) value_len, value); } else { msnprintf(headers->dest, headers->destlen, "%.*s: %.*s\n", (int)name_len, name, (int) value_len, value); } olen = strlen(headers->dest); headers->destlen -= olen; headers->nlen += olen; headers->dest += olen; return 0; } static ssize_t h3_stream_recv(struct connectdata *conn, int sockindex, char *buf, size_t buffersize, CURLcode *curlcode) { ssize_t recvd = -1; ssize_t rcode; struct quicsocket *qs = conn->quic; curl_socket_t sockfd = conn->sock[sockindex]; quiche_h3_event *ev; int rc; struct h3h1header headers; struct HTTP *stream = conn->data->req.protop; headers.dest = buf; headers.destlen = buffersize; headers.nlen = 0; if(process_ingress(conn, sockfd, qs)) { infof(conn->data, "h3_stream_recv returns on ingress\n"); *curlcode = CURLE_RECV_ERROR; return -1; } while(recvd < 0) { int64_t s = quiche_h3_conn_poll(qs->h3c, qs->conn, &ev); if(s < 0) /* nothing more to do */ break; if(s != stream->stream3_id) { /* another transfer, ignore for now */ infof(conn->data, "Got h3 for stream %u, expects %u\n", s, stream->stream3_id); continue; } switch(quiche_h3_event_type(ev)) { case QUICHE_H3_EVENT_HEADERS: rc = quiche_h3_event_for_each_header(ev, cb_each_header, &headers); if(rc) { /* what do we do about this? */ } recvd = headers.nlen; break; case QUICHE_H3_EVENT_DATA: if(!stream->firstbody) { /* add a header-body separator CRLF */ buf[0] = '\r'; buf[1] = '\n'; buf += 2; buffersize -= 2; stream->firstbody = TRUE; recvd = 2; /* two bytes already */ } else recvd = 0; rcode = quiche_h3_recv_body(qs->h3c, qs->conn, s, (unsigned char *)buf, buffersize); if(rcode <= 0) { recvd = -1; break; } recvd += rcode; break; case QUICHE_H3_EVENT_FINISHED: if(quiche_conn_close(qs->conn, true, 0, NULL, 0) < 0) { ; } recvd = 0; /* end of stream */ break; default: break; } quiche_h3_event_free(ev); } if(flush_egress(conn, sockfd, qs)) { *curlcode = CURLE_SEND_ERROR; return -1; } *curlcode = (-1 == recvd)? CURLE_AGAIN : CURLE_OK; if(recvd >= 0) /* Get this called again to drain the event queue */ Curl_expire(conn->data, 0, EXPIRE_QUIC); return recvd; } static ssize_t h3_stream_send(struct connectdata *conn, int sockindex, const void *mem, size_t len, CURLcode *curlcode) { ssize_t sent; struct quicsocket *qs = conn->quic; curl_socket_t sockfd = conn->sock[sockindex]; struct HTTP *stream = conn->data->req.protop; if(!stream->h3req) { CURLcode result = http_request(conn, mem, len); if(result) { *curlcode = CURLE_SEND_ERROR; return -1; } sent = len; } else { H3BUGF(infof(conn->data, "Pass on %zd body bytes to quiche\n", len)); sent = quiche_h3_send_body(qs->h3c, qs->conn, stream->stream3_id, (uint8_t *)mem, len, FALSE); if(sent < 0) { *curlcode = CURLE_SEND_ERROR; return -1; } } if(flush_egress(conn, sockfd, qs)) { *curlcode = CURLE_SEND_ERROR; return -1; } *curlcode = CURLE_OK; return sent; } /* * Store quiche version info in this buffer, Prefix with a space. Return total * length written. */ int Curl_quic_ver(char *p, size_t len) { return msnprintf(p, len, " quiche/%s", quiche_version()); } /* Index where :authority header field will appear in request header field list. */ #define AUTHORITY_DST_IDX 3 static CURLcode http_request(struct connectdata *conn, const void *mem, size_t len) { /* */ struct HTTP *stream = conn->data->req.protop; size_t nheader; size_t i; size_t authority_idx; char *hdbuf = (char *)mem; char *end, *line_end; int64_t stream3_id; quiche_h3_header *nva = NULL; struct quicsocket *qs = conn->quic; CURLcode result = CURLE_OK; struct Curl_easy *data = conn->data; stream->h3req = TRUE; /* senf off! */ /* Calculate number of headers contained in [mem, mem + len). Assumes a correctly generated HTTP header field block. */ nheader = 0; for(i = 1; i < len; ++i) { if(hdbuf[i] == '\n' && hdbuf[i - 1] == '\r') { ++nheader; ++i; } } if(nheader < 2) goto fail; /* We counted additional 2 \r\n in the first and last line. We need 3 new headers: :method, :path and :scheme. Therefore we need one more space. */ nheader += 1; nva = malloc(sizeof(quiche_h3_header) * nheader); if(!nva) { result = CURLE_OUT_OF_MEMORY; goto fail; } /* Extract :method, :path from request line We do line endings with CRLF so checking for CR is enough */ line_end = memchr(hdbuf, '\r', len); if(!line_end) { result = CURLE_BAD_FUNCTION_ARGUMENT; /* internal error */ goto fail; } /* Method does not contain spaces */ end = memchr(hdbuf, ' ', line_end - hdbuf); if(!end || end == hdbuf) goto fail; nva[0].name = (unsigned char *)":method"; nva[0].name_len = strlen((char *)nva[0].name); nva[0].value = (unsigned char *)hdbuf; nva[0].value_len = (size_t)(end - hdbuf); hdbuf = end + 1; /* Path may contain spaces so scan backwards */ end = NULL; for(i = (size_t)(line_end - hdbuf); i; --i) { if(hdbuf[i - 1] == ' ') { end = &hdbuf[i - 1]; break; } } if(!end || end == hdbuf) goto fail; nva[1].name = (unsigned char *)":path"; nva[1].name_len = strlen((char *)nva[1].name); nva[1].value = (unsigned char *)hdbuf; nva[1].value_len = (size_t)(end - hdbuf); nva[2].name = (unsigned char *)":scheme"; nva[2].name_len = strlen((char *)nva[2].name); if(conn->handler->flags & PROTOPT_SSL) nva[2].value = (unsigned char *)"https"; else nva[2].value = (unsigned char *)"http"; nva[2].value_len = strlen((char *)nva[2].value); authority_idx = 0; i = 3; while(i < nheader) { size_t hlen; hdbuf = line_end + 2; /* check for next CR, but only within the piece of data left in the given buffer */ line_end = memchr(hdbuf, '\r', len - (hdbuf - (char *)mem)); if(!line_end || (line_end == hdbuf)) goto fail; /* header continuation lines are not supported */ if(*hdbuf == ' ' || *hdbuf == '\t') goto fail; for(end = hdbuf; end < line_end && *end != ':'; ++end) ; if(end == hdbuf || end == line_end) goto fail; hlen = end - hdbuf; if(hlen == 4 && strncasecompare("host", hdbuf, 4)) { authority_idx = i; nva[i].name = (unsigned char *)":authority"; nva[i].name_len = strlen((char *)nva[i].name); } else { nva[i].name = (unsigned char *)hdbuf; nva[i].name_len = (size_t)(end - hdbuf); } hdbuf = end + 1; while(*hdbuf == ' ' || *hdbuf == '\t') ++hdbuf; end = line_end; #if 0 /* This should probably go in more or less like this */ switch(inspect_header((const char *)nva[i].name, nva[i].namelen, hdbuf, end - hdbuf)) { case HEADERINST_IGNORE: /* skip header fields prohibited by HTTP/2 specification. */ --nheader; continue; case HEADERINST_TE_TRAILERS: nva[i].value = (uint8_t*)"trailers"; nva[i].value_len = sizeof("trailers") - 1; break; default: nva[i].value = (unsigned char *)hdbuf; nva[i].value_len = (size_t)(end - hdbuf); } #endif nva[i].value = (unsigned char *)hdbuf; nva[i].value_len = (size_t)(end - hdbuf); ++i; } /* :authority must come before non-pseudo header fields */ if(authority_idx != 0 && authority_idx != AUTHORITY_DST_IDX) { quiche_h3_header authority = nva[authority_idx]; for(i = authority_idx; i > AUTHORITY_DST_IDX; --i) { nva[i] = nva[i - 1]; } nva[i] = authority; } /* Warn stream may be rejected if cumulative length of headers is too large. */ #define MAX_ACC 60000 /* <64KB to account for some overhead */ { size_t acc = 0; for(i = 0; i < nheader; ++i) { acc += nva[i].name_len + nva[i].value_len; H3BUGF(infof(data, "h3 [%.*s: %.*s]\n", nva[i].name_len, nva[i].name, nva[i].value_len, nva[i].value)); } if(acc > MAX_ACC) { infof(data, "http_request: Warning: The cumulative length of all " "headers exceeds %zu bytes and that could cause the " "stream to be rejected.\n", MAX_ACC); } } switch(data->set.httpreq) { case HTTPREQ_POST: case HTTPREQ_POST_FORM: case HTTPREQ_POST_MIME: case HTTPREQ_PUT: if(data->state.infilesize != -1) stream->upload_left = data->state.infilesize; else /* data sending without specifying the data amount up front */ stream->upload_left = -1; /* unknown, but not zero */ stream3_id = quiche_h3_send_request(qs->h3c, qs->conn, nva, nheader, stream->upload_left ? FALSE: TRUE); if((stream3_id >= 0) && data->set.postfields) { ssize_t sent = quiche_h3_send_body(qs->h3c, qs->conn, stream3_id, (uint8_t *)data->set.postfields, stream->upload_left, TRUE); if(sent <= 0) { failf(data, "quiche_h3_send_body failed!"); result = CURLE_SEND_ERROR; } stream->upload_left = 0; /* nothing left to send */ } break; default: stream3_id = quiche_h3_send_request(qs->h3c, qs->conn, nva, nheader, TRUE); break; } Curl_safefree(nva); if(stream3_id < 0) { H3BUGF(infof(data, "quiche_h3_send_request returned %d\n", stream3_id)); result = CURLE_SEND_ERROR; goto fail; } infof(data, "Using HTTP/3 Stream ID: %x (easy handle %p)\n", stream3_id, (void *)data); stream->stream3_id = stream3_id; return CURLE_OK; fail: free(nva); return result; } /* * Called from transfer.c:done_sending when we stop HTTP/3 uploading. */ CURLcode Curl_quic_done_sending(struct connectdata *conn) { if(conn->handler == &Curl_handler_http3) { /* only for HTTP/3 transfers */ ssize_t sent; struct HTTP *stream = conn->data->req.protop; struct quicsocket *qs = conn->quic; fprintf(stderr, "!!! Curl_quic_done_sending\n"); stream->upload_done = TRUE; sent = quiche_h3_send_body(qs->h3c, qs->conn, stream->stream3_id, NULL, 0, TRUE); if(sent < 0) return CURLE_SEND_ERROR; } return CURLE_OK; } #endif |
Added jni/curl/lib/vquic/quiche.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #ifndef HEADER_CURL_VQUIC_QUICHE_H #define HEADER_CURL_VQUIC_QUICHE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #ifdef USE_QUICHE #include <quiche.h> struct quic_handshake { char *buf; /* pointer to the buffer */ size_t alloclen; /* size of allocation */ size_t len; /* size of content in buffer */ size_t nread; /* how many bytes have been read */ }; struct quicsocket { quiche_config *cfg; quiche_conn *conn; quiche_h3_conn *h3c; quiche_h3_config *h3config; uint8_t scid[QUICHE_MAX_CONN_ID_LEN]; uint32_t version; }; #endif #endif /* HEADER_CURL_VQUIC_QUICHE_H */ |
Added jni/curl/lib/vssh/libssh.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2017 - 2019 Red Hat, Inc. * * Authors: Nikos Mavrogiannopoulos, Tomas Mraz, Stanislav Zidek, * Robert Kolcun, Andreas Schneider * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl_setup.h" #ifdef USE_LIBSSH #include <limits.h> #include <libssh/libssh.h> #include <libssh/sftp.h> #ifdef HAVE_FCNTL_H #include <fcntl.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_ARPA_INET_H #include <arpa/inet.h> #endif #ifdef HAVE_UTSNAME_H #include <sys/utsname.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef __VMS #include <in.h> #include <inet.h> #endif #if (defined(NETWARE) && defined(__NOVELL_LIBC__)) #undef in_addr_t #define in_addr_t unsigned long #endif #include <curl/curl.h> #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "progress.h" #include "transfer.h" #include "escape.h" #include "http.h" /* for HTTP proxy tunnel stuff */ #include "ssh.h" #include "url.h" #include "speedcheck.h" #include "getinfo.h" #include "strdup.h" #include "strcase.h" #include "vtls/vtls.h" #include "connect.h" #include "strerror.h" #include "inet_ntop.h" #include "parsedate.h" /* for the week day and month names */ #include "sockaddr.h" /* required for Curl_sockaddr_storage */ #include "strtoofft.h" #include "multiif.h" #include "select.h" #include "warnless.h" /* for permission and open flags */ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" #include "curl_path.h" /* A recent macro provided by libssh. Or make our own. */ #ifndef SSH_STRING_FREE_CHAR /* !checksrc! disable ASSIGNWITHINCONDITION 1 */ #define SSH_STRING_FREE_CHAR(x) \ do { if((x) != NULL) { ssh_string_free_char(x); x = NULL; } } while(0) #endif /* Local functions: */ static CURLcode myssh_connect(struct connectdata *conn, bool *done); static CURLcode myssh_multi_statemach(struct connectdata *conn, bool *done); static CURLcode myssh_do_it(struct connectdata *conn, bool *done); static CURLcode scp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode scp_doing(struct connectdata *conn, bool *dophase_done); static CURLcode scp_disconnect(struct connectdata *conn, bool dead_connection); static CURLcode sftp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode sftp_doing(struct connectdata *conn, bool *dophase_done); static CURLcode sftp_disconnect(struct connectdata *conn, bool dead); static CURLcode sftp_perform(struct connectdata *conn, bool *connected, bool *dophase_done); static void sftp_quote(struct connectdata *conn); static void sftp_quote_stat(struct connectdata *conn); static int myssh_getsock(struct connectdata *conn, curl_socket_t *sock); static int myssh_perform_getsock(const struct connectdata *conn, curl_socket_t *sock); static CURLcode myssh_setup_connection(struct connectdata *conn); /* * SCP protocol handler. */ const struct Curl_handler Curl_handler_scp = { "SCP", /* scheme */ myssh_setup_connection, /* setup_connection */ myssh_do_it, /* do_it */ scp_done, /* done */ ZERO_NULL, /* do_more */ myssh_connect, /* connect_it */ myssh_multi_statemach, /* connecting */ scp_doing, /* doing */ myssh_getsock, /* proto_getsock */ myssh_getsock, /* doing_getsock */ ZERO_NULL, /* domore_getsock */ myssh_perform_getsock, /* perform_getsock */ scp_disconnect, /* disconnect */ ZERO_NULL, /* readwrite */ ZERO_NULL, /* connection_check */ PORT_SSH, /* defport */ CURLPROTO_SCP, /* protocol */ PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */ }; /* * SFTP protocol handler. */ const struct Curl_handler Curl_handler_sftp = { "SFTP", /* scheme */ myssh_setup_connection, /* setup_connection */ myssh_do_it, /* do_it */ sftp_done, /* done */ ZERO_NULL, /* do_more */ myssh_connect, /* connect_it */ myssh_multi_statemach, /* connecting */ sftp_doing, /* doing */ myssh_getsock, /* proto_getsock */ myssh_getsock, /* doing_getsock */ ZERO_NULL, /* domore_getsock */ myssh_perform_getsock, /* perform_getsock */ sftp_disconnect, /* disconnect */ ZERO_NULL, /* readwrite */ ZERO_NULL, /* connection_check */ PORT_SSH, /* defport */ CURLPROTO_SFTP, /* protocol */ PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */ }; static CURLcode sftp_error_to_CURLE(int err) { switch(err) { case SSH_FX_OK: return CURLE_OK; case SSH_FX_NO_SUCH_FILE: case SSH_FX_NO_SUCH_PATH: return CURLE_REMOTE_FILE_NOT_FOUND; case SSH_FX_PERMISSION_DENIED: case SSH_FX_WRITE_PROTECT: return CURLE_REMOTE_ACCESS_DENIED; case SSH_FX_FILE_ALREADY_EXISTS: return CURLE_REMOTE_FILE_EXISTS; default: break; } return CURLE_SSH; } #ifndef DEBUGBUILD #define state(x,y) mystate(x,y) #else #define state(x,y) mystate(x,y, __LINE__) #endif /* * SSH State machine related code */ /* This is the ONLY way to change SSH state! */ static void mystate(struct connectdata *conn, sshstate nowstate #ifdef DEBUGBUILD , int lineno #endif ) { struct ssh_conn *sshc = &conn->proto.sshc; #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS) /* for debug purposes */ static const char *const names[] = { "SSH_STOP", "SSH_INIT", "SSH_S_STARTUP", "SSH_HOSTKEY", "SSH_AUTHLIST", "SSH_AUTH_PKEY_INIT", "SSH_AUTH_PKEY", "SSH_AUTH_PASS_INIT", "SSH_AUTH_PASS", "SSH_AUTH_AGENT_INIT", "SSH_AUTH_AGENT_LIST", "SSH_AUTH_AGENT", "SSH_AUTH_HOST_INIT", "SSH_AUTH_HOST", "SSH_AUTH_KEY_INIT", "SSH_AUTH_KEY", "SSH_AUTH_GSSAPI", "SSH_AUTH_DONE", "SSH_SFTP_INIT", "SSH_SFTP_REALPATH", "SSH_SFTP_QUOTE_INIT", "SSH_SFTP_POSTQUOTE_INIT", "SSH_SFTP_QUOTE", "SSH_SFTP_NEXT_QUOTE", "SSH_SFTP_QUOTE_STAT", "SSH_SFTP_QUOTE_SETSTAT", "SSH_SFTP_QUOTE_SYMLINK", "SSH_SFTP_QUOTE_MKDIR", "SSH_SFTP_QUOTE_RENAME", "SSH_SFTP_QUOTE_RMDIR", "SSH_SFTP_QUOTE_UNLINK", "SSH_SFTP_QUOTE_STATVFS", "SSH_SFTP_GETINFO", "SSH_SFTP_FILETIME", "SSH_SFTP_TRANS_INIT", "SSH_SFTP_UPLOAD_INIT", "SSH_SFTP_CREATE_DIRS_INIT", "SSH_SFTP_CREATE_DIRS", "SSH_SFTP_CREATE_DIRS_MKDIR", "SSH_SFTP_READDIR_INIT", "SSH_SFTP_READDIR", "SSH_SFTP_READDIR_LINK", "SSH_SFTP_READDIR_BOTTOM", "SSH_SFTP_READDIR_DONE", "SSH_SFTP_DOWNLOAD_INIT", "SSH_SFTP_DOWNLOAD_STAT", "SSH_SFTP_CLOSE", "SSH_SFTP_SHUTDOWN", "SSH_SCP_TRANS_INIT", "SSH_SCP_UPLOAD_INIT", "SSH_SCP_DOWNLOAD_INIT", "SSH_SCP_DOWNLOAD", "SSH_SCP_DONE", "SSH_SCP_SEND_EOF", "SSH_SCP_WAIT_EOF", "SSH_SCP_WAIT_CLOSE", "SSH_SCP_CHANNEL_FREE", "SSH_SESSION_DISCONNECT", "SSH_SESSION_FREE", "QUIT" }; if(sshc->state != nowstate) { infof(conn->data, "SSH %p state change from %s to %s (line %d)\n", (void *) sshc, names[sshc->state], names[nowstate], lineno); } #endif sshc->state = nowstate; } /* Multiple options: * 1. data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5] is set with an MD5 * hash (90s style auth, not sure we should have it here) * 2. data->set.ssh_keyfunc callback is set. Then we do trust on first * use. We even save on knownhosts if CURLKHSTAT_FINE_ADD_TO_FILE * is returned by it. * 3. none of the above. We only accept if it is present on known hosts. * * Returns SSH_OK or SSH_ERROR. */ static int myssh_is_known(struct connectdata *conn) { int rc; struct Curl_easy *data = conn->data; struct ssh_conn *sshc = &conn->proto.sshc; ssh_key pubkey; size_t hlen; unsigned char *hash = NULL; char *base64 = NULL; int vstate; enum curl_khmatch keymatch; struct curl_khkey foundkey; curl_sshkeycallback func = data->set.ssh_keyfunc; rc = ssh_get_publickey(sshc->ssh_session, &pubkey); if(rc != SSH_OK) return rc; if(data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5]) { rc = ssh_get_publickey_hash(pubkey, SSH_PUBLICKEY_HASH_MD5, &hash, &hlen); if(rc != SSH_OK) goto cleanup; if(hlen != strlen(data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5]) || memcmp(&data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5], hash, hlen)) { rc = SSH_ERROR; goto cleanup; } rc = SSH_OK; goto cleanup; } if(data->set.ssl.primary.verifyhost != TRUE) { rc = SSH_OK; goto cleanup; } vstate = ssh_is_server_known(sshc->ssh_session); switch(vstate) { case SSH_SERVER_KNOWN_OK: keymatch = CURLKHMATCH_OK; break; case SSH_SERVER_FILE_NOT_FOUND: /* fallthrough */ case SSH_SERVER_NOT_KNOWN: keymatch = CURLKHMATCH_MISSING; break; default: keymatch = CURLKHMATCH_MISMATCH; break; } if(func) { /* use callback to determine action */ rc = ssh_pki_export_pubkey_base64(pubkey, &base64); if(rc != SSH_OK) goto cleanup; foundkey.key = base64; foundkey.len = strlen(base64); switch(ssh_key_type(pubkey)) { case SSH_KEYTYPE_RSA: foundkey.keytype = CURLKHTYPE_RSA; break; case SSH_KEYTYPE_RSA1: foundkey.keytype = CURLKHTYPE_RSA1; break; case SSH_KEYTYPE_ECDSA: foundkey.keytype = CURLKHTYPE_ECDSA; break; #if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,7,0) case SSH_KEYTYPE_ED25519: foundkey.keytype = CURLKHTYPE_ED25519; break; #endif case SSH_KEYTYPE_DSS: foundkey.keytype = CURLKHTYPE_DSS; break; default: rc = SSH_ERROR; goto cleanup; } /* we don't have anything equivalent to knownkey. Always NULL */ Curl_set_in_callback(data, true); rc = func(data, NULL, &foundkey, /* from the remote host */ keymatch, data->set.ssh_keyfunc_userp); Curl_set_in_callback(data, false); switch(rc) { case CURLKHSTAT_FINE_ADD_TO_FILE: rc = ssh_write_knownhost(sshc->ssh_session); if(rc != SSH_OK) { goto cleanup; } break; case CURLKHSTAT_FINE: break; default: /* REJECT/DEFER */ rc = SSH_ERROR; goto cleanup; } } else { if(keymatch != CURLKHMATCH_OK) { rc = SSH_ERROR; goto cleanup; } } rc = SSH_OK; cleanup: if(hash) ssh_clean_pubkey_hash(&hash); ssh_key_free(pubkey); return rc; } #define MOVE_TO_ERROR_STATE(_r) { \ state(conn, SSH_SESSION_DISCONNECT); \ sshc->actualcode = _r; \ rc = SSH_ERROR; \ break; \ } #define MOVE_TO_SFTP_CLOSE_STATE() { \ state(conn, SSH_SFTP_CLOSE); \ sshc->actualcode = sftp_error_to_CURLE(sftp_get_error(sshc->sftp_session)); \ rc = SSH_ERROR; \ break; \ } #define MOVE_TO_LAST_AUTH \ if(sshc->auth_methods & SSH_AUTH_METHOD_PASSWORD) { \ rc = SSH_OK; \ state(conn, SSH_AUTH_PASS_INIT); \ break; \ } \ else { \ MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED); \ } #define MOVE_TO_TERTIARY_AUTH \ if(sshc->auth_methods & SSH_AUTH_METHOD_INTERACTIVE) { \ rc = SSH_OK; \ state(conn, SSH_AUTH_KEY_INIT); \ break; \ } \ else { \ MOVE_TO_LAST_AUTH; \ } #define MOVE_TO_SECONDARY_AUTH \ if(sshc->auth_methods & SSH_AUTH_METHOD_GSSAPI_MIC) { \ rc = SSH_OK; \ state(conn, SSH_AUTH_GSSAPI); \ break; \ } \ else { \ MOVE_TO_TERTIARY_AUTH; \ } static int myssh_auth_interactive(struct connectdata *conn) { int rc; struct ssh_conn *sshc = &conn->proto.sshc; int nprompts; restart: switch(sshc->kbd_state) { case 0: rc = ssh_userauth_kbdint(sshc->ssh_session, NULL, NULL); if(rc == SSH_AUTH_AGAIN) return SSH_AGAIN; if(rc != SSH_AUTH_INFO) return SSH_ERROR; nprompts = ssh_userauth_kbdint_getnprompts(sshc->ssh_session); if(nprompts == SSH_ERROR || nprompts != 1) return SSH_ERROR; rc = ssh_userauth_kbdint_setanswer(sshc->ssh_session, 0, conn->passwd); if(rc < 0) return SSH_ERROR; /* FALLTHROUGH */ case 1: sshc->kbd_state = 1; rc = ssh_userauth_kbdint(sshc->ssh_session, NULL, NULL); if(rc == SSH_AUTH_AGAIN) return SSH_AGAIN; else if(rc == SSH_AUTH_SUCCESS) rc = SSH_OK; else if(rc == SSH_AUTH_INFO) { nprompts = ssh_userauth_kbdint_getnprompts(sshc->ssh_session); if(nprompts != 0) return SSH_ERROR; sshc->kbd_state = 2; goto restart; } else rc = SSH_ERROR; break; case 2: sshc->kbd_state = 2; rc = ssh_userauth_kbdint(sshc->ssh_session, NULL, NULL); if(rc == SSH_AUTH_AGAIN) return SSH_AGAIN; else if(rc == SSH_AUTH_SUCCESS) rc = SSH_OK; else rc = SSH_ERROR; break; default: return SSH_ERROR; } sshc->kbd_state = 0; return rc; } /* * ssh_statemach_act() runs the SSH state machine as far as it can without * blocking and without reaching the end. The data the pointer 'block' points * to will be set to TRUE if the libssh function returns SSH_AGAIN * meaning it wants to be called again when the socket is ready */ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block) { CURLcode result = CURLE_OK; struct Curl_easy *data = conn->data; struct SSHPROTO *protop = data->req.protop; struct ssh_conn *sshc = &conn->proto.sshc; curl_socket_t sock = conn->sock[FIRSTSOCKET]; int rc = SSH_NO_ERROR, err; char *new_readdir_line; int seekerr = CURL_SEEKFUNC_OK; const char *err_msg; *block = 0; /* we're not blocking by default */ do { switch(sshc->state) { case SSH_INIT: sshc->secondCreateDirs = 0; sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_OK; #if 0 ssh_set_log_level(SSH_LOG_PROTOCOL); #endif /* Set libssh to non-blocking, since everything internally is non-blocking */ ssh_set_blocking(sshc->ssh_session, 0); state(conn, SSH_S_STARTUP); /* FALLTHROUGH */ case SSH_S_STARTUP: rc = ssh_connect(sshc->ssh_session); if(rc == SSH_AGAIN) break; if(rc != SSH_OK) { failf(data, "Failure establishing ssh session"); MOVE_TO_ERROR_STATE(CURLE_FAILED_INIT); } state(conn, SSH_HOSTKEY); /* FALLTHROUGH */ case SSH_HOSTKEY: rc = myssh_is_known(conn); if(rc != SSH_OK) { MOVE_TO_ERROR_STATE(CURLE_PEER_FAILED_VERIFICATION); } state(conn, SSH_AUTHLIST); /* FALLTHROUGH */ case SSH_AUTHLIST:{ sshc->authed = FALSE; rc = ssh_userauth_none(sshc->ssh_session, NULL); if(rc == SSH_AUTH_AGAIN) { rc = SSH_AGAIN; break; } if(rc == SSH_AUTH_SUCCESS) { sshc->authed = TRUE; infof(data, "Authenticated with none\n"); state(conn, SSH_AUTH_DONE); break; } else if(rc == SSH_AUTH_ERROR) { MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED); } sshc->auth_methods = ssh_userauth_list(sshc->ssh_session, NULL); if(sshc->auth_methods & SSH_AUTH_METHOD_PUBLICKEY) { state(conn, SSH_AUTH_PKEY_INIT); infof(data, "Authentication using SSH public key file\n"); } else if(sshc->auth_methods & SSH_AUTH_METHOD_GSSAPI_MIC) { state(conn, SSH_AUTH_GSSAPI); } else if(sshc->auth_methods & SSH_AUTH_METHOD_INTERACTIVE) { state(conn, SSH_AUTH_KEY_INIT); } else if(sshc->auth_methods & SSH_AUTH_METHOD_PASSWORD) { state(conn, SSH_AUTH_PASS_INIT); } else { /* unsupported authentication method */ MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED); } break; } case SSH_AUTH_PKEY_INIT: if(!(data->set.ssh_auth_types & CURLSSH_AUTH_PUBLICKEY)) { MOVE_TO_SECONDARY_AUTH; } /* Two choices, (1) private key was given on CMD, * (2) use the "default" keys. */ if(data->set.str[STRING_SSH_PRIVATE_KEY]) { if(sshc->pubkey && !data->set.ssl.key_passwd) { rc = ssh_userauth_try_publickey(sshc->ssh_session, NULL, sshc->pubkey); if(rc == SSH_AUTH_AGAIN) { rc = SSH_AGAIN; break; } if(rc != SSH_OK) { MOVE_TO_SECONDARY_AUTH; } } rc = ssh_pki_import_privkey_file(data-> set.str[STRING_SSH_PRIVATE_KEY], data->set.ssl.key_passwd, NULL, NULL, &sshc->privkey); if(rc != SSH_OK) { failf(data, "Could not load private key file %s", data->set.str[STRING_SSH_PRIVATE_KEY]); MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED); break; } state(conn, SSH_AUTH_PKEY); break; } else { rc = ssh_userauth_publickey_auto(sshc->ssh_session, NULL, data->set.ssl.key_passwd); if(rc == SSH_AUTH_AGAIN) { rc = SSH_AGAIN; break; } if(rc == SSH_AUTH_SUCCESS) { rc = SSH_OK; sshc->authed = TRUE; infof(data, "Completed public key authentication\n"); state(conn, SSH_AUTH_DONE); break; } MOVE_TO_SECONDARY_AUTH; } break; case SSH_AUTH_PKEY: rc = ssh_userauth_publickey(sshc->ssh_session, NULL, sshc->privkey); if(rc == SSH_AUTH_AGAIN) { rc = SSH_AGAIN; break; } if(rc == SSH_AUTH_SUCCESS) { sshc->authed = TRUE; infof(data, "Completed public key authentication\n"); state(conn, SSH_AUTH_DONE); break; } else { infof(data, "Failed public key authentication (rc: %d)\n", rc); MOVE_TO_SECONDARY_AUTH; } break; case SSH_AUTH_GSSAPI: if(!(data->set.ssh_auth_types & CURLSSH_AUTH_GSSAPI)) { MOVE_TO_TERTIARY_AUTH; } rc = ssh_userauth_gssapi(sshc->ssh_session); if(rc == SSH_AUTH_AGAIN) { rc = SSH_AGAIN; break; } if(rc == SSH_AUTH_SUCCESS) { rc = SSH_OK; sshc->authed = TRUE; infof(data, "Completed gssapi authentication\n"); state(conn, SSH_AUTH_DONE); break; } MOVE_TO_TERTIARY_AUTH; break; case SSH_AUTH_KEY_INIT: if(data->set.ssh_auth_types & CURLSSH_AUTH_KEYBOARD) { state(conn, SSH_AUTH_KEY); } else { MOVE_TO_LAST_AUTH; } break; case SSH_AUTH_KEY: /* Authentication failed. Continue with keyboard-interactive now. */ rc = myssh_auth_interactive(conn); if(rc == SSH_AGAIN) { break; } if(rc == SSH_OK) { sshc->authed = TRUE; infof(data, "completed keyboard interactive authentication\n"); } state(conn, SSH_AUTH_DONE); break; case SSH_AUTH_PASS_INIT: if(!(data->set.ssh_auth_types & CURLSSH_AUTH_PASSWORD)) { /* Host key authentication is intentionally not implemented */ MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED); } state(conn, SSH_AUTH_PASS); /* FALLTHROUGH */ case SSH_AUTH_PASS: rc = ssh_userauth_password(sshc->ssh_session, NULL, conn->passwd); if(rc == SSH_AUTH_AGAIN) { rc = SSH_AGAIN; break; } if(rc == SSH_AUTH_SUCCESS) { sshc->authed = TRUE; infof(data, "Completed password authentication\n"); state(conn, SSH_AUTH_DONE); } else { MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED); } break; case SSH_AUTH_DONE: if(!sshc->authed) { failf(data, "Authentication failure"); MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED); break; } /* * At this point we have an authenticated ssh session. */ infof(data, "Authentication complete\n"); Curl_pgrsTime(conn->data, TIMER_APPCONNECT); /* SSH is connected */ conn->sockfd = sock; conn->writesockfd = CURL_SOCKET_BAD; if(conn->handler->protocol == CURLPROTO_SFTP) { state(conn, SSH_SFTP_INIT); break; } infof(data, "SSH CONNECT phase done\n"); state(conn, SSH_STOP); break; case SSH_SFTP_INIT: ssh_set_blocking(sshc->ssh_session, 1); sshc->sftp_session = sftp_new(sshc->ssh_session); if(!sshc->sftp_session) { failf(data, "Failure initializing sftp session: %s", ssh_get_error(sshc->ssh_session)); MOVE_TO_ERROR_STATE(CURLE_COULDNT_CONNECT); break; } rc = sftp_init(sshc->sftp_session); if(rc != SSH_OK) { rc = sftp_get_error(sshc->sftp_session); failf(data, "Failure initializing sftp session: %s", ssh_get_error(sshc->ssh_session)); MOVE_TO_ERROR_STATE(sftp_error_to_CURLE(rc)); break; } state(conn, SSH_SFTP_REALPATH); /* FALLTHROUGH */ case SSH_SFTP_REALPATH: /* * Get the "home" directory */ sshc->homedir = sftp_canonicalize_path(sshc->sftp_session, "."); if(sshc->homedir == NULL) { MOVE_TO_ERROR_STATE(CURLE_COULDNT_CONNECT); } conn->data->state.most_recent_ftp_entrypath = sshc->homedir; /* This is the last step in the SFTP connect phase. Do note that while we get the homedir here, we get the "workingpath" in the DO action since the homedir will remain the same between request but the working path will not. */ DEBUGF(infof(data, "SSH CONNECT phase done\n")); state(conn, SSH_STOP); break; case SSH_SFTP_QUOTE_INIT: result = Curl_getworkingpath(conn, sshc->homedir, &protop->path); if(result) { sshc->actualcode = result; state(conn, SSH_STOP); break; } if(data->set.quote) { infof(data, "Sending quote commands\n"); sshc->quote_item = data->set.quote; state(conn, SSH_SFTP_QUOTE); } else { state(conn, SSH_SFTP_GETINFO); } break; case SSH_SFTP_POSTQUOTE_INIT: if(data->set.postquote) { infof(data, "Sending quote commands\n"); sshc->quote_item = data->set.postquote; state(conn, SSH_SFTP_QUOTE); } else { state(conn, SSH_STOP); } break; case SSH_SFTP_QUOTE: /* Send any quote commands */ sftp_quote(conn); break; case SSH_SFTP_NEXT_QUOTE: Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); sshc->quote_item = sshc->quote_item->next; if(sshc->quote_item) { state(conn, SSH_SFTP_QUOTE); } else { if(sshc->nextstate != SSH_NO_STATE) { state(conn, sshc->nextstate); sshc->nextstate = SSH_NO_STATE; } else { state(conn, SSH_SFTP_GETINFO); } } break; case SSH_SFTP_QUOTE_STAT: sftp_quote_stat(conn); break; case SSH_SFTP_QUOTE_SETSTAT: rc = sftp_setstat(sshc->sftp_session, sshc->quote_path2, sshc->quote_attrs); if(rc != 0 && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Attempt to set SFTP stats failed: %s", ssh_get_error(sshc->ssh_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; /* sshc->actualcode = sftp_error_to_CURLE(err); * we do not send the actual error; we return * the error the libssh2 backend is returning */ break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_SYMLINK: rc = sftp_symlink(sshc->sftp_session, sshc->quote_path2, sshc->quote_path1); if(rc != 0 && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "symlink command failed: %s", ssh_get_error(sshc->ssh_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_MKDIR: rc = sftp_mkdir(sshc->sftp_session, sshc->quote_path1, (mode_t)data->set.new_directory_perms); if(rc != 0 && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); failf(data, "mkdir command failed: %s", ssh_get_error(sshc->ssh_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_RENAME: rc = sftp_rename(sshc->sftp_session, sshc->quote_path1, sshc->quote_path2); if(rc != 0 && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "rename command failed: %s", ssh_get_error(sshc->ssh_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_RMDIR: rc = sftp_rmdir(sshc->sftp_session, sshc->quote_path1); if(rc != 0 && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); failf(data, "rmdir command failed: %s", ssh_get_error(sshc->ssh_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_UNLINK: rc = sftp_unlink(sshc->sftp_session, sshc->quote_path1); if(rc != 0 && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); failf(data, "rm command failed: %s", ssh_get_error(sshc->ssh_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_STATVFS: { sftp_statvfs_t statvfs; statvfs = sftp_statvfs(sshc->sftp_session, sshc->quote_path1); if(!statvfs && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); failf(data, "statvfs command failed: %s", ssh_get_error(sshc->ssh_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } else if(statvfs) { char *tmp = aprintf("statvfs:\n" "f_bsize: %llu\n" "f_frsize: %llu\n" "f_blocks: %llu\n" "f_bfree: %llu\n" "f_bavail: %llu\n" "f_files: %llu\n" "f_ffree: %llu\n" "f_favail: %llu\n" "f_fsid: %llu\n" "f_flag: %llu\n" "f_namemax: %llu\n", statvfs->f_bsize, statvfs->f_frsize, statvfs->f_blocks, statvfs->f_bfree, statvfs->f_bavail, statvfs->f_files, statvfs->f_ffree, statvfs->f_favail, statvfs->f_fsid, statvfs->f_flag, statvfs->f_namemax); sftp_statvfs_free(statvfs); if(!tmp) { result = CURLE_OUT_OF_MEMORY; state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; break; } result = Curl_client_write(conn, CLIENTWRITE_HEADER, tmp, strlen(tmp)); free(tmp); if(result) { state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; } } state(conn, SSH_SFTP_NEXT_QUOTE); break; } case SSH_SFTP_GETINFO: if(data->set.get_filetime) { state(conn, SSH_SFTP_FILETIME); } else { state(conn, SSH_SFTP_TRANS_INIT); } break; case SSH_SFTP_FILETIME: { sftp_attributes attrs; attrs = sftp_stat(sshc->sftp_session, protop->path); if(attrs != 0) { data->info.filetime = attrs->mtime; sftp_attributes_free(attrs); } state(conn, SSH_SFTP_TRANS_INIT); break; } case SSH_SFTP_TRANS_INIT: if(data->set.upload) state(conn, SSH_SFTP_UPLOAD_INIT); else { if(protop->path[strlen(protop->path)-1] == '/') state(conn, SSH_SFTP_READDIR_INIT); else state(conn, SSH_SFTP_DOWNLOAD_INIT); } break; case SSH_SFTP_UPLOAD_INIT: { int flags; if(data->state.resume_from != 0) { sftp_attributes attrs; if(data->state.resume_from < 0) { attrs = sftp_stat(sshc->sftp_session, protop->path); if(attrs != 0) { curl_off_t size = attrs->size; if(size < 0) { failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size); MOVE_TO_ERROR_STATE(CURLE_BAD_DOWNLOAD_RESUME); } data->state.resume_from = attrs->size; sftp_attributes_free(attrs); } else { data->state.resume_from = 0; } } } if(data->set.ftp_append) /* Try to open for append, but create if nonexisting */ flags = O_WRONLY|O_CREAT|O_APPEND; else if(data->state.resume_from > 0) /* If we have restart position then open for append */ flags = O_WRONLY|O_APPEND; else /* Clear file before writing (normal behaviour) */ flags = O_WRONLY|O_CREAT|O_TRUNC; if(sshc->sftp_file) sftp_close(sshc->sftp_file); sshc->sftp_file = sftp_open(sshc->sftp_session, protop->path, flags, (mode_t)data->set.new_file_perms); if(!sshc->sftp_file) { err = sftp_get_error(sshc->sftp_session); if(((err == SSH_FX_NO_SUCH_FILE || err == SSH_FX_FAILURE || err == SSH_FX_NO_SUCH_PATH)) && (data->set.ftp_create_missing_dirs && (strlen(protop->path) > 1))) { /* try to create the path remotely */ rc = 0; sshc->secondCreateDirs = 1; state(conn, SSH_SFTP_CREATE_DIRS_INIT); break; } else { MOVE_TO_SFTP_CLOSE_STATE(); } } /* If we have a restart point then we need to seek to the correct position. */ if(data->state.resume_from > 0) { /* Let's read off the proper amount of bytes from the input. */ if(conn->seek_func) { Curl_set_in_callback(data, true); seekerr = conn->seek_func(conn->seek_client, data->state.resume_from, SEEK_SET); Curl_set_in_callback(data, false); } if(seekerr != CURL_SEEKFUNC_OK) { curl_off_t passed = 0; if(seekerr != CURL_SEEKFUNC_CANTSEEK) { failf(data, "Could not seek stream"); return CURLE_FTP_COULDNT_USE_REST; } /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */ do { size_t readthisamountnow = (data->state.resume_from - passed > data->set.buffer_size) ? (size_t)data->set.buffer_size : curlx_sotouz(data->state.resume_from - passed); size_t actuallyread = data->state.fread_func(data->state.buffer, 1, readthisamountnow, data->state.in); passed += actuallyread; if((actuallyread == 0) || (actuallyread > readthisamountnow)) { /* this checks for greater-than only to make sure that the CURL_READFUNC_ABORT return code still aborts */ failf(data, "Failed to read data"); MOVE_TO_ERROR_STATE(CURLE_FTP_COULDNT_USE_REST); } } while(passed < data->state.resume_from); } /* now, decrease the size of the read */ if(data->state.infilesize > 0) { data->state.infilesize -= data->state.resume_from; data->req.size = data->state.infilesize; Curl_pgrsSetUploadSize(data, data->state.infilesize); } rc = sftp_seek64(sshc->sftp_file, data->state.resume_from); if(rc != 0) { MOVE_TO_SFTP_CLOSE_STATE(); } } if(data->state.infilesize > 0) { data->req.size = data->state.infilesize; Curl_pgrsSetUploadSize(data, data->state.infilesize); } /* upload data */ Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->sockfd = conn->writesockfd; /* store this original bitmask setup to use later on if we can't figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; /* we want to use the _sending_ function even when the socket turns out readable as the underlying libssh sftp send function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_OUT; /* since we don't really wait for anything at this point, we want the state machine to move on as soon as possible so we set a very short timeout here */ Curl_expire(data, 0, EXPIRE_RUN_NOW); state(conn, SSH_STOP); break; } case SSH_SFTP_CREATE_DIRS_INIT: if(strlen(protop->path) > 1) { sshc->slash_pos = protop->path + 1; /* ignore the leading '/' */ state(conn, SSH_SFTP_CREATE_DIRS); } else { state(conn, SSH_SFTP_UPLOAD_INIT); } break; case SSH_SFTP_CREATE_DIRS: sshc->slash_pos = strchr(sshc->slash_pos, '/'); if(sshc->slash_pos) { *sshc->slash_pos = 0; infof(data, "Creating directory '%s'\n", protop->path); state(conn, SSH_SFTP_CREATE_DIRS_MKDIR); break; } state(conn, SSH_SFTP_UPLOAD_INIT); break; case SSH_SFTP_CREATE_DIRS_MKDIR: /* 'mode' - parameter is preliminary - default to 0644 */ rc = sftp_mkdir(sshc->sftp_session, protop->path, (mode_t)data->set.new_directory_perms); *sshc->slash_pos = '/'; ++sshc->slash_pos; if(rc < 0) { /* * Abort if failure wasn't that the dir already exists or the * permission was denied (creation might succeed further down the * path) - retry on unspecific FAILURE also */ err = sftp_get_error(sshc->sftp_session); if((err != SSH_FX_FILE_ALREADY_EXISTS) && (err != SSH_FX_FAILURE) && (err != SSH_FX_PERMISSION_DENIED)) { MOVE_TO_SFTP_CLOSE_STATE(); } rc = 0; /* clear rc and continue */ } state(conn, SSH_SFTP_CREATE_DIRS); break; case SSH_SFTP_READDIR_INIT: Curl_pgrsSetDownloadSize(data, -1); if(data->set.opt_no_body) { state(conn, SSH_STOP); break; } /* * This is a directory that we are trying to get, so produce a directory * listing */ sshc->sftp_dir = sftp_opendir(sshc->sftp_session, protop->path); if(!sshc->sftp_dir) { failf(data, "Could not open directory for reading: %s", ssh_get_error(sshc->ssh_session)); MOVE_TO_SFTP_CLOSE_STATE(); } state(conn, SSH_SFTP_READDIR); break; case SSH_SFTP_READDIR: if(sshc->readdir_attrs) sftp_attributes_free(sshc->readdir_attrs); sshc->readdir_attrs = sftp_readdir(sshc->sftp_session, sshc->sftp_dir); if(sshc->readdir_attrs) { sshc->readdir_filename = sshc->readdir_attrs->name; sshc->readdir_longentry = sshc->readdir_attrs->longname; sshc->readdir_len = strlen(sshc->readdir_filename); if(data->set.ftp_list_only) { char *tmpLine; tmpLine = aprintf("%s\n", sshc->readdir_filename); if(tmpLine == NULL) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } result = Curl_client_write(conn, CLIENTWRITE_BODY, tmpLine, sshc->readdir_len + 1); free(tmpLine); if(result) { state(conn, SSH_STOP); break; } /* since this counts what we send to the client, we include the newline in this counter */ data->req.bytecount += sshc->readdir_len + 1; /* output debug output if that is requested */ if(data->set.verbose) { Curl_debug(data, CURLINFO_DATA_OUT, (char *)sshc->readdir_filename, sshc->readdir_len); } } else { sshc->readdir_currLen = strlen(sshc->readdir_longentry); sshc->readdir_totalLen = 80 + sshc->readdir_currLen; sshc->readdir_line = calloc(sshc->readdir_totalLen, 1); if(!sshc->readdir_line) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } memcpy(sshc->readdir_line, sshc->readdir_longentry, sshc->readdir_currLen); if((sshc->readdir_attrs->flags & SSH_FILEXFER_ATTR_PERMISSIONS) && ((sshc->readdir_attrs->permissions & S_IFMT) == S_IFLNK)) { sshc->readdir_linkPath = malloc(PATH_MAX + 1); if(sshc->readdir_linkPath == NULL) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } msnprintf(sshc->readdir_linkPath, PATH_MAX, "%s%s", protop->path, sshc->readdir_filename); state(conn, SSH_SFTP_READDIR_LINK); break; } state(conn, SSH_SFTP_READDIR_BOTTOM); break; } } else if(sshc->readdir_attrs == NULL && sftp_dir_eof(sshc->sftp_dir)) { state(conn, SSH_SFTP_READDIR_DONE); break; } else { failf(data, "Could not open remote file for reading: %s", ssh_get_error(sshc->ssh_session)); MOVE_TO_SFTP_CLOSE_STATE(); break; } break; case SSH_SFTP_READDIR_LINK: if(sshc->readdir_link_attrs) sftp_attributes_free(sshc->readdir_link_attrs); sshc->readdir_link_attrs = sftp_lstat(sshc->sftp_session, sshc->readdir_linkPath); if(sshc->readdir_link_attrs == 0) { failf(data, "Could not read symlink for reading: %s", ssh_get_error(sshc->ssh_session)); MOVE_TO_SFTP_CLOSE_STATE(); } if(sshc->readdir_link_attrs->name == NULL) { sshc->readdir_tmp = sftp_readlink(sshc->sftp_session, sshc->readdir_linkPath); if(sshc->readdir_filename == NULL) sshc->readdir_len = 0; else sshc->readdir_len = strlen(sshc->readdir_tmp); sshc->readdir_longentry = NULL; sshc->readdir_filename = sshc->readdir_tmp; } else { sshc->readdir_len = strlen(sshc->readdir_link_attrs->name); sshc->readdir_filename = sshc->readdir_link_attrs->name; sshc->readdir_longentry = sshc->readdir_link_attrs->longname; } Curl_safefree(sshc->readdir_linkPath); /* get room for the filename and extra output */ sshc->readdir_totalLen += 4 + sshc->readdir_len; new_readdir_line = Curl_saferealloc(sshc->readdir_line, sshc->readdir_totalLen); if(!new_readdir_line) { sshc->readdir_line = NULL; state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } sshc->readdir_line = new_readdir_line; sshc->readdir_currLen += msnprintf(sshc->readdir_line + sshc->readdir_currLen, sshc->readdir_totalLen - sshc->readdir_currLen, " -> %s", sshc->readdir_filename); sftp_attributes_free(sshc->readdir_link_attrs); sshc->readdir_link_attrs = NULL; sshc->readdir_filename = NULL; sshc->readdir_longentry = NULL; state(conn, SSH_SFTP_READDIR_BOTTOM); /* FALLTHROUGH */ case SSH_SFTP_READDIR_BOTTOM: sshc->readdir_currLen += msnprintf(sshc->readdir_line + sshc->readdir_currLen, sshc->readdir_totalLen - sshc->readdir_currLen, "\n"); result = Curl_client_write(conn, CLIENTWRITE_BODY, sshc->readdir_line, sshc->readdir_currLen); if(!result) { /* output debug output if that is requested */ if(data->set.verbose) { Curl_debug(data, CURLINFO_DATA_OUT, sshc->readdir_line, sshc->readdir_currLen); } data->req.bytecount += sshc->readdir_currLen; } Curl_safefree(sshc->readdir_line); ssh_string_free_char(sshc->readdir_tmp); sshc->readdir_tmp = NULL; if(result) { state(conn, SSH_STOP); } else state(conn, SSH_SFTP_READDIR); break; case SSH_SFTP_READDIR_DONE: sftp_closedir(sshc->sftp_dir); sshc->sftp_dir = NULL; /* no data to transfer */ Curl_setup_transfer(data, -1, -1, FALSE, -1); state(conn, SSH_STOP); break; case SSH_SFTP_DOWNLOAD_INIT: /* * Work on getting the specified file */ if(sshc->sftp_file) sftp_close(sshc->sftp_file); sshc->sftp_file = sftp_open(sshc->sftp_session, protop->path, O_RDONLY, (mode_t)data->set.new_file_perms); if(!sshc->sftp_file) { failf(data, "Could not open remote file for reading: %s", ssh_get_error(sshc->ssh_session)); MOVE_TO_SFTP_CLOSE_STATE(); } state(conn, SSH_SFTP_DOWNLOAD_STAT); break; case SSH_SFTP_DOWNLOAD_STAT: { sftp_attributes attrs; curl_off_t size; attrs = sftp_fstat(sshc->sftp_file); if(!attrs || !(attrs->flags & SSH_FILEXFER_ATTR_SIZE) || (attrs->size == 0)) { /* * sftp_fstat didn't return an error, so maybe the server * just doesn't support stat() * OR the server doesn't return a file size with a stat() * OR file size is 0 */ data->req.size = -1; data->req.maxdownload = -1; Curl_pgrsSetDownloadSize(data, -1); size = 0; } else { size = attrs->size; sftp_attributes_free(attrs); if(size < 0) { failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size); return CURLE_BAD_DOWNLOAD_RESUME; } if(conn->data->state.use_range) { curl_off_t from, to; char *ptr; char *ptr2; CURLofft to_t; CURLofft from_t; from_t = curlx_strtoofft(conn->data->state.range, &ptr, 0, &from); if(from_t == CURL_OFFT_FLOW) { return CURLE_RANGE_ERROR; } while(*ptr && (ISSPACE(*ptr) || (*ptr == '-'))) ptr++; to_t = curlx_strtoofft(ptr, &ptr2, 0, &to); if(to_t == CURL_OFFT_FLOW) { return CURLE_RANGE_ERROR; } if((to_t == CURL_OFFT_INVAL) /* no "to" value given */ || (to >= size)) { to = size - 1; } if(from_t) { /* from is relative to end of file */ from = size - to; to = size - 1; } if(from > size) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")", from, size); return CURLE_BAD_DOWNLOAD_RESUME; } if(from > to) { from = to; size = 0; } else { size = to - from + 1; } rc = sftp_seek64(sshc->sftp_file, from); if(rc != 0) { MOVE_TO_SFTP_CLOSE_STATE(); } } data->req.size = size; data->req.maxdownload = size; Curl_pgrsSetDownloadSize(data, size); } /* We can resume if we can seek to the resume position */ if(data->state.resume_from) { if(data->state.resume_from < 0) { /* We're supposed to download the last abs(from) bytes */ if((curl_off_t)size < -data->state.resume_from) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")", data->state.resume_from, size); return CURLE_BAD_DOWNLOAD_RESUME; } /* download from where? */ data->state.resume_from += size; } else { if((curl_off_t)size < data->state.resume_from) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")", data->state.resume_from, size); return CURLE_BAD_DOWNLOAD_RESUME; } } /* Does a completed file need to be seeked and started or closed ? */ /* Now store the number of bytes we are expected to download */ data->req.size = size - data->state.resume_from; data->req.maxdownload = size - data->state.resume_from; Curl_pgrsSetDownloadSize(data, size - data->state.resume_from); rc = sftp_seek64(sshc->sftp_file, data->state.resume_from); if(rc != 0) { MOVE_TO_SFTP_CLOSE_STATE(); } } } /* Setup the actual download */ if(data->req.size == 0) { /* no data to transfer */ Curl_setup_transfer(data, -1, -1, FALSE, -1); infof(data, "File already completely downloaded\n"); state(conn, SSH_STOP); break; } Curl_setup_transfer(data, FIRSTSOCKET, data->req.size, FALSE, -1); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->writesockfd = conn->sockfd; /* we want to use the _receiving_ function even when the socket turns out writableable as the underlying libssh recv function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_IN; if(result) { /* this should never occur; the close state should be entered at the time the error occurs */ state(conn, SSH_SFTP_CLOSE); sshc->actualcode = result; } else { sshc->sftp_recv_state = 0; state(conn, SSH_STOP); } break; case SSH_SFTP_CLOSE: if(sshc->sftp_file) { sftp_close(sshc->sftp_file); sshc->sftp_file = NULL; } Curl_safefree(protop->path); DEBUGF(infof(data, "SFTP DONE done\n")); /* Check if nextstate is set and move .nextstate could be POSTQUOTE_INIT After nextstate is executed, the control should come back to SSH_SFTP_CLOSE to pass the correct result back */ if(sshc->nextstate != SSH_NO_STATE && sshc->nextstate != SSH_SFTP_CLOSE) { state(conn, sshc->nextstate); sshc->nextstate = SSH_SFTP_CLOSE; } else { state(conn, SSH_STOP); result = sshc->actualcode; } break; case SSH_SFTP_SHUTDOWN: /* during times we get here due to a broken transfer and then the sftp_handle might not have been taken down so make sure that is done before we proceed */ if(sshc->sftp_file) { sftp_close(sshc->sftp_file); sshc->sftp_file = NULL; } if(sshc->sftp_session) { sftp_free(sshc->sftp_session); sshc->sftp_session = NULL; } SSH_STRING_FREE_CHAR(sshc->homedir); conn->data->state.most_recent_ftp_entrypath = NULL; state(conn, SSH_SESSION_DISCONNECT); break; case SSH_SCP_TRANS_INIT: result = Curl_getworkingpath(conn, sshc->homedir, &protop->path); if(result) { sshc->actualcode = result; state(conn, SSH_STOP); break; } /* Functions from the SCP subsystem cannot handle/return SSH_AGAIN */ ssh_set_blocking(sshc->ssh_session, 1); if(data->set.upload) { if(data->state.infilesize < 0) { failf(data, "SCP requires a known file size for upload"); sshc->actualcode = CURLE_UPLOAD_FAILED; MOVE_TO_ERROR_STATE(CURLE_UPLOAD_FAILED); } sshc->scp_session = ssh_scp_new(sshc->ssh_session, SSH_SCP_WRITE, protop->path); state(conn, SSH_SCP_UPLOAD_INIT); } else { sshc->scp_session = ssh_scp_new(sshc->ssh_session, SSH_SCP_READ, protop->path); state(conn, SSH_SCP_DOWNLOAD_INIT); } if(!sshc->scp_session) { err_msg = ssh_get_error(sshc->ssh_session); failf(conn->data, "%s", err_msg); MOVE_TO_ERROR_STATE(CURLE_UPLOAD_FAILED); } break; case SSH_SCP_UPLOAD_INIT: rc = ssh_scp_init(sshc->scp_session); if(rc != SSH_OK) { err_msg = ssh_get_error(sshc->ssh_session); failf(conn->data, "%s", err_msg); MOVE_TO_ERROR_STATE(CURLE_UPLOAD_FAILED); } rc = ssh_scp_push_file(sshc->scp_session, protop->path, data->state.infilesize, (int)data->set.new_file_perms); if(rc != SSH_OK) { err_msg = ssh_get_error(sshc->ssh_session); failf(conn->data, "%s", err_msg); MOVE_TO_ERROR_STATE(CURLE_UPLOAD_FAILED); } /* upload data */ Curl_setup_transfer(data, -1, data->req.size, FALSE, FIRSTSOCKET); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->sockfd = conn->writesockfd; /* store this original bitmask setup to use later on if we can't figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; /* we want to use the _sending_ function even when the socket turns out readable as the underlying libssh scp send function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_OUT; state(conn, SSH_STOP); break; case SSH_SCP_DOWNLOAD_INIT: rc = ssh_scp_init(sshc->scp_session); if(rc != SSH_OK) { err_msg = ssh_get_error(sshc->ssh_session); failf(conn->data, "%s", err_msg); MOVE_TO_ERROR_STATE(CURLE_COULDNT_CONNECT); } state(conn, SSH_SCP_DOWNLOAD); /* FALLTHROUGH */ case SSH_SCP_DOWNLOAD:{ curl_off_t bytecount; rc = ssh_scp_pull_request(sshc->scp_session); if(rc != SSH_SCP_REQUEST_NEWFILE) { err_msg = ssh_get_error(sshc->ssh_session); failf(conn->data, "%s", err_msg); MOVE_TO_ERROR_STATE(CURLE_REMOTE_FILE_NOT_FOUND); break; } /* download data */ bytecount = ssh_scp_request_get_size(sshc->scp_session); data->req.maxdownload = (curl_off_t) bytecount; Curl_setup_transfer(data, FIRSTSOCKET, bytecount, FALSE, -1); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->writesockfd = conn->sockfd; /* we want to use the _receiving_ function even when the socket turns out writableable as the underlying libssh recv function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_IN; state(conn, SSH_STOP); break; } case SSH_SCP_DONE: if(data->set.upload) state(conn, SSH_SCP_SEND_EOF); else state(conn, SSH_SCP_CHANNEL_FREE); break; case SSH_SCP_SEND_EOF: if(sshc->scp_session) { rc = ssh_scp_close(sshc->scp_session); if(rc == SSH_AGAIN) { /* Currently the ssh_scp_close handles waiting for EOF in * blocking way. */ break; } if(rc != SSH_OK) { infof(data, "Failed to close libssh scp channel: %s\n", ssh_get_error(sshc->ssh_session)); } } state(conn, SSH_SCP_CHANNEL_FREE); break; case SSH_SCP_CHANNEL_FREE: if(sshc->scp_session) { ssh_scp_free(sshc->scp_session); sshc->scp_session = NULL; } DEBUGF(infof(data, "SCP DONE phase complete\n")); ssh_set_blocking(sshc->ssh_session, 0); state(conn, SSH_SESSION_DISCONNECT); /* FALLTHROUGH */ case SSH_SESSION_DISCONNECT: /* during weird times when we've been prematurely aborted, the channel is still alive when we reach this state and we MUST kill the channel properly first */ if(sshc->scp_session) { ssh_scp_free(sshc->scp_session); sshc->scp_session = NULL; } ssh_disconnect(sshc->ssh_session); SSH_STRING_FREE_CHAR(sshc->homedir); conn->data->state.most_recent_ftp_entrypath = NULL; state(conn, SSH_SESSION_FREE); /* FALLTHROUGH */ case SSH_SESSION_FREE: if(sshc->ssh_session) { ssh_free(sshc->ssh_session); sshc->ssh_session = NULL; } /* worst-case scenario cleanup */ DEBUGASSERT(sshc->ssh_session == NULL); DEBUGASSERT(sshc->scp_session == NULL); if(sshc->readdir_tmp) { ssh_string_free_char(sshc->readdir_tmp); sshc->readdir_tmp = NULL; } if(sshc->quote_attrs) sftp_attributes_free(sshc->quote_attrs); if(sshc->readdir_attrs) sftp_attributes_free(sshc->readdir_attrs); if(sshc->readdir_link_attrs) sftp_attributes_free(sshc->readdir_link_attrs); if(sshc->privkey) ssh_key_free(sshc->privkey); if(sshc->pubkey) ssh_key_free(sshc->pubkey); Curl_safefree(sshc->rsa_pub); Curl_safefree(sshc->rsa); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); Curl_safefree(sshc->readdir_line); Curl_safefree(sshc->readdir_linkPath); SSH_STRING_FREE_CHAR(sshc->homedir); /* the code we are about to return */ result = sshc->actualcode; memset(sshc, 0, sizeof(struct ssh_conn)); connclose(conn, "SSH session free"); sshc->state = SSH_SESSION_FREE; /* current */ sshc->nextstate = SSH_NO_STATE; state(conn, SSH_STOP); break; case SSH_QUIT: /* fallthrough, just stop! */ default: /* internal error */ sshc->nextstate = SSH_NO_STATE; state(conn, SSH_STOP); break; } } while(!rc && (sshc->state != SSH_STOP)); if(rc == SSH_AGAIN) { /* we would block, we need to wait for the socket to be ready (in the right direction too)! */ *block = TRUE; } return result; } /* called by the multi interface to figure out what socket(s) to wait for and for what actions in the DO_DONE, PERFORM and WAITPERFORM states */ static int myssh_perform_getsock(const struct connectdata *conn, curl_socket_t *sock) { int bitmap = GETSOCK_BLANK; sock[0] = conn->sock[FIRSTSOCKET]; if(conn->waitfor & KEEP_RECV) bitmap |= GETSOCK_READSOCK(FIRSTSOCKET); if(conn->waitfor & KEEP_SEND) bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET); return bitmap; } /* Generic function called by the multi interface to figure out what socket(s) to wait for and for what actions during the DOING and PROTOCONNECT states*/ static int myssh_getsock(struct connectdata *conn, curl_socket_t *sock) { /* if we know the direction we can use the generic *_getsock() function even for the protocol_connect and doing states */ return myssh_perform_getsock(conn, sock); } static void myssh_block2waitfor(struct connectdata *conn, bool block) { struct ssh_conn *sshc = &conn->proto.sshc; /* If it didn't block, or nothing was returned by ssh_get_poll_flags * have the original set */ conn->waitfor = sshc->orig_waitfor; if(block) { int dir = ssh_get_poll_flags(sshc->ssh_session); if(dir & SSH_READ_PENDING) { /* translate the libssh define bits into our own bit defines */ conn->waitfor = KEEP_RECV; } else if(dir & SSH_WRITE_PENDING) { conn->waitfor = KEEP_SEND; } } } /* called repeatedly until done from multi.c */ static CURLcode myssh_multi_statemach(struct connectdata *conn, bool *done) { struct ssh_conn *sshc = &conn->proto.sshc; bool block; /* we store the status and use that to provide a ssh_getsock() implementation */ CURLcode result = myssh_statemach_act(conn, &block); *done = (sshc->state == SSH_STOP) ? TRUE : FALSE; myssh_block2waitfor(conn, block); return result; } static CURLcode myssh_block_statemach(struct connectdata *conn, bool disconnect) { struct ssh_conn *sshc = &conn->proto.sshc; CURLcode result = CURLE_OK; struct Curl_easy *data = conn->data; while((sshc->state != SSH_STOP) && !result) { bool block; timediff_t left = 1000; struct curltime now = Curl_now(); result = myssh_statemach_act(conn, &block); if(result) break; if(!disconnect) { if(Curl_pgrsUpdate(conn)) return CURLE_ABORTED_BY_CALLBACK; result = Curl_speedcheck(data, now); if(result) break; left = Curl_timeleft(data, NULL, FALSE); if(left < 0) { failf(data, "Operation timed out"); return CURLE_OPERATION_TIMEDOUT; } } if(!result && block) { curl_socket_t fd_read = conn->sock[FIRSTSOCKET]; /* wait for the socket to become ready */ (void) Curl_socket_check(fd_read, CURL_SOCKET_BAD, CURL_SOCKET_BAD, left > 1000 ? 1000 : left); } } return result; } /* * SSH setup connection */ static CURLcode myssh_setup_connection(struct connectdata *conn) { struct SSHPROTO *ssh; conn->data->req.protop = ssh = calloc(1, sizeof(struct SSHPROTO)); if(!ssh) return CURLE_OUT_OF_MEMORY; return CURLE_OK; } static Curl_recv scp_recv, sftp_recv; static Curl_send scp_send, sftp_send; /* * Curl_ssh_connect() gets called from Curl_protocol_connect() to allow us to * do protocol-specific actions at connect-time. */ static CURLcode myssh_connect(struct connectdata *conn, bool *done) { struct ssh_conn *ssh; CURLcode result; curl_socket_t sock = conn->sock[FIRSTSOCKET]; struct Curl_easy *data = conn->data; /* initialize per-handle data if not already */ if(!data->req.protop) myssh_setup_connection(conn); /* We default to persistent connections. We set this already in this connect function to make the re-use checks properly be able to check this bit. */ connkeep(conn, "SSH default"); if(conn->handler->protocol & CURLPROTO_SCP) { conn->recv[FIRSTSOCKET] = scp_recv; conn->send[FIRSTSOCKET] = scp_send; } else { conn->recv[FIRSTSOCKET] = sftp_recv; conn->send[FIRSTSOCKET] = sftp_send; } ssh = &conn->proto.sshc; ssh->ssh_session = ssh_new(); if(ssh->ssh_session == NULL) { failf(data, "Failure initialising ssh session"); return CURLE_FAILED_INIT; } ssh_options_set(ssh->ssh_session, SSH_OPTIONS_FD, &sock); if(conn->user) { infof(data, "User: %s\n", conn->user); ssh_options_set(ssh->ssh_session, SSH_OPTIONS_USER, conn->user); } if(data->set.str[STRING_SSH_KNOWNHOSTS]) { infof(data, "Known hosts: %s\n", data->set.str[STRING_SSH_KNOWNHOSTS]); ssh_options_set(ssh->ssh_session, SSH_OPTIONS_KNOWNHOSTS, data->set.str[STRING_SSH_KNOWNHOSTS]); } ssh_options_set(ssh->ssh_session, SSH_OPTIONS_HOST, conn->host.name); if(conn->remote_port) ssh_options_set(ssh->ssh_session, SSH_OPTIONS_PORT, &conn->remote_port); if(data->set.ssh_compression) { ssh_options_set(ssh->ssh_session, SSH_OPTIONS_COMPRESSION, "zlib,zlib@openssh.com,none"); } ssh->privkey = NULL; ssh->pubkey = NULL; if(data->set.str[STRING_SSH_PUBLIC_KEY]) { int rc = ssh_pki_import_pubkey_file(data->set.str[STRING_SSH_PUBLIC_KEY], &ssh->pubkey); if(rc != SSH_OK) { failf(data, "Could not load public key file"); /* ignore */ } } /* we do not verify here, we do it at the state machine, * after connection */ state(conn, SSH_INIT); result = myssh_multi_statemach(conn, done); return result; } /* called from multi.c while DOing */ static CURLcode scp_doing(struct connectdata *conn, bool *dophase_done) { CURLcode result; result = myssh_multi_statemach(conn, dophase_done); if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } /* *********************************************************************** * * scp_perform() * * This is the actual DO function for SCP. Get a file according to * the options previously setup. */ static CURLcode scp_perform(struct connectdata *conn, bool *connected, bool *dophase_done) { CURLcode result = CURLE_OK; DEBUGF(infof(conn->data, "DO phase starts\n")); *dophase_done = FALSE; /* not done yet */ /* start the first command in the DO phase */ state(conn, SSH_SCP_TRANS_INIT); result = myssh_multi_statemach(conn, dophase_done); *connected = conn->bits.tcpconnect[FIRSTSOCKET]; if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } static CURLcode myssh_do_it(struct connectdata *conn, bool *done) { CURLcode result; bool connected = 0; struct Curl_easy *data = conn->data; struct ssh_conn *sshc = &conn->proto.sshc; *done = FALSE; /* default to false */ data->req.size = -1; /* make sure this is unknown at this point */ sshc->actualcode = CURLE_OK; /* reset error code */ sshc->secondCreateDirs = 0; /* reset the create dir attempt state variable */ Curl_pgrsSetUploadCounter(data, 0); Curl_pgrsSetDownloadCounter(data, 0); Curl_pgrsSetUploadSize(data, -1); Curl_pgrsSetDownloadSize(data, -1); if(conn->handler->protocol & CURLPROTO_SCP) result = scp_perform(conn, &connected, done); else result = sftp_perform(conn, &connected, done); return result; } /* BLOCKING, but the function is using the state machine so the only reason this is still blocking is that the multi interface code has no support for disconnecting operations that takes a while */ static CURLcode scp_disconnect(struct connectdata *conn, bool dead_connection) { CURLcode result = CURLE_OK; struct ssh_conn *ssh = &conn->proto.sshc; (void) dead_connection; if(ssh->ssh_session) { /* only if there's a session still around to use! */ state(conn, SSH_SESSION_DISCONNECT); result = myssh_block_statemach(conn, TRUE); } return result; } /* generic done function for both SCP and SFTP called from their specific done functions */ static CURLcode myssh_done(struct connectdata *conn, CURLcode status) { CURLcode result = CURLE_OK; struct SSHPROTO *protop = conn->data->req.protop; if(!status) { /* run the state-machine */ result = myssh_block_statemach(conn, FALSE); } else result = status; if(protop) Curl_safefree(protop->path); if(Curl_pgrsDone(conn)) return CURLE_ABORTED_BY_CALLBACK; conn->data->req.keepon = 0; /* clear all bits */ return result; } static CURLcode scp_done(struct connectdata *conn, CURLcode status, bool premature) { (void) premature; /* not used */ if(!status) state(conn, SSH_SCP_DONE); return myssh_done(conn, status); } static ssize_t scp_send(struct connectdata *conn, int sockindex, const void *mem, size_t len, CURLcode *err) { int rc; (void) sockindex; /* we only support SCP on the fixed known primary socket */ (void) err; rc = ssh_scp_write(conn->proto.sshc.scp_session, mem, len); #if 0 /* The following code is misleading, mostly added as wishful thinking * that libssh at some point will implement non-blocking ssh_scp_write/read. * Currently rc can only be number of bytes read or SSH_ERROR. */ myssh_block2waitfor(conn, (rc == SSH_AGAIN) ? TRUE : FALSE); if(rc == SSH_AGAIN) { *err = CURLE_AGAIN; return 0; } else #endif if(rc != SSH_OK) { *err = CURLE_SSH; return -1; } return len; } static ssize_t scp_recv(struct connectdata *conn, int sockindex, char *mem, size_t len, CURLcode *err) { ssize_t nread; (void) err; (void) sockindex; /* we only support SCP on the fixed known primary socket */ /* libssh returns int */ nread = ssh_scp_read(conn->proto.sshc.scp_session, mem, len); #if 0 /* The following code is misleading, mostly added as wishful thinking * that libssh at some point will implement non-blocking ssh_scp_write/read. * Currently rc can only be SSH_OK or SSH_ERROR. */ myssh_block2waitfor(conn, (nread == SSH_AGAIN) ? TRUE : FALSE); if(nread == SSH_AGAIN) { *err = CURLE_AGAIN; nread = -1; } #endif return nread; } /* * =============== SFTP =============== */ /* *********************************************************************** * * sftp_perform() * * This is the actual DO function for SFTP. Get a file/directory according to * the options previously setup. */ static CURLcode sftp_perform(struct connectdata *conn, bool *connected, bool *dophase_done) { CURLcode result = CURLE_OK; DEBUGF(infof(conn->data, "DO phase starts\n")); *dophase_done = FALSE; /* not done yet */ /* start the first command in the DO phase */ state(conn, SSH_SFTP_QUOTE_INIT); /* run the state-machine */ result = myssh_multi_statemach(conn, dophase_done); *connected = conn->bits.tcpconnect[FIRSTSOCKET]; if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } /* called from multi.c while DOing */ static CURLcode sftp_doing(struct connectdata *conn, bool *dophase_done) { CURLcode result = myssh_multi_statemach(conn, dophase_done); if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } /* BLOCKING, but the function is using the state machine so the only reason this is still blocking is that the multi interface code has no support for disconnecting operations that takes a while */ static CURLcode sftp_disconnect(struct connectdata *conn, bool dead_connection) { CURLcode result = CURLE_OK; (void) dead_connection; DEBUGF(infof(conn->data, "SSH DISCONNECT starts now\n")); if(conn->proto.sshc.ssh_session) { /* only if there's a session still around to use! */ state(conn, SSH_SFTP_SHUTDOWN); result = myssh_block_statemach(conn, TRUE); } DEBUGF(infof(conn->data, "SSH DISCONNECT is done\n")); return result; } static CURLcode sftp_done(struct connectdata *conn, CURLcode status, bool premature) { struct ssh_conn *sshc = &conn->proto.sshc; if(!status) { /* Post quote commands are executed after the SFTP_CLOSE state to avoid errors that could happen due to open file handles during POSTQUOTE operation */ if(!premature && conn->data->set.postquote && !conn->bits.retry) sshc->nextstate = SSH_SFTP_POSTQUOTE_INIT; state(conn, SSH_SFTP_CLOSE); } return myssh_done(conn, status); } /* return number of sent bytes */ static ssize_t sftp_send(struct connectdata *conn, int sockindex, const void *mem, size_t len, CURLcode *err) { ssize_t nwrite; (void)sockindex; nwrite = sftp_write(conn->proto.sshc.sftp_file, mem, len); myssh_block2waitfor(conn, FALSE); #if 0 /* not returned by libssh on write */ if(nwrite == SSH_AGAIN) { *err = CURLE_AGAIN; nwrite = 0; } else #endif if(nwrite < 0) { *err = CURLE_SSH; nwrite = -1; } return nwrite; } /* * Return number of received (decrypted) bytes * or <0 on error */ static ssize_t sftp_recv(struct connectdata *conn, int sockindex, char *mem, size_t len, CURLcode *err) { ssize_t nread; (void)sockindex; DEBUGASSERT(len < CURL_MAX_READ_SIZE); switch(conn->proto.sshc.sftp_recv_state) { case 0: conn->proto.sshc.sftp_file_index = sftp_async_read_begin(conn->proto.sshc.sftp_file, (uint32_t)len); if(conn->proto.sshc.sftp_file_index < 0) { *err = CURLE_RECV_ERROR; return -1; } /* FALLTHROUGH */ case 1: conn->proto.sshc.sftp_recv_state = 1; nread = sftp_async_read(conn->proto.sshc.sftp_file, mem, (uint32_t)len, conn->proto.sshc.sftp_file_index); myssh_block2waitfor(conn, (nread == SSH_AGAIN)?TRUE:FALSE); if(nread == SSH_AGAIN) { *err = CURLE_AGAIN; return -1; } else if(nread < 0) { *err = CURLE_RECV_ERROR; return -1; } conn->proto.sshc.sftp_recv_state = 0; return nread; default: /* we never reach here */ return -1; } } static void sftp_quote(struct connectdata *conn) { const char *cp; struct Curl_easy *data = conn->data; struct SSHPROTO *protop = data->req.protop; struct ssh_conn *sshc = &conn->proto.sshc; CURLcode result; /* * Support some of the "FTP" commands */ char *cmd = sshc->quote_item->data; sshc->acceptfail = FALSE; /* if a command starts with an asterisk, which a legal SFTP command never can, the command will be allowed to fail without it causing any aborts or cancels etc. It will cause libcurl to act as if the command is successful, whatever the server reponds. */ if(cmd[0] == '*') { cmd++; sshc->acceptfail = TRUE; } if(strcasecompare("pwd", cmd)) { /* output debug output if that is requested */ char *tmp = aprintf("257 \"%s\" is current directory.\n", protop->path); if(!tmp) { sshc->actualcode = CURLE_OUT_OF_MEMORY; state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; return; } if(data->set.verbose) { Curl_debug(data, CURLINFO_HEADER_OUT, (char *) "PWD\n", 4); Curl_debug(data, CURLINFO_HEADER_IN, tmp, strlen(tmp)); } /* this sends an FTP-like "header" to the header callback so that the current directory can be read very similar to how it is read when using ordinary FTP. */ result = Curl_client_write(conn, CLIENTWRITE_HEADER, tmp, strlen(tmp)); free(tmp); if(result) { state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; } else state(conn, SSH_SFTP_NEXT_QUOTE); return; } /* * the arguments following the command must be separated from the * command with a space so we can check for it unconditionally */ cp = strchr(cmd, ' '); if(cp == NULL) { failf(data, "Syntax error in SFTP command. Supply parameter(s)!"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; return; } /* * also, every command takes at least one argument so we get that * first argument right now */ result = Curl_get_pathname(&cp, &sshc->quote_path1, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error: Bad first parameter"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; return; } /* * SFTP is a binary protocol, so we don't send text commands * to the server. Instead, we scan for commands used by * OpenSSH's sftp program and call the appropriate libssh * functions. */ if(strncasecompare(cmd, "chgrp ", 6) || strncasecompare(cmd, "chmod ", 6) || strncasecompare(cmd, "chown ", 6)) { /* attribute change */ /* sshc->quote_path1 contains the mode to set */ /* get the destination */ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error in chgrp/chmod/chown: " "Bad second parameter"); Curl_safefree(sshc->quote_path1); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; return; } sshc->quote_attrs = NULL; state(conn, SSH_SFTP_QUOTE_STAT); return; } if(strncasecompare(cmd, "ln ", 3) || strncasecompare(cmd, "symlink ", 8)) { /* symbolic linking */ /* sshc->quote_path1 is the source */ /* get the destination */ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error in ln/symlink: Bad second parameter"); Curl_safefree(sshc->quote_path1); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; return; } state(conn, SSH_SFTP_QUOTE_SYMLINK); return; } else if(strncasecompare(cmd, "mkdir ", 6)) { /* create dir */ state(conn, SSH_SFTP_QUOTE_MKDIR); return; } else if(strncasecompare(cmd, "rename ", 7)) { /* rename file */ /* first param is the source path */ /* second param is the dest. path */ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error in rename: Bad second parameter"); Curl_safefree(sshc->quote_path1); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; return; } state(conn, SSH_SFTP_QUOTE_RENAME); return; } else if(strncasecompare(cmd, "rmdir ", 6)) { /* delete dir */ state(conn, SSH_SFTP_QUOTE_RMDIR); return; } else if(strncasecompare(cmd, "rm ", 3)) { state(conn, SSH_SFTP_QUOTE_UNLINK); return; } #ifdef HAS_STATVFS_SUPPORT else if(strncasecompare(cmd, "statvfs ", 8)) { state(conn, SSH_SFTP_QUOTE_STATVFS); return; } #endif failf(data, "Unknown SFTP command"); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; } static void sftp_quote_stat(struct connectdata *conn) { struct Curl_easy *data = conn->data; struct ssh_conn *sshc = &conn->proto.sshc; char *cmd = sshc->quote_item->data; sshc->acceptfail = FALSE; /* if a command starts with an asterisk, which a legal SFTP command never can, the command will be allowed to fail without it causing any aborts or cancels etc. It will cause libcurl to act as if the command is successful, whatever the server reponds. */ if(cmd[0] == '*') { cmd++; sshc->acceptfail = TRUE; } /* We read the file attributes, store them in sshc->quote_attrs * and modify them accordingly to command. Then we switch to * QUOTE_SETSTAT state to write new ones. */ if(sshc->quote_attrs) sftp_attributes_free(sshc->quote_attrs); sshc->quote_attrs = sftp_stat(sshc->sftp_session, sshc->quote_path2); if(sshc->quote_attrs == NULL) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Attempt to get SFTP stats failed: %d", sftp_get_error(sshc->sftp_session)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; return; } /* Now set the new attributes... */ if(strncasecompare(cmd, "chgrp", 5)) { sshc->quote_attrs->gid = (uint32_t)strtoul(sshc->quote_path1, NULL, 10); if(sshc->quote_attrs->gid == 0 && !ISDIGIT(sshc->quote_path1[0]) && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Syntax error: chgrp gid not a number"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; return; } sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_UIDGID; } else if(strncasecompare(cmd, "chmod", 5)) { mode_t perms; perms = (mode_t)strtoul(sshc->quote_path1, NULL, 8); /* permissions are octal */ if(perms == 0 && !ISDIGIT(sshc->quote_path1[0])) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Syntax error: chmod permissions not a number"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; return; } sshc->quote_attrs->permissions = perms; sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_PERMISSIONS; } else if(strncasecompare(cmd, "chown", 5)) { sshc->quote_attrs->uid = (uint32_t)strtoul(sshc->quote_path1, NULL, 10); if(sshc->quote_attrs->uid == 0 && !ISDIGIT(sshc->quote_path1[0]) && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Syntax error: chown uid not a number"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; return; } sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_UIDGID; } /* Now send the completed structure... */ state(conn, SSH_SFTP_QUOTE_SETSTAT); return; } CURLcode Curl_ssh_init(void) { if(ssh_init()) { DEBUGF(fprintf(stderr, "Error: libssh_init failed\n")); return CURLE_FAILED_INIT; } return CURLE_OK; } void Curl_ssh_cleanup(void) { (void)ssh_finalize(); } size_t Curl_ssh_version(char *buffer, size_t buflen) { return msnprintf(buffer, buflen, "libssh/%s", CURL_LIBSSH_VERSION); } #endif /* USE_LIBSSH */ |
Added jni/curl/lib/vssh/libssh2.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* #define CURL_LIBSSH2_DEBUG */ #include "curl_setup.h" #ifdef USE_LIBSSH2 #include <limits.h> #include <libssh2.h> #include <libssh2_sftp.h> #ifdef HAVE_FCNTL_H #include <fcntl.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_ARPA_INET_H #include <arpa/inet.h> #endif #ifdef HAVE_UTSNAME_H #include <sys/utsname.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef __VMS #include <in.h> #include <inet.h> #endif #if (defined(NETWARE) && defined(__NOVELL_LIBC__)) #undef in_addr_t #define in_addr_t unsigned long #endif #include <curl/curl.h> #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "progress.h" #include "transfer.h" #include "escape.h" #include "http.h" /* for HTTP proxy tunnel stuff */ #include "ssh.h" #include "url.h" #include "speedcheck.h" #include "getinfo.h" #include "strdup.h" #include "strcase.h" #include "vtls/vtls.h" #include "connect.h" #include "strerror.h" #include "inet_ntop.h" #include "parsedate.h" /* for the week day and month names */ #include "sockaddr.h" /* required for Curl_sockaddr_storage */ #include "strtoofft.h" #include "multiif.h" #include "select.h" #include "warnless.h" #include "curl_path.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" #if LIBSSH2_VERSION_NUM >= 0x010206 /* libssh2_sftp_statvfs and friends were added in 1.2.6 */ #define HAS_STATVFS_SUPPORT 1 #endif #define sftp_libssh2_last_error(s) curlx_ultosi(libssh2_sftp_last_error(s)) #define sftp_libssh2_realpath(s,p,t,m) \ libssh2_sftp_symlink_ex((s), (p), curlx_uztoui(strlen(p)), \ (t), (m), LIBSSH2_SFTP_REALPATH) /* Local functions: */ static const char *sftp_libssh2_strerror(int err); static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc); static LIBSSH2_REALLOC_FUNC(my_libssh2_realloc); static LIBSSH2_FREE_FUNC(my_libssh2_free); static CURLcode ssh_connect(struct connectdata *conn, bool *done); static CURLcode ssh_multi_statemach(struct connectdata *conn, bool *done); static CURLcode ssh_do(struct connectdata *conn, bool *done); static CURLcode scp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode scp_doing(struct connectdata *conn, bool *dophase_done); static CURLcode scp_disconnect(struct connectdata *conn, bool dead_connection); static CURLcode sftp_done(struct connectdata *conn, CURLcode, bool premature); static CURLcode sftp_doing(struct connectdata *conn, bool *dophase_done); static CURLcode sftp_disconnect(struct connectdata *conn, bool dead); static CURLcode sftp_perform(struct connectdata *conn, bool *connected, bool *dophase_done); static int ssh_getsock(struct connectdata *conn, curl_socket_t *sock); static int ssh_perform_getsock(const struct connectdata *conn, curl_socket_t *sock); static CURLcode ssh_setup_connection(struct connectdata *conn); /* * SCP protocol handler. */ const struct Curl_handler Curl_handler_scp = { "SCP", /* scheme */ ssh_setup_connection, /* setup_connection */ ssh_do, /* do_it */ scp_done, /* done */ ZERO_NULL, /* do_more */ ssh_connect, /* connect_it */ ssh_multi_statemach, /* connecting */ scp_doing, /* doing */ ssh_getsock, /* proto_getsock */ ssh_getsock, /* doing_getsock */ ZERO_NULL, /* domore_getsock */ ssh_perform_getsock, /* perform_getsock */ scp_disconnect, /* disconnect */ ZERO_NULL, /* readwrite */ ZERO_NULL, /* connection_check */ PORT_SSH, /* defport */ CURLPROTO_SCP, /* protocol */ PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */ }; /* * SFTP protocol handler. */ const struct Curl_handler Curl_handler_sftp = { "SFTP", /* scheme */ ssh_setup_connection, /* setup_connection */ ssh_do, /* do_it */ sftp_done, /* done */ ZERO_NULL, /* do_more */ ssh_connect, /* connect_it */ ssh_multi_statemach, /* connecting */ sftp_doing, /* doing */ ssh_getsock, /* proto_getsock */ ssh_getsock, /* doing_getsock */ ZERO_NULL, /* domore_getsock */ ssh_perform_getsock, /* perform_getsock */ sftp_disconnect, /* disconnect */ ZERO_NULL, /* readwrite */ ZERO_NULL, /* connection_check */ PORT_SSH, /* defport */ CURLPROTO_SFTP, /* protocol */ PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */ }; static void kbd_callback(const char *name, int name_len, const char *instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, void **abstract) { struct connectdata *conn = (struct connectdata *)*abstract; #ifdef CURL_LIBSSH2_DEBUG fprintf(stderr, "name=%s\n", name); fprintf(stderr, "name_len=%d\n", name_len); fprintf(stderr, "instruction=%s\n", instruction); fprintf(stderr, "instruction_len=%d\n", instruction_len); fprintf(stderr, "num_prompts=%d\n", num_prompts); #else (void)name; (void)name_len; (void)instruction; (void)instruction_len; #endif /* CURL_LIBSSH2_DEBUG */ if(num_prompts == 1) { responses[0].text = strdup(conn->passwd); responses[0].length = curlx_uztoui(strlen(conn->passwd)); } (void)prompts; (void)abstract; } /* kbd_callback */ static CURLcode sftp_libssh2_error_to_CURLE(int err) { switch(err) { case LIBSSH2_FX_OK: return CURLE_OK; case LIBSSH2_FX_NO_SUCH_FILE: case LIBSSH2_FX_NO_SUCH_PATH: return CURLE_REMOTE_FILE_NOT_FOUND; case LIBSSH2_FX_PERMISSION_DENIED: case LIBSSH2_FX_WRITE_PROTECT: case LIBSSH2_FX_LOCK_CONFlICT: return CURLE_REMOTE_ACCESS_DENIED; case LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM: case LIBSSH2_FX_QUOTA_EXCEEDED: return CURLE_REMOTE_DISK_FULL; case LIBSSH2_FX_FILE_ALREADY_EXISTS: return CURLE_REMOTE_FILE_EXISTS; case LIBSSH2_FX_DIR_NOT_EMPTY: return CURLE_QUOTE_ERROR; default: break; } return CURLE_SSH; } static CURLcode libssh2_session_error_to_CURLE(int err) { switch(err) { /* Ordered by order of appearance in libssh2.h */ case LIBSSH2_ERROR_NONE: return CURLE_OK; /* This is the error returned by libssh2_scp_recv2 * on unknown file */ case LIBSSH2_ERROR_SCP_PROTOCOL: return CURLE_REMOTE_FILE_NOT_FOUND; case LIBSSH2_ERROR_SOCKET_NONE: return CURLE_COULDNT_CONNECT; case LIBSSH2_ERROR_ALLOC: return CURLE_OUT_OF_MEMORY; case LIBSSH2_ERROR_SOCKET_SEND: return CURLE_SEND_ERROR; case LIBSSH2_ERROR_HOSTKEY_INIT: case LIBSSH2_ERROR_HOSTKEY_SIGN: case LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED: case LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED: return CURLE_PEER_FAILED_VERIFICATION; case LIBSSH2_ERROR_PASSWORD_EXPIRED: return CURLE_LOGIN_DENIED; case LIBSSH2_ERROR_SOCKET_TIMEOUT: case LIBSSH2_ERROR_TIMEOUT: return CURLE_OPERATION_TIMEDOUT; case LIBSSH2_ERROR_EAGAIN: return CURLE_AGAIN; } return CURLE_SSH; } static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc) { (void)abstract; /* arg not used */ return malloc(count); } static LIBSSH2_REALLOC_FUNC(my_libssh2_realloc) { (void)abstract; /* arg not used */ return realloc(ptr, count); } static LIBSSH2_FREE_FUNC(my_libssh2_free) { (void)abstract; /* arg not used */ if(ptr) /* ssh2 agent sometimes call free with null ptr */ free(ptr); } /* * SSH State machine related code */ /* This is the ONLY way to change SSH state! */ static void state(struct connectdata *conn, sshstate nowstate) { struct ssh_conn *sshc = &conn->proto.sshc; #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS) /* for debug purposes */ static const char * const names[] = { "SSH_STOP", "SSH_INIT", "SSH_S_STARTUP", "SSH_HOSTKEY", "SSH_AUTHLIST", "SSH_AUTH_PKEY_INIT", "SSH_AUTH_PKEY", "SSH_AUTH_PASS_INIT", "SSH_AUTH_PASS", "SSH_AUTH_AGENT_INIT", "SSH_AUTH_AGENT_LIST", "SSH_AUTH_AGENT", "SSH_AUTH_HOST_INIT", "SSH_AUTH_HOST", "SSH_AUTH_KEY_INIT", "SSH_AUTH_KEY", "SSH_AUTH_GSSAPI", "SSH_AUTH_DONE", "SSH_SFTP_INIT", "SSH_SFTP_REALPATH", "SSH_SFTP_QUOTE_INIT", "SSH_SFTP_POSTQUOTE_INIT", "SSH_SFTP_QUOTE", "SSH_SFTP_NEXT_QUOTE", "SSH_SFTP_QUOTE_STAT", "SSH_SFTP_QUOTE_SETSTAT", "SSH_SFTP_QUOTE_SYMLINK", "SSH_SFTP_QUOTE_MKDIR", "SSH_SFTP_QUOTE_RENAME", "SSH_SFTP_QUOTE_RMDIR", "SSH_SFTP_QUOTE_UNLINK", "SSH_SFTP_QUOTE_STATVFS", "SSH_SFTP_GETINFO", "SSH_SFTP_FILETIME", "SSH_SFTP_TRANS_INIT", "SSH_SFTP_UPLOAD_INIT", "SSH_SFTP_CREATE_DIRS_INIT", "SSH_SFTP_CREATE_DIRS", "SSH_SFTP_CREATE_DIRS_MKDIR", "SSH_SFTP_READDIR_INIT", "SSH_SFTP_READDIR", "SSH_SFTP_READDIR_LINK", "SSH_SFTP_READDIR_BOTTOM", "SSH_SFTP_READDIR_DONE", "SSH_SFTP_DOWNLOAD_INIT", "SSH_SFTP_DOWNLOAD_STAT", "SSH_SFTP_CLOSE", "SSH_SFTP_SHUTDOWN", "SSH_SCP_TRANS_INIT", "SSH_SCP_UPLOAD_INIT", "SSH_SCP_DOWNLOAD_INIT", "SSH_SCP_DOWNLOAD", "SSH_SCP_DONE", "SSH_SCP_SEND_EOF", "SSH_SCP_WAIT_EOF", "SSH_SCP_WAIT_CLOSE", "SSH_SCP_CHANNEL_FREE", "SSH_SESSION_DISCONNECT", "SSH_SESSION_FREE", "QUIT" }; /* a precaution to make sure the lists are in sync */ DEBUGASSERT(sizeof(names)/sizeof(names[0]) == SSH_LAST); if(sshc->state != nowstate) { infof(conn->data, "SFTP %p state change from %s to %s\n", (void *)sshc, names[sshc->state], names[nowstate]); } #endif sshc->state = nowstate; } #ifdef HAVE_LIBSSH2_KNOWNHOST_API static int sshkeycallback(struct Curl_easy *easy, const struct curl_khkey *knownkey, /* known */ const struct curl_khkey *foundkey, /* found */ enum curl_khmatch match, void *clientp) { (void)easy; (void)knownkey; (void)foundkey; (void)clientp; /* we only allow perfect matches, and we reject everything else */ return (match != CURLKHMATCH_OK)?CURLKHSTAT_REJECT:CURLKHSTAT_FINE; } #endif /* * Earlier libssh2 versions didn't have the ability to seek to 64bit positions * with 32bit size_t. */ #ifdef HAVE_LIBSSH2_SFTP_SEEK64 #define SFTP_SEEK(x,y) libssh2_sftp_seek64(x, (libssh2_uint64_t)y) #else #define SFTP_SEEK(x,y) libssh2_sftp_seek(x, (size_t)y) #endif /* * Earlier libssh2 versions didn't do SCP properly beyond 32bit sizes on 32bit * architectures so we check of the necessary function is present. */ #ifndef HAVE_LIBSSH2_SCP_SEND64 #define SCP_SEND(a,b,c,d) libssh2_scp_send_ex(a, b, (int)(c), (size_t)d, 0, 0) #else #define SCP_SEND(a,b,c,d) libssh2_scp_send64(a, b, (int)(c), \ (libssh2_uint64_t)d, 0, 0) #endif /* * libssh2 1.2.8 fixed the problem with 32bit ints used for sockets on win64. */ #ifdef HAVE_LIBSSH2_SESSION_HANDSHAKE #define libssh2_session_startup(x,y) libssh2_session_handshake(x,y) #endif static CURLcode ssh_knownhost(struct connectdata *conn) { CURLcode result = CURLE_OK; #ifdef HAVE_LIBSSH2_KNOWNHOST_API struct Curl_easy *data = conn->data; if(data->set.str[STRING_SSH_KNOWNHOSTS]) { /* we're asked to verify the host against a file */ struct ssh_conn *sshc = &conn->proto.sshc; int rc; int keytype; size_t keylen; const char *remotekey = libssh2_session_hostkey(sshc->ssh_session, &keylen, &keytype); int keycheck = LIBSSH2_KNOWNHOST_CHECK_FAILURE; int keybit = 0; if(remotekey) { /* * A subject to figure out is what host name we need to pass in here. * What host name does OpenSSH store in its file if an IDN name is * used? */ struct libssh2_knownhost *host; enum curl_khmatch keymatch; curl_sshkeycallback func = data->set.ssh_keyfunc?data->set.ssh_keyfunc:sshkeycallback; struct curl_khkey knownkey; struct curl_khkey *knownkeyp = NULL; struct curl_khkey foundkey; keybit = (keytype == LIBSSH2_HOSTKEY_TYPE_RSA)? LIBSSH2_KNOWNHOST_KEY_SSHRSA:LIBSSH2_KNOWNHOST_KEY_SSHDSS; #ifdef HAVE_LIBSSH2_KNOWNHOST_CHECKP keycheck = libssh2_knownhost_checkp(sshc->kh, conn->host.name, (conn->remote_port != PORT_SSH)? conn->remote_port:-1, remotekey, keylen, LIBSSH2_KNOWNHOST_TYPE_PLAIN| LIBSSH2_KNOWNHOST_KEYENC_RAW| keybit, &host); #else keycheck = libssh2_knownhost_check(sshc->kh, conn->host.name, remotekey, keylen, LIBSSH2_KNOWNHOST_TYPE_PLAIN| LIBSSH2_KNOWNHOST_KEYENC_RAW| keybit, &host); #endif infof(data, "SSH host check: %d, key: %s\n", keycheck, (keycheck <= LIBSSH2_KNOWNHOST_CHECK_MISMATCH)? host->key:"<none>"); /* setup 'knownkey' */ if(keycheck <= LIBSSH2_KNOWNHOST_CHECK_MISMATCH) { knownkey.key = host->key; knownkey.len = 0; knownkey.keytype = (keytype == LIBSSH2_HOSTKEY_TYPE_RSA)? CURLKHTYPE_RSA : CURLKHTYPE_DSS; knownkeyp = &knownkey; } /* setup 'foundkey' */ foundkey.key = remotekey; foundkey.len = keylen; foundkey.keytype = (keytype == LIBSSH2_HOSTKEY_TYPE_RSA)? CURLKHTYPE_RSA : CURLKHTYPE_DSS; /* * if any of the LIBSSH2_KNOWNHOST_CHECK_* defines and the * curl_khmatch enum are ever modified, we need to introduce a * translation table here! */ keymatch = (enum curl_khmatch)keycheck; /* Ask the callback how to behave */ Curl_set_in_callback(data, true); rc = func(data, knownkeyp, /* from the knownhosts file */ &foundkey, /* from the remote host */ keymatch, data->set.ssh_keyfunc_userp); Curl_set_in_callback(data, false); } else /* no remotekey means failure! */ rc = CURLKHSTAT_REJECT; switch(rc) { default: /* unknown return codes will equal reject */ /* FALLTHROUGH */ case CURLKHSTAT_REJECT: state(conn, SSH_SESSION_FREE); /* FALLTHROUGH */ case CURLKHSTAT_DEFER: /* DEFER means bail out but keep the SSH_HOSTKEY state */ result = sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION; break; case CURLKHSTAT_FINE: case CURLKHSTAT_FINE_ADD_TO_FILE: /* proceed */ if(keycheck != LIBSSH2_KNOWNHOST_CHECK_MATCH) { /* the found host+key didn't match but has been told to be fine anyway so we add it in memory */ int addrc = libssh2_knownhost_add(sshc->kh, conn->host.name, NULL, remotekey, keylen, LIBSSH2_KNOWNHOST_TYPE_PLAIN| LIBSSH2_KNOWNHOST_KEYENC_RAW| keybit, NULL); if(addrc) infof(data, "Warning adding the known host %s failed!\n", conn->host.name); else if(rc == CURLKHSTAT_FINE_ADD_TO_FILE) { /* now we write the entire in-memory list of known hosts to the known_hosts file */ int wrc = libssh2_knownhost_writefile(sshc->kh, data->set.str[STRING_SSH_KNOWNHOSTS], LIBSSH2_KNOWNHOST_FILE_OPENSSH); if(wrc) { infof(data, "Warning, writing %s failed!\n", data->set.str[STRING_SSH_KNOWNHOSTS]); } } } break; } } #else /* HAVE_LIBSSH2_KNOWNHOST_API */ (void)conn; #endif return result; } static CURLcode ssh_check_fingerprint(struct connectdata *conn) { struct ssh_conn *sshc = &conn->proto.sshc; struct Curl_easy *data = conn->data; const char *pubkey_md5 = data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5]; char md5buffer[33]; const char *fingerprint = libssh2_hostkey_hash(sshc->ssh_session, LIBSSH2_HOSTKEY_HASH_MD5); if(fingerprint) { /* The fingerprint points to static storage (!), don't free() it. */ int i; for(i = 0; i < 16; i++) msnprintf(&md5buffer[i*2], 3, "%02x", (unsigned char) fingerprint[i]); infof(data, "SSH MD5 fingerprint: %s\n", md5buffer); } /* Before we authenticate we check the hostkey's MD5 fingerprint * against a known fingerprint, if available. */ if(pubkey_md5 && strlen(pubkey_md5) == 32) { if(!fingerprint || !strcasecompare(md5buffer, pubkey_md5)) { if(fingerprint) failf(data, "Denied establishing ssh session: mismatch md5 fingerprint. " "Remote %s is not equal to %s", md5buffer, pubkey_md5); else failf(data, "Denied establishing ssh session: md5 fingerprint not available"); state(conn, SSH_SESSION_FREE); sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION; return sshc->actualcode; } infof(data, "MD5 checksum match!\n"); /* as we already matched, we skip the check for known hosts */ return CURLE_OK; } return ssh_knownhost(conn); } /* * ssh_statemach_act() runs the SSH state machine as far as it can without * blocking and without reaching the end. The data the pointer 'block' points * to will be set to TRUE if the libssh2 function returns LIBSSH2_ERROR_EAGAIN * meaning it wants to be called again when the socket is ready */ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) { CURLcode result = CURLE_OK; struct Curl_easy *data = conn->data; struct SSHPROTO *sftp_scp = data->req.protop; struct ssh_conn *sshc = &conn->proto.sshc; curl_socket_t sock = conn->sock[FIRSTSOCKET]; char *new_readdir_line; int rc = LIBSSH2_ERROR_NONE; int err; int seekerr = CURL_SEEKFUNC_OK; *block = 0; /* we're not blocking by default */ do { switch(sshc->state) { case SSH_INIT: sshc->secondCreateDirs = 0; sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_OK; /* Set libssh2 to non-blocking, since everything internally is non-blocking */ libssh2_session_set_blocking(sshc->ssh_session, 0); state(conn, SSH_S_STARTUP); /* FALLTHROUGH */ case SSH_S_STARTUP: rc = libssh2_session_startup(sshc->ssh_session, (int)sock); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); failf(data, "Failure establishing ssh session: %d, %s", rc, err_msg); state(conn, SSH_SESSION_FREE); sshc->actualcode = CURLE_FAILED_INIT; break; } state(conn, SSH_HOSTKEY); /* FALLTHROUGH */ case SSH_HOSTKEY: /* * Before we authenticate we should check the hostkey's fingerprint * against our known hosts. How that is handled (reading from file, * whatever) is up to us. */ result = ssh_check_fingerprint(conn); if(!result) state(conn, SSH_AUTHLIST); /* ssh_check_fingerprint sets state appropriately on error */ break; case SSH_AUTHLIST: /* * Figure out authentication methods * NB: As soon as we have provided a username to an openssh server we * must never change it later. Thus, always specify the correct username * here, even though the libssh2 docs kind of indicate that it should be * possible to get a 'generic' list (not user-specific) of authentication * methods, presumably with a blank username. That won't work in my * experience. * So always specify it here. */ sshc->authlist = libssh2_userauth_list(sshc->ssh_session, conn->user, curlx_uztoui(strlen(conn->user))); if(!sshc->authlist) { if(libssh2_userauth_authenticated(sshc->ssh_session)) { sshc->authed = TRUE; infof(data, "SSH user accepted with no authentication\n"); state(conn, SSH_AUTH_DONE); break; } err = libssh2_session_last_errno(sshc->ssh_session); if(err == LIBSSH2_ERROR_EAGAIN) rc = LIBSSH2_ERROR_EAGAIN; else { state(conn, SSH_SESSION_FREE); sshc->actualcode = libssh2_session_error_to_CURLE(err); } break; } infof(data, "SSH authentication methods available: %s\n", sshc->authlist); state(conn, SSH_AUTH_PKEY_INIT); break; case SSH_AUTH_PKEY_INIT: /* * Check the supported auth types in the order I feel is most secure * with the requested type of authentication */ sshc->authed = FALSE; if((data->set.ssh_auth_types & CURLSSH_AUTH_PUBLICKEY) && (strstr(sshc->authlist, "publickey") != NULL)) { bool out_of_memory = FALSE; sshc->rsa_pub = sshc->rsa = NULL; if(data->set.str[STRING_SSH_PRIVATE_KEY]) sshc->rsa = strdup(data->set.str[STRING_SSH_PRIVATE_KEY]); else { /* To ponder about: should really the lib be messing about with the HOME environment variable etc? */ char *home = curl_getenv("HOME"); /* If no private key file is specified, try some common paths. */ if(home) { /* Try ~/.ssh first. */ sshc->rsa = aprintf("%s/.ssh/id_rsa", home); if(!sshc->rsa) out_of_memory = TRUE; else if(access(sshc->rsa, R_OK) != 0) { Curl_safefree(sshc->rsa); sshc->rsa = aprintf("%s/.ssh/id_dsa", home); if(!sshc->rsa) out_of_memory = TRUE; else if(access(sshc->rsa, R_OK) != 0) { Curl_safefree(sshc->rsa); } } free(home); } if(!out_of_memory && !sshc->rsa) { /* Nothing found; try the current dir. */ sshc->rsa = strdup("id_rsa"); if(sshc->rsa && access(sshc->rsa, R_OK) != 0) { Curl_safefree(sshc->rsa); sshc->rsa = strdup("id_dsa"); if(sshc->rsa && access(sshc->rsa, R_OK) != 0) { Curl_safefree(sshc->rsa); /* Out of guesses. Set to the empty string to avoid * surprising info messages. */ sshc->rsa = strdup(""); } } } } /* * Unless the user explicitly specifies a public key file, let * libssh2 extract the public key from the private key file. * This is done by simply passing sshc->rsa_pub = NULL. */ if(data->set.str[STRING_SSH_PUBLIC_KEY] /* treat empty string the same way as NULL */ && data->set.str[STRING_SSH_PUBLIC_KEY][0]) { sshc->rsa_pub = strdup(data->set.str[STRING_SSH_PUBLIC_KEY]); if(!sshc->rsa_pub) out_of_memory = TRUE; } if(out_of_memory || sshc->rsa == NULL) { Curl_safefree(sshc->rsa); Curl_safefree(sshc->rsa_pub); state(conn, SSH_SESSION_FREE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } sshc->passphrase = data->set.ssl.key_passwd; if(!sshc->passphrase) sshc->passphrase = ""; if(sshc->rsa_pub) infof(data, "Using SSH public key file '%s'\n", sshc->rsa_pub); infof(data, "Using SSH private key file '%s'\n", sshc->rsa); state(conn, SSH_AUTH_PKEY); } else { state(conn, SSH_AUTH_PASS_INIT); } break; case SSH_AUTH_PKEY: /* The function below checks if the files exists, no need to stat() here. */ rc = libssh2_userauth_publickey_fromfile_ex(sshc->ssh_session, conn->user, curlx_uztoui( strlen(conn->user)), sshc->rsa_pub, sshc->rsa, sshc->passphrase); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } Curl_safefree(sshc->rsa_pub); Curl_safefree(sshc->rsa); if(rc == 0) { sshc->authed = TRUE; infof(data, "Initialized SSH public key authentication\n"); state(conn, SSH_AUTH_DONE); } else { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "SSH public key authentication failed: %s\n", err_msg); state(conn, SSH_AUTH_PASS_INIT); rc = 0; /* clear rc and continue */ } break; case SSH_AUTH_PASS_INIT: if((data->set.ssh_auth_types & CURLSSH_AUTH_PASSWORD) && (strstr(sshc->authlist, "password") != NULL)) { state(conn, SSH_AUTH_PASS); } else { state(conn, SSH_AUTH_HOST_INIT); rc = 0; /* clear rc and continue */ } break; case SSH_AUTH_PASS: rc = libssh2_userauth_password_ex(sshc->ssh_session, conn->user, curlx_uztoui(strlen(conn->user)), conn->passwd, curlx_uztoui(strlen(conn->passwd)), NULL); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc == 0) { sshc->authed = TRUE; infof(data, "Initialized password authentication\n"); state(conn, SSH_AUTH_DONE); } else { state(conn, SSH_AUTH_HOST_INIT); rc = 0; /* clear rc and continue */ } break; case SSH_AUTH_HOST_INIT: if((data->set.ssh_auth_types & CURLSSH_AUTH_HOST) && (strstr(sshc->authlist, "hostbased") != NULL)) { state(conn, SSH_AUTH_HOST); } else { state(conn, SSH_AUTH_AGENT_INIT); } break; case SSH_AUTH_HOST: state(conn, SSH_AUTH_AGENT_INIT); break; case SSH_AUTH_AGENT_INIT: #ifdef HAVE_LIBSSH2_AGENT_API if((data->set.ssh_auth_types & CURLSSH_AUTH_AGENT) && (strstr(sshc->authlist, "publickey") != NULL)) { /* Connect to the ssh-agent */ /* The agent could be shared by a curl thread i believe but nothing obvious as keys can be added/removed at any time */ if(!sshc->ssh_agent) { sshc->ssh_agent = libssh2_agent_init(sshc->ssh_session); if(!sshc->ssh_agent) { infof(data, "Could not create agent object\n"); state(conn, SSH_AUTH_KEY_INIT); break; } } rc = libssh2_agent_connect(sshc->ssh_agent); if(rc == LIBSSH2_ERROR_EAGAIN) break; if(rc < 0) { infof(data, "Failure connecting to agent\n"); state(conn, SSH_AUTH_KEY_INIT); rc = 0; /* clear rc and continue */ } else { state(conn, SSH_AUTH_AGENT_LIST); } } else #endif /* HAVE_LIBSSH2_AGENT_API */ state(conn, SSH_AUTH_KEY_INIT); break; case SSH_AUTH_AGENT_LIST: #ifdef HAVE_LIBSSH2_AGENT_API rc = libssh2_agent_list_identities(sshc->ssh_agent); if(rc == LIBSSH2_ERROR_EAGAIN) break; if(rc < 0) { infof(data, "Failure requesting identities to agent\n"); state(conn, SSH_AUTH_KEY_INIT); rc = 0; /* clear rc and continue */ } else { state(conn, SSH_AUTH_AGENT); sshc->sshagent_prev_identity = NULL; } #endif break; case SSH_AUTH_AGENT: #ifdef HAVE_LIBSSH2_AGENT_API /* as prev_identity evolves only after an identity user auth finished we can safely request it again as long as EAGAIN is returned here or by libssh2_agent_userauth */ rc = libssh2_agent_get_identity(sshc->ssh_agent, &sshc->sshagent_identity, sshc->sshagent_prev_identity); if(rc == LIBSSH2_ERROR_EAGAIN) break; if(rc == 0) { rc = libssh2_agent_userauth(sshc->ssh_agent, conn->user, sshc->sshagent_identity); if(rc < 0) { if(rc != LIBSSH2_ERROR_EAGAIN) { /* tried and failed? go to next identity */ sshc->sshagent_prev_identity = sshc->sshagent_identity; } break; } } if(rc < 0) infof(data, "Failure requesting identities to agent\n"); else if(rc == 1) infof(data, "No identity would match\n"); if(rc == LIBSSH2_ERROR_NONE) { sshc->authed = TRUE; infof(data, "Agent based authentication successful\n"); state(conn, SSH_AUTH_DONE); } else { state(conn, SSH_AUTH_KEY_INIT); rc = 0; /* clear rc and continue */ } #endif break; case SSH_AUTH_KEY_INIT: if((data->set.ssh_auth_types & CURLSSH_AUTH_KEYBOARD) && (strstr(sshc->authlist, "keyboard-interactive") != NULL)) { state(conn, SSH_AUTH_KEY); } else { state(conn, SSH_AUTH_DONE); } break; case SSH_AUTH_KEY: /* Authentication failed. Continue with keyboard-interactive now. */ rc = libssh2_userauth_keyboard_interactive_ex(sshc->ssh_session, conn->user, curlx_uztoui( strlen(conn->user)), &kbd_callback); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc == 0) { sshc->authed = TRUE; infof(data, "Initialized keyboard interactive authentication\n"); } state(conn, SSH_AUTH_DONE); break; case SSH_AUTH_DONE: if(!sshc->authed) { failf(data, "Authentication failure"); state(conn, SSH_SESSION_FREE); sshc->actualcode = CURLE_LOGIN_DENIED; break; } /* * At this point we have an authenticated ssh session. */ infof(data, "Authentication complete\n"); Curl_pgrsTime(conn->data, TIMER_APPCONNECT); /* SSH is connected */ conn->sockfd = sock; conn->writesockfd = CURL_SOCKET_BAD; if(conn->handler->protocol == CURLPROTO_SFTP) { state(conn, SSH_SFTP_INIT); break; } infof(data, "SSH CONNECT phase done\n"); state(conn, SSH_STOP); break; case SSH_SFTP_INIT: /* * Start the libssh2 sftp session */ sshc->sftp_session = libssh2_sftp_init(sshc->ssh_session); if(!sshc->sftp_session) { char *err_msg = NULL; if(libssh2_session_last_errno(sshc->ssh_session) == LIBSSH2_ERROR_EAGAIN) { rc = LIBSSH2_ERROR_EAGAIN; break; } (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); failf(data, "Failure initializing sftp session: %s", err_msg); state(conn, SSH_SESSION_FREE); sshc->actualcode = CURLE_FAILED_INIT; break; } state(conn, SSH_SFTP_REALPATH); break; case SSH_SFTP_REALPATH: { char tempHome[PATH_MAX]; /* * Get the "home" directory */ rc = sftp_libssh2_realpath(sshc->sftp_session, ".", tempHome, PATH_MAX-1); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc > 0) { /* It seems that this string is not always NULL terminated */ tempHome[rc] = '\0'; sshc->homedir = strdup(tempHome); if(!sshc->homedir) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } conn->data->state.most_recent_ftp_entrypath = sshc->homedir; } else { /* Return the error type */ err = sftp_libssh2_last_error(sshc->sftp_session); if(err) result = sftp_libssh2_error_to_CURLE(err); else /* in this case, the error wasn't in the SFTP level but for example a time-out or similar */ result = CURLE_SSH; sshc->actualcode = result; DEBUGF(infof(data, "error = %d makes libcurl = %d\n", err, (int)result)); state(conn, SSH_STOP); break; } } /* This is the last step in the SFTP connect phase. Do note that while we get the homedir here, we get the "workingpath" in the DO action since the homedir will remain the same between request but the working path will not. */ DEBUGF(infof(data, "SSH CONNECT phase done\n")); state(conn, SSH_STOP); break; case SSH_SFTP_QUOTE_INIT: result = Curl_getworkingpath(conn, sshc->homedir, &sftp_scp->path); if(result) { sshc->actualcode = result; state(conn, SSH_STOP); break; } if(data->set.quote) { infof(data, "Sending quote commands\n"); sshc->quote_item = data->set.quote; state(conn, SSH_SFTP_QUOTE); } else { state(conn, SSH_SFTP_GETINFO); } break; case SSH_SFTP_POSTQUOTE_INIT: if(data->set.postquote) { infof(data, "Sending quote commands\n"); sshc->quote_item = data->set.postquote; state(conn, SSH_SFTP_QUOTE); } else { state(conn, SSH_STOP); } break; case SSH_SFTP_QUOTE: /* Send any quote commands */ { const char *cp; /* * Support some of the "FTP" commands * * 'sshc->quote_item' is already verified to be non-NULL before it * switched to this state. */ char *cmd = sshc->quote_item->data; sshc->acceptfail = FALSE; /* if a command starts with an asterisk, which a legal SFTP command never can, the command will be allowed to fail without it causing any aborts or cancels etc. It will cause libcurl to act as if the command is successful, whatever the server reponds. */ if(cmd[0] == '*') { cmd++; sshc->acceptfail = TRUE; } if(strcasecompare("pwd", cmd)) { /* output debug output if that is requested */ char *tmp = aprintf("257 \"%s\" is current directory.\n", sftp_scp->path); if(!tmp) { result = CURLE_OUT_OF_MEMORY; state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; break; } if(data->set.verbose) { Curl_debug(data, CURLINFO_HEADER_OUT, (char *)"PWD\n", 4); Curl_debug(data, CURLINFO_HEADER_IN, tmp, strlen(tmp)); } /* this sends an FTP-like "header" to the header callback so that the current directory can be read very similar to how it is read when using ordinary FTP. */ result = Curl_client_write(conn, CLIENTWRITE_HEADER, tmp, strlen(tmp)); free(tmp); if(result) { state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; } else state(conn, SSH_SFTP_NEXT_QUOTE); break; } { /* * the arguments following the command must be separated from the * command with a space so we can check for it unconditionally */ cp = strchr(cmd, ' '); if(cp == NULL) { failf(data, "Syntax error in SFTP command. Supply parameter(s)!"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } /* * also, every command takes at least one argument so we get that * first argument right now */ result = Curl_get_pathname(&cp, &sshc->quote_path1, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error: Bad first parameter"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; break; } /* * SFTP is a binary protocol, so we don't send text commands * to the server. Instead, we scan for commands used by * OpenSSH's sftp program and call the appropriate libssh2 * functions. */ if(strncasecompare(cmd, "chgrp ", 6) || strncasecompare(cmd, "chmod ", 6) || strncasecompare(cmd, "chown ", 6) ) { /* attribute change */ /* sshc->quote_path1 contains the mode to set */ /* get the destination */ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error in chgrp/chmod/chown: " "Bad second parameter"); Curl_safefree(sshc->quote_path1); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; break; } memset(&sshc->quote_attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES)); state(conn, SSH_SFTP_QUOTE_STAT); break; } if(strncasecompare(cmd, "ln ", 3) || strncasecompare(cmd, "symlink ", 8)) { /* symbolic linking */ /* sshc->quote_path1 is the source */ /* get the destination */ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error in ln/symlink: Bad second parameter"); Curl_safefree(sshc->quote_path1); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; break; } state(conn, SSH_SFTP_QUOTE_SYMLINK); break; } else if(strncasecompare(cmd, "mkdir ", 6)) { /* create dir */ state(conn, SSH_SFTP_QUOTE_MKDIR); break; } else if(strncasecompare(cmd, "rename ", 7)) { /* rename file */ /* first param is the source path */ /* second param is the dest. path */ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir); if(result) { if(result == CURLE_OUT_OF_MEMORY) failf(data, "Out of memory"); else failf(data, "Syntax error in rename: Bad second parameter"); Curl_safefree(sshc->quote_path1); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; break; } state(conn, SSH_SFTP_QUOTE_RENAME); break; } else if(strncasecompare(cmd, "rmdir ", 6)) { /* delete dir */ state(conn, SSH_SFTP_QUOTE_RMDIR); break; } else if(strncasecompare(cmd, "rm ", 3)) { state(conn, SSH_SFTP_QUOTE_UNLINK); break; } #ifdef HAS_STATVFS_SUPPORT else if(strncasecompare(cmd, "statvfs ", 8)) { state(conn, SSH_SFTP_QUOTE_STATVFS); break; } #endif failf(data, "Unknown SFTP command"); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } } break; case SSH_SFTP_NEXT_QUOTE: Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); sshc->quote_item = sshc->quote_item->next; if(sshc->quote_item) { state(conn, SSH_SFTP_QUOTE); } else { if(sshc->nextstate != SSH_NO_STATE) { state(conn, sshc->nextstate); sshc->nextstate = SSH_NO_STATE; } else { state(conn, SSH_SFTP_GETINFO); } } break; case SSH_SFTP_QUOTE_STAT: { char *cmd = sshc->quote_item->data; sshc->acceptfail = FALSE; /* if a command starts with an asterisk, which a legal SFTP command never can, the command will be allowed to fail without it causing any aborts or cancels etc. It will cause libcurl to act as if the command is successful, whatever the server reponds. */ if(cmd[0] == '*') { cmd++; sshc->acceptfail = TRUE; } if(!strncasecompare(cmd, "chmod", 5)) { /* Since chown and chgrp only set owner OR group but libssh2 wants to * set them both at once, we need to obtain the current ownership * first. This takes an extra protocol round trip. */ rc = libssh2_sftp_stat_ex(sshc->sftp_session, sshc->quote_path2, curlx_uztoui(strlen(sshc->quote_path2)), LIBSSH2_SFTP_STAT, &sshc->quote_attrs); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { /* get those attributes */ err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Attempt to get SFTP stats failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } } /* Now set the new attributes... */ if(strncasecompare(cmd, "chgrp", 5)) { sshc->quote_attrs.gid = strtoul(sshc->quote_path1, NULL, 10); sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_UIDGID; if(sshc->quote_attrs.gid == 0 && !ISDIGIT(sshc->quote_path1[0]) && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Syntax error: chgrp gid not a number"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } } else if(strncasecompare(cmd, "chmod", 5)) { sshc->quote_attrs.permissions = strtoul(sshc->quote_path1, NULL, 8); sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_PERMISSIONS; /* permissions are octal */ if(sshc->quote_attrs.permissions == 0 && !ISDIGIT(sshc->quote_path1[0])) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Syntax error: chmod permissions not a number"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } } else if(strncasecompare(cmd, "chown", 5)) { sshc->quote_attrs.uid = strtoul(sshc->quote_path1, NULL, 10); sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_UIDGID; if(sshc->quote_attrs.uid == 0 && !ISDIGIT(sshc->quote_path1[0]) && !sshc->acceptfail) { Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Syntax error: chown uid not a number"); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } } /* Now send the completed structure... */ state(conn, SSH_SFTP_QUOTE_SETSTAT); break; } case SSH_SFTP_QUOTE_SETSTAT: rc = libssh2_sftp_stat_ex(sshc->sftp_session, sshc->quote_path2, curlx_uztoui(strlen(sshc->quote_path2)), LIBSSH2_SFTP_SETSTAT, &sshc->quote_attrs); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "Attempt to set SFTP stats failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_SYMLINK: rc = libssh2_sftp_symlink_ex(sshc->sftp_session, sshc->quote_path1, curlx_uztoui(strlen(sshc->quote_path1)), sshc->quote_path2, curlx_uztoui(strlen(sshc->quote_path2)), LIBSSH2_SFTP_SYMLINK); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "symlink command failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_MKDIR: rc = libssh2_sftp_mkdir_ex(sshc->sftp_session, sshc->quote_path1, curlx_uztoui(strlen(sshc->quote_path1)), data->set.new_directory_perms); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); failf(data, "mkdir command failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_RENAME: rc = libssh2_sftp_rename_ex(sshc->sftp_session, sshc->quote_path1, curlx_uztoui(strlen(sshc->quote_path1)), sshc->quote_path2, curlx_uztoui(strlen(sshc->quote_path2)), LIBSSH2_SFTP_RENAME_OVERWRITE | LIBSSH2_SFTP_RENAME_ATOMIC | LIBSSH2_SFTP_RENAME_NATIVE); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); failf(data, "rename command failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_RMDIR: rc = libssh2_sftp_rmdir_ex(sshc->sftp_session, sshc->quote_path1, curlx_uztoui(strlen(sshc->quote_path1))); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); failf(data, "rmdir command failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; case SSH_SFTP_QUOTE_UNLINK: rc = libssh2_sftp_unlink_ex(sshc->sftp_session, sshc->quote_path1, curlx_uztoui(strlen(sshc->quote_path1))); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); failf(data, "rm command failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } state(conn, SSH_SFTP_NEXT_QUOTE); break; #ifdef HAS_STATVFS_SUPPORT case SSH_SFTP_QUOTE_STATVFS: { LIBSSH2_SFTP_STATVFS statvfs; rc = libssh2_sftp_statvfs(sshc->sftp_session, sshc->quote_path1, curlx_uztoui(strlen(sshc->quote_path1)), &statvfs); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc != 0 && !sshc->acceptfail) { err = sftp_libssh2_last_error(sshc->sftp_session); Curl_safefree(sshc->quote_path1); failf(data, "statvfs command failed: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = CURLE_QUOTE_ERROR; break; } else if(rc == 0) { char *tmp = aprintf("statvfs:\n" "f_bsize: %llu\n" "f_frsize: %llu\n" "f_blocks: %llu\n" "f_bfree: %llu\n" "f_bavail: %llu\n" "f_files: %llu\n" "f_ffree: %llu\n" "f_favail: %llu\n" "f_fsid: %llu\n" "f_flag: %llu\n" "f_namemax: %llu\n", statvfs.f_bsize, statvfs.f_frsize, statvfs.f_blocks, statvfs.f_bfree, statvfs.f_bavail, statvfs.f_files, statvfs.f_ffree, statvfs.f_favail, statvfs.f_fsid, statvfs.f_flag, statvfs.f_namemax); if(!tmp) { result = CURLE_OUT_OF_MEMORY; state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; break; } result = Curl_client_write(conn, CLIENTWRITE_HEADER, tmp, strlen(tmp)); free(tmp); if(result) { state(conn, SSH_SFTP_CLOSE); sshc->nextstate = SSH_NO_STATE; sshc->actualcode = result; } } state(conn, SSH_SFTP_NEXT_QUOTE); break; } #endif case SSH_SFTP_GETINFO: { if(data->set.get_filetime) { state(conn, SSH_SFTP_FILETIME); } else { state(conn, SSH_SFTP_TRANS_INIT); } break; } case SSH_SFTP_FILETIME: { LIBSSH2_SFTP_ATTRIBUTES attrs; rc = libssh2_sftp_stat_ex(sshc->sftp_session, sftp_scp->path, curlx_uztoui(strlen(sftp_scp->path)), LIBSSH2_SFTP_STAT, &attrs); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc == 0) { data->info.filetime = attrs.mtime; } state(conn, SSH_SFTP_TRANS_INIT); break; } case SSH_SFTP_TRANS_INIT: if(data->set.upload) state(conn, SSH_SFTP_UPLOAD_INIT); else { if(sftp_scp->path[strlen(sftp_scp->path)-1] == '/') state(conn, SSH_SFTP_READDIR_INIT); else state(conn, SSH_SFTP_DOWNLOAD_INIT); } break; case SSH_SFTP_UPLOAD_INIT: { unsigned long flags; /* * NOTE!!! libssh2 requires that the destination path is a full path * that includes the destination file and name OR ends in a "/" * If this is not done the destination file will be named the * same name as the last directory in the path. */ if(data->state.resume_from != 0) { LIBSSH2_SFTP_ATTRIBUTES attrs; if(data->state.resume_from < 0) { rc = libssh2_sftp_stat_ex(sshc->sftp_session, sftp_scp->path, curlx_uztoui(strlen(sftp_scp->path)), LIBSSH2_SFTP_STAT, &attrs); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc) { data->state.resume_from = 0; } else { curl_off_t size = attrs.filesize; if(size < 0) { failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size); return CURLE_BAD_DOWNLOAD_RESUME; } data->state.resume_from = attrs.filesize; } } } if(data->set.ftp_append) /* Try to open for append, but create if nonexisting */ flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_APPEND; else if(data->state.resume_from > 0) /* If we have restart position then open for append */ flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_APPEND; else /* Clear file before writing (normal behaviour) */ flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC; sshc->sftp_handle = libssh2_sftp_open_ex(sshc->sftp_session, sftp_scp->path, curlx_uztoui(strlen(sftp_scp->path)), flags, data->set.new_file_perms, LIBSSH2_SFTP_OPENFILE); if(!sshc->sftp_handle) { rc = libssh2_session_last_errno(sshc->ssh_session); if(LIBSSH2_ERROR_EAGAIN == rc) break; if(LIBSSH2_ERROR_SFTP_PROTOCOL == rc) /* only when there was an SFTP protocol error can we extract the sftp error! */ err = sftp_libssh2_last_error(sshc->sftp_session); else err = -1; /* not an sftp error at all */ if(sshc->secondCreateDirs) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = err>= LIBSSH2_FX_OK? sftp_libssh2_error_to_CURLE(err):CURLE_SSH; failf(data, "Creating the dir/file failed: %s", sftp_libssh2_strerror(err)); break; } if(((err == LIBSSH2_FX_NO_SUCH_FILE) || (err == LIBSSH2_FX_FAILURE) || (err == LIBSSH2_FX_NO_SUCH_PATH)) && (data->set.ftp_create_missing_dirs && (strlen(sftp_scp->path) > 1))) { /* try to create the path remotely */ rc = 0; /* clear rc and continue */ sshc->secondCreateDirs = 1; state(conn, SSH_SFTP_CREATE_DIRS_INIT); break; } state(conn, SSH_SFTP_CLOSE); sshc->actualcode = err>= LIBSSH2_FX_OK? sftp_libssh2_error_to_CURLE(err):CURLE_SSH; if(!sshc->actualcode) { /* Sometimes, for some reason libssh2_sftp_last_error() returns zero even though libssh2_sftp_open() failed previously! We need to work around that! */ sshc->actualcode = CURLE_SSH; err = -1; } failf(data, "Upload failed: %s (%d/%d)", err>= LIBSSH2_FX_OK?sftp_libssh2_strerror(err):"ssh error", err, rc); break; } /* If we have a restart point then we need to seek to the correct position. */ if(data->state.resume_from > 0) { /* Let's read off the proper amount of bytes from the input. */ if(conn->seek_func) { Curl_set_in_callback(data, true); seekerr = conn->seek_func(conn->seek_client, data->state.resume_from, SEEK_SET); Curl_set_in_callback(data, false); } if(seekerr != CURL_SEEKFUNC_OK) { curl_off_t passed = 0; if(seekerr != CURL_SEEKFUNC_CANTSEEK) { failf(data, "Could not seek stream"); return CURLE_FTP_COULDNT_USE_REST; } /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */ do { size_t readthisamountnow = (data->state.resume_from - passed > data->set.buffer_size) ? (size_t)data->set.buffer_size : curlx_sotouz(data->state.resume_from - passed); size_t actuallyread; Curl_set_in_callback(data, true); actuallyread = data->state.fread_func(data->state.buffer, 1, readthisamountnow, data->state.in); Curl_set_in_callback(data, false); passed += actuallyread; if((actuallyread == 0) || (actuallyread > readthisamountnow)) { /* this checks for greater-than only to make sure that the CURL_READFUNC_ABORT return code still aborts */ failf(data, "Failed to read data"); return CURLE_FTP_COULDNT_USE_REST; } } while(passed < data->state.resume_from); } /* now, decrease the size of the read */ if(data->state.infilesize > 0) { data->state.infilesize -= data->state.resume_from; data->req.size = data->state.infilesize; Curl_pgrsSetUploadSize(data, data->state.infilesize); } SFTP_SEEK(sshc->sftp_handle, data->state.resume_from); } if(data->state.infilesize > 0) { data->req.size = data->state.infilesize; Curl_pgrsSetUploadSize(data, data->state.infilesize); } /* upload data */ Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->sockfd = conn->writesockfd; if(result) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = result; } else { /* store this original bitmask setup to use later on if we can't figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; /* we want to use the _sending_ function even when the socket turns out readable as the underlying libssh2 sftp send function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_OUT; /* since we don't really wait for anything at this point, we want the state machine to move on as soon as possible so we set a very short timeout here */ Curl_expire(data, 0, EXPIRE_RUN_NOW); state(conn, SSH_STOP); } break; } case SSH_SFTP_CREATE_DIRS_INIT: if(strlen(sftp_scp->path) > 1) { sshc->slash_pos = sftp_scp->path + 1; /* ignore the leading '/' */ state(conn, SSH_SFTP_CREATE_DIRS); } else { state(conn, SSH_SFTP_UPLOAD_INIT); } break; case SSH_SFTP_CREATE_DIRS: sshc->slash_pos = strchr(sshc->slash_pos, '/'); if(sshc->slash_pos) { *sshc->slash_pos = 0; infof(data, "Creating directory '%s'\n", sftp_scp->path); state(conn, SSH_SFTP_CREATE_DIRS_MKDIR); break; } state(conn, SSH_SFTP_UPLOAD_INIT); break; case SSH_SFTP_CREATE_DIRS_MKDIR: /* 'mode' - parameter is preliminary - default to 0644 */ rc = libssh2_sftp_mkdir_ex(sshc->sftp_session, sftp_scp->path, curlx_uztoui(strlen(sftp_scp->path)), data->set.new_directory_perms); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } *sshc->slash_pos = '/'; ++sshc->slash_pos; if(rc < 0) { /* * Abort if failure wasn't that the dir already exists or the * permission was denied (creation might succeed further down the * path) - retry on unspecific FAILURE also */ err = sftp_libssh2_last_error(sshc->sftp_session); if((err != LIBSSH2_FX_FILE_ALREADY_EXISTS) && (err != LIBSSH2_FX_FAILURE) && (err != LIBSSH2_FX_PERMISSION_DENIED)) { result = sftp_libssh2_error_to_CURLE(err); state(conn, SSH_SFTP_CLOSE); sshc->actualcode = result?result:CURLE_SSH; break; } rc = 0; /* clear rc and continue */ } state(conn, SSH_SFTP_CREATE_DIRS); break; case SSH_SFTP_READDIR_INIT: Curl_pgrsSetDownloadSize(data, -1); if(data->set.opt_no_body) { state(conn, SSH_STOP); break; } /* * This is a directory that we are trying to get, so produce a directory * listing */ sshc->sftp_handle = libssh2_sftp_open_ex(sshc->sftp_session, sftp_scp->path, curlx_uztoui( strlen(sftp_scp->path)), 0, 0, LIBSSH2_SFTP_OPENDIR); if(!sshc->sftp_handle) { if(libssh2_session_last_errno(sshc->ssh_session) == LIBSSH2_ERROR_EAGAIN) { rc = LIBSSH2_ERROR_EAGAIN; break; } err = sftp_libssh2_last_error(sshc->sftp_session); failf(data, "Could not open directory for reading: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); result = sftp_libssh2_error_to_CURLE(err); sshc->actualcode = result?result:CURLE_SSH; break; } sshc->readdir_filename = malloc(PATH_MAX + 1); if(!sshc->readdir_filename) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } sshc->readdir_longentry = malloc(PATH_MAX + 1); if(!sshc->readdir_longentry) { Curl_safefree(sshc->readdir_filename); state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } state(conn, SSH_SFTP_READDIR); break; case SSH_SFTP_READDIR: rc = libssh2_sftp_readdir_ex(sshc->sftp_handle, sshc->readdir_filename, PATH_MAX, sshc->readdir_longentry, PATH_MAX, &sshc->readdir_attrs); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc > 0) { sshc->readdir_len = (size_t) rc; sshc->readdir_filename[sshc->readdir_len] = '\0'; if(data->set.ftp_list_only) { char *tmpLine; tmpLine = aprintf("%s\n", sshc->readdir_filename); if(tmpLine == NULL) { state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } result = Curl_client_write(conn, CLIENTWRITE_BODY, tmpLine, sshc->readdir_len + 1); free(tmpLine); if(result) { state(conn, SSH_STOP); break; } /* since this counts what we send to the client, we include the newline in this counter */ data->req.bytecount += sshc->readdir_len + 1; /* output debug output if that is requested */ if(data->set.verbose) { Curl_debug(data, CURLINFO_DATA_OUT, sshc->readdir_filename, sshc->readdir_len); } } else { sshc->readdir_currLen = strlen(sshc->readdir_longentry); sshc->readdir_totalLen = 80 + sshc->readdir_currLen; sshc->readdir_line = calloc(sshc->readdir_totalLen, 1); if(!sshc->readdir_line) { Curl_safefree(sshc->readdir_filename); Curl_safefree(sshc->readdir_longentry); state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } memcpy(sshc->readdir_line, sshc->readdir_longentry, sshc->readdir_currLen); if((sshc->readdir_attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) && ((sshc->readdir_attrs.permissions & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFLNK)) { sshc->readdir_linkPath = malloc(PATH_MAX + 1); if(sshc->readdir_linkPath == NULL) { Curl_safefree(sshc->readdir_filename); Curl_safefree(sshc->readdir_longentry); state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } msnprintf(sshc->readdir_linkPath, PATH_MAX, "%s%s", sftp_scp->path, sshc->readdir_filename); state(conn, SSH_SFTP_READDIR_LINK); break; } state(conn, SSH_SFTP_READDIR_BOTTOM); break; } } else if(rc == 0) { Curl_safefree(sshc->readdir_filename); Curl_safefree(sshc->readdir_longentry); state(conn, SSH_SFTP_READDIR_DONE); break; } else if(rc < 0) { err = sftp_libssh2_last_error(sshc->sftp_session); result = sftp_libssh2_error_to_CURLE(err); sshc->actualcode = result?result:CURLE_SSH; failf(data, "Could not open remote file for reading: %s :: %d", sftp_libssh2_strerror(err), libssh2_session_last_errno(sshc->ssh_session)); Curl_safefree(sshc->readdir_filename); Curl_safefree(sshc->readdir_longentry); state(conn, SSH_SFTP_CLOSE); break; } break; case SSH_SFTP_READDIR_LINK: rc = libssh2_sftp_symlink_ex(sshc->sftp_session, sshc->readdir_linkPath, curlx_uztoui(strlen(sshc->readdir_linkPath)), sshc->readdir_filename, PATH_MAX, LIBSSH2_SFTP_READLINK); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } sshc->readdir_len = (size_t) rc; Curl_safefree(sshc->readdir_linkPath); /* get room for the filename and extra output */ sshc->readdir_totalLen += 4 + sshc->readdir_len; new_readdir_line = Curl_saferealloc(sshc->readdir_line, sshc->readdir_totalLen); if(!new_readdir_line) { sshc->readdir_line = NULL; Curl_safefree(sshc->readdir_filename); Curl_safefree(sshc->readdir_longentry); state(conn, SSH_SFTP_CLOSE); sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } sshc->readdir_line = new_readdir_line; sshc->readdir_currLen += msnprintf(sshc->readdir_line + sshc->readdir_currLen, sshc->readdir_totalLen - sshc->readdir_currLen, " -> %s", sshc->readdir_filename); state(conn, SSH_SFTP_READDIR_BOTTOM); break; case SSH_SFTP_READDIR_BOTTOM: sshc->readdir_currLen += msnprintf(sshc->readdir_line + sshc->readdir_currLen, sshc->readdir_totalLen - sshc->readdir_currLen, "\n"); result = Curl_client_write(conn, CLIENTWRITE_BODY, sshc->readdir_line, sshc->readdir_currLen); if(!result) { /* output debug output if that is requested */ if(data->set.verbose) { Curl_debug(data, CURLINFO_DATA_OUT, sshc->readdir_line, sshc->readdir_currLen); } data->req.bytecount += sshc->readdir_currLen; } Curl_safefree(sshc->readdir_line); if(result) { state(conn, SSH_STOP); } else state(conn, SSH_SFTP_READDIR); break; case SSH_SFTP_READDIR_DONE: if(libssh2_sftp_closedir(sshc->sftp_handle) == LIBSSH2_ERROR_EAGAIN) { rc = LIBSSH2_ERROR_EAGAIN; break; } sshc->sftp_handle = NULL; Curl_safefree(sshc->readdir_filename); Curl_safefree(sshc->readdir_longentry); /* no data to transfer */ Curl_setup_transfer(data, -1, -1, FALSE, -1); state(conn, SSH_STOP); break; case SSH_SFTP_DOWNLOAD_INIT: /* * Work on getting the specified file */ sshc->sftp_handle = libssh2_sftp_open_ex(sshc->sftp_session, sftp_scp->path, curlx_uztoui(strlen(sftp_scp->path)), LIBSSH2_FXF_READ, data->set.new_file_perms, LIBSSH2_SFTP_OPENFILE); if(!sshc->sftp_handle) { if(libssh2_session_last_errno(sshc->ssh_session) == LIBSSH2_ERROR_EAGAIN) { rc = LIBSSH2_ERROR_EAGAIN; break; } err = sftp_libssh2_last_error(sshc->sftp_session); failf(data, "Could not open remote file for reading: %s", sftp_libssh2_strerror(err)); state(conn, SSH_SFTP_CLOSE); result = sftp_libssh2_error_to_CURLE(err); sshc->actualcode = result?result:CURLE_SSH; break; } state(conn, SSH_SFTP_DOWNLOAD_STAT); break; case SSH_SFTP_DOWNLOAD_STAT: { LIBSSH2_SFTP_ATTRIBUTES attrs; rc = libssh2_sftp_stat_ex(sshc->sftp_session, sftp_scp->path, curlx_uztoui(strlen(sftp_scp->path)), LIBSSH2_SFTP_STAT, &attrs); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc || !(attrs.flags & LIBSSH2_SFTP_ATTR_SIZE) || (attrs.filesize == 0)) { /* * libssh2_sftp_open() didn't return an error, so maybe the server * just doesn't support stat() * OR the server doesn't return a file size with a stat() * OR file size is 0 */ data->req.size = -1; data->req.maxdownload = -1; Curl_pgrsSetDownloadSize(data, -1); } else { curl_off_t size = attrs.filesize; if(size < 0) { failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size); return CURLE_BAD_DOWNLOAD_RESUME; } if(conn->data->state.use_range) { curl_off_t from, to; char *ptr; char *ptr2; CURLofft to_t; CURLofft from_t; from_t = curlx_strtoofft(conn->data->state.range, &ptr, 0, &from); if(from_t == CURL_OFFT_FLOW) return CURLE_RANGE_ERROR; while(*ptr && (ISSPACE(*ptr) || (*ptr == '-'))) ptr++; to_t = curlx_strtoofft(ptr, &ptr2, 0, &to); if(to_t == CURL_OFFT_FLOW) return CURLE_RANGE_ERROR; if((to_t == CURL_OFFT_INVAL) /* no "to" value given */ || (to >= size)) { to = size - 1; } if(from_t) { /* from is relative to end of file */ from = size - to; to = size - 1; } if(from > size) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")", from, attrs.filesize); return CURLE_BAD_DOWNLOAD_RESUME; } if(from > to) { from = to; size = 0; } else { size = to - from + 1; } SFTP_SEEK(conn->proto.sshc.sftp_handle, from); } data->req.size = size; data->req.maxdownload = size; Curl_pgrsSetDownloadSize(data, size); } /* We can resume if we can seek to the resume position */ if(data->state.resume_from) { if(data->state.resume_from < 0) { /* We're supposed to download the last abs(from) bytes */ if((curl_off_t)attrs.filesize < -data->state.resume_from) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")", data->state.resume_from, attrs.filesize); return CURLE_BAD_DOWNLOAD_RESUME; } /* download from where? */ data->state.resume_from += attrs.filesize; } else { if((curl_off_t)attrs.filesize < data->state.resume_from) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")", data->state.resume_from, attrs.filesize); return CURLE_BAD_DOWNLOAD_RESUME; } } /* Does a completed file need to be seeked and started or closed ? */ /* Now store the number of bytes we are expected to download */ data->req.size = attrs.filesize - data->state.resume_from; data->req.maxdownload = attrs.filesize - data->state.resume_from; Curl_pgrsSetDownloadSize(data, attrs.filesize - data->state.resume_from); SFTP_SEEK(sshc->sftp_handle, data->state.resume_from); } } /* Setup the actual download */ if(data->req.size == 0) { /* no data to transfer */ Curl_setup_transfer(data, -1, -1, FALSE, -1); infof(data, "File already completely downloaded\n"); state(conn, SSH_STOP); break; } Curl_setup_transfer(data, FIRSTSOCKET, data->req.size, FALSE, -1); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->writesockfd = conn->sockfd; /* we want to use the _receiving_ function even when the socket turns out writableable as the underlying libssh2 recv function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_IN; if(result) { /* this should never occur; the close state should be entered at the time the error occurs */ state(conn, SSH_SFTP_CLOSE); sshc->actualcode = result; } else { state(conn, SSH_STOP); } break; case SSH_SFTP_CLOSE: if(sshc->sftp_handle) { rc = libssh2_sftp_close(sshc->sftp_handle); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to close libssh2 file: %d %s\n", rc, err_msg); } sshc->sftp_handle = NULL; } Curl_safefree(sftp_scp->path); DEBUGF(infof(data, "SFTP DONE done\n")); /* Check if nextstate is set and move .nextstate could be POSTQUOTE_INIT After nextstate is executed, the control should come back to SSH_SFTP_CLOSE to pass the correct result back */ if(sshc->nextstate != SSH_NO_STATE && sshc->nextstate != SSH_SFTP_CLOSE) { state(conn, sshc->nextstate); sshc->nextstate = SSH_SFTP_CLOSE; } else { state(conn, SSH_STOP); result = sshc->actualcode; } break; case SSH_SFTP_SHUTDOWN: /* during times we get here due to a broken transfer and then the sftp_handle might not have been taken down so make sure that is done before we proceed */ if(sshc->sftp_handle) { rc = libssh2_sftp_close(sshc->sftp_handle); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to close libssh2 file: %d %s\n", rc, err_msg); } sshc->sftp_handle = NULL; } if(sshc->sftp_session) { rc = libssh2_sftp_shutdown(sshc->sftp_session); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { infof(data, "Failed to stop libssh2 sftp subsystem\n"); } sshc->sftp_session = NULL; } Curl_safefree(sshc->homedir); conn->data->state.most_recent_ftp_entrypath = NULL; state(conn, SSH_SESSION_DISCONNECT); break; case SSH_SCP_TRANS_INIT: result = Curl_getworkingpath(conn, sshc->homedir, &sftp_scp->path); if(result) { sshc->actualcode = result; state(conn, SSH_STOP); break; } if(data->set.upload) { if(data->state.infilesize < 0) { failf(data, "SCP requires a known file size for upload"); sshc->actualcode = CURLE_UPLOAD_FAILED; state(conn, SSH_SCP_CHANNEL_FREE); break; } state(conn, SSH_SCP_UPLOAD_INIT); } else { state(conn, SSH_SCP_DOWNLOAD_INIT); } break; case SSH_SCP_UPLOAD_INIT: /* * libssh2 requires that the destination path is a full path that * includes the destination file and name OR ends in a "/" . If this is * not done the destination file will be named the same name as the last * directory in the path. */ sshc->ssh_channel = SCP_SEND(sshc->ssh_session, sftp_scp->path, data->set.new_file_perms, data->state.infilesize); if(!sshc->ssh_channel) { int ssh_err; char *err_msg = NULL; if(libssh2_session_last_errno(sshc->ssh_session) == LIBSSH2_ERROR_EAGAIN) { rc = LIBSSH2_ERROR_EAGAIN; break; } ssh_err = (int)(libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0)); failf(conn->data, "%s", err_msg); state(conn, SSH_SCP_CHANNEL_FREE); sshc->actualcode = libssh2_session_error_to_CURLE(ssh_err); /* Map generic errors to upload failed */ if(sshc->actualcode == CURLE_SSH || sshc->actualcode == CURLE_REMOTE_FILE_NOT_FOUND) sshc->actualcode = CURLE_UPLOAD_FAILED; break; } /* upload data */ Curl_setup_transfer(data, -1, data->req.size, FALSE, FIRSTSOCKET); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->sockfd = conn->writesockfd; if(result) { state(conn, SSH_SCP_CHANNEL_FREE); sshc->actualcode = result; } else { /* store this original bitmask setup to use later on if we can't figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; /* we want to use the _sending_ function even when the socket turns out readable as the underlying libssh2 scp send function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_OUT; state(conn, SSH_STOP); } break; case SSH_SCP_DOWNLOAD_INIT: { curl_off_t bytecount; /* * We must check the remote file; if it is a directory no values will * be set in sb */ /* * If support for >2GB files exists, use it. */ /* get a fresh new channel from the ssh layer */ #if LIBSSH2_VERSION_NUM < 0x010700 struct stat sb; memset(&sb, 0, sizeof(struct stat)); sshc->ssh_channel = libssh2_scp_recv(sshc->ssh_session, sftp_scp->path, &sb); #else libssh2_struct_stat sb; memset(&sb, 0, sizeof(libssh2_struct_stat)); sshc->ssh_channel = libssh2_scp_recv2(sshc->ssh_session, sftp_scp->path, &sb); #endif if(!sshc->ssh_channel) { int ssh_err; char *err_msg = NULL; if(libssh2_session_last_errno(sshc->ssh_session) == LIBSSH2_ERROR_EAGAIN) { rc = LIBSSH2_ERROR_EAGAIN; break; } ssh_err = (int)(libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0)); failf(conn->data, "%s", err_msg); state(conn, SSH_SCP_CHANNEL_FREE); sshc->actualcode = libssh2_session_error_to_CURLE(ssh_err); break; } /* download data */ bytecount = (curl_off_t)sb.st_size; data->req.maxdownload = (curl_off_t)sb.st_size; Curl_setup_transfer(data, FIRSTSOCKET, bytecount, FALSE, -1); /* not set by Curl_setup_transfer to preserve keepon bits */ conn->writesockfd = conn->sockfd; /* we want to use the _receiving_ function even when the socket turns out writableable as the underlying libssh2 recv function will deal with both accordingly */ conn->cselect_bits = CURL_CSELECT_IN; if(result) { state(conn, SSH_SCP_CHANNEL_FREE); sshc->actualcode = result; } else state(conn, SSH_STOP); } break; case SSH_SCP_DONE: if(data->set.upload) state(conn, SSH_SCP_SEND_EOF); else state(conn, SSH_SCP_CHANNEL_FREE); break; case SSH_SCP_SEND_EOF: if(sshc->ssh_channel) { rc = libssh2_channel_send_eof(sshc->ssh_channel); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to send libssh2 channel EOF: %d %s\n", rc, err_msg); } } state(conn, SSH_SCP_WAIT_EOF); break; case SSH_SCP_WAIT_EOF: if(sshc->ssh_channel) { rc = libssh2_channel_wait_eof(sshc->ssh_channel); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to get channel EOF: %d %s\n", rc, err_msg); } } state(conn, SSH_SCP_WAIT_CLOSE); break; case SSH_SCP_WAIT_CLOSE: if(sshc->ssh_channel) { rc = libssh2_channel_wait_closed(sshc->ssh_channel); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Channel failed to close: %d %s\n", rc, err_msg); } } state(conn, SSH_SCP_CHANNEL_FREE); break; case SSH_SCP_CHANNEL_FREE: if(sshc->ssh_channel) { rc = libssh2_channel_free(sshc->ssh_channel); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to free libssh2 scp subsystem: %d %s\n", rc, err_msg); } sshc->ssh_channel = NULL; } DEBUGF(infof(data, "SCP DONE phase complete\n")); #if 0 /* PREV */ state(conn, SSH_SESSION_DISCONNECT); #endif state(conn, SSH_STOP); result = sshc->actualcode; break; case SSH_SESSION_DISCONNECT: /* during weird times when we've been prematurely aborted, the channel is still alive when we reach this state and we MUST kill the channel properly first */ if(sshc->ssh_channel) { rc = libssh2_channel_free(sshc->ssh_channel); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to free libssh2 scp subsystem: %d %s\n", rc, err_msg); } sshc->ssh_channel = NULL; } if(sshc->ssh_session) { rc = libssh2_session_disconnect(sshc->ssh_session, "Shutdown"); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to disconnect libssh2 session: %d %s\n", rc, err_msg); } } Curl_safefree(sshc->homedir); conn->data->state.most_recent_ftp_entrypath = NULL; state(conn, SSH_SESSION_FREE); break; case SSH_SESSION_FREE: #ifdef HAVE_LIBSSH2_KNOWNHOST_API if(sshc->kh) { libssh2_knownhost_free(sshc->kh); sshc->kh = NULL; } #endif #ifdef HAVE_LIBSSH2_AGENT_API if(sshc->ssh_agent) { rc = libssh2_agent_disconnect(sshc->ssh_agent); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to disconnect from libssh2 agent: %d %s\n", rc, err_msg); } libssh2_agent_free(sshc->ssh_agent); sshc->ssh_agent = NULL; /* NB: there is no need to free identities, they are part of internal agent stuff */ sshc->sshagent_identity = NULL; sshc->sshagent_prev_identity = NULL; } #endif if(sshc->ssh_session) { rc = libssh2_session_free(sshc->ssh_session); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } if(rc < 0) { char *err_msg = NULL; (void)libssh2_session_last_error(sshc->ssh_session, &err_msg, NULL, 0); infof(data, "Failed to free libssh2 session: %d %s\n", rc, err_msg); } sshc->ssh_session = NULL; } /* worst-case scenario cleanup */ DEBUGASSERT(sshc->ssh_session == NULL); DEBUGASSERT(sshc->ssh_channel == NULL); DEBUGASSERT(sshc->sftp_session == NULL); DEBUGASSERT(sshc->sftp_handle == NULL); #ifdef HAVE_LIBSSH2_KNOWNHOST_API DEBUGASSERT(sshc->kh == NULL); #endif #ifdef HAVE_LIBSSH2_AGENT_API DEBUGASSERT(sshc->ssh_agent == NULL); #endif Curl_safefree(sshc->rsa_pub); Curl_safefree(sshc->rsa); Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); Curl_safefree(sshc->homedir); Curl_safefree(sshc->readdir_filename); Curl_safefree(sshc->readdir_longentry); Curl_safefree(sshc->readdir_line); Curl_safefree(sshc->readdir_linkPath); /* the code we are about to return */ result = sshc->actualcode; memset(sshc, 0, sizeof(struct ssh_conn)); connclose(conn, "SSH session free"); sshc->state = SSH_SESSION_FREE; /* current */ sshc->nextstate = SSH_NO_STATE; state(conn, SSH_STOP); break; case SSH_QUIT: /* fallthrough, just stop! */ default: /* internal error */ sshc->nextstate = SSH_NO_STATE; state(conn, SSH_STOP); break; } } while(!rc && (sshc->state != SSH_STOP)); if(rc == LIBSSH2_ERROR_EAGAIN) { /* we would block, we need to wait for the socket to be ready (in the right direction too)! */ *block = TRUE; } return result; } /* called by the multi interface to figure out what socket(s) to wait for and for what actions in the DO_DONE, PERFORM and WAITPERFORM states */ static int ssh_perform_getsock(const struct connectdata *conn, curl_socket_t *sock) { #ifdef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION int bitmap = GETSOCK_BLANK; sock[0] = conn->sock[FIRSTSOCKET]; if(conn->waitfor & KEEP_RECV) bitmap |= GETSOCK_READSOCK(FIRSTSOCKET); if(conn->waitfor & KEEP_SEND) bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET); return bitmap; #else /* if we don't know the direction we can use the generic *_getsock() function even for the protocol_connect and doing states */ return Curl_single_getsock(conn, sock); #endif } /* Generic function called by the multi interface to figure out what socket(s) to wait for and for what actions during the DOING and PROTOCONNECT states*/ static int ssh_getsock(struct connectdata *conn, curl_socket_t *sock) { #ifndef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION (void)conn; (void)sock; /* if we don't know any direction we can just play along as we used to and not provide any sensible info */ return GETSOCK_BLANK; #else /* if we know the direction we can use the generic *_getsock() function even for the protocol_connect and doing states */ return ssh_perform_getsock(conn, sock); #endif } #ifdef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION /* * When one of the libssh2 functions has returned LIBSSH2_ERROR_EAGAIN this * function is used to figure out in what direction and stores this info so * that the multi interface can take advantage of it. Make sure to call this * function in all cases so that when it _doesn't_ return EAGAIN we can * restore the default wait bits. */ static void ssh_block2waitfor(struct connectdata *conn, bool block) { struct ssh_conn *sshc = &conn->proto.sshc; int dir = 0; if(block) { dir = libssh2_session_block_directions(sshc->ssh_session); if(dir) { /* translate the libssh2 define bits into our own bit defines */ conn->waitfor = ((dir&LIBSSH2_SESSION_BLOCK_INBOUND)?KEEP_RECV:0) | ((dir&LIBSSH2_SESSION_BLOCK_OUTBOUND)?KEEP_SEND:0); } } if(!dir) /* It didn't block or libssh2 didn't reveal in which direction, put back the original set */ conn->waitfor = sshc->orig_waitfor; } #else /* no libssh2 directional support so we simply don't know */ #define ssh_block2waitfor(x,y) Curl_nop_stmt #endif /* called repeatedly until done from multi.c */ static CURLcode ssh_multi_statemach(struct connectdata *conn, bool *done) { struct ssh_conn *sshc = &conn->proto.sshc; CURLcode result = CURLE_OK; bool block; /* we store the status and use that to provide a ssh_getsock() implementation */ do { result = ssh_statemach_act(conn, &block); *done = (sshc->state == SSH_STOP) ? TRUE : FALSE; /* if there's no error, it isn't done and it didn't EWOULDBLOCK, then try again */ } while(!result && !*done && !block); ssh_block2waitfor(conn, block); return result; } static CURLcode ssh_block_statemach(struct connectdata *conn, bool disconnect) { struct ssh_conn *sshc = &conn->proto.sshc; CURLcode result = CURLE_OK; struct Curl_easy *data = conn->data; while((sshc->state != SSH_STOP) && !result) { bool block; timediff_t left = 1000; struct curltime now = Curl_now(); result = ssh_statemach_act(conn, &block); if(result) break; if(!disconnect) { if(Curl_pgrsUpdate(conn)) return CURLE_ABORTED_BY_CALLBACK; result = Curl_speedcheck(data, now); if(result) break; left = Curl_timeleft(data, NULL, FALSE); if(left < 0) { failf(data, "Operation timed out"); return CURLE_OPERATION_TIMEDOUT; } } #ifdef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION if(!result && block) { int dir = libssh2_session_block_directions(sshc->ssh_session); curl_socket_t sock = conn->sock[FIRSTSOCKET]; curl_socket_t fd_read = CURL_SOCKET_BAD; curl_socket_t fd_write = CURL_SOCKET_BAD; if(LIBSSH2_SESSION_BLOCK_INBOUND & dir) fd_read = sock; if(LIBSSH2_SESSION_BLOCK_OUTBOUND & dir) fd_write = sock; /* wait for the socket to become ready */ (void)Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write, left>1000?1000:left); /* ignore result */ } #endif } return result; } /* * SSH setup and connection */ static CURLcode ssh_setup_connection(struct connectdata *conn) { struct SSHPROTO *ssh; conn->data->req.protop = ssh = calloc(1, sizeof(struct SSHPROTO)); if(!ssh) return CURLE_OUT_OF_MEMORY; return CURLE_OK; } static Curl_recv scp_recv, sftp_recv; static Curl_send scp_send, sftp_send; /* * Curl_ssh_connect() gets called from Curl_protocol_connect() to allow us to * do protocol-specific actions at connect-time. */ static CURLcode ssh_connect(struct connectdata *conn, bool *done) { #ifdef CURL_LIBSSH2_DEBUG curl_socket_t sock; #endif struct ssh_conn *ssh; CURLcode result; struct Curl_easy *data = conn->data; /* initialize per-handle data if not already */ if(!data->req.protop) ssh_setup_connection(conn); /* We default to persistent connections. We set this already in this connect function to make the re-use checks properly be able to check this bit. */ connkeep(conn, "SSH default"); if(conn->handler->protocol & CURLPROTO_SCP) { conn->recv[FIRSTSOCKET] = scp_recv; conn->send[FIRSTSOCKET] = scp_send; } else { conn->recv[FIRSTSOCKET] = sftp_recv; conn->send[FIRSTSOCKET] = sftp_send; } ssh = &conn->proto.sshc; #ifdef CURL_LIBSSH2_DEBUG if(conn->user) { infof(data, "User: %s\n", conn->user); } if(conn->passwd) { infof(data, "Password: %s\n", conn->passwd); } sock = conn->sock[FIRSTSOCKET]; #endif /* CURL_LIBSSH2_DEBUG */ ssh->ssh_session = libssh2_session_init_ex(my_libssh2_malloc, my_libssh2_free, my_libssh2_realloc, conn); if(ssh->ssh_session == NULL) { failf(data, "Failure initialising ssh session"); return CURLE_FAILED_INIT; } if(data->set.ssh_compression) { #if LIBSSH2_VERSION_NUM >= 0x010208 if(libssh2_session_flag(ssh->ssh_session, LIBSSH2_FLAG_COMPRESS, 1) < 0) #endif infof(data, "Failed to enable compression for ssh session\n"); } #ifdef HAVE_LIBSSH2_KNOWNHOST_API if(data->set.str[STRING_SSH_KNOWNHOSTS]) { int rc; ssh->kh = libssh2_knownhost_init(ssh->ssh_session); if(!ssh->kh) { libssh2_session_free(ssh->ssh_session); return CURLE_FAILED_INIT; } /* read all known hosts from there */ rc = libssh2_knownhost_readfile(ssh->kh, data->set.str[STRING_SSH_KNOWNHOSTS], LIBSSH2_KNOWNHOST_FILE_OPENSSH); if(rc < 0) infof(data, "Failed to read known hosts from %s\n", data->set.str[STRING_SSH_KNOWNHOSTS]); } #endif /* HAVE_LIBSSH2_KNOWNHOST_API */ #ifdef CURL_LIBSSH2_DEBUG libssh2_trace(ssh->ssh_session, ~0); infof(data, "SSH socket: %d\n", (int)sock); #endif /* CURL_LIBSSH2_DEBUG */ state(conn, SSH_INIT); result = ssh_multi_statemach(conn, done); return result; } /* *********************************************************************** * * scp_perform() * * This is the actual DO function for SCP. Get a file according to * the options previously setup. */ static CURLcode scp_perform(struct connectdata *conn, bool *connected, bool *dophase_done) { CURLcode result = CURLE_OK; DEBUGF(infof(conn->data, "DO phase starts\n")); *dophase_done = FALSE; /* not done yet */ /* start the first command in the DO phase */ state(conn, SSH_SCP_TRANS_INIT); /* run the state-machine */ result = ssh_multi_statemach(conn, dophase_done); *connected = conn->bits.tcpconnect[FIRSTSOCKET]; if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } /* called from multi.c while DOing */ static CURLcode scp_doing(struct connectdata *conn, bool *dophase_done) { CURLcode result; result = ssh_multi_statemach(conn, dophase_done); if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } /* * The DO function is generic for both protocols. There was previously two * separate ones but this way means less duplicated code. */ static CURLcode ssh_do(struct connectdata *conn, bool *done) { CURLcode result; bool connected = 0; struct Curl_easy *data = conn->data; struct ssh_conn *sshc = &conn->proto.sshc; *done = FALSE; /* default to false */ data->req.size = -1; /* make sure this is unknown at this point */ sshc->actualcode = CURLE_OK; /* reset error code */ sshc->secondCreateDirs = 0; /* reset the create dir attempt state variable */ Curl_pgrsSetUploadCounter(data, 0); Curl_pgrsSetDownloadCounter(data, 0); Curl_pgrsSetUploadSize(data, -1); Curl_pgrsSetDownloadSize(data, -1); if(conn->handler->protocol & CURLPROTO_SCP) result = scp_perform(conn, &connected, done); else result = sftp_perform(conn, &connected, done); return result; } /* BLOCKING, but the function is using the state machine so the only reason this is still blocking is that the multi interface code has no support for disconnecting operations that takes a while */ static CURLcode scp_disconnect(struct connectdata *conn, bool dead_connection) { CURLcode result = CURLE_OK; struct ssh_conn *ssh = &conn->proto.sshc; (void) dead_connection; if(ssh->ssh_session) { /* only if there's a session still around to use! */ state(conn, SSH_SESSION_DISCONNECT); result = ssh_block_statemach(conn, TRUE); } return result; } /* generic done function for both SCP and SFTP called from their specific done functions */ static CURLcode ssh_done(struct connectdata *conn, CURLcode status) { CURLcode result = CURLE_OK; struct SSHPROTO *sftp_scp = conn->data->req.protop; if(!status) { /* run the state-machine */ result = ssh_block_statemach(conn, FALSE); } else result = status; if(sftp_scp) Curl_safefree(sftp_scp->path); if(Curl_pgrsDone(conn)) return CURLE_ABORTED_BY_CALLBACK; conn->data->req.keepon = 0; /* clear all bits */ return result; } static CURLcode scp_done(struct connectdata *conn, CURLcode status, bool premature) { (void)premature; /* not used */ if(!status) state(conn, SSH_SCP_DONE); return ssh_done(conn, status); } static ssize_t scp_send(struct connectdata *conn, int sockindex, const void *mem, size_t len, CURLcode *err) { ssize_t nwrite; (void)sockindex; /* we only support SCP on the fixed known primary socket */ /* libssh2_channel_write() returns int! */ nwrite = (ssize_t) libssh2_channel_write(conn->proto.sshc.ssh_channel, mem, len); ssh_block2waitfor(conn, (nwrite == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE); if(nwrite == LIBSSH2_ERROR_EAGAIN) { *err = CURLE_AGAIN; nwrite = 0; } else if(nwrite < LIBSSH2_ERROR_NONE) { *err = libssh2_session_error_to_CURLE((int)nwrite); nwrite = -1; } return nwrite; } static ssize_t scp_recv(struct connectdata *conn, int sockindex, char *mem, size_t len, CURLcode *err) { ssize_t nread; (void)sockindex; /* we only support SCP on the fixed known primary socket */ /* libssh2_channel_read() returns int */ nread = (ssize_t) libssh2_channel_read(conn->proto.sshc.ssh_channel, mem, len); ssh_block2waitfor(conn, (nread == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE); if(nread == LIBSSH2_ERROR_EAGAIN) { *err = CURLE_AGAIN; nread = -1; } return nread; } /* * =============== SFTP =============== */ /* *********************************************************************** * * sftp_perform() * * This is the actual DO function for SFTP. Get a file/directory according to * the options previously setup. */ static CURLcode sftp_perform(struct connectdata *conn, bool *connected, bool *dophase_done) { CURLcode result = CURLE_OK; DEBUGF(infof(conn->data, "DO phase starts\n")); *dophase_done = FALSE; /* not done yet */ /* start the first command in the DO phase */ state(conn, SSH_SFTP_QUOTE_INIT); /* run the state-machine */ result = ssh_multi_statemach(conn, dophase_done); *connected = conn->bits.tcpconnect[FIRSTSOCKET]; if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } /* called from multi.c while DOing */ static CURLcode sftp_doing(struct connectdata *conn, bool *dophase_done) { CURLcode result = ssh_multi_statemach(conn, dophase_done); if(*dophase_done) { DEBUGF(infof(conn->data, "DO phase is complete\n")); } return result; } /* BLOCKING, but the function is using the state machine so the only reason this is still blocking is that the multi interface code has no support for disconnecting operations that takes a while */ static CURLcode sftp_disconnect(struct connectdata *conn, bool dead_connection) { CURLcode result = CURLE_OK; (void) dead_connection; DEBUGF(infof(conn->data, "SSH DISCONNECT starts now\n")); if(conn->proto.sshc.ssh_session) { /* only if there's a session still around to use! */ state(conn, SSH_SFTP_SHUTDOWN); result = ssh_block_statemach(conn, TRUE); } DEBUGF(infof(conn->data, "SSH DISCONNECT is done\n")); return result; } static CURLcode sftp_done(struct connectdata *conn, CURLcode status, bool premature) { struct ssh_conn *sshc = &conn->proto.sshc; if(!status) { /* Post quote commands are executed after the SFTP_CLOSE state to avoid errors that could happen due to open file handles during POSTQUOTE operation */ if(!premature && conn->data->set.postquote && !conn->bits.retry) sshc->nextstate = SSH_SFTP_POSTQUOTE_INIT; state(conn, SSH_SFTP_CLOSE); } return ssh_done(conn, status); } /* return number of sent bytes */ static ssize_t sftp_send(struct connectdata *conn, int sockindex, const void *mem, size_t len, CURLcode *err) { ssize_t nwrite; /* libssh2_sftp_write() used to return size_t in 0.14 but is changed to ssize_t in 0.15. These days we don't support libssh2 0.15*/ (void)sockindex; nwrite = libssh2_sftp_write(conn->proto.sshc.sftp_handle, mem, len); ssh_block2waitfor(conn, (nwrite == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE); if(nwrite == LIBSSH2_ERROR_EAGAIN) { *err = CURLE_AGAIN; nwrite = 0; } else if(nwrite < LIBSSH2_ERROR_NONE) { *err = libssh2_session_error_to_CURLE((int)nwrite); nwrite = -1; } return nwrite; } /* * Return number of received (decrypted) bytes * or <0 on error */ static ssize_t sftp_recv(struct connectdata *conn, int sockindex, char *mem, size_t len, CURLcode *err) { ssize_t nread; (void)sockindex; nread = libssh2_sftp_read(conn->proto.sshc.sftp_handle, mem, len); ssh_block2waitfor(conn, (nread == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE); if(nread == LIBSSH2_ERROR_EAGAIN) { *err = CURLE_AGAIN; nread = -1; } else if(nread < 0) { *err = libssh2_session_error_to_CURLE((int)nread); } return nread; } static const char *sftp_libssh2_strerror(int err) { switch(err) { case LIBSSH2_FX_NO_SUCH_FILE: return "No such file or directory"; case LIBSSH2_FX_PERMISSION_DENIED: return "Permission denied"; case LIBSSH2_FX_FAILURE: return "Operation failed"; case LIBSSH2_FX_BAD_MESSAGE: return "Bad message from SFTP server"; case LIBSSH2_FX_NO_CONNECTION: return "Not connected to SFTP server"; case LIBSSH2_FX_CONNECTION_LOST: return "Connection to SFTP server lost"; case LIBSSH2_FX_OP_UNSUPPORTED: return "Operation not supported by SFTP server"; case LIBSSH2_FX_INVALID_HANDLE: return "Invalid handle"; case LIBSSH2_FX_NO_SUCH_PATH: return "No such file or directory"; case LIBSSH2_FX_FILE_ALREADY_EXISTS: return "File already exists"; case LIBSSH2_FX_WRITE_PROTECT: return "File is write protected"; case LIBSSH2_FX_NO_MEDIA: return "No media"; case LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM: return "Disk full"; case LIBSSH2_FX_QUOTA_EXCEEDED: return "User quota exceeded"; case LIBSSH2_FX_UNKNOWN_PRINCIPLE: return "Unknown principle"; case LIBSSH2_FX_LOCK_CONFlICT: return "File lock conflict"; case LIBSSH2_FX_DIR_NOT_EMPTY: return "Directory not empty"; case LIBSSH2_FX_NOT_A_DIRECTORY: return "Not a directory"; case LIBSSH2_FX_INVALID_FILENAME: return "Invalid filename"; case LIBSSH2_FX_LINK_LOOP: return "Link points to itself"; } return "Unknown error in libssh2"; } CURLcode Curl_ssh_init(void) { #ifdef HAVE_LIBSSH2_INIT if(libssh2_init(0)) { DEBUGF(fprintf(stderr, "Error: libssh2_init failed\n")); return CURLE_FAILED_INIT; } #endif return CURLE_OK; } void Curl_ssh_cleanup(void) { #ifdef HAVE_LIBSSH2_EXIT (void)libssh2_exit(); #endif } size_t Curl_ssh_version(char *buffer, size_t buflen) { return msnprintf(buffer, buflen, "libssh2/%s", LIBSSH2_VERSION); } #endif /* USE_LIBSSH2 */ |
Changes to jni/curl/lib/vtls/mesalink.c.
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | SSL *handle; }; #define BACKEND connssl->backend static Curl_recv mesalink_recv; static Curl_send mesalink_send; /* * This function loads all the client/CA certificates and CRLs. Setup the TLS * layer and do all necessary magic. */ static CURLcode mesalink_connect_step1(struct connectdata *conn, int sockindex) { char *ciphers; struct Curl_easy *data = conn->data; struct ssl_connect_data *connssl = &conn->ssl[sockindex]; | > > > > > > > > > > > < < < | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | SSL *handle; }; #define BACKEND connssl->backend static Curl_recv mesalink_recv; static Curl_send mesalink_send; static int do_file_type(const char *type) { if(!type || !type[0]) return SSL_FILETYPE_PEM; if(strcasecompare(type, "PEM")) return SSL_FILETYPE_PEM; if(strcasecompare(type, "DER")) return SSL_FILETYPE_ASN1; return -1; } /* * This function loads all the client/CA certificates and CRLs. Setup the TLS * layer and do all necessary magic. */ static CURLcode mesalink_connect_step1(struct connectdata *conn, int sockindex) { char *ciphers; struct Curl_easy *data = conn->data; struct ssl_connect_data *connssl = &conn->ssl[sockindex]; struct in_addr addr4; #ifdef ENABLE_IPV6 struct in6_addr addr6; #endif const char *const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name : conn->host.name; size_t hostname_len = strlen(hostname); |
︙ | ︙ | |||
138 139 140 141 142 143 144 | if(!BACKEND->ctx) { failf(data, "SSL: couldn't create a context!"); return CURLE_OUT_OF_MEMORY; } SSL_CTX_set_verify( | > | | | > | > | > | | | > > > > > | > > | > > > > > > > > > > > > > > > > > | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | if(!BACKEND->ctx) { failf(data, "SSL: couldn't create a context!"); return CURLE_OUT_OF_MEMORY; } SSL_CTX_set_verify( BACKEND->ctx, SSL_CONN_CONFIG(verifypeer) ? SSL_VERIFY_PEER : SSL_VERIFY_NONE, NULL); if(SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(CApath)) { if(!SSL_CTX_load_verify_locations(BACKEND->ctx, SSL_CONN_CONFIG(CAfile), SSL_CONN_CONFIG(CApath))) { if(SSL_CONN_CONFIG(verifypeer)) { failf(data, "error setting certificate verify locations:\n" " CAfile: %s\n CApath: %s", SSL_CONN_CONFIG(CAfile) ? SSL_CONN_CONFIG(CAfile) : "none", SSL_CONN_CONFIG(CApath) ? SSL_CONN_CONFIG(CApath) : "none"); return CURLE_SSL_CACERT_BADFILE; } infof(data, "error setting certificate verify locations," " continuing anyway:\n"); } else { infof(data, "successfully set certificate verify locations:\n"); } infof(data, " CAfile: %s\n" " CApath: %s\n", SSL_CONN_CONFIG(CAfile)? SSL_CONN_CONFIG(CAfile): "none", SSL_CONN_CONFIG(CApath)? SSL_CONN_CONFIG(CApath): "none"); } if(SSL_SET_OPTION(cert) && SSL_SET_OPTION(key)) { int file_type = do_file_type(SSL_SET_OPTION(cert_type)); if(SSL_CTX_use_certificate_chain_file(BACKEND->ctx, SSL_SET_OPTION(cert), file_type) != 1) { failf(data, "unable to use client certificate (no key or wrong pass" " phrase?)"); return CURLE_SSL_CONNECT_ERROR; } file_type = do_file_type(SSL_SET_OPTION(key_type)); if(SSL_CTX_use_PrivateKey_file(BACKEND->ctx, SSL_SET_OPTION(key), file_type) != 1) { failf(data, "unable to set private key"); return CURLE_SSL_CONNECT_ERROR; } infof(data, "client cert: %s\n", SSL_CONN_CONFIG(clientcert)? SSL_CONN_CONFIG(clientcert): "none"); } ciphers = SSL_CONN_CONFIG(cipher_list); if(ciphers) { #ifdef MESALINK_HAVE_CIPHER if(!SSL_CTX_set_cipher_list(BACKEND->ctx, ciphers)) { failf(data, "failed setting cipher list: %s", ciphers); |
︙ | ︙ |
Changes to jni/curl/lib/vtls/nss.c.
︙ | ︙ | |||
1730 1731 1732 1733 1734 1735 1736 | static CURLcode nss_init_sslver(SSLVersionRange *sslver, struct Curl_easy *data, struct connectdata *conn) { CURLcode result; const long min = SSL_CONN_CONFIG(version); const long max = SSL_CONN_CONFIG(version_max); | | < < < < < < < < < > > > > > | 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 | static CURLcode nss_init_sslver(SSLVersionRange *sslver, struct Curl_easy *data, struct connectdata *conn) { CURLcode result; const long min = SSL_CONN_CONFIG(version); const long max = SSL_CONN_CONFIG(version_max); SSLVersionRange vrange; switch(min) { case CURL_SSLVERSION_TLSv1: case CURL_SSLVERSION_DEFAULT: /* Bump our minimum TLS version if NSS has stricter requirements. */ if(SSL_VersionRangeGetDefault(ssl_variant_stream, &vrange) != SECSuccess) return CURLE_SSL_CONNECT_ERROR; if(sslver->min < vrange.min) sslver->min = vrange.min; break; default: result = nss_sslver_from_curl(&sslver->min, min); if(result) { failf(data, "unsupported min version passed via CURLOPT_SSLVERSION"); return result; } |
︙ | ︙ |
Changes to jni/curl/lib/vtls/openssl.c.
︙ | ︙ | |||
21 22 23 24 25 26 27 | ***************************************************************************/ /* * Source file for all OpenSSL-specific code for the TLS/SSL layer. No code * but vtls.c should ever call or use these functions. */ | < < < < < | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ***************************************************************************/ /* * Source file for all OpenSSL-specific code for the TLS/SSL layer. No code * but vtls.c should ever call or use these functions. */ #include "curl_setup.h" #ifdef USE_OPENSSL #include <limits.h> #include "urldata.h" |
︙ | ︙ | |||
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 | } } /* Return error string for last OpenSSL error */ static char *ossl_strerror(unsigned long error, char *buf, size_t size) { ERR_error_string_n(error, buf, size); return buf; } /* Return an extra data index for the connection data. * This index can be used with SSL_get_ex_data() and SSL_set_ex_data(). */ static int ossl_get_ssl_conn_index(void) | > > > > | 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 | } } /* Return error string for last OpenSSL error */ static char *ossl_strerror(unsigned long error, char *buf, size_t size) { #ifdef OPENSSL_IS_BORINGSSL ERR_error_string_n((uint32_t)error, buf, size); #else ERR_error_string_n(error, buf, size); #endif return buf; } /* Return an extra data index for the connection data. * This index can be used with SSL_get_ex_data() and SSL_set_ex_data(). */ static int ossl_get_ssl_conn_index(void) |
︙ | ︙ | |||
1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 | addrlen = sizeof(struct in_addr); } /* get a "list" of alternative names */ altnames = X509_get_ext_d2i(server_cert, NID_subject_alt_name, NULL, NULL); if(altnames) { int numalts; int i; bool dnsmatched = FALSE; bool ipmatched = FALSE; /* get amount of alternatives, RFC2459 claims there MUST be at least one, but we don't depend on it... */ numalts = sk_GENERAL_NAME_num(altnames); | > > > > > | 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 | addrlen = sizeof(struct in_addr); } /* get a "list" of alternative names */ altnames = X509_get_ext_d2i(server_cert, NID_subject_alt_name, NULL, NULL); if(altnames) { #ifdef OPENSSL_IS_BORINGSSL size_t numalts; size_t i; #else int numalts; int i; #endif bool dnsmatched = FALSE; bool ipmatched = FALSE; /* get amount of alternatives, RFC2459 claims there MUST be at least one, but we don't depend on it... */ numalts = sk_GENERAL_NAME_num(altnames); |
︙ | ︙ | |||
1561 1562 1563 1564 1565 1566 1567 | switch(target) { case GEN_DNS: /* name/pattern comparison */ /* The OpenSSL man page explicitly says: "In general it cannot be assumed that the data returned by ASN1_STRING_data() is null terminated or does not contain embedded nulls." But also that "The actual format of the data will depend on the actual string | | < | | | 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 | switch(target) { case GEN_DNS: /* name/pattern comparison */ /* The OpenSSL man page explicitly says: "In general it cannot be assumed that the data returned by ASN1_STRING_data() is null terminated or does not contain embedded nulls." But also that "The actual format of the data will depend on the actual string type itself: for example for an IA5String the data will be ASCII" It has been however verified that in 0.9.6 and 0.9.7, IA5String is always zero-terminated. */ if((altlen == strlen(altptr)) && /* if this isn't true, there was an embedded zero in the name string and we cannot match it. */ subj_alt_hostcheck(data, altptr, hostname, dispname)) { dnsmatched = TRUE; } |
︙ | ︙ | |||
1629 1630 1631 1632 1633 1634 1635 | if(i >= 0) { ASN1_STRING *tmp = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, i)); /* In OpenSSL 0.9.7d and earlier, ASN1_STRING_to_UTF8 fails if the input is already UTF-8 encoded. We check for this case and copy the raw string manually to avoid the problem. This code can be made | | < | 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 | if(i >= 0) { ASN1_STRING *tmp = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, i)); /* In OpenSSL 0.9.7d and earlier, ASN1_STRING_to_UTF8 fails if the input is already UTF-8 encoded. We check for this case and copy the raw string manually to avoid the problem. This code can be made conditional in the future when OpenSSL has been fixed. */ if(tmp) { if(ASN1_STRING_type(tmp) == V_ASN1_UTF8STRING) { j = ASN1_STRING_length(tmp); if(j >= 0) { peer_CN = OPENSSL_malloc(j + 1); if(peer_CN) { memcpy(peer_CN, ASN1_STRING_get0_data(tmp), j); |
︙ | ︙ | |||
2150 2151 2152 2153 2154 2155 2156 2157 | case SSL2_VERSION: return "SSLv2"; } return "unknown"; } #endif static CURLcode | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 | case SSL2_VERSION: return "SSLv2"; } return "unknown"; } #endif #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) /* 1.1.0 */ static CURLcode set_ssl_version_min_max(SSL_CTX *ctx, struct connectdata *conn) { /* first, TLS min version... */ long curl_ssl_version_min = SSL_CONN_CONFIG(version); long curl_ssl_version_max; /* convert cURL min SSL version option to OpenSSL constant */ long ossl_ssl_version_min = 0; long ossl_ssl_version_max = 0; switch(curl_ssl_version_min) { case CURL_SSLVERSION_TLSv1: /* TLS 1.x */ case CURL_SSLVERSION_TLSv1_0: ossl_ssl_version_min = TLS1_VERSION; break; case CURL_SSLVERSION_TLSv1_1: ossl_ssl_version_min = TLS1_1_VERSION; break; case CURL_SSLVERSION_TLSv1_2: ossl_ssl_version_min = TLS1_2_VERSION; break; #ifdef TLS1_3_VERSION case CURL_SSLVERSION_TLSv1_3: ossl_ssl_version_min = TLS1_3_VERSION; break; #endif } /* CURL_SSLVERSION_DEFAULT means that no option was selected. We don't want to pass 0 to SSL_CTX_set_min_proto_version as it would enable all versions down to the lowest supported by the library. So we skip this, and stay with the OS default */ if(curl_ssl_version_min != CURL_SSLVERSION_DEFAULT) { if(!SSL_CTX_set_min_proto_version(ctx, ossl_ssl_version_min)) { return CURLE_SSL_CONNECT_ERROR; } } /* ... then, TLS max version */ curl_ssl_version_max = SSL_CONN_CONFIG(version_max); /* convert cURL max SSL version option to OpenSSL constant */ ossl_ssl_version_max = 0; switch(curl_ssl_version_max) { case CURL_SSLVERSION_MAX_TLSv1_0: ossl_ssl_version_max = TLS1_VERSION; break; case CURL_SSLVERSION_MAX_TLSv1_1: ossl_ssl_version_max = TLS1_1_VERSION; break; case CURL_SSLVERSION_MAX_TLSv1_2: ossl_ssl_version_max = TLS1_2_VERSION; break; #ifdef TLS1_3_VERSION case CURL_SSLVERSION_MAX_TLSv1_3: ossl_ssl_version_max = TLS1_3_VERSION; break; #endif case CURL_SSLVERSION_MAX_NONE: /* none selected */ case CURL_SSLVERSION_MAX_DEFAULT: /* max selected */ default: /* SSL_CTX_set_max_proto_version states that: setting the maximum to 0 will enable protocol versions up to the highest version supported by the library */ ossl_ssl_version_max = 0; break; } if(!SSL_CTX_set_max_proto_version(ctx, ossl_ssl_version_max)) { return CURLE_SSL_CONNECT_ERROR; } return CURLE_OK; } #endif #ifdef OPENSSL_IS_BORINGSSL typedef uint32_t ctx_option_t; #else typedef long ctx_option_t; #endif #if (OPENSSL_VERSION_NUMBER < 0x10100000L) /* 1.1.0 */ static CURLcode set_ssl_version_min_max_legacy(ctx_option_t *ctx_options, struct connectdata *conn, int sockindex) { #if (OPENSSL_VERSION_NUMBER < 0x1000100FL) || !defined(TLS1_3_VERSION) /* convoluted #if condition just to avoid compiler warnings on unused variable */ struct Curl_easy *data = conn->data; #endif long ssl_version = SSL_CONN_CONFIG(version); |
︙ | ︙ | |||
2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 | #else failf(data, OSSL_PACKAGE " was built without TLS 1.3 support"); return CURLE_NOT_BUILT_IN; #endif } return CURLE_OK; } /* The "new session" callback must return zero if the session can be removed * or non-zero if the session has been put into the session cache. */ static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid) { int res = 0; | > | 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 | #else failf(data, OSSL_PACKAGE " was built without TLS 1.3 support"); return CURLE_NOT_BUILT_IN; #endif } return CURLE_OK; } #endif /* The "new session" callback must return zero if the session can be removed * or non-zero if the session has been put into the session cache. */ static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid) { int res = 0; |
︙ | ︙ | |||
2290 2291 2292 2293 2294 2295 2296 | CURLcode result = CURLE_OK; char *ciphers; struct Curl_easy *data = conn->data; SSL_METHOD_QUAL SSL_METHOD *req_method = NULL; X509_LOOKUP *lookup = NULL; curl_socket_t sockfd = conn->sock[sockindex]; struct ssl_connect_data *connssl = &conn->ssl[sockindex]; | | > | 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 | CURLcode result = CURLE_OK; char *ciphers; struct Curl_easy *data = conn->data; SSL_METHOD_QUAL SSL_METHOD *req_method = NULL; X509_LOOKUP *lookup = NULL; curl_socket_t sockfd = conn->sock[sockindex]; struct ssl_connect_data *connssl = &conn->ssl[sockindex]; ctx_option_t ctx_options = 0; #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME bool sni; const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name : conn->host.name; #ifdef ENABLE_IPV6 struct in6_addr addr; #else |
︙ | ︙ | |||
2453 2454 2455 2456 2457 2458 2459 | /* unless the user explicitly ask to allow the protocol vulnerability we use the work-around */ if(!SSL_SET_OPTION(enable_beast)) ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; #endif switch(ssl_version) { | > | > > > > | | | | | | | > | | > | | | | > > | | < < | | > | > | | | > | | | | > > > > | | | < > > | > > > | | | | | 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 | /* unless the user explicitly ask to allow the protocol vulnerability we use the work-around */ if(!SSL_SET_OPTION(enable_beast)) ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; #endif switch(ssl_version) { /* "--sslv2" option means SSLv2 only, disable all others */ case CURL_SSLVERSION_SSLv2: #if OPENSSL_VERSION_NUMBER >= 0x10100000L /* 1.1.0 */ SSL_CTX_set_min_proto_version(BACKEND->ctx, SSL2_VERSION); SSL_CTX_set_max_proto_version(BACKEND->ctx, SSL2_VERSION); #else ctx_options |= SSL_OP_NO_SSLv3; ctx_options |= SSL_OP_NO_TLSv1; # if OPENSSL_VERSION_NUMBER >= 0x1000100FL ctx_options |= SSL_OP_NO_TLSv1_1; ctx_options |= SSL_OP_NO_TLSv1_2; # ifdef TLS1_3_VERSION ctx_options |= SSL_OP_NO_TLSv1_3; # endif # endif #endif break; /* "--sslv3" option means SSLv3 only, disable all others */ case CURL_SSLVERSION_SSLv3: #if OPENSSL_VERSION_NUMBER >= 0x10100000L /* 1.1.0 */ SSL_CTX_set_min_proto_version(BACKEND->ctx, SSL3_VERSION); SSL_CTX_set_max_proto_version(BACKEND->ctx, SSL3_VERSION); #else ctx_options |= SSL_OP_NO_SSLv2; ctx_options |= SSL_OP_NO_TLSv1; # if OPENSSL_VERSION_NUMBER >= 0x1000100FL ctx_options |= SSL_OP_NO_TLSv1_1; ctx_options |= SSL_OP_NO_TLSv1_2; # ifdef TLS1_3_VERSION ctx_options |= SSL_OP_NO_TLSv1_3; # endif # endif #endif break; /* "--tlsv<x.y>" options mean TLS >= version <x.y> */ case CURL_SSLVERSION_DEFAULT: case CURL_SSLVERSION_TLSv1: /* TLS >= version 1.0 */ case CURL_SSLVERSION_TLSv1_0: /* TLS >= version 1.0 */ case CURL_SSLVERSION_TLSv1_1: /* TLS >= version 1.1 */ case CURL_SSLVERSION_TLSv1_2: /* TLS >= version 1.2 */ case CURL_SSLVERSION_TLSv1_3: /* TLS >= version 1.3 */ /* asking for any TLS version as the minimum, means no SSL versions allowed */ ctx_options |= SSL_OP_NO_SSLv2; ctx_options |= SSL_OP_NO_SSLv3; #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) /* 1.1.0 */ result = set_ssl_version_min_max(BACKEND->ctx, conn); #else result = set_ssl_version_min_max_legacy(&ctx_options, conn, sockindex); #endif if(result != CURLE_OK) return result; break; default: failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION"); return CURLE_SSL_CONNECT_ERROR; } SSL_CTX_set_options(BACKEND->ctx, ctx_options); #ifdef HAS_NPN if(conn->bits.tls_enable_npn) SSL_CTX_set_next_proto_select_cb(BACKEND->ctx, select_next_proto_cb, conn); |
︙ | ︙ | |||
2650 2651 2652 2653 2654 2655 2656 | X509_STORE_set_flags(SSL_CTX_get_cert_store(BACKEND->ctx), X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL); infof(data, " CRLfile: %s\n", ssl_crlfile); } /* Try building a chain using issuers in the trusted store first to avoid | | | | | | | 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 | X509_STORE_set_flags(SSL_CTX_get_cert_store(BACKEND->ctx), X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL); infof(data, " CRLfile: %s\n", ssl_crlfile); } /* Try building a chain using issuers in the trusted store first to avoid problems with server-sent legacy intermediates. Newer versions of OpenSSL do alternate chain checking by default which gives us the same fix without as much of a performance hit (slight), so we prefer that if available. https://rt.openssl.org/Ticket/Display.html?id=3621&user=guest&pass=guest */ #if defined(X509_V_FLAG_TRUSTED_FIRST) && !defined(X509_V_FLAG_NO_ALT_CHAINS) if(verifypeer) { X509_STORE_set_flags(SSL_CTX_get_cert_store(BACKEND->ctx), X509_V_FLAG_TRUSTED_FIRST); } #endif |
︙ | ︙ | |||
3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 | Curl_ssl_push_certinfo(data, certnum, namebuf, buf); BIO_free(bio_out); } return 0; /* all is fine */ } static CURLcode get_cert_chain(struct connectdata *conn, struct ssl_connect_data *connssl) { CURLcode result; STACK_OF(X509) *sk; int i; struct Curl_easy *data = conn->data; | > > > > > > | | | | 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 | Curl_ssl_push_certinfo(data, certnum, namebuf, buf); BIO_free(bio_out); } return 0; /* all is fine */ } #ifdef OPENSSL_IS_BORINGSSL typedef size_t numcert_t; #else typedef int numcert_t; #endif static CURLcode get_cert_chain(struct connectdata *conn, struct ssl_connect_data *connssl) { CURLcode result; STACK_OF(X509) *sk; int i; struct Curl_easy *data = conn->data; numcert_t numcerts; BIO *mem; sk = SSL_get_peer_cert_chain(BACKEND->handle); if(!sk) { return CURLE_OUT_OF_MEMORY; } numcerts = sk_X509_num(sk); result = Curl_ssl_init_certinfo(data, (int)numcerts); if(result) { return result; } mem = BIO_new(BIO_s_mem()); for(i = 0; i < (int)numcerts; i++) { ASN1_INTEGER *num; X509 *x = sk_X509_value(sk, i); EVP_PKEY *pubkey = NULL; int j; char *ptr; const ASN1_BIT_STRING *psig = NULL; |
︙ | ︙ |
Changes to jni/curl/lib/vtls/vtls.c.
︙ | ︙ | |||
511 512 513 514 515 516 517 | Curl_ssl->close_all(data); } #if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \ defined(USE_SECTRANSP) || defined(USE_POLARSSL) || defined(USE_NSS) || \ defined(USE_MBEDTLS) || defined(USE_WOLFSSL) | | < < < < | < < | 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 | Curl_ssl->close_all(data); } #if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \ defined(USE_SECTRANSP) || defined(USE_POLARSSL) || defined(USE_NSS) || \ defined(USE_MBEDTLS) || defined(USE_WOLFSSL) int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks) { struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET]; if(connssl->connecting_state == ssl_connect_2_writing) { /* write mode */ socks[0] = conn->sock[FIRSTSOCKET]; return GETSOCK_WRITESOCK(0); } if(connssl->connecting_state == ssl_connect_2_reading) { /* read mode */ socks[0] = conn->sock[FIRSTSOCKET]; return GETSOCK_READSOCK(0); } return GETSOCK_BLANK; } #else int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks) { (void)conn; (void)socks; return GETSOCK_BLANK; } /* USE_OPENSSL || USE_GNUTLS || USE_SCHANNEL || USE_SECTRANSP || USE_NSS */ #endif void Curl_ssl_close(struct connectdata *conn, int sockindex) { |
︙ | ︙ |
Changes to jni/curl/lib/vtls/vtls.h.
︙ | ︙ | |||
139 140 141 142 143 144 145 | conn->proxy_ssl_config.var : conn->ssl_config.var) bool Curl_ssl_config_matches(struct ssl_primary_config* data, struct ssl_primary_config* needle); bool Curl_clone_primary_ssl_config(struct ssl_primary_config *source, struct ssl_primary_config *dest); void Curl_free_primary_ssl_config(struct ssl_primary_config* sslc); | | < | 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | conn->proxy_ssl_config.var : conn->ssl_config.var) bool Curl_ssl_config_matches(struct ssl_primary_config* data, struct ssl_primary_config* needle); bool Curl_clone_primary_ssl_config(struct ssl_primary_config *source, struct ssl_primary_config *dest); void Curl_free_primary_ssl_config(struct ssl_primary_config* sslc); int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks); int Curl_ssl_backend(void); #ifdef USE_SSL int Curl_ssl_init(void); void Curl_ssl_cleanup(void); CURLcode Curl_ssl_connect(struct connectdata *conn, int sockindex); |
︙ | ︙ |
Changes to jni/curl/packages/Makefile.in.
︙ | ︙ | |||
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
434 435 436 437 438 439 440 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ | | | | 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign packages/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ |
︙ | ︙ |
Changes to jni/curl/packages/OS400/README.OS400.
︙ | ︙ | |||
116 117 118 119 120 121 122 123 124 125 126 127 128 129 | CURLOPT_RANDOM_FILE CURLOPT_RANGE CURLOPT_REFERER CURLOPT_REQUEST_TARGET CURLOPT_RTSP_SESSION_UID CURLOPT_RTSP_STREAM_URI CURLOPT_RTSP_TRANSPORT CURLOPT_SERVICE_NAME CURLOPT_SOCKS5_GSSAPI_SERVICE CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 CURLOPT_SSH_KNOWNHOSTS CURLOPT_SSH_PRIVATE_KEYFILE CURLOPT_SSH_PUBLIC_KEYFILE CURLOPT_SSLCERT | > | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | CURLOPT_RANDOM_FILE CURLOPT_RANGE CURLOPT_REFERER CURLOPT_REQUEST_TARGET CURLOPT_RTSP_SESSION_UID CURLOPT_RTSP_STREAM_URI CURLOPT_RTSP_TRANSPORT CURLOPT_SASL_AUTHZID CURLOPT_SERVICE_NAME CURLOPT_SOCKS5_GSSAPI_SERVICE CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 CURLOPT_SSH_KNOWNHOSTS CURLOPT_SSH_PRIVATE_KEYFILE CURLOPT_SSH_PUBLIC_KEYFILE CURLOPT_SSLCERT |
︙ | ︙ |
Changes to jni/curl/packages/OS400/ccsidcurl.c.
︙ | ︙ | |||
1137 1138 1139 1140 1141 1142 1143 | We (try to) do it only once: there is no need to issue several times the same message; but since threadsafeness is not handled here, this may occur (and we don't care!). */ if(testwarn) { testwarn = 0; | < < < < | < | 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 | We (try to) do it only once: there is no need to issue several times the same message; but since threadsafeness is not handled here, this may occur (and we don't care!). */ if(testwarn) { testwarn = 0; if((int) STRING_LASTZEROTERMINATED != (int) STRING_SASL_AUTHZID + 1 || (int) STRING_LAST != (int) STRING_COPYPOSTFIELDS + 1) curl_mfprintf(stderr, "*** WARNING: curl_easy_setopt_ccsid() should be reworked ***\n"); } data = (struct Curl_easy *) curl; va_start(arg, tag); |
︙ | ︙ | |||
1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 | case CURLOPT_RANDOM_FILE: case CURLOPT_RANGE: case CURLOPT_REFERER: case CURLOPT_REQUEST_TARGET: case CURLOPT_RTSP_SESSION_ID: case CURLOPT_RTSP_STREAM_URI: case CURLOPT_RTSP_TRANSPORT: case CURLOPT_SERVICE_NAME: case CURLOPT_SOCKS5_GSSAPI_SERVICE: case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5: case CURLOPT_SSH_KNOWNHOSTS: case CURLOPT_SSH_PRIVATE_KEYFILE: case CURLOPT_SSH_PUBLIC_KEYFILE: case CURLOPT_SSLCERT: | > | 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 | case CURLOPT_RANDOM_FILE: case CURLOPT_RANGE: case CURLOPT_REFERER: case CURLOPT_REQUEST_TARGET: case CURLOPT_RTSP_SESSION_ID: case CURLOPT_RTSP_STREAM_URI: case CURLOPT_RTSP_TRANSPORT: case CURLOPT_SASL_AUTHZID: case CURLOPT_SERVICE_NAME: case CURLOPT_SOCKS5_GSSAPI_SERVICE: case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5: case CURLOPT_SSH_KNOWNHOSTS: case CURLOPT_SSH_PRIVATE_KEYFILE: case CURLOPT_SSH_PUBLIC_KEYFILE: case CURLOPT_SSLCERT: |
︙ | ︙ |
Changes to jni/curl/packages/OS400/ccsidcurl.h.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | > > | < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #ifndef CURLINC_CCSIDCURL_H #define CURLINC_CCSIDCURL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * ***************************************************************************/ #include "curl.h" #include "easy.h" #include "multi.h" CURL_EXTERN char * curl_version_ccsid(unsigned int ccsid); CURL_EXTERN char * curl_easy_escape_ccsid(CURL * handle, |
︙ | ︙ |
Changes to jni/curl/packages/OS400/curl.inc.in.
︙ | ︙ | |||
134 135 136 137 138 139 140 141 142 143 144 145 146 147 | d c X'00200000' d CURL_VERSION_MULTI_SSL... d c X'00400000' d CURL_VERSION_BROTLI... d c X'00800000' d CURL_VERSION_ALTSVC... d c X'01000000' * d CURL_HTTPPOST_FILENAME... d c X'00000001' d CURL_HTTPPOST_READFILE... d c X'00000002' d CURL_HTTPPOST_PTRNAME... d c X'00000004' | > > | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | d c X'00200000' d CURL_VERSION_MULTI_SSL... d c X'00400000' d CURL_VERSION_BROTLI... d c X'00800000' d CURL_VERSION_ALTSVC... d c X'01000000' d CURL_VERSION_HTTP3... d c X'02000000' * d CURL_HTTPPOST_FILENAME... d c X'00000001' d CURL_HTTPPOST_READFILE... d c X'00000002' d CURL_HTTPPOST_PTRNAME... d c X'00000004' |
︙ | ︙ | |||
1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 | d c 00285 d CURLOPT_ALTSVC_CTRL... d c 00286 d CURLOPT_ALTSVC... d c 10287 d CURLOPT_MAXAGE_CONN... d c 00288 * /if not defined(CURL_NO_OLDIES) d CURLOPT_FILE c 10001 d CURLOPT_INFILE... d c 10009 d CURLOPT_SSLKEYPASSWD... d c 10026 | > > | 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 | d c 00285 d CURLOPT_ALTSVC_CTRL... d c 00286 d CURLOPT_ALTSVC... d c 10287 d CURLOPT_MAXAGE_CONN... d c 00288 d CURLOPT_SASL_AUTHZID... d c 10289 * /if not defined(CURL_NO_OLDIES) d CURLOPT_FILE c 10001 d CURLOPT_INFILE... d c 10009 d CURLOPT_SSLKEYPASSWD... d c 10026 |
︙ | ︙ |
Changes to jni/curl/packages/vms/Makefile.in.
︙ | ︙ | |||
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
380 381 382 383 384 385 386 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ | | | | 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/vms/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign packages/vms/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ |
︙ | ︙ |
Added jni/curl/plan9/BUILD.PLAN9.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | Prerequirement ============== This document describes how to compile, build and install curl and libcurl from sources using mk. To build it, you will require to install latest 9legacy patches into Plan 9. Also Plan 9 still have no configuration option so both zlib and libopenssl are required too. The zlib that is available on Plan 9 can be downloaded from: https://github.com/madler/zlib/pull/398 LibreSSL Portable can be downloaded from: https://github.com/libressl-portable/portable/pull/510 Instruction =========== First, you should construct namespace as like described below: % bind -ac ../lib lib % bind -ac ../src src % bind -ac ../include include % bind -ac .. . Then you will see as shown below (excerpt): curl.git/ |_plan9 | |_BUILD.PLAN9.txt | |_CHANGES | |_CMake | | : | |_mkfile | |_mkfile.proto | |_include | | |_Makefile.am | | | : | | |_mkfile | |_lib | | |_CMakeLists.txt | | | : | | |_mkfile | | |_mkfile.inc | |_src | | |_CMakeLists.txt | | | : | | |_mkfile | | |_mkfile.inc |_lib |_src After constructing namespace, you can run mk on plan9 directory. % mk % mk install |
Added jni/curl/plan9/include/mkfile.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### DIR=/sys/include/ape/curl HFILES=`{ls curl/*.h} all:V: $HFILES install:V: all mkdir -p $DIR cp curl/*.h $DIR/ clean:V: $HFILES # do nothing nuke:V: clean |
Added jni/curl/plan9/lib/mkfile.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### <../mkfile.proto <|mkfile.inc CFLAGS=$CFLAGS -I../include -I. -c OFILES=${CSOURCES:%.c=%.$O} HFILES=$HHEADERS LIB=/$objtype/lib/ape/libcurl.a CLEANFILES=\ ${LIB_VAUTH_CFILES:%.c=%.$O}\ ${LIB_VTLS_CFILES:%.c=%.$O}\ </sys/src/cmd/mklib %.$O: %.c $CC $CFLAGS -o $target $stem.c |
Added jni/curl/plan9/lib/mkfile.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/bin/rc #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### # rename $(VAR) -> $VAR sed 's/\$\(([A-Z_]+)\)/$\1/g' Makefile.inc |
Added jni/curl/plan9/mkfile.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### </sys/src/ape/config DIRS=\ lib\ src\ include\ default:V: all all install clean nuke:V: for(i in $DIRS) @{ cd $i mk $target } |
Added jni/curl/plan9/mkfile.proto.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### </sys/src/ape/config CFLAGS=\ -D__PLAN9__\ -D_POSIX_SOURCE\ -D_BSD_EXTENSION\ -D_SUSV2_SOURCE\ -D_REENTRANT_SOURCE\ |
Added jni/curl/plan9/src/mkfile.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### <../mkfile.proto <|mkfile.inc CFLAGS=$CFLAGS -I../include -I../lib -c OFILES=${CURL_CFILES:%.c=%.$O} HFILES=$CURL_HFILES LIB=\ /$objtype/lib/ape/libcurl.a\ /$objtype/lib/ape/libssl.a\ /$objtype/lib/ape/libcrypto.a\ /$objtype/lib/ape/libz.a\ BIN=/$objtype/bin TARG=curl CLEANFILES=tool_hugehelp.c </sys/src/cmd/mkone tool_hugehelp.c: echo 'void hugehelp(void) {}' >$target |
Added jni/curl/plan9/src/mkfile.inc.
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/bin/rc #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # ########################################################################### # rename $(VAR) -> $VAR sed 's/\$\(([A-Z_]+)\)/$\1/g' Makefile.inc |
Changes to jni/curl/projects/Windows/VC10/lib/libcurl.vcxproj.
︙ | ︙ | |||
2413 2414 2415 2416 2417 2418 2419 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> | < < | 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> <ClCompile Include="..\..\..\..\lib\strcase.c" /> <ClCompile Include="..\..\..\..\lib\strdup.c" /> <ClCompile Include="..\..\..\..\lib\strerror.c" /> <ClCompile Include="..\..\..\..\lib\strtok.c" /> <ClCompile Include="..\..\..\..\lib\strtoofft.c" /> <ClCompile Include="..\..\..\..\lib\system_win32.c" /> <ClCompile Include="..\..\..\..\lib\telnet.c" /> |
︙ | ︙ | |||
2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> | > | 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\quic.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC10/src/curl.vcxproj.
︙ | ︙ | |||
2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> | > | 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_progress.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> |
︙ | ︙ | |||
2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> | > | 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_progress.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC11/lib/libcurl.vcxproj.
︙ | ︙ | |||
2469 2470 2471 2472 2473 2474 2475 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> | < < | 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> <ClCompile Include="..\..\..\..\lib\strcase.c" /> <ClCompile Include="..\..\..\..\lib\strdup.c" /> <ClCompile Include="..\..\..\..\lib\strerror.c" /> <ClCompile Include="..\..\..\..\lib\strtok.c" /> <ClCompile Include="..\..\..\..\lib\strtoofft.c" /> <ClCompile Include="..\..\..\..\lib\system_win32.c" /> <ClCompile Include="..\..\..\..\lib\telnet.c" /> |
︙ | ︙ | |||
2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> | > | 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\quic.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC11/src/curl.vcxproj.
︙ | ︙ | |||
2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> | > | 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_progress.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> |
︙ | ︙ | |||
2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> | > | 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_progress.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC12/lib/libcurl.vcxproj.
︙ | ︙ | |||
2469 2470 2471 2472 2473 2474 2475 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> | < < | 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> <ClCompile Include="..\..\..\..\lib\strcase.c" /> <ClCompile Include="..\..\..\..\lib\strdup.c" /> <ClCompile Include="..\..\..\..\lib\strerror.c" /> <ClCompile Include="..\..\..\..\lib\strtok.c" /> <ClCompile Include="..\..\..\..\lib\strtoofft.c" /> <ClCompile Include="..\..\..\..\lib\system_win32.c" /> <ClCompile Include="..\..\..\..\lib\telnet.c" /> |
︙ | ︙ | |||
2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> | > | 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\quic.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC12/src/curl.vcxproj.
︙ | ︙ | |||
2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> | > | 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_progress.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> |
︙ | ︙ | |||
2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> | > | 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_progress.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC14/lib/libcurl.vcxproj.
︙ | ︙ | |||
2469 2470 2471 2472 2473 2474 2475 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> | < < | 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> <ClCompile Include="..\..\..\..\lib\strcase.c" /> <ClCompile Include="..\..\..\..\lib\strdup.c" /> <ClCompile Include="..\..\..\..\lib\strerror.c" /> <ClCompile Include="..\..\..\..\lib\strtok.c" /> <ClCompile Include="..\..\..\..\lib\strtoofft.c" /> <ClCompile Include="..\..\..\..\lib\system_win32.c" /> <ClCompile Include="..\..\..\..\lib\telnet.c" /> |
︙ | ︙ | |||
2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> | > | 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\quic.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC14/src/curl.vcxproj.
︙ | ︙ | |||
2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> | > | 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_progress.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> |
︙ | ︙ | |||
2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> | > | 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_progress.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC15/lib/libcurl.vcxproj.
︙ | ︙ | |||
2441 2442 2443 2444 2445 2446 2447 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> | < < | 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 | <ClCompile Include="..\..\..\..\lib\smb.c" /> <ClCompile Include="..\..\..\..\lib\smtp.c" /> <ClCompile Include="..\..\..\..\lib\socks.c" /> <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" /> <ClCompile Include="..\..\..\..\lib\socks_sspi.c" /> <ClCompile Include="..\..\..\..\lib\speedcheck.c" /> <ClCompile Include="..\..\..\..\lib\splay.c" /> <ClCompile Include="..\..\..\..\lib\strcase.c" /> <ClCompile Include="..\..\..\..\lib\strdup.c" /> <ClCompile Include="..\..\..\..\lib\strerror.c" /> <ClCompile Include="..\..\..\..\lib\strtok.c" /> <ClCompile Include="..\..\..\..\lib\strtoofft.c" /> <ClCompile Include="..\..\..\..\lib\system_win32.c" /> <ClCompile Include="..\..\..\..\lib\telnet.c" /> |
︙ | ︙ | |||
2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> | > | 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 | <ClInclude Include="..\..\..\..\lib\non-ascii.h" /> <ClInclude Include="..\..\..\..\lib\nonblock.h" /> <ClInclude Include="..\..\..\..\lib\parsedate.h" /> <ClInclude Include="..\..\..\..\lib\pingpong.h" /> <ClInclude Include="..\..\..\..\lib\pop3.h" /> <ClInclude Include="..\..\..\..\lib\progress.h" /> <ClInclude Include="..\..\..\..\lib\psl.h" /> <ClInclude Include="..\..\..\..\lib\quic.h" /> <ClInclude Include="..\..\..\..\lib\rand.h" /> <ClInclude Include="..\..\..\..\lib\rtsp.h" /> <ClInclude Include="..\..\..\..\lib\select.h" /> <ClInclude Include="..\..\..\..\lib\sendf.h" /> <ClInclude Include="..\..\..\..\lib\setopt.h" /> <ClInclude Include="..\..\..\..\lib\setup-vms.h" /> <ClInclude Include="..\..\..\..\lib\share.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC15/src/curl.vcxproj.
︙ | ︙ | |||
2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> | > | 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 | <ClCompile Include="..\..\..\..\src\tool_metalink.c" /> <ClCompile Include="..\..\..\..\src\tool_msgs.c" /> <ClCompile Include="..\..\..\..\src\tool_operate.c" /> <ClCompile Include="..\..\..\..\src\tool_operhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_panykey.c" /> <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" /> <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" /> <ClCompile Include="..\..\..\..\src\tool_progress.c" /> <ClCompile Include="..\..\..\..\src\tool_setopt.c" /> <ClCompile Include="..\..\..\..\src\tool_sleep.c" /> <ClCompile Include="..\..\..\..\src\tool_strdup.c" /> <ClCompile Include="..\..\..\..\src\tool_urlglob.c" /> <ClCompile Include="..\..\..\..\src\tool_util.c" /> <ClCompile Include="..\..\..\..\src\tool_vms.c" /> <ClCompile Include="..\..\..\..\src\tool_writeout.c" /> |
︙ | ︙ | |||
2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> | > | 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 | <ClInclude Include="..\..\..\..\src\tool_metalink.h" /> <ClInclude Include="..\..\..\..\src\tool_msgs.h" /> <ClInclude Include="..\..\..\..\src\tool_operate.h" /> <ClInclude Include="..\..\..\..\src\tool_operhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_panykey.h" /> <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" /> <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" /> <ClInclude Include="..\..\..\..\src\tool_progress.h" /> <ClInclude Include="..\..\..\..\src\tool_sdecls.h" /> <ClInclude Include="..\..\..\..\src\tool_setopt.h" /> <ClInclude Include="..\..\..\..\src\tool_setup.h" /> <ClInclude Include="..\..\..\..\src\tool_sleep.h" /> <ClInclude Include="..\..\..\..\src\tool_strdup.h" /> <ClInclude Include="..\..\..\..\src\tool_urlglob.h" /> <ClInclude Include="..\..\..\..\src\tool_util.h" /> |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC6/lib/libcurl.dsp.
︙ | ︙ | |||
1102 1103 1104 1105 1106 1107 1108 | # End Source File # Begin Source File SOURCE=..\..\..\..\lib\splay.c # End Source File # Begin Source File | < < < < < < < < | 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 | # End Source File # Begin Source File SOURCE=..\..\..\..\lib\splay.c # End Source File # Begin Source File SOURCE=..\..\..\..\lib\strcase.c # End Source File # Begin Source File SOURCE=..\..\..\..\lib\strdup.c # End Source File # Begin Source File |
︙ | ︙ | |||
1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 | SOURCE=..\..\..\..\lib\progress.h # End Source File # Begin Source File SOURCE=..\..\..\..\lib\psl.h # End Source File # Begin Source File SOURCE=..\..\..\..\lib\rand.h # End Source File # Begin Source File SOURCE=..\..\..\..\lib\rtsp.h # End Source File | > > > > | 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 | SOURCE=..\..\..\..\lib\progress.h # End Source File # Begin Source File SOURCE=..\..\..\..\lib\psl.h # End Source File # Begin Source File SOURCE=..\..\..\..\lib\quic.h # End Source File # Begin Source File SOURCE=..\..\..\..\lib\rand.h # End Source File # Begin Source File SOURCE=..\..\..\..\lib\rtsp.h # End Source File |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC6/src/curl.dsp.
︙ | ︙ | |||
814 815 816 817 818 819 820 821 822 823 824 825 826 827 | SOURCE=..\..\..\..\src\tool_paramhlp.c # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_parsecfg.c # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_setopt.c # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_sleep.c # End Source File | > > > > | 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 | SOURCE=..\..\..\..\src\tool_paramhlp.c # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_parsecfg.c # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_progress.c # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_setopt.c # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_sleep.c # End Source File |
︙ | ︙ | |||
998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 | SOURCE=..\..\..\..\src\tool_paramhlp.h # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_parsecfg.h # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_sdecls.h # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_setopt.h # End Source File | > > > > | 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 | SOURCE=..\..\..\..\src\tool_paramhlp.h # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_parsecfg.h # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_progress.h # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_sdecls.h # End Source File # Begin Source File SOURCE=..\..\..\..\src\tool_setopt.h # End Source File |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC7.1/lib/libcurl.vcproj.
︙ | ︙ | |||
1534 1535 1536 1537 1538 1539 1540 | <File RelativePath="..\..\..\..\lib\speedcheck.c"> </File> <File RelativePath="..\..\..\..\lib\splay.c"> </File> <File | < < < < < < | 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 | <File RelativePath="..\..\..\..\lib\speedcheck.c"> </File> <File RelativePath="..\..\..\..\lib\splay.c"> </File> <File RelativePath="..\..\..\..\lib\strcase.c"> </File> <File RelativePath="..\..\..\..\lib\strdup.c"> </File> <File RelativePath="..\..\..\..\lib\strerror.c"> |
︙ | ︙ | |||
1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 | </File> <File RelativePath="..\..\..\..\lib\progress.h"> </File> <File RelativePath="..\..\..\..\lib\psl.h"> </File> <File RelativePath="..\..\..\..\lib\rand.h"> </File> <File RelativePath="..\..\..\..\lib\rtsp.h"> </File> <File | > > > | 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 | </File> <File RelativePath="..\..\..\..\lib\progress.h"> </File> <File RelativePath="..\..\..\..\lib\psl.h"> </File> <File RelativePath="..\..\..\..\lib\quic.h"> </File> <File RelativePath="..\..\..\..\lib\rand.h"> </File> <File RelativePath="..\..\..\..\lib\rtsp.h"> </File> <File |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC7.1/src/curl.vcproj.
︙ | ︙ | |||
1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.c"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.c"> </File> <File RelativePath="..\..\..\..\src\tool_sleep.c"> </File> <File | > > > | 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.c"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c"> </File> <File RelativePath="..\..\..\..\src\tool_progress.c"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.c"> </File> <File RelativePath="..\..\..\..\src\tool_sleep.c"> </File> <File |
︙ | ︙ | |||
1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.h"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h"> </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.h"> </File> <File | > > > | 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.h"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h"> </File> <File RelativePath="..\..\..\..\src\tool_progress.h"> </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.h"> </File> <File |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC7/lib/libcurl.vcproj.
︙ | ︙ | |||
1388 1389 1390 1391 1392 1393 1394 | <File RelativePath="..\..\..\..\lib\speedcheck.c"> </File> <File RelativePath="..\..\..\..\lib\splay.c"> </File> <File | < < < < < < | 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 | <File RelativePath="..\..\..\..\lib\speedcheck.c"> </File> <File RelativePath="..\..\..\..\lib\splay.c"> </File> <File RelativePath="..\..\..\..\lib\strcase.c"> </File> <File RelativePath="..\..\..\..\lib\strdup.c"> </File> <File RelativePath="..\..\..\..\lib\strerror.c"> |
︙ | ︙ | |||
1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 | </File> <File RelativePath="..\..\..\..\lib\progress.h"> </File> <File RelativePath="..\..\..\..\lib\psl.h"> </File> <File RelativePath="..\..\..\..\lib\rand.h"> </File> <File RelativePath="..\..\..\..\lib\rtsp.h"> </File> <File | > > > | 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 | </File> <File RelativePath="..\..\..\..\lib\progress.h"> </File> <File RelativePath="..\..\..\..\lib\psl.h"> </File> <File RelativePath="..\..\..\..\lib\quic.h"> </File> <File RelativePath="..\..\..\..\lib\rand.h"> </File> <File RelativePath="..\..\..\..\lib\rtsp.h"> </File> <File |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC7/src/curl.vcproj.
︙ | ︙ | |||
1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.c"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.c"> </File> <File RelativePath="..\..\..\..\src\tool_sleep.c"> </File> <File | > > > | 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.c"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c"> </File> <File RelativePath="..\..\..\..\src\tool_progress.c"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.c"> </File> <File RelativePath="..\..\..\..\src\tool_sleep.c"> </File> <File |
︙ | ︙ | |||
1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.h"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h"> </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.h"> </File> <File | > > > | 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 | </File> <File RelativePath="..\..\..\..\src\tool_paramhlp.h"> </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h"> </File> <File RelativePath="..\..\..\..\src\tool_progress.h"> </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h"> </File> <File RelativePath="..\..\..\..\src\tool_setopt.h"> </File> <File |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC8/lib/libcurl.vcproj.
︙ | ︙ | |||
3987 3988 3989 3990 3991 3992 3993 | <File RelativePath="..\..\..\..\lib\speedcheck.c" > </File> <File RelativePath="..\..\..\..\lib\splay.c" > | < < < < < < < < | 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 | <File RelativePath="..\..\..\..\lib\speedcheck.c" > </File> <File RelativePath="..\..\..\..\lib\splay.c" > </File> <File RelativePath="..\..\..\..\lib\strcase.c" > </File> <File RelativePath="..\..\..\..\lib\strdup.c" |
︙ | ︙ | |||
4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 | <File RelativePath="..\..\..\..\lib\progress.h" > </File> <File RelativePath="..\..\..\..\lib\psl.h" > </File> <File RelativePath="..\..\..\..\lib\rand.h" > </File> <File RelativePath="..\..\..\..\lib\rtsp.h" | > > > > | 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 | <File RelativePath="..\..\..\..\lib\progress.h" > </File> <File RelativePath="..\..\..\..\lib\psl.h" > </File> <File RelativePath="..\..\..\..\lib\quic.h" > </File> <File RelativePath="..\..\..\..\lib\rand.h" > </File> <File RelativePath="..\..\..\..\lib\rtsp.h" |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC8/src/curl.vcproj.
︙ | ︙ | |||
4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 | <File RelativePath="..\..\..\..\src\tool_paramhlp.c" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.c" > </File> <File RelativePath="..\..\..\..\src\tool_sleep.c" | > > > > | 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 | <File RelativePath="..\..\..\..\src\tool_paramhlp.c" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c" > </File> <File RelativePath="..\..\..\..\src\tool_progress.c" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.c" > </File> <File RelativePath="..\..\..\..\src\tool_sleep.c" |
︙ | ︙ | |||
4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 | <File RelativePath="..\..\..\..\src\tool_paramhlp.h" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h" > </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.h" | > > > > | 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 | <File RelativePath="..\..\..\..\src\tool_paramhlp.h" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h" > </File> <File RelativePath="..\..\..\..\src\tool_progress.h" > </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.h" |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC9/lib/libcurl.vcproj.
︙ | ︙ | |||
3928 3929 3930 3931 3932 3933 3934 | <File RelativePath="..\..\..\..\lib\speedcheck.c" > </File> <File RelativePath="..\..\..\..\lib\splay.c" > | < < < < < < < < | 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 | <File RelativePath="..\..\..\..\lib\speedcheck.c" > </File> <File RelativePath="..\..\..\..\lib\splay.c" > </File> <File RelativePath="..\..\..\..\lib\strcase.c" > </File> <File RelativePath="..\..\..\..\lib\strdup.c" |
︙ | ︙ | |||
4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 | <File RelativePath="..\..\..\..\lib\progress.h" > </File> <File RelativePath="..\..\..\..\lib\psl.h" > </File> <File RelativePath="..\..\..\..\lib\rand.h" > </File> <File RelativePath="..\..\..\..\lib\rtsp.h" | > > > > | 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 | <File RelativePath="..\..\..\..\lib\progress.h" > </File> <File RelativePath="..\..\..\..\lib\psl.h" > </File> <File RelativePath="..\..\..\..\lib\quic.h" > </File> <File RelativePath="..\..\..\..\lib\rand.h" > </File> <File RelativePath="..\..\..\..\lib\rtsp.h" |
︙ | ︙ |
Changes to jni/curl/projects/Windows/VC9/src/curl.vcproj.
︙ | ︙ | |||
4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 | <File RelativePath="..\..\..\..\src\tool_paramhlp.c" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.c" > </File> <File RelativePath="..\..\..\..\src\tool_sleep.c" | > > > > | 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 | <File RelativePath="..\..\..\..\src\tool_paramhlp.c" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.c" > </File> <File RelativePath="..\..\..\..\src\tool_progress.c" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.c" > </File> <File RelativePath="..\..\..\..\src\tool_sleep.c" |
︙ | ︙ | |||
4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 | <File RelativePath="..\..\..\..\src\tool_paramhlp.h" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h" > </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.h" | > > > > | 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 | <File RelativePath="..\..\..\..\src\tool_paramhlp.h" > </File> <File RelativePath="..\..\..\..\src\tool_parsecfg.h" > </File> <File RelativePath="..\..\..\..\src\tool_progress.h" > </File> <File RelativePath="..\..\..\..\src\tool_sdecls.h" > </File> <File RelativePath="..\..\..\..\src\tool_setopt.h" |
︙ | ︙ |
Changes to jni/curl/projects/build-openssl.bat.
︙ | ︙ | |||
91 92 93 94 95 96 97 98 99 100 101 102 103 104 | if exist "%PF%\Microsoft Visual Studio\2017\Enterprise\VC" ( set "VC_PATH=Microsoft Visual Studio\2017\Enterprise\VC" ) else if exist "%PF%\Microsoft Visual Studio\2017\Professional\VC" ( set "VC_PATH=Microsoft Visual Studio\2017\Professional\VC" ) else ( set "VC_PATH=Microsoft Visual Studio\2017\Community\VC" ) ) else if /i "%~1%" == "x86" ( set BUILD_PLATFORM=x86 ) else if /i "%~1%" == "x64" ( set BUILD_PLATFORM=x64 ) else if /i "%~1%" == "debug" ( set BUILD_CONFIG=debug ) else if /i "%~1%" == "release" ( | > > > > > > > > > > > > > | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | if exist "%PF%\Microsoft Visual Studio\2017\Enterprise\VC" ( set "VC_PATH=Microsoft Visual Studio\2017\Enterprise\VC" ) else if exist "%PF%\Microsoft Visual Studio\2017\Professional\VC" ( set "VC_PATH=Microsoft Visual Studio\2017\Professional\VC" ) else ( set "VC_PATH=Microsoft Visual Studio\2017\Community\VC" ) ) else if /i "%~1" == "vc14.2" ( set VC_VER=14.2 set VC_DESC=VC14.2 rem Determine the VC14.2 path based on the installed edition in descending rem order (Enterprise, then Professional and finally Community) if exist "%PF%\Microsoft Visual Studio\2019\Enterprise\VC" ( set "VC_PATH=Microsoft Visual Studio\2019\Enterprise\VC" ) else if exist "%PF%\Microsoft Visual Studio\2019\Professional\VC" ( set "VC_PATH=Microsoft Visual Studio\2019\Professional\VC" ) else ( set "VC_PATH=Microsoft Visual Studio\2019\Community\VC" ) ) else if /i "%~1%" == "x86" ( set BUILD_PLATFORM=x86 ) else if /i "%~1%" == "x64" ( set BUILD_PLATFORM=x64 ) else if /i "%~1%" == "debug" ( set BUILD_CONFIG=debug ) else if /i "%~1%" == "release" ( |
︙ | ︙ | |||
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | if "%VC_VER%" == "8.0" set VCVARS_PLATFORM=x86_amd64 if "%VC_VER%" == "9.0" set VCVARS_PLATFORM=%BUILD_PLATFORM% if "%VC_VER%" == "10.0" set VCVARS_PLATFORM=%BUILD_PLATFORM% if "%VC_VER%" == "11.0" set VCVARS_PLATFORM=amd64 if "%VC_VER%" == "12.0" set VCVARS_PLATFORM=amd64 if "%VC_VER%" == "14.0" set VCVARS_PLATFORM=amd64 if "%VC_VER%" == "14.1" set VCVARS_PLATFORM=amd64 ) if exist "%START_DIR%\ms\do_ms.bat" ( set LEGACY_BUILD=TRUE ) else ( set LEGACY_BUILD=FALSE ) :start echo. set SAVED_PATH=%CD% if "%VC_VER%" == "6.0" ( call "%ABS_VC_PATH%\bin\vcvars32" ) else if "%VC_VER%" == "7.0" ( call "%ABS_VC_PATH%\bin\vcvars32" ) else if "%VC_VER%" == "7.1" ( call "%ABS_VC_PATH%\bin\vcvars32" ) else if "%VC_VER%" == "14.1" ( call "%ABS_VC_PATH%\Auxiliary\Build\vcvarsall" %VCVARS_PLATFORM% ) else ( call "%ABS_VC_PATH%\vcvarsall" %VCVARS_PLATFORM% ) echo. cd /d %SAVED_PATH% | > > > | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | if "%VC_VER%" == "8.0" set VCVARS_PLATFORM=x86_amd64 if "%VC_VER%" == "9.0" set VCVARS_PLATFORM=%BUILD_PLATFORM% if "%VC_VER%" == "10.0" set VCVARS_PLATFORM=%BUILD_PLATFORM% if "%VC_VER%" == "11.0" set VCVARS_PLATFORM=amd64 if "%VC_VER%" == "12.0" set VCVARS_PLATFORM=amd64 if "%VC_VER%" == "14.0" set VCVARS_PLATFORM=amd64 if "%VC_VER%" == "14.1" set VCVARS_PLATFORM=amd64 if "%VC_VER%" == "14.2" set VCVARS_PLATFORM=amd64 ) if exist "%START_DIR%\ms\do_ms.bat" ( set LEGACY_BUILD=TRUE ) else ( set LEGACY_BUILD=FALSE ) :start echo. set SAVED_PATH=%CD% if "%VC_VER%" == "6.0" ( call "%ABS_VC_PATH%\bin\vcvars32" ) else if "%VC_VER%" == "7.0" ( call "%ABS_VC_PATH%\bin\vcvars32" ) else if "%VC_VER%" == "7.1" ( call "%ABS_VC_PATH%\bin\vcvars32" ) else if "%VC_VER%" == "14.1" ( call "%ABS_VC_PATH%\Auxiliary\Build\vcvarsall" %VCVARS_PLATFORM% ) else if "%VC_VER%" == "14.2" ( call "%ABS_VC_PATH%\Auxiliary\Build\vcvarsall" %VCVARS_PLATFORM% ) else ( call "%ABS_VC_PATH%\vcvarsall" %VCVARS_PLATFORM% ) echo. cd /d %SAVED_PATH% |
︙ | ︙ | |||
565 566 567 568 569 570 571 | move !build_dir!\lib\*.lib "%OUTDIR%\LIB Release" 1>nul move !build_dir!\bin\*.exe "%OUTDIR%\LIB Release" 1>nul ) else if "%2" == "shared" ( if not exist "%OUTDIR%\DLL Release" ( mkdir "%OUTDIR%\DLL Release" 1>nul ) | | | 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 | move !build_dir!\lib\*.lib "%OUTDIR%\LIB Release" 1>nul move !build_dir!\bin\*.exe "%OUTDIR%\LIB Release" 1>nul ) else if "%2" == "shared" ( if not exist "%OUTDIR%\DLL Release" ( mkdir "%OUTDIR%\DLL Release" 1>nul ) move !build_dir!\lib\*.lib "%OUTDIR%\DLL Release" 1>nul move !build_dir!\bin\*.dll "%OUTDIR%\DLL Release" 1>nul move !build_dir!\bin\*.exe "%OUTDIR%\DLL Release" 1>nul ) else ( exit /B 1 ) ) else ( |
︙ | ︙ | |||
601 602 603 604 605 606 607 608 609 610 611 612 613 614 | echo vc8 - Use Visual Studio 2005 echo vc9 - Use Visual Studio 2008 echo vc10 - Use Visual Studio 2010 echo vc11 - Use Visual Studio 2012 echo vc12 - Use Visual Studio 2013 echo vc14 - Use Visual Studio 2015 echo vc14.1 - Use Visual Studio 2017 echo. echo Platform: echo. echo x86 - Perform a 32-bit build echo x64 - Perform a 64-bit build echo. echo Configuration: | > | 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 | echo vc8 - Use Visual Studio 2005 echo vc9 - Use Visual Studio 2008 echo vc10 - Use Visual Studio 2010 echo vc11 - Use Visual Studio 2012 echo vc12 - Use Visual Studio 2013 echo vc14 - Use Visual Studio 2015 echo vc14.1 - Use Visual Studio 2017 echo vc14.2 - Use Visual Studio 2019 echo. echo Platform: echo. echo x86 - Perform a 32-bit build echo x64 - Perform a 64-bit build echo. echo Configuration: |
︙ | ︙ |
Changes to jni/curl/scripts/Makefile.in.
︙ | ︙ | |||
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
368 369 370 371 372 373 374 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ | | | | 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign scripts/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ |
︙ | ︙ |
Changes to jni/curl/src/Makefile.am.
︙ | ︙ | |||
119 120 121 122 123 124 125 | $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE); \ echo '#else' >> $(HUGE); \ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c >> $(HUGE); \ echo '#endif /* HAVE_LIBZ */' >> $(HUGE) ) else # HAVE_LIBZ # This generates the tool_hugehelp.c file uncompressed only $(HUGE): $(MANPAGE) $(MKHELP) | | | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE); \ echo '#else' >> $(HUGE); \ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c >> $(HUGE); \ echo '#endif /* HAVE_LIBZ */' >> $(HUGE) ) else # HAVE_LIBZ # This generates the tool_hugehelp.c file uncompressed only $(HUGE): $(MANPAGE) $(MKHELP) $(HUGECMD)(echo '#include "tool_setup.h"' > $(HUGE); \ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE) ) endif else # USE_MANUAL # built-in manual has been disabled, make a blank file $(HUGE): $(HUGECMD)(echo "/* built-in manual is disabled, blank function */" > $(HUGE); \ |
︙ | ︙ |
Changes to jni/curl/src/Makefile.in.
︙ | ︙ | |||
135 136 137 138 139 140 141 | tool_bname.c tool_cb_dbg.c tool_cb_hdr.c tool_cb_prg.c \ tool_cb_rea.c tool_cb_see.c tool_cb_wrt.c tool_cfgable.c \ tool_convert.c tool_dirhie.c tool_doswin.c tool_easysrc.c \ tool_filetime.c tool_formparse.c tool_getparam.c \ tool_getpass.c tool_help.c tool_helpers.c tool_homedir.c \ tool_hugehelp.c tool_libinfo.c tool_main.c tool_metalink.c \ tool_msgs.c tool_operate.c tool_operhlp.c tool_panykey.c \ | | | | | | | | | > | 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | tool_bname.c tool_cb_dbg.c tool_cb_hdr.c tool_cb_prg.c \ tool_cb_rea.c tool_cb_see.c tool_cb_wrt.c tool_cfgable.c \ tool_convert.c tool_dirhie.c tool_doswin.c tool_easysrc.c \ tool_filetime.c tool_formparse.c tool_getparam.c \ tool_getpass.c tool_help.c tool_helpers.c tool_homedir.c \ tool_hugehelp.c tool_libinfo.c tool_main.c tool_metalink.c \ tool_msgs.c tool_operate.c tool_operhlp.c tool_panykey.c \ tool_paramhlp.c tool_parsecfg.c tool_progress.c tool_strdup.c \ tool_setopt.c tool_sleep.c tool_urlglob.c tool_util.c \ tool_vms.c tool_writeout.c tool_xattr.c ../lib/strtoofft.c \ ../lib/nonblock.c ../lib/warnless.c ../lib/curl_ctype.c \ slist_wc.h tool_binmode.h tool_bname.h tool_cb_dbg.h \ tool_cb_hdr.h tool_cb_prg.h tool_cb_rea.h tool_cb_see.h \ tool_cb_wrt.h tool_cfgable.h tool_convert.h tool_dirhie.h \ tool_doswin.h tool_easysrc.h tool_filetime.h tool_formparse.h \ tool_getparam.h tool_getpass.h tool_help.h tool_helpers.h \ tool_homedir.h tool_hugehelp.h tool_libinfo.h tool_main.h \ tool_metalink.h tool_msgs.h tool_operate.h tool_operhlp.h \ tool_panykey.h tool_paramhlp.h tool_parsecfg.h tool_progress.h \ tool_sdecls.h tool_setopt.h tool_setup.h tool_sleep.h \ tool_strdup.h tool_urlglob.h tool_util.h tool_version.h \ tool_vms.h tool_writeout.h tool_xattr.h am__objects_1 = libcurltool_la-slist_wc.lo \ libcurltool_la-tool_binmode.lo libcurltool_la-tool_bname.lo \ libcurltool_la-tool_cb_dbg.lo libcurltool_la-tool_cb_hdr.lo \ libcurltool_la-tool_cb_prg.lo libcurltool_la-tool_cb_rea.lo \ libcurltool_la-tool_cb_see.lo libcurltool_la-tool_cb_wrt.lo \ libcurltool_la-tool_cfgable.lo libcurltool_la-tool_convert.lo \ libcurltool_la-tool_dirhie.lo libcurltool_la-tool_doswin.lo \ libcurltool_la-tool_easysrc.lo libcurltool_la-tool_filetime.lo \ libcurltool_la-tool_formparse.lo \ libcurltool_la-tool_getparam.lo libcurltool_la-tool_getpass.lo \ libcurltool_la-tool_help.lo libcurltool_la-tool_helpers.lo \ libcurltool_la-tool_homedir.lo libcurltool_la-tool_hugehelp.lo \ libcurltool_la-tool_libinfo.lo libcurltool_la-tool_main.lo \ libcurltool_la-tool_metalink.lo libcurltool_la-tool_msgs.lo \ libcurltool_la-tool_operate.lo libcurltool_la-tool_operhlp.lo \ libcurltool_la-tool_panykey.lo libcurltool_la-tool_paramhlp.lo \ libcurltool_la-tool_parsecfg.lo \ libcurltool_la-tool_progress.lo libcurltool_la-tool_strdup.lo \ libcurltool_la-tool_setopt.lo libcurltool_la-tool_sleep.lo \ libcurltool_la-tool_urlglob.lo libcurltool_la-tool_util.lo \ libcurltool_la-tool_vms.lo libcurltool_la-tool_writeout.lo \ libcurltool_la-tool_xattr.lo am__dirstamp = $(am__leading_dot)dirstamp am__objects_2 = ../lib/libcurltool_la-strtoofft.lo \ ../lib/libcurltool_la-nonblock.lo \ |
︙ | ︙ | |||
205 206 207 208 209 210 211 | curl-tool_getparam.$(OBJEXT) curl-tool_getpass.$(OBJEXT) \ curl-tool_help.$(OBJEXT) curl-tool_helpers.$(OBJEXT) \ curl-tool_homedir.$(OBJEXT) curl-tool_hugehelp.$(OBJEXT) \ curl-tool_libinfo.$(OBJEXT) curl-tool_main.$(OBJEXT) \ curl-tool_metalink.$(OBJEXT) curl-tool_msgs.$(OBJEXT) \ curl-tool_operate.$(OBJEXT) curl-tool_operhlp.$(OBJEXT) \ curl-tool_panykey.$(OBJEXT) curl-tool_paramhlp.$(OBJEXT) \ | | | | | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | curl-tool_getparam.$(OBJEXT) curl-tool_getpass.$(OBJEXT) \ curl-tool_help.$(OBJEXT) curl-tool_helpers.$(OBJEXT) \ curl-tool_homedir.$(OBJEXT) curl-tool_hugehelp.$(OBJEXT) \ curl-tool_libinfo.$(OBJEXT) curl-tool_main.$(OBJEXT) \ curl-tool_metalink.$(OBJEXT) curl-tool_msgs.$(OBJEXT) \ curl-tool_operate.$(OBJEXT) curl-tool_operhlp.$(OBJEXT) \ curl-tool_panykey.$(OBJEXT) curl-tool_paramhlp.$(OBJEXT) \ curl-tool_parsecfg.$(OBJEXT) curl-tool_progress.$(OBJEXT) \ curl-tool_strdup.$(OBJEXT) curl-tool_setopt.$(OBJEXT) \ curl-tool_sleep.$(OBJEXT) curl-tool_urlglob.$(OBJEXT) \ curl-tool_util.$(OBJEXT) curl-tool_vms.$(OBJEXT) \ curl-tool_writeout.$(OBJEXT) curl-tool_xattr.$(OBJEXT) am__objects_7 = ../lib/curl-strtoofft.$(OBJEXT) \ ../lib/curl-nonblock.$(OBJEXT) ../lib/curl-warnless.$(OBJEXT) \ ../lib/curl-curl_ctype.$(OBJEXT) am__objects_8 = $(am__objects_6) $(am__objects_7) $(am__objects_3) am_curl_OBJECTS = $(am__objects_8) curl_OBJECTS = $(am_curl_OBJECTS) @USE_EXPLICIT_LIB_DEPS_FALSE@curl_DEPENDENCIES = \ |
︙ | ︙ | |||
272 273 274 275 276 277 278 279 280 281 282 283 284 285 | ./$(DEPDIR)/curl-tool_libinfo.Po ./$(DEPDIR)/curl-tool_main.Po \ ./$(DEPDIR)/curl-tool_metalink.Po \ ./$(DEPDIR)/curl-tool_msgs.Po ./$(DEPDIR)/curl-tool_operate.Po \ ./$(DEPDIR)/curl-tool_operhlp.Po \ ./$(DEPDIR)/curl-tool_panykey.Po \ ./$(DEPDIR)/curl-tool_paramhlp.Po \ ./$(DEPDIR)/curl-tool_parsecfg.Po \ ./$(DEPDIR)/curl-tool_setopt.Po ./$(DEPDIR)/curl-tool_sleep.Po \ ./$(DEPDIR)/curl-tool_strdup.Po \ ./$(DEPDIR)/curl-tool_urlglob.Po ./$(DEPDIR)/curl-tool_util.Po \ ./$(DEPDIR)/curl-tool_vms.Po ./$(DEPDIR)/curl-tool_writeout.Po \ ./$(DEPDIR)/curl-tool_xattr.Po \ ./$(DEPDIR)/libcurltool_la-slist_wc.Plo \ ./$(DEPDIR)/libcurltool_la-tool_binmode.Plo \ | > | 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 | ./$(DEPDIR)/curl-tool_libinfo.Po ./$(DEPDIR)/curl-tool_main.Po \ ./$(DEPDIR)/curl-tool_metalink.Po \ ./$(DEPDIR)/curl-tool_msgs.Po ./$(DEPDIR)/curl-tool_operate.Po \ ./$(DEPDIR)/curl-tool_operhlp.Po \ ./$(DEPDIR)/curl-tool_panykey.Po \ ./$(DEPDIR)/curl-tool_paramhlp.Po \ ./$(DEPDIR)/curl-tool_parsecfg.Po \ ./$(DEPDIR)/curl-tool_progress.Po \ ./$(DEPDIR)/curl-tool_setopt.Po ./$(DEPDIR)/curl-tool_sleep.Po \ ./$(DEPDIR)/curl-tool_strdup.Po \ ./$(DEPDIR)/curl-tool_urlglob.Po ./$(DEPDIR)/curl-tool_util.Po \ ./$(DEPDIR)/curl-tool_vms.Po ./$(DEPDIR)/curl-tool_writeout.Po \ ./$(DEPDIR)/curl-tool_xattr.Po \ ./$(DEPDIR)/libcurltool_la-slist_wc.Plo \ ./$(DEPDIR)/libcurltool_la-tool_binmode.Plo \ |
︙ | ︙ | |||
308 309 310 311 312 313 314 315 316 317 318 319 320 321 | ./$(DEPDIR)/libcurltool_la-tool_metalink.Plo \ ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo \ ./$(DEPDIR)/libcurltool_la-tool_operate.Plo \ ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo \ ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo \ ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo \ ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo \ ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo \ ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo \ ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo \ ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo \ ./$(DEPDIR)/libcurltool_la-tool_util.Plo \ ./$(DEPDIR)/libcurltool_la-tool_vms.Plo \ ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo \ | > | 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | ./$(DEPDIR)/libcurltool_la-tool_metalink.Plo \ ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo \ ./$(DEPDIR)/libcurltool_la-tool_operate.Plo \ ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo \ ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo \ ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo \ ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo \ ./$(DEPDIR)/libcurltool_la-tool_progress.Plo \ ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo \ ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo \ ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo \ ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo \ ./$(DEPDIR)/libcurltool_la-tool_util.Plo \ ./$(DEPDIR)/libcurltool_la-tool_vms.Plo \ ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo \ |
︙ | ︙ | |||
545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
697 698 699 700 701 702 703 704 705 706 707 708 709 710 | tool_metalink.c \ tool_msgs.c \ tool_operate.c \ tool_operhlp.c \ tool_panykey.c \ tool_paramhlp.c \ tool_parsecfg.c \ tool_strdup.c \ tool_setopt.c \ tool_sleep.c \ tool_urlglob.c \ tool_util.c \ tool_vms.c \ tool_writeout.c \ | > | 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 | tool_metalink.c \ tool_msgs.c \ tool_operate.c \ tool_operhlp.c \ tool_panykey.c \ tool_paramhlp.c \ tool_parsecfg.c \ tool_progress.c \ tool_strdup.c \ tool_setopt.c \ tool_sleep.c \ tool_urlglob.c \ tool_util.c \ tool_vms.c \ tool_writeout.c \ |
︙ | ︙ | |||
738 739 740 741 742 743 744 745 746 747 748 749 750 751 | tool_metalink.h \ tool_msgs.h \ tool_operate.h \ tool_operhlp.h \ tool_panykey.h \ tool_paramhlp.h \ tool_parsecfg.h \ tool_sdecls.h \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ | > | 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 | tool_metalink.h \ tool_msgs.h \ tool_operate.h \ tool_operhlp.h \ tool_panykey.h \ tool_paramhlp.h \ tool_parsecfg.h \ tool_progress.h \ tool_sdecls.h \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ |
︙ | ︙ | |||
964 965 966 967 968 969 970 971 972 973 974 975 976 977 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_metalink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_msgs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_operate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_operhlp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_panykey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_paramhlp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_parsecfg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_setopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_sleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_strdup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_urlglob.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_vms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_writeout.Po@am__quote@ # am--include-marker | > | 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_metalink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_msgs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_operate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_operhlp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_panykey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_paramhlp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_parsecfg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_progress.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_setopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_sleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_strdup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_urlglob.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_vms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_writeout.Po@am__quote@ # am--include-marker |
︙ | ︙ | |||
1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_metalink.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_msgs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_operate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_panykey.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_setopt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_sleep.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_strdup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_util.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_vms.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_writeout.Plo@am__quote@ # am--include-marker | > | 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_metalink.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_msgs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_operate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_panykey.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_progress.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_setopt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_sleep.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_strdup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_util.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_vms.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_writeout.Plo@am__quote@ # am--include-marker |
︙ | ︙ | |||
1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 | libcurltool_la-tool_parsecfg.lo: tool_parsecfg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_parsecfg.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_parsecfg.Tpo -c -o libcurltool_la-tool_parsecfg.lo `test -f 'tool_parsecfg.c' || echo '$(srcdir)/'`tool_parsecfg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_parsecfg.Tpo $(DEPDIR)/libcurltool_la-tool_parsecfg.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_parsecfg.c' object='libcurltool_la-tool_parsecfg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_parsecfg.lo `test -f 'tool_parsecfg.c' || echo '$(srcdir)/'`tool_parsecfg.c libcurltool_la-tool_strdup.lo: tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_strdup.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_strdup.Tpo -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_strdup.Tpo $(DEPDIR)/libcurltool_la-tool_strdup.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_strdup.c' object='libcurltool_la-tool_strdup.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c | > > > > > > > | 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 | libcurltool_la-tool_parsecfg.lo: tool_parsecfg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_parsecfg.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_parsecfg.Tpo -c -o libcurltool_la-tool_parsecfg.lo `test -f 'tool_parsecfg.c' || echo '$(srcdir)/'`tool_parsecfg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_parsecfg.Tpo $(DEPDIR)/libcurltool_la-tool_parsecfg.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_parsecfg.c' object='libcurltool_la-tool_parsecfg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_parsecfg.lo `test -f 'tool_parsecfg.c' || echo '$(srcdir)/'`tool_parsecfg.c libcurltool_la-tool_progress.lo: tool_progress.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_progress.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_progress.Tpo -c -o libcurltool_la-tool_progress.lo `test -f 'tool_progress.c' || echo '$(srcdir)/'`tool_progress.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_progress.Tpo $(DEPDIR)/libcurltool_la-tool_progress.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_progress.c' object='libcurltool_la-tool_progress.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_progress.lo `test -f 'tool_progress.c' || echo '$(srcdir)/'`tool_progress.c libcurltool_la-tool_strdup.lo: tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_strdup.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_strdup.Tpo -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_strdup.Tpo $(DEPDIR)/libcurltool_la-tool_strdup.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_strdup.c' object='libcurltool_la-tool_strdup.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c |
︙ | ︙ | |||
1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 | curl-tool_parsecfg.obj: tool_parsecfg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-tool_parsecfg.obj -MD -MP -MF $(DEPDIR)/curl-tool_parsecfg.Tpo -c -o curl-tool_parsecfg.obj `if test -f 'tool_parsecfg.c'; then $(CYGPATH_W) 'tool_parsecfg.c'; else $(CYGPATH_W) '$(srcdir)/tool_parsecfg.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/curl-tool_parsecfg.Tpo $(DEPDIR)/curl-tool_parsecfg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_parsecfg.c' object='curl-tool_parsecfg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-tool_parsecfg.obj `if test -f 'tool_parsecfg.c'; then $(CYGPATH_W) 'tool_parsecfg.c'; else $(CYGPATH_W) '$(srcdir)/tool_parsecfg.c'; fi` curl-tool_strdup.o: tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-tool_strdup.o -MD -MP -MF $(DEPDIR)/curl-tool_strdup.Tpo -c -o curl-tool_strdup.o `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/curl-tool_strdup.Tpo $(DEPDIR)/curl-tool_strdup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_strdup.c' object='curl-tool_strdup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-tool_strdup.o `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c | > > > > > > > > > > > > > > | 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 | curl-tool_parsecfg.obj: tool_parsecfg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-tool_parsecfg.obj -MD -MP -MF $(DEPDIR)/curl-tool_parsecfg.Tpo -c -o curl-tool_parsecfg.obj `if test -f 'tool_parsecfg.c'; then $(CYGPATH_W) 'tool_parsecfg.c'; else $(CYGPATH_W) '$(srcdir)/tool_parsecfg.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/curl-tool_parsecfg.Tpo $(DEPDIR)/curl-tool_parsecfg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_parsecfg.c' object='curl-tool_parsecfg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-tool_parsecfg.obj `if test -f 'tool_parsecfg.c'; then $(CYGPATH_W) 'tool_parsecfg.c'; else $(CYGPATH_W) '$(srcdir)/tool_parsecfg.c'; fi` curl-tool_progress.o: tool_progress.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-tool_progress.o -MD -MP -MF $(DEPDIR)/curl-tool_progress.Tpo -c -o curl-tool_progress.o `test -f 'tool_progress.c' || echo '$(srcdir)/'`tool_progress.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/curl-tool_progress.Tpo $(DEPDIR)/curl-tool_progress.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_progress.c' object='curl-tool_progress.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-tool_progress.o `test -f 'tool_progress.c' || echo '$(srcdir)/'`tool_progress.c curl-tool_progress.obj: tool_progress.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-tool_progress.obj -MD -MP -MF $(DEPDIR)/curl-tool_progress.Tpo -c -o curl-tool_progress.obj `if test -f 'tool_progress.c'; then $(CYGPATH_W) 'tool_progress.c'; else $(CYGPATH_W) '$(srcdir)/tool_progress.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/curl-tool_progress.Tpo $(DEPDIR)/curl-tool_progress.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_progress.c' object='curl-tool_progress.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-tool_progress.obj `if test -f 'tool_progress.c'; then $(CYGPATH_W) 'tool_progress.c'; else $(CYGPATH_W) '$(srcdir)/tool_progress.c'; fi` curl-tool_strdup.o: tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-tool_strdup.o -MD -MP -MF $(DEPDIR)/curl-tool_strdup.Tpo -c -o curl-tool_strdup.o `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/curl-tool_strdup.Tpo $(DEPDIR)/curl-tool_strdup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_strdup.c' object='curl-tool_strdup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-tool_strdup.o `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c |
︙ | ︙ | |||
2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 | -rm -f ./$(DEPDIR)/curl-tool_metalink.Po -rm -f ./$(DEPDIR)/curl-tool_msgs.Po -rm -f ./$(DEPDIR)/curl-tool_operate.Po -rm -f ./$(DEPDIR)/curl-tool_operhlp.Po -rm -f ./$(DEPDIR)/curl-tool_panykey.Po -rm -f ./$(DEPDIR)/curl-tool_paramhlp.Po -rm -f ./$(DEPDIR)/curl-tool_parsecfg.Po -rm -f ./$(DEPDIR)/curl-tool_setopt.Po -rm -f ./$(DEPDIR)/curl-tool_sleep.Po -rm -f ./$(DEPDIR)/curl-tool_strdup.Po -rm -f ./$(DEPDIR)/curl-tool_urlglob.Po -rm -f ./$(DEPDIR)/curl-tool_util.Po -rm -f ./$(DEPDIR)/curl-tool_vms.Po -rm -f ./$(DEPDIR)/curl-tool_writeout.Po | > | 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 | -rm -f ./$(DEPDIR)/curl-tool_metalink.Po -rm -f ./$(DEPDIR)/curl-tool_msgs.Po -rm -f ./$(DEPDIR)/curl-tool_operate.Po -rm -f ./$(DEPDIR)/curl-tool_operhlp.Po -rm -f ./$(DEPDIR)/curl-tool_panykey.Po -rm -f ./$(DEPDIR)/curl-tool_paramhlp.Po -rm -f ./$(DEPDIR)/curl-tool_parsecfg.Po -rm -f ./$(DEPDIR)/curl-tool_progress.Po -rm -f ./$(DEPDIR)/curl-tool_setopt.Po -rm -f ./$(DEPDIR)/curl-tool_sleep.Po -rm -f ./$(DEPDIR)/curl-tool_strdup.Po -rm -f ./$(DEPDIR)/curl-tool_urlglob.Po -rm -f ./$(DEPDIR)/curl-tool_util.Po -rm -f ./$(DEPDIR)/curl-tool_vms.Po -rm -f ./$(DEPDIR)/curl-tool_writeout.Po |
︙ | ︙ | |||
2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 | -rm -f ./$(DEPDIR)/libcurltool_la-tool_metalink.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operate.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_util.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_vms.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo | > | 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 | -rm -f ./$(DEPDIR)/libcurltool_la-tool_metalink.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operate.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_progress.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_util.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_vms.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo |
︙ | ︙ | |||
2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 | -rm -f ./$(DEPDIR)/curl-tool_metalink.Po -rm -f ./$(DEPDIR)/curl-tool_msgs.Po -rm -f ./$(DEPDIR)/curl-tool_operate.Po -rm -f ./$(DEPDIR)/curl-tool_operhlp.Po -rm -f ./$(DEPDIR)/curl-tool_panykey.Po -rm -f ./$(DEPDIR)/curl-tool_paramhlp.Po -rm -f ./$(DEPDIR)/curl-tool_parsecfg.Po -rm -f ./$(DEPDIR)/curl-tool_setopt.Po -rm -f ./$(DEPDIR)/curl-tool_sleep.Po -rm -f ./$(DEPDIR)/curl-tool_strdup.Po -rm -f ./$(DEPDIR)/curl-tool_urlglob.Po -rm -f ./$(DEPDIR)/curl-tool_util.Po -rm -f ./$(DEPDIR)/curl-tool_vms.Po -rm -f ./$(DEPDIR)/curl-tool_writeout.Po | > | 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 | -rm -f ./$(DEPDIR)/curl-tool_metalink.Po -rm -f ./$(DEPDIR)/curl-tool_msgs.Po -rm -f ./$(DEPDIR)/curl-tool_operate.Po -rm -f ./$(DEPDIR)/curl-tool_operhlp.Po -rm -f ./$(DEPDIR)/curl-tool_panykey.Po -rm -f ./$(DEPDIR)/curl-tool_paramhlp.Po -rm -f ./$(DEPDIR)/curl-tool_parsecfg.Po -rm -f ./$(DEPDIR)/curl-tool_progress.Po -rm -f ./$(DEPDIR)/curl-tool_setopt.Po -rm -f ./$(DEPDIR)/curl-tool_sleep.Po -rm -f ./$(DEPDIR)/curl-tool_strdup.Po -rm -f ./$(DEPDIR)/curl-tool_urlglob.Po -rm -f ./$(DEPDIR)/curl-tool_util.Po -rm -f ./$(DEPDIR)/curl-tool_vms.Po -rm -f ./$(DEPDIR)/curl-tool_writeout.Po |
︙ | ︙ | |||
2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 | -rm -f ./$(DEPDIR)/libcurltool_la-tool_metalink.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operate.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_util.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_vms.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo | > | 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 | -rm -f ./$(DEPDIR)/libcurltool_la-tool_metalink.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operate.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_progress.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_util.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_vms.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo |
︙ | ︙ | |||
2432 2433 2434 2435 2436 2437 2438 | @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#ifndef HAVE_LIBZ' >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#else' >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#endif /* HAVE_LIBZ */' >> $(HUGE) ) # This generates the tool_hugehelp.c file uncompressed only @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@$(HUGE): $(MANPAGE) $(MKHELP) | | | 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 | @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#ifndef HAVE_LIBZ' >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#else' >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#endif /* HAVE_LIBZ */' >> $(HUGE) ) # This generates the tool_hugehelp.c file uncompressed only @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@$(HUGE): $(MANPAGE) $(MKHELP) @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ $(HUGECMD)(echo '#include "tool_setup.h"' > $(HUGE); \ @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE) ) # built-in manual has been disabled, make a blank file @USE_MANUAL_FALSE@$(HUGE): @USE_MANUAL_FALSE@ $(HUGECMD)(echo "/* built-in manual is disabled, blank function */" > $(HUGE); \ @USE_MANUAL_FALSE@ echo '#include "tool_hugehelp.h"' >> $(HUGE); \ @USE_MANUAL_FALSE@ echo "void hugehelp(void) {}" >>$(HUGE) ) |
︙ | ︙ |
Changes to jni/curl/src/Makefile.inc.
︙ | ︙ | |||
50 51 52 53 54 55 56 57 58 59 60 61 62 63 | tool_metalink.c \ tool_msgs.c \ tool_operate.c \ tool_operhlp.c \ tool_panykey.c \ tool_paramhlp.c \ tool_parsecfg.c \ tool_strdup.c \ tool_setopt.c \ tool_sleep.c \ tool_urlglob.c \ tool_util.c \ tool_vms.c \ tool_writeout.c \ | > | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | tool_metalink.c \ tool_msgs.c \ tool_operate.c \ tool_operhlp.c \ tool_panykey.c \ tool_paramhlp.c \ tool_parsecfg.c \ tool_progress.c \ tool_strdup.c \ tool_setopt.c \ tool_sleep.c \ tool_urlglob.c \ tool_util.c \ tool_vms.c \ tool_writeout.c \ |
︙ | ︙ | |||
91 92 93 94 95 96 97 98 99 100 101 102 103 104 | tool_metalink.h \ tool_msgs.h \ tool_operate.h \ tool_operhlp.h \ tool_panykey.h \ tool_paramhlp.h \ tool_parsecfg.h \ tool_sdecls.h \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ | > | 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | tool_metalink.h \ tool_msgs.h \ tool_operate.h \ tool_operhlp.h \ tool_panykey.h \ tool_paramhlp.h \ tool_parsecfg.h \ tool_progress.h \ tool_sdecls.h \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ |
︙ | ︙ |
Changes to jni/curl/src/tool_cb_hdr.c.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include "curlx.h" #include "tool_cfgable.h" #include "tool_doswin.h" #include "tool_msgs.h" #include "tool_cb_hdr.h" #include "tool_cb_wrt.h" #include "memdebug.h" /* keep this as LAST include */ static char *parse_filename(const char *ptr, size_t len); #ifdef WIN32 #define BOLD | > | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include "curlx.h" #include "tool_cfgable.h" #include "tool_doswin.h" #include "tool_msgs.h" #include "tool_cb_hdr.h" #include "tool_cb_wrt.h" #include "tool_operate.h" #include "memdebug.h" /* keep this as LAST include */ static char *parse_filename(const char *ptr, size_t len); #ifdef WIN32 #define BOLD |
︙ | ︙ | |||
50 51 52 53 54 55 56 | /* ** callback for CURLOPT_HEADERFUNCTION */ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata) { | > | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | /* ** callback for CURLOPT_HEADERFUNCTION */ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata) { struct per_transfer *per = userdata; struct HdrCbData *hdrcbdata = &per->hdrcbdata; struct OutStruct *outs = &per->outs; struct OutStruct *heads = &per->heads; const char *str = ptr; const size_t cb = size * nmemb; const char *end = (char *)ptr + cb; long protocol = 0; /* * Once that libcurl has called back tool_header_cb() the returned value |
︙ | ︙ | |||
96 97 98 99 100 101 102 | /* * This callback sets the filename where output shall be written when * curl options --remote-name (-O) and --remote-header-name (-J) have * been simultaneously given and additionally server returns an HTTP * Content-Disposition header specifying a filename property. */ | | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | /* * This callback sets the filename where output shall be written when * curl options --remote-name (-O) and --remote-header-name (-J) have * been simultaneously given and additionally server returns an HTTP * Content-Disposition header specifying a filename property. */ curl_easy_getinfo(per->curl, CURLINFO_PROTOCOL, &protocol); if(hdrcbdata->honor_cd_filename && (cb > 20) && checkprefix("Content-disposition:", str) && (protocol & (CURLPROTO_HTTPS|CURLPROTO_HTTP))) { const char *p = str + 20; /* look for the 'filename=' parameter (encoded filenames (*=) are not supported) */ |
︙ | ︙ |
Changes to jni/curl/src/tool_cb_wrt.c.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #define ENABLE_CURLX_PRINTF /* use our own printf() functions */ #include "curlx.h" #include "tool_cfgable.h" #include "tool_msgs.h" #include "tool_cb_wrt.h" #include "memdebug.h" /* keep this as LAST include */ /* create a local file for writing, return TRUE on success */ bool tool_create_output_file(struct OutStruct *outs) { struct GlobalConfig *global = outs->config->global; | > | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #define ENABLE_CURLX_PRINTF /* use our own printf() functions */ #include "curlx.h" #include "tool_cfgable.h" #include "tool_msgs.h" #include "tool_cb_wrt.h" #include "tool_operate.h" #include "memdebug.h" /* keep this as LAST include */ /* create a local file for writing, return TRUE on success */ bool tool_create_output_file(struct OutStruct *outs) { struct GlobalConfig *global = outs->config->global; |
︙ | ︙ | |||
71 72 73 74 75 76 77 | /* ** callback for CURLOPT_WRITEFUNCTION */ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) { size_t rc; | > | | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | /* ** callback for CURLOPT_WRITEFUNCTION */ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) { size_t rc; struct per_transfer *per = userdata; struct OutStruct *outs = &per->outs; struct OperationConfig *config = outs->config; size_t bytes = sz * nmemb; bool is_tty = config->global->isatty; #ifdef WIN32 CONSOLE_SCREEN_BUFFER_INFO console_info; intptr_t fhnd; #endif |
︙ | ︙ | |||
198 199 200 201 202 203 204 | if(bytes == rc) /* we added this amount of data to the output */ outs->bytes += bytes; if(config->readbusy) { config->readbusy = FALSE; | | | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | if(bytes == rc) /* we added this amount of data to the output */ outs->bytes += bytes; if(config->readbusy) { config->readbusy = FALSE; curl_easy_pause(per->curl, CURLPAUSE_CONT); } if(config->nobuffer) { /* output buffering disabled */ int res = fflush(outs->stream); if(res) return failure; } return rc; } |
Changes to jni/curl/src/tool_cfgable.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | config->proto_redir = CURLPROTO_ALL & /* All except FILE, SCP and SMB */ ~(CURLPROTO_FILE | CURLPROTO_SCP | CURLPROTO_SMB | CURLPROTO_SMBS); config->proto_redir_present = FALSE; config->proto_default = NULL; config->tcp_nodelay = TRUE; /* enabled by default */ config->happy_eyeballs_timeout_ms = CURL_HET_DEFAULT; | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | config->proto_redir = CURLPROTO_ALL & /* All except FILE, SCP and SMB */ ~(CURLPROTO_FILE | CURLPROTO_SCP | CURLPROTO_SMB | CURLPROTO_SMBS); config->proto_redir_present = FALSE; config->proto_default = NULL; config->tcp_nodelay = TRUE; /* enabled by default */ config->happy_eyeballs_timeout_ms = CURL_HET_DEFAULT; config->http09_allowed = FALSE; } static void free_config_fields(struct OperationConfig *config) { struct getout *urlnode; Curl_safefree(config->random_file); |
︙ | ︙ | |||
129 130 131 132 133 134 135 136 137 138 139 140 141 142 | Curl_safefree(config->hostpubmd5); Curl_safefree(config->engine); Curl_safefree(config->request_target); Curl_safefree(config->customrequest); Curl_safefree(config->krblevel); Curl_safefree(config->oauth_bearer); Curl_safefree(config->unix_socket_path); Curl_safefree(config->writeout); Curl_safefree(config->proto_default); curl_slist_free_all(config->quote); curl_slist_free_all(config->postquote); | > | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | Curl_safefree(config->hostpubmd5); Curl_safefree(config->engine); Curl_safefree(config->request_target); Curl_safefree(config->customrequest); Curl_safefree(config->krblevel); Curl_safefree(config->oauth_bearer); Curl_safefree(config->sasl_authzid); Curl_safefree(config->unix_socket_path); Curl_safefree(config->writeout); Curl_safefree(config->proto_default); curl_slist_free_all(config->quote); curl_slist_free_all(config->postquote); |
︙ | ︙ |
Changes to jni/curl/src/tool_cfgable.h.
︙ | ︙ | |||
34 35 36 37 38 39 40 | ERR_BINARY_TERMINAL = 1, /* binary to terminal detected */ ERR_LAST } curl_error; struct GlobalConfig; struct OperationConfig { | < | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | ERR_BINARY_TERMINAL = 1, /* binary to terminal detected */ ERR_LAST } curl_error; struct GlobalConfig; struct OperationConfig { bool remote_time; char *random_file; char *egd_file; char *useragent; char *cookie; /* single line with specified cookies */ char *cookiejar; /* write to this file */ char *cookiefile; /* read from this file */ |
︙ | ︙ | |||
93 94 95 96 97 98 99 100 101 102 103 104 105 106 | char *proxyuserpwd; char *proxy; int proxyver; /* set to CURLPROXY_HTTP* define */ char *noproxy; char *mail_from; struct curl_slist *mail_rcpt; char *mail_auth; bool sasl_ir; /* Enable/disable SASL initial response */ bool proxytunnel; bool ftp_append; /* APPE on ftp */ bool use_ascii; /* select ascii or text transfer */ bool autoreferer; /* automatically set referer */ bool failonerror; /* fail on (HTTP) errors */ bool show_headers; /* show headers to data output */ | > | 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | char *proxyuserpwd; char *proxy; int proxyver; /* set to CURLPROXY_HTTP* define */ char *noproxy; char *mail_from; struct curl_slist *mail_rcpt; char *mail_auth; char *sasl_authzid; /* Authorisation identity (identity to use) */ bool sasl_ir; /* Enable/disable SASL initial response */ bool proxytunnel; bool ftp_append; /* APPE on ftp */ bool use_ascii; /* select ascii or text transfer */ bool autoreferer; /* automatically set referer */ bool failonerror; /* fail on (HTTP) errors */ bool show_headers; /* show headers to data output */ |
︙ | ︙ | |||
238 239 240 241 242 243 244 | bool ssl_no_revoke; /* disable SSL certificate revocation checks */ /*bool proxy_ssl_no_revoke; */ bool use_metalink; /* process given URLs as metalink XML file */ metalinkfile *metalinkfile_list; /* point to the first node */ metalinkfile *metalinkfile_last; /* point to the last/current node */ | < < < | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | bool ssl_no_revoke; /* disable SSL certificate revocation checks */ /*bool proxy_ssl_no_revoke; */ bool use_metalink; /* process given URLs as metalink XML file */ metalinkfile *metalinkfile_list; /* point to the first node */ metalinkfile *metalinkfile_last; /* point to the last/current node */ char *oauth_bearer; /* OAuth 2.0 bearer token */ bool nonpn; /* enable/disable TLS NPN extension */ bool noalpn; /* enable/disable TLS ALPN extension */ char *unix_socket_path; /* path to Unix domain socket */ bool abstract_unix_socket; /* path to an abstract Unix domain socket */ bool falsestart; bool path_as_is; |
︙ | ︙ | |||
264 265 266 267 268 269 270 | bool disallow_username_in_url; /* disallow usernames in URLs */ struct GlobalConfig *global; struct OperationConfig *prev; struct OperationConfig *next; /* Always last in the struct */ }; struct GlobalConfig { | < > > > > > | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 | bool disallow_username_in_url; /* disallow usernames in URLs */ struct GlobalConfig *global; struct OperationConfig *prev; struct OperationConfig *next; /* Always last in the struct */ }; struct GlobalConfig { int showerror; /* -1 == unset, default => show errors 0 => -s is used to NOT show errors 1 => -S has been used to show errors */ bool mute; /* don't show messages, --silent given */ bool noprogress; /* don't show progress bar --silent given */ bool isatty; /* Updated internally if output is a tty */ FILE *errors; /* Error stream, defaults to stderr */ bool errors_fopened; /* Whether error stream isn't stderr */ char *trace_dump; /* file to dump the network trace to */ FILE *trace_stream; bool trace_fopened; trace tracetype; bool tracetime; /* include timestamp? */ int progressmode; /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */ char *libcurl; /* Output libcurl code to this file name */ bool fail_early; /* exit on first transfer error */ bool styled_output; /* enable fancy output style detection */ #ifdef CURLDEBUG bool test_event_based; #endif bool parallel; long parallel_max; struct OperationConfig *first; struct OperationConfig *current; struct OperationConfig *last; /* Always last in the struct */ }; void config_init(struct OperationConfig *config); void config_free(struct OperationConfig *config); #endif /* HEADER_CURL_TOOL_CFGABLE_H */ |
Changes to jni/curl/src/tool_getparam.c.
︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include "tool_getparam.h" #include "tool_helpers.h" #include "tool_libinfo.h" #include "tool_metalink.h" #include "tool_msgs.h" #include "tool_paramhlp.h" #include "tool_parsecfg.h" #include "memdebug.h" /* keep this as LAST include */ #ifdef MSDOS # define USE_WATT32 #endif | > | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include "tool_getparam.h" #include "tool_helpers.h" #include "tool_libinfo.h" #include "tool_metalink.h" #include "tool_msgs.h" #include "tool_paramhlp.h" #include "tool_parsecfg.h" #include "tool_main.h" #include "memdebug.h" /* keep this as LAST include */ #ifdef MSDOS # define USE_WATT32 #endif |
︙ | ︙ | |||
173 174 175 176 177 178 179 | {"$D", "proto", ARG_STRING}, {"$E", "proto-redir", ARG_STRING}, {"$F", "resolve", ARG_STRING}, {"$G", "delegation", ARG_STRING}, {"$H", "mail-auth", ARG_STRING}, {"$I", "post303", ARG_BOOL}, {"$J", "metalink", ARG_BOOL}, | > | | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | {"$D", "proto", ARG_STRING}, {"$E", "proto-redir", ARG_STRING}, {"$F", "resolve", ARG_STRING}, {"$G", "delegation", ARG_STRING}, {"$H", "mail-auth", ARG_STRING}, {"$I", "post303", ARG_BOOL}, {"$J", "metalink", ARG_BOOL}, {"$6", "sasl-authzid", ARG_STRING}, {"$K", "sasl-ir", ARG_BOOL }, {"$L", "test-event", ARG_BOOL}, {"$M", "unix-socket", ARG_FILENAME}, {"$N", "path-as-is", ARG_BOOL}, {"$O", "socks5-gssapi-service", ARG_STRING}, /* 'socks5-gssapi-service' merged with'proxy-service-name' and deprecated since 7.49.0 */ {"$O", "proxy-service-name", ARG_STRING}, |
︙ | ︙ | |||
195 196 197 198 199 200 201 202 203 204 205 206 207 208 | {"$Y", "suppress-connect-headers", ARG_BOOL}, {"$Z", "compressed-ssh", ARG_BOOL}, {"$~", "happy-eyeballs-timeout-ms", ARG_STRING}, {"0", "http1.0", ARG_NONE}, {"01", "http1.1", ARG_NONE}, {"02", "http2", ARG_NONE}, {"03", "http2-prior-knowledge", ARG_NONE}, {"09", "http0.9", ARG_BOOL}, {"1", "tlsv1", ARG_NONE}, {"10", "tlsv1.0", ARG_NONE}, {"11", "tlsv1.1", ARG_NONE}, {"12", "tlsv1.2", ARG_NONE}, {"13", "tlsv1.3", ARG_NONE}, {"1A", "tls13-ciphers", ARG_STRING}, | > | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | {"$Y", "suppress-connect-headers", ARG_BOOL}, {"$Z", "compressed-ssh", ARG_BOOL}, {"$~", "happy-eyeballs-timeout-ms", ARG_STRING}, {"0", "http1.0", ARG_NONE}, {"01", "http1.1", ARG_NONE}, {"02", "http2", ARG_NONE}, {"03", "http2-prior-knowledge", ARG_NONE}, {"04", "http3", ARG_NONE}, {"09", "http0.9", ARG_BOOL}, {"1", "tlsv1", ARG_NONE}, {"10", "tlsv1.0", ARG_NONE}, {"11", "tlsv1.1", ARG_NONE}, {"12", "tlsv1.2", ARG_NONE}, {"13", "tlsv1.3", ARG_NONE}, {"1A", "tls13-ciphers", ARG_STRING}, |
︙ | ︙ | |||
312 313 314 315 316 317 318 319 320 321 322 323 324 325 | {"w", "write-out", ARG_STRING}, {"x", "proxy", ARG_STRING}, {"xa", "preproxy", ARG_STRING}, {"X", "request", ARG_STRING}, {"Y", "speed-limit", ARG_STRING}, {"y", "speed-time", ARG_STRING}, {"z", "time-cond", ARG_STRING}, {"#", "progress-bar", ARG_BOOL}, {":", "next", ARG_NONE}, }; /* Split the argument of -E to 'certname' and 'passphrase' separated by colon. * We allow ':' and '\' to be escaped by '\' so that we can use certificate * nicknames containing ':'. See <https://sourceforge.net/p/curl/bugs/1196/> | > > | 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 | {"w", "write-out", ARG_STRING}, {"x", "proxy", ARG_STRING}, {"xa", "preproxy", ARG_STRING}, {"X", "request", ARG_STRING}, {"Y", "speed-limit", ARG_STRING}, {"y", "speed-time", ARG_STRING}, {"z", "time-cond", ARG_STRING}, {"Z", "parallel", ARG_BOOL}, {"Zb", "parallel-max", ARG_STRING}, {"#", "progress-bar", ARG_BOOL}, {":", "next", ARG_NONE}, }; /* Split the argument of -E to 'certname' and 'passphrase' separated by colon. * We allow ':' and '\' to be escaped by '\' so that we can use certificate * nicknames containing ':'. See <https://sourceforge.net/p/curl/bugs/1196/> |
︙ | ︙ | |||
903 904 905 906 907 908 909 | if(err) return err; break; case 'V': /* --retry-connrefused */ config->retry_connrefused = toggle; break; case 'h': /* --retry-delay */ | | | | 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 | if(err) return err; break; case 'V': /* --retry-connrefused */ config->retry_connrefused = toggle; break; case 'h': /* --retry-delay */ err = str2unummax(&config->retry_delay, nextarg, LONG_MAX/1000); if(err) return err; break; case 'i': /* --retry-max-time */ err = str2unummax(&config->retry_maxtime, nextarg, LONG_MAX/1000); if(err) return err; break; case 'k': /* --proxy-negotiate */ if(curlinfo->features & CURL_VERSION_SPNEGO) config->proxynegotiate = toggle; |
︙ | ︙ | |||
1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 | config->use_metalink = toggle; #else warnf(global, "--metalink option is ignored because the binary is " "built without the Metalink support.\n"); #endif break; } case 'K': /* --sasl-ir */ config->sasl_ir = toggle; break; case 'L': /* --test-event */ #ifdef CURLDEBUG | > > > | | 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 | config->use_metalink = toggle; #else warnf(global, "--metalink option is ignored because the binary is " "built without the Metalink support.\n"); #endif break; } case '6': /* --sasl-authzid */ GetStr(&config->sasl_authzid, nextarg); break; case 'K': /* --sasl-ir */ config->sasl_ir = toggle; break; case 'L': /* --test-event */ #ifdef CURLDEBUG global->test_event_based = toggle; #else warnf(global, "--test-event is ignored unless a debug build!\n"); #endif break; case 'M': /* --unix-socket */ config->abstract_unix_socket = FALSE; GetStr(&config->unix_socket_path, nextarg); |
︙ | ︙ | |||
1182 1183 1184 1185 1186 1187 1188 | /* HTTP version 1.1 */ config->httpversion = CURL_HTTP_VERSION_1_1; break; case '2': /* HTTP version 2.0 */ config->httpversion = CURL_HTTP_VERSION_2_0; break; | | > > > > | 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 | /* HTTP version 1.1 */ config->httpversion = CURL_HTTP_VERSION_1_1; break; case '2': /* HTTP version 2.0 */ config->httpversion = CURL_HTTP_VERSION_2_0; break; case '3': /* --http2-prior-knowledge */ /* HTTP version 2.0 over clean TCP*/ config->httpversion = CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE; break; case '4': /* --http3 */ /* HTTP version 3 go over QUIC - at once */ config->httpversion = CURL_HTTP_VERSION_3; break; case '9': /* Allow HTTP/0.9 responses! */ config->http09_allowed = toggle; break; } break; case '1': /* --tlsv1* options */ |
︙ | ︙ | |||
1352 1353 1354 1355 1356 1357 1358 | get sent as a POST anyway */ postdata = strdup(""); if(!postdata) return PARAM_NO_MEM; size = 0; } else { | | | 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 | get sent as a POST anyway */ postdata = strdup(""); if(!postdata) return PARAM_NO_MEM; size = 0; } else { char *enc = curl_easy_escape(NULL, postdata, (int)size); Curl_safefree(postdata); /* no matter if it worked or not */ if(enc) { /* now make a string with the name from above and append the encoded string */ size_t outlen = nlen + strlen(enc) + 2; char *n = malloc(outlen); if(!n) { |
︙ | ︙ | |||
2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 | case 'Y': /* low speed limit */ err = str2unum(&config->low_speed_limit, nextarg); if(err) return err; if(!config->low_speed_time) config->low_speed_time = 30; break; case 'z': /* time condition coming up */ switch(*nextarg) { case '+': nextarg++; /* FALLTHROUGH */ default: | > > > > > > > > > > > > > > > | 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 | case 'Y': /* low speed limit */ err = str2unum(&config->low_speed_limit, nextarg); if(err) return err; if(!config->low_speed_time) config->low_speed_time = 30; break; case 'Z': switch(subletter) { case '\0': /* --parallel */ global->parallel = toggle; break; case 'b': /* --parallel-max */ err = str2unum(&global->parallel_max, nextarg); if(err) return err; if((global->parallel_max > MAX_PARALLEL) || (global->parallel_max < 1)) global->parallel_max = PARALLEL_DEFAULT; break; } break; case 'z': /* time condition coming up */ switch(*nextarg) { case '+': nextarg++; /* FALLTHROUGH */ default: |
︙ | ︙ | |||
2172 2173 2174 2175 2176 2177 2178 | hit = -1; } while(!longopt && !singleopt && *++parse && !*usedarg); return PARAM_OK; } | | | | | | | | < < < | | | | | | | | | | 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 | hit = -1; } while(!longopt && !singleopt && *++parse && !*usedarg); return PARAM_OK; } ParameterError parse_args(struct GlobalConfig *global, int argc, argv_item_t argv[]) { int i; bool stillflags; char *orig_opt = NULL; ParameterError result = PARAM_OK; struct OperationConfig *config = global->first; for(i = 1, stillflags = TRUE; i < argc && !result; i++) { orig_opt = argv[i]; if(stillflags && ('-' == argv[i][0])) { bool passarg; char *flag = argv[i]; if(!strcmp("--", argv[i])) /* This indicates the end of the flags and thus enables the following (URL) argument to start with -. */ stillflags = FALSE; else { char *nextarg = (i < (argc - 1)) ? argv[i + 1] : NULL; result = getparameter(flag, nextarg, &passarg, global, config); if(result == PARAM_NEXT_OPERATION) { /* Reset result as PARAM_NEXT_OPERATION is only used here and not returned from this function */ result = PARAM_OK; if(config->url_list && config->url_list->url) { /* Allocate the next config */ config->next = malloc(sizeof(struct OperationConfig)); if(config->next) { /* Initialise the newly created config */ config_init(config->next); /* Set the global config pointer */ config->next->global = global; /* Update the last config pointer */ global->last = config->next; /* Move onto the new config */ config->next->prev = config; config = config->next; } else result = PARAM_NO_MEM; } } else if(!result && passarg) i++; /* we're supposed to skip this */ } } else { bool used; /* Just add the URL please */ result = getparameter((char *)"--url", argv[i], &used, global, config); } } if(result && result != PARAM_HELP_REQUESTED && result != PARAM_MANUAL_REQUESTED && result != PARAM_VERSION_INFO_REQUESTED && result != PARAM_ENGINES_REQUESTED) { const char *reason = param2text(result); if(orig_opt && strcmp(":", orig_opt)) helpf(global->errors, "option %s: %s\n", orig_opt, reason); else helpf(global->errors, "%s\n", reason); } return result; } |
Changes to jni/curl/src/tool_help.c.
︙ | ︙ | |||
16 17 18 19 20 21 22 | * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" #if defined(HAVE_STRCASECMP) && defined(HAVE_STRINGS_H) #include <strings.h> #endif #include "tool_panykey.h" #include "tool_help.h" #include "tool_libinfo.h" #include "tool_version.h" |
︙ | ︙ | |||
187 188 189 190 191 192 193 194 195 196 197 198 199 200 | "Use HTTP 1.0"}, {" --http1.1", "Use HTTP 1.1"}, {" --http2", "Use HTTP 2"}, {" --http2-prior-knowledge", "Use HTTP 2 without HTTP/1.1 Upgrade"}, {" --ignore-content-length", "Ignore the size of the remote resource"}, {"-i, --include", "Include protocol response headers in the output"}, {"-k, --insecure", "Allow insecure server connections when using SSL"}, {" --interface <name>", | > > | 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | "Use HTTP 1.0"}, {" --http1.1", "Use HTTP 1.1"}, {" --http2", "Use HTTP 2"}, {" --http2-prior-knowledge", "Use HTTP 2 without HTTP/1.1 Upgrade"}, {" --http3", "Use HTTP v3"}, {" --ignore-content-length", "Ignore the size of the remote resource"}, {"-i, --include", "Include protocol response headers in the output"}, {"-k, --insecure", "Allow insecure server connections when using SSL"}, {" --interface <name>", |
︙ | ︙ | |||
269 270 271 272 273 274 275 276 277 278 279 280 281 282 | "Use HTTP NTLM authentication"}, {" --ntlm-wb", "Use HTTP NTLM authentication with winbind"}, {" --oauth2-bearer <token>", "OAuth 2 Bearer Token"}, {"-o, --output <file>", "Write to file instead of stdout"}, {" --pass <phrase>", "Pass phrase for the private key"}, {" --path-as-is", "Do not squash .. sequences in URL path"}, {" --pinnedpubkey <hashes>", "FILE/HASHES Public key to verify peer against"}, {" --post301", | > > > > | 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | "Use HTTP NTLM authentication"}, {" --ntlm-wb", "Use HTTP NTLM authentication with winbind"}, {" --oauth2-bearer <token>", "OAuth 2 Bearer Token"}, {"-o, --output <file>", "Write to file instead of stdout"}, {"-Z, --parallel", "Perform transfers in parallel"}, {" --parallel-max", "Maximum concurrency for parallel transfers"}, {" --pass <phrase>", "Pass phrase for the private key"}, {" --path-as-is", "Do not squash .. sequences in URL path"}, {" --pinnedpubkey <hashes>", "FILE/HASHES Public key to verify peer against"}, {" --post301", |
︙ | ︙ | |||
381 382 383 384 385 386 387 388 389 390 391 392 393 394 | "Retry request if transient problems occur"}, {" --retry-connrefused", "Retry on connection refused (use with --retry)"}, {" --retry-delay <seconds>", "Wait time between retries"}, {" --retry-max-time <seconds>", "Retry only within this period"}, {" --sasl-ir", "Enable initial response in SASL authentication"}, {" --service-name <name>", "SPNEGO service name"}, {"-S, --show-error", "Show error even when -s is used"}, {"-s, --silent", | > > | 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | "Retry request if transient problems occur"}, {" --retry-connrefused", "Retry on connection refused (use with --retry)"}, {" --retry-delay <seconds>", "Wait time between retries"}, {" --retry-max-time <seconds>", "Retry only within this period"}, {" --sasl-authzid <identity> ", "Use this identity to act as during SASL PLAIN authentication"}, {" --sasl-ir", "Enable initial response in SASL authentication"}, {" --service-name <name>", "SPNEGO service name"}, {"-S, --show-error", "Show error even when -s is used"}, {"-s, --silent", |
︙ | ︙ | |||
522 523 524 525 526 527 528 529 530 531 532 533 534 535 | {"NTLM_WB", CURL_VERSION_NTLM_WB}, {"SSL", CURL_VERSION_SSL}, {"libz", CURL_VERSION_LIBZ}, {"brotli", CURL_VERSION_BROTLI}, {"CharConv", CURL_VERSION_CONV}, {"TLS-SRP", CURL_VERSION_TLSAUTH_SRP}, {"HTTP2", CURL_VERSION_HTTP2}, {"UnixSockets", CURL_VERSION_UNIX_SOCKETS}, {"HTTPS-proxy", CURL_VERSION_HTTPS_PROXY}, {"MultiSSL", CURL_VERSION_MULTI_SSL}, {"PSL", CURL_VERSION_PSL}, {"alt-svc", CURL_VERSION_ALTSVC}, }; | > | 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 | {"NTLM_WB", CURL_VERSION_NTLM_WB}, {"SSL", CURL_VERSION_SSL}, {"libz", CURL_VERSION_LIBZ}, {"brotli", CURL_VERSION_BROTLI}, {"CharConv", CURL_VERSION_CONV}, {"TLS-SRP", CURL_VERSION_TLSAUTH_SRP}, {"HTTP2", CURL_VERSION_HTTP2}, {"HTTP3", CURL_VERSION_HTTP3}, {"UnixSockets", CURL_VERSION_UNIX_SOCKETS}, {"HTTPS-proxy", CURL_VERSION_HTTPS_PROXY}, {"MultiSSL", CURL_VERSION_MULTI_SSL}, {"PSL", CURL_VERSION_PSL}, {"alt-svc", CURL_VERSION_ALTSVC}, }; |
︙ | ︙ | |||
598 599 600 601 602 603 604 | } if(strcmp(CURL_VERSION, curlinfo->version)) { printf("WARNING: curl and libcurl versions do not match. " "Functionality may be affected.\n"); } } | | > > | 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 | } if(strcmp(CURL_VERSION, curlinfo->version)) { printf("WARNING: curl and libcurl versions do not match. " "Functionality may be affected.\n"); } } void tool_list_engines(void) { CURL *curl = curl_easy_init(); struct curl_slist *engines = NULL; /* Get the list of engines */ curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines); puts("Build-time engines:"); if(engines) { for(; engines; engines = engines->next) printf(" %s\n", engines->data); } else { puts(" <none>"); } /* Cleanup the list of engines */ curl_slist_free_all(engines); curl_easy_cleanup(curl); } |
Changes to jni/curl/src/tool_help.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_TOOL_HELP_H #define HEADER_CURL_TOOL_HELP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #ifndef HEADER_CURL_TOOL_HELP_H #define HEADER_CURL_TOOL_HELP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" void tool_help(void); void tool_list_engines(void); void tool_version_info(void); #endif /* HEADER_CURL_TOOL_HELP_H */ |
Changes to jni/curl/src/tool_hugehelp.c.
︙ | ︙ | |||
464 465 466 467 468 469 470 | " it uses getpwuid() on Unix-like systems (which returns the home\n" " dir given the current user in your system). On Windows, it then\n" " checks for the APPDATA variable, or as a last resort the '%USER-\n" , stdout); fputs( " PROFILE%\\Application Data'.\n" "\n" | | | 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 | " it uses getpwuid() on Unix-like systems (which returns the home\n" " dir given the current user in your system). On Windows, it then\n" " checks for the APPDATA variable, or as a last resort the '%USER-\n" , stdout); fputs( " PROFILE%\\Application Data'.\n" "\n" " 2) On windows, if there is no .curlrc file in the home dir, it\n" " checks for one in the same dir the curl executable is placed. On\n" " Unix-like systems, it will simply try to load .curlrc from the\n" " determined home dir.\n" "\n" " # --- Example file ---\n" " # this is a comment\n" " url = \"example.com\"\n" |
︙ | ︙ | |||
1487 1488 1489 1490 1491 1492 1493 | " (HTTP) Tells curl to be fine with HTTP version 0.9 response.\n" "\n" " HTTP/0.9 is a completely headerless response and therefore you\n" " can also connect with this to non-HTTP servers and still get a\n" " response since curl will simply transparently downgrade - if al-\n" " lowed.\n" "\n" | < | | | | | | | | | > > > > > > > > > > > > > > > > > > > | > > > > > < > < < > > < > > > < < > > < < > > < < > > < < < < > > < < > > < > > > < < > > < < > > < < < < > > > > < < > > < < > > < < < < > > < < > > < < > > > > < < > > < < < > < > < > | 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 | " (HTTP) Tells curl to be fine with HTTP version 0.9 response.\n" "\n" " HTTP/0.9 is a completely headerless response and therefore you\n" " can also connect with this to non-HTTP servers and still get a\n" " response since curl will simply transparently downgrade - if al-\n" " lowed.\n" "\n" " Since curl 7.66.0, HTTP/0.9 is disabled by default.\n" "\n" " -0, --http1.0\n" , stdout); fputs( " (HTTP) Tells curl to use HTTP version 1.0 instead of using its\n" " internally preferred HTTP version.\n" "\n" " This option overrides --http1.1 and --http2.\n" "\n" " --http1.1\n" " (HTTP) Tells curl to use HTTP version 1.1.\n" "\n" " This option overrides -0, --http1.0 and --http2. Added in\n" " 7.33.0.\n" "\n" " --http2-prior-knowledge\n" " (HTTP) Tells curl to issue its non-TLS HTTP requests using\n" , stdout); fputs( " HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge\n" " that the server supports HTTP/2 straight away. HTTPS requests\n" " will still do HTTP/2 the standard way with negotiated protocol\n" " version in the TLS handshake.\n" "\n" " --http2-prior-knowledge requires that the underlying libcurl was\n" " built to support HTTP/2. This option overrides --http1.1 and -0,\n" " --http1.0 and --http2. Added in 7.49.0.\n" "\n" , stdout); fputs( " --http2\n" " (HTTP) Tells curl to use HTTP version 2.\n" "\n" " See also --http1.1 and --http3. --http2 requires that the under-\n" " lying libcurl was built to support HTTP/2. This option overrides\n" " --http1.1 and -0, --http1.0 and --http2-prior-knowledge. Added\n" " in 7.33.0.\n" "\n" " --http3\n" " (HTTP) WARNING: this option is experiemental. Do not use in pro-\n" " duction.\n" "\n" , stdout); fputs( " Tells curl to use HTTP version 3 directly to the host and port\n" " number used in the URL. A normal HTTP/3 transaction will be done\n" " to a host and then get redirected via Alt-SVc, but this option\n" " allows a user to circumvent that when you know that the target\n" " speaks HTTP/3 on the given host and port.\n" "\n" " This option will make curl fail if a QUIC connection cannot be\n" , stdout); fputs( " established, it cannot fall back to a lower HTTP version on its\n" " own.\n" "\n" " See also --http1.1 and --http2. --http3 requires that the under-\n" " lying libcurl was built to support HTTP/3. This option overrides\n" " --http1.1 and -0, --http1.0 and --http2 and --http2-prior-knowl-\n" " edge. Added in 7.66.0.\n" "\n" " --ignore-content-length\n" " (FTP HTTP) For HTTP, Ignore the Content-Length header. This is\n" , stdout); fputs( " particularly useful for servers running Apache 1.x, which will\n" " report incorrect Content-Length for files larger than 2 giga-\n" " bytes.\n" "\n" " For FTP (since 7.46.0), skip the RETR command to figure out the\n" " size before downloading a file.\n" "\n" " -i, --include\n" " Include the HTTP response headers in the output. The HTTP re-\n" " sponse headers can include things like server name, cookies,\n" , stdout); fputs( " date of the document, HTTP version and more...\n" "\n" " To view the request headers, consider the -v, --verbose option.\n" "\n" " See also -v, --verbose.\n" "\n" " -k, --insecure\n" " (TLS) By default, every SSL connection curl makes is verified to\n" " be secure. This option allows curl to proceed and operate even\n" " for server connections otherwise considered insecure.\n" "\n" , stdout); fputs( " The server connection is verified by making sure the server's\n" " certificate contains the right name and verifies successfully\n" " using the cert store.\n" "\n" " See this online resource for further details:\n" " https://curl.haxx.se/docs/sslcerts.html\n" " See also --proxy-insecure and --cacert.\n" "\n" " --interface <name>\n" "\n" " Perform an operation using a specified interface. You can enter\n" , stdout); fputs( " interface name, IP address or host name. An example could look\n" " like:\n" "\n" " curl --interface eth0:1 https://www.example.com/\n" "\n" " If this option is used several times, the last one will be used.\n" " On Linux it can be used to specify a VRF, but the binary needs\n" " to either have CAP_NET_RAW or to be run as root. More informa-\n" " tion about Linux VRF: https://www.kernel.org/doc/Documenta-\n" , stdout); fputs( " tion/networking/vrf.txt\n" "\n" " See also --dns-interface.\n" "\n" " -4, --ipv4\n" " This option tells curl to resolve names to IPv4 addresses only,\n" " and not for example try IPv6.\n" "\n" " See also --http1.1 and --http2. This option overrides -6,\n" " --ipv6.\n" "\n" " -6, --ipv6\n" " This option tells curl to resolve names to IPv6 addresses only,\n" " and not for example try IPv4.\n" "\n" , stdout); fputs( " See also --http1.1 and --http2. This option overrides -4,\n" " --ipv4.\n" "\n" " -j, --junk-session-cookies\n" " (HTTP) When curl is told to read cookies from a given file, this\n" " option will make it discard all \"session cookies\". This will ba-\n" " sically have the same effect as if a new session is started.\n" " Typical browsers always discard session cookies when they're\n" " closed down.\n" "\n" , stdout); fputs( " See also -b, --cookie and -c, --cookie-jar.\n" "\n" " --keepalive-time <seconds>\n" " This option sets the time a connection needs to remain idle be-\n" " fore sending keepalive probes and the time between individual\n" " keepalive probes. It is currently effective on operating systems\n" " offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options\n" " (meaning Linux, recent AIX, HP-UX and more). This option has no\n" , stdout); fputs( " effect if --no-keepalive is used.\n" "\n" " If this option is used several times, the last one will be used.\n" " If unspecified, the option defaults to 60 seconds.\n" "\n" " Added in 7.18.0.\n" "\n" " --key-type <type>\n" " (TLS) Private key file type. Specify which type your --key pro-\n" " vided private key is. DER, PEM, and ENG are supported. If not\n" " specified, PEM is assumed.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " --key <key>\n" " (TLS SSH) Private key file name. Allows you to provide your pri-\n" " vate key in this separate file. For SSH, if not specified, curl\n" " tries the following candidates in order: '~/.ssh/id_rsa',\n" " '~/.ssh/id_dsa', './id_rsa', './id_dsa'.\n" "\n" " If curl is built against OpenSSL library, and the engine pkcs11\n" , stdout); fputs( " is available, then a PKCS#11 URI (RFC 7512) can be used to spec-\n" " ify a private key located in a PKCS#11 device. A string begin-\n" " ning with \"pkcs11:\" will be interpreted as a PKCS#11 URI. If a\n" " PKCS#11 URI is provided, then the --engine option will be set as\n" " \"pkcs11\" if none was provided and the --key-type option will be\n" " set as \"ENG\" if none was provided.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " --krb <level>\n" " (FTP) Enable Kerberos authentication and use. The level must be\n" " entered and should be one of 'clear', 'safe', 'confidential', or\n" " 'private'. Should you use a level that is not one of these,\n" " 'private' will instead be used.\n" "\n" " If this option is used several times, the last one will be used.\n" , stdout); fputs( " --krb requires that the underlying libcurl was built to support\n" " Kerberos.\n" "\n" " --libcurl <file>\n" " Append this option to any ordinary curl command line, and you\n" " will get a libcurl-using C source code written to the file that\n" " does the equivalent of what your command-line operation does!\n" "\n" " If this option is used several times, the last given file name\n" " will be used.\n" "\n" , stdout); fputs( " Added in 7.16.1.\n" "\n" " --limit-rate <speed>\n" " Specify the maximum transfer rate you want curl to use - for\n" " both downloads and uploads. This feature is useful if you have a\n" " limited pipe and you'd like your transfer not to use your entire\n" " bandwidth. To make it slower than it otherwise would be.\n" "\n" " The given speed is measured in bytes/second, unless a suffix is\n" , stdout); fputs( " appended. Appending 'k' or 'K' will count the number as kilo-\n" " bytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it\n" " gigabytes. Examples: 200K, 3m and 1G.\n" "\n" " If you also use the -Y, --speed-limit option, that option will\n" " take precedence and might cripple the rate-limiting slightly, to\n" " help keeping the speed-limit logic working.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " -l, --list-only\n" " (FTP POP3) (FTP) When listing an FTP directory, this switch\n" " forces a name-only view. This is especially useful if the user\n" " wants to machine-parse the contents of an FTP directory since\n" " the normal directory view doesn't use a standard look or format.\n" " When used like this, the option causes a NLST command to be sent\n" , stdout); fputs( " to the server instead of LIST.\n" "\n" " Note: Some FTP servers list only files in their response to\n" " NLST; they do not include sub-directories and symbolic links.\n" "\n" " (POP3) When retrieving a specific email from POP3, this switch\n" " forces a LIST command to be performed instead of RETR. This is\n" " particularly useful if the user wants to see if a specific mes-\n" , stdout); fputs( " sage id exists on the server and what size it is.\n" "\n" " Note: When combined with -X, --request, this option can be used\n" " to send an UIDL command instead, so the user may use the email's\n" " unique identifier rather than it's message id to make the re-\n" " quest.\n" "\n" " Added in 7.21.5.\n" "\n" " --local-port <num/range>\n" " Set a preferred single number or range (FROM-TO) of local port\n" , stdout); fputs( " numbers to use for the connection(s). Note that port numbers by\n" " nature are a scarce resource that will be busy at times so set-\n" " ting this range to something too narrow might cause unnecessary\n" " connection setup failures.\n" "\n" " Added in 7.15.2.\n" "\n" " --location-trusted\n" " (HTTP) Like -L, --location, but will allow sending the name +\n" " password to all hosts that the site may redirect to. This may or\n" , stdout); fputs( " may not introduce a security breach if the site redirects you to\n" " a site to which you'll send your authentication info (which is\n" " plaintext in the case of HTTP Basic authentication).\n" "\n" " See also -u, --user.\n" "\n" " -L, --location\n" " (HTTP) If the server reports that the requested page has moved\n" " to a different location (indicated with a Location: header and a\n" , stdout); fputs( " 3XX response code), this option will make curl redo the request\n" " on the new place. If used together with -i, --include or -I,\n" " --head, headers from all requested pages will be shown. When au-\n" " thentication is used, curl only sends its credentials to the\n" " initial host. If a redirect takes curl to a different host, it\n" " won't be able to intercept the user+password. See also --loca-\n" , stdout); fputs( " tion-trusted on how to change this. You can limit the amount of\n" " redirects to follow by using the --max-redirs option.\n" "\n" " When curl follows a redirect and the request is not a plain GET\n" " (for example POST or PUT), it will do the following request with\n" " a GET if the HTTP response was 301, 302, or 303. If the response\n" " code was any other 3xx code, curl will re-send the following re-\n" , stdout); fputs( " quest using the same unmodified method.\n" "\n" " You can tell curl to not change the non-GET request method to\n" " GET after a 30x response by using the dedicated options for\n" " that: --post301, --post302 and --post303.\n" "\n" " --login-options <options>\n" " (IMAP POP3 SMTP) Specify the login options to use during server\n" " authentication.\n" "\n" " You can use the login options to specify protocol specific op-\n" , stdout); fputs( " tions that may be used during authentication. At present only\n" " IMAP, POP3 and SMTP support login options. For more information\n" " about the login options please see RFC 2384, RFC 5092 and IETF\n" " draft draft-earhart-url-smtp-00.txt\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.34.0.\n" "\n" " --mail-auth <address>\n" , stdout); fputs( " (SMTP) Specify a single address. This will be used to specify\n" " the authentication address (identity) of a submitted message\n" " that is being relayed to another server.\n" "\n" " See also --mail-rcpt and --mail-from. Added in 7.25.0.\n" "\n" " --mail-from <address>\n" " (SMTP) Specify a single address that the given mail should get\n" " sent from.\n" "\n" " See also --mail-rcpt and --mail-auth. Added in 7.20.0.\n" "\n" , stdout); fputs( " --mail-rcpt <address>\n" " (SMTP) Specify a single address, user name or mailing list name.\n" " Repeat this option several times to send to multiple recipients.\n" " When performing a mail transfer, the recipient should specify a\n" " valid email address to send the mail to.\n" "\n" " When performing an address verification (VRFY command), the re-\n" " cipient should be specified as the user name or user name and\n" |
︙ | ︙ | |||
2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 | , stdout); fputs( " will force the output to be done to stdout.\n" "\n" " See also -O, --remote-name and --remote-name-all and -J, --re-\n" " mote-header-name.\n" "\n" " --pass <phrase>\n" " (SSH TLS) Passphrase for the private key\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --path-as-is\n" | > > > > > > > > > > > > > > > > > | > < | | < < > > | | | | < < > > > > > > > > > > > > > > > > | < < < < < < < < < < < < | < < | < < > > | | | | < < > > | | | | < < > > | | | | | | | | | | | | | | | | | | | | | | | | | 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 | , stdout); fputs( " will force the output to be done to stdout.\n" "\n" " See also -O, --remote-name and --remote-name-all and -J, --re-\n" " mote-header-name.\n" "\n" " --parallel-max\n" " When asked to do parallel transfers, using -Z, --parallel, this\n" " option controls the maximum amount of transfers to do simultane-\n" " ously.\n" "\n" " The default is 50.\n" "\n" " See also -Z, --parallel. Added in 7.66.0.\n" "\n" " -Z, --parallel\n" , stdout); fputs( " Makes curl perform its transfers in parallel as compared to the\n" " regular serial manner.\n" "\n" " Added in 7.66.0.\n" "\n" " --pass <phrase>\n" " (SSH TLS) Passphrase for the private key\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --path-as-is\n" " Tell curl to not handle sequences of /../ or /./ in the given\n" " URL path. Normally curl will squash or merge them according to\n" , stdout); fputs( " standards but with this option set you tell it not to do that.\n" "\n" " Added in 7.42.0.\n" "\n" " --pinnedpubkey <hashes>\n" " (TLS) Tells curl to use the specified public key file (or\n" " hashes) to verify the peer. This can be a path to a file which\n" " contains a single public key in PEM or DER format, or any number\n" " of base64 encoded sha256 hashes preceded by 'sha256//' and sepa-\n" " rated by ';'\n" "\n" , stdout); fputs( " When negotiating a TLS or SSL connection, the server sends a\n" " certificate indicating its identity. A public key is extracted\n" " from this certificate and if it does not exactly match the pub-\n" " lic key provided to this option, curl will abort the connection\n" " before sending or receiving any data.\n" "\n" " PEM/DER support:\n" " 7.39.0: OpenSSL, GnuTLS and GSKit\n" " 7.43.0: NSS and wolfSSL\n" , stdout); fputs( " 7.47.0: mbedtls sha256 support:\n" " 7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL\n" " 7.47.0: mbedtls Other SSL backends not supported.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --post301\n" " (HTTP) Tells curl to respect RFC 7231/6.4.2 and not convert POST\n" " requests into GET requests when following a 301 redirection. The\n" , stdout); fputs( " non-RFC behaviour is ubiquitous in web browsers, so curl does\n" " the conversion by default to maintain consistency. However, a\n" " server may require a POST to remain a POST after such a redi-\n" " rection. This option is meaningful only when using -L, --loca-\n" " tion.\n" "\n" " See also --post302 and --post303 and -L, --location. Added in\n" " 7.17.1.\n" "\n" " --post302\n" , stdout); fputs( " (HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST\n" " requests into GET requests when following a 302 redirection. The\n" " non-RFC behaviour is ubiquitous in web browsers, so curl does\n" " the conversion by default to maintain consistency. However, a\n" " server may require a POST to remain a POST after such a redi-\n" " rection. This option is meaningful only when using -L, --loca-\n" " tion.\n" "\n" , stdout); fputs( " See also --post301 and --post303 and -L, --location. Added in\n" " 7.19.1.\n" "\n" " --post303\n" " (HTTP) Tells curl to violate RFC 7231/6.4.4 and not convert POST\n" " requests into GET requests when following 303 redirections. A\n" " server may require a POST to remain a POST after a 303 redirect-\n" " ion. This option is meaningful only when using -L, --location.\n" "\n" , stdout); fputs( " See also --post302 and --post301 and -L, --location. Added in\n" " 7.26.0.\n" "\n" " --preproxy [protocol://]host[:port]\n" " Use the specified SOCKS proxy before connecting to an HTTP or\n" " HTTPS -x, --proxy. In such a case curl first connects to the\n" " SOCKS proxy and then connects (through SOCKS) to the HTTP or\n" " HTTPS proxy. Hence pre proxy.\n" "\n" , stdout); fputs( " The pre proxy string should be specified with a protocol:// pre-\n" " fix to specify alternative proxy protocols. Use socks4://,\n" " socks4a://, socks5:// or socks5h:// to request the specific\n" " SOCKS version to be used. No protocol specified will make curl\n" " default to SOCKS4.\n" "\n" " If the port number is not specified in the proxy string, it is\n" " assumed to be 1080.\n" "\n" , stdout); fputs( " User and password that might be provided in the proxy string are\n" " URL decoded by curl. This allows you to pass in special charac-\n" " ters such as @ by using %40 or pass in a colon with %3a.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.52.0.\n" "\n" " -#, --progress-bar\n" " Make curl display transfer progress as a simple progress bar in-\n" , stdout); fputs( " stead of the standard, more informational, meter.\n" "\n" " This progress bar draws a single line of '#' characters across\n" " the screen and shows a percentage if the transfer size is known.\n" " For transfers without a known size, there will be space ship\n" " (-=o=-) that moves back and forth but only while data is being\n" " transferred, with a set of flying hash sign symbols on top.\n" "\n" " --proto-default <protocol>\n" , stdout); fputs( " Tells curl to use protocol for any URL missing a scheme name.\n" "\n" " Example:\n" "\n" " curl --proto-default https ftp.mozilla.org\n" "\n" " An unknown or unsupported protocol causes error CURLE_UNSUP-\n" " PORTED_PROTOCOL (1).\n" "\n" " This option does not change the default proxy protocol (http).\n" "\n" " Without this option curl would make a guess based on the host,\n" " see --url for details.\n" "\n" , stdout); fputs( " Added in 7.45.0.\n" "\n" " --proto-redir <protocols>\n" " Tells curl to limit what protocols it may use on redirect. Pro-\n" " tocols denied by --proto are not overridden by this option. See\n" " --proto for how protocols are represented.\n" "\n" " Example, allow only HTTP and HTTPS on redirect:\n" "\n" " curl --proto-redir -all,http,https http://example.com\n" "\n" " By default curl will allow HTTP, HTTPS, FTP and FTPS on redirect\n" , stdout); fputs( " (7.65.2). Older versions of curl allowed all protocols on redi-\n" " rect except several disabled for security reasons: Since 7.19.4\n" " FILE and SCP are disabled, and since 7.40.0 SMB and SMBS are\n" " also disabled. Specifying all or +all enables all protocols on\n" " redirect, including those disabled for security.\n" "\n" " Added in 7.20.2.\n" "\n" " --proto <protocols>\n" , stdout); fputs( " Tells curl to limit what protocols it may use in the transfer.\n" " Protocols are evaluated left to right, are comma separated, and\n" " are each a protocol name or 'all', optionally prefixed by zero\n" " or more modifiers. Available modifiers are:\n" "\n" " + Permit this protocol in addition to protocols already permit-\n" " ted (this is the default if no modifier is used).\n" "\n" , stdout); fputs( " - Deny this protocol, removing it from the list of protocols\n" " already permitted.\n" "\n" " = Permit only this protocol (ignoring the list already permit-\n" " ted), though subject to later modification by subsequent en-\n" " tries in the comma separated list.\n" "\n" " For example:\n" "\n" " --proto -ftps uses the default protocols, but disables ftps\n" "\n" " --proto -all,https,+http\n" , stdout); fputs( " only enables http and https\n" "\n" " --proto =http,https\n" " also only enables http and https\n" "\n" " Unknown protocols produce a warning. This allows scripts to safely rely\n" " on being able to disable potentially dangerous protocols, without rely-\n" " ing upon support for that protocol being built into curl to avoid an\n" " error.\n" "\n" " This option can be used multiple times, in which case the effect is the\n" , stdout); fputs( " same as concatenating the protocols into one instance of the option.\n" "\n" " See also --proto-redir and --proto-default. Added in 7.20.2.\n" "\n" " --proxy-anyauth\n" " Tells curl to pick a suitable authentication method when commu-\n" " nicating with the given HTTP proxy. This might cause an extra\n" " request/response round-trip.\n" "\n" " See also -x, --proxy and --proxy-basic and --proxy-digest. Added\n" " in 7.13.2.\n" "\n" " --proxy-basic\n" , stdout); fputs( " Tells curl to use HTTP Basic authentication when communicating\n" " with the given proxy. Use --basic for enabling HTTP Basic with a\n" " remote host. Basic is the default authentication method curl\n" " uses with proxies.\n" "\n" " See also -x, --proxy and --proxy-anyauth and --proxy-digest.\n" "\n" " --proxy-cacert <file>\n" " Same as --cacert but used in HTTPS proxy context.\n" "\n" , stdout); fputs( " See also --proxy-capath and --cacert and --capath and -x,\n" " --proxy. Added in 7.52.0.\n" "\n" " --proxy-capath <dir>\n" " Same as --capath but used in HTTPS proxy context.\n" "\n" " See also --proxy-cacert and -x, --proxy and --capath. Added in\n" " 7.52.0.\n" "\n" " --proxy-cert-type <type>\n" " Same as --cert-type but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" |
︙ | ︙ | |||
2409 2410 2411 2412 2413 2414 2415 | "\n" " --proxy-crlfile <file>\n" " Same as --crlfile but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " --proxy-digest\n" | | | | | | | | | | | | | | | | | | | | | | | | | 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 | "\n" " --proxy-crlfile <file>\n" " Same as --crlfile but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " --proxy-digest\n" " Tells curl to use HTTP Digest authentication when communicating\n" , stdout); fputs( " with the given proxy. Use --digest for enabling HTTP Digest with\n" " a remote host.\n" "\n" " See also -x, --proxy and --proxy-anyauth and --proxy-basic.\n" "\n" " --proxy-header <header/@file>\n" " (HTTP) Extra header to include in the request when sending HTTP\n" " to a proxy. You may specify any number of extra headers. This is\n" " the equivalent option to -H, --header but is for proxy communi-\n" , stdout); fputs( " cation only like in CONNECT requests when you want a separate\n" " header sent to the proxy to what is sent to the actual remote\n" " host.\n" "\n" " curl will make sure that each header you add/replace is sent\n" " with the proper end-of-line marker, you should thus not add that\n" " as a part of the header content: do not add newlines or carriage\n" " returns, they will only mess things up for you.\n" "\n" , stdout); fputs( " Headers specified with this option will not be included in re-\n" " quests that curl knows will not be sent to a proxy.\n" "\n" " Starting in 7.55.0, this option can take an argument in @file-\n" " name style, which then adds a header for each line in the input\n" " file. Using @- will make curl read the header file from stdin.\n" "\n" " This option can be used multiple times to add/replace/remove\n" " multiple headers.\n" "\n" , stdout); fputs( " Added in 7.37.0.\n" " --proxy-insecure\n" " Same as -k, --insecure but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " --proxy-key-type <type>\n" " Same as --key-type but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " --proxy-key <key>\n" " Same as --key but used in HTTPS proxy context.\n" "\n" " --proxy-negotiate\n" " Tells curl to use HTTP Negotiate (SPNEGO) authentication when\n" , stdout); fputs( " communicating with the given proxy. Use --negotiate for enabling\n" " HTTP Negotiate (SPNEGO) with a remote host.\n" "\n" " See also --proxy-anyauth and --proxy-basic. Added in 7.17.1.\n" "\n" " --proxy-ntlm\n" " Tells curl to use HTTP NTLM authentication when communicating\n" " with the given proxy. Use --ntlm for enabling NTLM with a remote\n" " host.\n" "\n" " See also --proxy-negotiate and --proxy-anyauth.\n" "\n" , stdout); fputs( " --proxy-pass <phrase>\n" " Same as --pass but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " --proxy-pinnedpubkey <hashes>\n" " (TLS) Tells curl to use the specified public key file (or\n" " hashes) to verify the proxy. This can be a path to a file which\n" " contains a single public key in PEM or DER format, or any number\n" " of base64 encoded sha256 hashes preceded by 'sha256//' and sepa-\n" , stdout); fputs( " rated by ';'\n" "\n" " When negotiating a TLS or SSL connection, the server sends a\n" " certificate indicating its identity. A public key is extracted\n" " from this certificate and if it does not exactly match the pub-\n" " lic key provided to this option, curl will abort the connection\n" " before sending or receiving any data.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" , stdout); fputs( " --proxy-service-name <name>\n" " This option allows you to change the service name for proxy ne-\n" " gotiation.\n" "\n" " Added in 7.43.0.\n" "\n" " --proxy-ssl-allow-beast\n" " Same as --ssl-allow-beast but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " --proxy-tls13-ciphers <ciphersuite list>\n" " (TLS) Specifies which cipher suites to use in the connection to\n" , stdout); fputs( " your HTTPS proxy when it negotiates TLS 1.3. The list of ciphers\n" " suites must specify valid ciphers. Read up on TLS 1.3 cipher\n" " suite details on this URL:\n" "\n" " https://curl.haxx.se/docs/ssl-ciphers.html\n" "\n" " This option is currently used only when curl is built to use\n" " OpenSSL 1.1.1 or later. If you are using a different SSL backend\n" " you can try setting TLS 1.3 cipher suites by using the --proxy-\n" , stdout); fputs( " ciphers option.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --proxy-tlsauthtype <type>\n" |
︙ | ︙ | |||
2555 2556 2557 2558 2559 2560 2561 | "\n" " --proxy-tlsv1\n" " Same as -1, --tlsv1 but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " -U, --proxy-user <user:password>\n" | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > > > > | > > > > > > > > > > > > > > > | > > < < | < < > > | > < > < | | > < | < < | > > | | | < < | > > | | < < | < < < > > > | > > | | < < > > | < < | > > | | < < > > | < < | > > | < < > > | | < < | < < > > > > < < < < > > | | | > > | < < | | | > > | < < | | | > > | < < | > > | > > > > < < < < | < < | < > < > < > | | | < > | | < < > > | < < > > | < > | | < < > > | | | > > | < < | | > > | < < | | | > > < < | | | > > < < | | | > > < < | > > | < < | | | > > | < < | > > | < < > > | < < | | > > < < | > > | < < < < < < > > > > | | > > | | | < < > > | | < < | < < < < > > > > > > | | | < < | > > | | < < > > | | < < | < < < > > > | > > | | < < | | > > | | > > < < | | > > < < | < < | > > | < < | > > | < < | > > | | < < | | > > < < | > > > > > < < < | | < < < < < > > > | | < < < > > > | > > | < < | | < < < > > > | > > | < < | > > | < < | | > > | | < < > > > > < < | < < | | > > < < | > > | < < | > > | | > > > < < < | | < < | > > | > > > < < < > > > < < < | | > > > < < < | < < | < < < > > > | | > > < < | > > | < < | | > > | < < | < < < > > > | | > > | | < < | | > > | < < > > | < < > > | | < < | > > | | < < | | | > > | < < | | | > > | < < | > > | < < | | > > | | < < > > | | < < | > > | < < > > < < | | | > > < < | > > < < | > > | < < > > < < | > > < < > > < < | | 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 | "\n" " --proxy-tlsv1\n" " Same as -1, --tlsv1 but used in HTTPS proxy context.\n" "\n" " Added in 7.52.0.\n" "\n" " -U, --proxy-user <user:password>\n" " Specify the user name and password to use for proxy authentica-\n" " tion.\n" "\n" " If you use a Windows SSPI-enabled curl binary and do either Ne-\n" " gotiate or NTLM authentication then you can tell curl to select\n" , stdout); fputs( " the user name and password from your environment by specifying a\n" " single colon with this option: \"-U :\".\n" "\n" " On systems where it works, curl will hide the given option argu-\n" " ment from process listings. This is not enough to protect cre-\n" " dentials from possibly getting seen by other users on the same\n" " system as they will still be visible for a brief moment before\n" , stdout); fputs( " cleared. Such sensitive data should be retrieved from a file in-\n" " stead or similar and never used in clear text in a command line.\n" " If this option is used several times, the last one will be used.\n" "\n" " -x, --proxy [protocol://]host[:port]\n" " Use the specified proxy.\n" "\n" " The proxy string can be specified with a protocol:// prefix. No\n" " protocol specified or http:// will be treated as HTTP proxy. Use\n" , stdout); fputs( " socks4://, socks4a://, socks5:// or socks5h:// to request a spe-\n" " cific SOCKS version to be used. (The protocol support was added\n" " in curl 7.21.7)\n" "\n" " HTTPS proxy support via https:// protocol prefix was added in\n" " 7.52.0 for OpenSSL, GnuTLS and NSS.\n" "\n" " Unrecognized and unsupported proxy protocols cause an error\n" " since 7.52.0. Prior versions may ignore the protocol and use\n" , stdout); fputs( " http:// instead.\n" "\n" " If the port number is not specified in the proxy string, it is\n" " assumed to be 1080.\n" "\n" " This option overrides existing environment variables that set\n" " the proxy to use. If there's an environment variable setting a\n" " proxy, you can set proxy to \"\" to override it.\n" "\n" " All operations that are performed over an HTTP proxy will trans-\n" , stdout); fputs( " parently be converted to HTTP. It means that certain protocol\n" " specific operations might not be available. This is not the case\n" " if you can tunnel through the proxy, as one with the -p, --prox-\n" " ytunnel option.\n" "\n" " User and password that might be provided in the proxy string are\n" " URL decoded by curl. This allows you to pass in special charac-\n" " ters such as @ by using %40 or pass in a colon with %3a.\n" "\n" , stdout); fputs( " The proxy host can be specified the exact same way as the proxy\n" " environment variables, including the protocol prefix (http://)\n" " and the embedded user + password.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --proxy1.0 <host[:port]>\n" " Use the specified HTTP 1.0 proxy. If the port number is not\n" " specified, it is assumed at port 1080.\n" "\n" , stdout); fputs( " The only difference between this and the HTTP proxy option -x,\n" " --proxy, is that attempts to use CONNECT through the proxy will\n" " specify an HTTP 1.0 protocol instead of the default HTTP 1.1.\n" "\n" " -p, --proxytunnel\n" " When an HTTP proxy is used -x, --proxy, this option will make\n" " curl tunnel through the proxy. The tunnel approach is made with\n" " the HTTP proxy CONNECT request and requires that the proxy al-\n" , stdout); fputs( " lows direct connect to the remote port number curl wants to tun-\n" " nel through to.\n" "\n" " To suppress proxy CONNECT response headers when curl is set to\n" " output headers use --suppress-connect-headers.\n" "\n" " See also -x, --proxy.\n" "\n" " --pubkey <key>\n" " (SFTP SCP) Public key file name. Allows you to provide your pub-\n" " lic key in this separate file.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" " (As of 7.39.0, curl attempts to automatically extract the public\n" " key from the private key file, so passing this option is gener-\n" " ally not required. Note that this public key extraction requires\n" " libcurl to be linked against a copy of libssh2 1.2.8 or higher\n" " that is itself linked against OpenSSL.)\n" "\n" " -Q, --quote\n" , stdout); fputs( " (FTP SFTP) Send an arbitrary command to the remote FTP or SFTP\n" " server. Quote commands are sent BEFORE the transfer takes place\n" " (just after the initial PWD command in an FTP transfer, to be\n" " exact). To make commands take place after a successful transfer,\n" " prefix them with a dash '-'. To make commands be sent after\n" " curl has changed the working directory, just before the transfer\n" , stdout); fputs( " command(s), prefix the command with a '+' (this is only sup-\n" " ported for FTP). You may specify any number of commands.\n" "\n" " If the server returns failure for one of the commands, the en-\n" " tire operation will be aborted. You must send syntactically cor-\n" " rect FTP commands as RFC 959 defines to FTP servers, or one of\n" " the commands listed below to SFTP servers.\n" "\n" , stdout); fputs( " Prefix the command with an asterisk (*) to make curl continue\n" " even if the command fails as by default curl will stop at first\n" " failure.\n" "\n" " This option can be used multiple times.\n" "\n" " SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP\n" " quote commands itself before sending them to the server. File\n" " names may be quoted shell-style to embed spaces or special char-\n" , stdout); fputs( " acters. Following is the list of all supported SFTP quote com-\n" " mands:\n" "\n" " chgrp group file\n" " The chgrp command sets the group ID of the file named by\n" " the file operand to the group ID specified by the group\n" " operand. The group operand is a decimal integer group ID.\n" "\n" " chmod mode file\n" " The chmod command modifies the file mode bits of the\n" , stdout); fputs( " specified file. The mode operand is an octal integer mode\n" " number.\n" "\n" " chown user file\n" " The chown command sets the owner of the file named by the\n" " file operand to the user ID specified by the user oper-\n" " and. The user operand is a decimal integer user ID.\n" "\n" " ln source_file target_file\n" " The ln and symlink commands create a symbolic link at the\n" , stdout); fputs( " target_file location pointing to the source_file loca-\n" " tion.\n" "\n" " mkdir directory_name\n" " The mkdir command creates the directory named by the di-\n" " rectory_name operand.\n" "\n" " pwd The pwd command returns the absolute pathname of the cur-\n" " rent working directory.\n" "\n" " rename source target\n" , stdout); fputs( " The rename command renames the file or directory named by\n" " the source operand to the destination path named by the\n" " target operand.\n" "\n" " rm file\n" " The rm command removes the file specified by the file op-\n" " erand.\n" "\n" " rmdir directory\n" " The rmdir command removes the directory entry specified\n" , stdout); fputs( " by the directory operand, provided it is empty.\n" "\n" " symlink source_file target_file\n" " See ln.\n" "\n" " --random-file <file>\n" " Specify the path name to file containing what will be considered\n" " as random data. The data may be used to seed the random engine\n" " for SSL connections. See also the --egd-file option.\n" "\n" " -r, --range <range>\n" , stdout); fputs( " (HTTP FTP SFTP FILE) Retrieve a byte range (i.e. a partial docu-\n" " ment) from an HTTP/1.1, FTP or SFTP server or a local FILE.\n" " Ranges can be specified in a number of ways.\n" "\n" " 0-499 specifies the first 500 bytes\n" "\n" " 500-999 specifies the second 500 bytes\n" "\n" " -500 specifies the last 500 bytes\n" "\n" " 9500- specifies the bytes from offset 9500 and forward\n" "\n" , stdout); fputs( " 0-0,-1 specifies the first and last byte only(*)(HTTP)\n" "\n" " 100-199,500-599\n" " specifies two separate 100-byte ranges(*) (HTTP)\n" "\n" " (*) = NOTE that this will cause the server to reply with a mul-\n" " tipart response!\n" "\n" " Only digit characters (0-9) are valid in the 'start' and 'stop'\n" " fields of the 'start-stop' range syntax. If a non-digit charac-\n" , stdout); fputs( " ter is given in the range, the server's response will be unspec-\n" " ified, depending on the server's configuration.\n" "\n" " You should also be aware that many HTTP/1.1 servers do not have\n" " this feature enabled, so that when you attempt to get a range,\n" " you'll instead get the whole document.\n" "\n" " FTP and SFTP range downloads only support the simple 'start-\n" , stdout); fputs( " stop' syntax (optionally with one of the numbers omitted). FTP\n" " use depends on the extended FTP command SIZE.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --raw (HTTP) When used, it disables all internal HTTP decoding of con-\n" " tent or transfer encodings and instead makes them passed on un-\n" " altered, raw.\n" "\n" " Added in 7.16.2.\n" "\n" " -e, --referer <URL>\n" , stdout); fputs( " (HTTP) Sends the \"Referrer Page\" information to the HTTP server.\n" " This can also be set with the -H, --header flag of course. When\n" " used with -L, --location you can append \";auto\" to the -e,\n" " --referer URL to make curl automatically set the previous URL\n" " when it follows a Location: header. The \";auto\" string can be\n" " used alone, even if you don't set an initial -e, --referer.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " See also -A, --user-agent and -H, --header.\n" "\n" " -J, --remote-header-name\n" " (HTTP) This option tells the -O, --remote-name option to use the\n" " server-specified Content-Disposition filename instead of ex-\n" " tracting a filename from the URL.\n" "\n" " If the server specifies a file name and a file with that name\n" , stdout); fputs( " already exists in the current working directory it will not be\n" " overwritten and an error will occur. If the server doesn't spec-\n" " ify a file name then this option has no effect.\n" "\n" " There's no attempt to decode %-sequences (yet) in the provided\n" " file name, so this option may provide you with rather unexpected\n" " file names.\n" "\n" " WARNING: Exercise judicious use of this option, especially on\n" , stdout); fputs( " Windows. A rogue server could send you the name of a DLL or\n" " other file that could possibly be loaded automatically by Win-\n" " dows or some third party software.\n" "\n" " --remote-name-all\n" " This option changes the default action for all given URLs to be\n" " dealt with as if -O, --remote-name were used for each one. So if\n" " you want to disable that for a specific URL after --remote-name-\n" , stdout); fputs( " all has been used, you must use \"-o -\" or --no-remote-name.\n" "\n" " Added in 7.19.0.\n" "\n" " -O, --remote-name\n" " Write output to a local file named like the remote file we get.\n" " (Only the file part of the remote file is used, the path is cut\n" " off.)\n" "\n" " The file will be saved in the current working directory. If you\n" " want the file saved in a different directory, make sure you\n" , stdout); fputs( " change the current working directory before invoking curl with\n" " this option.\n" "\n" " The remote file name to use for saving is extracted from the\n" " given URL, nothing else, and if it already exists it will be\n" " overwritten. If you want the server to be able to choose the\n" " file name refer to -J, --remote-header-name which can be used in\n" , stdout); fputs( " addition to this option. If the server chooses a file name and\n" " that name already exists it will not be overwritten.\n" "\n" " There is no URL decoding done on the file name. If it has %20 or\n" " other URL encoded parts of the name, they will end up as-is as\n" " file name.\n" "\n" " You may use this option as many times as the number of URLs you\n" " have.\n" "\n" " -R, --remote-time\n" , stdout); fputs( " When used, this will make curl attempt to figure out the time-\n" " stamp of the remote file, and if that is available make the lo-\n" " cal file get that same timestamp.\n" "\n" " --request-target\n" " (HTTP) Tells curl to use an alternative \"target\" (path) instead\n" " of using the path as provided in the URL. Particularly useful\n" " when wanting to issue HTTP requests without leading slash or\n" , stdout); fputs( " other data that doesn't follow the regular URL pattern, like\n" " \"OPTIONS *\".\n" "\n" " Added in 7.55.0.\n" "\n" " -X, --request <command>\n" " (HTTP) Specifies a custom request method to use when communicat-\n" " ing with the HTTP server. The specified request method will be\n" " used instead of the method otherwise used (which defaults to\n" " GET). Read the HTTP 1.1 specification for details and explana-\n" , stdout); fputs( " tions. Common additional HTTP requests include PUT and DELETE,\n" " but related technologies like WebDAV offers PROPFIND, COPY, MOVE\n" " and more.\n" "\n" " Normally you don't need this option. All sorts of GET, HEAD,\n" " POST and PUT requests are rather invoked by using dedicated com-\n" " mand line options.\n" "\n" " This option only changes the actual word used in the HTTP re-\n" , stdout); fputs( " quest, it does not alter the way curl behaves. So for example if\n" " you want to make a proper HEAD request, using -X HEAD will not\n" " suffice. You need to use the -I, --head option.\n" "\n" " The method string you set with -X, --request will be used for\n" " all requests, which if you for example use -L, --location may\n" " cause unintended side-effects when curl doesn't change request\n" , stdout); fputs( " method according to the HTTP 30x response codes - and similar.\n" "\n" " (FTP) Specifies a custom FTP command to use instead of LIST when\n" " doing file lists with FTP.\n" "\n" " (POP3) Specifies a custom POP3 command to use instead of LIST or\n" " RETR. (Added in 7.26.0)\n" "\n" " (IMAP) Specifies a custom IMAP command to use instead of LIST.\n" " (Added in 7.30.0)\n" "\n" , stdout); fputs( " (SMTP) Specifies a custom SMTP command to use instead of HELP or\n" " VRFY. (Added in 7.34.0)\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --resolve <host:port:address[,address]...>\n" " Provide a custom address for a specific host and port pair. Us-\n" " ing this, you can make the curl requests(s) use a specified ad-\n" " dress and prevent the otherwise normally resolved address to be\n" , stdout); fputs( " used. Consider it a sort of /etc/hosts alternative provided on\n" " the command line. The port number should be the number used for\n" " the specific protocol the host will be used for. It means you\n" " need several entries if you want to provide address for the same\n" " host but different ports.\n" "\n" " By specifying '*' as host you can tell curl to resolve any host\n" , stdout); fputs( " and specific port pair to the specified address. Wildcard is re-\n" " solved last so any --resolve with a specific host and port will\n" " be used first.\n" "\n" " The provided address set by this option will be used even if -4,\n" " --ipv4 or -6, --ipv6 is set to make curl use another IP version.\n" " Support for providing the IP address within [brackets] was added\n" " in 7.57.0.\n" "\n" , stdout); fputs( " Support for providing multiple IP addresses per entry was added\n" " in 7.59.0.\n" "\n" " Support for resolving with wildcard was added in 7.64.0.\n" "\n" " This option can be used many times to add many host names to re-\n" " solve.\n" "\n" " Added in 7.21.3.\n" "\n" " --retry-connrefused\n" " In addition to the other conditions, consider ECONNREFUSED as a\n" " transient error too for --retry. This option is used together\n" , stdout); fputs( " with --retry.\n" "\n" " Added in 7.52.0.\n" "\n" " --retry-delay <seconds>\n" " Make curl sleep this amount of time before each retry when a\n" " transfer has failed with a transient error (it changes the de-\n" " fault backoff time algorithm between retries). This option is\n" " only interesting if --retry is also used. Setting this delay to\n" " zero will make curl use the default backoff time.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.12.3.\n" "\n" " --retry-max-time <seconds>\n" " The retry timer is reset before the first transfer attempt. Re-\n" " tries will be done as usual (see --retry) as long as the timer\n" " hasn't reached this given limit. Notice that if the timer hasn't\n" " reached the limit, the request will be made and while perform-\n" , stdout); fputs( " ing, it may take longer than this given time period. To limit a\n" " single request's maximum time, use -m, --max-time. Set this op-\n" " tion to zero to not timeout retries.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.12.3.\n" "\n" " --retry <num>\n" " If a transient error is returned when curl tries to perform a\n" , stdout); fputs( " transfer, it will retry this number of times before giving up.\n" " Setting the number to 0 makes curl do no retries (which is the\n" " default). Transient error means either: a timeout, an FTP 4xx\n" " response code or an HTTP 408 or 5xx response code.\n" "\n" " When curl is about to retry a transfer, it will first wait one\n" " second and then for all forthcoming retries it will double the\n" , stdout); fputs( " waiting time until it reaches 10 minutes which then will be the\n" " delay between the rest of the retries. By using --retry-delay\n" " you disable this exponential backoff algorithm. See also\n" " --retry-max-time to limit the total time allowed for retries.\n" "\n" " Since curl 7.66.0, curl will comply with the Retry-After: re-\n" " sponse header if one was present to know when to issue the next\n" " retry.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.12.3.\n" "\n" " --sasl-authzid\n" " Use this authorisation identity (authzid), during SASL PLAIN au-\n" " thentication, in addition to the authentication identity (auth-\n" " cid) as specified by -u, --user.\n" "\n" " If the option isn't specified, the server will derive the au-\n" " thzid from the authcid, but if specified, and depending on the\n" , stdout); fputs( " server implementation, it may be used to access another user's\n" " inbox, that the user has been granted access to, or a shared\n" " mailbox for example.\n" "\n" " Added in 7.66.0.\n" "\n" " --sasl-ir\n" " Enable initial response in SASL authentication.\n" "\n" " Added in 7.31.0.\n" "\n" " --service-name <name>\n" " This option allows you to change the service name for SPNEGO.\n" "\n" , stdout); fputs( " Examples: --negotiate --service-name sockd would use\n" " sockd/server-name.\n" "\n" " Added in 7.43.0.\n" " -S, --show-error\n" " When used with -s, --silent, it makes curl show an error message\n" " if it fails.\n" " -s, --silent\n" " Silent or quiet mode. Don't show progress meter or error mes-\n" " sages. Makes Curl mute. It will still output the data you ask\n" , stdout); fputs( " for, potentially even to the terminal/stdout unless you redirect\n" " it.\n" "\n" " Use -S, --show-error in addition to this option to disable\n" " progress meter but still show error messages.\n" "\n" " See also -v, --verbose and --stderr.\n" "\n" " --socks4 <host[:port]>\n" " Use the specified SOCKS4 proxy. If the port number is not speci-\n" " fied, it is assumed at port 1080.\n" "\n" , stdout); fputs( " This option overrides any previous use of -x, --proxy, as they\n" " are mutually exclusive.\n" "\n" " Since 7.21.7, this option is superfluous since you can specify a\n" " socks4 proxy with -x, --proxy using a socks4:// protocol prefix.\n" " Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n" " the same time -x, --proxy is used with an HTTP/HTTPS proxy. In\n" , stdout); fputs( " such a case curl first connects to the SOCKS proxy and then con-\n" " nects (through SOCKS) to the HTTP or HTTPS proxy.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.15.2.\n" "\n" " --socks4a <host[:port]>\n" " Use the specified SOCKS4a proxy. If the port number is not spec-\n" " ified, it is assumed at port 1080.\n" "\n" " This option overrides any previous use of -x, --proxy, as they\n" , stdout); fputs( " are mutually exclusive.\n" "\n" " Since 7.21.7, this option is superfluous since you can specify a\n" " socks4a proxy with -x, --proxy using a socks4a:// protocol pre-\n" " fix.\n" "\n" " Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n" " the same time -x, --proxy is used with an HTTP/HTTPS proxy. In\n" " such a case curl first connects to the SOCKS proxy and then con-\n" , stdout); fputs( " nects (through SOCKS) to the HTTP or HTTPS proxy.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.18.0.\n" "\n" " --socks5-basic\n" " Tells curl to use username/password authentication when connect-\n" " ing to a SOCKS5 proxy. The username/password authentication is\n" " enabled by default. Use --socks5-gssapi to force GSS-API au-\n" " thentication to SOCKS5 proxies.\n" "\n" , stdout); fputs( " Added in 7.55.0.\n" "\n" " --socks5-gssapi-nec\n" " As part of the GSS-API negotiation a protection mode is negoti-\n" " ated. RFC 1961 says in section 4.3/4.4 it should be protected,\n" " but the NEC reference implementation does not. The option\n" " --socks5-gssapi-nec allows the unprotected exchange of the pro-\n" " tection mode negotiation.\n" "\n" " Added in 7.19.4.\n" "\n" " --socks5-gssapi-service <name>\n" , stdout); fputs( " The default service name for a socks server is rcmd/server-fqdn.\n" " This option allows you to change it.\n" "\n" " Examples: --socks5 proxy-name --socks5-gssapi-service sockd\n" " would use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-\n" " service sockd/real-name would use sockd/real-name for cases\n" " where the proxy-name does not match the principal name.\n" "\n" " Added in 7.19.4.\n" "\n" " --socks5-gssapi\n" , stdout); fputs( " Tells curl to use GSS-API authentication when connecting to a\n" " SOCKS5 proxy. The GSS-API authentication is enabled by default\n" " (if curl is compiled with GSS-API support). Use --socks5-basic\n" " to force username/password authentication to SOCKS5 proxies.\n" "\n" " Added in 7.55.0.\n" "\n" " --socks5-hostname <host[:port]>\n" " Use the specified SOCKS5 proxy (and let the proxy resolve the\n" , stdout); fputs( " host name). If the port number is not specified, it is assumed\n" " at port 1080.\n" "\n" " This option overrides any previous use of -x, --proxy, as they\n" " are mutually exclusive.\n" "\n" " Since 7.21.7, this option is superfluous since you can specify a\n" " socks5 hostname proxy with -x, --proxy using a socks5h:// proto-\n" " col prefix.\n" "\n" " Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n" , stdout); fputs( " the same time -x, --proxy is used with an HTTP/HTTPS proxy. In\n" " such a case curl first connects to the SOCKS proxy and then con-\n" " nects (through SOCKS) to the HTTP or HTTPS proxy.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.18.0.\n" "\n" " --socks5 <host[:port]>\n" " Use the specified SOCKS5 proxy - but resolve the host name lo-\n" , stdout); fputs( " cally. If the port number is not specified, it is assumed at\n" " port 1080.\n" "\n" " This option overrides any previous use of -x, --proxy, as they\n" " are mutually exclusive.\n" "\n" " Since 7.21.7, this option is superfluous since you can specify a\n" " socks5 proxy with -x, --proxy using a socks5:// protocol prefix.\n" " Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n" , stdout); fputs( " the same time -x, --proxy is used with an HTTP/HTTPS proxy. In\n" " such a case curl first connects to the SOCKS proxy and then con-\n" " nects (through SOCKS) to the HTTP or HTTPS proxy.\n" "\n" " If this option is used several times, the last one will be used.\n" " This option (as well as --socks4) does not work with IPV6, FTPS\n" " or LDAP.\n" "\n" " Added in 7.18.0.\n" "\n" " -Y, --speed-limit <speed>\n" , stdout); fputs( " If a download is slower than this given speed (in bytes per sec-\n" " ond) for speed-time seconds it gets aborted. speed-time is set\n" " with -y, --speed-time and is 30 if not set.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -y, --speed-time <seconds>\n" " If a download is slower than speed-limit bytes per second during\n" " a speed-time period, the download gets aborted. If speed-time is\n" , stdout); fputs( " used, the default speed-limit will be 1 unless set with -Y,\n" " --speed-limit.\n" "\n" " This option controls transfers and thus will not affect slow\n" " connects etc. If this is a concern for you, try the --connect-\n" " timeout option.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --ssl-allow-beast\n" " This option tells curl to not work around a security flaw in the\n" , stdout); fputs( " SSL3 and TLS1.0 protocols known as BEAST. If this option isn't\n" " used, the SSL layer may use workarounds known to cause interop-\n" " erability problems with some older SSL implementations. WARNING:\n" " this option loosens the SSL security, and by using this flag you\n" " ask for exactly that.\n" "\n" " Added in 7.25.0.\n" "\n" " --ssl-no-revoke\n" " (Schannel) This option tells curl to disable certificate revoca-\n" , stdout); fputs( " tion checks. WARNING: this option loosens the SSL security, and\n" " by using this flag you ask for exactly that.\n" "\n" " Added in 7.44.0.\n" "\n" " --ssl-reqd\n" " (FTP IMAP POP3 SMTP) Require SSL/TLS for the connection. Termi-\n" " nates the connection if the server doesn't support SSL/TLS.\n" "\n" " This option was formerly known as --ftp-ssl-reqd.\n" "\n" " Added in 7.20.0.\n" "\n" , stdout); fputs( " --ssl (FTP IMAP POP3 SMTP) Try to use SSL/TLS for the connection. Re-\n" " verts to a non-secure connection if the server doesn't support\n" " SSL/TLS. See also --ftp-ssl-control and --ssl-reqd for differ-\n" " ent levels of encryption required.\n" "\n" " This option was formerly known as --ftp-ssl (Added in 7.11.0).\n" " That option name can still be used but will be removed in a fu-\n" " ture version.\n" "\n" , stdout); fputs( " Added in 7.20.0.\n" "\n" " -2, --sslv2\n" " (SSL) Forces curl to use SSL version 2 when negotiating with a\n" " remote SSL server. Sometimes curl is built without SSLv2 sup-\n" " port. SSLv2 is widely considered insecure (see RFC 6176).\n" "\n" " See also --http1.1 and --http2. -2, --sslv2 requires that the\n" " underlying libcurl was built to support TLS. This option over-\n" , stdout); fputs( " rides -3, --sslv3 and -1, --tlsv1 and --tlsv1.1 and --tlsv1.2.\n" "\n" " -3, --sslv3\n" " (SSL) Forces curl to use SSL version 3 when negotiating with a\n" " remote SSL server. Sometimes curl is built without SSLv3 sup-\n" " port. SSLv3 is widely considered insecure (see RFC 7568).\n" "\n" " See also --http1.1 and --http2. -3, --sslv3 requires that the\n" " underlying libcurl was built to support TLS. This option over-\n" , stdout); fputs( " rides -2, --sslv2 and -1, --tlsv1 and --tlsv1.1 and --tlsv1.2.\n" "\n" " --stderr\n" " Redirect all writes to stderr to the specified file instead. If\n" " the file name is a plain '-', it is instead written to stdout.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " See also -v, --verbose and -s, --silent.\n" "\n" " --styled-output\n" " Enables the automatic use of bold font styles when writing HTTP\n" , stdout); fputs( " headers to the terminal. Use --no-styled-output to switch them\n" " off.\n" "\n" " Added in 7.61.0.\n" "\n" " --suppress-connect-headers\n" " When -p, --proxytunnel is used and a CONNECT request is made\n" " don't output proxy CONNECT response headers. This option is\n" " meant to be used with -D, --dump-header or -i, --include which\n" " are used to show protocol headers in the output. It has no ef-\n" , stdout); fputs( " fect on debug options such as -v, --verbose or --trace, or any\n" " statistics.\n" "\n" " See also -D, --dump-header and -i, --include and -p, --proxytun-\n" " nel.\n" "\n" " --tcp-fastopen\n" " Enable use of TCP Fast Open (RFC7413).\n" "\n" " Added in 7.49.0.\n" "\n" " --tcp-nodelay\n" " Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n" " page for details about this option.\n" "\n" , stdout); fputs( " Since 7.50.2, curl sets this option by default and you need to\n" " explicitly switch it off if you don't want it on.\n" "\n" " Added in 7.11.2.\n" "\n" " -t, --telnet-option <opt=val>\n" " Pass options to the telnet protocol. Supported options are:\n" "\n" " TTYPE=<term> Sets the terminal type.\n" "\n" " XDISPLOC=<X display> Sets the X display location.\n" "\n" " NEW_ENV=<var,val> Sets an environment variable.\n" "\n" " --tftp-blksize <value>\n" , stdout); fputs( " (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block\n" " size that curl will try to use when transferring data to or from\n" " a TFTP server. By default 512 bytes will be used.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " Added in 7.20.0.\n" "\n" " --tftp-no-options\n" " (TFTP) Tells curl not to send TFTP options requests.\n" "\n" , stdout); fputs( " This option improves interop with some legacy servers that do\n" " not acknowledge or properly implement TFTP options. When this\n" " option is used --tftp-blksize is ignored.\n" "\n" " Added in 7.48.0.\n" "\n" " -z, --time-cond <time>\n" " (HTTP FTP) Request a file that has been modified later than the\n" " given time and date, or one that has been modified before that\n" , stdout); fputs( " time. The <date expression> can be all sorts of date strings or\n" " if it doesn't match any internal ones, it is taken as a filename\n" " and tries to get the modification date (mtime) from <file> in-\n" " stead. See the curl_getdate(3) man pages for date expression de-\n" " tails.\n" "\n" " Start the date expression with a dash (-) to make it request for\n" " a document that is older than the given date/time, default is a\n" , stdout); fputs( " document that is newer than the specified date/time.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --tls-max <VERSION>\n" " (SSL) VERSION defines maximum supported TLS version. The minimum\n" " acceptable version is set by tlsv1.0, tlsv1.1, tlsv1.2 or\n" " tlsv1.3.\n" "\n" " default\n" " Use up to recommended TLS version.\n" "\n" " 1.0 Use up to TLSv1.0.\n" , stdout); fputs( " 1.1 Use up to TLSv1.1.\n" " 1.2 Use up to TLSv1.2.\n" " 1.3 Use up to TLSv1.3.\n" "\n" " See also --tlsv1.0 and --tlsv1.1 and --tlsv1.2 and --tlsv1.3. --tls-max\n" " requires that the underlying libcurl was built to support TLS. Added in\n" " 7.54.0.\n" "\n" " --tls13-ciphers <list of TLS 1.3 ciphersuites>\n" " (TLS) Specifies which cipher suites to use in the connection if\n" , stdout); fputs( " it negotiates TLS 1.3. The list of ciphers suites must specify\n" " valid ciphers. Read up on TLS 1.3 cipher suite details on this\n" " URL:\n" "\n" " https://curl.haxx.se/docs/ssl-ciphers.html\n" "\n" " This option is currently used only when curl is built to use\n" " OpenSSL 1.1.1 or later. If you are using a different SSL backend\n" " you can try setting TLS 1.3 cipher suites by using the --ciphers\n" " option.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " --tlsauthtype <type>\n" " Set TLS authentication type. Currently, the only supported op-\n" " tion is \"SRP\", for TLS-SRP (RFC 5054). If --tlsuser and\n" " --tlspassword are specified but --tlsauthtype is not, then this\n" " option defaults to \"SRP\". This option works only if the under-\n" , stdout); fputs( " lying libcurl is built with TLS-SRP support, which requires\n" " OpenSSL or GnuTLS with TLS-SRP support.\n" "\n" " Added in 7.21.4.\n" "\n" " --tlspassword\n" " Set password for use with the TLS authentication method speci-\n" " fied with --tlsauthtype. Requires that --tlsuser also be set.\n" "\n" " Added in 7.21.4.\n" " --tlsuser <name>\n" " Set username for use with the TLS authentication method speci-\n" , stdout); fputs( " fied with --tlsauthtype. Requires that --tlspassword also is\n" " set.\n" "\n" " Added in 7.21.4.\n" "\n" " --tlsv1.0\n" " (TLS) Forces curl to use TLS version 1.0 or later when connect-\n" " ing to a remote TLS server.\n" "\n" " In old versions of curl this option was documented to allow\n" " _only_ TLS 1.0, but behavior was inconsistent depending on the\n" , stdout); fputs( " TLS library. Use --tls-max if you want to set a maximum TLS ver-\n" " sion.\n" "\n" " Added in 7.34.0.\n" "\n" " --tlsv1.1\n" " (TLS) Forces curl to use TLS version 1.1 or later when connect-\n" " ing to a remote TLS server.\n" "\n" " In old versions of curl this option was documented to allow\n" " _only_ TLS 1.1, but behavior was inconsistent depending on the\n" , stdout); fputs( " TLS library. Use --tls-max if you want to set a maximum TLS ver-\n" " sion.\n" "\n" " Added in 7.34.0.\n" "\n" " --tlsv1.2\n" " (TLS) Forces curl to use TLS version 1.2 or later when connect-\n" " ing to a remote TLS server.\n" "\n" " In old versions of curl this option was documented to allow\n" " _only_ TLS 1.2, but behavior was inconsistent depending on the\n" , stdout); fputs( " TLS library. Use --tls-max if you want to set a maximum TLS ver-\n" " sion.\n" "\n" " Added in 7.34.0.\n" "\n" " --tlsv1.3\n" " (TLS) Forces curl to use TLS version 1.3 or later when connect-\n" " ing to a remote TLS server.\n" "\n" " Note that TLS 1.3 is only supported by a subset of TLS backends.\n" " At the time of this writing, they are BoringSSL, NSS, and Secure\n" , stdout); fputs( " Transport (on iOS 11 or later, and macOS 10.13 or later).\n" "\n" " Added in 7.52.0.\n" "\n" " -1, --tlsv1\n" " (SSL) Tells curl to use at least TLS version 1.x when negotiat-\n" " ing with a remote TLS server. That means TLS version 1.0 or\n" " higher\n" "\n" " See also --http1.1 and --http2. -1, --tlsv1 requires that the\n" " underlying libcurl was built to support TLS. This option over-\n" , stdout); fputs( " rides --tlsv1.1 and --tlsv1.2 and --tlsv1.3.\n" "\n" " --tr-encoding\n" " (HTTP) Request a compressed Transfer-Encoding response using one\n" " of the algorithms curl supports, and uncompress the data while\n" " receiving it.\n" "\n" " Added in 7.21.6.\n" "\n" " --trace-ascii <file>\n" " Enables a full trace dump of all incoming and outgoing data, in-\n" " cluding descriptive information, to the given output file. Use\n" , stdout); fputs( " \"-\" as filename to have the output sent to stdout.\n" "\n" " This is very similar to --trace, but leaves out the hex part and\n" " only shows the ASCII part of the dump. It makes smaller output\n" " that might be easier to read for untrained humans.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " This option overrides --trace and -v, --verbose.\n" "\n" " --trace-time\n" , stdout); fputs( " Prepends a time stamp to each trace or verbose line that curl\n" " displays.\n" "\n" " Added in 7.14.0.\n" "\n" " --trace <file>\n" " Enables a full trace dump of all incoming and outgoing data, in-\n" " cluding descriptive information, to the given output file. Use\n" " \"-\" as filename to have the output sent to stdout. Use \"%\" as\n" " filename to have the output sent to stderr.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " This option overrides -v, --verbose and --trace-ascii.\n" "\n" " --unix-socket <path>\n" " (HTTP) Connect through this Unix domain socket, instead of using\n" " the network.\n" "\n" " Added in 7.40.0.\n" "\n" " -T, --upload-file <file>\n" " This transfers the specified local file to the remote URL. If\n" , stdout); fputs( " there is no file part in the specified URL, curl will append the\n" " local file name. NOTE that you must use a trailing / on the last\n" " directory to really prove to Curl that there is no file name or\n" " curl will think that your last directory name is the remote file\n" " name to use. That will most likely cause the upload operation to\n" " fail. If this is used on an HTTP(S) server, the PUT command will\n" " be used.\n" "\n" , stdout); fputs( " Use the file name \"-\" (a single dash) to use stdin instead of a\n" " given file. Alternately, the file name \".\" (a single period)\n" " may be specified instead of \"-\" to use stdin in non-blocking\n" " mode to allow reading server output while stdin is being up-\n" " loaded.\n" "\n" " You can specify one -T, --upload-file for each URL on the com-\n" " mand line. Each -T, --upload-file + URL pair specifies what to\n" , stdout); fputs( " upload and to where. curl also supports \"globbing\" of the -T,\n" " --upload-file argument, meaning that you can upload multiple\n" " files to a single URL by using the same URL globbing style sup-\n" " ported in the URL, like this:\n" "\n" " curl --upload-file \"{file1,file2}\" http://www.example.com\n" "\n" " or even\n" "\n" " curl -T \"img[1-1000].png\" ftp://ftp.example.com/upload/\n" "\n" , stdout); fputs( " When uploading to an SMTP server: the uploaded data is assumed\n" " to be RFC 5322 formatted. It has to feature the necessary set of\n" " headers and mail body formatted correctly by the user as curl\n" " will not transcode nor encode it further in any way.\n" "\n" " --url <url>\n" " Specify a URL to fetch. This option is mostly handy when you\n" " want to specify URL(s) in a config file.\n" "\n" , stdout); fputs( " If the given URL is missing a scheme name (such as \"http://\" or\n" " \"ftp://\" etc) then curl will make a guess based on the host. If\n" " the outermost sub-domain name matches DICT, FTP, IMAP, LDAP,\n" " POP3 or SMTP then that protocol will be used, otherwise HTTP\n" " will be used. Since 7.45.0 guessing can be disabled by setting a\n" " default protocol, see --proto-default for details.\n" "\n" , stdout); fputs( " This option may be used any number of times. To control where\n" " this URL is written, use the -o, --output or the -O, --remote-\n" " name options.\n" "\n" " -B, --use-ascii\n" " (FTP LDAP) Enable ASCII transfer. For FTP, this can also be en-\n" " forced by using a URL that ends with \";type=A\". This option\n" " causes data sent to stdout to be in text mode for win32 systems.\n" "\n" " -A, --user-agent <name>\n" , stdout); fputs( " (HTTP) Specify the User-Agent string to send to the HTTP server.\n" " To encode blanks in the string, surround the string with single\n" " quote marks. This header can also be set with the -H, --header\n" " or the --proxy-header options.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -u, --user <user:password>\n" " Specify the user name and password to use for server authentica-\n" , stdout); fputs( " tion. Overrides -n, --netrc and --netrc-optional.\n" "\n" " If you simply specify the user name, curl will prompt for a\n" " password.\n" "\n" " The user name and passwords are split up on the first colon,\n" " which makes it impossible to use a colon in the user name with\n" " this option. The password can, still.\n" "\n" " On systems where it works, curl will hide the given option argu-\n" , stdout); fputs( " ment from process listings. This is not enough to protect cre-\n" " dentials from possibly getting seen by other users on the same\n" " system as they will still be visible for a brief moment before\n" " cleared. Such sensitive data should be retrieved from a file in-\n" " stead or similar and never used in clear text in a command line.\n" " When using Kerberos V5 with a Windows based server you should\n" , stdout); fputs( " include the Windows domain name in the user name, in order for\n" " the server to successfully obtain a Kerberos Ticket. If you\n" " don't then the initial authentication handshake may fail.\n" "\n" " When using NTLM, the user name can be specified simply as the\n" " user name, without the domain, if there is a single domain and\n" " forest in your setup for example.\n" "\n" , stdout); fputs( " To specify the domain name use either Down-Level Logon Name or\n" " UPN (User Principal Name) formats. For example, EXAMPLE\\user and\n" " user@example.com respectively.\n" "\n" " If you use a Windows SSPI-enabled curl binary and perform Ker-\n" " beros V5, Negotiate, NTLM or Digest authentication then you can\n" " tell curl to select the user name and password from your envi-\n" , stdout); fputs( " ronment by specifying a single colon with this option: \"-u :\".\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -v, --verbose\n" " Makes curl verbose during the operation. Useful for debugging\n" " and seeing what's going on \"under the hood\". A line starting\n" " with '>' means \"header data\" sent by curl, '<' means \"header\n" " data\" received by curl that is hidden in normal cases, and a\n" , stdout); fputs( " line starting with '*' means additional info provided by curl.\n" "\n" " If you only want HTTP headers in the output, -i, --include might\n" " be the option you're looking for.\n" "\n" " If you think this option still doesn't give you enough details,\n" " consider using --trace or --trace-ascii instead.\n" "\n" " Use -s, --silent to make curl really quiet.\n" "\n" " See also -i, --include. This option overrides --trace and\n" , stdout); fputs( " --trace-ascii.\n" "\n" " -V, --version\n" " Displays information about curl and the libcurl version it uses.\n" " The first line includes the full version of curl, libcurl and\n" " other 3rd party libraries linked with the executable.\n" "\n" " The second line (starts with \"Protocols:\") shows all protocols\n" " that libcurl reports to support.\n" "\n" " The third line (starts with \"Features:\") shows specific features\n" , stdout); fputs( " libcurl reports to offer. Available features include:\n" "\n" " IPv6 You can use IPv6 with this.\n" "\n" " krb4 Krb4 for FTP is supported.\n" "\n" " SSL SSL versions of various protocols are supported, such as\n" " HTTPS, FTPS, POP3S and so on.\n" "\n" " libz Automatic decompression of compressed files over HTTP is\n" " supported.\n" "\n" " NTLM NTLM authentication is supported.\n" "\n" , stdout); fputs( " Debug This curl uses a libcurl built with Debug. This enables\n" " more error-tracking and memory debugging etc. For curl-\n" " developers only!\n" "\n" " AsynchDNS\n" " This curl uses asynchronous name resolves. Asynchronous\n" " name resolves can be done using either the c-ares or the\n" " threaded resolver backends.\n" "\n" " SPNEGO SPNEGO authentication is supported.\n" "\n" , stdout); fputs( " Largefile\n" " This curl supports transfers of large files, files larger\n" " than 2GB.\n" "\n" " IDN This curl supports IDN - international domain names.\n" "\n" " GSS-API\n" " GSS-API is supported.\n" "\n" " SSPI SSPI is supported.\n" "\n" " TLS-SRP\n" " SRP (Secure Remote Password) authentication is supported\n" " for TLS.\n" "\n" , stdout); fputs( " HTTP2 HTTP/2 support has been built-in.\n" "\n" " UnixSockets\n" " Unix sockets support is provided.\n" "\n" " HTTPS-proxy\n" " This curl is built to support HTTPS proxy.\n" "\n" " Metalink\n" " This curl supports Metalink (both version 3 and 4 (RFC\n" " 5854)), which describes mirrors and hashes. curl will\n" " use mirrors for failover if there are errors (such as the\n" , stdout); fputs( " file or server not being available).\n" "\n" " PSL PSL is short for Public Suffix List and means that this\n" " curl has been built with knowledge about \"public suf-\n" " fixes\".\n" "\n" " MultiSSL\n" " This curl supports multiple TLS backends.\n" "\n" " -w, --write-out <format>\n" " Make curl display information on stdout after a completed trans-\n" , stdout); fputs( " fer. The format is a string that may contain plain text mixed\n" " with any number of variables. The format can be specified as a\n" " literal \"string\", or you can have curl read the format from a\n" " file with \"@filename\" and to tell curl to read the format from\n" " stdin you write \"@-\".\n" "\n" " The variables present in the output format will be substituted\n" , stdout); fputs( " by the value or text that curl thinks fit, as described below.\n" " All variables are specified as %{variable_name} and to output a\n" " normal % you just write them as %%. You can output a newline by\n" " using \\n, a carriage return with \\r and a tab space with \\t.\n" "\n" " The output will be written to standard output, but this can be\n" " switched to standard error by using %{stderr}.\n" "\n" , stdout); fputs( " NOTE: The %-symbol is a special symbol in the win32-environment,\n" " where all occurrences of % must be doubled when using this op-\n" " tion.\n" "\n" " The variables available are:\n" "\n" " content_type The Content-Type of the requested document, if\n" " there was any.\n" "\n" " filename_effective\n" " The ultimate filename that curl writes out to.\n" , stdout); fputs( " This is only meaningful if curl is told to write\n" " to a file with the -O, --remote-name or -o,\n" " --output option. It's most useful in combination\n" " with the -J, --remote-header-name option. (Added\n" " in 7.26.0)\n" "\n" " ftp_entry_path The initial path curl ended up in when logging on\n" , stdout); fputs( " to the remote FTP server. (Added in 7.15.4)\n" "\n" " http_code The numerical response code that was found in the\n" " last retrieved HTTP(S) or FTP(s) transfer. In\n" " 7.18.2 the alias response_code was added to show\n" " the same info.\n" "\n" " http_connect The numerical code that was found in the last re-\n" , stdout); fputs( " sponse (from a proxy) to a curl CONNECT request.\n" " (Added in 7.12.4)\n" "\n" " http_version The http version that was effectively used.\n" " (Added in 7.50.0)\n" "\n" " local_ip The IP address of the local end of the most re-\n" " cently done connection - can be either IPv4 or\n" " IPv6 (Added in 7.29.0)\n" "\n" , stdout); fputs( " local_port The local port number of the most recently done\n" " connection (Added in 7.29.0)\n" "\n" " num_connects Number of new connects made in the recent trans-\n" " fer. (Added in 7.12.3)\n" "\n" " num_redirects Number of redirects that were followed in the re-\n" " quest. (Added in 7.12.3)\n" "\n" " proxy_ssl_verify_result\n" , stdout); fputs( " The result of the HTTPS proxy's SSL peer certifi-\n" " cate verification that was requested. 0 means the\n" " verification was successful. (Added in 7.52.0)\n" "\n" " redirect_url When an HTTP request was made without -L, --loca-\n" " tion to follow redirects (or when --max-redir is\n" " met), this variable will show the actual URL a\n" , stdout); fputs( " redirect would have gone to. (Added in 7.18.2)\n" "\n" " remote_ip The remote IP address of the most recently done\n" " connection - can be either IPv4 or IPv6 (Added in\n" " 7.29.0)\n" "\n" " remote_port The remote port number of the most recently done\n" " connection (Added in 7.29.0)\n" "\n" " scheme The URL scheme (sometimes called protocol) that\n" , stdout); fputs( " was effectively used (Added in 7.52.0)\n" "\n" " size_download The total amount of bytes that were downloaded.\n" "\n" " size_header The total amount of bytes of the downloaded head-\n" " ers.\n" "\n" " size_request The total amount of bytes that were sent in the\n" " HTTP request.\n" "\n" " size_upload The total amount of bytes that were uploaded.\n" "\n" , stdout); fputs( " speed_download The average download speed that curl measured for\n" " the complete download. Bytes per second.\n" "\n" " speed_upload The average upload speed that curl measured for\n" " the complete upload. Bytes per second.\n" "\n" " ssl_verify_result\n" " The result of the SSL peer certificate verifica-\n" " tion that was requested. 0 means the verification\n" , stdout); fputs( " was successful. (Added in 7.19.0)\n" "\n" " stderr From this point on, the -w, --write-out output\n" " will be written to standard error. (Added in\n" " 7.63.0)\n" "\n" " stdout From this point on, the -w, --write-out output\n" " will be written to standard output. This is the\n" " default, but can be used to switch back after\n" , stdout); fputs( " switching to stderr. (Added in 7.63.0)\n" "\n" " time_appconnect\n" " The time, in seconds, it took from the start un-\n" " til the SSL/SSH/etc connect/handshake to the re-\n" " mote host was completed. (Added in 7.19.0)\n" "\n" " time_connect The time, in seconds, it took from the start un-\n" " til the TCP connect to the remote host (or proxy)\n" , stdout); fputs( " was completed.\n" "\n" " time_namelookup\n" " The time, in seconds, it took from the start un-\n" " til the name resolving was completed.\n" "\n" " time_pretransfer\n" " The time, in seconds, it took from the start un-\n" " til the file transfer was just about to begin.\n" " This includes all pre-transfer commands and nego-\n" , stdout); fputs( " tiations that are specific to the particular pro-\n" " tocol(s) involved.\n" "\n" " time_redirect The time, in seconds, it took for all redirection\n" " steps including name lookup, connect, pretransfer\n" " and transfer before the final transaction was\n" " started. time_redirect shows the complete execu-\n" , stdout); fputs( " tion time for multiple redirections. (Added in\n" " 7.12.3)\n" "\n" " time_starttransfer\n" " The time, in seconds, it took from the start un-\n" " til the first byte was just about to be trans-\n" " ferred. This includes time_pretransfer and also\n" " the time the server needed to calculate the re-\n" , stdout); fputs( " sult.\n" "\n" " time_total The total time, in seconds, that the full opera-\n" " tion lasted.\n" "\n" " url_effective The URL that was fetched last. This is most mean-\n" " ingful if you've told curl to follow location:\n" " headers.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --xattr\n" , stdout); fputs( " When saving output to a file, this option tells curl to store\n" " certain file metadata in extended file attributes. Currently,\n" " the URL is stored in the xdg.origin.url attribute and, for HTTP,\n" " the content type is stored in the mime_type attribute. If the\n" " file system does not support extended attributes, a warning is\n" " issued.\n" "\n" "FILES\n" " ~/.curlrc\n" , stdout); fputs( " Default config file, see -K, --config for details.\n" "\n" "ENVIRONMENT\n" " The environment variables can be specified in lower case or upper case.\n" " The lower case version has precedence. http_proxy is an exception as it\n" " is only available in lower case.\n" "\n" " Using an environment variable to set the proxy has the same effect as\n" " using the -x, --proxy option.\n" "\n" " http_proxy [protocol://]<host>[:port]\n" " Sets the proxy server to use for HTTP.\n" , stdout); fputs( " HTTPS_PROXY [protocol://]<host>[:port]\n" " Sets the proxy server to use for HTTPS.\n" "\n" " [url-protocol]_PROXY [protocol://]<host>[:port]\n" " Sets the proxy server to use for [url-protocol], where the pro-\n" " tocol is a protocol that curl supports and as specified in a\n" " URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP etc.\n" "\n" " ALL_PROXY [protocol://]<host>[:port]\n" " Sets the proxy server to use if no protocol-specific proxy is\n" , stdout); fputs( " set.\n" "\n" " NO_PROXY <comma-separated list of hosts/domains>\n" " list of host names that shouldn't go through any proxy. If set\n" " to an asterisk '*' only, it matches all hosts. Each name in this\n" " list is matched as either a domain name which contains the host-\n" " name, or the hostname itself.\n" "\n" " This environment variable disables use of the proxy even when\n" , stdout); fputs( " specified with the -x, --proxy option. That is NO_PROXY=di-\n" " rect.example.com curl -x http://proxy.example.com http://di-\n" " rect.example.com accesses the target URL directly, and\n" " NO_PROXY=direct.example.com curl -x http://proxy.example.com\n" " http://somewhere.example.com accesses the target URL through the\n" " proxy.\n" "\n" " The list of host names can also be include numerical IP ad-\n" , stdout); fputs( " dresses, and IPv6 versions should then be given without enclos-\n" " ing brackets.\n" "\n" "PROXY PROTOCOL PREFIXES\n" " Since curl version 7.21.7, the proxy string may be specified with a\n" " protocol:// prefix to specify alternative proxy protocols.\n" "\n" " If no protocol is specified in the proxy string or if the string\n" " doesn't match a supported one, the proxy will be treated as an HTTP\n" " proxy.\n" "\n" , stdout); fputs( " The supported proxy protocol prefixes are as follows:\n" "\n" " http://\n" " Makes it use it as an HTTP proxy. The default if no scheme pre-\n" " fix is used.\n" "\n" " https://\n" " Makes it treated as an HTTPS proxy.\n" "\n" " socks4://\n" " Makes it the equivalent of --socks4\n" "\n" " socks4a://\n" " Makes it the equivalent of --socks4a\n" "\n" " socks5://\n" " Makes it the equivalent of --socks5\n" "\n" " socks5h://\n" , stdout); fputs( " Makes it the equivalent of --socks5-hostname\n" "\n" "EXIT CODES\n" " There are a bunch of different error codes and their corresponding er-\n" " ror messages that may appear during bad conditions. At the time of this\n" " writing, the exit codes are:\n" "\n" " 1 Unsupported protocol. This build of curl has no support for this\n" " protocol.\n" "\n" " 2 Failed to initialize.\n" "\n" " 3 URL malformed. The syntax was not correct.\n" "\n" , stdout); fputs( " 4 A feature or option that was needed to perform the desired re-\n" " quest was not enabled or was explicitly disabled at build-time.\n" " To make curl able to do this, you probably need another build of\n" " libcurl!\n" "\n" " 5 Couldn't resolve proxy. The given proxy host could not be re-\n" " solved.\n" "\n" " 6 Couldn't resolve host. The given remote host was not resolved.\n" "\n" " 7 Failed to connect to host.\n" "\n" , stdout); fputs( " 8 Weird server reply. The server sent data curl couldn't parse.\n" "\n" " 9 FTP access denied. The server denied login or denied access to\n" " the particular resource or directory you wanted to reach. Most\n" " often you tried to change to a directory that doesn't exist on\n" " the server.\n" "\n" " 10 FTP accept failed. While waiting for the server to connect back\n" " when an active FTP session is used, an error code was sent over\n" , stdout); fputs( " the control connection or similar.\n" "\n" " 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the\n" " PASS request.\n" "\n" " 12 During an active FTP session while waiting for the server to\n" " connect back to curl, the timeout expired.\n" "\n" " 13 FTP weird PASV reply, Curl couldn't parse the reply sent to the\n" " PASV request.\n" "\n" " 14 FTP weird 227 format. Curl couldn't parse the 227-line the\n" , stdout); fputs( " server sent.\n" "\n" " 15 FTP can't get host. Couldn't resolve the host IP we got in the\n" " 227-line.\n" "\n" " 16 HTTP/2 error. A problem was detected in the HTTP2 framing layer.\n" " This is somewhat generic and can be one out of several problems,\n" " see the error message for details.\n" "\n" " 17 FTP couldn't set binary. Couldn't change transfer method to bi-\n" " nary.\n" "\n" , stdout); fputs( " 18 Partial file. Only a part of the file was transferred.\n" "\n" " 19 FTP couldn't download/access the given file, the RETR (or simi-\n" " lar) command failed.\n" "\n" " 21 FTP quote error. A quote command returned error from the server.\n" " 22 HTTP page not retrieved. The requested url was not found or re-\n" " turned another error with the HTTP error code being 400 or\n" " above. This return code only appears if -f, --fail is used.\n" "\n" , stdout); fputs( " 23 Write error. Curl couldn't write data to a local filesystem or\n" " similar.\n" "\n" " 25 FTP couldn't STOR file. The server denied the STOR operation,\n" " used for FTP uploading.\n" "\n" " 26 Read error. Various reading problems.\n" "\n" " 27 Out of memory. A memory allocation request failed.\n" "\n" " 28 Operation timeout. The specified time-out period was reached ac-\n" " cording to the conditions.\n" "\n" , stdout); fputs( " 30 FTP PORT failed. The PORT command failed. Not all FTP servers\n" " support the PORT command, try doing a transfer using PASV in-\n" " stead!\n" "\n" " 31 FTP couldn't use REST. The REST command failed. This command is\n" " used for resumed FTP transfers.\n" "\n" " 33 HTTP range error. The range \"command\" didn't work.\n" "\n" " 34 HTTP post error. Internal post-request generation error.\n" "\n" , stdout); fputs( " 35 SSL connect error. The SSL handshaking failed.\n" "\n" " 36 Bad download resume. Couldn't continue an earlier aborted down-\n" " load.\n" "\n" " 37 FILE couldn't read file. Failed to open the file. Permissions?\n" "\n" " 38 LDAP cannot bind. LDAP bind operation failed.\n" "\n" " 39 LDAP search failed.\n" "\n" " 41 Function not found. A required LDAP function was not found.\n" "\n" " 42 Aborted by callback. An application told curl to abort the oper-\n" , stdout); fputs( " ation.\n" "\n" " 43 Internal error. A function was called with a bad parameter.\n" "\n" " 45 Interface error. A specified outgoing interface could not be\n" " used.\n" "\n" " 47 Too many redirects. When following redirects, curl hit the maxi-\n" " mum amount.\n" "\n" " 48 Unknown option specified to libcurl. This indicates that you\n" " passed a weird option to curl that was passed on to libcurl and\n" , stdout); fputs( " rejected. Read up in the manual!\n" "\n" " 49 Malformed telnet option.\n" "\n" " 51 The peer's SSL certificate or SSH MD5 fingerprint was not OK.\n" "\n" " 52 The server didn't reply anything, which here is considered an\n" " error.\n" "\n" " 53 SSL crypto engine not found.\n" "\n" " 54 Cannot set SSL crypto engine as default.\n" "\n" " 55 Failed sending network data.\n" "\n" " 56 Failure in receiving network data.\n" "\n" , stdout); fputs( " 58 Problem with the local certificate.\n" "\n" " 59 Couldn't use specified SSL cipher.\n" "\n" " 60 Peer certificate cannot be authenticated with known CA certifi-\n" " cates.\n" "\n" " 61 Unrecognized transfer encoding.\n" "\n" " 62 Invalid LDAP URL.\n" "\n" " 63 Maximum file size exceeded.\n" "\n" " 64 Requested FTP SSL level failed.\n" "\n" " 65 Sending the data requires a rewind that failed.\n" "\n" " 66 Failed to initialise SSL Engine.\n" "\n" , stdout); fputs( " 67 The user name, password, or similar was not accepted and curl\n" " failed to log in.\n" "\n" " 68 File not found on TFTP server.\n" "\n" " 69 Permission problem on TFTP server.\n" "\n" " 70 Out of disk space on TFTP server.\n" "\n" " 71 Illegal TFTP operation.\n" "\n" " 72 Unknown TFTP transfer ID.\n" "\n" " 73 File already exists (TFTP).\n" "\n" " 74 No such user (TFTP).\n" "\n" " 75 Character conversion failed.\n" "\n" , stdout); fputs( " 76 Character conversion functions required.\n" "\n" " 77 Problem with reading the SSL CA cert (path? access rights?).\n" "\n" " 78 The resource referenced in the URL does not exist.\n" "\n" " 79 An unspecified error occurred during the SSH session.\n" "\n" " 80 Failed to shut down the SSL connection.\n" "\n" " 82 Could not load CRL file, missing or wrong format (added in\n" " 7.19.0).\n" "\n" " 83 Issuer check failed (added in 7.19.0).\n" "\n" , stdout); fputs( " 84 The FTP PRET command failed\n" "\n" " 85 RTSP: mismatch of CSeq numbers\n" "\n" " 86 RTSP: mismatch of Session Identifiers\n" "\n" " 87 unable to parse FTP file list\n" "\n" " 88 FTP chunk callback reported error\n" "\n" " 89 No connection available, the session will be queued\n" "\n" " 90 SSL public key does not matched pinned public key\n" "\n" " 91 Invalid SSL certificate status.\n" "\n" " 92 Stream error in HTTP/2 framing layer.\n" "\n" , stdout); fputs( " XX More error codes will appear here in future releases. The exist-\n" " ing ones are meant to never change.\n" "\n" "AUTHORS / CONTRIBUTORS\n" " Daniel Stenberg is the main author, but the whole list of contributors\n" " is found in the separate THANKS file.\n" "\n" "WWW\n" " https://curl.haxx.se\n" "\n" "SEE ALSO\n" " ftp(1), wget(1)\n" |
︙ | ︙ | |||
4340 4341 4342 4343 4344 4345 4346 | */ #ifdef USE_MANUAL #include "tool_hugehelp.h" #include <zlib.h> #include "memdebug.h" /* keep this as LAST include */ static const unsigned char hugehelpgz[] = { /* This mumbo-jumbo is the huge help text compressed with gzip. | | | | | | | | | | | | > | < | | | < | > | | | | | | | | | | | | | | | | | | < | > | | | | | | < | > | | | | | < | > | | | | | | | | | | | < | > | | < | < | > | | > | > | < | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | < | | | > | | | | > > | | | | | | > | | < | | | | | | | | | | | | | | | | | | > > > > | | | | | | | | | | | | | | | | | | | | | | | < | | > | | | | < < < | | | | | | | < | | | > | | | < | < < < | | | | | | > | > > | > | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | > | | | | | | | | | | | | | | < < < < | < | > | < < < | < > | | < < > | | > | < < | < > | > > > | > > > | | | | | | | | < | | > | | | < | | > | | | | | | | | | | | > > > | | | | | | > | | | | < | | | | | | > | | < | | > | | < | | | | | | | | | | | | | < < | | | > | > | | | | | | | | | < | < | > | > | | | | | | | | | | | | | | | | | | | | | | | | | > | < | | | | | | < | < | | | | > | < < < < | | | < < | | < > > > | | < | > | | | > > > | | | | | | | | | | | | | | | | < | | < | | > | < | < | < > | | | > | | > > | > | < | | > < | < | < < | | | | | | | > | > > > | | | | | | | < < < < | | > > > > | | | > | | | | | < | | > | | | | > > | | < < | | | | | | < | > | | | | | < | < | | < < | < | | | < < > | < | > | < > > | | | < < < | > | > > | > | < > | > | | > > > | | | | | | | | > | | < | < | < < < < | | | > > > > > | | | | | > > > | > | | | | | | | | | | | < < | | > | > | | | | | | | | | | | | | | | < < | | | | | | | | | | | | | | | | | | | > | < | | | < | > | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | > | | > > | | | | | | | > > | | < | < | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | < | > > | < | | | | | | | | | | < | | > | | | | | > | < | | | | | | > | < | | | | | | < < < < | < | < < < < < | < | < < > > > | | > > > > > > > > > > > < | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < | < | | | > | < | | > > > | | | | | | > | | < | | | | > | | | | | | | | | | | | | | | < | > > | | < | | | > | < > | < | | | | | | | < | > | | < | > | | | | | | < < | < | | > | | < | > > | < > | | > | > | > | < | | > | < | | | | | | | < | | > > | < | | | > | | < | > | < | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | > | | | | > | | < | | | | < | | | > | | | | | | | | | | | | | | | | | > | | | < | | > | | | | | | | | | | | > | < | | | | > > | | > | < | < | | | | | | | | | | | | | | | | | | | | | < | > | | | < | | > | | | < | < < < < < < | < | < | < < < < | | | | | | | | < > > > | > > | > > | > > > | > | > > | > | | | | | | | | | | | > | | < | | | | | | | | | | | | | | | | | > | | | | | | | | | > | < | | | < | > | < | > | | | | | | | | | | < | | | | | | | | < | > | | | | | | | | | | | | | | | | | | | | | < < | | | | | | | > | < | | | | < | > | | | > | | | < | | > | < | | > | | | | | | | | | | | < < | | | < > | | | > > | | | | | | | | | | | | > | | | | | | | | | | | | | > | | < | | | | | | | | | | | | | | > | | | | | < | > | | | | | > | | < < | < | | > | | | < | | > > | | | | | | | | | | | | | | | | | < | > | | | | | | | | | | | > | > > > | | | | | | | | | | | | | > | < | | | | | > | | < < | > | | | | | | | < | | | | | | | < | > | | | | | | | | | | | | | | | < | < < > | | < > | | | | | | | | | | > | < | | | | | | | | | | > | < | | | | | | | | > | | | | | | | | | | < | > | | | | | | | | | | | | < | | > | | | > | | | | | | | | | | | | | < | | > | | | | | | | | | | | | | | | < < | | | | | | | | | | | | | < | > | | | | | < | > | | | > | < | | | | | | | | | | < | > | | | > > | | < | < | > | < | | | | | | > | > > | | < | < | | > | | | | | | | | | | | | | | | | | | | < | > | | | | < < | | | | | | | | | | | | | | | | | | | > | < | | | | | | | | | > | | | > | | > | < | < | | | | | | | | | | | | | | | | | | > | < | | < < | < | | | | | | | | | | | > | | < | | | | | | | | | | | | | > | < > > > | > | > | < > | | < | < | < | > | | | | | | | | | | | | | | | | > | < > | | | | | | > | < | < | > | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | < | | | | > | | < | | | | | | > | > | < > > > | | | | | | | | | < | > | | | | | > | | < | | | | | | | | > | < | > | < | > | | | | | | | | | | | | | | | | | | | | | < < < < < < | > | | < > | < > > | | < | | | | | | | | | > | < > | | < | > | | < > | > > > > > > > > > | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | < | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | < < | < < < < | | | < < < | < > | | > > > > > > > > > | | | | | | | | | | | | | | | | | | | < | | < | | > > | | | | | | > | < | | < < < | < | < < < < < < > | | < | > | | | < > | | > > | > > > > > > > | | | > < < < | | | > | | | > > | | | | | | | | | | | | | | | | | | | | | | < < < < < < < < < < | | | < < | < < > | > > | > | | | > > > > > | > > > > > > > > > | < > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < | | > | | > | | < < | | | | | > | | < | | | | | | | | | | > | > > | | < < | | | | | | < < | | > | > | > | < | | | | | | | | < | > | | | | < | < | | | | | > | < | | | | | | | | | | | | | | | | < | > | | | | | > > | | | | | > | < | | | | | < | | | > | | | | | | | | | | | | | | | | | | | | | > | | < | | > > | | < < < | > | | | | | | | | | | | | > > | | | | | < | | < | > | > | | | | | | | | | | | | | | | | > | < | | | | | | | | | | < | > | | | | | | | | | | | | | | | | | | > | < | | | | | | | | | | | | | | | | | | < < | | > > | | | | | | | | | | | | | | | | | | > | | < | | | > | | < | | | | | | | | | < | | > | | | | | | | | | < | | > | < | | > | | | | | | | < | > | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | > | < < | | > | | | | | | | | > > | | | | | | | | | | | | | > | < | | < | > | | | | | | | | | | | | < | | | | | < < < | | | < > | | > | > > | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | > | > > | > > | > > | | < | < < | < | > > | | | < | | | | | | | | | | > | | < | < | > | | | | | | | | < < | | | | | | | > | < | | | | | | | | | | | | | < | > | | | | | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | < | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | > | | < | | | | < | > | | | | | | | | | | | | | | | < | > | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | < | > | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | > | < | | | | | | | | > | | < | | | | | | | | | | | | | | | | | > | < | | | | | | | | | | | | | | | > | | | | | | | | | | | | | > | < | | | | | | | | | | | | | | < | | | | | | | | | > | < | | | | | | | | | | | | | > > | > > > | | < | | | | | | | | | | | | | | | | | < | | > | | | | | | | | | | | | < < < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | | | | | | | < | > | > | < | | | | | | | | | | | < | | | | | < | | | > | | | | | | | < | > | | | | | | | | | | | | | | | > | < | | | | | | | | | | | | | | | | | | | | | | | | | > | > | | | | | | | | | | | | | | | | | | > | | < | | | | | | | | > > | | | | | | | | > | | < | | | | | | | | | | | | | | | < | | < > | | < | | | | | | | | | | | | | | | | > | | < | | | | | < | | > | | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | > | < | | < > | < | | < | | > > | < | | | > > > | < | < > > | | | | | | | | < | > | > | | < < | > | | | | | | | | | | > > > | | < < < < < < | | | | | | | | | | | | | | | | | | | | | | < | | > | | > > > > > | | < | | > | < > | | < | | | | | | < | < | | > > | | | > > | | | < < < < < | < > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | > | > > > > | | | < | | < | < < < | < | < | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | > > | > > > | < < | > > | | | | | | < | < < < < | | | | | | | | | | | | | | | | | | | | < | > | | | | | > > | < > > > | | | < < < < | | | | | | | | > | | | | | | | | | | | | | | | | | | < | > | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | > > > > | > | | < | | | < < | < < | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | < | > | | | | | | | | | | > | | < | | | > | < | | | | | | > > | | > > | | | < < > | | | | | | | | | | | | | | | < | | | > | | | | | | | | | | | | < | | | | | | | | | | | | < | > | | | | | | | | | > > | | > > | > | | | | | | | | < < < | > > > | | | | | | | | > | | < | | | | | | | | < < | | < | < | > | | > | | | | < | > | | | | | | | | | | | < | | > | | < | | | | | < | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | < | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | < | < < < > | | | > | < | > > | | | 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 | */ #ifdef USE_MANUAL #include "tool_hugehelp.h" #include <zlib.h> #include "memdebug.h" /* keep this as LAST include */ static const unsigned char hugehelpgz[] = { /* This mumbo-jumbo is the huge help text compressed with gzip. Thanks to this operation, the size of this data shrank from 169779 to 47597 bytes. You can disable the use of compressed help texts by NOT passing -c to the mkhelp.pl tool. */ 0x1f, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd, 0x6b, 0x77, 0xdb, 0x46, 0x96, 0x2e, 0xfc, 0x3d, 0xbf, 0x02, 0xcd, 0x5e, 0x7d, 0x24, 0x4d, 0x93, 0xd4, 0xdd, 0x8e, 0x15, 0x39, 0x13, 0x45, 0x96, 0x63, 0x4d, 0x64, 0x49, 0x23, 0xca, 0x49, 0xfa, 0x24, 0x59, 0x5e, 0x20, 0x09, 0x52, 0x68, 0x91, 0x00, 0x1b, 0x00, 0x75, 0xe9, 0x9e, 0x3e, 0xbf, 0xfd, 0xdd, 0xd7, 0xaa, 0x02, 0xaa, 0x40, 0x29, 0xe9, 0x38, 0x73, 0x2e, 0x6f, 0xcf, 0x9a, 0xd8, 0x96, 0x80, 0x42, 0x5d, 0x76, 0xed, 0xfb, 0x7e, 0x76, 0x14, 0x3d, 0xf5, 0xbf, 0x8f, 0xf4, 0xff, 0x1f, 0xe1, 0x7f, 0xf0, 0xe7, 0x67, 0x51, 0x74, 0x59, 0xe4, 0x7f, 0x4d, 0x46, 0x55, 0xf8, 0xd9, 0x8f, 0x1f, 0xff, 0x2b, 0xe2, 0xff, 0x83, 0x77, 0x7e, 0x82, 0x3f, 0x3f, 0x5b, 0x39, 0xf6, 0x66, 0x64, 0x5f, 0xf8, 0xaf, 0x8f, 0x1b, 0xd1, 0x53, 0x2f, 0xfc, 0x57, 0xb4, 0x4e, 0x2f, 0x7c, 0x94, 0x2f, 0x1c, 0xe2, 0xdf, 0x3f, 0x7e, 0x5c, 0xfd, 0x91, 0x9f, 0x70, 0x56, 0xf8, 0x9f, 0x4d, 0x7c, 0xef, 0xa7, 0x8f, 0xf8, 0x57, 0xf8, 0xc9, 0x67, 0x9f, 0x9d, 0x1f, 0xbd, 0x3f, 0xd1, 0x57, 0x47, 0xcb, 0x62, 0x16, 0xf5, 0xa2, 0xaa, 0x88, 0xb3, 0x72, 0x92, 0x14, 0x51, 0x1c, 0x7d, 0xb8, 0x3a, 0xfb, 0xec, 0xb3, 0xc1, 0x5f, 0xce, 0x2f, 0x2e, 0x07, 0xa7, 0x83, 0xda, 0x63, 0x3f, 0xe6, 0x8b, 0x2a, 0xcd, 0xb3, 0x12, 0xa6, 0x0f, 0x0f, 0x95, 0x3f, 0x7f, 0xf6, 0xd9, 0x9b, 0x93, 0xc1, 0xf1, 0xd5, 0xe9, 0xe5, 0xf5, 0xe9, 0xc5, 0x79, 0xed, 0xc9, 0x28, 0x2d, 0x23, 0x18, 0xaa, 0xca, 0xf3, 0x19, 0xfc, 0xc7, 0x8e, 0x3e, 0x8e, 0xab, 0x38, 0x9a, 0x14, 0xf9, 0x3c, 0xca, 0x0b, 0xfc, 0x45, 0x1c, 0x95, 0x49, 0x71, 0x97, 0x14, 0xdd, 0x68, 0x59, 0xa6, 0xd9, 0x34, 0xca, 0xb3, 0x24, 0xca, 0x27, 0x51, 0x75, 0x93, 0xe8, 0x70, 0xe5, 0x72, 0xb1, 0xc8, 0x8b, 0x2a, 0x19, 0x47, 0x8b, 0x22, 0xaf, 0xf2, 0x51, 0x3e, 0x2b, 0xa3, 0xf5, 0x37, 0xa7, 0xc7, 0xd7, 0xdd, 0xe8, 0xed, 0xe9, 0xd9, 0x09, 0xfc, 0xf7, 0xfa, 0x92, 0xfe, 0x33, 0xe8, 0x46, 0xdf, 0x5c, 0x5c, 0xbe, 0x3b, 0xb9, 0xea, 0x46, 0xef, 0xae, 0xf1, 0x67, 0xf8, 0x5f, 0xf8, 0x61, 0x74, 0xfa, 0xfe, 0xe8, 0xb2, 0xab, 0xc3, 0xe1, 0x3f, 0xf0, 0x87, 0x67, 0x6f, 0xe0, 0x87, 0xfc, 0x07, 0xfe, 0xf3, 0xf2, 0xe2, 0x72, 0x57, 0xfe, 0xc0, 0x7f, 0x5e, 0x5d, 0xbf, 0x87, 0xdf, 0x5e, 0x5d, 0x0f, 0xe0, 0xbf, 0x83, 0x63, 0xfc, 0x0f, 0x7d, 0x65, 0xf0, 0xfe, 0x6b, 0xfa, 0xcf, 0xc0, 0x0c, 0x37, 0x78, 0xcf, 0x3f, 0xa7, 0x2f, 0x5d, 0x9f, 0x9c, 0x9d, 0x9f, 0x5c, 0x47, 0x71, 0x36, 0x8e, 0xae, 0xe1, 0xf9, 0x8d, 0x7e, 0x74, 0x7d, 0x93, 0x44, 0xa3, 0x7c, 0x3e, 0xc7, 0x1f, 0xc1, 0x8e, 0x8c, 0x93, 0x32, 0x9d, 0x66, 0xb0, 0x14, 0x58, 0xf9, 0x7d, 0x5e, 0xdc, 0x46, 0xd1, 0x7d, 0x5a, 0xdd, 0xe4, 0xcb, 0x4a, 0x87, 0x5b, 0xc2, 0x6e, 0x44, 0x69, 0x56, 0x25, 0x45, 0x3c, 0xc2, 0x9d, 0xee, 0x7f, 0x56, 0xdb, 0xd5, 0x7c, 0x02, 0x7b, 0x58, 0xc2, 0xa6, 0x0d, 0x97, 0xe5, 0x2c, 0x8f, 0xc7, 0xb8, 0x55, 0xf0, 0xca, 0x64, 0x09, 0x9b, 0x5c, 0xa4, 0xa3, 0xdb, 0x32, 0x9a, 0xa5, 0xb7, 0x09, 0x6e, 0xd4, 0xc3, 0xa3, 0x6e, 0x5c, 0x97, 0x07, 0x8d, 0x97, 0xb0, 0xa7, 0x59, 0x4f, 0x87, 0xab, 0xd2, 0x51, 0x8c, 0x1f, 0xa0, 0x9d, 0x8b, 0x96, 0x0b, 0x1c, 0x8d, 0x77, 0x2c, 0x5a, 0xe4, 0x25, 0xbc, 0x34, 0x18, 0x9c, 0xc1, 0xcc, 0xb3, 0x2c, 0xa1, 0x79, 0x94, 0x5d, 0xf8, 0x47, 0x7e, 0x9b, 0x26, 0xf0, 0x97, 0x49, 0x3a, 0x4b, 0x22, 0x3e, 0x51, 0x33, 0x1c, 0x1e, 0x6d, 0x54, 0x24, 0xe5, 0x72, 0x9e, 0xc0, 0xee, 0xbd, 0x4f, 0xaa, 0x78, 0x96, 0x66, 0xb7, 0xf0, 0x57, 0x5c, 0xf8, 0x3c, 0x2f, 0x92, 0x7e, 0x74, 0x54, 0x46, 0x8f, 0xf9, 0x12, 0x16, 0x3c, 0x9b, 0xc1, 0x99, 0x27, 0xd1, 0x30, 0x99, 0xe5, 0xf7, 0x5d, 0x3c, 0xe9, 0x28, 0x5b, 0xce, 0x87, 0x30, 0x40, 0x3e, 0xb1, 0xc3, 0xc5, 0xd5, 0x12, 0x86, 0xe3, 0xa7, 0xe7, 0x31, 0xac, 0x09, 0xde, 0x2d, 0xa2, 0x9b, 0x04, 0xd6, 0x5c, 0x2e, 0xd2, 0xec, 0x0f, 0xf5, 0x7d, 0x81, 0xad, 0x5d, 0xe4, 0xf7, 0x49, 0x01, 0x3b, 0x3b, 0x7c, 0x8c, 0x60, 0x13, 0x86, 0x4c, 0x84, 0x13, 0x20, 0xb2, 0x28, 0x86, 0x21, 0x0c, 0x01, 0xf6, 0x8a, 0x64, 0x16, 0x23, 0x31, 0x99, 0x6f, 0xf4, 0xe1, 0x10, 0x13, 0x43, 0x6d, 0xf2, 0xea, 0xfa, 0xee, 0x06, 0xbd, 0x3c, 0x86, 0x95, 0xa4, 0xb3, 0x12, 0x8e, 0x01, 0x2f, 0x85, 0x3c, 0x83, 0x87, 0x8a, 0xf4, 0x0f, 0xb4, 0xf9, 0x98, 0x55, 0xf1, 0x03, 0x7d, 0x5e, 0x68, 0xb3, 0x37, 0x4e, 0x16, 0x49, 0x36, 0x4e, 0xb2, 0xaa, 0x1f, 0xfd, 0x25, 0x5f, 0xae, 0xc1, 0xb7, 0x27, 0x29, 0xec, 0x41, 0x2c, 0x43, 0xc1, 0x97, 0x81, 0x08, 0x46, 0x45, 0xba, 0x70, 0x8e, 0x22, 0xcf, 0xe0, 0xcc, 0xa3, 0xab, 0xb7, 0xc7, 0xd1, 0xee, 0xab, 0xcf, 0x5f, 0xd8, 0x33, 0x87, 0x01, 0xa2, 0x51, 0x9c, 0xc1, 0x8a, 0x93, 0x51, 0x3a, 0x79, 0x8c, 0xe6, 0xcb, 0x59, 0x95, 0x2e, 0x60, 0xf7, 0xf1, 0xf2, 0xe1, 0x05, 0x5a, 0xc4, 0x45, 0x55, 0x22, 0x11, 0xd0, 0x0f, 0x68, 0xed, 0xf7, 0x45, 0x5a, 0xe1, 0x45, 0xa2, 0xdf, 0xc1, 0x0c, 0x93, 0xaa, 0xd4, 0xe1, 0x90, 0xd6, 0xe0, 0x3b, 0x43, 0xa0, 0x2d, 0xd8, 0xda, 0xb8, 0x84, 0x8f, 0x1e, 0x7c, 0x66, 0x39, 0xc8, 0x4d, 0x55, 0x2d, 0x0e, 0x36, 0x37, 0xcb, 0xb4, 0x4a, 0xfa, 0xff, 0x80, 0x7b, 0xd8, 0xad, 0xee, 0xf3, 0x6e, 0x75, 0x53, 0x24, 0xc9, 0x3f, 0xfb, 0x40, 0xc3, 0xe6, 0x49, 0xf8, 0xee, 0xa3, 0x4c, 0x6c, 0x9a, 0x54, 0xf0, 0x85, 0xbf, 0x2d, 0x93, 0x0c, 0x47, 0x84, 0x79, 0xc4, 0xb3, 0xc5, 0x4d, 0x0c, 0xc7, 0x99, 0x00, 0x35, 0xe2, 0xcd, 0x06, 0x82, 0xc1, 0x59, 0xf1, 0xdd, 0xfe, 0xf1, 0x67, 0xff, 0xa3, 0x13, 0xfa, 0x26, 0xfc, 0xb7, 0x9f, 0x3c, 0xc4, 0x73, 0x58, 0x1b, 0x7e, 0x6a, 0x13, 0x49, 0xec, 0xc7, 0xed, 0xde, 0xf6, 0xd6, 0xd6, 0xcf, 0xfd, 0xea, 0xa1, 0x7a, 0xde, 0xf3, 0x5b, 0x5b, 0xf6, 0x0d, 0x7c, 0x74, 0x1d, 0xd7, 0x1b, 0xcd, 0x80, 0x64, 0xf0, 0xe3, 0x7f, 0x4f, 0x8a, 0xbc, 0xdc, 0x78, 0xde, 0x48, 0x71, 0xef, 0xef, 0xf5, 0xef, 0x9e, 0x27, 0x25, 0xd1, 0x8c, 0x5d, 0x6b, 0x14, 0x17, 0x40, 0xb7, 0x79, 0x65, 0xd9, 0x53, 0x17, 0x2e, 0x65, 0x65, 0x76, 0x06, 0xee, 0x1c, 0x3c, 0x0d, 0x8c, 0x2d, 0x9e, 0x21, 0x4f, 0x2b, 0xa3, 0x2c, 0x79, 0x30, 0xb7, 0x1c, 0x6e, 0x7f, 0x12, 0x8f, 0x6e, 0xa2, 0x1c, 0x88, 0xbf, 0x08, 0x1c, 0x81, 0x3b, 0xa1, 0xb8, 0x18, 0xdd, 0xa4, 0x77, 0xb0, 0x1b, 0xaf, 0x5e, 0xbd, 0xe8, 0xc1, 0x7f, 0x5e, 0xfd, 0xbc, 0x79, 0x97, 0xcf, 0x60, 0x73, 0xf6, 0x7e, 0xde, 0xc4, 0x23, 0xfe, 0x47, 0xdc, 0x1d, 0x76, 0x47, 0xff, 0xec, 0xdf, 0x54, 0xf3, 0x59, 0x2b, 0xe1, 0xc4, 0x19, 0xfc, 0xff, 0x3c, 0x5f, 0x66, 0x95, 0x21, 0x16, 0xa0, 0xb9, 0xca, 0x61, 0x4e, 0x70, 0x5d, 0xe1, 0x8e, 0x22, 0x69, 0x23, 0x0d, 0xe1, 0xad, 0x83, 0x0b, 0x6a, 0xaf, 0x63, 0x35, 0xba, 0xc1, 0xf5, 0x03, 0xf5, 0xc4, 0xb2, 0x09, 0x55, 0x1a, 0xe3, 0xcd, 0x04, 0x06, 0x81, 0x0c, 0x8b, 0xc6, 0xe2, 0xaf, 0xa5, 0xf0, 0x60, 0x5e, 0x8c, 0x93, 0xa2, 0xdf, 0x9c, 0x86, 0xb9, 0xb2, 0xce, 0x37, 0x23, 0x95, 0x28, 0xf8, 0x03, 0x9a, 0xd8, 0x3c, 0x7d, 0x80, 0x11, 0x88, 0x61, 0x66, 0x34, 0x71, 0x1e, 0x2d, 0xc2, 0x19, 0xd3, 0x67, 0xf4, 0x7d, 0x7b, 0x65, 0x61, 0xea, 0xb5, 0xa5, 0xd3, 0x47, 0xed, 0xe2, 0x23, 0x38, 0xbc, 0x05, 0xbc, 0xb5, 0x44, 0xbe, 0x4a, 0xd7, 0x1a, 0x87, 0x01, 0x86, 0x30, 0x85, 0x73, 0x81, 0xb3, 0x40, 0x2a, 0xc6, 0xa3, 0x7a, 0x8c, 0xce, 0x81, 0x60, 0x98, 0x19, 0x39, 0xc4, 0x3e, 0x4b, 0xaa, 0xea, 0xc9, 0x63, 0xb2, 0x14, 0x7b, 0xb0, 0xed, 0x11, 0x6d, 0xdb, 0xf3, 0x40, 0x67, 0x07, 0x3b, 0xf5, 0x87, 0xbf, 0x07, 0x26, 0x6d, 0xaf, 0x0b, 0x7c, 0xfd, 0x1f, 0xff, 0x74, 0xa8, 0xee, 0x1e, 0x7f, 0x9b, 0x66, 0x77, 0xf9, 0x2d, 0x6c, 0x11, 0x49, 0xd1, 0xb8, 0xbe, 0x9b, 0xc8, 0x87, 0xe6, 0x8b, 0xca, 0x88, 0x27, 0x24, 0x47, 0xf8, 0xd1, 0x30, 0x1e, 0xce, 0x1e, 0xa3, 0x9b, 0xf8, 0x2e, 0xc1, 0xf5, 0x2e, 0x80, 0x4e, 0x71, 0x07, 0x40, 0x6c, 0xcc, 0x88, 0x8f, 0x09, 0x63, 0x18, 0xe7, 0xcb, 0x21, 0x30, 0x97, 0xbf, 0x2d, 0xf3, 0x8a, 0x37, 0x26, 0xbe, 0xcb, 0xd3, 0x71, 0x4d, 0x16, 0xdf, 0x24, 0xc8, 0xd0, 0xf0, 0xc3, 0x24, 0xa4, 0x80, 0xa1, 0xe2, 0x4c, 0xe9, 0xa2, 0xa5, 0x15, 0x8a, 0x3b, 0x60, 0x85, 0xf1, 0xac, 0xcc, 0xa3, 0x68, 0x9a, 0xe3, 0x2d, 0x21, 0x06, 0x4c, 0x64, 0x0e, 0x87, 0x72, 0x13, 0xa3, 0x54, 0x03, 0x01, 0x66, 0xee, 0x41, 0x91, 0x10, 0x2f, 0xa6, 0x93, 0x8a, 0x67, 0x5d, 0x96, 0x5e, 0xf8, 0x8e, 0x6c, 0x55, 0xb4, 0xf6, 0x3f, 0xd6, 0xba, 0xd1, 0xda, 0xbf, 0xaf, 0x11, 0x3d, 0xac, 0xfd, 0xdb, 0x9a, 0x3d, 0x67, 0x50, 0xc6, 0xee, 0xd2, 0x71, 0xc2, 0x24, 0x71, 0x7a, 0x79, 0xf7, 0x22, 0xfa, 0x3b, 0xea, 0x0e, 0xc0, 0x6b, 0x93, 0x07, 0x25, 0x48, 0x5d, 0x1b, 0xbc, 0x1d, 0x01, 0xd3, 0x8d, 0x17, 0xa8, 0x44, 0x24, 0xc5, 0x08, 0xa8, 0x37, 0x9e, 0x02, 0xbd, 0x82, 0x2c, 0xd6, 0xe1, 0x70, 0x7c, 0x7c, 0x85, 0x97, 0x05, 0x0c, 0x32, 0xca, 0xe2, 0x39, 0xdc, 0x88, 0x33, 0x9c, 0x51, 0x9a, 0xf9, 0x87, 0xf9, 0xe3, 0x24, 0xf9, 0x7c, 0xeb, 0xe0, 0x60, 0xf7, 0x4f, 0x3b, 0xfb, 0x49, 0x75, 0xb3, 0xf5, 0xf3, 0xa6, 0x79, 0xe4, 0x74, 0x42, 0xdb, 0xae, 0xe4, 0xa7, 0x93, 0x00, 0x29, 0x6f, 0xa4, 0x04, 0xbc, 0x0f, 0x7f, 0x4f, 0x26, 0xe9, 0x43, 0x57, 0xf5, 0x25, 0xbe, 0x73, 0x31, 0x90, 0x1a, 0x9c, 0x1f, 0xb2, 0x08, 0x1d, 0x6e, 0xba, 0x4c, 0x4a, 0xd8, 0xc9, 0xfb, 0x9b, 0xb8, 0x8a, 0xcc, 0x00, 0x7c, 0xb2, 0xf3, 0x74, 0x7a, 0x53, 0x45, 0xf7, 0x31, 0x0a, 0x9b, 0xd3, 0x8a, 0x87, 0x40, 0x29, 0x0f, 0x22, 0x66, 0x12, 0x83, 0xac, 0xc0, 0x33, 0x24, 0x91, 0x3e, 0xb4, 0x1a, 0x46, 0x05, 0x64, 0xce, 0x07, 0x62, 0xd5, 0xa9, 0x61, 0x5c, 0xe2, 0xa5, 0xcd, 0x80, 0x39, 0x54, 0xa0, 0x23, 0x2c, 0xf1, 0x5f, 0x37, 0xa0, 0x05, 0xd0, 0x1e, 0xc8, 0x44, 0x49, 0x50, 0xbe, 0xc5, 0xe3, 0xc4, 0xb3, 0x31, 0xc2, 0x0b, 0x0e, 0xa9, 0x2b, 0xc7, 0x6c, 0xde, 0x28, 0xe1, 0xc2, 0x01, 0x67, 0x32, 0x94, 0xd1, 0x41, 0x26, 0xdb, 0xe1, 0x75, 0xd2, 0x1c, 0xe3, 0x12, 0x15, 0x05, 0x56, 0x07, 0x60, 0xf2, 0xce, 0x62, 0x61, 0xd3, 0xe2, 0x5b, 0x54, 0x49, 0x1a, 0x8a, 0x0f, 0xbd, 0x36, 0xce, 0x81, 0xc8, 0x60, 0xb6, 0xc0, 0x8c, 0x71, 0x65, 0xc8, 0x62, 0x69, 0x57, 0x88, 0xc8, 0x61, 0x4c, 0xfc, 0x61, 0x5a, 0xa1, 0x8c, 0x21, 0x1d, 0x16, 0xe6, 0x0b, 0x9b, 0x42, 0x8a, 0x28, 0x30, 0x6a, 0x67, 0xfd, 0x24, 0x1e, 0xe1, 0xd9, 0xe8, 0x0e, 0xb4, 0x14, 0x50, 0x48, 0x13, 0xf3, 0x16, 0xc9, 0xf3, 0x11, 0xea, 0x46, 0x33, 0xb8, 0x2f, 0xa3, 0xbc, 0x28, 0x50, 0xdf, 0xc7, 0x13, 0x1c, 0x32, 0x13, 0x9d, 0x27, 0xa0, 0x46, 0xb8, 0xdb, 0x99, 0xa2, 0x40, 0x03, 0xfe, 0x02, 0x7a, 0x09, 0x71, 0x10, 0xd0, 0x1f, 0x88, 0xe7, 0xd3, 0xc2, 0x69, 0x76, 0x38, 0xf6, 0x68, 0x94, 0x2c, 0xaa, 0x32, 0xb4, 0x26, 0x3d, 0x70, 0x98, 0x4e, 0x91, 0xe0, 0xce, 0xbb, 0x4a, 0x17, 0xed, 0xab, 0x11, 0xfa, 0xa4, 0x77, 0xa9, 0x1e, 0x03, 0x7a, 0x58, 0x69, 0x76, 0xad, 0x22, 0xda, 0x00, 0x36, 0x46, 0x7b, 0x3e, 0xc7, 0x89, 0xe2, 0xc3, 0x25, 0xdf, 0x54, 0x62, 0xcd, 0x78, 0x90, 0xac, 0x69, 0xf3, 0x77, 0x51, 0x74, 0xc1, 0x7e, 0x9a, 0xc1, 0xe1, 0xab, 0xe6, 0x4c, 0xf1, 0xf3, 0xa8, 0xe2, 0x83, 0x24, 0x1f, 0x97, 0x37, 0xa0, 0x7c, 0x95, 0x72, 0xb3, 0xd3, 0x39, 0xd0, 0xcc, 0x1d, 0x9e, 0xef, 0x22, 0x49, 0xc6, 0xfd, 0xe8, 0x62, 0x82, 0x5c, 0xb5, 0x80, 0x49, 0x57, 0xf4, 0x6b, 0x94, 0x2a, 0xb0, 0x6f, 0x63, 0x52, 0xe2, 0xcd, 0xd5, 0xe2, 0xa9, 0x38, 0xd2, 0x81, 0x38, 0x79, 0x0c, 0x3f, 0x81, 0xd9, 0xce, 0xea, 0x22, 0x88, 0xee, 0x21, 0x70, 0x6f, 0x9c, 0xde, 0x30, 0x89, 0x88, 0x12, 0x87, 0x49, 0x75, 0x9f, 0x24, 0x66, 0xb8, 0x32, 0x01, 0xb1, 0x87, 0x87, 0xc6, 0x9a, 0x1f, 0x31, 0x43, 0xdc, 0xda, 0xcb, 0xab, 0x8b, 0x6f, 0xae, 0x4e, 0x06, 0x83, 0xe8, 0xfd, 0xc9, 0xf5, 0xc9, 0x55, 0x6d, 0xa7, 0xb3, 0xbc, 0x98, 0xd3, 0x89, 0x8e, 0xd3, 0x72, 0x31, 0x8b, 0x1f, 0xf1, 0xa8, 0x61, 0x25, 0xd3, 0x02, 0x6f, 0xd6, 0x3c, 0x41, 0xa9, 0x30, 0x5e, 0x12, 0x27, 0x03, 0x71, 0x04, 0xc7, 0x27, 0x1a, 0x2f, 0x32, 0x13, 0x52, 0x93, 0xb3, 0xa9, 0xdd, 0x69, 0xe0, 0x38, 0x22, 0x49, 0x51, 0x94, 0x9a, 0xf3, 0x40, 0xd5, 0x93, 0x8c, 0x9b, 0xae, 0xfd, 0x19, 0x6f, 0x13, 0x8b, 0x36, 0xa0, 0xd9, 0x74, 0x4e, 0xcc, 0x0e, 0xfe, 0xb4, 0xda, 0x66, 0x32, 0x01, 0x55, 0x1b, 0xa4, 0x2b, 0x5b, 0x0a, 0xcd, 0x39, 0xe9, 0x6c, 0x8d, 0x7e, 0x0c, 0x64, 0x88, 0xac, 0x19, 0x07, 0xe4, 0xa9, 0xf0, 0x17, 0x0c, 0x13, 0x03, 0x9d, 0x04, 0x79, 0x9f, 0x3c, 0xb6, 0xc0, 0x29, 0x24, 0x70, 0xb2, 0x63, 0x1e, 0xbe, 0x5c, 0x4e, 0xe8, 0x22, 0x47, 0xeb, 0xa0, 0x99, 0xbf, 0x07, 0x6b, 0x09, 0x2c, 0x96, 0x6e, 0x74, 0xb9, 0x41, 0xef, 0x6d, 0x6f, 0xed, 0xec, 0x31, 0x23, 0xe8, 0xeb, 0x70, 0x6f, 0x1d, 0x46, 0xbc, 0x7d, 0x8b, 0xc7, 0xcb, 0x0f, 0xe1, 0xe0, 0xfd, 0x68, 0xfb, 0x3d, 0xff, 0x64, 0xef, 0xf3, 0xfd, 0x97, 0x2f, 0xe4, 0x87, 0x75, 0x02, 0x37, 0xf3, 0x27, 0xea, 0x20, 0xcb, 0x0f, 0x4d, 0x41, 0x98, 0x09, 0xac, 0x6e, 0x9e, 0x66, 0x70, 0x4d, 0xe0, 0x5a, 0x09, 0xaf, 0x42, 0x7a, 0x86, 0xc9, 0x4f, 0x98, 0xb3, 0xc9, 0xb9, 0xd6, 0x4d, 0x4a, 0x78, 0x19, 0x48, 0x16, 0x78, 0xb9, 0x39, 0x24, 0x56, 0x13, 0x2a, 0x9c, 0x48, 0x3c, 0x44, 0x06, 0x8b, 0x76, 0x15, 0x28, 0xc0, 0x49, 0xf0, 0x6b, 0x46, 0x2a, 0xc2, 0x1b, 0x30, 0x37, 0x90, 0x89, 0x28, 0xe6, 0xfc, 0x7d, 0x07, 0x56, 0x40, 0x1c, 0xf2, 0x3e, 0x2d, 0x89, 0x35, 0xdc, 0xe7, 0xcb, 0x19, 0x58, 0x31, 0xf8, 0xc0, 0x72, 0x41, 0x2f, 0xc0, 0xa7, 0x16, 0x96, 0x07, 0x80, 0xc6, 0x82, 0xb4, 0xd3, 0x1c, 0x05, 0xa6, 0x06, 0xff, 0x5c, 0x00, 0x29, 0xf1, 0x74, 0xfa, 0x4d, 0x09, 0x41, 0xbc, 0xcf, 0xa3, 0x44, 0xbc, 0xf3, 0xc4, 0xb4, 0x2f, 0x2f, 0x06, 0xd7, 0xa8, 0x01, 0x5c, 0x7e, 0xb8, 0x86, 0x81, 0x40, 0x05, 0x28, 0x2b, 0x20, 0x4a, 0x7c, 0x31, 0x4b, 0xc8, 0x84, 0xd4, 0xe1, 0x80, 0xf6, 0x52, 0x62, 0x54, 0xa4, 0xd6, 0xe8, 0x27, 0x79, 0x8e, 0x6c, 0x63, 0xe3, 0x15, 0x54, 0x0b, 0x9b, 0x65, 0xb8, 0x79, 0x27, 0x5a, 0xff, 0x72, 0x03, 0x68, 0xb6, 0x97, 0x9b, 0xdd, 0xe9, 0xf5, 0xe4, 0x55, 0xf8, 0x76, 0x99, 0xce, 0xd3, 0x59, 0x5c, 0x38, 0x53, 0x67, 0x8e, 0x8a, 0xf7, 0xd3, 0xf0, 0x95, 0x11, 0x50, 0x0d, 0x4d, 0xdb, 0x9a, 0x92, 0xb8, 0x87, 0xc4, 0x95, 0xec, 0x51, 0x8d, 0x51, 0x21, 0x20, 0x8d, 0x79, 0x91, 0x9a, 0xad, 0xc3, 0x33, 0x43, 0x76, 0x55, 0xdb, 0xa8, 0xe6, 0xb9, 0x79, 0x1b, 0x87, 0x12, 0x89, 0x3c, 0x15, 0x66, 0xeb, 0xa2, 0xce, 0x30, 0x2e, 0x3a, 0x91, 0xe1, 0xc5, 0x7c, 0x37, 0xf1, 0x86, 0x14, 0xc9, 0x74, 0x09, 0x2b, 0x88, 0x78, 0x77, 0x71, 0xa5, 0x7f, 0x74, 0x56, 0xaa, 0x03, 0xf4, 0x86, 0xf8, 0x48, 0x5a, 0xb2, 0x99, 0x39, 0x01, 0xbb, 0x05, 0x2f, 0x8d, 0xea, 0xaf, 0xa4, 0xd1, 0x08, 0xc5, 0x04, 0x08, 0xc6, 0xd1, 0x6b, 0xe1, 0xaa, 0x54, 0x09, 0x30, 0x1a, 0x62, 0xff, 0xf8, 0x64, 0x0f, 0x8e, 0xac, 0xd7, 0x2b, 0x61, 0xff, 0x51, 0xf7, 0x5e, 0x88, 0x4d, 0x7f, 0x41, 0x0e, 0x13, 0xe3, 0x5b, 0xb9, 0x10, 0x1d, 0x98, 0xc4, 0x26, 0xbf, 0x4b, 0x2c, 0x14, 0x14, 0xd5, 0x7b, 0xf8, 0x70, 0x0c, 0x47, 0x06, 0x17, 0xee, 0x3d, 0x6e, 0x14, 0xfb, 0x46, 0x22, 0xa3, 0x36, 0x13, 0x65, 0xa4, 0x78, 0xef, 0x63, 0xab, 0xcb, 0x8c, 0xc7, 0x29, 0xfe, 0x16, 0xee, 0x17, 0x48, 0xb8, 0x65, 0x42, 0xb6, 0x87, 0x6c, 0xea, 0xdc, 0x6e, 0x26, 0x99, 0xb1, 0xe5, 0x4d, 0x8e, 0x66, 0x62, 0x87, 0x79, 0x71, 0x0f, 0xbf, 0xd5, 0x21, 0x79, 0x3e, 0x8f, 0xf4, 0x5b, 0xf2, 0x29, 0x58, 0xc7, 0xd8, 0xd5, 0xcd, 0xba, 0x20, 0x68, 0x1e, 0x1d, 0x23, 0x81, 0x78, 0x35, 0xcf, 0xbd, 0x30, 0x0a, 0x0f, 0x88, 0xd4, 0x05, 0x2a, 0x53, 0xc2, 0xc3, 0x49, 0x18, 0xd2, 0x95, 0x2d, 0x79, 0x6a, 0x5d, 0xd8, 0x5b, 0x7c, 0x72, 0x7a, 0xa3, 0x8f, 0x3a, 0x82, 0x35, 0x86, 0xc5, 0xa1, 0x70, 0x40, 0x7b, 0x7a, 0xac, 0x7c, 0x3f, 0x2f, 0x98, 0x99, 0xcd, 0x72, 0xa0, 0xe5, 0x0e, 0xab, 0xac, 0x32, 0x6d, 0x9c, 0x35, 0xce, 0x12, 0x77, 0x9c, 0xfd, 0x4c, 0xb9, 0x39, 0x1b, 0x33, 0x69, 0xd9, 0xaf, 0xf2, 0xc9, 0xa9, 0xd9, 0x8d, 0x1a, 0xd0, 0x1e, 0x81, 0xe8, 0x2c, 0x91, 0x8e, 0x75, 0xe7, 0x89, 0xbc, 0x41, 0xd4, 0xad, 0x55, 0x7c, 0x1f, 0xc9, 0xc6, 0x6a, 0xec, 0x7c, 0x49, 0xe4, 0x23, 0x82, 0xcc, 0xac, 0x0c, 0x56, 0x34, 0x4e, 0x63, 0xa2, 0x13, 0x3e, 0x1a, 0x52, 0x46, 0xac, 0x45, 0x18, 0xd0, 0x83, 0x1f, 0x9b, 0x06, 0xdd, 0x6c, 0xe6, 0x8a, 0x24, 0x9d, 0x53, 0xef, 0x02, 0xd6, 0x7e, 0x46, 0xeb, 0xe8, 0xdd, 0x45, 0x78, 0xfd, 0xc0, 0x6c, 0xc0, 0xbb, 0xd8, 0xbb, 0x38, 0xbb, 0x73, 0xae, 0x11, 0x5a, 0xee, 0x19, 0xea, 0x29, 0x5d, 0xf2, 0x8e, 0x0c, 0xf3, 0x1c, 0xcc, 0x64, 0xbb, 0x34, 0x94, 0x07, 0x49, 0x86, 0xd4, 0x2e, 0x27, 0x0a, 0x2c, 0x61, 0x61, 0xf8, 0xed, 0x23, 0x98, 0x4b, 0xf1, 0x34, 0x4e, 0x0d, 0xbd, 0xc9, 0xcd, 0x18, 0x47, 0xfa, 0x70, 0x96, 0xcb, 0xf3, 0x78, 0x54, 0xa8, 0x02, 0x09, 0xdf, 0x5a, 0x96, 0x7c, 0x7d, 0x60, 0x55, 0xc0, 0x79, 0x88, 0x77, 0xc8, 0xb8, 0xa8, 0x36, 0xea, 0x70, 0x43, 0x52, 0x94, 0x51, 0xe7, 0x24, 0xe6, 0x4b, 0x1a, 0x24, 0x8c, 0xd8, 0xe9, 0x47, 0xef, 0xf2, 0xfb, 0x84, 0x7c, 0x85, 0xa4, 0xdf, 0xa7, 0xe8, 0xed, 0x02, 0x55, 0xf0, 0x3e, 0x89, 0xe6, 0xa0, 0x7a, 0xc2, 0x6e, 0x92, 0xf6, 0x41, 0x3f, 0x73, 0xcc, 0x43, 0xa0, 0xf0, 0x7b, 0xde, 0x25, 0xb3, 0x0a, 0x73, 0x94, 0x13, 0xbe, 0x12, 0xd1, 0x3a, 0xa9, 0x37, 0x23, 0xdc, 0xad, 0x45, 0x65, 0x57, 0x61, 0x36, 0xe4, 0x3e, 0x2e, 0x9d, 0xcb, 0x95, 0x90, 0x69, 0xfa, 0xb2, 0xbf, 0xfd, 0xaa, 0xbf, 0xd5, 0x07, 0x43, 0x24, 0xb9, 0x4b, 0xf3, 0x65, 0x09, 0x9f, 0xc6, 0x69, 0xd8, 0x77, 0x12, 0xbc, 0x95, 0x55, 0x3e, 0x9d, 0xce, 0x58, 0xe7, 0xd9, 0xcc, 0x27, 0x13, 0xd6, 0x7d, 0x40, 0xd3, 0x33, 0xfa, 0x33, 0x5b, 0x40, 0xb8, 0x33, 0x72, 0xdd, 0x98, 0xa5, 0xfa, 0x26, 0x72, 0xdf, 0x3a, 0x2f, 0x7a, 0xbd, 0x78, 0x58, 0x56, 0x68, 0x4c, 0xf5, 0x96, 0x59, 0xfa, 0xd0, 0x2b, 0xf3, 0xd1, 0x2d, 0x1c, 0xca, 0xe1, 0x22, 0xae, 0x6e, 0xbe, 0x6c, 0xb8, 0x84, 0xd7, 0x51, 0x96, 0x6c, 0x44, 0xd1, 0x31, 0xab, 0x95, 0xb8, 0x13, 0x05, 0xdf, 0x37, 0x38, 0x4d, 0x19, 0x25, 0xfa, 0x00, 0xa3, 0x00, 0x2d, 0xcf, 0xe1, 0x50, 0x23, 0x1e, 0xac, 0xab, 0xac, 0xb4, 0x31, 0x1c, 0x39, 0x1c, 0x51, 0x8c, 0x90, 0xdf, 0x0e, 0xae, 0x4e, 0x5e, 0xdc, 0x82, 0xa2, 0x7d, 0x0e, 0x26, 0xe3, 0x01, 0xfe, 0x1b, 0x58, 0x58, 0x45, 0x5b, 0x2e, 0x92, 0x15, 0x66, 0xc4, 0xcc, 0x18, 0x2d, 0xf2, 0x78, 0xd8, 0x6b, 0x0c, 0x27, 0xdf, 0x97, 0x8f, 0x46, 0x6a, 0x6b, 0x28, 0x29, 0x45, 0x6b, 0x5f, 0x81, 0xfd, 0x77, 0xc3, 0xc7, 0x4e, 0x03, 0xf2, 0x1a, 0x81, 0x42, 0xa7, 0x60, 0x41, 0x64, 0x55, 0x73, 0xb8, 0x1b, 0x12, 0xd5, 0x28, 0x65, 0xd8, 0xd8, 0x25, 0x22, 0x11, 0x0f, 0x90, 0xb1, 0x3f, 0xfb, 0x9f, 0x35, 0x5e, 0x3b, 0xb2, 0x67, 0xba, 0xbf, 0x0b, 0x67, 0xea, 0x6e, 0xf4, 0xac, 0xea, 0x95, 0x77, 0xa3, 0xe8, 0x90, 0xb4, 0x6f, 0x24, 0xd3, 0xe0, 0x06, 0x0f, 0x36, 0xa2, 0xef, 0x8f, 0xae, 0xce, 0x4f, 0xcf, 0xbf, 0x39, 0xe0, 0x8f, 0x0a, 0xa5, 0xc1, 0xdf, 0x92, 0x87, 0x05, 0xfa, 0xc1, 0x70, 0xb6, 0x20, 0xca, 0xa2, 0xe8, 0x4d, 0x4e, 0xf6, 0x08, 0x31, 0x4c, 0x14, 0x58, 0x8d, 0xe1, 0x40, 0xb4, 0x8c, 0x97, 0x0d, 0xdf, 0xaf, 0x61, 0xd8, 0x76, 0x60, 0xbe, 0x9e, 0xbc, 0xc9, 0x3a, 0x47, 0xe0, 0x8f, 0xec, 0x3e, 0x26, 0x7d, 0xa9, 0x8f, 0xd2, 0x92, 0xcc, 0x7c, 0x9d, 0x79, 0xf3, 0x4b, 0x39, 0x18, 0xbb, 0x6c, 0xe7, 0xc3, 0x78, 0x0f, 0x70, 0x6d, 0x70, 0x97, 0x74, 0xb0, 0x11, 0xb0, 0xa3, 0x44, 0x14, 0x07, 0x62, 0x75, 0x64, 0x36, 0x08, 0x2b, 0xeb, 0x47, 0x47, 0x93, 0xe6, 0x51, 0xa2, 0xee, 0x82, 0x5a, 0xbd, 0x4a, 0xc1, 0xb1, 0x55, 0x84, 0xd9, 0xcb, 0xcb, 0x23, 0xea, 0x30, 0x25, 0x9c, 0xcf, 0x58, 0x25, 0x3d, 0x7e, 0xa6, 0x31, 0x1c, 0x99, 0x9e, 0xc4, 0x66, 0x50, 0x29, 0x4c, 0xf1, 0x40, 0xd1, 0xf4, 0x03, 0x46, 0x3d, 0xcf, 0xc7, 0x64, 0x47, 0x78, 0xfb, 0x33, 0x30, 0x0e, 0x9f, 0x4e, 0xc7, 0xae, 0x3a, 0x5a, 0x47, 0xd7, 0x1f, 0x50, 0x41, 0x36, 0xad, 0x6e, 0x36, 0xac, 0x5b, 0x03, 0xd5, 0x14, 0x58, 0xf0, 0x26, 0x4c, 0x84, 0xd6, 0x9d, 0x35, 0x49, 0x9d, 0xdc, 0xce, 0xa4, 0x79, 0xfe, 0x75, 0x59, 0x56, 0x64, 0x0d, 0x89, 0xf8, 0xe7, 0x95, 0xc0, 0xcc, 0xe6, 0xc9, 0x3c, 0x2f, 0x1e, 0xbd, 0x89, 0x9c, 0x92, 0xf2, 0x81, 0x86, 0xa7, 0x9c, 0x16, 0xd2, 0x01, 0xc9, 0x47, 0x75, 0x09, 0xa2, 0x11, 0x80, 0x3e, 0x75, 0x63, 0x07, 0x92, 0xd2, 0x04, 0x0c, 0x08, 0xec, 0x6f, 0xeb, 0xb0, 0x55, 0x03, 0x8a, 0x1c, 0x3d, 0x6c, 0xdb, 0x8b, 0x35, 0x35, 0x14, 0x17, 0x0e, 0xfe, 0xff, 0x2c, 0x46, 0xae, 0x93, 0x25, 0xb5, 0x13, 0x22, 0xe9, 0xc1, 0x4b, 0x5b, 0x45, 0xee, 0x2f, 0xf6, 0xfa, 0xdb, 0x35, 0x72, 0xcf, 0x1e, 0x31, 0x50, 0x10, 0xe6, 0x21, 0xd7, 0xa0, 0x38, 0x96, 0x3c, 0x67, 0xd8, 0xc5, 0x49, 0x3a, 0x5d, 0x16, 0x09, 0x6b, 0x70, 0x14, 0x5b, 0xd0, 0x90, 0x02, 0x2a, 0x45, 0x37, 0x39, 0x79, 0xe2, 0x41, 0x98, 0x26, 0xb3, 0x49, 0xb7, 0x31, 0x1c, 0x99, 0x2f, 0x44, 0xfd, 0x38, 0x7d, 0x62, 0x9a, 0x60, 0xa6, 0xd0, 0x60, 0x59, 0x22, 0x4a, 0xec, 0x1c, 0x18, 0x4a, 0x84, 0xae, 0xe8, 0x68, 0x34, 0x8b, 0xd3, 0x39, 0x91, 0xa9, 0xb8, 0x5a, 0xfb, 0xa1, 0x6b, 0x81, 0x06, 0x06, 0xbe, 0x3d, 0x44, 0xd3, 0xb7, 0x28, 0x51, 0x32, 0xd3, 0xa9, 0xaa, 0xe6, 0xcc, 0x86, 0xe5, 0x4d, 0x32, 0xba, 0x55, 0xe6, 0xa5, 0x2a, 0x67, 0x93, 0x8e, 0x31, 0xc6, 0x40, 0xf6, 0x35, 0x3c, 0xb5, 0x2c, 0xf1, 0x9a, 0x94, 0x65, 0x8a, 0xee, 0x33, 0x34, 0x07, 0x97, 0x23, 0xb2, 0x12, 0xe9, 0xc2, 0x00, 0x75, 0x2b, 0x07, 0x8c, 0x80, 0xa5, 0x66, 0xe3, 0x5e, 0x55, 0xa4, 0x8b, 0xb6, 0xd9, 0xf1, 0xa9, 0xd4, 0x15, 0xd4, 0x52, 0x2c, 0x76, 0x32, 0x86, 0xd9, 0x3c, 0x1e, 0x45, 0x8d, 0xdd, 0x6c, 0x12, 0x25, 0xed, 0x6d, 0x17, 0xfd, 0x41, 0x29, 0xe8, 0x0b, 0x6c, 0x2c, 0x91, 0xbb, 0x13, 0x4c, 0x23, 0x11, 0x5c, 0x60, 0xc5, 0xa5, 0x23, 0x52, 0x82, 0xd2, 0x69, 0x82, 0xb1, 0x1c, 0x90, 0x65, 0xd5, 0x0c, 0x54, 0x23, 0x9f, 0xc6, 0xe1, 0x37, 0xc9, 0x34, 0xaf, 0x50, 0x1b, 0xf1, 0xc8, 0xe4, 0x03, 0xf1, 0x79, 0x43, 0x13, 0xaa, 0xf6, 0xbb, 0x3a, 0x59, 0xca, 0xfa, 0x38, 0x7c, 0x9a, 0xd5, 0x7e, 0xf1, 0x38, 0x94, 0x15, 0xdc, 0xac, 0xe6, 0xa9, 0xc3, 0x68, 0xa3, 0x84, 0x6c, 0x2f, 0x52, 0x1c, 0x55, 0x6f, 0x55, 0x85, 0x1f, 0x59, 0x02, 0xea, 0xc8, 0xd5, 0x7d, 0x3a, 0x4a, 0xd4, 0x1d, 0x27, 0x3e, 0xea, 0x59, 0xea, 0xb3, 0xfa, 0x39, 0xde, 0x49, 0x78, 0x89, 0x75, 0x72, 0xf4, 0x9e, 0xdc, 0xa7, 0xa8, 0xb3, 0x0b, 0xd3, 0x23, 0x95, 0x4c, 0xc4, 0x41, 0x5c, 0xa4, 0xe4, 0x2a, 0x82, 0xe1, 0x64, 0x9e, 0x8e, 0x45, 0xef, 0xde, 0x31, 0x9e, 0x37, 0xbd, 0x2f, 0x66, 0x8c, 0x35, 0x5f, 0xe8, 0x72, 0x4d, 0xe2, 0x74, 0x16, 0xd8, 0x27, 0x62, 0x64, 0xd3, 0x84, 0xbc, 0x6a, 0x7c, 0x06, 0x4b, 0xdc, 0x74, 0x8c, 0xbb, 0xf9, 0x4c, 0x2a, 0x49, 0xd8, 0x9e, 0x20, 0xe3, 0xe3, 0xe1, 0xd1, 0x6c, 0x2f, 0x29, 0x6d, 0x7c, 0x76, 0xf2, 0x77, 0x3e, 0x3e, 0xe7, 0x7a, 0xc6, 0x38, 0x6a, 0xbc, 0xc0, 0x00, 0x53, 0xf3, 0x86, 0xa2, 0xe9, 0x85, 0x31, 0xca, 0x0d, 0xf5, 0x20, 0x27, 0xe2, 0x3f, 0x37, 0xb1, 0x3d, 0x62, 0x48, 0xc8, 0xd3, 0xe4, 0x0a, 0xf3, 0x38, 0xc2, 0x81, 0x9b, 0xbc, 0x1c, 0xe4, 0x2b, 0x88, 0x63, 0xe2, 0xa1, 0x35, 0x8a, 0xcd, 0x81, 0x7d, 0x99, 0x08, 0x13, 0x7a, 0x7c, 0x85, 0xd7, 0x91, 0xa1, 0x45, 0x77, 0x36, 0xc4, 0xcb, 0xd1, 0xf4, 0x43, 0x3d, 0x99, 0xa5, 0x4c, 0x37, 0x62, 0xbd, 0x8e, 0x99, 0xd5, 0x88, 0x7d, 0xc0, 0xa2, 0x43, 0xb0, 0xa8, 0xa1, 0xa9, 0x4e, 0x66, 0xf1, 0x94, 0xdc, 0x6b, 0xd3, 0xe6, 0x0d, 0xcd, 0x72, 0x09, 0xf4, 0x95, 0x39, 0xb0, 0x77, 0x5c, 0xb5, 0xb8, 0xb6, 0xca, 0x68, 0x1d, 0x88, 0x6c, 0xb6, 0x24, 0x71, 0x7f, 0x01, 0xcb, 0x1b, 0x0c, 0xde, 0x6d, 0xb8, 0xec, 0x8d, 0x76, 0xf7, 0x39, 0xcc, 0x0d, 0xb9, 0x13, 0x19, 0xe1, 0x5f, 0xf3, 0x79, 0xd4, 0x19, 0x9c, 0xb1, 0xee, 0x5c, 0x4d, 0x4e, 0xe9, 0x12, 0x57, 0x81, 0xae, 0xd0, 0xbe, 0xb9, 0xfa, 0xf8, 0xa4, 0x7a, 0x64, 0x99, 0xb0, 0x6b, 0x0a, 0xc2, 0xb2, 0x5c, 0x92, 0x73, 0x8a, 0xe4, 0x71, 0x73, 0x38, 0x60, 0xf6, 0xc0, 0x8a, 0x96, 0x19, 0xfe, 0x69, 0x74, 0xe8, 0x94, 0xac, 0x39, 0x3c, 0x8b, 0x02, 0x5d, 0xe0, 0x68, 0x07, 0x1b, 0x1d, 0x14, 0x78, 0x8a, 0x8e, 0x8d, 0x7b, 0xd9, 0xbc, 0x84, 0xa0, 0xa1, 0x11, 0xbb, 0x01, 0x11, 0x0a, 0x82, 0x19, 0x2f, 0x5c, 0x0b, 0xf7, 0x5e, 0x2f, 0x97, 0xc0, 0x5f, 0xd0, 0x74, 0x10, 0xe6, 0x81, 0xf4, 0xd8, 0x9c, 0x1d, 0xb3, 0x17, 0x90, 0x34, 0x0e, 0x1f, 0xd9, 0xf8, 0xad, 0x2f, 0x08, 0x1d, 0x9a, 0x7b, 0x8a, 0x20, 0x7e, 0x13, 0x30, 0xc8, 0x48, 0x25, 0xf3, 0xb4, 0xb1, 0xeb, 0xb3, 0x41, 0xe8, 0x30, 0xeb, 0xf1, 0x29, 0x7c, 0x1f, 0x99, 0x2d, 0xba, 0x11, 0xd9, 0xad, 0x9a, 0xa3, 0x51, 0xe0, 0xc4, 0xa8, 0x5c, 0x7f, 0xdf, 0x22, 0xc1, 0x60, 0x16, 0xdb, 0xcb, 0x1c, 0xfc, 0x46, 0x06, 0x86, 0xc2, 0x1a, 0xb5, 0x13, 0xe3, 0x42, 0x3d, 0x3e, 0x72, 0xc7, 0x25, 0x9f, 0x69, 0xf3, 0x22, 0x38, 0xbf, 0x5f, 0x2f, 0x37, 0x0c, 0x0f, 0x83, 0x51, 0x2e, 0x4f, 0xde, 0x93, 0xfd, 0x1a, 0x03, 0xdd, 0x9c, 0xab, 0xbb, 0x52, 0x63, 0xdb, 0xc3, 0x65, 0x3a, 0xab, 0xc5, 0x04, 0xac, 0xc9, 0x4d, 0x81, 0x65, 0x26, 0x2d, 0x9a, 0x1a, 0x47, 0xb7, 0x52, 0x72, 0x0f, 0x37, 0x09, 0xad, 0x7a, 0x5c, 0x88, 0x67, 0x7b, 0x59, 0xd6, 0x1c, 0x48, 0x2a, 0x97, 0x67, 0x15, 0x69, 0xd9, 0x68, 0xd7, 0x3a, 0x63, 0x7a, 0x27, 0x44, 0xd3, 0x42, 0x31, 0x30, 0xcd, 0xd2, 0xbf, 0x8b, 0x0e, 0x9a, 0x64, 0x77, 0x69, 0x91, 0x67, 0xa8, 0xe5, 0x82, 0xe9, 0x5b, 0xa4, 0xc4, 0x96, 0x51, 0xfd, 0x02, 0xc6, 0xb1, 0x76, 0xfc, 0xe1, 0xea, 0xec, 0xe3, 0xf1, 0xd1, 0xc7, 0xaf, 0x3f, 0x9c, 0xbf, 0x39, 0x3b, 0x59, 0x6b, 0x0c, 0x87, 0x3e, 0xbf, 0x54, 0x1c, 0xf5, 0x25, 0x5a, 0x1e, 0x74, 0x49, 0x60, 0x8a, 0x3c, 0xf2, 0x34, 0xbd, 0x03, 0x86, 0x46, 0x86, 0x04, 0xf9, 0xe8, 0xe9, 0x6f, 0xe4, 0xd5, 0x92, 0x0d, 0x6f, 0x0c, 0x37, 0x5c, 0xa2, 0x9e, 0xd6, 0xaf, 0x69, 0xcb, 0x7a, 0x55, 0xc4, 0x6a, 0xd7, 0x09, 0x06, 0x34, 0x6c, 0xd4, 0xa2, 0xb2, 0x31, 0x9a, 0x2f, 0x8e, 0x91, 0xe8, 0xb8, 0xeb, 0x97, 0x15, 0x58, 0x49, 0x1a, 0x20, 0x00, 0xad, 0x2d, 0xbf, 0xd5, 0x2c, 0x03, 0x30, 0xb1, 0x8e, 0x02, 0xc7, 0x5d, 0x5a, 0x4d, 0x74, 0x1c, 0xad, 0xe1, 0x48, 0x40, 0xbf, 0x3d, 0x99, 0xe4, 0xa8, 0xa8, 0xc0, 0xbe, 0x49, 0x52, 0xba, 0x18, 0x1a, 0x45, 0x45, 0x9d, 0x95, 0x9c, 0x73, 0x9e, 0x86, 0x0d, 0xba, 0x26, 0xee, 0x01, 0x69, 0xf7, 0xc9, 0x43, 0x42, 0x37, 0x4f, 0xde, 0x3a, 0x5e, 0x16, 0x74, 0x9b, 0xbf, 0x07, 0x6d, 0x04, 0xb9, 0xdf, 0x1b, 0xf2, 0xee, 0xc1, 0x0b, 0xfa, 0x10, 0x88, 0x99, 0xa6, 0xc8, 0xcb, 0x67, 0x18, 0x57, 0x8d, 0xc9, 0x93, 0x42, 0x7e, 0xaf, 0xcb, 0xa3, 0xeb, 0x77, 0x41, 0x65, 0xd6, 0xa6, 0xf4, 0x08, 0x29, 0x92, 0x62, 0x5e, 0x56, 0x72, 0x41, 0xce, 0x07, 0x83, 0x88, 0x12, 0x46, 0x66, 0xe9, 0xb0, 0x88, 0xf1, 0x9b, 0xf8, 0x63, 0xfc, 0x29, 0x90, 0x75, 0x63, 0xb8, 0xcb, 0x6f, 0x8f, 0x07, 0x7f, 0xdc, 0xde, 0x46, 0x2d, 0x7e, 0x09, 0xfb, 0xb2, 0x0e, 0xaf, 0x64, 0x25, 0xdc, 0xcc, 0x79, 0xbf, 0xcc, 0x37, 0x48, 0x6c, 0x97, 0xa2, 0x0e, 0xc4, 0x77, 0x20, 0x6d, 0x89, 0x8e, 0x94, 0xa8, 0xe1, 0x38, 0xbd, 0x3d, 0x21, 0x46, 0x27, 0xd9, 0x34, 0xc0, 0x2f, 0x40, 0x5e, 0xcf, 0x7c, 0x85, 0x7c, 0x3d, 0xbd, 0x18, 0x48, 0x2e, 0x4a, 0x3c, 0x82, 0xbf, 0xa2, 0xa3, 0x60, 0x03, 0x57, 0x56, 0xbf, 0x61, 0xba, 0xaa, 0x01, 0x6b, 0xa3, 0xd7, 0x68, 0xbe, 0x50, 0x0a, 0x8d, 0xcf, 0x15, 0xb2, 0xe6, 0xe5, 0xb2, 0x69, 0x4a, 0x44, 0x0e, 0xc3, 0x78, 0x74, 0x7b, 0x1f, 0x17, 0x63, 0xb6, 0x87, 0x80, 0x62, 0x86, 0xe9, 0x2c, 0xad, 0x1e, 0xd9, 0xae, 0x6d, 0xda, 0xd4, 0x1c, 0x1f, 0xc5, 0x0d, 0x84, 0x7b, 0x34, 0x05, 0x93, 0x1f, 0xb5, 0x4f, 0x54, 0xf1, 0xd3, 0xca, 0x35, 0x69, 0x49, 0x45, 0xaa, 0x8c, 0x8a, 0x63, 0xbe, 0xed, 0x89, 0xc7, 0x8a, 0xef, 0x11, 0x4d, 0xd3, 0xd2, 0xae, 0xb2, 0x41, 0x97, 0x49, 0x29, 0xf9, 0x44, 0xe5, 0x23, 0x48, 0xf9, 0x79, 0x14, 0x50, 0x11, 0x29, 0x7b, 0x28, 0xfa, 0x36, 0x79, 0x04, 0xfb, 0x39, 0xcd, 0x2c, 0xa7, 0x64, 0xfb, 0x3e, 0x41, 0xeb, 0x8e, 0x75, 0xd1, 0x54, 0x9d, 0xe9, 0x89, 0xc4, 0x43, 0x58, 0x92, 0xf8, 0x0e, 0x04, 0x7e, 0x5f, 0xf5, 0x70, 0x1c, 0x62, 0xad, 0xac, 0xb1, 0x64, 0xfa, 0x92, 0x7f, 0x88, 0x03, 0xf8, 0x79, 0x96, 0x25, 0x33, 0x39, 0xbe, 0xeb, 0x55, 0x07, 0x60, 0x9e, 0x85, 0x29, 0x7f, 0xcf, 0x37, 0xba, 0x31, 0xdc, 0x4b, 0x0e, 0xee, 0xc7, 0x95, 0xca, 0x24, 0xcd, 0x1a, 0x02, 0xab, 0x68, 0xcb, 0xfc, 0xaa, 0xdf, 0xfa, 0x19, 0xef, 0x36, 0x15, 0xf6, 0xd0, 0xeb, 0x67, 0xce, 0x4e, 0x51, 0x3a, 0x64, 0x3c, 0x63, 0x39, 0xe2, 0x2f, 0x8c, 0x66, 0x45, 0x01, 0x8c, 0xc6, 0x70, 0xae, 0x96, 0xad, 0x32, 0x4c, 0xd6, 0xb1, 0x06, 0x7a, 0x6a, 0x5e, 0x90, 0xbf, 0xa8, 0xc8, 0xe1, 0xac, 0x6b, 0xe7, 0xb9, 0xce, 0xca, 0x46, 0xf3, 0x9a, 0x08, 0x37, 0x77, 0x36, 0x66, 0x23, 0x74, 0xd1, 0x3d, 0xcd, 0xc4, 0x37, 0x59, 0x5b, 0x2d, 0xce, 0xba, 0x84, 0x26, 0x2e, 0x7d, 0x08, 0x6c, 0xec, 0x5f, 0x17, 0xd0, 0xcc, 0x0c, 0x89, 0xf9, 0xf9, 0x32, 0x4b, 0x68, 0xb1, 0x26, 0xa8, 0xdf, 0xab, 0x44, 0xc6, 0x49, 0x18, 0x17, 0xec, 0x82, 0x13, 0x06, 0x58, 0x71, 0x64, 0x5f, 0xb2, 0x6f, 0x06, 0xa0, 0x3b, 0x50, 0x5c, 0x8e, 0x07, 0x9d, 0x68, 0x3d, 0xe9, 0x4f, 0x61, 0xbc, 0x0e, 0x8e, 0xb3, 0x7d, 0x80, 0xff, 0xdd, 0xa1, 0xff, 0xee, 0x76, 0x34, 0xb5, 0xcf, 0xdd, 0x7a, 0x94, 0xe6, 0x4d, 0x59, 0xc4, 0xf1, 0x38, 0x2b, 0xdc, 0xbb, 0xec, 0x63, 0x6e, 0x63, 0x3c, 0xac, 0xb3, 0x9e, 0xf1, 0x2e, 0xfb, 0xea, 0x96, 0x6e, 0xc3, 0x9c, 0xfd, 0x11, 0x77, 0x09, 0x3b, 0x44, 0x60, 0x65, 0x23, 0x50, 0x0f, 0xc9, 0x8d, 0xa8, 0xb7, 0x6a, 0xf4, 0xb1, 0x48, 0x6e, 0xe2, 0xf2, 0x26, 0x5a, 0x56, 0x4c, 0x84, 0x40, 0xb7, 0xcd, 0xe1, 0x16, 0xb3, 0xd4, 0x7a, 0xda, 0xe4, 0xd3, 0x7d, 0xb5, 0xfb, 0xec, 0x29, 0x72, 0x04, 0x64, 0x96, 0xdf, 0xeb, 0x33, 0x3d, 0xc9, 0xb5, 0x0b, 0xa9, 0x05, 0x70, 0x9a, 0xe4, 0x37, 0xc1, 0xc7, 0xdc, 0x48, 0xf6, 0x1c, 0xb5, 0x49, 0x4c, 0x04, 0x04, 0x16, 0x37, 0x81, 0x1d, 0x43, 0x8b, 0x6e, 0x46, 0xe7, 0x86, 0xb6, 0x2b, 0xcd, 0xdb, 0x33, 0x4d, 0x45, 0xcf, 0x4b, 0x27, 0xe2, 0xbd, 0x95, 0x7f, 0x93, 0x3c, 0x15, 0xed, 0xab, 0xe4, 0x68, 0x77, 0x53, 0xf5, 0x7a, 0x9a, 0xb4, 0x95, 0x41, 0x1a, 0x4d, 0x47, 0x16, 0xcb, 0x01, 0x13, 0xa5, 0xeb, 0x74, 0x4a, 0xb6, 0x46, 0xc8, 0x81, 0xc1, 0x4e, 0xa9, 0x7f, 0xe9, 0x92, 0xc0, 0x8c, 0x7b, 0xe8, 0x2f, 0x5d, 0x96, 0xcf, 0xb8, 0x23, 0x0e, 0xd3, 0xe5, 0x77, 0x8c, 0xbf, 0x98, 0xa3, 0xfa, 0xee, 0x06, 0x34, 0xa9, 0xf0, 0xd1, 0x21, 0x8c, 0x63, 0xe7, 0x66, 0x0d, 0x78, 0xa0, 0x2b, 0x71, 0x91, 0xac, 0xc7, 0xb7, 0x71, 0x3f, 0xba, 0x38, 0x1e, 0x5c, 0xe2, 0x27, 0x80, 0x3a, 0xb2, 0x29, 0xcc, 0xe2, 0x6c, 0xd0, 0x18, 0x2e, 0x79, 0xa8, 0x92, 0xac, 0x0c, 0x39, 0x28, 0xfd, 0x6d, 0xd6, 0x28, 0x82, 0xa6, 0xd7, 0xc8, 0x64, 0xc1, 0xd2, 0xa7, 0xb8, 0x38, 0x86, 0x79, 0x31, 0x07, 0x23, 0xe2, 0xab, 0xe6, 0x7d, 0x68, 0x01, 0x37, 0x7f, 0xbc, 0x61, 0x5c, 0x35, 0x5d, 0xa5, 0x05, 0x13, 0x2e, 0x2c, 0x97, 0x53, 0xb4, 0x41, 0x4a, 0xb5, 0x1b, 0xcd, 0x17, 0x60, 0x37, 0x7c, 0x55, 0x41, 0x96, 0x6d, 0x3c, 0x89, 0x60, 0x35, 0x61, 0x26, 0x15, 0xa9, 0x48, 0x59, 0x6e, 0x47, 0xc5, 0x6c, 0x0a, 0xca, 0x1a, 0x4d, 0x29, 0xc0, 0x36, 0x4a, 0x40, 0x05, 0x1d, 0x07, 0x94, 0x00, 0x3e, 0x14, 0x35, 0x9c, 0x26, 0x92, 0x29, 0x1a, 0xf0, 0xff, 0xd0, 0x40, 0x23, 0x56, 0xd1, 0x90, 0xea, 0x29, 0x50, 0x91, 0xa2, 0x9f, 0x14, 0x15, 0x66, 0x36, 0xd5, 0x71, 0x3c, 0x73, 0xff, 0xbf, 0xc9, 0x96, 0xb0, 0xf1, 0x01, 0x69, 0x8c, 0x4a, 0x15, 0x8a, 0x19, 0xdc, 0xc0, 0x55, 0x8e, 0xbd, 0xbd, 0xed, 0xba, 0x1f, 0x9b, 0x88, 0x0d, 0x0c, 0x80, 0x24, 0x3a, 0xc4, 0xff, 0x3e, 0xc9, 0x95, 0x29, 0x75, 0x85, 0x9e, 0x97, 0x78, 0x27, 0xf3, 0x4e, 0xf1, 0xc5, 0x44, 0x75, 0x06, 0xed, 0x49, 0x2f, 0x22, 0xb7, 0x3e, 0xf2, 0xbd, 0x6e, 0xf4, 0x06, 0x13, 0xb2, 0x4f, 0xce, 0xbf, 0x21, 0x1a, 0xb8, 0xdc, 0xde, 0xa1, 0xe8, 0x92, 0xb1, 0x1e, 0xc6, 0xf4, 0x91, 0x92, 0x1d, 0x09, 0x1c, 0x1d, 0xf6, 0x15, 0x5f, 0x92, 0x09, 0x5d, 0x62, 0xa3, 0x18, 0x16, 0xa4, 0xec, 0xa1, 0xf1, 0xa7, 0x93, 0x5f, 0x9e, 0x21, 0x7a, 0xd2, 0x95, 0x1d, 0x14, 0xc7, 0xcc, 0x6d, 0xf2, 0x68, 0xff, 0x46, 0xbb, 0xea, 0x6c, 0xb5, 0x7d, 0xf8, 0xd0, 0xd9, 0xa4, 0x1f, 0x0f, 0x30, 0x43, 0x09, 0xb4, 0xd4, 0xf1, 0xcf, 0xbf, 0x4e, 0x22, 0x86, 0x77, 0x3e, 0xe0, 0x6c, 0x21, 0x3f, 0x97, 0xe6, 0x02, 0x71, 0xe8, 0x9f, 0x59, 0xbc, 0xa4, 0xc3, 0x63, 0xa6, 0x3c, 0x12, 0x7c, 0x9c, 0x19, 0x95, 0xa4, 0xc7, 0x09, 0x60, 0x94, 0x10, 0xd6, 0xdc, 0xfb, 0x51, 0x3e, 0xf3, 0x64, 0x5d, 0xcd, 0x70, 0x25, 0x7d, 0x7e, 0x47, 0xe4, 0x1b, 0x19, 0x73, 0xcc, 0x6c, 0x44, 0x8b, 0x6e, 0x5e, 0x07, 0xa3, 0x53, 0x93, 0xfa, 0x65, 0x25, 0x23, 0xbe, 0xc9, 0x2f, 0x52, 0x98, 0x9b, 0xa6, 0xc6, 0x9a, 0x52, 0x3f, 0xb2, 0x1a, 0x6f, 0x48, 0xfd, 0x87, 0xb3, 0xd5, 0xbd, 0x85, 0x43, 0x47, 0x3f, 0x93, 0xd9, 0xb5, 0xae, 0xeb, 0x69, 0x02, 0x26, 0x57, 0xa4, 0xaa, 0x9f, 0x4b, 0x32, 0xa9, 0x1f, 0xc3, 0xe0, 0x8c, 0x03, 0xf1, 0x46, 0x49, 0x66, 0x55, 0xcd, 0x97, 0xcf, 0xe4, 0x87, 0x96, 0x68, 0xc7, 0xd9, 0x92, 0x4e, 0xe8, 0x28, 0x2a, 0x0e, 0x7e, 0xca, 0x15, 0x4a, 0xef, 0x70, 0xeb, 0x94, 0x76, 0xac, 0x63, 0xb3, 0xae, 0xfa, 0xe6, 0x19, 0xfe, 0x99, 0xa1, 0x4f, 0xec, 0x0f, 0x01, 0x82, 0x0c, 0xd2, 0x22, 0xfa, 0xc6, 0x25, 0xf6, 0x41, 0x0a, 0x0c, 0x26, 0x41, 0x4a, 0x16, 0xfa, 0xec, 0xf1, 0x59, 0x06, 0x9d, 0x2a, 0x20, 0x6a, 0xb7, 0x39, 0xc6, 0x9c, 0x67, 0xed, 0x34, 0x09, 0x04, 0xd8, 0x78, 0x85, 0x29, 0x25, 0x4c, 0xbb, 0xe8, 0x7b, 0x4d, 0x47, 0xb7, 0x14, 0x79, 0x11, 0x09, 0xe5, 0xae, 0x4f, 0xf3, 0xf6, 0x38, 0xe3, 0x34, 0x70, 0x04, 0x64, 0x4b, 0xa2, 0x53, 0x18, 0x69, 0x12, 0xa5, 0x73, 0x9a, 0xb1, 0xce, 0xd6, 0xea, 0x65, 0x80, 0xb9, 0x7e, 0x7c, 0x73, 0x7a, 0x15, 0xad, 0xa3, 0x06, 0xde, 0x34, 0x72, 0x55, 0xbc, 0x6f, 0x26, 0xd5, 0x68, 0x73, 0x71, 0x9b, 0x6e, 0x82, 0xb1, 0x39, 0x1e, 0x6e, 0x18, 0x23, 0x8a, 0x3e, 0x87, 0x54, 0x68, 0x0c, 0x53, 0xb5, 0x4c, 0xc9, 0x34, 0xf5, 0x5c, 0x8f, 0xd6, 0x54, 0xe5, 0x0a, 0x17, 0x63, 0xa3, 0xf2, 0x36, 0x31, 0x41, 0x53, 0x88, 0x86, 0xb3, 0x23, 0x28, 0xb0, 0x93, 0xb0, 0x5f, 0x1a, 0x6c, 0xec, 0xe6, 0x5d, 0xe5, 0xec, 0x47, 0x71, 0xe4, 0xb0, 0x03, 0x47, 0x53, 0xf6, 0x44, 0x5c, 0x58, 0xed, 0xb7, 0x8b, 0xc9, 0x96, 0xb8, 0x29, 0x0b, 0x14, 0x49, 0x63, 0x74, 0x03, 0x36, 0x87, 0x23, 0x4d, 0xae, 0xd3, 0xdf, 0xec, 0x44, 0x26, 0xbd, 0x14, 0x76, 0x99, 0xf3, 0xa7, 0x4d, 0xe0, 0x0b, 0x48, 0x6c, 0xb2, 0x2c, 0x8d, 0x1f, 0x33, 0x36, 0xe7, 0xd5, 0x0f, 0x31, 0x54, 0xe7, 0x38, 0x8d, 0xce, 0x05, 0xba, 0x31, 0xdd, 0x2c, 0xd7, 0x5a, 0x97, 0x49, 0xd1, 0x51, 0x75, 0x7e, 0xea, 0x44, 0x4e, 0x7a, 0x62, 0x2d, 0x4b, 0x31, 0xb5, 0x09, 0x44, 0x8e, 0x10, 0x00, 0x89, 0x6c, 0xee, 0xf0, 0x38, 0x99, 0xa5, 0xf3, 0x94, 0x6c, 0x2f, 0x77, 0x0a, 0xbd, 0x50, 0x80, 0xd0, 0x4e, 0xe9, 0x27, 0x7f, 0x4a, 0x9a, 0xf2, 0x1b, 0xe3, 0xaf, 0x61, 0x4a, 0xe4, 0x11, 0xe3, 0x8c, 0xcc, 0xb0, 0xd5, 0x5c, 0x9f, 0x90, 0x49, 0x1a, 0x5e, 0x11, 0x39, 0x36, 0x77, 0xa9, 0x4d, 0x95, 0xb7, 0x2e, 0x11, 0xbd, 0xf4, 0xcc, 0xd4, 0xa2, 0xc5, 0xed, 0xa8, 0xdc, 0xde, 0x6e, 0x0a, 0xba, 0xd2, 0x52, 0x94, 0xd8, 0xef, 0xb1, 0x21, 0xcc, 0x0f, 0x57, 0xa7, 0xd1, 0x3a, 0x16, 0x89, 0xbc, 0xdc, 0xdf, 0xde, 0xd9, 0x70, 0x33, 0x4b, 0x94, 0x01, 0xf8, 0x72, 0xf3, 0x91, 0x43, 0xb2, 0xce, 0x05, 0x9c, 0xe5, 0xa3, 0x58, 0x34, 0x0e, 0x3b, 0xf4, 0x38, 0xb9, 0x4b, 0x47, 0x58, 0xa3, 0x83, 0x01, 0x79, 0xe4, 0xc1, 0xc3, 0x04, 0x26, 0xe9, 0xed, 0xb8, 0xcd, 0xe8, 0xe5, 0xd9, 0x83, 0x89, 0x64, 0x34, 0x65, 0xcc, 0x9b, 0x06, 0x1a, 0xa8, 0x64, 0xef, 0xdc, 0x59, 0x4b, 0x94, 0x20, 0x6e, 0xf1, 0x04, 0xe1, 0xba, 0xb8, 0x82, 0x86, 0x74, 0x8c, 0xae, 0x0d, 0xfc, 0xf4, 0x7a, 0xb2, 0x59, 0xc2, 0x7a, 0x4d, 0xec, 0x18, 0x33, 0x50, 0x9a, 0x07, 0x28, 0x73, 0xea, 0xa0, 0x20, 0xc9, 0x48, 0xb8, 0xc7, 0x76, 0x50, 0xb3, 0xfb, 0xae, 0x26, 0x54, 0x1f, 0xd5, 0xf7, 0x94, 0x13, 0xe1, 0x80, 0xe6, 0x12, 0x1e, 0xf2, 0x77, 0x72, 0x32, 0xd5, 0xd9, 0xa7, 0x1c, 0x0f, 0x9e, 0xbd, 0x78, 0x0d, 0x87, 0xac, 0x28, 0x28, 0xbf, 0x8d, 0xf5, 0x71, 0x4f, 0x8e, 0xc3, 0xeb, 0x9b, 0x2a, 0x84, 0x48, 0x0a, 0xa9, 0xbf, 0x91, 0x3d, 0x3f, 0xc0, 0x3c, 0xc9, 0xd3, 0x73, 0x2b, 0x8e, 0x1e, 0x52, 0x8a, 0x4d, 0x0a, 0x87, 0xef, 0x2b, 0x56, 0xc1, 0x0f, 0x47, 0x34, 0xca, 0xc7, 0x0d, 0x93, 0x1d, 0x37, 0xc1, 0x11, 0x78, 0xc4, 0xfd, 0x38, 0x54, 0x49, 0x1c, 0x2f, 0xec, 0xc9, 0x46, 0x4a, 0x65, 0xf7, 0xfa, 0x2f, 0xe2, 0x81, 0x21, 0x8f, 0x1a, 0xb1, 0xc0, 0x5f, 0xc5, 0x01, 0x9f, 0xf0, 0x39, 0x1d, 0x7b, 0x12, 0xbb, 0x34, 0xca, 0x90, 0xd5, 0xd5, 0x30, 0x59, 0x3c, 0xa2, 0x8d, 0xf3, 0x2d, 0x1a, 0x4c, 0x1b, 0xa4, 0x94, 0x00, 0xcc, 0xf9, 0x6a, 0xdc, 0x4d, 0x76, 0xec, 0xc0, 0x75, 0x59, 0x3f, 0xe3, 0x20, 0x65, 0x74, 0xf9, 0xf6, 0x07, 0xe5, 0x96, 0x21, 0x03, 0x9e, 0x1c, 0x51, 0x5f, 0x98, 0xec, 0x30, 0xb0, 0x28, 0x30, 0x53, 0x2d, 0x95, 0xac, 0x4f, 0x76, 0x13, 0x51, 0x38, 0x7c, 0xc3, 0x26, 0x33, 0xe2, 0x56, 0x77, 0x0e, 0xe9, 0x77, 0xcd, 0x58, 0x53, 0xce, 0x96, 0xcc, 0x97, 0x3f, 0xf1, 0xaf, 0x99, 0xc7, 0xc2, 0xbf, 0xaa, 0x9b, 0xe5, 0x7c, 0x08, 0xe7, 0x99, 0x55, 0x5f, 0x76, 0x22, 0x0e, 0xb6, 0x4e, 0x64, 0x3f, 0x57, 0x98, 0x9d, 0xa9, 0xd6, 0xeb, 0xa8, 0x6f, 0xb1, 0xb6, 0x6b, 0x3c, 0x3b, 0xad, 0x1d, 0xb0, 0xf9, 0x79, 0x70, 0x78, 0xec, 0xcb, 0xf6, 0x54, 0xbd, 0x0f, 0x40, 0x9e, 0x3f, 0xbd, 0xff, 0xcb, 0x4f, 0xaf, 0x76, 0xf7, 0xe2, 0x97, 0xf1, 0xe8, 0xc5, 0xe4, 0xf3, 0x78, 0x7f, 0xbc, 0xff, 0xf2, 0xd5, 0xce, 0xe7, 0xfb, 0xf1, 0xcb, 0xbd, 0x49, 0xfc, 0x62, 0x3b, 0xd9, 0x7e, 0x35, 0xd9, 0xd9, 0x1d, 0x8f, 0x27, 0xc9, 0xe7, 0xe3, 0x97, 0x71, 0xa7, 0x4f, 0xe6, 0x97, 0x4e, 0xdd, 0x67, 0xb5, 0x1a, 0x78, 0x8b, 0xa3, 0xc1, 0xbb, 0xa3, 0xde, 0x76, 0x74, 0x93, 0x3c, 0xe8, 0x05, 0x63, 0x8f, 0xa6, 0xc9, 0xba, 0x4b, 0x24, 0xaf, 0xba, 0x7d, 0xb1, 0x5a, 0x28, 0x88, 0x59, 0xd3, 0xe8, 0x2b, 0x21, 0x0d, 0x98, 0x77, 0x51, 0xb7, 0x95, 0xf3, 0xea, 0x8c, 0xff, 0xf0, 0x40, 0x7d, 0xf6, 0xb8, 0xae, 0xe6, 0xe5, 0x3f, 0x83, 0x77, 0x66, 0xef, 0xe3, 0x11, 0x28, 0x49, 0xb0, 0x27, 0xf2, 0xe0, 0x00, 0x4c, 0x5b, 0x60, 0xd3, 0xdd, 0x48, 0xfe, 0x82, 0x5e, 0x62, 0x67, 0x8c, 0x6f, 0x8a, 0x7c, 0xb9, 0xb8, 0xcc, 0x67, 0xe9, 0xe8, 0x71, 0xd5, 0x70, 0xee, 0x63, 0xb5, 0x5f, 0x9c, 0x30, 0x0b, 0x4f, 0xcb, 0xe4, 0x77, 0x34, 0xad, 0x1c, 0x76, 0xfc, 0x0c, 0xdb, 0xaa, 0x37, 0x4a, 0x17, 0x37, 0x18, 0xe7, 0x3d, 0xa4, 0x2c, 0x3f, 0x0c, 0xcd, 0xf0, 0x0f, 0xc2, 0x36, 0xd5, 0x40, 0x6e, 0x64, 0x29, 0xe7, 0xa9, 0x6f, 0x8b, 0xc6, 0x95, 0x6a, 0x09, 0x9c, 0xba, 0xa9, 0x24, 0xb3, 0x34, 0xf5, 0xfc, 0x78, 0xf6, 0x43, 0x7c, 0xdb, 0x55, 0xdb, 0x66, 0xe7, 0x85, 0xfc, 0xaa, 0x1f, 0x5d, 0x51, 0x9c, 0x7c, 0xb9, 0x60, 0xf3, 0x82, 0xfc, 0xf9, 0xfc, 0xbb, 0xe6, 0x45, 0xc3, 0xc9, 0x0b, 0xc5, 0x70, 0x21, 0x1e, 0xec, 0xe8, 0x87, 0xab, 0xb3, 0x83, 0xe6, 0x3e, 0x51, 0xb1, 0x51, 0x79, 0xb0, 0xb9, 0x49, 0x21, 0x9f, 0x9b, 0xf8, 0xe1, 0xa1, 0x5f, 0x26, 0x9b, 0xe3, 0x7c, 0x54, 0x6e, 0x96, 0xe5, 0x4c, 0x77, 0xa3, 0x5e, 0xfb, 0xf7, 0x09, 0xbc, 0xb9, 0xf9, 0x9c, 0xd8, 0x56, 0x32, 0xee, 0x95, 0xa5, 0x97, 0x1b, 0x34, 0x38, 0xd6, 0xcc, 0x83, 0x13, 0xc9, 0x49, 0x23, 0x39, 0xd7, 0x83, 0xdd, 0x1d, 0x0c, 0xde, 0x45, 0xfa, 0x32, 0x6d, 0xaf, 0x09, 0x89, 0x9b, 0xbc, 0x9c, 0x6e, 0x40, 0x0d, 0x8b, 0x85, 0x61, 0x7f, 0xe1, 0x3a, 0x74, 0x50, 0x9d, 0xce, 0xf9, 0x0f, 0xa9, 0x5d, 0x49, 0xab, 0x95, 0x89, 0x7c, 0x2f, 0x1a, 0x0e, 0x10, 0xb3, 0x88, 0x70, 0xfc, 0x5f, 0x9d, 0x60, 0x71, 0x64, 0x9f, 0xb4, 0x1e, 0xa1, 0x66, 0x71, 0x3a, 0x50, 0xef, 0x34, 0x2f, 0x40, 0x78, 0xcc, 0xcb, 0x90, 0x17, 0x54, 0x6f, 0x79, 0xc9, 0x6a, 0x5f, 0xc9, 0xb9, 0x88, 0x30, 0x4c, 0xe6, 0x0c, 0x0e, 0xc7, 0x48, 0x39, 0x8c, 0x7d, 0xf7, 0xb0, 0x82, 0xf1, 0x2d, 0x3d, 0xbc, 0x36, 0x2f, 0xda, 0x32, 0xb3, 0xc1, 0x0f, 0x12, 0xc7, 0x30, 0x59, 0x29, 0x2c, 0xf3, 0x2c, 0x04, 0xca, 0xfd, 0x27, 0x31, 0x81, 0x3a, 0x44, 0x51, 0xe4, 0x8e, 0x52, 0xdb, 0xfb, 0x96, 0x8c, 0x4b, 0x90, 0x8e, 0xe9, 0x54, 0xc3, 0xeb, 0x2d, 0x39, 0x76, 0x28, 0xba, 0x2a, 0xca, 0x5d, 0x96, 0x72, 0x70, 0x14, 0x0a, 0x98, 0xc2, 0x46, 0xa9, 0x25, 0x92, 0x9d, 0xc9, 0xe9, 0x40, 0xb5, 0x2a, 0x78, 0xef, 0x26, 0x60, 0xcd, 0x8f, 0x7d, 0x1c, 0xd3, 0xa8, 0xf4, 0x5e, 0xd2, 0xf0, 0xe2, 0xbe, 0x70, 0x12, 0xdb, 0x50, 0x2b, 0x23, 0x37, 0x03, 0x3c, 0xd3, 0xb4, 0xf6, 0x28, 0xe7, 0xd6, 0xe8, 0x7c, 0xa1, 0x12, 0xd7, 0xe6, 0x7a, 0x34, 0xf5, 0x5e, 0xf7, 0x36, 0xa5, 0xa2, 0xea, 0x98, 0xf2, 0xfa, 0x43, 0xa2, 0x3d, 0x77, 0x82, 0xb4, 0x38, 0xa0, 0x2f, 0xf3, 0x2a, 0x93, 0x36, 0xa9, 0x95, 0x4a, 0xa4, 0x10, 0x00, 0x07, 0x02, 0xb1, 0x87, 0x19, 0xe7, 0x58, 0x4a, 0x3f, 0xcb, 0xad, 0x82, 0x05, 0x84, 0x07, 0xbc, 0x90, 0xaa, 0x11, 0xfb, 0x1e, 0xdf, 0xe6, 0x9a, 0x24, 0x4e, 0x22, 0xe4, 0xda, 0x3a, 0xce, 0xf6, 0xe2, 0x9f, 0x91, 0xf8, 0x1a, 0x6a, 0x8c, 0xdc, 0xf2, 0x33, 0x3c, 0xbf, 0x90, 0x6b, 0x48, 0xb2, 0xf2, 0xb9, 0xd0, 0x31, 0xa5, 0x12, 0x5e, 0x29, 0xfa, 0xe4, 0x22, 0x03, 0xf5, 0x6c, 0x97, 0xb9, 0xa4, 0x6c, 0xe2, 0x44, 0x71, 0x9e, 0x3c, 0xc7, 0x26, 0xa9, 0x9b, 0x82, 0xce, 0x9a, 0x31, 0x12, 0x97, 0x36, 0x57, 0xbf, 0xf4, 0xa3, 0x95, 0x76, 0x33, 0x43, 0xd6, 0xab, 0x57, 0xf7, 0x40, 0x13, 0x29, 0x12, 0xfd, 0x42, 0x96, 0x37, 0x27, 0xa5, 0xf3, 0x08, 0xe5, 0xa3, 0x6a, 0x6e, 0xbf, 0x33, 0x01, 0xcd, 0xf1, 0x37, 0xa7, 0xdc, 0x92, 0xbd, 0x99, 0x44, 0xf6, 0x91, 0xc8, 0xda, 0x99, 0xf6, 0x18, 0xc9, 0xdf, 0x40, 0x15, 0x1b, 0x25, 0x4f, 0xfd, 0x00, 0xe7, 0xf4, 0x7a, 0x23, 0xe4, 0x27, 0xb6, 0x23, 0x29, 0x45, 0xe1, 0x3d, 0x9d, 0xe5, 0xa5, 0xc6, 0x5f, 0x50, 0xb9, 0xe0, 0xba, 0x5b, 0xe0, 0x06, 0xdf, 0xcb, 0x0f, 0xf8, 0x68, 0x1a, 0xc3, 0xf1, 0x53, 0x5d, 0x99, 0xe2, 0xc4, 0x2a, 0x1b, 0x62, 0xab, 0xda, 0x62, 0x61, 0xd4, 0x36, 0x8c, 0x35, 0x79, 0x10, 0xfd, 0xf4, 0x53, 0x37, 0x02, 0x23, 0xb9, 0x31, 0xdc, 0x4f, 0x15, 0xfc, 0x14, 0x68, 0xf1, 0x27, 0x2e, 0x58, 0xfa, 0xe9, 0x0e, 0x8d, 0x40, 0x74, 0x30, 0x97, 0x33, 0x8c, 0x1e, 0xb1, 0x9a, 0x5d, 0xf7, 0xca, 0x71, 0x3d, 0xf4, 0x8a, 0xd4, 0x2c, 0x6b, 0xb7, 0x73, 0x2a, 0x26, 0x1c, 0xd8, 0x72, 0x9e, 0x89, 0x75, 0xc2, 0xc4, 0x49, 0xf7, 0x9e, 0xe4, 0xc0, 0xda, 0x1f, 0xd7, 0x2c, 0x21, 0x85, 0xf6, 0xae, 0x48, 0x58, 0xd2, 0x93, 0xa8, 0x4a, 0x1d, 0x31, 0xa5, 0xd5, 0xc3, 0x64, 0x6e, 0x46, 0x1c, 0x2e, 0x45, 0x66, 0x7a, 0x81, 0xce, 0x75, 0x2e, 0x03, 0x6b, 0x8a, 0x71, 0x6b, 0x4a, 0x62, 0x6d, 0xdc, 0xe2, 0xe6, 0xb1, 0xc4, 0x4c, 0x0e, 0x99, 0x8d, 0x77, 0x7b, 0x5a, 0x13, 0x8c, 0x65, 0xef, 0xb1, 0xa8, 0x07, 0xf9, 0x00, 0x32, 0xbf, 0x1a, 0xeb, 0x84, 0x19, 0xad, 0xf5, 0xd6, 0x4c, 0x2c, 0x4c, 0xf2, 0x65, 0xbc, 0x5c, 0x7a, 0x93, 0x9c, 0x6d, 0x93, 0x0f, 0xbd, 0x4f, 0x3a, 0x49, 0x71, 0xb9, 0x9b, 0xee, 0x68, 0x8b, 0xdb, 0xb1, 0x3a, 0x55, 0xa3, 0xf8, 0xf2, 0x7d, 0xe1, 0x3f, 0x01, 0x87, 0x13, 0xa5, 0x45, 0x92, 0xe9, 0xa1, 0x03, 0x90, 0x37, 0xc4, 0x86, 0x87, 0x7a, 0x3d, 0xc2, 0x19, 0x59, 0x30, 0x36, 0x08, 0x92, 0x04, 0x65, 0x1e, 0x3c, 0x62, 0x25, 0xd8, 0x62, 0xe6, 0xf1, 0x5b, 0x49, 0x05, 0xd4, 0x62, 0x6b, 0xbc, 0xe0, 0x08, 0x48, 0x71, 0x9f, 0x09, 0xa0, 0xc0, 0x20, 0x27, 0xaf, 0xcc, 0x88, 0x72, 0x18, 0x24, 0x5d, 0x46, 0x6a, 0xca, 0x02, 0x56, 0x20, 0xca, 0x40, 0x4f, 0x07, 0xc2, 0xf9, 0xbc, 0x8e, 0x3a, 0xed, 0x9a, 0x50, 0xa7, 0xf9, 0x06, 0x65, 0x40, 0x5a, 0x17, 0xa7, 0xd4, 0xcb, 0xd3, 0x44, 0xd6, 0x25, 0x93, 0xae, 0xf7, 0x37, 0x4e, 0x68, 0xe3, 0x92, 0x2e, 0x91, 0xaf, 0x1b, 0x9c, 0x20, 0x5c, 0x06, 0x22, 0xfb, 0x36, 0xcb, 0xca, 0xa1, 0x0f, 0x9b, 0xa7, 0x94, 0x92, 0xfb, 0x9a, 0xa4, 0x17, 0x4b, 0x3b, 0xe7, 0x69, 0x2f, 0x14, 0xaf, 0x6f, 0x63, 0xc5, 0x09, 0x7e, 0x4f, 0x5c, 0xd2, 0x2a, 0x3a, 0xcc, 0x8d, 0x5e, 0xcc, 0x08, 0xa7, 0x43, 0x6b, 0x5d, 0x48, 0x25, 0xf2, 0x76, 0x67, 0x7b, 0xc3, 0x54, 0x47, 0x12, 0xd8, 0x06, 0x67, 0x66, 0x8b, 0x9e, 0xd0, 0xb9, 0xc9, 0x39, 0x97, 0xa8, 0x73, 0x80, 0x85, 0x7b, 0x72, 0x1b, 0x69, 0x8d, 0x0a, 0x83, 0xd0, 0x18, 0x8e, 0x32, 0xb5, 0xde, 0x5d, 0xbc, 0x3f, 0xa9, 0x67, 0xe0, 0xd2, 0x4f, 0x42, 0xce, 0x57, 0x60, 0x57, 0x6f, 0x81, 0xc3, 0x30, 0x0d, 0xc4, 0x9e, 0x36, 0xc7, 0xb4, 0x05, 0xd3, 0x9a, 0x26, 0xd5, 0xe2, 0x7e, 0x99, 0x8e, 0xd7, 0x37, 0x90, 0x46, 0xb0, 0xdc, 0xa4, 0x47, 0x35, 0x4e, 0x6c, 0x1a, 0x96, 0xd1, 0x3a, 0x2b, 0xe8, 0x45, 0x52, 0x2d, 0x8b, 0x8c, 0x1d, 0xe6, 0x38, 0xf7, 0xa6, 0x91, 0x05, 0xd2, 0x99, 0x45, 0x9d, 0xeb, 0x1c, 0x10, 0xcc, 0x1c, 0x4e, 0x61, 0xe2, 0x01, 0xc1, 0xdc, 0xbd, 0x30, 0x79, 0x1f, 0x74, 0xf0, 0xb4, 0x16, 0x4f, 0x7e, 0xb9, 0x3b, 0x11, 0x1d, 0x5d, 0x5e, 0xbe, 0x39, 0xba, 0x3e, 0x32, 0x6b, 0x23, 0x01, 0x4d, 0xcc, 0x85, 0x34, 0x64, 0xe0, 0x43, 0xa8, 0x35, 0xe1, 0x93, 0x6b, 0x7f, 0xfa, 0x30, 0x38, 0xb9, 0x6a, 0x1e, 0xec, 0xe5, 0xd5, 0x05, 0x02, 0x12, 0xfd, 0xe9, 0xa7, 0xa3, 0xc5, 0x62, 0xa6, 0x41, 0xc1, 0x37, 0x71, 0x15, 0xaf, 0x79, 0xb7, 0x7a, 0x67, 0x03, 0xe7, 0x77, 0x6f, 0xe6, 0x37, 0x11, 0x21, 0x47, 0xa6, 0x7e, 0xd4, 0xc7, 0x03, 0x2d, 0x46, 0x9a, 0x7e, 0x6b, 0x76, 0x83, 0x36, 0x80, 0xb2, 0x67, 0xdb, 0x17, 0x92, 0x5b, 0x4e, 0xa6, 0x89, 0x64, 0xba, 0x59, 0x33, 0x30, 0xb2, 0x93, 0xd1, 0xb2, 0x52, 0x92, 0x27, 0xfa, 0xc2, 0x2a, 0xee, 0xe6, 0xbe, 0x78, 0xc7, 0x63, 0xc3, 0x28, 0xcc, 0x05, 0x08, 0x44, 0x00, 0x08, 0x8d, 0x52, 0xa4, 0x75, 0xb6, 0xcc, 0xc5, 0x02, 0x34, 0x35, 0x4e, 0x38, 0xac, 0x42, 0xa0, 0x02, 0x3c, 0x25, 0x6f, 0x43, 0xfe, 0x08, 0xb7, 0xb1, 0x17, 0x9d, 0x48, 0xb5, 0x1b, 0x2d, 0x1c, 0x7e, 0xe0, 0x3d, 0x54, 0x19, 0xf3, 0x41, 0xd8, 0x7d, 0x98, 0x57, 0x38, 0x40, 0x1b, 0x9d, 0xa6, 0x08, 0xe0, 0xd2, 0x56, 0x78, 0x08, 0xa7, 0x8d, 0x9b, 0x4e, 0xd6, 0x53, 0x27, 0x90, 0xf4, 0xd4, 0x8b, 0xa7, 0x48, 0x5e, 0xf0, 0x28, 0x68, 0xd7, 0x60, 0x34, 0xe1, 0xbf, 0x36, 0xb7, 0xfb, 0x5b, 0x1d, 0x7f, 0xf2, 0x78, 0x59, 0x08, 0x24, 0xc5, 0x44, 0xd5, 0x90, 0x1b, 0x56, 0x79, 0xfe, 0xe4, 0xfc, 0x98, 0x85, 0x81, 0x7e, 0xba, 0x80, 0xf1, 0x83, 0x53, 0xe9, 0x5d, 0x78, 0x59, 0x20, 0x98, 0xb9, 0x5b, 0x28, 0x53, 0x04, 0x9e, 0x98, 0xe5, 0xf7, 0xb8, 0x12, 0x20, 0xb5, 0xd9, 0xac, 0x86, 0x66, 0xd3, 0x09, 0x6f, 0x73, 0x46, 0xc0, 0x51, 0x49, 0x73, 0xb7, 0x83, 0x91, 0x6b, 0x55, 0x3e, 0x5d, 0x0d, 0xcf, 0xa4, 0xbc, 0x92, 0x15, 0x69, 0x28, 0xc1, 0x05, 0x13, 0x00, 0x2e, 0xe7, 0xf1, 0xbd, 0x99, 0x9b, 0x99, 0xd1, 0xd3, 0xf4, 0x90, 0x1e, 0x0e, 0x82, 0x5a, 0xe9, 0x21, 0xd7, 0xaa, 0x7b, 0xb6, 0xfc, 0xfb, 0xf8, 0x21, 0x9d, 0x2f, 0xe7, 0xf4, 0x31, 0xa4, 0x6d, 0x79, 0x4c, 0xe2, 0x09, 0xe4, 0x55, 0xe4, 0xf4, 0x14, 0x22, 0xf2, 0xb5, 0x32, 0x72, 0x2c, 0xfa, 0x90, 0x90, 0x01, 0x91, 0xdc, 0xb7, 0xcb, 0x23, 0x65, 0x81, 0x02, 0x0e, 0x65, 0xc3, 0x1b, 0x00, 0xfa, 0x41, 0x8c, 0x39, 0x07, 0x65, 0x6e, 0x12, 0x76, 0x02, 0xec, 0x9c, 0xc1, 0x12, 0x44, 0x87, 0x73, 0xf2, 0x55, 0x93, 0x22, 0xcd, 0xc7, 0xe6, 0xde, 0xa0, 0xfe, 0x98, 0x66, 0x4b, 0xd8, 0x67, 0xf6, 0x25, 0x73, 0x10, 0x02, 0x7f, 0xe5, 0x79, 0x08, 0x29, 0xab, 0x7e, 0x40, 0xc5, 0x12, 0x9a, 0x82, 0xfa, 0xb2, 0xbf, 0xbb, 0xd3, 0xdf, 0xea, 0xd6, 0x0c, 0x7a, 0xc1, 0x94, 0x80, 0xdb, 0x35, 0x4a, 0xe7, 0xa6, 0xde, 0xb4, 0xff, 0xbb, 0x39, 0x6e, 0x28, 0x23, 0x7c, 0x1e, 0x3f, 0xd0, 0xf1, 0x05, 0x8f, 0x35, 0x8f, 0x0e, 0xdf, 0x5d, 0x0c, 0xae, 0xb7, 0x0f, 0x2e, 0x2f, 0xae, 0xe0, 0xbf, 0xf8, 0xf7, 0x1d, 0xfa, 0xfb, 0x8e, 0x67, 0x55, 0xbe, 0x95, 0x0c, 0x5a, 0x2d, 0xd6, 0x21, 0x0d, 0x85, 0x34, 0x1a, 0xde, 0xcd, 0xc8, 0x19, 0x08, 0xf5, 0x72, 0x62, 0x83, 0x23, 0x53, 0xd1, 0xd8, 0x3c, 0x62, 0xe7, 0x53, 0x9a, 0x64, 0xd7, 0x8f, 0xfc, 0x44, 0xbe, 0xb4, 0x52, 0x6d, 0x4a, 0x6a, 0xe1, 0xb5, 0xca, 0xbe, 0xe9, 0xeb, 0xe6, 0x3a, 0x66, 0xa9, 0xcf, 0x51, 0xbc, 0x3a, 0xca, 0x0d, 0xab, 0xff, 0x6a, 0x34, 0x03, 0xed, 0x3e, 0xc1, 0x5c, 0x92, 0x71, 0xc2, 0x01, 0x16, 0xfc, 0x49, 0xc8, 0x30, 0x81, 0xeb, 0x27, 0x25, 0x0b, 0x5e, 0x82, 0x21, 0x51, 0xa4, 0x46, 0x75, 0x60, 0x36, 0x30, 0xc7, 0x14, 0x34, 0x71, 0xde, 0x8e, 0x2c, 0xf1, 0x2a, 0x04, 0x18, 0x47, 0xce, 0x75, 0x62, 0x51, 0x91, 0x3e, 0x95, 0xdb, 0x9f, 0x5f, 0x5c, 0x47, 0xf1, 0x64, 0xa2, 0xd8, 0x00, 0x58, 0x96, 0x80, 0x1a, 0xeb, 0xe6, 0x82, 0x25, 0x59, 0x5c, 0x85, 0x52, 0x37, 0x44, 0x1f, 0xb9, 0x3e, 0x1b, 0x6c, 0xa2, 0x0b, 0x8b, 0x93, 0xe0, 0x06, 0xe7, 0xa7, 0xdd, 0x9a, 0xaf, 0xda, 0x4d, 0x7d, 0xd9, 0x40, 0x49, 0x19, 0x56, 0x28, 0x62, 0x47, 0x16, 0x5a, 0xc4, 0x19, 0x4c, 0xaa, 0xa3, 0x23, 0xed, 0x48, 0x35, 0x58, 0x87, 0x8e, 0xb6, 0x13, 0x69, 0xd4, 0x94, 0xec, 0xe2, 0xf9, 0xa2, 0x7a, 0xf4, 0xeb, 0x45, 0xc9, 0xb7, 0x81, 0x38, 0x2c, 0xa8, 0x74, 0x74, 0xd0, 0x2c, 0xc1, 0x65, 0xd1, 0x92, 0x3a, 0x7d, 0x1e, 0x76, 0xa7, 0x43, 0xa3, 0xd2, 0xa0, 0xf0, 0x77, 0x1c, 0x93, 0x88, 0x76, 0x98, 0x84, 0xd2, 0xfb, 0xf9, 0x43, 0xce, 0xe0, 0x91, 0x19, 0x1e, 0x26, 0x66, 0xea, 0xd4, 0x94, 0x3a, 0x90, 0xc1, 0xe4, 0x45, 0x3a, 0xc5, 0x3c, 0x81, 0x66, 0xe9, 0x98, 0x9d, 0x88, 0xe7, 0x99, 0x42, 0x65, 0xac, 0xac, 0x3a, 0x8e, 0x2b, 0xa1, 0xf2, 0x12, 0xf4, 0x29, 0x6d, 0xb4, 0x50, 0x93, 0x46, 0xa7, 0x83, 0xfc, 0xa7, 0x0a, 0xe8, 0xf1, 0xac, 0xec, 0xc1, 0xea, 0x50, 0xee, 0xd8, 0x20, 0x90, 0x96, 0xfe, 0xe8, 0x5d, 0x22, 0x24, 0x9c, 0xd3, 0x4a, 0x19, 0x38, 0x87, 0x8d, 0x9a, 0xc3, 0x31, 0x62, 0x1b, 0x70, 0x04, 0xad, 0xfa, 0xe8, 0x6c, 0xef, 0xbc, 0xec, 0x6f, 0xc1, 0xff, 0xc1, 0xa1, 0x88, 0x7e, 0x44, 0x70, 0x51, 0x16, 0x16, 0xc8, 0x3c, 0x99, 0x3c, 0x34, 0x49, 0x92, 0x05, 0x50, 0x5e, 0x4c, 0x3b, 0x2b, 0x6b, 0x58, 0x6b, 0x22, 0x05, 0x0f, 0xd2, 0x88, 0x93, 0x78, 0x2c, 0x3f, 0xd1, 0x3b, 0x5e, 0x2c, 0x67, 0x81, 0xb4, 0x3e, 0xc7, 0x8d, 0x8c, 0xda, 0xd9, 0xec, 0x4e, 0x9c, 0xc8, 0xef, 0x90, 0x37, 0x71, 0x1d, 0x5f, 0xbf, 0x96, 0x14, 0xf5, 0xaa, 0xe6, 0x13, 0x3c, 0x16, 0x93, 0x8d, 0x38, 0x73, 0x0f, 0x2e, 0xc3, 0x61, 0x3e, 0x99, 0x94, 0x49, 0xd5, 0x14, 0x40, 0xc7, 0xf2, 0xc8, 0xe6, 0x15, 0x01, 0x1c, 0x12, 0xa7, 0xd2, 0x8a, 0x9b, 0xa8, 0x0e, 0xcb, 0x13, 0x49, 0x16, 0x1a, 0xb3, 0x2d, 0x1e, 0xae, 0x1f, 0x28, 0x32, 0x70, 0x7f, 0xaf, 0x19, 0x22, 0x5c, 0x15, 0xaf, 0x60, 0x2f, 0x54, 0x6e, 0xc5, 0x38, 0x2e, 0x22, 0xe9, 0x9a, 0xa8, 0x6c, 0x7a, 0x25, 0x6e, 0xd3, 0xc5, 0x02, 0xcd, 0x1b, 0x46, 0x38, 0x23, 0xb2, 0x35, 0x01, 0x34, 0x8a, 0xe3, 0x12, 0x29, 0x6b, 0xb6, 0x20, 0x28, 0xc9, 0x23, 0x91, 0xf9, 0xc3, 0x64, 0xe2, 0x07, 0x81, 0x38, 0xa9, 0xd1, 0x85, 0xb5, 0x91, 0x1a, 0xdd, 0x31, 0x42, 0xd8, 0x64, 0xb1, 0xb2, 0x98, 0x89, 0x03, 0xf8, 0x20, 0xc5, 0x7f, 0xdd, 0xc0, 0xfd, 0xb7, 0xc5, 0x59, 0xc6, 0x0f, 0x37, 0x38, 0xfd, 0x9f, 0x27, 0x16, 0x84, 0xc8, 0xa0, 0xfc, 0x70, 0xb9, 0x4b, 0xa8, 0x78, 0x08, 0x6e, 0x61, 0xef, 0x18, 0xce, 0xab, 0x43, 0x53, 0xb1, 0xa9, 0x26, 0x79, 0xa3, 0x1c, 0x83, 0xec, 0x1e, 0xd4, 0x24, 0x48, 0x1b, 0xda, 0xc4, 0xba, 0x7f, 0x4f, 0x34, 0x30, 0x46, 0x25, 0xfb, 0x17, 0x65, 0x8d, 0x74, 0x3b, 0x2a, 0xa9, 0x9a, 0x73, 0x6b, 0x4e, 0x44, 0x59, 0xdc, 0x4c, 0x33, 0x54, 0x19, 0x59, 0x81, 0xf1, 0x4a, 0x32, 0xb4, 0x0e, 0x96, 0xd1, 0x4e, 0x96, 0xd5, 0xef, 0x18, 0x3b, 0x29, 0x90, 0x7e, 0x09, 0xc6, 0xce, 0x21, 0xea, 0x11, 0x13, 0x35, 0x62, 0x75, 0xf6, 0xfe, 0x0a, 0x56, 0xf6, 0xa1, 0xba, 0x29, 0xda, 0x80, 0x01, 0xd4, 0xa9, 0x81, 0x45, 0x14, 0x64, 0x84, 0x11, 0x6d, 0x18, 0x7c, 0x1a, 0xdd, 0x6a, 0x86, 0xd5, 0x89, 0x49, 0x97, 0x21, 0x20, 0xd0, 0xe6, 0x9d, 0x9f, 0x10, 0xe8, 0x8d, 0x53, 0xfe, 0x6d, 0x6a, 0x27, 0xfb, 0x18, 0xa5, 0x9a, 0xf1, 0x08, 0x25, 0x27, 0x56, 0xca, 0x18, 0x6a, 0x34, 0xa4, 0x9e, 0xcc, 0x4d, 0xb3, 0x1e, 0x17, 0x57, 0xeb, 0xb3, 0x14, 0x4c, 0x43, 0xd4, 0x36, 0x21, 0x47, 0x3e, 0x22, 0x36, 0xc3, 0x2b, 0x49, 0xac, 0x20, 0xb5, 0x96, 0x3e, 0x1b, 0x72, 0xa3, 0xb3, 0x2f, 0x92, 0x1c, 0x88, 0xfc, 0x71, 0x74, 0x90, 0xdd, 0x82, 0xee, 0x9c, 0x75, 0xf1, 0xa7, 0x54, 0x88, 0x6a, 0x2e, 0x19, 0xfb, 0x36, 0xaa, 0x84, 0x83, 0x16, 0x49, 0x40, 0x97, 0x75, 0x9e, 0x95, 0x47, 0x1d, 0x37, 0xca, 0x79, 0x52, 0x49, 0xea, 0x08, 0x4f, 0x5e, 0x6b, 0xb3, 0xa8, 0xbe, 0xeb, 0x74, 0xd2, 0x18, 0x8e, 0xe0, 0xe2, 0x92, 0xaa, 0x5e, 0xad, 0x2f, 0x31, 0x5c, 0xc6, 0xc8, 0x42, 0x5f, 0x68, 0x17, 0xae, 0x41, 0x47, 0xfd, 0xb2, 0xbc, 0x82, 0x70, 0xea, 0x82, 0x4e, 0x07, 0xdd, 0x44, 0xd5, 0x38, 0x44, 0x93, 0xac, 0xfb, 0xea, 0x85, 0x14, 0xe8, 0x40, 0x37, 0x1d, 0x02, 0x41, 0xd0, 0x28, 0x7a, 0x6f, 0xbf, 0xa6, 0x89, 0x2b, 0x81, 0xaa, 0x42, 0xa7, 0xaa, 0x14, 0x53, 0x68, 0x8a, 0xb1, 0x7a, 0x46, 0x74, 0xa2, 0xc0, 0x85, 0xc5, 0x2e, 0xba, 0x8f, 0x89, 0xd2, 0xcc, 0xf8, 0xa1, 0xda, 0x07, 0x27, 0xff, 0xb1, 0x37, 0xb4, 0xe4, 0x6c, 0xe1, 0x73, 0x82, 0x69, 0x4a, 0xf2, 0x10, 0xd2, 0x3c, 0x08, 0x96, 0xb5, 0xca, 0x29, 0x2e, 0x25, 0x44, 0x1a, 0xb3, 0x29, 0xbc, 0x85, 0xf7, 0x37, 0xf9, 0x2c, 0x09, 0x85, 0x48, 0x9c, 0x92, 0x5f, 0x02, 0x77, 0xc1, 0xb4, 0x5e, 0xf2, 0x36, 0xdf, 0x51, 0xc6, 0x70, 0x2d, 0x74, 0x02, 0xfa, 0x5d, 0x12, 0x63, 0xc1, 0x91, 0x49, 0x9a, 0xbf, 0xeb, 0x7a, 0x69, 0xec, 0x70, 0xcf, 0x87, 0x79, 0x69, 0xe8, 0x05, 0x0b, 0x6b, 0x51, 0x82, 0xdc, 0xc7, 0x05, 0x31, 0x66, 0x41, 0xc9, 0x52, 0x00, 0x51, 0x37, 0x67, 0x10, 0x55, 0xc1, 0x66, 0xbd, 0x43, 0x8a, 0xc5, 0xe8, 0x40, 0x26, 0xa0, 0x00, 0xa0, 0x9b, 0x96, 0x68, 0x07, 0x87, 0x14, 0xfc, 0xab, 0x1b, 0x82, 0xc2, 0x95, 0x8a, 0x75, 0xb8, 0x87, 0x37, 0x28, 0xd3, 0xd3, 0x6a, 0x19, 0x57, 0xcf, 0x4b, 0xd8, 0x6e, 0xe3, 0x4d, 0xcc, 0x9c, 0xdc, 0x7c, 0xd4, 0x36, 0xcc, 0x86, 0x96, 0x28, 0xa2, 0x7b, 0x90, 0x87, 0x78, 0xd7, 0xfe, 0xeb, 0x09, 0xc6, 0x74, 0x49, 0x88, 0x7e, 0x37, 0x75, 0x48, 0x28, 0xaa, 0xc9, 0x15, 0x79, 0xa2, 0x95, 0x6f, 0x3c, 0xa6, 0x8a, 0xfb, 0xd3, 0x40, 0xa0, 0x9f, 0xa2, 0x63, 0x30, 0x9d, 0xd9, 0xa3, 0x1d, 0xd0, 0x29, 0x99, 0xd5, 0x0c, 0x6f, 0x07, 0x2e, 0xcf, 0x7c, 0xc1, 0xcb, 0x5a, 0xea, 0x0c, 0x40, 0x05, 0xe7, 0x6f, 0x1e, 0x74, 0x14, 0x7d, 0xd4, 0xc0, 0x29, 0x09, 0x17, 0x91, 0xa2, 0x2d, 0xad, 0xff, 0x50, 0x5f, 0x3d, 0x5e, 0xff, 0xe6, 0x70, 0x08, 0xc5, 0xbd, 0xfd, 0xfa, 0xbb, 0xa3, 0xb3, 0x0f, 0x27, 0xdb, 0x5f, 0x44, 0xf8, 0xaf, 0x1d, 0xfe, 0xd7, 0x4e, 0x27, 0x74, 0x5c, 0xc0, 0xa8, 0xd6, 0x5e, 0xaf, 0x45, 0xe5, 0xe3, 0x7c, 0x98, 0xcf, 0xcc, 0x81, 0xc9, 0x56, 0x68, 0x20, 0xad, 0x2b, 0x52, 0xdc, 0x94, 0x6e, 0x8b, 0xab, 0xbc, 0xc9, 0xb2, 0x4b, 0x49, 0x3a, 0x54, 0x76, 0x43, 0x11, 0x3c, 0xb7, 0x96, 0xb8, 0xa2, 0x4a, 0x6b, 0xe5, 0x61, 0x12, 0xcb, 0x6b, 0x4b, 0x04, 0x25, 0xa1, 0xa4, 0x17, 0xbb, 0x0c, 0x70, 0x0e, 0x16, 0x2f, 0x16, 0xd2, 0xd9, 0x65, 0x18, 0x7e, 0xb6, 0x19, 0x70, 0x27, 0xba, 0x52, 0x06, 0x77, 0x9a, 0x5f, 0x17, 0x03, 0x01, 0xd1, 0x38, 0x1e, 0x05, 0x7f, 0x60, 0xad, 0x48, 0x0c, 0xeb, 0xa5, 0x55, 0xe3, 0xbb, 0xcd, 0xe1, 0x86, 0xa2, 0xbb, 0x38, 0xd0, 0x5c, 0x67, 0x88, 0x06, 0xd6, 0xd3, 0xf4, 0x0c, 0xeb, 0xea, 0x40, 0x63, 0x74, 0x8c, 0x9a, 0xb5, 0xfa, 0x33, 0x22, 0x07, 0xfc, 0xd9, 0xc0, 0x48, 0x0a, 0x0e, 0x63, 0x54, 0x0b, 0x09, 0xb2, 0xaf, 0xd9, 0x87, 0x5e, 0x61, 0x20, 0x18, 0xd8, 0x1c, 0x4a, 0x37, 0x99, 0x7b, 0xd9, 0x59, 0x19, 0x68, 0x92, 0xeb, 0xc0, 0xde, 0x37, 0x5c, 0x4c, 0x10, 0x3d, 0x3e, 0x71, 0x4b, 0x54, 0x26, 0xa2, 0xda, 0x12, 0x2b, 0xb8, 0xbe, 0xa9, 0x09, 0x1a, 0x55, 0xf9, 0xb4, 0xc0, 0x99, 0xe3, 0xb3, 0x22, 0x39, 0x78, 0x18, 0x26, 0x53, 0xcc, 0xde, 0x9c, 0xc5, 0x1e, 0x12, 0x0d, 0xdd, 0x35, 0x85, 0xc3, 0xc0, 0x40, 0xbf, 0x21, 0x7c, 0xf8, 0xfe, 0xe3, 0x2c, 0xd9, 0x50, 0xc3, 0x40, 0x85, 0xdd, 0xe6, 0xfb, 0xfc, 0xef, 0x30, 0xef, 0x58, 0x3e, 0x12, 0x92, 0x99, 0x22, 0x02, 0x5b, 0x67, 0x6e, 0xf9, 0x0b, 0x97, 0x89, 0xbb, 0x5c, 0xa3, 0x66, 0x1b, 0x53, 0x10, 0x18, 0xf5, 0x32, 0x4a, 0xd5, 0xf6, 0x48, 0x47, 0xb4, 0x0b, 0x4f, 0x42, 0x3b, 0x78, 0x33, 0x40, 0xca, 0xb9, 0x64, 0xe8, 0x18, 0x12, 0x13, 0xb1, 0xd3, 0x64, 0xe1, 0x4d, 0x9d, 0xaa, 0x45, 0x10, 0x9d, 0x3c, 0x24, 0xc5, 0x08, 0xa1, 0x26, 0x46, 0xa0, 0x97, 0x12, 0x3f, 0x9d, 0x88, 0x7b, 0x0a, 0x73, 0xa9, 0x24, 0x2b, 0xbe, 0x8e, 0x0b, 0x43, 0xe2, 0x57, 0xe9, 0xac, 0x95, 0xc4, 0x28, 0xf7, 0x61, 0x04, 0x84, 0xd1, 0x37, 0x10, 0x78, 0x2a, 0x20, 0xeb, 0xec, 0x43, 0x8b, 0xcc, 0x28, 0x9c, 0xe0, 0x65, 0xec, 0xd1, 0x0e, 0xeb, 0x8b, 0xce, 0x69, 0x0a, 0xb9, 0xd0, 0x5c, 0x18, 0xd0, 0xcc, 0x46, 0x87, 0x10, 0x2a, 0x80, 0x70, 0xa1, 0xda, 0xd3, 0x13, 0xcd, 0xe9, 0x10, 0x7e, 0x07, 0x45, 0x4b, 0xb2, 0x47, 0x45, 0x93, 0x5a, 0x27, 0xb1, 0xc9, 0xca, 0xa1, 0x62, 0x0e, 0x92, 0xe6, 0xe5, 0x17, 0x23, 0xcf, 0xf2, 0x7b, 0x8c, 0xc1, 0xd4, 0x11, 0x40, 0x15, 0xec, 0x87, 0x73, 0xea, 0x98, 0x2f, 0xf7, 0x50, 0x57, 0xe2, 0xcf, 0xf6, 0x35, 0x5a, 0x1b, 0xa4, 0x00, 0x2d, 0xa7, 0x6d, 0x56, 0x22, 0xc5, 0x36, 0x83, 0xa2, 0x62, 0x67, 0x32, 0xeb, 0x17, 0x16, 0x80, 0x2b, 0x24, 0xd8, 0x68, 0xc5, 0xc3, 0xbc, 0xba, 0x71, 0xf2, 0x50, 0x11, 0xd4, 0x0f, 0xfd, 0x3c, 0x93, 0x65, 0x45, 0x46, 0x80, 0x9a, 0x81, 0x95, 0xa4, 0x1a, 0x8b, 0xb3, 0xc8, 0xcb, 0x7a, 0xb8, 0x45, 0xf0, 0x37, 0x5c, 0xa2, 0x01, 0xb0, 0xc5, 0x04, 0xda, 0x8c, 0x32, 0xc5, 0x91, 0x2e, 0xc1, 0x00, 0x26, 0x7c, 0x41, 0xf8, 0x26, 0x26, 0x2a, 0x95, 0x25, 0x62, 0xc9, 0x51, 0x4a, 0x2a, 0x6c, 0xac, 0x07, 0x39, 0x41, 0x20, 0x49, 0x99, 0x7b, 0xa4, 0xeb, 0x0c, 0x7f, 0x63, 0x81, 0x9b, 0x18, 0x17, 0x03, 0xad, 0xf6, 0xa1, 0x1c, 0x4d, 0x49, 0xf7, 0x17, 0xe9, 0x21, 0xe0, 0x14, 0x31, 0xfa, 0x6b, 0xcb, 0x85, 0xfd, 0x97, 0x8d, 0x1a, 0xcf, 0xc8, 0x2b, 0x4a, 0x06, 0xd0, 0x25, 0x08, 0x62, 0x93, 0x18, 0x4f, 0xdb, 0xed, 0x33, 0xae, 0xd8, 0xc6, 0xdf, 0x42, 0x71, 0xde, 0xe5, 0x62, 0x4c, 0x6a, 0x9f, 0xbe, 0x43, 0x8a, 0x92, 0x03, 0x84, 0x59, 0xe6, 0x72, 0x1b, 0x69, 0x78, 0x64, 0x32, 0x96, 0xcb, 0x84, 0x40, 0x72, 0x9a, 0xf7, 0xdf, 0x0d, 0xb0, 0xd4, 0x90, 0xda, 0xd8, 0x87, 0x33, 0x77, 0x79, 0x03, 0xbc, 0x48, 0xc2, 0xb7, 0x07, 0xb4, 0x5f, 0x86, 0x02, 0x95, 0x2a, 0xc0, 0x81, 0xc3, 0xff, 0x75, 0x99, 0x8d, 0x1a, 0x32, 0x2a, 0xef, 0x3a, 0x78, 0x9c, 0x12, 0x95, 0x35, 0x12, 0xa2, 0x49, 0xf4, 0xf4, 0x21, 0x81, 0xbf, 0xc1, 0x8a, 0x50, 0xac, 0xde, 0x40, 0xf1, 0x36, 0x73, 0x4a, 0x68, 0x6f, 0x52, 0x38, 0xa1, 0x62, 0x74, 0x43, 0x48, 0x02, 0xe4, 0x47, 0x4a, 0xd4, 0x39, 0xea, 0x29, 0xc2, 0xe2, 0xf9, 0xa7, 0x61, 0x45, 0x17, 0x4b, 0x91, 0x1d, 0x21, 0x5a, 0x48, 0x9e, 0x29, 0x93, 0x6e, 0x9b, 0xa7, 0x9f, 0xd9, 0x75, 0x83, 0x7b, 0x9e, 0xcc, 0x4a, 0x2b, 0x20, 0xcd, 0x3b, 0x56, 0x52, 0x92, 0x11, 0x9e, 0x91, 0x4f, 0x96, 0x45, 0x71, 0x1a, 0xbc, 0xe1, 0x34, 0x13, 0x50, 0x73, 0x64, 0x32, 0x68, 0x57, 0x22, 0x9d, 0x3c, 0x2a, 0xc6, 0x8c, 0x8c, 0xd0, 0x84, 0x99, 0xf1, 0x24, 0x4f, 0x6e, 0xf6, 0x4d, 0x00, 0x6c, 0x74, 0xab, 0x52, 0xc5, 0x5b, 0x67, 0x52, 0x41, 0x47, 0x06, 0x96, 0x4f, 0x53, 0x1f, 0x10, 0x8c, 0x7f, 0xf5, 0x7a, 0x93, 0xca, 0x4b, 0xd7, 0x72, 0xce, 0xba, 0x4e, 0x02, 0xb3, 0x89, 0x60, 0xf4, 0xbc, 0x57, 0x34, 0xbe, 0x3b, 0xac, 0xe1, 0x89, 0xce, 0xde, 0xb2, 0x17, 0xef, 0xf8, 0x0a, 0xff, 0x96, 0x1a, 0x84, 0x22, 0xaa, 0xc3, 0xa5, 0xc6, 0x1e, 0x9c, 0x20, 0xfb, 0xfe, 0xbb, 0x66, 0x19, 0xe6, 0xfa, 0xc5, 0x60, 0x73, 0xf7, 0xd5, 0xd6, 0x46, 0x20, 0x67, 0x19, 0xbe, 0xe1, 0xe2, 0x14, 0xee, 0x6d, 0xf5, 0xb7, 0x36, 0x1a, 0xb3, 0xc1, 0xed, 0x5e, 0x01, 0xa0, 0xa2, 0xe8, 0xea, 0x46, 0x68, 0x50, 0x32, 0xb2, 0x2d, 0xd6, 0x92, 0xbc, 0x69, 0xb7, 0x98, 0xf4, 0x2a, 0xb9, 0x03, 0x52, 0x0b, 0xe6, 0xaf, 0x9d, 0xa5, 0xa5, 0x18, 0x36, 0x28, 0xc9, 0x54, 0xb6, 0x60, 0xb5, 0x76, 0x3d, 0x27, 0x98, 0x1e, 0x41, 0x61, 0xc9, 0xb9, 0x0e, 0x81, 0x68, 0x4b, 0x09, 0x93, 0x2a, 0x28, 0x31, 0x8f, 0x62, 0xfa, 0x9f, 0xdc, 0xd9, 0x72, 0x54, 0x43, 0x7b, 0x7c, 0xe9, 0x9e, 0x29, 0x6a, 0xfa, 0xbd, 0xb8, 0x1c, 0xa5, 0x29, 0xdb, 0x33, 0x2d, 0x66, 0x8c, 0x66, 0x3c, 0x12, 0x86, 0x1c, 0x55, 0x52, 0xa7, 0x31, 0x87, 0x6a, 0x2d, 0x50, 0xa9, 0x37, 0x2c, 0x2a, 0xab, 0x40, 0x62, 0xab, 0xc6, 0x15, 0x1b, 0x1e, 0x9b, 0xb5, 0x08, 0xb6, 0xb2, 0xd1, 0x2f, 0xcb, 0xa6, 0x1a, 0x05, 0x77, 0x81, 0xe1, 0xca, 0x16, 0x85, 0x5f, 0xdf, 0x87, 0xb9, 0x99, 0x94, 0xf1, 0x1c, 0x57, 0x65, 0x8e, 0xfb, 0x14, 0xda, 0x54, 0xf2, 0x50, 0x10, 0x3a, 0xad, 0x31, 0xa0, 0xcc, 0xdd, 0x97, 0x7c, 0xa0, 0xaf, 0xba, 0x36, 0x5d, 0xa7, 0x66, 0x00, 0xc5, 0x01, 0x45, 0x90, 0xc1, 0xf5, 0x23, 0x0a, 0x8f, 0x73, 0x25, 0x15, 0x2e, 0x44, 0x5a, 0x4c, 0x90, 0xdb, 0x83, 0x73, 0x44, 0xa4, 0xc1, 0x04, 0xc2, 0x10, 0x99, 0xdd, 0x0a, 0x80, 0x4b, 0x75, 0x61, 0x7d, 0x04, 0xdd, 0x49, 0x14, 0x94, 0x25, 0xf7, 0xc8, 0x8d, 0x4b, 0x51, 0x25, 0x8a, 0x22, 0x45, 0xbf, 0x91, 0x49, 0x2e, 0x60, 0x75, 0x0c, 0xb3, 0x30, 0x51, 0x38, 0x8f, 0x03, 0xb5, 0xdd, 0x23, 0xba, 0x9d, 0xa5, 0xc9, 0xd9, 0xce, 0x08, 0x7e, 0x12, 0xf1, 0xe5, 0xbc, 0xbd, 0xa1, 0xfe, 0x00, 0x34, 0x39, 0x05, 0x9d, 0xad, 0xea, 0xe9, 0x1f, 0xa8, 0xb5, 0x73, 0x7e, 0x33, 0xc3, 0x9b, 0xe5, 0x35, 0x03, 0xb3, 0x6c, 0x0f, 0x97, 0x6c, 0x3e, 0xf4, 0xee, 0xef, 0xef, 0x7b, 0x78, 0xe1, 0x30, 0x27, 0x47, 0xca, 0x2c, 0xfa, 0x35, 0xf0, 0x68, 0xb2, 0x2b, 0xd9, 0xe4, 0x44, 0x26, 0xe2, 0xc7, 0x37, 0x9c, 0x14, 0xa9, 0x62, 0x98, 0x56, 0x54, 0xcf, 0x27, 0xc4, 0x45, 0xaf, 0x49, 0x5d, 0x9d, 0x4c, 0x87, 0x34, 0x1c, 0x75, 0x44, 0x05, 0x6e, 0x9f, 0x5d, 0x0b, 0xc2, 0x4f, 0x8d, 0xaa, 0x04, 0xeb, 0xd7, 0xe1, 0x13, 0xf3, 0x83, 0xa8, 0xf7, 0x2e, 0xea, 0x1c, 0xcb, 0x6a, 0xaf, 0xe1, 0x89, 0x83, 0xfa, 0x5a, 0xf8, 0x61, 0x3f, 0x98, 0x03, 0xef, 0x76, 0x9e, 0x07, 0x9f, 0xd8, 0x7a, 0x91, 0xa9, 0xbb, 0x8a, 0xcd, 0x9a, 0xa9, 0x02, 0xce, 0x3a, 0x4c, 0x7b, 0x61, 0xb7, 0x16, 0x63, 0x9e, 0xd1, 0xd2, 0xe3, 0x52, 0x3a, 0xf1, 0x0c, 0xf9, 0x86, 0xaf, 0xb8, 0x8e, 0x45, 0x7c, 0xff, 0xf4, 0x1d, 0x77, 0x6e, 0xa2, 0x50, 0xef, 0x8c, 0x5c, 0x5d, 0x0e, 0x1e, 0x31, 0xfa, 0x77, 0x4c, 0x12, 0x66, 0x60, 0xa6, 0xd2, 0x07, 0xc3, 0x16, 0x53, 0xb1, 0x61, 0x2a, 0x7a, 0xe9, 0x57, 0x2b, 0xea, 0xd0, 0xac, 0x53, 0xd8, 0xae, 0xa2, 0x16, 0xf9, 0x68, 0xc0, 0x9a, 0xd2, 0xb2, 0x0c, 0x55, 0x3d, 0x83, 0xd1, 0xd8, 0xd5, 0x75, 0xcd, 0xe5, 0x14, 0x5a, 0x66, 0xc7, 0x9e, 0xb3, 0x4c, 0x41, 0xc0, 0x0d, 0xa5, 0x77, 0x72, 0x9c, 0x03, 0xaf, 0xaa, 0x02, 0x94, 0x89, 0xcb, 0x2a, 0x29, 0x90, 0xd0, 0x29, 0x0b, 0xbe, 0xa7, 0x29, 0xcc, 0x21, 0x61, 0x0d, 0x0c, 0xe5, 0xf8, 0x9b, 0x53, 0xca, 0xe6, 0x06, 0x46, 0x9a, 0x09, 0x88, 0x03, 0xcf, 0x9f, 0x5b, 0x1e, 0x19, 0xa3, 0x76, 0x8a, 0xac, 0x84, 0x4b, 0x22, 0xe3, 0x28, 0x04, 0x80, 0xaa, 0x36, 0x47, 0xa4, 0xc6, 0x85, 0x24, 0xad, 0x8a, 0x8d, 0x20, 0x97, 0xd7, 0x84, 0x77, 0x63, 0x5b, 0x22, 0x10, 0xdc, 0x2f, 0xfa, 0xba, 0x82, 0x8d, 0xc4, 0xa5, 0x44, 0x70, 0x49, 0x59, 0xf3, 0xd2, 0xc7, 0x2d, 0xbd, 0x72, 0x0b, 0xa9, 0xc4, 0xcf, 0x7b, 0x93, 0xcf, 0x87, 0x3b, 0xbc, 0xd1, 0x99, 0x34, 0x3c, 0x29, 0x66, 0xeb, 0x12, 0xd7, 0x63, 0xc0, 0xb5, 0x58, 0xe8, 0x4b, 0x0b, 0x79, 0x6e, 0x4d, 0x62, 0x24, 0x30, 0xe3, 0xff, 0x40, 0x09, 0x45, 0x72, 0x17, 0x78, 0x1e, 0x6a, 0x1e, 0x5a, 0x2f, 0xe9, 0x8e, 0xa6, 0x50, 0x7e, 0x92, 0x10, 0x1b, 0x1e, 0x0e, 0xed, 0xbf, 0xd7, 0xa8, 0x2d, 0x7d, 0x25, 0x8e, 0x2a, 0xcc, 0x83, 0x2f, 0x1d, 0x6b, 0x44, 0x8a, 0x65, 0x69, 0xee, 0x5a, 0x23, 0x84, 0xdb, 0x10, 0x1e, 0x8e, 0x23, 0x9c, 0xce, 0xee, 0x31, 0xc5, 0x21, 0xec, 0x7c, 0xc9, 0x6d, 0xc4, 0xfe, 0xd0, 0xdc, 0xbc, 0xd7, 0x4f, 0xef, 0xde, 0x2f, 0xdd, 0xbe, 0xd5, 0xbb, 0xc7, 0xed, 0x1b, 0x34, 0x59, 0xf6, 0xb5, 0xe3, 0xa0, 0xa3, 0x64, 0x0f, 0xb6, 0xbe, 0x8c, 0xa3, 0xae, 0xce, 0x65, 0x1c, 0x23, 0xf3, 0xf5, 0x6f, 0x75, 0xea, 0x44, 0x8c, 0x64, 0xd1, 0xe3, 0xe4, 0xc3, 0xc3, 0x71, 0x58, 0x91, 0xce, 0xde, 0xc5, 0x5e, 0x14, 0x3d, 0x9c, 0x46, 0x10, 0xfc, 0xe2, 0x51, 0xc5, 0xc4, 0x3c, 0xa4, 0x34, 0xcf, 0x5e, 0x78, 0x38, 0x2d, 0x04, 0x14, 0x45, 0xdc, 0x5b, 0xdf, 0x57, 0x2a, 0xf8, 0x9f, 0xbf, 0x38, 0x4a, 0x2b, 0xb2, 0x2d, 0x03, 0xdd, 0x8c, 0x10, 0x0e, 0xc1, 0xac, 0xfb, 0x7e, 0x43, 0xbd, 0x3e, 0x02, 0x03, 0xc9, 0x2d, 0xa4, 0x54, 0x25, 0xd8, 0xe8, 0xd6, 0x37, 0x0c, 0xa1, 0xee, 0x48, 0x18, 0xe8, 0x29, 0xa7, 0xad, 0x67, 0xac, 0x67, 0x87, 0x6d, 0x19, 0x82, 0x67, 0xf7, 0x7f, 0xd3, 0xfa, 0x88, 0x9e, 0x2d, 0x19, 0x60, 0x84, 0xa1, 0x64, 0x0c, 0x6f, 0x4a, 0xba, 0x8f, 0xa8, 0x5a, 0x01, 0x45, 0x7c, 0xcb, 0xec, 0x08, 0x7d, 0x00, 0x95, 0x22, 0x8c, 0xb7, 0xce, 0x04, 0x2e, 0x94, 0x61, 0xde, 0x5f, 0x5b, 0x65, 0xa6, 0x87, 0x8b, 0xec, 0x09, 0xc9, 0xf6, 0x89, 0x08, 0x57, 0x50, 0xaa, 0xa1, 0xcc, 0x30, 0x51, 0x7a, 0xe4, 0xd7, 0x2e, 0x1a, 0x15, 0x5f, 0x55, 0x64, 0x7b, 0x4d, 0x52, 0x6e, 0x7f, 0x5e, 0x93, 0x94, 0xf6, 0x9d, 0x55, 0x32, 0x72, 0x90, 0x70, 0x42, 0x9a, 0xeb, 0xc0, 0xa4, 0x97, 0xb8, 0xca, 0x1a, 0x1b, 0x79, 0xf8, 0xa9, 0x4d, 0xf8, 0xaa, 0x57, 0x74, 0xcc, 0xb9, 0x45, 0x4e, 0xed, 0x24, 0x25, 0x98, 0x63, 0xd4, 0x4c, 0xac, 0xa3, 0x68, 0x58, 0xe4, 0xf7, 0x25, 0xa9, 0xa3, 0x6a, 0xa0, 0xc6, 0x9c, 0x02, 0x7b, 0xe3, 0x95, 0x44, 0xc3, 0xf6, 0xce, 0x0c, 0x0e, 0xec, 0xbb, 0xeb, 0xf7, 0x67, 0xdc, 0xd8, 0x81, 0xab, 0x73, 0xb1, 0x08, 0x49, 0xe6, 0xbc, 0x1c, 0xce, 0xc1, 0x92, 0x06, 0xed, 0xa4, 0x62, 0x56, 0xa6, 0xdc, 0xd1, 0x2b, 0x21, 0xa6, 0x90, 0x9e, 0x04, 0x84, 0x17, 0xa1, 0xf8, 0x8c, 0x28, 0x92, 0x0e, 0x0e, 0x95, 0xa3, 0x01, 0xff, 0x72, 0x5d, 0x17, 0xec, 0x64, 0xca, 0x88, 0x21, 0x3d, 0xea, 0x2d, 0x1e, 0x05, 0x3e, 0xe2, 0xdd, 0x3e, 0x47, 0x4d, 0xa3, 0xfe, 0x63, 0x04, 0x29, 0x6d, 0x3c, 0x34, 0xa8, 0x75, 0x99, 0xe6, 0x23, 0x84, 0x9a, 0x15, 0xd7, 0x35, 0x2d, 0xaf, 0xac, 0xd6, 0x68, 0x5e, 0xb6, 0x8d, 0x88, 0xab, 0x7c, 0xa1, 0x1e, 0x82, 0xfa, 0x90, 0x04, 0x92, 0x96, 0x05, 0x3a, 0xf3, 0x58, 0xab, 0xee, 0x06, 0x72, 0xee, 0x45, 0x21, 0x51, 0x6f, 0xbe, 0x09, 0x6d, 0xd6, 0x4c, 0x3d, 0xed, 0x97, 0x80, 0x63, 0x3b, 0x37, 0x38, 0xa0, 0x24, 0x32, 0x42, 0x15, 0x15, 0x53, 0xd0, 0x69, 0x02, 0xb1, 0xc1, 0xe8, 0xd4, 0x0e, 0x2c, 0x26, 0xe7, 0xb8, 0xa7, 0xde, 0x05, 0x15, 0x6c, 0xdb, 0x4c, 0xa4, 0xb4, 0xfd, 0x23, 0xd4, 0x5e, 0x26, 0xa0, 0x2e, 0x82, 0xe6, 0xa2, 0x06, 0x12, 0x79, 0xdd, 0xdf, 0xe5, 0xfb, 0x1f, 0xc5, 0xff, 0xd5, 0x75, 0xc2, 0x6b, 0x29, 0x7a, 0xa0, 0xdc, 0x78, 0xa1, 0x8d, 0xac, 0xcf, 0x93, 0x62, 0xca, 0x65, 0x08, 0x0c, 0x09, 0x1b, 0x44, 0xb1, 0x88, 0x23, 0x07, 0xa5, 0x2d, 0x8a, 0xfe, 0x47, 0x8f, 0x25, 0x2a, 0xb9, 0xaa, 0x96, 0x58, 0xff, 0x22, 0xfe, 0xf4, 0xb5, 0xde, 0x98, 0xd9, 0xca, 0x38, 0xce, 0x60, 0x27, 0xe0, 0xc6, 0xfa, 0xf9, 0x31, 0xb3, 0xd9, 0xeb, 0x59, 0xbe, 0x2c, 0x1f, 0xd7, 0x22, 0xe9, 0xe5, 0x23, 0xed, 0x2f, 0x2a, 0xc9, 0xe5, 0xc1, 0xb3, 0x84, 0xf3, 0x5d, 0x66, 0xb7, 0x2a, 0x14, 0xb1, 0x52, 0xa1, 0x64, 0x47, 0x6d, 0x63, 0xb8, 0x35, 0xe7, 0x63, 0xff, 0xc3, 0x1d, 0x3b, 0xb8, 0xcb, 0xe4, 0xfe, 0x67, 0xc3, 0xf9, 0x79, 0x96, 0xb3, 0x0d, 0xc9, 0x84, 0xcc, 0xe6, 0xa8, 0x16, 0xa9, 0x33, 0x03, 0xa2, 0xf0, 0x60, 0x18, 0x5e, 0x0d, 0x39, 0xd8, 0xd4, 0x0d, 0xe2, 0x37, 0x2d, 0xc5, 0x27, 0x56, 0xf2, 0x70, 0x40, 0xc9, 0x22, 0xe7, 0x31, 0x84, 0x89, 0xe9, 0x7d, 0xe3, 0x96, 0xc0, 0xf5, 0xa3, 0x4b, 0xd8, 0x2f, 0x0f, 0x6a, 0x02, 0x23, 0xd9, 0x66, 0xb8, 0xb8, 0x06, 0x7a, 0x3a, 0xc9, 0xf3, 0x61, 0x5c, 0xac, 0xc9, 0xde, 0x13, 0xaa, 0x3a, 0x0c, 0x38, 0x66, 0xe7, 0x0b, 0x9e, 0x75, 0x6f, 0xdc, 0x0d, 0xde, 0x68, 0xd4, 0x19, 0xe8, 0xdd, 0xbe, 0x16, 0x75, 0xe8, 0xcf, 0x31, 0x40, 0x9e, 0xcf, 0xc6, 0x66, 0x2b, 0xdc, 0xaf, 0x06, 0x0e, 0x8d, 0x6a, 0x13, 0xac, 0x2b, 0x40, 0x3d, 0x01, 0x54, 0xde, 0xa2, 0xce, 0x02, 0xe3, 0xd4, 0x47, 0x14, 0x77, 0x84, 0x0d, 0xc1, 0xc4, 0x89, 0x30, 0x6c, 0x8b, 0x04, 0x49, 0x8c, 0x09, 0xee, 0x30, 0x07, 0x9c, 0x51, 0x88, 0xc7, 0x58, 0x9e, 0xe2, 0x3b, 0xdc, 0x5d, 0xf6, 0x25, 0xd9, 0xaa, 0x2b, 0x32, 0xdd, 0x5c, 0xae, 0xe1, 0xc8, 0x31, 0x6b, 0xcc, 0x35, 0x85, 0xdb, 0x0a, 0xd7, 0xae, 0xc5, 0xc5, 0x25, 0xf6, 0x2a, 0xfc, 0x95, 0x9d, 0x20, 0xbd, 0x53, 0xcd, 0xa2, 0xe3, 0x7f, 0x5e, 0x13, 0x62, 0x33, 0x39, 0x27, 0x7b, 0x01, 0xd2, 0xac, 0x59, 0x97, 0xc9, 0x2c, 0x99, 0xf2, 0x6a, 0x0f, 0xcf, 0x4e, 0xbe, 0x3b, 0x39, 0xf3, 0xc4, 0xe6, 0x37, 0x83, 0xc1, 0xe6, 0x6d, 0x52, 0x0c, 0xa9, 0x29, 0x2b, 0x06, 0x2e, 0x22, 0x7a, 0xce, 0x24, 0x78, 0x39, 0xb2, 0xe4, 0xde, 0x42, 0xb6, 0x48, 0xa2, 0xb7, 0xe7, 0xb3, 0xc1, 0x0c, 0x5e, 0xfe, 0xa4, 0xc0, 0xbc, 0x53, 0xc9, 0x91, 0xe4, 0x12, 0x92, 0x6c, 0x1c, 0x15, 0xc9, 0x98, 0x7b, 0x96, 0xfa, 0x59, 0x84, 0x84, 0xec, 0x81, 0x7d, 0x39, 0xf0, 0x50, 0x39, 0x93, 0x9c, 0x02, 0x58, 0x66, 0x11, 0xde, 0x1b, 0x0b, 0xaa, 0x9e, 0x8f, 0xde, 0xc8, 0x37, 0xa5, 0x1e, 0x15, 0x77, 0x89, 0x81, 0xdd, 0xd8, 0x4a, 0xb9, 0xf8, 0xb6, 0x77, 0x34, 0xe8, 0xbd, 0x39, 0x39, 0x3b, 0xf9, 0xe6, 0xe8, 0xfa, 0xc4, 0xe0, 0x99, 0x97, 0x49, 0x8b, 0x0a, 0x26, 0xfa, 0xd7, 0xb7, 0xb2, 0x2d, 0xb4, 0x7e, 0xc4, 0xc2, 0xaf, 0x52, 0x6e, 0xc8, 0xa2, 0x90, 0xff, 0xdc, 0x59, 0x1b, 0xad, 0xa2, 0x8a, 0xf3, 0x04, 0xc3, 0xc3, 0xc1, 0xbd, 0x98, 0xcd, 0x65, 0xaa, 0xde, 0x0a, 0xe2, 0xd9, 0x3d, 0x36, 0x66, 0xfb, 0x90, 0x61, 0x2a, 0x7d, 0x6a, 0x4a, 0x49, 0x79, 0xf5, 0xae, 0x47, 0xc8, 0xee, 0x6c, 0xed, 0x80, 0x09, 0x99, 0xbe, 0xc5, 0x5f, 0xa0, 0x65, 0xe0, 0x14, 0x3f, 0x7e, 0x43, 0x4f, 0x36, 0x30, 0xc6, 0x2d, 0x34, 0x3a, 0x32, 0x18, 0xf9, 0x55, 0x00, 0xb0, 0x04, 0x09, 0xa8, 0x1c, 0xdd, 0x24, 0x73, 0x51, 0x65, 0x31, 0x35, 0x81, 0x82, 0xe0, 0x5c, 0x53, 0x29, 0x78, 0x41, 0x9c, 0x42, 0x36, 0x4c, 0x18, 0x72, 0x81, 0x30, 0xd2, 0x90, 0xae, 0x43, 0xa9, 0xbe, 0xf7, 0xd8, 0x71, 0x00, 0x63, 0x2d, 0x98, 0xb6, 0x43, 0x05, 0xc6, 0x7d, 0x4a, 0x30, 0x74, 0xf2, 0x06, 0xfc, 0x3c, 0x01, 0xee, 0x1e, 0xd8, 0xbc, 0xb3, 0x06, 0xc0, 0xdc, 0xa0, 0xad, 0xe7, 0xe4, 0x3a, 0xa3, 0x1f, 0x71, 0xf3, 0x12, 0xd1, 0xb9, 0x71, 0x92, 0xbf, 0xd2, 0x51, 0x2d, 0xe5, 0x09, 0x52, 0x6e, 0x88, 0x6e, 0x2c, 0x32, 0x83, 0xc3, 0x59, 0xdb, 0x41, 0xa6, 0x21, 0xdd, 0x58, 0x9d, 0xe9, 0x32, 0x7b, 0x60, 0x68, 0xf5, 0xb1, 0x9c, 0x0e, 0xfd, 0x48, 0x1a, 0x11, 0x98, 0x14, 0x8f, 0xa0, 0x2b, 0xdf, 0x72, 0x8c, 0x7a, 0xaf, 0x02, 0xc4, 0x88, 0xd7, 0xbf, 0xfa, 0x1d, 0x25, 0x4c, 0xa9, 0x5d, 0x2f, 0x59, 0x78, 0x80, 0xdd, 0xeb, 0x6f, 0x15, 0x7f, 0xdf, 0xe8, 0x96, 0x6e, 0xaf, 0x35, 0xa7, 0x35, 0xd2, 0xc9, 0xe5, 0x15, 0x77, 0x57, 0x3f, 0xc3, 0xbf, 0x48, 0xe4, 0xad, 0x0c, 0xe1, 0xdf, 0x49, 0xf7, 0x0f, 0x4c, 0x46, 0x49, 0x28, 0x74, 0x63, 0x82, 0xe9, 0x9a, 0x8c, 0xc8, 0xf9, 0xa7, 0x02, 0xb4, 0x2e, 0xd7, 0x81, 0xb6, 0xd8, 0x4b, 0xfe, 0x37, 0x0d, 0x3a, 0x71, 0x26, 0x38, 0x05, 0x41, 0x28, 0xa2, 0x49, 0x70, 0x0e, 0xad, 0x06, 0x48, 0x2e, 0xf0, 0x97, 0xa8, 0x6f, 0xb2, 0x5c, 0xab, 0xda, 0x38, 0x2f, 0xb7, 0x40, 0x10, 0x95, 0x08, 0x87, 0xc5, 0x37, 0xa3, 0x82, 0xda, 0xb9, 0xc6, 0x30, 0x95, 0x7e, 0x63, 0xa9, 0xd4, 0x90, 0x0b, 0x61, 0x37, 0xfd, 0x78, 0x08, 0xb5, 0x22, 0x13, 0x47, 0x9c, 0x64, 0xa5, 0xd3, 0x82, 0x35, 0xd7, 0xbe, 0x2b, 0x39, 0x06, 0x68, 0x41, 0x50, 0xdb, 0x21, 0xae, 0x17, 0xa0, 0xe4, 0x03, 0x4f, 0xc3, 0x97, 0x9a, 0x04, 0xcd, 0x44, 0x4b, 0x1e, 0x25, 0x6c, 0xce, 0x0a, 0xe1, 0x44, 0xc2, 0x93, 0x31, 0x01, 0xca, 0x92, 0x69, 0x33, 0x64, 0x0d, 0x86, 0xb2, 0xfa, 0x6e, 0xe2, 0x2c, 0x70, 0xe7, 0x60, 0xe3, 0x4d, 0x4f, 0x34, 0x5a, 0xa5, 0x1c, 0x5b, 0x40, 0x89, 0x47, 0xda, 0x68, 0xc2, 0x5a, 0x81, 0xa1, 0x07, 0x0c, 0x2c, 0xc5, 0xb8, 0x86, 0x4c, 0x85, 0x77, 0x86, 0x1a, 0x03, 0x09, 0xbd, 0xe5, 0x21, 0xaa, 0x12, 0xe6, 0x62, 0xa3, 0x2d, 0x35, 0x12, 0x6c, 0x2f, 0xfa, 0x36, 0x9e, 0x79, 0xaa, 0xb0, 0x71, 0x50, 0x75, 0xb1, 0xc7, 0x70, 0xbd, 0x04, 0x87, 0x8e, 0x8f, 0x84, 0x7d, 0xd6, 0xcc, 0x40, 0x49, 0xb8, 0xe8, 0x02, 0xbe, 0x4d, 0xd3, 0x45, 0x37, 0x90, 0x89, 0xc8, 0x22, 0xf1, 0x78, 0xdf, 0x7f, 0x43, 0x93, 0xc3, 0xef, 0xd0, 0x0b, 0x74, 0xef, 0x11, 0x7a, 0x68, 0xaa, 0x3d, 0x9e, 0x98, 0x94, 0x87, 0x09, 0x7c, 0x2f, 0xc5, 0x1e, 0x78, 0x6e, 0x18, 0xc0, 0x4f, 0x73, 0x2e, 0x81, 0x00, 0xa9, 0x2a, 0x20, 0x67, 0x07, 0x10, 0xbe, 0x8b, 0xb9, 0x14, 0x49, 0xe4, 0x36, 0x90, 0x24, 0x82, 0x20, 0x8b, 0xe1, 0xb2, 0x2b, 0xf1, 0x4c, 0x4a, 0x6f, 0xcc, 0x0b, 0xbf, 0x04, 0x76, 0x64, 0xb0, 0x96, 0xf4, 0xc9, 0xb8, 0xbc, 0x0b, 0xdf, 0xf0, 0xf2, 0x2e, 0x78, 0xc3, 0x9f, 0x71, 0xcf, 0xad, 0xbd, 0x75, 0x72, 0x39, 0xf8, 0x2e, 0x6a, 0x01, 0x8d, 0xe0, 0x4e, 0x2e, 0x7c, 0xc5, 0xed, 0xea, 0x90, 0xe8, 0xdd, 0x6b, 0xde, 0x7e, 0xcf, 0x83, 0xf1, 0x01, 0xef, 0x9e, 0xc3, 0xf7, 0xe5, 0x72, 0x5f, 0x1e, 0x0d, 0xbe, 0x73, 0xae, 0xb5, 0x43, 0x02, 0xa1, 0x62, 0x4c, 0x93, 0xd9, 0x8e, 0x41, 0x62, 0x26, 0x1d, 0x1c, 0x2c, 0x48, 0xef, 0xe5, 0xdd, 0x73, 0xe8, 0x1d, 0x66, 0xe2, 0xd1, 0xbb, 0xb7, 0xc7, 0xab, 0xe8, 0xdd, 0x3d, 0xa8, 0x7a, 0xd2, 0xac, 0x43, 0xed, 0x19, 0x77, 0xd1, 0xc6, 0x02, 0x8f, 0x36, 0x32, 0xc7, 0x40, 0xa2, 0x90, 0xb6, 0x9f, 0x4a, 0x48, 0xf3, 0xfc, 0x65, 0x84, 0x0e, 0x2f, 0x78, 0x84, 0xae, 0xe7, 0x19, 0xa6, 0xf4, 0x36, 0x42, 0xd7, 0x94, 0xe2, 0x84, 0x89, 0xdc, 0xa5, 0x71, 0x9f, 0xbe, 0x1d, 0xaa, 0x75, 0xcb, 0xc0, 0xfd, 0x1d, 0xd2, 0x4c, 0x33, 0x0b, 0x65, 0x60, 0x81, 0x1c, 0x02, 0xe0, 0x22, 0x0a, 0xca, 0xc0, 0x05, 0xb1, 0xbe, 0x3b, 0xdf, 0x94, 0xe6, 0xd7, 0xaa, 0x1f, 0x0a, 0xd5, 0xb0, 0xb9, 0xb1, 0x1a, 0x0a, 0x6d, 0x72, 0x0f, 0xb8, 0x80, 0x02, 0x13, 0xef, 0x46, 0xd6, 0xd0, 0x83, 0x92, 0x60, 0x75, 0x7a, 0x99, 0x60, 0x9e, 0x07, 0xc1, 0x90, 0x35, 0xef, 0x29, 0xaa, 0x79, 0xa4, 0x0d, 0xa0, 0xa2, 0xd2, 0x4b, 0xb3, 0x9e, 0x9f, 0x06, 0xed, 0x86, 0xb6, 0xaa, 0x1a, 0x36, 0x2d, 0x96, 0x28, 0x92, 0xc2, 0x2b, 0x41, 0x0e, 0x54, 0x46, 0xc9, 0xd2, 0x94, 0x98, 0x00, 0x7b, 0x25, 0x03, 0x05, 0xb5, 0x41, 0x84, 0xb5, 0x7a, 0xbb, 0x97, 0x2a, 0xaf, 0x39, 0xe3, 0x5e, 0x34, 0x50, 0x8c, 0xc7, 0x59, 0xd9, 0xb3, 0x1d, 0xda, 0x0f, 0xcd, 0x5f, 0x3d, 0xfb, 0xe2, 0xcd, 0xf9, 0x00, 0x23, 0x57, 0x09, 0xd5, 0x1a, 0xa8, 0x19, 0x5c, 0x26, 0x5c, 0x1f, 0x32, 0x25, 0xce, 0x01, 0x8f, 0x98, 0x82, 0x3f, 0xd3, 0x14, 0xf1, 0x30, 0xe8, 0x10, 0xa2, 0x4f, 0x78, 0x85, 0x7a, 0x31, 0x17, 0xdc, 0x80, 0x6d, 0x47, 0x71, 0x71, 0x5c, 0x81, 0x9d, 0x9b, 0x56, 0xb4, 0x93, 0xe7, 0x29, 0x80, 0x71, 0xa4, 0x65, 0x79, 0x38, 0x8d, 0x0d, 0x6d, 0xcf, 0xbc, 0x60, 0x44, 0x76, 0xc1, 0x20, 0x33, 0x1d, 0xae, 0xb2, 0x46, 0x57, 0xfa, 0xe6, 0x62, 0x05, 0x33, 0x49, 0x72, 0xc6, 0x36, 0x56, 0x1a, 0x8f, 0xb8, 0x81, 0x8b, 0xbb, 0xbd, 0x1e, 0x3e, 0x2c, 0xe9, 0x87, 0xe6, 0xa7, 0x2f, 0xe8, 0xa7, 0x7d, 0x6f, 0xa3, 0xbd, 0x12, 0x1a, 0xe9, 0xa0, 0x6a, 0xd0, 0x71, 0x31, 0xbb, 0x31, 0x1b, 0x63, 0xe7, 0x0d, 0x3a, 0x7b, 0x6d, 0xa4, 0x80, 0x68, 0x89, 0x8c, 0x79, 0x68, 0x9b, 0xb7, 0x45, 0x1e, 0x4e, 0x0b, 0xe8, 0x36, 0x65, 0xed, 0xd0, 0x77, 0x77, 0x03, 0x87, 0x6e, 0xe6, 0x7c, 0x28, 0xcb, 0x0c, 0x1f, 0x79, 0x4d, 0xba, 0x0c, 0x53, 0xee, 0x6f, 0x75, 0x98, 0x2e, 0x7a, 0xfa, 0x16, 0x0b, 0x8f, 0x79, 0x7c, 0x2b, 0x22, 0x7d, 0x4f, 0xe8, 0xa0, 0xe7, 0xc1, 0xac, 0x70, 0xbb, 0x65, 0xea, 0x4a, 0x6d, 0xd7, 0x59, 0x23, 0x1a, 0xd1, 0xb7, 0x2a, 0x03, 0xda, 0x8a, 0x44, 0xc1, 0xdf, 0x09, 0xd5, 0x7c, 0x69, 0x76, 0xb6, 0xeb, 0xe3, 0xd1, 0xfa, 0x0e, 0x9a, 0x89, 0x79, 0xf7, 0x89, 0xf3, 0xb3, 0x44, 0xb6, 0xfa, 0xfc, 0x74, 0xcf, 0xfe, 0xf7, 0x38, 0xbf, 0x17, 0x9f, 0xe4, 0xfc, 0x5e, 0xfc, 0x6f, 0x73, 0x7e, 0x2f, 0xfe, 0xe5, 0xf3, 0xdb, 0xf3, 0xce, 0xef, 0xc5, 0xff, 0x2e, 0xe7, 0xa7, 0xfd, 0xd5, 0xf4, 0xf4, 0x12, 0xef, 0xfc, 0x06, 0x92, 0x36, 0xa2, 0xc0, 0x7c, 0xb8, 0xd3, 0xfa, 0x16, 0x07, 0x69, 0x24, 0xd1, 0x91, 0xbd, 0xe0, 0x9a, 0x6b, 0xcb, 0xd0, 0x90, 0x2d, 0x0d, 0x4b, 0xfa, 0x5a, 0x56, 0xa1, 0x83, 0x9e, 0x5e, 0x46, 0x66, 0x02, 0xce, 0x31, 0x58, 0xa0, 0x2d, 0x52, 0xd0, 0x82, 0x2e, 0xea, 0x12, 0xfd, 0x96, 0xb0, 0x7e, 0x2e, 0xaf, 0x2c, 0x6d, 0x51, 0x70, 0x08, 0x49, 0x0b, 0x36, 0xee, 0xe0, 0x10, 0xb7, 0xab, 0xc7, 0x8f, 0x7f, 0x19, 0x2c, 0x76, 0xa3, 0x8e, 0xcd, 0x76, 0x4a, 0xa1, 0xb0, 0x84, 0xb3, 0x75, 0xf6, 0xdc, 0x4c, 0x34, 0xcb, 0x39, 0xb4, 0xd0, 0x99, 0x35, 0x55, 0x1d, 0x73, 0x82, 0x4f, 0x1f, 0x59, 0x7e, 0x43, 0x38, 0x3e, 0x87, 0x1f, 0xae, 0x7c, 0xdf, 0x1b, 0x2c, 0xd5, 0x87, 0x46, 0x84, 0xe3, 0xea, 0xa1, 0x6d, 0xdf, 0x23, 0x94, 0x78, 0xb8, 0x8d, 0x17, 0xef, 0x36, 0x1c, 0x27, 0x10, 0x05, 0x2d, 0xf2, 0x50, 0xbf, 0x3b, 0x2e, 0xbb, 0x35, 0xa5, 0xe5, 0x65, 0xb7, 0xd1, 0xe3, 0xd2, 0xa4, 0xbd, 0x5b, 0x25, 0x85, 0xbc, 0x23, 0x52, 0xb0, 0x5b, 0x78, 0xfd, 0x2d, 0x51, 0x19, 0x4c, 0x4b, 0x41, 0x8d, 0x43, 0x18, 0x0d, 0x95, 0x83, 0x34, 0xb3, 0xdf, 0x33, 0xe3, 0xef, 0xc5, 0x4e, 0x6d, 0x57, 0xdf, 0x90, 0xae, 0xb8, 0x9c, 0x2f, 0xa4, 0xb4, 0xf8, 0x89, 0xd2, 0xca, 0x88, 0xbb, 0x31, 0x52, 0xd9, 0x24, 0xbb, 0xf7, 0xa5, 0xca, 0x48, 0x2d, 0x73, 0x53, 0x5a, 0x21, 0xe6, 0x7b, 0x2b, 0x30, 0x5a, 0x10, 0x8b, 0xea, 0xba, 0x99, 0x20, 0xc5, 0x15, 0x31, 0x8a, 0xaf, 0x8e, 0x5c, 0xd2, 0xd1, 0x9a, 0xa5, 0xd0, 0x81, 0x40, 0x00, 0xf8, 0xab, 0x21, 0x70, 0x6e, 0x8a, 0x12, 0x62, 0x81, 0x15, 0xce, 0x99, 0xd1, 0x05, 0xe1, 0x55, 0x18, 0xa6, 0x2f, 0x55, 0x56, 0xa5, 0x13, 0xa7, 0x36, 0x85, 0x21, 0x04, 0xee, 0x14, 0xaa, 0x0e, 0xa0, 0x60, 0x0f, 0xa9, 0xb7, 0x92, 0xd5, 0x27, 0xd0, 0x1d, 0x06, 0x9b, 0x29, 0xbb, 0xd3, 0xda, 0x9b, 0x5a, 0x8b, 0x92, 0xde, 0xd0, 0x0f, 0x07, 0xd4, 0x4a, 0x00, 0xff, 0x40, 0xb4, 0xd1, 0x52, 0x96, 0xc1, 0xaa, 0x99, 0xe3, 0x98, 0x08, 0xdc, 0x24, 0xb7, 0xea, 0x23, 0xe8, 0x0a, 0x40, 0x43, 0x47, 0x17, 0x28, 0xfd, 0x2a, 0xb8, 0x09, 0x48, 0xdd, 0x25, 0xd5, 0x30, 0x92, 0x38, 0xfb, 0xd7, 0x4b, 0x28, 0x14, 0x80, 0x81, 0xe0, 0x31, 0xd6, 0x52, 0xc0, 0x39, 0xb7, 0xf8, 0x26, 0x71, 0xab, 0xa6, 0x0d, 0x04, 0x25, 0x47, 0x29, 0x38, 0x79, 0x11, 0x76, 0x51, 0x32, 0x61, 0xbd, 0x86, 0x43, 0x84, 0x8a, 0x20, 0x53, 0xef, 0x08, 0x8a, 0xd3, 0x52, 0xa0, 0x67, 0xb9, 0xe5, 0x32, 0x81, 0xde, 0xfc, 0x7e, 0x55, 0xca, 0x4e, 0x66, 0xb8, 0xcb, 0xa2, 0x92, 0x29, 0x87, 0xff, 0x57, 0x65, 0x21, 0x37, 0x00, 0xd7, 0xb8, 0x99, 0xb8, 0x81, 0x5c, 0x23, 0x8f, 0x60, 0x56, 0x15, 0xf9, 0xe2, 0x31, 0xfa, 0x26, 0xc6, 0x65, 0x91, 0x5a, 0x1f, 0x27, 0x73, 0xaf, 0x34, 0x8d, 0xdb, 0x8b, 0x8b, 0x9a, 0xcd, 0xad, 0xc6, 0x75, 0x85, 0x64, 0x17, 0xf0, 0xb6, 0x00, 0xb1, 0xc2, 0x7e, 0xa1, 0x33, 0x59, 0xca, 0x46, 0x38, 0xf5, 0x7a, 0x30, 0x38, 0xf3, 0x6d, 0x39, 0x6d, 0x6c, 0xb4, 0x12, 0x93, 0x80, 0x46, 0xeb, 0x35, 0xa3, 0x23, 0x32, 0xf8, 0x61, 0x90, 0x73, 0xc8, 0xba, 0x93, 0x99, 0x62, 0x76, 0x28, 0x8e, 0xfc, 0xa8, 0x78, 0x5c, 0xa0, 0xf1, 0x25, 0x45, 0xb8, 0x7c, 0xcd, 0x71, 0x7e, 0x0c, 0x02, 0xbb, 0xb2, 0xec, 0xf9, 0x43, 0xe9, 0x60, 0xa9, 0x93, 0x2c, 0xc5, 0xf8, 0x3d, 0x82, 0x22, 0x23, 0xb8, 0x95, 0xc8, 0x56, 0x94, 0x3a, 0x63, 0x42, 0x73, 0x69, 0xed, 0x71, 0x26, 0x9d, 0xcb, 0x1a, 0xdd, 0x31, 0xd8, 0x9c, 0x41, 0x4b, 0x0b, 0x11, 0x11, 0x29, 0x9c, 0xb2, 0xa1, 0xf2, 0x5d, 0xde, 0x90, 0xaa, 0xbd, 0xe6, 0xcd, 0x30, 0xcd, 0x13, 0x62, 0x44, 0x78, 0xc8, 0x3c, 0x28, 0x19, 0xce, 0xf2, 0xd8, 0xde, 0xda, 0x7a, 0x12, 0x23, 0x48, 0xac, 0xd5, 0x95, 0x50, 0x41, 0xc8, 0x0e, 0x39, 0xc0, 0x61, 0x6a, 0xda, 0xe3, 0x54, 0x0a, 0x96, 0x9a, 0xa8, 0x6a, 0xf0, 0x49, 0x03, 0xd9, 0x63, 0xaf, 0x20, 0xb3, 0x55, 0x86, 0xd2, 0x22, 0xc0, 0x20, 0xb8, 0xdb, 0x27, 0x34, 0xc7, 0xf2, 0xa0, 0xf6, 0x4e, 0xb0, 0xa5, 0x34, 0x4e, 0x08, 0x5f, 0x12, 0xfd, 0xb3, 0x1f, 0x7d, 0xfd, 0x68, 0xed, 0x76, 0x62, 0x88, 0xec, 0x0f, 0xa6, 0x59, 0xb1, 0x9f, 0x9f, 0xe7, 0xdf, 0x5f, 0xc5, 0xfa, 0xc3, 0x38, 0x40, 0x7f, 0x60, 0xc6, 0x42, 0xc3, 0x02, 0xb7, 0x5b, 0x94, 0x34, 0x2a, 0xc1, 0x89, 0x84, 0x1d, 0x56, 0x66, 0xb5, 0xa0, 0x7f, 0x34, 0x9b, 0x2c, 0x39, 0xfd, 0x92, 0x98, 0x0b, 0xae, 0xc4, 0x73, 0xae, 0xa3, 0x3a, 0xd5, 0xb3, 0x50, 0x5f, 0xd6, 0xd5, 0x14, 0x2c, 0xad, 0xee, 0x51, 0x01, 0x75, 0x13, 0x35, 0x02, 0x6b, 0xae, 0x91, 0x77, 0x91, 0xaf, 0x21, 0xcf, 0x1c, 0x0f, 0x0c, 0xa2, 0x89, 0x71, 0xe6, 0x8f, 0xd6, 0x5a, 0x35, 0x40, 0x6c, 0x5d, 0xc6, 0xaa, 0xc8, 0xfb, 0x7a, 0xd3, 0xc7, 0xb9, 0x83, 0x5d, 0x65, 0xca, 0xeb, 0x1a, 0xae, 0x1c, 0xf6, 0xe5, 0xf8, 0xb0, 0x18, 0x9c, 0x41, 0x6c, 0xdd, 0x84, 0x5c, 0x28, 0x4e, 0xd9, 0x11, 0xa4, 0x09, 0xb2, 0xea, 0x08, 0x1a, 0x4b, 0x37, 0x92, 0x4e, 0xe4, 0x98, 0x30, 0xce, 0xa7, 0x1c, 0x54, 0x6f, 0x2d, 0xac, 0x1a, 0xf7, 0x19, 0xe3, 0x95, 0x94, 0x16, 0x0e, 0x0e, 0x99, 0x36, 0xf7, 0x4c, 0x83, 0x51, 0x4b, 0x93, 0x1a, 0xe6, 0x7b, 0x44, 0x9d, 0x0a, 0x6d, 0x78, 0x12, 0x11, 0x6a, 0xca, 0x25, 0x79, 0xaf, 0x79, 0x78, 0x83, 0xc0, 0xc6, 0x77, 0x92, 0x2b, 0xd7, 0xd1, 0x4f, 0x26, 0x15, 0xb8, 0x1e, 0xdb, 0xc0, 0xe8, 0x38, 0x82, 0x37, 0x46, 0x74, 0x38, 0x54, 0x02, 0xbf, 0x2c, 0x9c, 0x18, 0x79, 0xe7, 0x26, 0x85, 0x53, 0xcd, 0x3a, 0x04, 0x0c, 0xb9, 0x1c, 0x32, 0xe6, 0x68, 0xa5, 0x1f, 0xf5, 0x16, 0xbb, 0x9c, 0x39, 0x8e, 0xd9, 0x70, 0x9b, 0xf1, 0x5a, 0xc2, 0x77, 0x37, 0xaa, 0x5d, 0x08, 0xd5, 0x27, 0x39, 0x6c, 0x6f, 0x8b, 0xef, 0xf9, 0xdc, 0x82, 0xde, 0x5c, 0x5b, 0x88, 0x87, 0x37, 0x9f, 0x3a, 0x73, 0x75, 0xdd, 0xb6, 0x38, 0xd6, 0xd1, 0x1c, 0xcf, 0xd1, 0x89, 0xc3, 0xba, 0x2a, 0xee, 0x72, 0xb0, 0x69, 0x09, 0x1e, 0x84, 0x40, 0xb6, 0x04, 0x30, 0x85, 0x25, 0xb5, 0x2f, 0x7e, 0xa4, 0xaa, 0x23, 0xf3, 0x69, 0xa2, 0x6e, 0x0f, 0x00, 0x0e, 0xc1, 0x10, 0x73, 0xd2, 0xfc, 0x85, 0x8e, 0x71, 0x0b, 0x47, 0x45, 0xba, 0xa8, 0x38, 0x1f, 0x41, 0x92, 0xab, 0x57, 0x02, 0xe7, 0xc0, 0xdf, 0xa6, 0xb3, 0x7c, 0x18, 0xf3, 0x1d, 0x31, 0xb9, 0x4d, 0xea, 0xf1, 0xac, 0x01, 0x16, 0x23, 0x7b, 0x43, 0xf2, 0x0c, 0x34, 0x5c, 0x80, 0x25, 0xf7, 0x0e, 0xa8, 0x3b, 0x3c, 0x06, 0x42, 0x57, 0x7d, 0xd0, 0x7c, 0x82, 0xe1, 0xff, 0x7a, 0x93, 0xae, 0xdc, 0x5e, 0xad, 0xca, 0xa6, 0xd4, 0xb0, 0xd2, 0xb9, 0x53, 0x9e, 0xce, 0x45, 0x30, 0x0a, 0xe3, 0x65, 0x52, 0xcf, 0x14, 0x5b, 0x93, 0x30, 0xb1, 0xb4, 0xb4, 0xa3, 0x6c, 0x25, 0xd3, 0xa9, 0x40, 0xc2, 0xb1, 0xc1, 0x2c, 0x28, 0x04, 0x08, 0x96, 0xac, 0xa5, 0x2e, 0x18, 0x1f, 0xf7, 0x54, 0xa1, 0x91, 0xa1, 0x54, 0xb2, 0x93, 0xd3, 0xec, 0x5b, 0x67, 0xaf, 0x18, 0x58, 0xc1, 0xa7, 0xf8, 0x09, 0x2b, 0x84, 0xe4, 0xbf, 0xe4, 0x33, 0x59, 0xb1, 0x33, 0x2e, 0xca, 0x78, 0xdd, 0x44, 0x30, 0x9f, 0x0e, 0x8b, 0x27, 0x62, 0x6b, 0x25, 0x1a, 0x0d, 0xe8, 0xdf, 0x5f, 0x07, 0x62, 0x91, 0xea, 0xb7, 0x98, 0x12, 0x0f, 0x08, 0x1b, 0x53, 0xdb, 0xf9, 0x31, 0x2f, 0x08, 0x57, 0xe6, 0xe1, 0x4d, 0xc1, 0x1c, 0xb7, 0xd9, 0x23, 0x67, 0xd1, 0xd0, 0x99, 0x93, 0xbe, 0x2b, 0x31, 0x03, 0x25, 0xa8, 0xa4, 0x1a, 0x39, 0xbf, 0x1c, 0x27, 0xf1, 0x2c, 0xd4, 0x2d, 0x03, 0x27, 0x8c, 0x8e, 0x6e, 0x66, 0x6d, 0x08, 0x93, 0x92, 0x49, 0xc8, 0x44, 0x72, 0xac, 0x39, 0xcb, 0x50, 0x8c, 0x03, 0x33, 0x43, 0xba, 0x55, 0x01, 0xed, 0x1a, 0xfb, 0xf7, 0xd0, 0x03, 0x54, 0x3b, 0x3c, 0x12, 0x44, 0x02, 0x0a, 0x78, 0xda, 0x12, 0x1c, 0xc4, 0x74, 0xc3, 0x84, 0x44, 0x7d, 0x80, 0x28, 0x80, 0xf2, 0xe1, 0x9b, 0xc3, 0x89, 0x23, 0x95, 0xeb, 0x42, 0x49, 0xc8, 0x68, 0xd9, 0x06, 0x4e, 0x8c, 0x73, 0x60, 0x90, 0x49, 0x6e, 0xc8, 0x3d, 0xa4, 0x3c, 0x0b, 0xe1, 0x1c, 0x0b, 0xff, 0xa4, 0xef, 0x12, 0xcd, 0x8c, 0x22, 0x53, 0x86, 0x0f, 0xa0, 0x32, 0xc5, 0xb2, 0x38, 0x9a, 0xf0, 0x19, 0x66, 0x32, 0x3b, 0x3b, 0x2d, 0xa6, 0x97, 0xf4, 0x49, 0x17, 0x1a, 0xa3, 0xcb, 0x5e, 0xc6, 0x93, 0x44, 0x81, 0x53, 0x85, 0x7d, 0xe7, 0x23, 0xd8, 0x42, 0x0a, 0xd2, 0x12, 0x28, 0x11, 0x6a, 0x47, 0x9e, 0x05, 0xcd, 0x5c, 0x13, 0xb9, 0xa4, 0x11, 0xb9, 0x78, 0x11, 0x84, 0xdd, 0x96, 0xb3, 0x74, 0xa1, 0xfe, 0xe9, 0x6e, 0x94, 0x48, 0x56, 0xd1, 0xec, 0x51, 0x4e, 0x65, 0xd9, 0x0b, 0x98, 0x5e, 0xa6, 0x99, 0xbb, 0xc0, 0xdf, 0xce, 0x50, 0xf1, 0x5f, 0x6f, 0x8c, 0xbe, 0xb7, 0xb5, 0x4d, 0x93, 0xdd, 0xdb, 0x7a, 0xb9, 0x51, 0x97, 0xca, 0xb3, 0x32, 0xe9, 0x51, 0xd2, 0x5a, 0x58, 0x3b, 0xe5, 0x56, 0x75, 0xd6, 0xaf, 0x4e, 0x9a, 0x28, 0xbe, 0x24, 0x99, 0x6e, 0xe3, 0x65, 0xa1, 0xa6, 0x1c, 0x36, 0x31, 0x44, 0xc3, 0xb4, 0xbc, 0x41, 0xd4, 0x45, 0x4f, 0xca, 0xdb, 0x77, 0xc8, 0x68, 0xa3, 0xd8, 0x0d, 0xef, 0x53, 0x4c, 0xaf, 0x4a, 0x83, 0x34, 0xde, 0x07, 0x7a, 0x0e, 0xad, 0x52, 0x0e, 0x30, 0x84, 0xda, 0x99, 0x2a, 0x92, 0x03, 0x27, 0x89, 0x49, 0xf8, 0xae, 0xde, 0x6e, 0xd8, 0xf0, 0x9d, 0xb7, 0x69, 0x96, 0x96, 0x37, 0xd4, 0xa6, 0xb8, 0x2c, 0xe3, 0x69, 0xe2, 0x17, 0xb8, 0x03, 0x43, 0x02, 0x93, 0x89, 0xdb, 0xe8, 0x15, 0x84, 0x4c, 0x8f, 0xa9, 0x61, 0xbc, 0xef, 0x52, 0xb0, 0x22, 0x3d, 0xf6, 0x08, 0x19, 0xcd, 0x2e, 0x33, 0x44, 0x2f, 0x69, 0xe9, 0x34, 0x80, 0x6c, 0xeb, 0xff, 0x88, 0xdd, 0xc8, 0x08, 0x22, 0x8b, 0x7b, 0x03, 0x71, 0x73, 0xa0, 0x50, 0xd7, 0x17, 0x50, 0xb5, 0xe1, 0x70, 0x2f, 0x06, 0xc0, 0x82, 0x6c, 0xaf, 0x62, 0x4a, 0x01, 0x84, 0x9f, 0xfd, 0x00, 0xba, 0x68, 0xff, 0x95, 0xf9, 0xf1, 0xc6, 0xf3, 0x1a, 0x46, 0xee, 0x34, 0x74, 0x33, 0xcc, 0xc5, 0x95, 0x48, 0x04, 0x99, 0x2a, 0xaf, 0xf9, 0x1f, 0x61, 0x5f, 0x07, 0xd5, 0xb5, 0x82, 0x15, 0xf9, 0xfe, 0x88, 0x20, 0xa5, 0x2c, 0xc2, 0xb3, 0x93, 0xb6, 0x5b, 0xab, 0xd1, 0xa3, 0xee, 0x99, 0xa8, 0xaa, 0x06, 0x01, 0xfe, 0x0c, 0x26, 0x2f, 0x67, 0x10, 0xda, 0xa8, 0x9b, 0xea, 0x72, 0x20, 0x78, 0x2b, 0x34, 0x4c, 0x11, 0x7a, 0x27, 0x3a, 0x4b, 0xb8, 0x59, 0x4e, 0xb4, 0xf6, 0xd5, 0x5a, 0xa0, 0x9a, 0x6f, 0xed, 0xd0, 0x41, 0x18, 0x2f, 0x6d, 0x23, 0xae, 0xb5, 0x2f, 0x30, 0x29, 0x19, 0xc1, 0x54, 0xf8, 0x9b, 0x72, 0x06, 0x9c, 0x5f, 0x1b, 0x0e, 0xeb, 0x6b, 0x4a, 0x9f, 0xe0, 0x03, 0xd6, 0x93, 0x87, 0xb8, 0xf1, 0x35, 0x62, 0xaf, 0x37, 0xd6, 0xad, 0xfa, 0xdc, 0x9a, 0x57, 0xed, 0x87, 0xa9, 0xfb, 0x8c, 0xd6, 0x23, 0xdd, 0xc1, 0x6d, 0x1b, 0x53, 0x9e, 0x13, 0x4f, 0x86, 0x7c, 0x95, 0xa3, 0x51, 0x8a, 0x9a, 0x0b, 0x5d, 0x7d, 0xf8, 0xe5, 0x74, 0x1a, 0x4c, 0x71, 0x82, 0x2d, 0xc0, 0x83, 0xc7, 0x35, 0x4f, 0x92, 0xb8, 0x22, 0x7d, 0x03, 0xe5, 0x7c, 0x7b, 0xf2, 0xb4, 0xd5, 0xdd, 0x03, 0xcf, 0x38, 0xab, 0x38, 0x74, 0xeb, 0x53, 0xc2, 0x54, 0x40, 0x44, 0xc0, 0x34, 0x80, 0x88, 0x9e, 0xf4, 0x33, 0xe3, 0xed, 0x9a, 0xc4, 0x40, 0x14, 0x8f, 0x12, 0x5a, 0x9e, 0x51, 0x3d, 0x01, 0x73, 0x90, 0x64, 0xee, 0xf1, 0xb0, 0x99, 0xa6, 0xe6, 0x72, 0x06, 0x3b, 0xf6, 0x12, 0xe1, 0x64, 0x67, 0xdc, 0x67, 0x96, 0x07, 0x36, 0xe9, 0x3d, 0xd2, 0x86, 0x1a, 0x36, 0x97, 0xbd, 0xe9, 0x15, 0x71, 0x33, 0xdb, 0x45, 0x55, 0x51, 0x1b, 0x90, 0x92, 0xf3, 0x85, 0x61, 0x38, 0xbe, 0xca, 0xc8, 0x2d, 0x66, 0x6c, 0xfa, 0x28, 0xc9, 0x84, 0x00, 0x6e, 0xb4, 0x49, 0x97, 0x84, 0x2b, 0x0a, 0x46, 0x08, 0x63, 0x43, 0x4c, 0x26, 0x8f, 0xb0, 0x49, 0xdb, 0xce, 0xee, 0xe7, 0x9f, 0xf7, 0x83, 0x38, 0xa7, 0x5c, 0x9e, 0x0d, 0x44, 0x88, 0x3b, 0x65, 0x31, 0x31, 0xbb, 0x06, 0xdd, 0x18, 0xbf, 0x8f, 0x14, 0x46, 0xe5, 0x63, 0xf9, 0x1c, 0xa1, 0x8b, 0x90, 0x39, 0x2e, 0x67, 0xbe, 0x79, 0x4f, 0xa1, 0xc7, 0x39, 0xaa, 0x15, 0xc2, 0xc5, 0x48, 0xbd, 0x42, 0xae, 0x31, 0x4f, 0x5b, 0x54, 0xba, 0x44, 0xd2, 0xf3, 0x38, 0x95, 0x53, 0xa0, 0x01, 0x25, 0x9f, 0x94, 0xd3, 0x7e, 0x41, 0x6b, 0xa0, 0x1c, 0x77, 0xce, 0xfa, 0xe0, 0xed, 0x58, 0x6b, 0x29, 0x07, 0x5d, 0x8b, 0x34, 0xfa, 0x39, 0x4c, 0x0c, 0xbe, 0x02, 0x77, 0xde, 0x6a, 0x20, 0xe0, 0x70, 0xc9, 0x78, 0x86, 0x35, 0x61, 0xd8, 0xe9, 0x02, 0x3e, 0xd0, 0x18, 0x8e, 0x2a, 0xa4, 0xa7, 0x49, 0xe5, 0xd7, 0x31, 0x39, 0xd9, 0xbd, 0x2b, 0x06, 0x0f, 0xd9, 0x44, 0x52, 0x86, 0x15, 0x1d, 0xf6, 0x25, 0x92, 0x30, 0x4e, 0x27, 0x7a, 0x49, 0x4d, 0x77, 0x88, 0xaf, 0xe8, 0x34, 0x0e, 0x65, 0xeb, 0xa5, 0x2c, 0xf1, 0xab, 0x20, 0xc6, 0x99, 0xa4, 0x18, 0x13, 0xe0, 0x56, 0x55, 0x81, 0x5a, 0x6d, 0x79, 0x37, 0x65, 0x91, 0x73, 0x2f, 0x02, 0xae, 0xdd, 0xe1, 0x0d, 0xe6, 0xbc, 0xcd, 0x59, 0x08, 0x64, 0xe3, 0xd0, 0x0c, 0x2a, 0xad, 0x4e, 0x30, 0x91, 0x1f, 0xa7, 0x12, 0xda, 0x09, 0xc5, 0x29, 0x47, 0xfe, 0x00, 0x4f, 0x7b, 0x56, 0x0f, 0xbe, 0xeb, 0xec, 0x93, 0x7f, 0xf6, 0x6e, 0x64, 0x4d, 0x10, 0x35, 0x78, 0x8b, 0x6d, 0x02, 0xb8, 0x1b, 0x9d, 0x91, 0x95, 0x82, 0x26, 0x1c, 0xee, 0xce, 0x8d, 0x4b, 0xb5, 0x95, 0xdc, 0x44, 0x59, 0xd3, 0x3c, 0xe1, 0x59, 0x12, 0xac, 0x86, 0xee, 0x2a, 0xfa, 0x2a, 0xab, 0x62, 0x39, 0x42, 0xc5, 0x92, 0x8c, 0x72, 0xfa, 0x54, 0xa8, 0x1b, 0x97, 0xba, 0x57, 0xcd, 0x8a, 0xa9, 0x67, 0x1e, 0x9d, 0x17, 0xed, 0xb2, 0x00, 0x02, 0xb2, 0x85, 0x27, 0x78, 0x91, 0x9c, 0xa1, 0xda, 0x0b, 0xf6, 0x71, 0x4d, 0xc8, 0xdd, 0x52, 0xa6, 0x7f, 0x67, 0xa5, 0x4c, 0x52, 0x7b, 0x15, 0x1e, 0x8d, 0x1c, 0x1c, 0x09, 0x02, 0xf6, 0x47, 0x6f, 0xb0, 0xcb, 0x28, 0x8b, 0x72, 0xa4, 0x37, 0x8f, 0x4f, 0xbb, 0x89, 0xed, 0x2c, 0x91, 0x50, 0x8d, 0x2b, 0x92, 0xe9, 0x12, 0xa5, 0x1c, 0xed, 0xd3, 0xba, 0xc2, 0xa1, 0xea, 0x13, 0x8b, 0x74, 0x41, 0x9d, 0x4c, 0xc0, 0x9e, 0xf3, 0x72, 0xe5, 0xe1, 0x2d, 0xee, 0x1f, 0xba, 0xcc, 0x60, 0xbb, 0xaa, 0x25, 0xc6, 0x20, 0x05, 0x0f, 0x06, 0xf8, 0xd7, 0x5f, 0xc9, 0xf5, 0x97, 0xcb, 0xd2, 0xb9, 0xf7, 0xc6, 0xd8, 0x98, 0xde, 0xc9, 0xc4, 0xb3, 0x5d, 0x12, 0xca, 0x7c, 0x21, 0x20, 0x33, 0x4c, 0x25, 0xa9, 0x94, 0x01, 0x70, 0xa3, 0x39, 0x74, 0xc4, 0x7c, 0x81, 0x71, 0xca, 0x51, 0x62, 0x61, 0x5c, 0x69, 0x53, 0xa8, 0xaa, 0xda, 0xbb, 0xd5, 0x84, 0x88, 0xa8, 0xba, 0x93, 0x8b, 0x93, 0x29, 0xcd, 0x4e, 0xba, 0x8c, 0xfc, 0xca, 0xe5, 0x4d, 0x02, 0xfa, 0x13, 0x97, 0x5c, 0x3e, 0x51, 0xfa, 0x0d, 0x58, 0x49, 0x08, 0xb0, 0x56, 0xfd, 0x57, 0x63, 0xf0, 0x22, 0xe7, 0x0b, 0xc0, 0x27, 0x11, 0x6e, 0xec, 0x01, 0xe7, 0x69, 0x50, 0x3b, 0x3b, 0x61, 0x68, 0x26, 0x2e, 0x21, 0xe5, 0x51, 0xac, 0x22, 0xae, 0x01, 0xeb, 0xc4, 0xbd, 0x5f, 0x93, 0x8b, 0x1b, 0xc2, 0xec, 0xb1, 0x76, 0x3e, 0xb1, 0x6a, 0xbe, 0x26, 0x06, 0xe9, 0xd2, 0xf0, 0x10, 0x54, 0xa9, 0x8a, 0x18, 0x38, 0xe6, 0x5f, 0x17, 0xd3, 0x16, 0x50, 0x45, 0xee, 0x99, 0x03, 0xb6, 0x82, 0xdf, 0xa4, 0x8b, 0xe8, 0xb0, 0xf7, 0x36, 0x92, 0xf9, 0xbc, 0xfe, 0xaa, 0x36, 0x9c, 0x36, 0xae, 0x70, 0x71, 0xd9, 0x05, 0xe3, 0x63, 0x34, 0x4d, 0x9f, 0xd8, 0x04, 0x6e, 0x6a, 0x60, 0xd2, 0x89, 0xcb, 0x9b, 0x3c, 0x91, 0xb3, 0xcb, 0xc8, 0x04, 0x36, 0x3d, 0x98, 0x60, 0x5d, 0x65, 0xb0, 0xa3, 0x86, 0x6a, 0xbc, 0xed, 0xd3, 0x26, 0xb9, 0xfe, 0x1f, 0xf9, 0x4d, 0x86, 0xff, 0xc0, 0x2f, 0xe0, 0x07, 0x5e, 0x6f, 0x6f, 0x07, 0x67, 0xde, 0x3a, 0x5f, 0x9e, 0xb0, 0xce, 0x18, 0x85, 0x91, 0xa4, 0x88, 0x3a, 0xbc, 0xad, 0x66, 0xfa, 0xf7, 0xa9, 0x6a, 0xce, 0x77, 0xb3, 0xd1, 0x1d, 0x22, 0x3c, 0x32, 0xe7, 0x55, 0x4e, 0xbf, 0x0b, 0xb2, 0xc4, 0xd4, 0xc8, 0x87, 0x99, 0x0f, 0x6e, 0x01, 0xba, 0x1a, 0x1e, 0x49, 0xfb, 0xe2, 0x3b, 0x18, 0x0b, 0x7a, 0x7c, 0x7d, 0x78, 0xb3, 0x9c, 0x26, 0xc4, 0x37, 0xab, 0x87, 0xaa, 0xf3, 0xac, 0x95, 0xa3, 0x97, 0x82, 0xdd, 0x14, 0x9c, 0x62, 0x5d, 0x39, 0xc9, 0x46, 0x54, 0xb3, 0x50, 0x53, 0x21, 0x38, 0x15, 0x13, 0x2d, 0x25, 0x0d, 0x75, 0x35, 0xeb, 0x8a, 0x58, 0x19, 0xed, 0xf2, 0xa6, 0x09, 0xee, 0x85, 0xad, 0xb4, 0x5f, 0xb1, 0x82, 0xfb, 0x64, 0xf8, 0xfa, 0x2b, 0xf4, 0x6d, 0x3d, 0x50, 0xff, 0x00, 0xd6, 0x6a, 0x71, 0xeb, 0x36, 0xa9, 0x9d, 0x40, 0xe4, 0x2c, 0xa2, 0x39, 0x48, 0x5e, 0xb4, 0x0f, 0xeb, 0xd4, 0x39, 0x39, 0x43, 0x4e, 0xf2, 0x7c, 0xe5, 0x88, 0xea, 0xbb, 0xa1, 0x3d, 0x71, 0x92, 0x19, 0x39, 0xc5, 0xcf, 0xd6, 0x70, 0x32, 0x41, 0x90, 0x9c, 0xa9, 0x89, 0xcb, 0x50, 0x4d, 0x3d, 0x7a, 0xc8, 0xa4, 0x9f, 0xb9, 0x4a, 0x9c, 0xd7, 0x5d, 0x2a, 0xf3, 0x09, 0x77, 0x8c, 0xb1, 0x6b, 0xe0, 0xeb, 0x48, 0x10, 0x48, 0xf8, 0xd7, 0x2f, 0xcc, 0xeb, 0xf8, 0x1f, 0xb8, 0xcd, 0x84, 0xc8, 0xbd, 0x62, 0x35, 0x18, 0x0a, 0xd4, 0x77, 0x36, 0x29, 0xfc, 0x64, 0x1a, 0x41, 0xad, 0x75, 0x59, 0xd1, 0xfe, 0x62, 0x8d, 0xdc, 0xb8, 0x1a, 0xa4, 0xa6, 0xf6, 0x4c, 0xc4, 0xe3, 0xc6, 0xb9, 0xa7, 0xd6, 0x62, 0x36, 0x26, 0xf7, 0x6f, 0xa2, 0xd9, 0xb7, 0x4c, 0x1c, 0x67, 0xae, 0x53, 0xff, 0xa9, 0x63, 0x26, 0xff, 0x53, 0xc7, 0x4e, 0xff, 0xa7, 0x8e, 0x5d, 0xc0, 0x4f, 0x1d, 0x84, 0xa1, 0xc4, 0x45, 0xf8, 0x06, 0xf1, 0x2f, 0x3d, 0xf4, 0x35, 0xfe, 0xaa, 0xfd, 0xa8, 0xf3, 0x4d, 0xe7, 0x93, 0x9d, 0xb5, 0x55, 0x9b, 0xe6, 0xc6, 0x86, 0xa8, 0x2e, 0xa6, 0xb9, 0x87, 0xc0, 0xae, 0x6b, 0xdb, 0x64, 0xb7, 0x05, 0x8d, 0x33, 0xaf, 0x83, 0xb7, 0xf3, 0x00, 0xee, 0xb8, 0x6d, 0x4e, 0xe5, 0x34, 0x5d, 0x30, 0x28, 0x96, 0x7a, 0x0e, 0xda, 0xfb, 0xd9, 0x93, 0x47, 0xe6, 0x75, 0x4f, 0xfe, 0xfc, 0x27, 0x7c, 0x81, 0xf4, 0x7f, 0x1a, 0x43, 0x6e, 0x35, 0x01, 0xd8, 0x48, 0x5e, 0x1e, 0x25, 0x4c, 0x67, 0x1c, 0xb5, 0x64, 0xf1, 0x37, 0xe1, 0x4a, 0x23, 0x26, 0x09, 0x2f, 0x97, 0x7e, 0x9e, 0x52, 0xab, 0x32, 0x58, 0xd5, 0x8c, 0x2d, 0xd4, 0x4d, 0x94, 0x0a, 0x94, 0xfb, 0x4a, 0x1d, 0xc4, 0x4a, 0x32, 0xd1, 0xc5, 0x78, 0x95, 0x3e, 0x6c, 0xbc, 0x0f, 0xed, 0x24, 0x8d, 0x8a, 0xf8, 0x2c, 0x2f, 0xca, 0xd7, 0x9d, 0x02, 0x3b, 0xbf, 0x46, 0xd3, 0x02, 0x34, 0xd8, 0x2f, 0x90, 0xb4, 0x96, 0x70, 0x58, 0xf6, 0x9e, 0x3e, 0xf4, 0xe6, 0x8f, 0x30, 0xef, 0xb5, 0x5f, 0x44, 0x19, 0x0e, 0x4b, 0x1b, 0x53, 0x94, 0x1e, 0x98, 0xe3, 0x3c, 0x6a, 0xe6, 0x29, 0xf0, 0xd5, 0x75, 0x2e, 0xa5, 0xfc, 0xfe, 0x75, 0x08, 0xe6, 0xce, 0x5b, 0x88, 0xc3, 0x79, 0xc9, 0x54, 0x7b, 0x7d, 0xf1, 0xed, 0x17, 0x3a, 0xc0, 0x4f, 0x9d, 0x1f, 0x7a, 0xfc, 0x53, 0xaa, 0x17, 0x3e, 0x88, 0x2e, 0xbe, 0x45, 0xea, 0xfe, 0x65, 0x0c, 0x6c, 0xd5, 0x07, 0xbe, 0xe2, 0xbf, 0x10, 0x65, 0xaf, 0x1a, 0xf6, 0xda, 0xe6, 0x49, 0xbc, 0xc6, 0x06, 0xc6, 0x54, 0x67, 0x44, 0x56, 0xf8, 0x62, 0x81, 0x95, 0x43, 0x5a, 0x1f, 0x5b, 0x71, 0x7d, 0x2c, 0x45, 0x8d, 0xe2, 0x61, 0xce, 0x29, 0xd2, 0x95, 0x8f, 0x8d, 0x4d, 0xd8, 0xbc, 0x74, 0xb6, 0xe2, 0xbb, 0x5a, 0x90, 0xe3, 0x82, 0xd4, 0xe1, 0x7a, 0x9a, 0x41, 0xbd, 0x96, 0xb1, 0x1b, 0x9d, 0x04, 0x9a, 0x20, 0x58, 0x70, 0x23, 0xfe, 0x1b, 0xe9, 0x65, 0xa6, 0x37, 0x37, 0x36, 0x54, 0x8b, 0x8b, 0x44, 0x3b, 0xe4, 0x48, 0x4f, 0x3f, 0x0a, 0x30, 0x01, 0xc1, 0x04, 0x42, 0x01, 0x12, 0x9d, 0x94, 0x44, 0xf4, 0x49, 0x3e, 0x93, 0x2e, 0xee, 0x25, 0x50, 0x3d, 0x1f, 0xb0, 0x69, 0xa3, 0x07, 0x1a, 0x07, 0x6e, 0x85, 0x44, 0x2a, 0xe4, 0xb3, 0x01, 0x95, 0x43, 0xa2, 0x89, 0xec, 0x8d, 0x93, 0xa6, 0x6d, 0x04, 0x18, 0xc6, 0x84, 0xff, 0x05, 0x1a, 0xfd, 0xc3, 0x84, 0x9c, 0x4f, 0xa6, 0x2a, 0xb3, 0x27, 0xce, 0xe1, 0x80, 0x07, 0x27, 0x32, 0xf7, 0x46, 0x2f, 0x0e, 0xa7, 0x41, 0x68, 0xa9, 0x26, 0xe6, 0x89, 0xbd, 0x43, 0x95, 0x50, 0x12, 0xd9, 0xb5, 0xb3, 0x0d, 0x8a, 0x97, 0xf0, 0x62, 0xe9, 0x0e, 0xab, 0x1a, 0xe1, 0xdf, 0xb6, 0xe8, 0x8f, 0xe2, 0x4b, 0xd6, 0xc7, 0x62, 0xd1, 0xb7, 0xe4, 0xb0, 0xfa, 0xde, 0x0b, 0x3f, 0x48, 0x52, 0x50, 0x6f, 0xfb, 0xc0, 0xe9, 0x52, 0xc4, 0x3f, 0x0b, 0x0f, 0xef, 0x82, 0xc0, 0x68, 0x80, 0xb8, 0x94, 0xed, 0x5f, 0x31, 0xfe, 0x8e, 0x19, 0xff, 0xb3, 0x00, 0xee, 0x0a, 0x23, 0xa3, 0x84, 0x3f, 0x7b, 0x6d, 0x93, 0x00, 0xd5, 0x8b, 0x6a, 0x3c, 0x19, 0x35, 0x1f, 0x82, 0x42, 0x3e, 0x33, 0x26, 0x0b, 0x87, 0x1b, 0xfc, 0x26, 0x0f, 0x0c, 0x57, 0x49, 0x66, 0x20, 0xad, 0x03, 0xb6, 0xb1, 0x69, 0x22, 0xb2, 0xa8, 0x17, 0xc2, 0xca, 0xe7, 0x08, 0xc1, 0x3a, 0x3e, 0xb0, 0x3d, 0x2f, 0x19, 0x44, 0x22, 0x75, 0xf3, 0xeb, 0x6d, 0x1d, 0xad, 0x57, 0xd6, 0x58, 0x03, 0x38, 0xf6, 0x3e, 0x05, 0xac, 0x98, 0xa1, 0x97, 0x9c, 0x86, 0x8c, 0x6b, 0xeb, 0x6b, 0xe2, 0x54, 0xc1, 0x0f, 0x61, 0xab, 0x48, 0x4a, 0x84, 0xa2, 0x62, 0xec, 0x98, 0x30, 0x33, 0xc4, 0x97, 0xd3, 0x0b, 0x68, 0x1d, 0x07, 0xc4, 0xda, 0xcd, 0x9d, 0x60, 0xa0, 0x20, 0xc2, 0x09, 0x52, 0xbb, 0x99, 0x41, 0xbd, 0x6a, 0xe0, 0x40, 0xbe, 0x91, 0xec, 0x6c, 0xb1, 0x0c, 0xc6, 0xb6, 0xa9, 0xcd, 0x56, 0x8c, 0xa3, 0xb5, 0xd7, 0x1b, 0x6b, 0x66, 0x69, 0xed, 0x66, 0x91, 0xd7, 0xf1, 0x51, 0x83, 0x90, 0xa6, 0x0f, 0x2c, 0x79, 0x96, 0xe6, 0x98, 0xfb, 0x90, 0xf4, 0xe8, 0x40, 0x83, 0x08, 0x7a, 0x65, 0x25, 0xde, 0x4e, 0x4a, 0x2c, 0xa7, 0xdb, 0xc9, 0x58, 0x2f, 0x4c, 0xe2, 0xf1, 0xac, 0xc2, 0x54, 0x7d, 0x2a, 0xa6, 0x60, 0xb4, 0xbf, 0xf2, 0xc0, 0xd1, 0xc7, 0x03, 0xd7, 0x13, 0x03, 0x39, 0xd4, 0x44, 0x41, 0x5c, 0x22, 0x8e, 0x47, 0x63, 0x95, 0xea, 0xbd, 0xf6, 0x7a, 0x9d, 0x05, 0x96, 0xf5, 0xa7, 0x39, 0xdf, 0x5e, 0x8b, 0x7e, 0x0a, 0xd7, 0xb5, 0x46, 0xfc, 0xae, 0x63, 0x21, 0x08, 0xd9, 0x3e, 0xf5, 0x46, 0x74, 0x38, 0xcc, 0xc7, 0x8f, 0x5f, 0x52, 0xd8, 0x49, 0x5e, 0x39, 0xdc, 0xa4, 0x1f, 0x35, 0x54, 0xe6, 0xb6, 0x81, 0x68, 0x14, 0x38, 0x2a, 0xfa, 0xf3, 0x2b, 0x7c, 0x5c, 0x2d, 0x86, 0xb5, 0xa8, 0xdf, 0x07, 0x26, 0x54, 0xce, 0xa9, 0x1d, 0xd7, 0x0a, 0xc1, 0xc2, 0x78, 0x77, 0x24, 0x62, 0x51, 0x49, 0x11, 0xc8, 0x12, 0xf2, 0xec, 0xa8, 0x95, 0xcd, 0x4e, 0x48, 0xfe, 0x55, 0xf1, 0xba, 0x1f, 0x1d, 0x99, 0x2c, 0x99, 0x24, 0x80, 0x91, 0x8d, 0xd7, 0x98, 0x65, 0x87, 0x53, 0x12, 0xfe, 0xf9, 0x30, 0x15, 0x37, 0xfb, 0x38, 0xaf, 0xe1, 0x6e, 0x32, 0xa6, 0x03, 0x08, 0xf7, 0x30, 0x52, 0xda, 0x28, 0x2f, 0x38, 0x46, 0xc4, 0xee, 0x74, 0x63, 0xbf, 0xc8, 0xd4, 0x7a, 0x27, 0x02, 0xcc, 0xa5, 0x6c, 0xb4, 0x1b, 0xbd, 0x34, 0x5f, 0x0a, 0x60, 0xd5, 0xb3, 0xc5, 0x5f, 0x46, 0x9f, 0xf7, 0xf0, 0x29, 0xa7, 0x5b, 0xac, 0xd0, 0x7d, 0x3d, 0x83, 0xa3, 0x2b, 0x4a, 0x61, 0x8f, 0x12, 0x93, 0x02, 0x05, 0x39, 0x24, 0x09, 0x86, 0x71, 0x99, 0xbc, 0xd8, 0x53, 0xf5, 0x92, 0x77, 0xa9, 0x54, 0xff, 0x6d, 0xcd, 0x09, 0xcb, 0x72, 0xc8, 0x59, 0x50, 0xf3, 0x22, 0x50, 0x61, 0x31, 0x2a, 0x67, 0xd8, 0xfc, 0x8b, 0x73, 0x70, 0x51, 0x9a, 0x82, 0x22, 0x39, 0xad, 0xa8, 0xa2, 0xe8, 0xe5, 0x0b, 0x67, 0xd2, 0x4f, 0xb8, 0x2b, 0x1a, 0x9c, 0x54, 0x56, 0xd8, 0x5c, 0x91, 0xda, 0xeb, 0xf0, 0x5d, 0xef, 0x5e, 0xa2, 0xaf, 0x83, 0x81, 0xc7, 0x64, 0x8d, 0xc6, 0xc1, 0xf8, 0xd4, 0x35, 0x72, 0x2f, 0xc1, 0x17, 0x4a, 0x38, 0xcd, 0x4f, 0xaf, 0x24, 0x6a, 0xc7, 0x44, 0xd2, 0xf7, 0x79, 0x12, 0x4c, 0xd8, 0x4f, 0xd3, 0x35, 0x06, 0x11, 0x26, 0xcb, 0x82, 0xa4, 0x8f, 0x3c, 0xc6, 0x4a, 0x82, 0xd6, 0x29, 0x89, 0x9e, 0xfe, 0xfe, 0xe8, 0xfc, 0xc3, 0xd1, 0xd9, 0xf3, 0xbb, 0x02, 0xd5, 0x1a, 0xcd, 0x3d, 0x91, 0x03, 0xeb, 0x82, 0x19, 0x34, 0xa0, 0x7e, 0xc2, 0x50, 0x06, 0x5e, 0xd4, 0x01, 0xa1, 0x0d, 0x9a, 0xd9, 0x7a, 0x58, 0x34, 0x86, 0x74, 0x85, 0x49, 0x22, 0x61, 0x08, 0x20, 0xce, 0xf3, 0x95, 0x10, 0xb9, 0x93, 0xb9, 0x19, 0x97, 0xd2, 0x93, 0xb1, 0xa3, 0xef, 0xe3, 0xeb, 0x1d, 0x49, 0x1e, 0x37, 0x75, 0xe2, 0x21, 0x2a, 0x37, 0xb5, 0xed, 0x26, 0xf5, 0x4a, 0x9b, 0x5a, 0x8b, 0x40, 0xab, 0x79, 0xdf, 0xf2, 0xc9, 0xc4, 0x66, 0xcf, 0x36, 0x23, 0x7c, 0xc7, 0xc7, 0xed, 0x25, 0xb7, 0x9f, 0x12, 0x2d, 0xb5, 0x91, 0x91, 0x4e, 0xdb, 0x68, 0xb9, 0x7b, 0xaf, 0xca, 0xb9, 0x1a, 0xfd, 0x50, 0xe6, 0x16, 0xde, 0x55, 0x98, 0xa0, 0x8b, 0x1c, 0xa0, 0x2a, 0x2e, 0xb5, 0x9b, 0x1d, 0x9c, 0x5c, 0xd1, 0x66, 0x5d, 0x1e, 0x0d, 0x06, 0x46, 0x16, 0x96, 0x92, 0x96, 0xd0, 0xf5, 0x8c, 0x31, 0x52, 0x23, 0xdd, 0xb6, 0x27, 0xfd, 0xc8, 0x74, 0x8a, 0x95, 0x74, 0x4e, 0x8a, 0xfd, 0x80, 0xcd, 0x77, 0xbd, 0x9c, 0xc3, 0x85, 0x01, 0x8d, 0x77, 0xbc, 0x56, 0x4a, 0x28, 0xb6, 0x49, 0x78, 0xc8, 0xb9, 0x44, 0x93, 0xa2, 0xb3, 0x46, 0xda, 0xc3, 0xb3, 0x1f, 0x68, 0x0c, 0x09, 0xb9, 0x3c, 0x07, 0xaf, 0x5d, 0x88, 0xdb, 0x6e, 0xd8, 0x99, 0xde, 0x19, 0x9c, 0x5e, 0x9f, 0xc0, 0xf6, 0x7d, 0xb8, 0x7e, 0xd7, 0x91, 0xd4, 0x85, 0x26, 0x0a, 0x06, 0x39, 0xed, 0xb1, 0xc5, 0xeb, 0x9d, 0xa9, 0x96, 0x2d, 0xd8, 0x91, 0x02, 0xd6, 0x42, 0x48, 0x03, 0xb7, 0x1f, 0xed, 0xaf, 0x38, 0xa5, 0xfd, 0xfe, 0x7e, 0xf3, 0x94, 0xda, 0xe1, 0xaa, 0x19, 0xc0, 0xd8, 0x23, 0x77, 0x41, 0x45, 0xc6, 0xec, 0xa9, 0x4d, 0xdb, 0x3c, 0x85, 0x82, 0x6c, 0x84, 0xae, 0x13, 0x73, 0x29, 0xbc, 0x87, 0x9e, 0xa7, 0x50, 0x82, 0x4e, 0x5c, 0x9c, 0xb0, 0x9b, 0x0d, 0xdc, 0x90, 0x78, 0x7b, 0x39, 0x1c, 0x0a, 0x27, 0x16, 0x17, 0x63, 0x53, 0x16, 0xea, 0xeb, 0x87, 0x9a, 0xeb, 0x87, 0x2d, 0x99, 0x80, 0x04, 0xb4, 0x25, 0x4b, 0xad, 0x5a, 0xd7, 0xef, 0xad, 0x60, 0xf3, 0xf9, 0xc2, 0x60, 0xda, 0xe4, 0x45, 0xa7, 0x2e, 0x2d, 0x06, 0x15, 0x7a, 0x65, 0xf6, 0x63, 0x18, 0xff, 0x19, 0xf7, 0x55, 0xf2, 0x45, 0x0e, 0xf9, 0xcf, 0x30, 0xbd, 0x93, 0xc8, 0x2d, 0xf2, 0x19, 0x3b, 0x10, 0xe5, 0x0d, 0x4e, 0xe2, 0xe4, 0x62, 0x17, 0xa9, 0xc3, 0x28, 0x28, 0xe1, 0x50, 0x42, 0x34, 0xd4, 0xd4, 0xdc, 0x6f, 0xbb, 0xb5, 0x3e, 0xd8, 0x30, 0x9e, 0xd6, 0x6b, 0x8a, 0x28, 0xd2, 0x68, 0x81, 0x2a, 0x26, 0x07, 0x59, 0x51, 0xd4, 0xcb, 0x10, 0xba, 0x8f, 0x73, 0x7b, 0x7d, 0x8b, 0x89, 0x18, 0xf5, 0xe8, 0x7e, 0xdc, 0x82, 0x55, 0x47, 0x6e, 0x2d, 0x4a, 0x22, 0x23, 0x1b, 0x90, 0x6b, 0xa6, 0x8e, 0xbf, 0x7f, 0xe3, 0x34, 0xdb, 0xd1, 0x3c, 0x35, 0xa6, 0x17, 0x51, 0x48, 0xdb, 0xd0, 0xe0, 0x12, 0x9b, 0x6c, 0xd9, 0xa7, 0xa0, 0xea, 0x38, 0x49, 0x16, 0x06, 0xda, 0x3c, 0xa5, 0x1a, 0x9b, 0xb4, 0xa4, 0x20, 0xaa, 0xc0, 0xca, 0x53, 0x3b, 0xb9, 0x96, 0xd9, 0x09, 0xeb, 0xd0, 0x16, 0x91, 0x64, 0xef, 0x60, 0xf3, 0x30, 0x0c, 0xe3, 0x6e, 0xbf, 0xdc, 0xfd, 0x1c, 0x64, 0xf3, 0x23, 0x61, 0x8d, 0xdb, 0x2d, 0x63, 0x2c, 0xe0, 0x76, 0x9c, 0x3f, 0x31, 0x6a, 0x34, 0xbd, 0x57, 0xe0, 0x14, 0xa2, 0x12, 0xcd, 0x08, 0x72, 0x50, 0x49, 0x71, 0xb3, 0x8f, 0x45, 0x03, 0x9b, 0x28, 0x1b, 0x26, 0x49, 0x77, 0xb4, 0x4f, 0x9c, 0x20, 0xd6, 0x77, 0x08, 0x18, 0x1b, 0x94, 0x60, 0x27, 0x35, 0x60, 0x29, 0x57, 0x27, 0xd7, 0x57, 0xf0, 0xc7, 0xe0, 0xfa, 0xe2, 0xaa, 0x05, 0x99, 0xb1, 0x62, 0x98, 0x0e, 0xdc, 0x34, 0x4d, 0x57, 0xa1, 0x6d, 0xae, 0xa3, 0xb6, 0x51, 0x26, 0x34, 0xb3, 0x9d, 0x32, 0x08, 0xf4, 0xe5, 0xe0, 0x7d, 0x95, 0xfd, 0xda, 0x42, 0x27, 0x20, 0x1f, 0x56, 0x2e, 0x8c, 0xcf, 0x7c, 0x35, 0x85, 0xd0, 0x82, 0x91, 0x18, 0x71, 0xc5, 0x86, 0xd1, 0xd3, 0x6c, 0xc1, 0x68, 0x43, 0xe7, 0xbf, 0x85, 0xb1, 0xd7, 0xf6, 0xd4, 0x2d, 0x68, 0x86, 0x9c, 0x9a, 0xcb, 0xcd, 0x59, 0x6c, 0xb7, 0x76, 0xe0, 0xb4, 0x0a, 0x05, 0xd0, 0x89, 0xd6, 0xc9, 0x81, 0x2c, 0x7a, 0xc9, 0x13, 0xf4, 0x0b, 0xba, 0xd0, 0x86, 0x5d, 0x70, 0x99, 0xcf, 0x13, 0xf6, 0xf0, 0x73, 0x72, 0xae, 0x32, 0x27, 0x96, 0x2d, 0x8c, 0x4b, 0x1b, 0x85, 0xf0, 0x30, 0x0c, 0x84, 0x18, 0x9e, 0xf2, 0x9a, 0x41, 0x14, 0xc8, 0x85, 0x3a, 0xf8, 0x5c, 0x12, 0xb0, 0x54, 0x2b, 0xc2, 0x66, 0x5b, 0xd3, 0x59, 0x39, 0xd8, 0x62, 0x75, 0xe6, 0xbd, 0xdd, 0x64, 0x32, 0x08, 0xca, 0x10, 0xe6, 0x2c, 0xd4, 0x47, 0x4f, 0x8b, 0xeb, 0x29, 0xd1, 0x4a, 0x73, 0x6c, 0x48, 0x97, 0x70, 0xfb, 0x87, 0x5e, 0xca, 0x53, 0xc1, 0xb0, 0x1a, 0x55, 0x2f, 0x22, 0x98, 0x87, 0xa1, 0x6d, 0x39, 0x72, 0x0e, 0xd1, 0x2c, 0x9b, 0x4c, 0xb7, 0xa6, 0xcf, 0xf9, 0x6c, 0x56, 0x95, 0xb6, 0xc8, 0x76, 0x64, 0xf2, 0xd0, 0x28, 0x5a, 0xdb, 0x7e, 0xb5, 0xa1, 0x44, 0x37, 0x35, 0x18, 0x4a, 0xb7, 0xb2, 0x4e, 0x06, 0xea, 0x91, 0x1d, 0x44, 0xd0, 0x89, 0x3e, 0x64, 0x82, 0x1c, 0x93, 0x81, 0x6d, 0x41, 0xf9, 0x0f, 0x63, 0xb3, 0x69, 0x08, 0xa8, 0x84, 0x69, 0x5b, 0x2c, 0xb4, 0xc6, 0x39, 0x2b, 0xf4, 0x84, 0xe9, 0xec, 0x43, 0x84, 0x91, 0x0f, 0x99, 0xb2, 0x09, 0x54, 0xd2, 0xc8, 0x78, 0xd6, 0x2e, 0x19, 0x55, 0xcd, 0x95, 0x12, 0xca, 0x83, 0xb7, 0xd0, 0x4b, 0xf7, 0xd0, 0x98, 0xa5, 0x91, 0xf5, 0x63, 0x79, 0x41, 0xc5, 0x60, 0x0b, 0x8c, 0xa8, 0xa0, 0x5e, 0x01, 0x81, 0xb5, 0xc8, 0x82, 0xa5, 0x59, 0x0c, 0x69, 0xb1, 0xcc, 0x66, 0x98, 0x23, 0x5e, 0x87, 0x8a, 0x50, 0x35, 0xb0, 0xbf, 0xa2, 0x8a, 0xd5, 0x45, 0x96, 0xa8, 0x91, 0x64, 0xbd, 0x5e, 0xbf, 0xbe, 0xba, 0xd6, 0xca, 0x5f, 0x22, 0xd0, 0x2b, 0x3c, 0x32, 0x45, 0xa4, 0x54, 0xda, 0x4a, 0xb3, 0x14, 0x91, 0x84, 0xf2, 0x62, 0x13, 0xab, 0x54, 0x10, 0xb3, 0x0f, 0xac, 0xca, 0x7c, 0x46, 0xad, 0x7d, 0x54, 0x75, 0x0b, 0x35, 0x64, 0x26, 0x15, 0x8c, 0x31, 0x78, 0x60, 0xf0, 0x7a, 0xe5, 0xbe, 0xd3, 0xac, 0x0e, 0xa5, 0xa9, 0x03, 0x1b, 0xd1, 0x0f, 0xb5, 0x83, 0xe3, 0x8c, 0x10, 0xca, 0x78, 0xac, 0xab, 0x63, 0xda, 0x9a, 0x54, 0x9b, 0x8b, 0xd0, 0xb9, 0x92, 0xca, 0x47, 0xf9, 0xf7, 0x2d, 0xb5, 0x7c, 0xda, 0xd8, 0x85, 0xc0, 0xa1, 0x60, 0x57, 0xba, 0x9c, 0x1d, 0x52, 0xbf, 0x99, 0x64, 0x39, 0xd4, 0xbf, 0x56, 0x26, 0xd5, 0x72, 0xe1, 0xcb, 0x79, 0x5b, 0x7d, 0x6a, 0x46, 0xd4, 0xa0, 0xa8, 0x33, 0x45, 0x44, 0x55, 0xb0, 0xdb, 0xef, 0xa2, 0xf3, 0x37, 0x6f, 0x23, 0x69, 0x02, 0x9e, 0x74, 0x6f, 0x43, 0x02, 0x50, 0xf1, 0x82, 0x0d, 0x82, 0xa3, 0x0e, 0xe8, 0x17, 0x5b, 0x1d, 0x06, 0x5a, 0x90, 0xb2, 0x2d, 0x8e, 0xb2, 0x9b, 0xb7, 0x61, 0x5f, 0x9c, 0xf9, 0xfa, 0x77, 0x46, 0xeb, 0x51, 0xa4, 0x64, 0x11, 0x4f, 0x67, 0x1d, 0x7b, 0xd1, 0xd3, 0xfd, 0xdd, 0xf8, 0xac, 0x75, 0xe9, 0x2b, 0x66, 0xd5, 0xd9, 0x7e, 0xb5, 0xd3, 0xdf, 0x7e, 0xf1, 0x79, 0x7f, 0x9b, 0x3a, 0xd9, 0x3a, 0x73, 0xb3, 0x1d, 0x57, 0x9d, 0x81, 0x02, 0xfd, 0x7c, 0xa3, 0x76, 0x44, 0x5f, 0xfe, 0xc2, 0xfc, 0xb1, 0x8f, 0xcf, 0xf5, 0xb9, 0xab, 0x8e, 0xf7, 0x8d, 0x39, 0xe8, 0x34, 0x69, 0xe6, 0xc5, 0x41, 0x7a, 0x36, 0xab, 0x88, 0x69, 0x71, 0x91, 0x22, 0x19, 0x29, 0xca, 0xa6, 0xb3, 0x4f, 0xda, 0x10, 0xd0, 0x34, 0x38, 0xa1, 0xdb, 0x19, 0x9e, 0x91, 0xb2, 0xf4, 0x91, 0xa8, 0x91, 0x96, 0xab, 0x9b, 0xef, 0x7b, 0x6c, 0xf3, 0x17, 0x5b, 0x7d, 0x08, 0xe1, 0x62, 0x2e, 0x5d, 0x13, 0xa6, 0x8b, 0x20, 0x9e, 0x9a, 0x28, 0x41, 0x02, 0xfa, 0xc2, 0x0f, 0xaa, 0xc6, 0x6d, 0x02, 0xe2, 0xae, 0x90, 0x21, 0xf0, 0x23, 0x5b, 0x89, 0xe3, 0x56, 0x12, 0xd3, 0xc8, 0xa6, 0x4e, 0xb4, 0x01, 0xe7, 0x64, 0x60, 0x96, 0x98, 0x49, 0xeb, 0x70, 0xf8, 0xce, 0x9f, 0xff, 0x6c, 0x39, 0x12, 0xb7, 0x55, 0xa7, 0x5e, 0x1e, 0xfb, 0x04, 0xd5, 0xca, 0xb1, 0x6a, 0xee, 0x0a, 0xd0, 0x39, 0xf8, 0x91, 0x9c, 0xc3, 0x3f, 0xf7, 0x7e, 0x84, 0x7f, 0xfe, 0xdc, 0xd1, 0x4b, 0xcd, 0xb0, 0x5c, 0xb6, 0x60, 0xc4, 0xc2, 0x1f, 0xd2, 0x01, 0x75, 0xa3, 0x7a, 0x5b, 0x5a, 0xd2, 0x0c, 0xae, 0x8f, 0x2f, 0xf9, 0x32, 0x16, 0x1c, 0xf6, 0x26, 0x6a, 0x46, 0x3e, 0x44, 0x6a, 0x3d, 0xb2, 0x70, 0xea, 0xa8, 0xc1, 0x74, 0x62, 0xf6, 0xd2, 0x79, 0xa5, 0x6b, 0x93, 0x1a, 0xee, 0x99, 0x03, 0xc4, 0xa0, 0xdf, 0x4e, 0xd1, 0xbf, 0xc2, 0x25, 0xe9, 0xc0, 0x77, 0x55, 0x91, 0x96, 0x8e, 0xc1, 0x08, 0xec, 0x05, 0x6c, 0xc0, 0x5c, 0x87, 0x7b, 0x98, 0x52, 0x37, 0x12, 0xf8, 0x5b, 0xae, 0x8d, 0xa8, 0x04, 0x4b, 0x11, 0xb6, 0x01, 0x36, 0x4a, 0xb9, 0x6d, 0x91, 0x96, 0xb7, 0xb8, 0x3e, 0x29, 0xf3, 0x71, 0x72, 0x85, 0x70, 0x3e, 0x9f, 0x19, 0xad, 0xef, 0x51, 0x21, 0x6b, 0x4c, 0xe1, 0x9e, 0xb3, 0xb3, 0x56, 0x3a, 0xe8, 0xb1, 0x2b, 0x10, 0x65, 0x10, 0x76, 0x4b, 0x1e, 0x2b, 0x92, 0x67, 0xa0, 0xc1, 0x49, 0x2a, 0xcc, 0x25, 0xe8, 0xb9, 0x86, 0x34, 0x1c, 0x68, 0x26, 0x2c, 0x69, 0x47, 0x62, 0x41, 0xe9, 0xb7, 0xd1, 0x94, 0x5a, 0xd8, 0xa1, 0x06, 0x1d, 0xc5, 0x0c, 0x0f, 0x65, 0xf0, 0xcd, 0xa8, 0x67, 0x16, 0x96, 0x4f, 0x14, 0x30, 0x8d, 0x71, 0x57, 0x6b, 0xf3, 0xf9, 0x66, 0x60, 0x90, 0x57, 0x75, 0xba, 0xcf, 0x82, 0xb6, 0x02, 0x5d, 0x34, 0xab, 0x8c, 0xce, 0xd8, 0xa7, 0x8e, 0x9b, 0x4f, 0xbb, 0x8e, 0x7f, 0x02, 0xb7, 0xd6, 0x8e, 0x6a, 0xf7, 0x19, 0xb5, 0x47, 0x8e, 0x7c, 0x83, 0x86, 0xa6, 0x3f, 0x0f, 0x41, 0xf4, 0x3a, 0x42, 0x75, 0x67, 0xcb, 0x77, 0xa5, 0x60, 0xd3, 0x67, 0xda, 0xe4, 0x5e, 0xba, 0x78, 0x7a, 0x03, 0x15, 0xe6, 0x0b, 0x8f, 0xb4, 0xc6, 0x59, 0x8c, 0x84, 0x29, 0x97, 0xd3, 0x29, 0x61, 0x62, 0xf8, 0x99, 0x79, 0x54, 0xb1, 0x28, 0x85, 0x03, 0xd2, 0xcf, 0x00, 0x18, 0x39, 0xcd, 0x5c, 0x77, 0xc3, 0x96, 0x45, 0x0a, 0xc3, 0x29, 0x6d, 0x67, 0x92, 0xd6, 0xd2, 0x59, 0xec, 0x65, 0x27, 0xd7, 0xdb, 0x6a, 0x32, 0x45, 0xd2, 0xd3, 0x89, 0x36, 0xf9, 0x20, 0xa6, 0x06, 0x79, 0x19, 0xb0, 0xcc, 0x11, 0xc9, 0xd7, 0xd0, 0xce, 0xfb, 0x56, 0xba, 0x1b, 0xd1, 0xc3, 0x86, 0xfd, 0x71, 0x18, 0x8e, 0x27, 0x9d, 0x08, 0x88, 0x1f, 0xa3, 0xb0, 0x15, 0x06, 0xd5, 0x8a, 0xf5, 0x4a, 0xe1, 0x47, 0x4d, 0xa9, 0x39, 0xa1, 0xed, 0x58, 0xe5, 0x17, 0xb0, 0xac, 0xd0, 0xd5, 0x96, 0xf6, 0xfa, 0x3b, 0xde, 0xc1, 0x96, 0xb3, 0xde, 0x68, 0x34, 0xea, 0x91, 0x1e, 0x70, 0xc8, 0xca, 0xc9, 0xa6, 0x28, 0x07, 0x2d, 0x3e, 0x83, 0x41, 0x22, 0xfb, 0x7d, 0x7c, 0x7c, 0x2c, 0x7a, 0xcc, 0xf5, 0x4d, 0x43, 0xa3, 0x30, 0x80, 0x53, 0xa2, 0x51, 0x85, 0xda, 0x1c, 0x96, 0x37, 0xcb, 0x6a, 0x4c, 0xdd, 0x90, 0x91, 0x65, 0x28, 0xeb, 0x35, 0x35, 0xb2, 0x0d, 0x54, 0x50, 0x6c, 0x4a, 0xdf, 0xb5, 0x99, 0x89, 0x30, 0xb6, 0x77, 0x34, 0x0b, 0x6e, 0x80, 0x42, 0x2f, 0xca, 0xd8, 0xcd, 0x16, 0xab, 0x3c, 0x55, 0x17, 0xba, 0x4b, 0x27, 0x58, 0x86, 0x32, 0xd9, 0x74, 0x14, 0xfa, 0x6c, 0x9c, 0x4a, 0x06, 0x58, 0x2c, 0xdf, 0x6a, 0x8e, 0xfd, 0xc4, 0x79, 0xc8, 0x56, 0xd7, 0x8f, 0xe4, 0x45, 0xeb, 0x91, 0x04, 0x37, 0x1f, 0xad, 0x2a, 0xdc, 0xf6, 0xf5, 0x63, 0x42, 0x14, 0x3d, 0x96, 0x0b, 0x71, 0x7c, 0x83, 0xf9, 0x5b, 0x33, 0x3c, 0x1c, 0x98, 0x72, 0xc9, 0x4c, 0x40, 0xe4, 0xc7, 0x60, 0x70, 0xb6, 0x79, 0x7d, 0x36, 0xf0, 0x32, 0xde, 0x1f, 0xd1, 0x65, 0xcc, 0x4d, 0xb4, 0x6b, 0x2e, 0x4f, 0xde, 0x22, 0x02, 0x87, 0xce, 0x27, 0x75, 0x0a, 0xe7, 0xaf, 0x04, 0xf1, 0x4e, 0x96, 0x99, 0x16, 0xc3, 0x18, 0xd9, 0x9d, 0x25, 0x19, 0x15, 0x91, 0xa3, 0x08, 0xa7, 0x1b, 0x40, 0x09, 0xb1, 0x65, 0x74, 0x7e, 0x74, 0x8d, 0xe5, 0x2d, 0x95, 0xa4, 0x78, 0xa0, 0x0b, 0xc8, 0xf7, 0x8c, 0xdf, 0x1b, 0x5c, 0x02, 0x8a, 0xda, 0xc4, 0x23, 0xdb, 0x0c, 0x45, 0x95, 0x75, 0x3e, 0xbe, 0x52, 0x09, 0x6f, 0xd5, 0xf6, 0xc3, 0x96, 0x8a, 0x74, 0x68, 0xd2, 0x7c, 0xf3, 0x34, 0xb6, 0x83, 0xa7, 0xc1, 0x1b, 0x10, 0xbe, 0x0e, 0x57, 0xc2, 0xca, 0x75, 0xa3, 0xa5, 0x8a, 0x5f, 0xa7, 0x3f, 0xcb, 0xa7, 0x29, 0x7a, 0x02, 0xe9, 0xbc, 0xdc, 0xc0, 0x9b, 0xe7, 0x26, 0xe5, 0xdd, 0x29, 0xb9, 0x14, 0xa7, 0x0e, 0x60, 0xcb, 0x57, 0x04, 0xe5, 0x84, 0xd9, 0x53, 0xd3, 0x87, 0x49, 0x4b, 0x20, 0xfd, 0x0a, 0x43, 0xc2, 0xce, 0x4b, 0x47, 0x60, 0x22, 0x8c, 0x30, 0xfb, 0x83, 0xca, 0x01, 0xcb, 0x7a, 0x8a, 0x6d, 0x5a, 0x83, 0xe5, 0x53, 0x0f, 0x69, 0xe9, 0xc7, 0x2a, 0x48, 0x53, 0x90, 0x15, 0xae, 0xf4, 0xc3, 0xbf, 0xa8, 0x09, 0x8f, 0x6f, 0xd0, 0x22, 0x9b, 0x7a, 0x42, 0xd7, 0xa0, 0x50, 0x04, 0x90, 0xff, 0x48, 0x45, 0xa5, 0xf2, 0x7e, 0xe9, 0x6d, 0xec, 0x42, 0xba, 0xaf, 0x42, 0xef, 0xee, 0x36, 0xdb, 0x99, 0x31, 0x2a, 0x61, 0x1d, 0xac, 0xba, 0x06, 0x0d, 0xa4, 0x89, 0xbe, 0x8d, 0xe1, 0xbe, 0x39, 0xb1, 0xed, 0x13, 0x1a, 0xf8, 0x41, 0xb5, 0xd6, 0x0a, 0x1c, 0x87, 0xc4, 0x18, 0xd4, 0x3d, 0x76, 0x61, 0xbd, 0x6f, 0x31, 0x72, 0x58, 0x89, 0xbd, 0xb6, 0x68, 0xec, 0x7c, 0x3f, 0x58, 0x0b, 0x4c, 0x4c, 0x96, 0x2a, 0x42, 0xcf, 0x68, 0x80, 0xfe, 0xdf, 0xd7, 0x6c, 0x77, 0xa0, 0x7e, 0xc0, 0x0f, 0xa1, 0xd2, 0xc1, 0x07, 0x10, 0xb6, 0xa1, 0xa7, 0xae, 0x9d, 0xb0, 0xfd, 0xae, 0xdf, 0xde, 0x83, 0x97, 0xb7, 0x7a, 0x3e, 0xef, 0x4e, 0x8e, 0xde, 0x18, 0x18, 0x81, 0xdf, 0x03, 0x59, 0xd8, 0x7a, 0x35, 0x87, 0x09, 0x77, 0x81, 0x58, 0xaa, 0xa3, 0x84, 0x4e, 0x47, 0x09, 0x95, 0x68, 0x05, 0xd4, 0xb5, 0x32, 0xe1, 0x1b, 0xd2, 0xda, 0x0c, 0xa1, 0xd5, 0x33, 0xe2, 0x66, 0x1f, 0x88, 0xc7, 0x1a, 0x35, 0x65, 0xae, 0xad, 0x72, 0x08, 0x79, 0x4a, 0x84, 0x3c, 0xcb, 0x87, 0xf9, 0x64, 0xb2, 0x42, 0xba, 0x33, 0x3c, 0x24, 0xd5, 0x40, 0x31, 0xc1, 0x74, 0x70, 0x1b, 0xf1, 0xbd, 0x21, 0xce, 0x1e, 0x8e, 0x14, 0xae, 0x5a, 0x47, 0x0a, 0x13, 0x48, 0x25, 0xf7, 0xee, 0x46, 0xbd, 0x30, 0x5d, 0x6d, 0x06, 0x35, 0xf1, 0xa8, 0x30, 0x9f, 0xdd, 0x31, 0x9a, 0x26, 0x64, 0x80, 0xfd, 0xcb, 0xe8, 0x1f, 0xff, 0xfc, 0xf1, 0xe7, 0x40, 0x77, 0x03, 0x74, 0xf8, 0xdd, 0x70, 0x65, 0x21, 0x3c, 0x3d, 0x17, 0xd4, 0x16, 0x83, 0x13, 0xcf, 0x89, 0x26, 0x1c, 0xcf, 0xa8, 0xca, 0x64, 0x36, 0xe9, 0x3b, 0x39, 0x95, 0xbe, 0x58, 0x44, 0x13, 0x4a, 0x3f, 0x48, 0xdd, 0xea, 0xb0, 0x14, 0x9c, 0xcb, 0x77, 0x11, 0xb9, 0x9b, 0x5a, 0x04, 0xd9, 0x94, 0x69, 0x83, 0xec, 0xcb, 0x27, 0xe1, 0xe1, 0xc7, 0xd8, 0x36, 0x3e, 0xcd, 0x60, 0xfa, 0x87, 0xab, 0x53, 0xe3, 0xea, 0x74, 0xb9, 0xf2, 0x0d, 0x50, 0xea, 0x63, 0x2f, 0x79, 0x4c, 0x86, 0xc0, 0x25, 0x4a, 0x05, 0x7e, 0xe8, 0xcd, 0xcb, 0xe8, 0x70, 0x0e, 0x34, 0x9e, 0xb6, 0x40, 0x76, 0xbc, 0xc3, 0xd7, 0x22, 0x7d, 0xcd, 0xe0, 0x97, 0x4e, 0xf3, 0x02, 0x76, 0x68, 0x2e, 0xd5, 0xb8, 0x52, 0x92, 0x5c, 0x77, 0x66, 0x44, 0x54, 0x60, 0xe2, 0xb9, 0x03, 0xee, 0xf6, 0x44, 0xe3, 0x26, 0x30, 0x36, 0x07, 0x28, 0x8c, 0x94, 0xf5, 0x25, 0x28, 0x8f, 0x30, 0x7b, 0x30, 0xb2, 0xd1, 0x5a, 0x2f, 0xbb, 0x42, 0x52, 0x85, 0xe2, 0xc8, 0x05, 0x61, 0x04, 0x4c, 0x19, 0x22, 0x5b, 0x58, 0xc0, 0x74, 0xdc, 0x15, 0x99, 0x2e, 0xa6, 0x2e, 0xfa, 0x9b, 0xf4, 0x2e, 0xf6, 0xf7, 0x55, 0x17, 0xc0, 0x6e, 0xd0, 0xc8, 0x66, 0xaf, 0x62, 0xc1, 0x46, 0xaa, 0xfd, 0x85, 0x5d, 0x4f, 0xac, 0x31, 0x95, 0xbd, 0x4b, 0x39, 0x8f, 0xc7, 0xa6, 0x90, 0xde, 0x85, 0x0e, 0xa4, 0x32, 0xc4, 0x18, 0xeb, 0x22, 0x93, 0x59, 0x5f, 0xba, 0x6a, 0x53, 0x5a, 0x95, 0x1d, 0x93, 0x18, 0x6e, 0x13, 0xd7, 0xa5, 0xc4, 0x14, 0x01, 0xae, 0x86, 0x15, 0x87, 0x3e, 0x95, 0x95, 0x8b, 0xe7, 0x21, 0x18, 0xeb, 0xbd, 0x16, 0xbc, 0x9c, 0x29, 0x99, 0xfd, 0x62, 0x3f, 0x10, 0x58, 0x32, 0xf5, 0x0e, 0x63, 0x18, 0x12, 0x7c, 0x9b, 0xd2, 0x2b, 0x90, 0x87, 0xf0, 0x81, 0x9f, 0xc8, 0x81, 0x37, 0x86, 0xc3, 0x58, 0xcb, 0x8b, 0xfd, 0xfd, 0x7d, 0x8e, 0xb5, 0x74, 0x4e, 0xe9, 0xc3, 0x57, 0x27, 0xc7, 0x17, 0xef, 0xdf, 0x9f, 0x9c, 0xbf, 0x39, 0x79, 0xa3, 0x19, 0x1f, 0xce, 0x4a, 0x2c, 0x75, 0xf8, 0x2b, 0xc2, 0x2c, 0x41, 0xd8, 0xe7, 0xed, 0xfd, 0xad, 0xde, 0xce, 0xfe, 0x56, 0x04, 0xb4, 0x18, 0x9b, 0x3a, 0xb5, 0x78, 0x16, 0xa3, 0x7d, 0x7b, 0xb3, 0x04, 0x55, 0x0d, 0xa1, 0x3d, 0x2b, 0xc4, 0xdc, 0x20, 0xd7, 0x2b, 0x7a, 0x7b, 0x92, 0x0a, 0xed, 0xe8, 0x40, 0x66, 0x40, 0xbf, 0x63, 0x40, 0xda, 0x6c, 0xc0, 0x52, 0x74, 0x1f, 0x22, 0xd0, 0x9d, 0x2d, 0xfc, 0x50, 0x3f, 0x7a, 0x0b, 0xda, 0xc7, 0x24, 0x7f, 0x60, 0x5a, 0x3c, 0xbe, 0x01, 0xa5, 0x34, 0xf1, 0x43, 0x95, 0xf5, 0xf7, 0xf1, 0xf5, 0x5d, 0x7e, 0xfd, 0x77, 0x8c, 0xd1, 0xef, 0xbf, 0xaa, 0x1b, 0x96, 0x70, 0x91, 0x09, 0x15, 0x5e, 0x4b, 0x12, 0x5b, 0xf0, 0xfd, 0x07, 0x6c, 0x8e, 0xbf, 0x3b, 0xba, 0xc4, 0xa7, 0xc1, 0x2c, 0xbf, 0xf8, 0xe1, 0x2f, 0xb6, 0xcc, 0xf3, 0x6e, 0x5b, 0xb3, 0x19, 0xa5, 0x92, 0x95, 0x1a, 0xf1, 0x65, 0x7e, 0xd0, 0xdb, 0x2a, 0xb3, 0xc6, 0x20, 0x54, 0x21, 0x43, 0x2b, 0xc4, 0x0c, 0x54, 0xd8, 0x3a, 0xee, 0x91, 0x25, 0x87, 0x56, 0x94, 0x72, 0xc5, 0x43, 0x75, 0xfd, 0xc0, 0xca, 0x71, 0x1a, 0x0f, 0x29, 0xf7, 0x7d, 0x48, 0xb3, 0x31, 0x37, 0xa6, 0xad, 0x39, 0x66, 0xab, 0x62, 0x99, 0x84, 0xbc, 0xa6, 0x2b, 0x31, 0x76, 0x50, 0xa9, 0x2d, 0xd2, 0x79, 0x5c, 0xa4, 0xdc, 0x7e, 0x1e, 0x09, 0xfc, 0x9e, 0x7b, 0x65, 0x72, 0xaa, 0x14, 0xc5, 0xbe, 0x2c, 0x98, 0x6c, 0xee, 0xa5, 0x9d, 0x9a, 0x5e, 0x0e, 0x48, 0xc4, 0x0c, 0x6b, 0x24, 0x31, 0x4a, 0xde, 0xac, 0x95, 0x30, 0x74, 0x75, 0xfb, 0xdf, 0x28, 0x14, 0x6d, 0xa0, 0x73, 0xd1, 0xdb, 0xd3, 0xb3, 0x93, 0x8d, 0xe8, 0x6d, 0x52, 0x49, 0x89, 0x93, 0x66, 0x18, 0xa3, 0xc8, 0xff, 0x03, 0x29, 0x58, 0x06, 0x94, 0x50, 0x6a, 0x84, 0x83, 0xb9, 0x60, 0xe2, 0x83, 0x23, 0x65, 0x43, 0xeb, 0xa5, 0xf8, 0x70, 0x68, 0x89, 0x18, 0x8f, 0xd3, 0xdc, 0x32, 0x8d, 0x6f, 0xca, 0xc9, 0x07, 0xf2, 0x6e, 0x15, 0xe7, 0xa1, 0xef, 0x20, 0x9e, 0xe5, 0x6e, 0x0a, 0x01, 0x4e, 0x5a, 0x72, 0x9e, 0x35, 0x5e, 0x9c, 0x96, 0x8b, 0x19, 0x72, 0x83, 0x20, 0xca, 0xcb, 0x2c, 0xb1, 0x95, 0x7d, 0x44, 0xf9, 0xdc, 0x29, 0x5e, 0x8c, 0x1e, 0x62, 0xa8, 0xb8, 0x5e, 0x67, 0xe3, 0xde, 0xe9, 0xc6, 0x61, 0xda, 0x09, 0xff, 0xb9, 0xf9, 0x55, 0x10, 0x7c, 0x4c, 0x1b, 0x59, 0x50, 0xcf, 0x5c, 0x79, 0x83, 0x28, 0x8a, 0x7b, 0xa8, 0x8b, 0x90, 0x57, 0xb5, 0xb3, 0x46, 0x09, 0x01, 0xf5, 0x95, 0x7c, 0x77, 0x6a, 0xee, 0xfe, 0x45, 0xfa, 0x34, 0xa9, 0xfe, 0x80, 0x25, 0xe0, 0x56, 0xba, 0x70, 0x97, 0x5e, 0x93, 0x65, 0x1c, 0x85, 0x5a, 0xa2, 0x31, 0x57, 0x96, 0x96, 0xbc, 0xac, 0x4d, 0x61, 0xb6, 0x7e, 0xac, 0xe9, 0xfa, 0x3a, 0x5f, 0x7c, 0xec, 0x46, 0xc0, 0xab, 0xc9, 0x97, 0xc2, 0x55, 0x64, 0x65, 0xd0, 0xe5, 0x2f, 0xe5, 0x6d, 0x12, 0xda, 0xa3, 0x96, 0xaa, 0xec, 0x94, 0x61, 0x1d, 0x7a, 0x89, 0x0a, 0x1d, 0x57, 0x76, 0x51, 0x1f, 0x82, 0x82, 0xf1, 0x32, 0x03, 0xda, 0x92, 0x7c, 0xdd, 0x65, 0x41, 0x4d, 0x9d, 0xdd, 0xfd, 0x4c, 0xdd, 0x12, 0xf5, 0xd5, 0x45, 0xd8, 0x3b, 0xd2, 0x29, 0xb1, 0xef, 0x07, 0x56, 0xbd, 0x8f, 0x6e, 0x53, 0x2a, 0x44, 0x5c, 0x92, 0x3a, 0x17, 0x67, 0x5a, 0x6f, 0xc5, 0xd3, 0x34, 0x38, 0xef, 0x40, 0x6e, 0x7d, 0x2a, 0x67, 0x08, 0x6b, 0x9f, 0x0c, 0x59, 0x86, 0x4e, 0x03, 0x44, 0x61, 0xd5, 0xf9, 0xcc, 0xa8, 0xa2, 0xc1, 0xdc, 0x16, 0x55, 0xd4, 0xb0, 0x1e, 0x92, 0x74, 0xc5, 0x00, 0x2e, 0x74, 0x42, 0x0d, 0x97, 0xc9, 0xe5, 0x77, 0x2f, 0x10, 0x63, 0x6b, 0x45, 0xc2, 0xd0, 0xf4, 0x7d, 0xb0, 0x44, 0xe7, 0x58, 0x12, 0xa0, 0xf8, 0xcd, 0xb8, 0x64, 0xd9, 0x1e, 0xe0, 0x6d, 0xd3, 0xf4, 0x2e, 0x94, 0x65, 0x81, 0xf9, 0x11, 0x32, 0x31, 0xca, 0xd2, 0xb0, 0xed, 0x62, 0x35, 0xed, 0xd8, 0x84, 0xb4, 0xd9, 0x2f, 0x8d, 0x38, 0x80, 0xb2, 0xb3, 0xde, 0x0d, 0x9e, 0xa1, 0xc6, 0x8a, 0x80, 0x5e, 0x19, 0x37, 0xe8, 0x7d, 0x07, 0x9a, 0xcf, 0x41, 0xc7, 0x20, 0xaa, 0x93, 0x5f, 0x95, 0xb8, 0x63, 0x8d, 0x72, 0xa4, 0x65, 0x74, 0x2f, 0xd8, 0x77, 0x4c, 0x34, 0xf7, 0x4a, 0x19, 0x97, 0x29, 0xb8, 0xf1, 0xd3, 0x9a, 0x4d, 0x01, 0x0c, 0x57, 0x8c, 0xfa, 0x88, 0xf1, 0x38, 0xa5, 0x1f, 0x7a, 0xc7, 0xf4, 0xf1, 0xde, 0x3b, 0x1a, 0xee, 0x8b, 0x8e, 0x71, 0xf8, 0x36, 0x7f, 0x75, 0xe0, 0x37, 0x0a, 0xb6, 0x7e, 0x43, 0x36, 0x3c, 0x96, 0x5a, 0x95, 0x41, 0x89, 0x24, 0x32, 0x41, 0xee, 0xc1, 0x05, 0x57, 0x64, 0x53, 0x0f, 0x9c, 0xa2, 0x29, 0xa5, 0xdf, 0x65, 0xd3, 0xa4, 0x1c, 0x80, 0x14, 0x59, 0x10, 0x98, 0xce, 0xb8, 0x97, 0x4f, 0x7a, 0x94, 0x21, 0x0d, 0xcc, 0xff, 0x16, 0x93, 0x91, 0x9c, 0x5b, 0x47, 0x00, 0x21, 0x84, 0xbd, 0x3d, 0x1e, 0x87, 0x54, 0x73, 0x2e, 0x64, 0x44, 0xad, 0x43, 0x08, 0x5f, 0x0b, 0x2d, 0xf8, 0x20, 0x0f, 0xc4, 0x2b, 0x4f, 0xaf, 0x9b, 0x2e, 0x54, 0x88, 0xcc, 0x25, 0x05, 0x11, 0x9e, 0x3f, 0x8d, 0xca, 0x23, 0xba, 0xac, 0xbd, 0xd3, 0xaa, 0xc9, 0x86, 0x9b, 0xb3, 0x2b, 0x97, 0xfc, 0xcf, 0xcb, 0x05, 0xa9, 0xac, 0x88, 0xd8, 0xe9, 0x79, 0x5f, 0xb4, 0x48, 0x84, 0xb0, 0x38, 0x41, 0xf8, 0xef, 0xf7, 0xb7, 0xba, 0x5e, 0xa0, 0xbe, 0x22, 0x63, 0x3f, 0xb3, 0x59, 0x42, 0xf0, 0x30, 0xf1, 0xc8, 0x5e, 0xa8, 0xba, 0xb6, 0xac, 0x1e, 0x91, 0x5f, 0x9b, 0x62, 0x5a, 0x4a, 0x2d, 0xb6, 0x75, 0x0f, 0x36, 0xa7, 0x87, 0xb6, 0x50, 0xd8, 0x26, 0x57, 0xd1, 0x86, 0x20, 0x4e, 0x25, 0x63, 0xeb, 0xab, 0x5e, 0xb3, 0x4d, 0xa6, 0xe9, 0x76, 0xe6, 0x56, 0x6f, 0x38, 0x7d, 0xcb, 0x5a, 0x3d, 0x4d, 0x84, 0x26, 0x7a, 0xa4, 0xad, 0x6f, 0x7a, 0xb0, 0xa9, 0xd2, 0xd1, 0xb5, 0x97, 0xe0, 0x0f, 0x19, 0xb0, 0x43, 0x81, 0x43, 0xcb, 0xf6, 0x3d, 0x63, 0x90, 0xdd, 0x97, 0xb8, 0x63, 0xa6, 0xb5, 0x80, 0xf6, 0xd0, 0xb1, 0xf2, 0x81, 0xc8, 0xd6, 0xb9, 0x4b, 0xcd, 0x3d, 0x43, 0xae, 0x82, 0x9c, 0x20, 0xd3, 0x9c, 0x6f, 0x6a, 0xc8, 0xfe, 0xf0, 0xd8, 0x9a, 0x5a, 0xdc, 0x92, 0xf3, 0x4b, 0xd7, 0xe6, 0x2d, 0x2a, 0xf6, 0xbd, 0x73, 0x38, 0x86, 0x83, 0xe8, 0x3f, 0xf2, 0x84, 0x6b, 0x56, 0x9f, 0x28, 0x59, 0xfd, 0xfe, 0xe8, 0xea, 0xfc, 0xf4, 0xfc, 0x9b, 0x03, 0xc3, 0xe3, 0x90, 0xdf, 0x35, 0x7b, 0x5a, 0x18, 0xde, 0x4d, 0xbf, 0x65, 0xe4, 0x56, 0xf4, 0xfe, 0xb4, 0x61, 0x6c, 0x63, 0x2c, 0x93, 0xd8, 0x33, 0x3b, 0x2f, 0x8b, 0x84, 0xe3, 0x22, 0x6c, 0x8b, 0x6a, 0xe5, 0x84, 0x94, 0x6b, 0x92, 0xa8, 0xa4, 0xc6, 0x6d, 0x01, 0xc0, 0x86, 0xde, 0x19, 0x9e, 0xc9, 0x2c, 0xaf, 0xf5, 0x88, 0x42, 0xa2, 0x9c, 0xd1, 0xf1, 0xe7, 0x2e, 0x05, 0xb0, 0xc5, 0xac, 0x1d, 0xd5, 0xd9, 0xe9, 0x13, 0x08, 0xde, 0x32, 0x46, 0xb6, 0x7a, 0x5e, 0x4d, 0x7f, 0x1c, 0x69, 0x72, 0x51, 0xd2, 0x91, 0x95, 0x29, 0x39, 0x1b, 0xcc, 0x96, 0x68, 0x8e, 0x57, 0xc0, 0x0f, 0x22, 0xf0, 0xd2, 0xf1, 0x92, 0xef, 0x0b, 0xa3, 0x93, 0xc9, 0x4f, 0x6d, 0x5d, 0x86, 0xd9, 0x81, 0x67, 0xa7, 0x39, 0xdb, 0x3c, 0x67, 0xd6, 0xe7, 0xd9, 0x40, 0x74, 0x58, 0x16, 0xfc, 0x89, 0xa2, 0x24, 0x88, 0x43, 0x32, 0x4b, 0x6c, 0x55, 0x92, 0xd1, 0x75, 0x6e, 0x58, 0xd7, 0x99, 0x2d, 0x3c, 0xb0, 0x3d, 0x4c, 0x33, 0x8f, 0xf0, 0x37, 0xea, 0xd4, 0xc1, 0xe0, 0x15, 0x49, 0x60, 0x35, 0x4b, 0x6a, 0xe0, 0x76, 0xa6, 0x35, 0x24, 0x33, 0x75, 0x5f, 0x9e, 0x22, 0xde, 0x53, 0xc2, 0x78, 0x63, 0x6e, 0x05, 0x0c, 0x7c, 0x1d, 0xf6, 0x78, 0xb1, 0x1c, 0xce, 0xc7, 0xfb, 0xd1, 0x21, 0xfc, 0xc7, 0x53, 0xb2, 0x28, 0x67, 0x74, 0x70, 0x0c, 0x8a, 0x16, 0x26, 0xb8, 0xa0, 0xbc, 0x60, 0xc8, 0x1b, 0xa7, 0x8b, 0xc4, 0xee, 0x0e, 0xcc, 0xf4, 0x21, 0x56, 0x68, 0x4b, 0xd0, 0x08, 0xa7, 0x69, 0xc5, 0x79, 0x7a, 0x2d, 0xb8, 0x41, 0x4e, 0x6a, 0x03, 0x9d, 0xf9, 0xf6, 0xce, 0xe7, 0x11, 0x16, 0x1f, 0xbc, 0x7f, 0xb3, 0x1f, 0x8d, 0x6e, 0x92, 0xd1, 0x6d, 0xb9, 0x9c, 0x2b, 0x3b, 0xc6, 0x3d, 0x05, 0xf3, 0x00, 0xe7, 0xe9, 0x21, 0x3e, 0xc0, 0xc4, 0x67, 0xe9, 0x08, 0x4b, 0xff, 0xba, 0xb5, 0xe8, 0xd4, 0x44, 0xa3, 0x53, 0x8e, 0x1d, 0x6a, 0xc4, 0x06, 0xa5, 0x0b, 0x70, 0x4e, 0x4d, 0x20, 0x78, 0x01, 0x7b, 0x00, 0x1f, 0x2f, 0xb9, 0x9b, 0xf5, 0x4a, 0x97, 0xed, 0xcb, 0xba, 0xd7, 0x1b, 0x2f, 0xf6, 0x56, 0xff, 0x55, 0x4b, 0x7f, 0x8e, 0x5a, 0x6b, 0x0e, 0xac, 0x55, 0x32, 0xd5, 0x76, 0x64, 0x0f, 0xa0, 0x96, 0x8f, 0x93, 0x44, 0x40, 0x28, 0x0d, 0xe3, 0x79, 0x1f, 0xc7, 0x27, 0x37, 0xf1, 0x09, 0xe9, 0x2d, 0x47, 0x59, 0x6c, 0x09, 0x61, 0x52, 0x30, 0x69, 0x51, 0x9a, 0x90, 0x89, 0x02, 0x1a, 0x84, 0x33, 0x0a, 0xc1, 0xfa, 0x4a, 0x9b, 0xa9, 0xff, 0x56, 0x97, 0x8d, 0x65, 0x31, 0x52, 0x42, 0xeb, 0xa0, 0x39, 0x68, 0x2d, 0x21, 0xe1, 0xb5, 0xa1, 0x4d, 0xe1, 0x11, 0x99, 0xf9, 0x2e, 0xc7, 0xa5, 0xed, 0x71, 0x94, 0x8c, 0x46, 0x48, 0xce, 0x73, 0xec, 0x12, 0xcb, 0x16, 0x75, 0x7e, 0x9f, 0x4d, 0x0b, 0xf4, 0x8f, 0x50, 0x51, 0x58, 0x1c, 0x8a, 0x65, 0x84, 0x10, 0x4c, 0xed, 0xd8, 0x60, 0x71, 0xbd, 0x40, 0x4e, 0x6f, 0x76, 0x05, 0xf3, 0xed, 0x39, 0x88, 0xcd, 0x15, 0xcb, 0x6c, 0xb3, 0x3b, 0x47, 0xb4, 0xd5, 0x95, 0x63, 0xda, 0xee, 0x6f, 0x3d, 0xe7, 0x98, 0x90, 0x88, 0x6a, 0xa7, 0x03, 0xef, 0xb9, 0x5a, 0xb2, 0x26, 0x91, 0x03, 0xb1, 0xb7, 0x64, 0xdf, 0xc1, 0x42, 0xc5, 0x7f, 0x95, 0x8c, 0x6b, 0x43, 0xad, 0xe4, 0x39, 0x6e, 0xf3, 0x36, 0x9e, 0xee, 0xb6, 0x84, 0x61, 0xf0, 0x5f, 0x3b, 0x4d, 0xa2, 0x83, 0x5f, 0xff, 0xca, 0xd5, 0x6c, 0xff, 0x82, 0x52, 0x8d, 0xad, 0xae, 0xfd, 0xde, 0x96, 0x69, 0x89, 0xc0, 0x13, 0xb2, 0xf7, 0xa2, 0x31, 0x9c, 0x0f, 0x79, 0x4f, 0x2f, 0x60, 0xb9, 0x4b, 0x5e, 0xf4, 0x50, 0x65, 0x87, 0xc3, 0xf2, 0x54, 0xa8, 0xe0, 0xf4, 0xe1, 0x78, 0x4b, 0x54, 0x6c, 0x51, 0xa7, 0x25, 0xe2, 0xa4, 0x98, 0x11, 0xa3, 0x9a, 0x19, 0x93, 0x3e, 0x98, 0xb6, 0x4f, 0x04, 0xb2, 0xe3, 0xa8, 0xe8, 0xf4, 0x03, 0xdc, 0xd4, 0xe8, 0xc3, 0x82, 0x68, 0x10, 0x63, 0xdc, 0x95, 0x05, 0xfe, 0xa7, 0xd9, 0x45, 0x6d, 0xb3, 0xb3, 0xd8, 0x5f, 0x1a, 0x93, 0xa7, 0x62, 0xcd, 0x52, 0xbf, 0x53, 0x62, 0x15, 0x2c, 0xaa, 0xfc, 0xd2, 0x22, 0x8e, 0x01, 0xf1, 0xed, 0x24, 0x43, 0xb0, 0xbe, 0x7a, 0xb1, 0x40, 0xd5, 0x94, 0x51, 0x6a, 0xd9, 0xf4, 0x08, 0x8f, 0xce, 0xea, 0xbe, 0xf6, 0xec, 0xb3, 0xf0, 0xf4, 0x01, 0xff, 0x4a, 0x6a, 0xbb, 0x84, 0x37, 0x80, 0xfd, 0xbc, 0x00, 0x50, 0xf0, 0x38, 0x9e, 0xdd, 0x02, 0xc1, 0xc3, 0xef, 0x6a, 0x34, 0xb1, 0xe0, 0xb5, 0xf4, 0x9f, 0x47, 0xdc, 0x5b, 0xdd, 0xe0, 0xec, 0x90, 0xda, 0x5c, 0xe2, 0xaf, 0x81, 0xe1, 0xbd, 0x0a, 0x10, 0xd7, 0xaf, 0xba, 0x0b, 0x3b, 0xab, 0xc2, 0xa0, 0xfe, 0x1d, 0xdc, 0xed, 0xeb, 0xd7, 0xda, 0xf6, 0xca, 0x63, 0x67, 0xad, 0xed, 0x23, 0x9e, 0xb7, 0x5b, 0x2d, 0x7b, 0x63, 0xf6, 0xae, 0xb1, 0x5b, 0x6d, 0x47, 0xab, 0x57, 0xd5, 0xe3, 0x57, 0x2d, 0x57, 0x75, 0x37, 0xbc, 0x9b, 0x46, 0x43, 0x6d, 0xf8, 0x3c, 0xd1, 0x65, 0x56, 0xa4, 0x64, 0x12, 0xc7, 0xb3, 0x7e, 0xf4, 0xc6, 0xe6, 0xb4, 0x10, 0xf0, 0x9e, 0x67, 0xac, 0x8e, 0x97, 0x2d, 0x99, 0x1f, 0xab, 0x4f, 0x6b, 0x57, 0x92, 0x7a, 0x6c, 0xe2, 0x02, 0xc9, 0x74, 0x29, 0xca, 0xca, 0x3d, 0x40, 0x4c, 0xf1, 0xdc, 0x68, 0xf8, 0x52, 0xc2, 0x74, 0x98, 0x9a, 0x25, 0x01, 0x18, 0xda, 0xfa, 0x5d, 0x37, 0x66, 0x6e, 0xd4, 0x6b, 0x2c, 0x21, 0x08, 0x79, 0x8a, 0xe8, 0x8b, 0x9a, 0xde, 0x4e, 0x12, 0x51, 0x15, 0x4a, 0xf8, 0xc8, 0x5d, 0x1a, 0x47, 0x47, 0xb3, 0xaa, 0x37, 0xf8, 0x6e, 0xc4, 0x11, 0xb6, 0x5a, 0x78, 0xca, 0x6b, 0xf2, 0x4a, 0x5e, 0x15, 0xea, 0xcf, 0x55, 0x4a, 0xd2, 0x6a, 0x5a, 0x8c, 0x96, 0x73, 0xc2, 0x40, 0x25, 0xb2, 0x32, 0x7d, 0x22, 0xf0, 0x20, 0x2d, 0xa5, 0x71, 0xba, 0xbd, 0x0f, 0x7e, 0x18, 0xdf, 0x96, 0xba, 0x24, 0x29, 0xd2, 0xe1, 0x3a, 0x0c, 0x33, 0xe7, 0x7a, 0x7b, 0xb5, 0x80, 0x08, 0x6a, 0x58, 0x76, 0x0c, 0xd3, 0x8b, 0x28, 0x30, 0xff, 0xf9, 0xe1, 0xf4, 0xb8, 0xe6, 0xdd, 0xe7, 0x38, 0x4a, 0xb4, 0x32, 0x5a, 0xc1, 0xb0, 0xb2, 0xf2, 0xe4, 0x04, 0x75, 0x58, 0xcd, 0xc6, 0xd5, 0xc4, 0xb9, 0xda, 0xf1, 0xe6, 0x59, 0x40, 0xa4, 0x82, 0xbe, 0xf0, 0xcb, 0xee, 0xe8, 0x8e, 0xde, 0xd1, 0xdd, 0xdf, 0xfa, 0x8e, 0xee, 0xfe, 0x36, 0x77, 0x54, 0x39, 0x88, 0xf3, 0x77, 0xf7, 0xba, 0x7a, 0x66, 0x29, 0x5d, 0x5f, 0xd7, 0xe1, 0x5c, 0xcf, 0x19, 0xe8, 0x31, 0x78, 0x44, 0x4f, 0xfc, 0x16, 0x3d, 0x2e, 0x90, 0x0d, 0xd5, 0x86, 0x45, 0xe2, 0x38, 0x55, 0xf0, 0xc7, 0x6e, 0x74, 0xca, 0xc0, 0xe6, 0x94, 0x9d, 0x24, 0xaf, 0x9f, 0x71, 0x7d, 0xad, 0xf8, 0xbd, 0xd5, 0xe7, 0x1f, 0xa8, 0xc0, 0x4f, 0x47, 0x08, 0xaf, 0x66, 0x3d, 0xee, 0x68, 0x31, 0xab, 0xce, 0x58, 0x2c, 0x29, 0xa4, 0x10, 0x1d, 0x2d, 0xb0, 0x44, 0x16, 0x34, 0x8e, 0x07, 0xdb, 0x1f, 0x19, 0x49, 0xcc, 0xcf, 0x45, 0xc2, 0x4d, 0x46, 0x0f, 0xae, 0x64, 0xde, 0x37, 0xa7, 0x43, 0xa3, 0x33, 0xfc, 0xe1, 0x0c, 0x89, 0xbf, 0x60, 0xc3, 0x71, 0x07, 0x08, 0x7c, 0xea, 0xb5, 0x55, 0x18, 0x3e, 0x56, 0x81, 0x32, 0x30, 0x5c, 0x35, 0xee, 0xc2, 0x7a, 0x29, 0x59, 0xa6, 0x7b, 0xb0, 0x8f, 0x1b, 0x5d, 0x6c, 0x40, 0xbf, 0xa0, 0x1d, 0xc0, 0x3a, 0x1d, 0x63, 0x5c, 0x61, 0x99, 0x5a, 0x3a, 0x45, 0x8f, 0x55, 0xce, 0xd7, 0xd8, 0xb3, 0x68, 0xd0, 0xbb, 0x2d, 0x69, 0x8e, 0x9a, 0x43, 0x28, 0x70, 0xb3, 0xf5, 0x12, 0xd5, 0xb4, 0x4b, 0x9d, 0xe7, 0xc8, 0x37, 0xdd, 0x0c, 0x1e, 0x89, 0xc7, 0x9a, 0xed, 0x5f, 0xd5, 0x69, 0x14, 0xd6, 0x5f, 0x2c, 0x5e, 0x61, 0x5c, 0xd2, 0xa2, 0x83, 0x02, 0x7b, 0xf4, 0x64, 0xa0, 0xd7, 0x4f, 0xfd, 0xc5, 0x11, 0x79, 0x36, 0xf9, 0x0b, 0xe2, 0x80, 0x62, 0x33, 0xdf, 0x40, 0x44, 0xa3, 0x97, 0x08, 0xfd, 0xf9, 0xdc, 0x69, 0xa5, 0xeb, 0xc3, 0xea, 0x19, 0xdf, 0xb3, 0x05, 0x8a, 0xae, 0xdd, 0x58, 0x05, 0x77, 0xee, 0xf7, 0xfb, 0x01, 0x38, 0x8b, 0xbb, 0x34, 0xb9, 0xaf, 0xb9, 0xe2, 0x65, 0x66, 0x5d, 0xd3, 0x20, 0x85, 0x3d, 0x40, 0x77, 0xb8, 0x43, 0x30, 0xe4, 0x10, 0x91, 0x34, 0x5b, 0xca, 0x49, 0xec, 0x95, 0x77, 0x9f, 0x76, 0xb6, 0xf9, 0x96, 0xb7, 0xb9, 0x0c, 0xd5, 0x83, 0x32, 0x30, 0xb2, 0xed, 0xe7, 0xd0, 0x45, 0x8f, 0x48, 0xf1, 0x18, 0x51, 0xe3, 0x0e, 0xcb, 0xd3, 0xe8, 0xfa, 0x73, 0xfd, 0x41, 0x5a, 0x32, 0x2e, 0x31, 0xe3, 0x0a, 0xf9, 0xd1, 0x62, 0xfe, 0x4c, 0x9d, 0x1f, 0x08, 0x3f, 0x57, 0xe9, 0x05, 0x62, 0x6f, 0x84, 0x8e, 0x28, 0x12, 0x4e, 0xda, 0x8c, 0x80, 0x5c, 0x31, 0x81, 0xd4, 0x23, 0x39, 0x11, 0xa7, 0x73, 0x89, 0x93, 0x29, 0x63, 0xdb, 0xc9, 0x44, 0xba, 0xc0, 0x70, 0xbc, 0x57, 0xcf, 0xd5, 0xe5, 0xd3, 0xee, 0x4a, 0xc0, 0x3a, 0x92, 0xd6, 0x6c, 0xe2, 0x8b, 0xb5, 0x78, 0xcb, 0x4d, 0x1b, 0xd1, 0xd6, 0xa7, 0x5a, 0x4c, 0x2d, 0xeb, 0xd5, 0x66, 0xf0, 0x3e, 0x5a, 0x99, 0x0c, 0x5e, 0xba, 0x40, 0xd9, 0x1e, 0xd4, 0x80, 0x6d, 0x1e, 0x84, 0x03, 0x73, 0x83, 0x9f, 0xe0, 0x11, 0xb3, 0x5e, 0xc1, 0xa8, 0x17, 0xd8, 0x82, 0x6a, 0x89, 0x89, 0x27, 0x74, 0xf7, 0xa5, 0x7a, 0x5d, 0x0a, 0xd6, 0x9b, 0x60, 0x26, 0x06, 0x12, 0x0e, 0x77, 0xbf, 0x7f, 0x13, 0x3f, 0x3c, 0xf4, 0xcb, 0x64, 0x13, 0xa8, 0xb6, 0xdc, 0x2c, 0xcb, 0x19, 0x7e, 0xb4, 0x24, 0xf4, 0xb5, 0x95, 0xdd, 0x2d, 0x1f, 0x1e, 0x0d, 0x01, 0x09, 0x73, 0x1e, 0xc5, 0xf8, 0x6a, 0x8d, 0xd9, 0xda, 0xf6, 0x96, 0xdc, 0x20, 0xa6, 0x99, 0x32, 0xcc, 0xc0, 0xd3, 0x04, 0xa1, 0xee, 0x56, 0xdb, 0x32, 0x6b, 0xb0, 0xc9, 0x59, 0x66, 0x1c, 0x8b, 0xa7, 0x8f, 0x50, 0xd3, 0x45, 0x5b, 0x69, 0x87, 0xdc, 0x55, 0x27, 0x34, 0x0a, 0x9b, 0x62, 0x0a, 0x20, 0x40, 0x3e, 0x58, 0x58, 0x1d, 0xee, 0xf8, 0x84, 0x96, 0x74, 0x7e, 0x1b, 0x80, 0x7c, 0x6a, 0x73, 0x5b, 0x3a, 0x4b, 0xc3, 0x52, 0x91, 0x03, 0x0b, 0x30, 0x78, 0x7f, 0x7f, 0xdf, 0x5f, 0xe5, 0xb7, 0xfc, 0x97, 0x63, 0xe0, 0xf5, 0xe1, 0x2e, 0x80, 0x6a, 0xcf, 0xd2, 0x6c, 0xf9, 0x10, 0x39, 0x18, 0x2f, 0xa6, 0x19, 0x90, 0x06, 0xe6, 0xa2, 0xef, 0xae, 0xde, 0x9a, 0x46, 0xd8, 0x8a, 0xae, 0x81, 0x9e, 0xdf, 0xd2, 0xd7, 0xda, 0x92, 0x94, 0x71, 0x77, 0x10, 0x34, 0xfa, 0xf8, 0xe8, 0xf2, 0xe3, 0xf9, 0xc9, 0xf5, 0xc7, 0xab, 0xa3, 0xef, 0x71, 0x0b, 0xd9, 0x2b, 0x03, 0xf2, 0x0a, 0xe3, 0x01, 0x45, 0x9e, 0x63, 0x53, 0xbb, 0xf7, 0x54, 0x36, 0x98, 0x66, 0x04, 0xaf, 0x12, 0x6c, 0xb3, 0x6e, 0x30, 0xa3, 0x64, 0x9e, 0x30, 0x97, 0x83, 0xa8, 0xb6, 0x5f, 0xb7, 0x49, 0x91, 0x25, 0xb3, 0x7e, 0x5e, 0x4c, 0x91, 0x0a, 0x37, 0xdf, 0x08, 0xff, 0x0c, 0x0e, 0xb7, 0x29, 0x59, 0x0d, 0x08, 0x41, 0x76, 0x57, 0x4c, 0x10, 0xb1, 0xe4, 0xb9, 0x3d, 0x0a, 0x1d, 0xd2, 0xdc, 0x23, 0x06, 0xb8, 0xb8, 0xdb, 0x5b, 0xa1, 0xde, 0xd5, 0x3b, 0xc5, 0x4a, 0x8f, 0x37, 0xa2, 0x20, 0xf2, 0xfd, 0xb8, 0xb9, 0x2a, 0x5c, 0x9d, 0x39, 0x7b, 0xec, 0x06, 0x00, 0x10, 0x48, 0x9d, 0xcb, 0x0d, 0x94, 0x04, 0x15, 0xb8, 0x61, 0x92, 0xcd, 0xca, 0x16, 0xf7, 0x46, 0x2b, 0x6a, 0xfa, 0x10, 0xda, 0x7c, 0x0f, 0xbd, 0x17, 0xbe, 0x65, 0x88, 0x4d, 0x17, 0x9d, 0x35, 0xbf, 0x90, 0x35, 0xbf, 0xf8, 0x97, 0xd6, 0xfc, 0xe2, 0x5f, 0x58, 0xf3, 0xde, 0x6f, 0xbc, 0xe6, 0xbd, 0xe0, 0x9a, 0x9d, 0xaf, 0xf4, 0xfe, 0x8a, 0x6b, 0xfe, 0xeb, 0x32, 0xbb, 0xed, 0xc1, 0x7c, 0x51, 0x0a, 0x4b, 0x8f, 0xb5, 0xb2, 0xc5, 0x64, 0x73, 0x1b, 0xed, 0x90, 0x6f, 0xdf, 0x02, 0x0c, 0x3b, 0x3d, 0xe3, 0x62, 0x31, 0x15, 0x38, 0xc4, 0x5f, 0xf9, 0x4d, 0x2d, 0x3c, 0x03, 0x21, 0xc5, 0x7a, 0xdf, 0x72, 0x84, 0x7e, 0x0a, 0xd4, 0xec, 0x3b, 0x32, 0x1b, 0x1d, 0xb6, 0xa3, 0x7d, 0x57, 0xe8, 0xa6, 0xc7, 0x3e, 0xce, 0xd1, 0x88, 0xdc, 0x64, 0x74, 0x27, 0x4d, 0x0c, 0xdc, 0xf6, 0x65, 0x27, 0xa3, 0x83, 0x31, 0xa0, 0x74, 0x60, 0x8e, 0x0b, 0x62, 0xcc, 0xc7, 0xe7, 0x19, 0xd7, 0x8f, 0x0b, 0x1c, 0x10, 0x64, 0x73, 0x01, 0x32, 0x98, 0x13, 0x51, 0xa8, 0x99, 0x78, 0x64, 0x26, 0x19, 0x35, 0x26, 0x28, 0xd1, 0x8e, 0x9b, 0xe4, 0x71, 0xcd, 0x53, 0x18, 0x46, 0xb3, 0x1c, 0xf9, 0xcd, 0x78, 0xb5, 0xf1, 0x31, 0xb4, 0x0d, 0xee, 0x58, 0x5e, 0x34, 0x3a, 0xde, 0xb9, 0x72, 0xe3, 0x36, 0x49, 0x16, 0xf1, 0x8c, 0xa0, 0x35, 0x30, 0xf7, 0xa1, 0xad, 0x51, 0x56, 0x2d, 0x39, 0x52, 0x0b, 0x07, 0xe8, 0x8d, 0x5a, 0xe6, 0x19, 0xf1, 0x39, 0x3e, 0x48, 0xac, 0x94, 0x89, 0xd2, 0x31, 0xd5, 0xba, 0x86, 0xfb, 0xa6, 0xd8, 0xa6, 0x0c, 0x66, 0x12, 0xd8, 0x7a, 0x23, 0x1f, 0x0a, 0x06, 0x8c, 0xf9, 0x84, 0xe2, 0xc8, 0x61, 0x6a, 0xce, 0x5d, 0x8a, 0x29, 0x79, 0x4d, 0xec, 0x61, 0xf3, 0x3e, 0xbf, 0x4e, 0xa8, 0x52, 0xb5, 0xce, 0x09, 0x7c, 0x80, 0xf8, 0x44, 0x6e, 0xe4, 0x1f, 0xaa, 0x1b, 0xd4, 0x47, 0xd4, 0x23, 0x29, 0x05, 0x50, 0x66, 0xfd, 0xf7, 0xfa, 0xf8, 0xf2, 0xe3, 0xb7, 0x27, 0x27, 0x97, 0xa7, 0x6f, 0xce, 0x4e, 0xe4, 0xc2, 0x98, 0x1f, 0x9d, 0x5f, 0x7f, 0x77, 0xa6, 0x7d, 0xe2, 0x94, 0x16, 0x3d, 0x82, 0x17, 0xd8, 0x7f, 0x66, 0xca, 0x5d, 0x6a, 0x87, 0x05, 0x86, 0xf4, 0xd1, 0xe9, 0x0f, 0xa0, 0xb5, 0x5e, 0xf6, 0x3e, 0xfc, 0xe0, 0xf5, 0x22, 0x71, 0x6a, 0x4c, 0xfc, 0x66, 0x02, 0xb6, 0xe4, 0x84, 0x7a, 0xba, 0xdb, 0xb5, 0xb7, 0xa5, 0xdc, 0xfd, 0xc6, 0x62, 0x10, 0x1b, 0x9c, 0x67, 0x46, 0x61, 0xe0, 0x17, 0xb5, 0xdf, 0x8f, 0x93, 0xd6, 0xf6, 0x62, 0x4b, 0xdb, 0xa8, 0xad, 0x0c, 0x5a, 0x7c, 0x5e, 0xb7, 0x19, 0x6f, 0x93, 0x47, 0xc2, 0x70, 0x8c, 0x0e, 0xf1, 0xbf, 0xe1, 0x36, 0x77, 0x97, 0x45, 0x7a, 0x87, 0xfa, 0x1f, 0x3c, 0xcb, 0x21, 0x5d, 0x7c, 0xb4, 0x6f, 0x9a, 0xfe, 0x49, 0x58, 0x19, 0x07, 0xa1, 0xcc, 0x13, 0x1a, 0x34, 0x0a, 0x79, 0x7b, 0x08, 0x19, 0x07, 0x7f, 0xc3, 0xe3, 0xd1, 0x80, 0xb0, 0x3d, 0xfd, 0xe8, 0xcd, 0xc9, 0x55, 0x37, 0xba, 0x3c, 0x79, 0xcf, 0x85, 0x2a, 0x27, 0xe7, 0xdf, 0x70, 0x1f, 0x44, 0x6d, 0x6f, 0x47, 0x99, 0x10, 0x7e, 0xb2, 0xa6, 0xb3, 0x27, 0xf0, 0x2e, 0x65, 0xa6, 0x96, 0x25, 0x48, 0xd7, 0x4f, 0x08, 0xa0, 0xc3, 0x6b, 0x3b, 0x84, 0xff, 0x84, 0xb6, 0x0a, 0xec, 0x88, 0x77, 0x81, 0xed, 0x12, 0xc5, 0xcc, 0xe4, 0xce, 0x88, 0x51, 0x80, 0xbb, 0xc1, 0x3b, 0x06, 0x1b, 0xe2, 0x67, 0x71, 0xe8, 0x06, 0x91, 0xd9, 0x47, 0x10, 0x42, 0xdc, 0x3c, 0x57, 0x62, 0xf0, 0x68, 0xc5, 0xc2, 0xe7, 0xba, 0x48, 0x97, 0x04, 0x48, 0x6e, 0x37, 0x23, 0x54, 0x1d, 0x5d, 0xa4, 0xdc, 0x88, 0xb8, 0x81, 0x4c, 0x07, 0xdb, 0x9d, 0x8e, 0x19, 0x81, 0x01, 0x03, 0xc8, 0x79, 0x81, 0x09, 0x1c, 0x08, 0x7d, 0xf0, 0xbf, 0x36, 0xfb, 0x65, 0x79, 0xb3, 0x99, 0x8e, 0x3f, 0x16, 0x65, 0xbc, 0xd6, 0x94, 0x45, 0xce, 0xaf, 0xc7, 0xf8, 0xeb, 0x68, 0xad, 0x6f, 0x1e, 0x95, 0xbf, 0xe3, 0xcf, 0x83, 0x58, 0x00, 0x2a, 0x82, 0xd8, 0xb5, 0xa2, 0xf9, 0x9c, 0xda, 0x3e, 0x71, 0x96, 0x0e, 0x0b, 0x50, 0xe0, 0x6c, 0xf7, 0x0f, 0xe9, 0x86, 0xb8, 0xb8, 0x1d, 0x95, 0xdb, 0xdb, 0x3e, 0x1a, 0xbd, 0x29, 0x71, 0xec, 0x6a, 0x5e, 0xee, 0xe5, 0xb7, 0xc7, 0x83, 0x3f, 0x6e, 0x6f, 0x53, 0x1a, 0xf4, 0x3a, 0xa6, 0xab, 0xbe, 0xdc, 0xdf, 0xde, 0xd9, 0x08, 0xa9, 0x8f, 0x5e, 0x5e, 0x0f, 0x76, 0xb0, 0x8c, 0x2d, 0x7d, 0xe2, 0xee, 0x53, 0x98, 0x5b, 0x8a, 0x1e, 0xcc, 0xd0, 0xe3, 0x04, 0x93, 0x04, 0xa9, 0xb2, 0x93, 0xc3, 0x99, 0x94, 0x3b, 0xe9, 0xa5, 0x5e, 0x18, 0x1c, 0xa4, 0x0e, 0xcf, 0xfe, 0xa0, 0x63, 0xa8, 0xca, 0xcd, 0x21, 0xa7, 0xfc, 0x13, 0x67, 0xd6, 0x7d, 0xde, 0xa7, 0x66, 0x78, 0xcd, 0x5d, 0x17, 0x25, 0x3a, 0x5a, 0xa0, 0x29, 0x16, 0x5f, 0xb6, 0x75, 0x64, 0x23, 0x41, 0x00, 0xf3, 0x03, 0x3c, 0x5f, 0xbd, 0xcc, 0xa9, 0xc3, 0xf4, 0x83, 0x04, 0x1f, 0xdb, 0x41, 0xcd, 0xee, 0x3b, 0x0c, 0xc2, 0x1d, 0xd4, 0x77, 0xf6, 0xf1, 0x37, 0xa2, 0x0e, 0xdc, 0xdd, 0xf0, 0x90, 0x9f, 0xf4, 0x4e, 0x16, 0xc3, 0xe8, 0x70, 0x06, 0x2f, 0xce, 0x5a, 0x4a, 0xef, 0x4e, 0xb8, 0xdd, 0xd6, 0xb7, 0x49, 0x31, 0x4c, 0x8a, 0xbc, 0x6c, 0x54, 0x09, 0xd1, 0x6a, 0xa5, 0xee, 0x17, 0x6b, 0x02, 0x60, 0x1c, 0x4d, 0x97, 0xf2, 0x1a, 0x6b, 0x56, 0x64, 0x7d, 0x0b, 0xc6, 0x7b, 0x1d, 0x97, 0x67, 0x8d, 0x6a, 0x95, 0xf0, 0x02, 0x60, 0x7f, 0x29, 0xfc, 0x13, 0xb8, 0xf1, 0x84, 0x9a, 0xc1, 0xa4, 0xf1, 0x6c, 0x0d, 0xbb, 0xfe, 0x34, 0xaf, 0x91, 0x50, 0xda, 0x5a, 0x1f, 0x0b, 0xd0, 0xd8, 0x58, 0xa3, 0x2c, 0x28, 0x2a, 0xb7, 0x8e, 0x23, 0x99, 0x8b, 0xe6, 0x77, 0xe3, 0x35, 0xb7, 0x69, 0x80, 0xa5, 0xd7, 0x09, 0xc9, 0x0c, 0x57, 0x87, 0x4e, 0x6a, 0xcb, 0x30, 0xfe, 0x8d, 0xc5, 0x14, 0x1f, 0xc3, 0x2f, 0x6e, 0x9e, 0x6d, 0xfa, 0x65, 0x37, 0x86, 0xd3, 0xb3, 0x72, 0xcf, 0x59, 0xdf, 0x0f, 0xb6, 0xa2, 0x3d, 0xe2, 0xea, 0xf0, 0x06, 0xd6, 0x08, 0x75, 0x25, 0xc0, 0x92, 0xa6, 0x31, 0x1b, 0x86, 0x52, 0xfd, 0x6a, 0x13, 0x27, 0x98, 0xd3, 0xf8, 0xc1, 0x71, 0x5a, 0x2a, 0xf5, 0x0f, 0xd1, 0x69, 0xf7, 0xd8, 0x78, 0x3f, 0x8e, 0xc4, 0x1b, 0x41, 0x75, 0x51, 0xf7, 0x05, 0xa2, 0xa5, 0x66, 0x16, 0x73, 0x79, 0x96, 0xb4, 0x82, 0x68, 0x29, 0xa2, 0x2a, 0x1c, 0xd2, 0x4c, 0x7a, 0x1b, 0x6a, 0x36, 0x62, 0xa1, 0x73, 0xea, 0x49, 0x32, 0x87, 0x3a, 0x0c, 0xf0, 0xbd, 0x3f, 0x3c, 0x09, 0xa9, 0xf2, 0xd4, 0xd9, 0x59, 0x95, 0x3e, 0x04, 0x93, 0xf0, 0x6c, 0xac, 0xb8, 0x46, 0x99, 0x1f, 0x55, 0x0c, 0xf4, 0x48, 0x26, 0x1d, 0x02, 0x3f, 0x4d, 0x3c, 0xb0, 0xac, 0x41, 0x0d, 0x5f, 0x41, 0x5a, 0xbe, 0x6a, 0x09, 0x1d, 0xbd, 0x67, 0x5a, 0x5f, 0x9b, 0x26, 0x65, 0x4c, 0xfb, 0x3d, 0x52, 0x59, 0x9b, 0xee, 0x36, 0x6c, 0x57, 0x62, 0xcb, 0xb4, 0xe9, 0xd6, 0x12, 0x18, 0xbd, 0x82, 0x1c, 0x69, 0x96, 0x34, 0x6f, 0x07, 0xfa, 0xa2, 0x25, 0xff, 0x96, 0x8c, 0x8b, 0xd8, 0xf3, 0x81, 0x50, 0xc1, 0x03, 0x77, 0x00, 0x11, 0x22, 0x58, 0x1b, 0xb3, 0x67, 0x94, 0x8e, 0xc4, 0x4c, 0x15, 0x2f, 0x9e, 0x84, 0xa1, 0xb8, 0x6b, 0x02, 0xdc, 0x68, 0xcf, 0x54, 0x18, 0xc2, 0x10, 0xf7, 0xe9, 0xb8, 0xba, 0xa1, 0x9e, 0x3c, 0x6a, 0x19, 0x95, 0x82, 0x0b, 0x80, 0x4e, 0xea, 0xd4, 0xaf, 0x7a, 0x1b, 0xb6, 0x38, 0xf0, 0xf8, 0xc0, 0x68, 0x53, 0x23, 0x06, 0xc8, 0x42, 0x47, 0x1d, 0x9d, 0x03, 0x39, 0xb5, 0x37, 0x59, 0xd5, 0x33, 0xd0, 0x30, 0x31, 0xdc, 0xa2, 0x09, 0xb6, 0xdb, 0xf1, 0xcc, 0x35, 0x2d, 0x4f, 0xeb, 0xeb, 0x0d, 0x41, 0x1a, 0x5e, 0xbb, 0x65, 0x50, 0xfc, 0x6f, 0xd7, 0xb4, 0xab, 0xec, 0x32, 0xab, 0xdc, 0x0a, 0x1a, 0xe4, 0xe5, 0xd1, 0x6d, 0xea, 0x77, 0x6a, 0xa0, 0xaf, 0x77, 0x81, 0xd7, 0xcc, 0x79, 0x84, 0xf7, 0x6b, 0xea, 0x28, 0x45, 0xc0, 0x84, 0x69, 0x2c, 0xbf, 0x67, 0xb0, 0x94, 0xb5, 0x29, 0x3f, 0xf4, 0x8d, 0x7d, 0xa8, 0x31, 0x1c, 0x7a, 0xed, 0xd9, 0x4b, 0xaf, 0xc9, 0x74, 0xe5, 0x01, 0x16, 0x68, 0x7c, 0xdb, 0x8d, 0x76, 0xe7, 0x74, 0x28, 0xdb, 0xdf, 0x84, 0x18, 0x17, 0xf7, 0x08, 0x2e, 0x73, 0x53, 0x2e, 0xdf, 0xfb, 0x0b, 0x9a, 0x5c, 0xb4, 0x61, 0x4c, 0x97, 0xa6, 0x12, 0x8c, 0xeb, 0x51, 0x94, 0x1f, 0x04, 0x82, 0x0e, 0x94, 0x4b, 0xb9, 0x40, 0x23, 0x61, 0x9c, 0x28, 0x4a, 0xf8, 0x9c, 0xbc, 0x9b, 0x98, 0x2d, 0xb5, 0x10, 0x38, 0x0c, 0x24, 0xd7, 0x9e, 0x81, 0x20, 0x2d, 0x67, 0xf8, 0x00, 0xb5, 0xc9, 0xca, 0xbd, 0xcc, 0xea, 0xd9, 0x82, 0x0c, 0x24, 0xd3, 0xc9, 0xce, 0x99, 0x14, 0x56, 0xb5, 0x8e, 0x22, 0xf1, 0xf1, 0x7c, 0x42, 0x91, 0x38, 0xa3, 0x14, 0xbd, 0xb4, 0xac, 0x7a, 0x01, 0xbc, 0x57, 0x8a, 0x01, 0x5d, 0x5e, 0x5c, 0xee, 0x6e, 0xb8, 0xa0, 0x98, 0x02, 0x8e, 0xc0, 0x3d, 0x1f, 0x29, 0x4a, 0x64, 0x80, 0x13, 0xba, 0xca, 0x6e, 0xb8, 0x4c, 0xcf, 0xb7, 0x2d, 0x47, 0x82, 0x18, 0x87, 0xcc, 0x85, 0xbe, 0x48, 0x2e, 0x7f, 0x5b, 0x28, 0xe2, 0x74, 0x43, 0xb4, 0x17, 0x53, 0xe1, 0x11, 0x3f, 0xf3, 0x61, 0x65, 0x4a, 0x4e, 0x28, 0x27, 0x44, 0x96, 0x1e, 0x15, 0xff, 0xd5, 0xfb, 0x89, 0x60, 0xe1, 0x82, 0x37, 0xcb, 0x88, 0x13, 0x8f, 0x02, 0x29, 0x5d, 0x12, 0xe4, 0xb5, 0x4f, 0x52, 0x40, 0x42, 0x8b, 0x21, 0x09, 0x5d, 0xc8, 0xe6, 0x5a, 0xa0, 0xb7, 0x14, 0xa9, 0x96, 0x31, 0x95, 0xfb, 0xad, 0x7d, 0xe0, 0x4d, 0x5f, 0x8b, 0x9a, 0x45, 0x26, 0x5d, 0xcb, 0xe2, 0xe8, 0xfc, 0x6c, 0x70, 0xed, 0x06, 0x91, 0x48, 0x0f, 0xf3, 0x52, 0x99, 0xeb, 0xc0, 0x6e, 0x4e, 0x6a, 0xd1, 0xd9, 0xe9, 0xe0, 0xba, 0x1f, 0xea, 0xd8, 0x00, 0xda, 0xf9, 0x00, 0xcb, 0x6d, 0x6a, 0x40, 0x19, 0x11, 0x77, 0x07, 0xe7, 0x44, 0x63, 0x8e, 0x8e, 0x71, 0xb4, 0x28, 0x2d, 0x5c, 0x50, 0x88, 0xe6, 0x70, 0x30, 0xc5, 0x2f, 0x38, 0x4d, 0x59, 0x52, 0x9c, 0x35, 0x4a, 0x54, 0x2e, 0x87, 0x3d, 0x07, 0x49, 0x91, 0xf5, 0x1d, 0x6a, 0xd1, 0x05, 0xd4, 0x0b, 0x12, 0xea, 0xd6, 0xb7, 0x31, 0xd7, 0x99, 0xa0, 0x68, 0x7f, 0x04, 0x01, 0xb3, 0xe6, 0xea, 0x1e, 0x45, 0x09, 0x21, 0xee, 0x92, 0x93, 0x09, 0x9f, 0x7d, 0x36, 0x51, 0xe1, 0x56, 0x34, 0x76, 0x52, 0xba, 0x3a, 0xd6, 0x6b, 0x16, 0x30, 0x6c, 0xf7, 0x4b, 0xe2, 0x94, 0x0e, 0x09, 0x5a, 0xa2, 0x2b, 0x93, 0x84, 0x5d, 0x4e, 0x66, 0xda, 0xad, 0x20, 0xc0, 0xe9, 0x98, 0x71, 0x30, 0xcb, 0x3a, 0x10, 0x26, 0x83, 0x1e, 0x20, 0xd3, 0xe1, 0x06, 0x40, 0xa8, 0xba, 0xb5, 0x9d, 0x24, 0xfb, 0xe4, 0x6a, 0xf9, 0xa9, 0xbd, 0x1f, 0x38, 0xe3, 0x99, 0x02, 0x65, 0xdd, 0x36, 0x84, 0x36, 0x9f, 0x8c, 0xb4, 0x19, 0xd3, 0x87, 0xd3, 0x37, 0x67, 0x66, 0xb7, 0x64, 0x77, 0x28, 0x85, 0xd6, 0xac, 0x15, 0xcb, 0x5a, 0x94, 0x6d, 0xd2, 0x99, 0x78, 0x41, 0x9f, 0x65, 0x96, 0xfe, 0x8d, 0x52, 0xad, 0x48, 0x77, 0x9d, 0xa4, 0x04, 0xe7, 0x15, 0x93, 0xeb, 0x5c, 0x25, 0xd9, 0x5a, 0x69, 0x3a, 0xd9, 0xa5, 0x63, 0x53, 0xfe, 0xc1, 0x31, 0xbe, 0x60, 0xfe, 0xf1, 0x4a, 0xe4, 0x94, 0xed, 0x3a, 0xbc, 0x29, 0xa1, 0x1c, 0x0b, 0x18, 0x19, 0x08, 0xa4, 0x4d, 0x2a, 0x5f, 0xf4, 0x94, 0x0b, 0xd2, 0xcd, 0x6c, 0x76, 0x5d, 0x1d, 0x64, 0x27, 0x2f, 0xa4, 0xe8, 0x71, 0xfd, 0xed, 0xd5, 0xc5, 0xfb, 0xde, 0xf5, 0x05, 0xb5, 0xba, 0x27, 0x73, 0x6e, 0xb6, 0x22, 0x45, 0xa4, 0x34, 0x7d, 0x52, 0x2d, 0x4a, 0x89, 0xf8, 0xda, 0xd6, 0xcb, 0x0d, 0x29, 0xf4, 0x61, 0x91, 0x42, 0xd3, 0xd3, 0xb7, 0xbc, 0xf6, 0x25, 0x19, 0x6b, 0x22, 0x31, 0xb5, 0x48, 0x45, 0xbf, 0xe3, 0xc8, 0x89, 0x63, 0x71, 0x4a, 0x87, 0x70, 0xee, 0xe1, 0xb2, 0x7c, 0x8c, 0xa4, 0xb6, 0x14, 0x31, 0x0b, 0xc9, 0x96, 0xf2, 0xa3, 0x03, 0xa6, 0xf7, 0xb6, 0x41, 0x2a, 0xc2, 0xaa, 0x3b, 0x2e, 0xeb, 0xaa, 0x72, 0xb8, 0xbe, 0x71, 0x51, 0xe4, 0xf7, 0x2a, 0xb8, 0xa4, 0xf6, 0x1b, 0xa6, 0x8e, 0x87, 0x54, 0x3c, 0xb6, 0xa2, 0xbb, 0x08, 0x60, 0x99, 0x76, 0x0e, 0x5f, 0xa9, 0xfe, 0xed, 0xd7, 0x31, 0x37, 0x34, 0x03, 0xbc, 0x57, 0x15, 0x4b, 0x2c, 0x29, 0x0d, 0xbb, 0x9d, 0xcf, 0x90, 0x4d, 0xd6, 0x53, 0xc6, 0xbb, 0x82, 0xa8, 0x88, 0x00, 0x3c, 0xd4, 0xeb, 0xcd, 0xf8, 0x25, 0xc9, 0x3f, 0xc1, 0x31, 0xc5, 0x3f, 0x7b, 0x37, 0x58, 0xa0, 0x96, 0x51, 0xa3, 0xc7, 0x36, 0xae, 0x94, 0x36, 0x6e, 0x73, 0xf1, 0xd2, 0x8a, 0xfb, 0x6f, 0x6a, 0x12, 0x0e, 0x81, 0xa9, 0x11, 0x33, 0xc0, 0x9f, 0x7a, 0xba, 0xa4, 0xa2, 0x24, 0xa5, 0x88, 0x50, 0x31, 0x5e, 0x8e, 0xe8, 0x98, 0x30, 0xe2, 0x87, 0xed, 0x3d, 0x87, 0x8c, 0xdb, 0xaa, 0x20, 0x0f, 0x38, 0xb4, 0x4d, 0x97, 0x67, 0x07, 0x4e, 0x53, 0xcb, 0x8a, 0xf8, 0x31, 0xdb, 0xb3, 0x0c, 0x95, 0x49, 0xcc, 0x7d, 0x4d, 0x58, 0xb1, 0x2c, 0x9a, 0x36, 0x27, 0x46, 0x95, 0xb4, 0x67, 0xb2, 0xcf, 0xae, 0x10, 0x34, 0x9f, 0xe0, 0xc2, 0x25, 0xe8, 0x8f, 0xc8, 0x96, 0x48, 0xc0, 0x14, 0x74, 0xff, 0x3a, 0x2e, 0x81, 0x2f, 0xd5, 0xc7, 0xdb, 0x58, 0xe1, 0x9e, 0x5e, 0x6a, 0x61, 0x85, 0x73, 0x7a, 0xb5, 0x03, 0x09, 0x9f, 0xdc, 0x69, 0x0d, 0xe3, 0x82, 0x53, 0x33, 0x9c, 0x1d, 0x17, 0x16, 0x45, 0xc0, 0x8b, 0x94, 0xab, 0x1e, 0x53, 0xb7, 0xeb, 0xbb, 0x10, 0x73, 0x8a, 0x4d, 0x3f, 0xc7, 0x2a, 0xd2, 0x8f, 0x46, 0xeb, 0x5a, 0xf9, 0x69, 0x2a, 0x91, 0xce, 0xe4, 0x57, 0x07, 0xa6, 0x34, 0x15, 0x79, 0x5a, 0x63, 0xb8, 0xdd, 0x1f, 0x7e, 0xa8, 0xf7, 0x5f, 0xde, 0x68, 0x03, 0xc3, 0x90, 0x9a, 0x94, 0x31, 0xf3, 0x3e, 0x9d, 0xb0, 0x57, 0x57, 0xa7, 0x64, 0x87, 0x21, 0x06, 0xca, 0xe2, 0x67, 0x07, 0x8c, 0x78, 0x8a, 0xc0, 0x04, 0xbc, 0xd1, 0x62, 0xab, 0x5a, 0x0a, 0x07, 0xc1, 0x64, 0x9c, 0x06, 0x72, 0x16, 0x89, 0xe1, 0x6a, 0xee, 0x05, 0xc7, 0x54, 0x28, 0x27, 0xdd, 0xdd, 0xae, 0xd2, 0x3a, 0x67, 0x6e, 0x30, 0xb6, 0x20, 0x40, 0xcd, 0xab, 0x9b, 0x44, 0x1b, 0xe0, 0x4c, 0x53, 0x7a, 0x49, 0xf2, 0x9e, 0xdb, 0x4a, 0x60, 0x5a, 0xec, 0xa8, 0x48, 0xc4, 0xdb, 0xa0, 0x4d, 0x80, 0xbc, 0x28, 0x32, 0x82, 0xf6, 0xf0, 0xe5, 0x21, 0xa7, 0x6a, 0xec, 0xdc, 0x17, 0x8b, 0xb7, 0xd8, 0x38, 0x31, 0x29, 0xc3, 0xf0, 0xb5, 0xf7, 0xfb, 0x9c, 0x20, 0x36, 0xa9, 0xf7, 0x12, 0xc1, 0xc6, 0xe5, 0xec, 0xd8, 0x92, 0xf6, 0xc1, 0x2c, 0x6f, 0xfe, 0xac, 0x37, 0xb7, 0xef, 0x06, 0x2f, 0x91, 0x0a, 0x42, 0x21, 0x50, 0x65, 0x26, 0x78, 0x2e, 0x88, 0xed, 0x8b, 0xb9, 0x70, 0xda, 0x92, 0x0c, 0x3d, 0xc5, 0x1a, 0x23, 0x67, 0x75, 0x9a, 0x90, 0x28, 0xe6, 0x64, 0xbc, 0xf8, 0x40, 0xd3, 0xf6, 0xca, 0x62, 0x0e, 0x0f, 0x39, 0x3d, 0x2d, 0x2e, 0x1d, 0x3b, 0xb7, 0xc0, 0x28, 0xed, 0xd1, 0x63, 0x65, 0x5b, 0xba, 0x89, 0x20, 0x8f, 0x53, 0x0e, 0x1c, 0xb7, 0x4f, 0x71, 0xf7, 0x4c, 0xdd, 0x64, 0x06, 0xf5, 0x44, 0x0a, 0xcd, 0xa4, 0x0f, 0xc7, 0x37, 0x27, 0xd7, 0xcd, 0xab, 0xe5, 0x46, 0x0e, 0x09, 0x63, 0x04, 0xfe, 0x7d, 0xf9, 0xe1, 0x7a, 0x83, 0x9a, 0x93, 0x29, 0x60, 0x70, 0x55, 0x6b, 0x3a, 0x63, 0xea, 0x57, 0xfd, 0x52, 0x1c, 0x46, 0xf5, 0x10, 0x3e, 0x25, 0xc9, 0x40, 0x72, 0x33, 0xd0, 0xc7, 0xb2, 0xbb, 0xb5, 0x0d, 0x76, 0xd4, 0xd6, 0x0e, 0x35, 0x9c, 0xde, 0xdd, 0xda, 0x35, 0x40, 0x08, 0xfa, 0x94, 0xdf, 0xa6, 0x82, 0x5f, 0x24, 0x97, 0x09, 0xd1, 0xfd, 0xee, 0xc3, 0x03, 0xfd, 0xb8, 0x5e, 0x5e, 0xd1, 0x33, 0x25, 0x89, 0xee, 0x34, 0x83, 0x72, 0xdf, 0xd9, 0x6f, 0x8a, 0xec, 0x2d, 0x33, 0x2e, 0x00, 0xa6, 0x86, 0xde, 0x88, 0x1b, 0xd2, 0x6f, 0xef, 0x6e, 0xe5, 0xb4, 0xea, 0x13, 0x74, 0x34, 0xb7, 0x3d, 0x1d, 0x10, 0x8b, 0x8b, 0x38, 0x23, 0x28, 0x24, 0x1e, 0x6b, 0xc6, 0x67, 0x04, 0xaf, 0x09, 0xf6, 0xe0, 0xc1, 0xee, 0x90, 0x69, 0x99, 0x2a, 0x0c, 0x00, 0x04, 0x9d, 0xb0, 0x23, 0x53, 0x4c, 0x13, 0x70, 0x42, 0x20, 0xff, 0x3b, 0xc0, 0x34, 0x11, 0xb8, 0x13, 0xb4, 0xbf, 0xfa, 0x57, 0xcd, 0xe3, 0xe3, 0x7f, 0xed, 0xd6, 0x25, 0x25, 0xba, 0x87, 0x75, 0xd0, 0x43, 0xf9, 0x8b, 0xe7, 0xab, 0xa4, 0x3e, 0xc3, 0xa4, 0x1b, 0x53, 0x87, 0x98, 0x8d, 0x9a, 0xff, 0x84, 0xc6, 0x30, 0x13, 0x13, 0x2d, 0x45, 0x3a, 0xb8, 0x33, 0x8b, 0x6e, 0xd2, 0x46, 0x4d, 0x3e, 0xf4, 0xdb, 0x1a, 0x00, 0xaa, 0x26, 0xe8, 0x8d, 0xaf, 0x09, 0x16, 0x06, 0x31, 0xc0, 0x51, 0x89, 0xf3, 0x45, 0xe8, 0xee, 0x96, 0x0a, 0xfe, 0x80, 0xc2, 0xd5, 0x38, 0xdb, 0x65, 0x8e, 0x8d, 0xe9, 0x44, 0x47, 0x15, 0xf5, 0x83, 0x26, 0x3f, 0x98, 0x6f, 0xa2, 0xe2, 0x56, 0x74, 0x79, 0x2b, 0xa8, 0xcf, 0x3a, 0x36, 0xcc, 0xd1, 0x14, 0xcc, 0xda, 0x4c, 0x39, 0x10, 0x32, 0x77, 0x13, 0x35, 0x42, 0x19, 0xb6, 0x43, 0x4d, 0xde, 0x8b, 0x1a, 0x0b, 0x85, 0x7b, 0x88, 0xa2, 0x15, 0xd5, 0x7e, 0xe9, 0x06, 0xbd, 0xd7, 0xa5, 0xbf, 0xed, 0x6f, 0xbd, 0xe2, 0x13, 0x3d, 0x3d, 0xb9, 0x7e, 0xdb, 0x74, 0xe6, 0x15, 0x40, 0x50, 0xfc, 0xdf, 0x5e, 0x12, 0x17, 0x37, 0x60, 0x5c, 0x20, 0x54, 0x52, 0x0f, 0xfb, 0x6f, 0xf4, 0xb6, 0xb6, 0x42, 0x79, 0x1b, 0x9f, 0x10, 0x1e, 0x62, 0x77, 0xaf, 0x1e, 0xd2, 0x43, 0x95, 0xbe, 0x87, 0xdb, 0xdd, 0x8e, 0xe4, 0x5b, 0x27, 0xaf, 0x58, 0x75, 0x67, 0x79, 0xbc, 0x16, 0xb0, 0x4f, 0x22, 0x03, 0x09, 0x1d, 0x35, 0x81, 0x30, 0x1d, 0x13, 0xbb, 0xa9, 0xde, 0x98, 0xec, 0x24, 0x10, 0xf3, 0x24, 0x93, 0xaa, 0xc7, 0x8d, 0x88, 0xfb, 0x48, 0x72, 0xbb, 0xb7, 0x8a, 0x18, 0x00, 0x59, 0x10, 0xc1, 0xc2, 0xf9, 0x52, 0x6a, 0x07, 0x8b, 0x04, 0x21, 0xd7, 0x58, 0xed, 0x93, 0xb6, 0x59, 0x4f, 0xc3, 0xc6, 0xd1, 0x16, 0x14, 0xa3, 0x85, 0x14, 0x91, 0xf2, 0xbf, 0x51, 0x14, 0xd7, 0xf2, 0x67, 0x77, 0xf6, 0x03, 0x1b, 0x47, 0x02, 0xfb, 0x57, 0x6e, 0x9c, 0x55, 0x8e, 0xd8, 0x7f, 0x47, 0x06, 0xaf, 0x29, 0x75, 0x0b, 0x64, 0x6a, 0x6b, 0x5b, 0xe7, 0x5f, 0xbc, 0x16, 0xdc, 0xed, 0xfe, 0x2a, 0xf0, 0x49, 0xfb, 0xd6, 0xaf, 0x5c, 0x4b, 0xd7, 0x76, 0x3e, 0x41, 0xe9, 0x31, 0x97, 0xc6, 0x6e, 0xe4, 0x67, 0xa0, 0x80, 0x66, 0x13, 0x18, 0x26, 0x59, 0x24, 0xb4, 0x78, 0x37, 0x6f, 0xc1, 0x21, 0x6e, 0x63, 0xa3, 0xa2, 0xad, 0xa8, 0x05, 0x91, 0x20, 0x44, 0xd3, 0x05, 0x22, 0x7e, 0x94, 0x41, 0x3f, 0x8b, 0x98, 0xf9, 0xec, 0x47, 0xa0, 0xcd, 0x54, 0x97, 0x6c, 0x57, 0xc4, 0x98, 0xbc, 0xae, 0x7b, 0xac, 0x3c, 0xcb, 0x53, 0x1a, 0xef, 0xe2, 0x19, 0x9a, 0xeb, 0x34, 0x86, 0x39, 0xac, 0xdc, 0x56, 0xd6, 0xf3, 0xe0, 0x79, 0x8b, 0xf8, 0x77, 0xe7, 0x91, 0x99, 0xf7, 0x39, 0xe1, 0x51, 0x95, 0xd9, 0xef, 0xae, 0xde, 0xfe, 0x45, 0xed, 0xee, 0x8d, 0x6e, 0x8b, 0x25, 0xdc, 0x98, 0xee, 0x30, 0x71, 0x12, 0x01, 0x05, 0x02, 0xa2, 0xb6, 0xeb, 0xfc, 0x2f, 0x9b, 0x65, 0xe9, 0x05, 0x15, 0x28, 0xe9, 0x63, 0x1d, 0xc3, 0x6c, 0xf0, 0xdc, 0x40, 0x4c, 0xba, 0xdd, 0xfe, 0x3e, 0xf9, 0x43, 0xde, 0x1e, 0xef, 0xef, 0xee, 0x6c, 0x83, 0xd5, 0xba, 0xde, 0xe0, 0x16, 0x1b, 0x9f, 0x3d, 0x6b, 0xb7, 0xcd, 0x79, 0x27, 0x0f, 0x0b, 0xa4, 0xbd, 0xf5, 0x93, 0x1f, 0x2e, 0xcf, 0xbd, 0x35, 0xc2, 0x9a, 0xbc, 0x40, 0x6a, 0xdb, 0x1a, 0xad, 0x2e, 0x50, 0x1b, 0x5f, 0xf3, 0x8f, 0xa9, 0x61, 0x75, 0x20, 0x54, 0xf9, 0xb6, 0x48, 0x51, 0xc7, 0xed, 0xe0, 0x96, 0x74, 0xce, 0xf2, 0x6c, 0x0c, 0xa2, 0xff, 0x02, 0x21, 0xfa, 0x92, 0x0e, 0xe8, 0xea, 0x4f, 0xae, 0xae, 0xfd, 0x9a, 0xbc, 0xef, 0xd2, 0x55, 0xc9, 0xfc, 0x0c, 0x97, 0xf7, 0xf4, 0x43, 0x42, 0x44, 0x46, 0x70, 0x13, 0xae, 0x31, 0x59, 0x4e, 0x13, 0x76, 0xef, 0xa2, 0x69, 0x56, 0xbf, 0x6d, 0x0f, 0xd4, 0x90, 0x88, 0x3c, 0x3e, 0x87, 0xe4, 0xd0, 0x6e, 0x8b, 0x85, 0x30, 0xb7, 0xd4, 0x68, 0x08, 0xfb, 0x88, 0xd6, 0xd5, 0xad, 0xbf, 0xe1, 0x74, 0x74, 0x27, 0xf0, 0x4e, 0x8e, 0x75, 0xa0, 0xde, 0x16, 0xe0, 0xb9, 0xf4, 0x98, 0xb5, 0x2b, 0xd2, 0x7a, 0x4a, 0x3c, 0xdd, 0x44, 0x02, 0x83, 0xe8, 0xd6, 0xb1, 0x0b, 0x43, 0x3e, 0x70, 0xca, 0x20, 0xa0, 0x8e, 0x7b, 0x71, 0x56, 0xc7, 0x79, 0x45, 0x30, 0x03, 0xb6, 0x7e, 0x92, 0x07, 0x6a, 0xa2, 0x0a, 0x2a, 0xe2, 0x8b, 0x5d, 0x5f, 0x1e, 0xc9, 0x52, 0x04, 0xde, 0x45, 0xdc, 0x4c, 0x06, 0x8a, 0xfa, 0xad, 0x55, 0x7b, 0xbb, 0xc1, 0x38, 0x44, 0x28, 0x24, 0xc5, 0x51, 0x09, 0xb1, 0xce, 0x1a, 0x71, 0x09, 0x37, 0x0e, 0x41, 0x37, 0x05, 0x23, 0x11, 0x12, 0x65, 0xf0, 0x0d, 0x15, 0x27, 0x32, 0xd1, 0x1e, 0x9a, 0x58, 0x11, 0x8c, 0x68, 0x9a, 0xa0, 0x26, 0x34, 0x51, 0x23, 0xbe, 0xfd, 0xcf, 0x03, 0xc4, 0x77, 0x7e, 0x71, 0x7d, 0x72, 0x20, 0x10, 0x5f, 0x8a, 0x85, 0xa3, 0x66, 0x02, 0x27, 0xa6, 0x71, 0x23, 0x77, 0xae, 0x39, 0x44, 0x21, 0xab, 0xa7, 0xde, 0x0d, 0x5d, 0x79, 0xca, 0x11, 0xc7, 0x6b, 0xc2, 0x5e, 0xde, 0xaa, 0x15, 0x21, 0x97, 0x4a, 0xfd, 0xc5, 0x32, 0x60, 0x7a, 0xc2, 0xf3, 0xf7, 0x91, 0x51, 0x08, 0x3e, 0x83, 0x10, 0x29, 0x58, 0xde, 0x7a, 0x24, 0xc4, 0xa2, 0x8c, 0x0d, 0x2e, 0x93, 0xb0, 0x38, 0xc2, 0x7e, 0xaa, 0x7e, 0x13, 0x50, 0x8a, 0xd0, 0xbd, 0x95, 0x46, 0xf2, 0x64, 0x8f, 0x18, 0x98, 0xcd, 0x55, 0x22, 0xce, 0x06, 0x12, 0x9b, 0x97, 0x4a, 0x8c, 0x33, 0xf4, 0x02, 0x7e, 0xd9, 0x0a, 0x73, 0x55, 0x39, 0xf7, 0x49, 0xe9, 0x04, 0xee, 0x91, 0x5a, 0x69, 0x68, 0x55, 0x1a, 0x33, 0x45, 0x30, 0x6c, 0xfc, 0xf0, 0x35, 0xb1, 0xc0, 0xba, 0x5b, 0x44, 0xb5, 0xb4, 0xae, 0x51, 0xd7, 0x28, 0x71, 0x27, 0xa1, 0xb2, 0x2c, 0x36, 0xc0, 0x49, 0x5b, 0x68, 0x41, 0x62, 0x75, 0x31, 0x06, 0x44, 0xa9, 0x46, 0xd1, 0x37, 0x02, 0xc1, 0xed, 0x56, 0x20, 0x90, 0xce, 0x47, 0xd6, 0x6c, 0xca, 0x40, 0x0f, 0xf0, 0x91, 0xfd, 0xad, 0x16, 0x5b, 0x96, 0x55, 0xde, 0x41, 0x52, 0x17, 0xb4, 0xf0, 0x46, 0x6f, 0xdb, 0x38, 0x61, 0x53, 0x2a, 0x6e, 0x17, 0x34, 0xb7, 0x4f, 0x17, 0x62, 0x9a, 0x77, 0xe5, 0x8c, 0x56, 0xe6, 0x31, 0xbe, 0xd7, 0xb0, 0x2f, 0x3e, 0x94, 0x66, 0x9a, 0xa2, 0xc6, 0x9a, 0x12, 0x47, 0xf1, 0x14, 0xb4, 0x16, 0x6e, 0x66, 0x8e, 0xd1, 0x73, 0x1b, 0xfc, 0xf6, 0x8d, 0x39, 0x74, 0x52, 0xf4, 0xa3, 0xc8, 0x45, 0x20, 0xd3, 0x92, 0x23, 0x39, 0x18, 0xdc, 0x75, 0xf2, 0xb7, 0x0d, 0xb1, 0x7e, 0x3f, 0xfa, 0x6b, 0x3e, 0x14, 0x27, 0x0c, 0x5a, 0x8e, 0x21, 0x24, 0x9f, 0x09, 0xe5, 0xcf, 0x2f, 0x81, 0xca, 0xc6, 0x4b, 0xf6, 0xab, 0xe2, 0x84, 0x24, 0x13, 0x9b, 0x5b, 0x3f, 0x63, 0xc0, 0x23, 0x9a, 0x12, 0x8e, 0x26, 0xa7, 0x82, 0x6a, 0x21, 0xba, 0x5f, 0xed, 0xbc, 0xd3, 0x44, 0x6b, 0x89, 0x47, 0xe8, 0x0d, 0x81, 0xc1, 0x05, 0x1c, 0x81, 0x01, 0xf7, 0x6c, 0xc2, 0x7a, 0x3c, 0xaa, 0x96, 0xb2, 0xf1, 0xcd, 0xd9, 0xe5, 0xea, 0x25, 0x85, 0x77, 0x09, 0x06, 0x9e, 0xb2, 0x90, 0x46, 0x40, 0x79, 0xf1, 0xe8, 0x51, 0xf5, 0x05, 0x2b, 0x5c, 0x05, 0xd0, 0xd1, 0x82, 0xc6, 0xfb, 0x35, 0x9e, 0x3a, 0x09, 0x8c, 0x76, 0xa6, 0x65, 0x4b, 0xb7, 0x96, 0xdf, 0xd4, 0x4e, 0x71, 0x7b, 0x6e, 0xb1, 0xd3, 0x59, 0x81, 0x27, 0x6b, 0x57, 0x3d, 0xa9, 0x62, 0xdc, 0xe5, 0x95, 0xc5, 0xe8, 0xd6, 0x25, 0x60, 0x2a, 0x6b, 0x28, 0x32, 0x48, 0xf5, 0x8c, 0x58, 0x63, 0x43, 0x71, 0x70, 0x6d, 0x38, 0x75, 0xea, 0xeb, 0x11, 0xef, 0xe5, 0x2b, 0xcc, 0x0f, 0xd7, 0x89, 0x59, 0xd9, 0x8a, 0x52, 0x1c, 0x66, 0x8f, 0x33, 0xc6, 0xa2, 0xfd, 0xcf, 0xf7, 0xf7, 0x36, 0xb4, 0x79, 0xb1, 0x66, 0x21, 0x6e, 0x84, 0x3a, 0x00, 0xd2, 0x8d, 0x93, 0x9e, 0x0a, 0xa4, 0xd7, 0xa4, 0xd8, 0x23, 0x93, 0xd1, 0x3a, 0xc4, 0xb1, 0x99, 0x72, 0xd3, 0x2c, 0x74, 0xb1, 0x53, 0xfb, 0x39, 0x66, 0xca, 0x5e, 0xfe, 0x00, 0x7e, 0x2c, 0xe1, 0x97, 0xd7, 0x89, 0xc3, 0xc7, 0xa5, 0x65, 0xde, 0xb6, 0x32, 0x88, 0xa1, 0xfd, 0x49, 0x49, 0xd3, 0xd4, 0xb7, 0x0d, 0x2a, 0x5f, 0x0f, 0x96, 0x95, 0x73, 0xfa, 0x39, 0x69, 0xaa, 0xa2, 0x7a, 0xdc, 0x60, 0x47, 0xf6, 0xdc, 0x91, 0x0b, 0xec, 0x1b, 0xe1, 0xda, 0x2e, 0x16, 0x3c, 0x21, 0xa0, 0x6a, 0xc2, 0x99, 0x28, 0x39, 0x43, 0xaa, 0xbe, 0x8f, 0x0c, 0x7d, 0x4a, 0xe0, 0x0b, 0xf2, 0xbe, 0x24, 0x48, 0xc9, 0x99, 0x30, 0xe2, 0xae, 0x27, 0x90, 0xe7, 0xda, 0x1d, 0x8a, 0x55, 0x8f, 0xbc, 0xb0, 0xa5, 0xb9, 0x1c, 0xa4, 0x61, 0x71, 0x49, 0xf9, 0xc2, 0x6d, 0xc0, 0x3b, 0xea, 0x06, 0x89, 0x15, 0x23, 0xa4, 0x36, 0xb3, 0xd6, 0xfa, 0x16, 0xa5, 0x36, 0x85, 0xe2, 0x69, 0x96, 0xb5, 0xe8, 0xdf, 0x0d, 0x55, 0xfa, 0x15, 0x6d, 0xfc, 0xd5, 0xc6, 0x46, 0xb4, 0xcc, 0x9e, 0x2c, 0x29, 0xc6, 0xcd, 0x23, 0x5f, 0x8a, 0xdf, 0x1c, 0x76, 0x16, 0xad, 0xd3, 0x84, 0x37, 0x37, 0x37, 0x9e, 0x9e, 0xb4, 0x3c, 0xf9, 0xd4, 0x24, 0x2f, 0xd9, 0xb1, 0xe1, 0xb4, 0x93, 0x98, 0x38, 0x73, 0xc0, 0x6f, 0x3a, 0x70, 0x19, 0x5d, 0xa6, 0x48, 0x72, 0x30, 0x67, 0x88, 0x79, 0x1a, 0x3f, 0xfa, 0x4e, 0x7c, 0xcd, 0x4a, 0xe3, 0x05, 0xd6, 0xd7, 0xae, 0xf5, 0xc8, 0x04, 0xe7, 0x27, 0x2c, 0x04, 0x53, 0xa3, 0x08, 0x5f, 0xed, 0x08, 0x88, 0xd0, 0xd7, 0x37, 0xed, 0xb4, 0x9c, 0xc5, 0x91, 0x89, 0x9b, 0x76, 0x23, 0xc7, 0xcd, 0xce, 0xb7, 0x50, 0x7d, 0x10, 0xec, 0x8e, 0x0f, 0xd4, 0x46, 0xe8, 0xd3, 0x26, 0xc3, 0x92, 0x3b, 0xa9, 0xf7, 0x3d, 0x44, 0x64, 0x7e, 0xd2, 0x76, 0xf3, 0x0e, 0xf4, 0x52, 0x70, 0x5d, 0xa4, 0x32, 0x20, 0x70, 0xd4, 0x5b, 0xbb, 0x66, 0xc6, 0x23, 0xe6, 0x8e, 0xed, 0xd2, 0x90, 0x4f, 0x07, 0xc3, 0xe9, 0x7a, 0x8c, 0x97, 0xe6, 0x66, 0xe8, 0x9b, 0x76, 0x8c, 0xc1, 0x78, 0x86, 0xfc, 0xd3, 0xda, 0x66, 0x76, 0xf9, 0x8e, 0x12, 0x0c, 0x4e, 0x48, 0x57, 0xa7, 0xae, 0x89, 0x3e, 0x92, 0x83, 0xd9, 0xc3, 0x95, 0x29, 0x78, 0x26, 0x07, 0x8f, 0xfc, 0xbc, 0x92, 0x85, 0xe7, 0xcb, 0x59, 0xf5, 0xb5, 0xe9, 0xa0, 0x75, 0x5f, 0xc3, 0xcb, 0xba, 0xaf, 0xc1, 0x80, 0x52, 0x84, 0x35, 0x34, 0x4e, 0xbe, 0x2c, 0xa3, 0x73, 0x7d, 0x2c, 0x5a, 0x1f, 0x5c, 0x9e, 0x9f, 0x7c, 0x73, 0xb1, 0xf1, 0x94, 0x8f, 0xb2, 0xce, 0xff, 0xcd, 0xba, 0x62, 0xcd, 0x12, 0x96, 0xe9, 0x93, 0x75, 0xf2, 0xcd, 0x60, 0xd0, 0x3b, 0xba, 0x3c, 0xa5, 0x2e, 0x97, 0x03, 0xf8, 0xb3, 0x05, 0x8b, 0xbd, 0x4f, 0xad, 0x00, 0x7a, 0xdf, 0x49, 0xed, 0x68, 0xa9, 0x49, 0x82, 0xe4, 0x01, 0xc4, 0xc3, 0x14, 0xf4, 0x44, 0xde, 0x23, 0x03, 0xed, 0x41, 0xc3, 0x37, 0x4d, 0x9e, 0xcb, 0xd3, 0x4d, 0xfa, 0x14, 0x7e, 0x92, 0x16, 0xd4, 0xe2, 0x3e, 0x58, 0xfa, 0x0d, 0x2e, 0x51, 0xf3, 0xa1, 0x14, 0x53, 0x62, 0xd0, 0x9a, 0x0c, 0x0e, 0x96, 0x1f, 0x8a, 0x13, 0x1b, 0xb0, 0x0b, 0x97, 0xde, 0xa0, 0x2b, 0x0c, 0x6b, 0x2b, 0x14, 0x34, 0xb5, 0xe1, 0x7a, 0x23, 0x13, 0x8d, 0xa1, 0xf1, 0x66, 0x08, 0x3f, 0x32, 0xd0, 0xe8, 0x6a, 0xd3, 0x29, 0xb2, 0xd6, 0x5b, 0x46, 0xd1, 0xc1, 0x9a, 0x34, 0x8e, 0xcf, 0xf2, 0xe5, 0xf4, 0x86, 0x0d, 0xac, 0xba, 0x1f, 0x82, 0x78, 0xb9, 0x46, 0x5f, 0x4d, 0xef, 0x06, 0x98, 0xa4, 0x47, 0x82, 0xf4, 0x8e, 0xea, 0x3d, 0x45, 0x82, 0xc1, 0x21, 0x56, 0x6f, 0x38, 0xe9, 0x62, 0xfc, 0xbb, 0x60, 0xa0, 0xaf, 0xd0, 0x40, 0x86, 0x1c, 0x38, 0x25, 0x37, 0x5a, 0x56, 0xcd, 0xe6, 0xf2, 0xd7, 0x38, 0x7b, 0x24, 0x77, 0xa9, 0xf8, 0xef, 0xa9, 0xfe, 0xd3, 0xd0, 0x74, 0x9d, 0xd0, 0xab, 0x62, 0x44, 0x86, 0x3e, 0xa7, 0xa0, 0x72, 0xe1, 0xe7, 0x2a, 0x9a, 0xa5, 0x9e, 0xf6, 0x73, 0x10, 0xd3, 0x64, 0xda, 0xf5, 0xb2, 0xae, 0x8e, 0xd2, 0x05, 0x73, 0x58, 0xc2, 0x64, 0xa2, 0x08, 0x0b, 0x11, 0x04, 0x58, 0x11, 0xb5, 0x80, 0x5c, 0x8f, 0x87, 0x65, 0x3e, 0x5b, 0x56, 0xa4, 0x0b, 0xa0, 0x53, 0x14, 0x8b, 0x6b, 0x36, 0x88, 0x74, 0x25, 0x7c, 0x09, 0xa3, 0x46, 0x4e, 0x02, 0x6a, 0x14, 0xaa, 0x03, 0xb0, 0xed, 0x49, 0xfb, 0x36, 0x04, 0xc0, 0x51, 0x44, 0xf1, 0x4f, 0xe0, 0xce, 0xf2, 0x58, 0x34, 0xd4, 0x82, 0xd2, 0x92, 0xee, 0x14, 0xec, 0xcd, 0x3f, 0x3f, 0x3d, 0xab, 0xda, 0xee, 0xa8, 0x77, 0x1d, 0x59, 0x77, 0x2d, 0x51, 0xdd, 0x6a, 0x8d, 0x21, 0xce, 0xd6, 0x9a, 0xa9, 0xac, 0xd9, 0x02, 0x43, 0xbc, 0x25, 0xc3, 0x47, 0xf3, 0x31, 0xfe, 0x4e, 0x4c, 0xb9, 0x3c, 0x46, 0x11, 0x7e, 0x2e, 0xb4, 0x92, 0x3d, 0x8c, 0xfe, 0xaa, 0x64, 0x94, 0xfa, 0x97, 0x1a, 0x43, 0x7f, 0x97, 0x70, 0xde, 0x19, 0x1f, 0x31, 0x9d, 0x46, 0xed, 0x90, 0x59, 0xcb, 0x6f, 0x36, 0xb5, 0xc3, 0x8d, 0xe8, 0xd3, 0x13, 0x1e, 0x01, 0x63, 0x28, 0xdd, 0xac, 0x4a, 0xd5, 0x23, 0xf4, 0xb7, 0xc5, 0xdc, 0x4e, 0x93, 0x5f, 0x76, 0xbe, 0x61, 0x4a, 0x81, 0xf2, 0xd5, 0x1d, 0x6f, 0xed, 0xe9, 0xf4, 0x9f, 0xb1, 0x21, 0x76, 0xfd, 0xf6, 0x87, 0x9e, 0x65, 0x67, 0xe2, 0xc5, 0x25, 0x41, 0x52, 0x9a, 0x45, 0x01, 0xe7, 0xff, 0x28, 0x7f, 0xc1, 0x3b, 0xf0, 0x7d, 0x9a, 0x81, 0x66, 0x58, 0x6e, 0x28, 0x71, 0xa6, 0x59, 0x08, 0x46, 0x01, 0x79, 0xc7, 0x5a, 0x09, 0x96, 0x18, 0x70, 0x1c, 0x9b, 0xa8, 0x87, 0x8a, 0x33, 0x07, 0x6c, 0x3c, 0x56, 0xe4, 0x34, 0x36, 0x7d, 0x5c, 0x78, 0xf5, 0x33, 0x23, 0xc3, 0x74, 0x68, 0x0c, 0x02, 0x2f, 0x06, 0xb3, 0x20, 0x4b, 0x1f, 0xfa, 0x26, 0xb8, 0x6f, 0xd0, 0xd7, 0xdc, 0xe0, 0x26, 0x30, 0xc2, 0x40, 0x4f, 0x7b, 0xe2, 0x6c, 0xcd, 0x10, 0x16, 0xee, 0x2e, 0xad, 0x73, 0x7d, 0x7f, 0x23, 0x9a, 0x54, 0x8b, 0xf5, 0xed, 0x0d, 0xc6, 0xb0, 0x97, 0x5e, 0xea, 0xb9, 0x15, 0xf7, 0xbe, 0x17, 0x07, 0x73, 0x0b, 0xa3, 0x63, 0xf3, 0x59, 0x0a, 0x6e, 0x22, 0x9c, 0x1b, 0x55, 0xf1, 0x4d, 0xe4, 0x06, 0xf3, 0x86, 0x99, 0x06, 0xcc, 0x94, 0xc6, 0x1c, 0xd8, 0x3b, 0xae, 0xc5, 0x5f, 0x20, 0xb2, 0x2b, 0x55, 0x36, 0x82, 0x05, 0x61, 0xbb, 0xe0, 0x4a, 0x2f, 0x30, 0x29, 0x7d, 0x86, 0x9d, 0x9b, 0x8d, 0x7b, 0xc8, 0x43, 0xa6, 0x45, 0x0e, 0x22, 0xb2, 0x08, 0xe0, 0x5f, 0x8a, 0x4d, 0x71, 0x4d, 0xd5, 0x37, 0x77, 0x69, 0x91, 0x67, 0x04, 0x31, 0x7a, 0x17, 0x17, 0x29, 0x85, 0xf9, 0x3b, 0xef, 0x2e, 0xde, 0x9f, 0x74, 0x5c, 0xa7, 0xc8, 0x24, 0x15, 0x3f, 0x3a, 0x9d, 0x5f, 0xd3, 0x4b, 0xad, 0xa7, 0x19, 0x72, 0x1a, 0x82, 0x48, 0x1f, 0xb1, 0xda, 0x47, 0x40, 0x0c, 0x04, 0x15, 0x97, 0x98, 0x08, 0x39, 0xa8, 0x92, 0x92, 0x04, 0x20, 0x7d, 0x15, 0x95, 0xc2, 0x28, 0x09, 0x28, 0xd4, 0xfd, 0x46, 0x4d, 0x43, 0xea, 0x80, 0x93, 0xbb, 0x9d, 0xfd, 0x22, 0xa7, 0xfb, 0x1f, 0xaa, 0xf9, 0xda, 0x16, 0xc5, 0xba, 0xd8, 0x9b, 0xe2, 0x71, 0xfe, 0x88, 0x96, 0xcd, 0x5a, 0x5d, 0x00, 0xae, 0x95, 0x68, 0x8c, 0x57, 0x6b, 0xba, 0xbd, 0x94, 0x2e, 0x6a, 0x79, 0xbc, 0xdf, 0x71, 0xb9, 0xe5, 0xeb, 0x4c, 0xd5, 0xfc, 0x09, 0x3b, 0x3a, 0x0f, 0x6e, 0x6f, 0xdf, 0x01, 0xdf, 0xbe, 0x87, 0xea, 0x49, 0x7c, 0xa4, 0xd8, 0x16, 0x88, 0xd5, 0x9b, 0x35, 0xd7, 0xa3, 0xf4, 0xd8, 0x63, 0xc2, 0xf7, 0x2a, 0xc2, 0xe7, 0xf3, 0x11, 0xc3, 0x8a, 0x99, 0xb8, 0x6a, 0x03, 0xf0, 0x59, 0xb5, 0xa4, 0xcc, 0x69, 0xdb, 0x4a, 0xa3, 0xb5, 0x02, 0x8e, 0x82, 0xe0, 0xa6, 0x34, 0x2a, 0xc5, 0x5d, 0x4c, 0x0b, 0xc4, 0xf0, 0xb1, 0x51, 0x64, 0xf9, 0x52, 0xd7, 0xad, 0xa6, 0x6e, 0x83, 0x20, 0xb6, 0xc9, 0x28, 0x46, 0x2f, 0x61, 0x0c, 0x5e, 0x46, 0x71, 0x35, 0xf8, 0x6f, 0x8a, 0x64, 0xeb, 0xeb, 0xc7, 0x66, 0x27, 0xd5, 0xb1, 0x4d, 0x15, 0x4b, 0xf0, 0x37, 0x36, 0x67, 0x4c, 0xc4, 0x9f, 0x51, 0x3a, 0x48, 0xe1, 0xc0, 0xf6, 0x23, 0x31, 0x65, 0xd9, 0x24, 0x61, 0xd0, 0x36, 0x73, 0x1f, 0x61, 0x69, 0xd2, 0x48, 0xa1, 0x5c, 0x16, 0x77, 0x54, 0xf5, 0x2a, 0xfd, 0xb7, 0x38, 0x35, 0xd8, 0x9e, 0x87, 0x9c, 0x43, 0x40, 0xca, 0x3b, 0x33, 0xc4, 0xb4, 0xcd, 0x42, 0x90, 0xb1, 0xa2, 0x6f, 0x78, 0x16, 0x66, 0x82, 0xc6, 0xd2, 0x41, 0x00, 0x14, 0xd6, 0x62, 0xbd, 0x24, 0xfd, 0xbc, 0x24, 0xdc, 0xdc, 0xaa, 0x88, 0x47, 0xf6, 0x2f, 0xbd, 0xb8, 0x1c, 0xa5, 0xa9, 0xf6, 0x73, 0xc2, 0xf8, 0x60, 0x82, 0xe9, 0xb0, 0x41, 0x7c, 0x1c, 0x7b, 0x1e, 0xa6, 0x93, 0xca, 0x38, 0x67, 0xf7, 0x2e, 0xe7, 0x9c, 0xc4, 0xdc, 0xea, 0x0f, 0x33, 0x58, 0xa8, 0x34, 0x4e, 0x82, 0x87, 0xa1, 0x16, 0x57, 0x5a, 0x69, 0xd3, 0x62, 0xda, 0x82, 0xf5, 0xbd, 0xed, 0x9a, 0xdf, 0xba, 0x09, 0x3d, 0x44, 0xa9, 0x2a, 0x2b, 0x36, 0x25, 0xef, 0xef, 0x77, 0xdc, 0x67, 0x56, 0x45, 0xc3, 0x1b, 0xa0, 0x48, 0x59, 0xde, 0x8b, 0x67, 0x8b, 0x60, 0x8a, 0xdb, 0x60, 0xa3, 0xd6, 0xf0, 0xf2, 0xe8, 0xec, 0xf2, 0x9c, 0xf0, 0xf2, 0x10, 0x39, 0x3d, 0x2b, 0x39, 0x4b, 0x01, 0x7f, 0x86, 0x09, 0xec, 0x19, 0xc3, 0x4a, 0x52, 0xd2, 0xc8, 0xd8, 0x2f, 0xaf, 0xa6, 0xe6, 0x10, 0x64, 0x3e, 0x84, 0xec, 0x2b, 0x4e, 0x6f, 0xcb, 0x22, 0xa7, 0xc0, 0x91, 0x19, 0xbc, 0xda, 0x17, 0xcd, 0xe5, 0xc0, 0x57, 0xed, 0xb7, 0xb5, 0xcb, 0x82, 0x29, 0x44, 0xaa, 0xbf, 0x6b, 0x00, 0x03, 0xf3, 0x48, 0xe0, 0x01, 0x3d, 0x7e, 0x5e, 0x25, 0x06, 0x9b, 0x50, 0xec, 0x3a, 0x83, 0x85, 0xaa, 0x1d, 0xac, 0x38, 0x49, 0x83, 0x80, 0x2b, 0xb4, 0x3e, 0xbe, 0x5c, 0x8d, 0x68, 0x00, 0x1b, 0x9b, 0x2d, 0xb2, 0x26, 0xde, 0x96, 0x6c, 0x77, 0xd0, 0x08, 0xf5, 0xc0, 0xdf, 0x56, 0xd6, 0x85, 0xe9, 0x54, 0xb1, 0x71, 0xd6, 0x8a, 0x03, 0x3e, 0xef, 0xf2, 0x57, 0x87, 0x4b, 0xe4, 0x10, 0x8d, 0x2f, 0xc8, 0xf1, 0xb2, 0xd2, 0xc4, 0x4f, 0xe0, 0xf7, 0xc4, 0xfd, 0xc5, 0x48, 0x4a, 0x58, 0xc3, 0x99, 0xc4, 0x73, 0x50, 0x0b, 0x32, 0x2d, 0x14, 0x40, 0xcf, 0x2f, 0xe6, 0x73, 0x36, 0x27, 0xbc, 0x8c, 0x85, 0x63, 0x29, 0x9c, 0x3d, 0x71, 0x81, 0x46, 0xfd, 0x00, 0x7f, 0x06, 0x39, 0xa9, 0x3b, 0x7c, 0xa8, 0x26, 0x8c, 0x5e, 0x37, 0xb8, 0x07, 0x12, 0xb7, 0xd1, 0xd6, 0x9f, 0x0c, 0x1c, 0xce, 0x43, 0x98, 0xee, 0xdf, 0xd8, 0xb9, 0xea, 0x66, 0x99, 0xdd, 0xc2, 0x14, 0xfc, 0x72, 0x68, 0x4d, 0xf6, 0xc5, 0xe6, 0x17, 0xdc, 0x32, 0x17, 0xff, 0xc2, 0xfd, 0x97, 0xcd, 0x08, 0x88, 0x59, 0x7e, 0x87, 0x8e, 0x3c, 0x01, 0xf1, 0x76, 0x94, 0xd3, 0xd0, 0xec, 0xc6, 0xe6, 0x7e, 0xc0, 0xac, 0xcc, 0x06, 0x06, 0xd3, 0xd9, 0xf5, 0xa4, 0x6d, 0xb3, 0x79, 0xa0, 0x46, 0x47, 0xa4, 0x48, 0x14, 0x5b, 0x01, 0xa4, 0xa8, 0x22, 0x49, 0x53, 0xbd, 0x3c, 0x76, 0xb8, 0x24, 0xb2, 0x47, 0x93, 0x8d, 0xbe, 0x49, 0xd8, 0x2d, 0x4e, 0xf7, 0xa9, 0xc0, 0x4c, 0xea, 0xb5, 0xf9, 0x6d, 0x74, 0xc0, 0x4a, 0x0a, 0x39, 0xb2, 0x80, 0x08, 0x6c, 0x29, 0xbf, 0x64, 0xa2, 0x18, 0x9d, 0x0d, 0xfb, 0xc2, 0xba, 0x8d, 0x29, 0x03, 0x7c, 0xcb, 0x96, 0x72, 0x25, 0x99, 0x21, 0xb2, 0x79, 0x10, 0x78, 0xf6, 0x93, 0xef, 0x92, 0x5d, 0x88, 0xb3, 0x51, 0xe6, 0x87, 0x8d, 0x4d, 0xca, 0x9e, 0xc5, 0x0d, 0xcf, 0x7d, 0x66, 0x78, 0x5e, 0xe7, 0x85, 0x76, 0xa5, 0x5e, 0x1d, 0x75, 0xe0, 0x46, 0x3f, 0xc9, 0x03, 0x71, 0x78, 0x4c, 0xb0, 0xbf, 0x3c, 0xf7, 0xab, 0xbc, 0xc5, 0xfd, 0x37, 0xa4, 0xfa, 0xec, 0xa7, 0xb8, 0xa0, 0x31, 0xdd, 0xe5, 0x67, 0x2d, 0xae, 0xad, 0x5f, 0xcf, 0x02, 0xd5, 0xa2, 0x12, 0x56, 0xe7, 0x73, 0xc0, 0xcc, 0x63, 0x80, 0x42, 0x77, 0x9f, 0x86, 0x05, 0xe2, 0x27, 0x65, 0xc2, 0xe9, 0x38, 0x88, 0xe0, 0x60, 0x4e, 0x56, 0xba, 0xc2, 0x4a, 0xc0, 0x02, 0xcf, 0x42, 0xb1, 0x63, 0x4e, 0xdf, 0x00, 0x89, 0xa1, 0xaa, 0x8a, 0x3d, 0xc2, 0xbf, 0x6e, 0x3b, 0xda, 0x78, 0x66, 0x73, 0x70, 0xd8, 0xbc, 0x47, 0x78, 0x4c, 0x17, 0xd6, 0x0b, 0x71, 0xfe, 0xfa, 0x0e, 0xa9, 0x73, 0xb8, 0x5d, 0x3b, 0xd0, 0xb4, 0xf4, 0xf9, 0x48, 0x08, 0xad, 0x8c, 0x50, 0xa5, 0x6f, 0x96, 0x08, 0x00, 0x88, 0xe2, 0x8e, 0xbb, 0x46, 0x49, 0x63, 0xb3, 0x22, 0xc1, 0x39, 0xd7, 0x27, 0xec, 0x01, 0xd5, 0xb1, 0x13, 0xbb, 0x4c, 0xe0, 0x1a, 0x72, 0x9d, 0xd0, 0xb0, 0xc8, 0x6f, 0x13, 0xa6, 0x39, 0x32, 0x2c, 0x08, 0x79, 0x89, 0xf5, 0x28, 0xf1, 0xc5, 0x02, 0x97, 0xe3, 0xa6, 0x10, 0x98, 0xaf, 0xe0, 0x05, 0x5d, 0xb9, 0x43, 0xa5, 0x40, 0x36, 0x58, 0x5e, 0x98, 0xd2, 0xeb, 0x04, 0x96, 0xa0, 0x7d, 0x1c, 0xf8, 0xb8, 0x46, 0x08, 0xf4, 0x16, 0xbe, 0xf7, 0x86, 0x0e, 0x90, 0x9c, 0x57, 0x5c, 0x7d, 0xf7, 0xe6, 0x8b, 0x83, 0xa6, 0xfd, 0xde, 0x9b, 0x53, 0x77, 0xef, 0x7d, 0xe0, 0x44, 0x9f, 0xdf, 0x78, 0x12, 0x68, 0x89, 0x1c, 0x60, 0xd1, 0x21, 0x10, 0x15, 0xbb, 0xc2, 0x30, 0x94, 0xd5, 0xf4, 0x72, 0x51, 0x03, 0xd5, 0x9e, 0x5a, 0x1c, 0x63, 0x4e, 0xe3, 0x21, 0x6b, 0x0d, 0xb5, 0x70, 0xae, 0x6a, 0x18, 0x5b, 0xf0, 0x57, 0x69, 0xa0, 0xd0, 0x65, 0x15, 0xc9, 0x07, 0x54, 0xa5, 0x32, 0x30, 0xe3, 0xbf, 0xe1, 0x1a, 0x58, 0xd2, 0xc1, 0xf1, 0x78, 0x08, 0xb4, 0x27, 0x2d, 0xad, 0x92, 0xf9, 0x6f, 0x98, 0x06, 0x0c, 0x1a, 0x6d, 0x85, 0x79, 0x60, 0xf4, 0x2d, 0x4f, 0xe5, 0xe4, 0x66, 0x82, 0xa6, 0x4e, 0x84, 0x8b, 0xbc, 0x0d, 0x26, 0x0d, 0xc2, 0x8f, 0xbb, 0x9a, 0x01, 0x77, 0x77, 0x88, 0x4e, 0xd0, 0x5a, 0x09, 0x18, 0x82, 0xec, 0xb0, 0x48, 0x4d, 0x95, 0x5d, 0x2a, 0xe0, 0xf0, 0x9c, 0xb4, 0x25, 0x86, 0x75, 0xac, 0xd9, 0x58, 0xbc, 0x78, 0x17, 0x2b, 0x2f, 0xd0, 0xf0, 0x80, 0x13, 0x9e, 0xc4, 0x3a, 0xd3, 0x1f, 0x98, 0x2e, 0x82, 0xb5, 0x6c, 0x19, 0x36, 0x50, 0xc4, 0x62, 0x0d, 0xb4, 0x02, 0xa4, 0xa9, 0x44, 0xce, 0x63, 0xee, 0x2b, 0x07, 0x9f, 0x6f, 0x75, 0xc5, 0xa6, 0xc1, 0x28, 0x97, 0xfb, 0x0c, 0xa1, 0xd2, 0xfa, 0x5a, 0x04, 0x3e, 0x06, 0x3f, 0x35, 0x4f, 0xb6, 0x20, 0xb0, 0xbf, 0xec, 0xef, 0xef, 0x62, 0xa8, 0x3b, 0xec, 0x4a, 0x62, 0x76, 0xe7, 0x3a, 0x0f, 0x8c, 0xf7, 0xa0, 0x0c, 0x65, 0x7b, 0x3a, 0x77, 0xcb, 0x9c, 0xc6, 0xa9, 0x84, 0x49, 0xd7, 0xa8, 0xe1, 0x60, 0xd0, 0x11, 0x31, 0x4e, 0xcb, 0x80, 0xef, 0x82, 0x13, 0xd8, 0x84, 0xe0, 0x4c, 0x1f, 0x48, 0xea, 0x82, 0xc5, 0xa4, 0x4d, 0xa7, 0x08, 0x17, 0xa6, 0x43, 0x4d, 0x6c, 0x74, 0xd6, 0xb0, 0xfb, 0x2b, 0xef, 0xc9, 0xab, 0xfe, 0x5e, 0xed, 0x9e, 0x54, 0xb3, 0x79, 0xef, 0x7e, 0xf8, 0x44, 0xc8, 0xe3, 0xfa, 0xec, 0x3d, 0xa5, 0x7c, 0x28, 0xbb, 0xa1, 0x4e, 0x2c, 0xea, 0x7d, 0x46, 0xbf, 0x0e, 0xbb, 0x08, 0x11, 0xa1, 0x9b, 0x26, 0xf2, 0x9c, 0xcc, 0x5a, 0x53, 0x33, 0x2a, 0xe6, 0xbe, 0x42, 0xde, 0xc1, 0x90, 0xec, 0xc6, 0x5e, 0x2c, 0x66, 0x69, 0xb0, 0xb0, 0x47, 0x33, 0x6b, 0x93, 0x87, 0x64, 0xb4, 0xa4, 0xf0, 0x34, 0x2a, 0x87, 0x88, 0x21, 0xb5, 0xda, 0x6f, 0xee, 0xf8, 0xca, 0xc5, 0x3b, 0x0e, 0x3f, 0x68, 0x6e, 0x46, 0x73, 0xed, 0xbc, 0x78, 0xcf, 0x69, 0xc6, 0xf5, 0xed, 0xa1, 0xdf, 0x79, 0x21, 0x62, 0xca, 0xe7, 0x47, 0x81, 0x08, 0x24, 0x95, 0x4e, 0x33, 0x56, 0x39, 0xde, 0xa7, 0xa3, 0x22, 0x2f, 0xf3, 0x09, 0x67, 0xaa, 0x39, 0xe6, 0xd1, 0xe9, 0xe9, 0x20, 0xba, 0x4f, 0x86, 0x5a, 0x12, 0xdb, 0xf7, 0x7d, 0xc8, 0xc4, 0x43, 0x30, 0x30, 0x52, 0xa4, 0x49, 0x85, 0x5b, 0xa6, 0xa1, 0x50, 0x84, 0x88, 0xa2, 0xbe, 0x74, 0x02, 0xa0, 0x42, 0xea, 0x3b, 0xb6, 0xf6, 0x9c, 0xb1, 0x60, 0x5a, 0x24, 0x79, 0x20, 0x1e, 0xce, 0x13, 0x50, 0xb1, 0xc2, 0x74, 0x42, 0x32, 0x7c, 0x18, 0x4b, 0xd7, 0x34, 0xf6, 0x0c, 0x00, 0xdb, 0x41, 0x0d, 0x45, 0x3c, 0x2a, 0xb7, 0xe8, 0x2a, 0xf3, 0x6a, 0x55, 0x86, 0x09, 0xf6, 0x19, 0xc5, 0x28, 0x7f, 0xdd, 0x69, 0x97, 0x8d, 0xf3, 0x82, 0x32, 0x90, 0x9c, 0x7e, 0x46, 0xd4, 0xf9, 0x73, 0x59, 0x50, 0xd1, 0x15, 0xc1, 0x97, 0xfa, 0xfc, 0xf4, 0xfe, 0x86, 0xc3, 0xb5, 0x7a, 0x0a, 0x28, 0x9c, 0xa8, 0xca, 0x96, 0x4b, 0x7b, 0xa4, 0x6b, 0x06, 0xce, 0xdf, 0x8a, 0x1b, 0xe7, 0x34, 0x82, 0x50, 0x87, 0x72, 0x1e, 0xb6, 0xa4, 0x54, 0x72, 0x14, 0xde, 0xa4, 0xd3, 0x96, 0xf6, 0xb6, 0x06, 0xdc, 0x81, 0x84, 0x13, 0xdd, 0x58, 0x9a, 0x8d, 0x88, 0xcc, 0x82, 0xef, 0x68, 0xe4, 0xf5, 0x6c, 0xa6, 0xaa, 0x27, 0xdf, 0x01, 0xdb, 0x42, 0x7d, 0x6d, 0x98, 0x18, 0x8e, 0xde, 0xd8, 0x88, 0x27, 0x91, 0x64, 0xa9, 0x4c, 0xd3, 0x4d, 0x54, 0x60, 0x7e, 0x61, 0x28, 0xa9, 0x3e, 0x15, 0x73, 0x03, 0xac, 0xd2, 0x57, 0xd7, 0xfa, 0x54, 0xcb, 0xf3, 0x00, 0x28, 0x1c, 0x57, 0x41, 0x58, 0xe9, 0x6b, 0x03, 0xce, 0xa7, 0x48, 0x56, 0x20, 0x1f, 0xc5, 0x09, 0xc6, 0xca, 0xbf, 0xc7, 0x74, 0x3c, 0xf5, 0x48, 0x97, 0x7b, 0x75, 0x73, 0xfc, 0xc1, 0x4e, 0x6f, 0x98, 0xc4, 0xd8, 0x61, 0xe9, 0xb0, 0x42, 0x85, 0x29, 0x5c, 0x99, 0xd2, 0x52, 0x98, 0xf2, 0x35, 0xbf, 0x79, 0x4d, 0x9a, 0x16, 0x1e, 0xed, 0xc5, 0xd1, 0x87, 0xeb, 0x77, 0x51, 0xb4, 0x83, 0x5d, 0x22, 0x9e, 0x53, 0x99, 0x42, 0x1c, 0xa1, 0x36, 0x8a, 0xde, 0x6a, 0x6a, 0xd4, 0x9c, 0xfd, 0x75, 0x99, 0xd5, 0x1b, 0xb8, 0x84, 0x7c, 0xf3, 0x24, 0x3f, 0x45, 0xf4, 0x72, 0x99, 0x74, 0x2d, 0xb3, 0x5a, 0xdb, 0x7b, 0xf1, 0x89, 0xf4, 0x7a, 0x5c, 0x3d, 0x07, 0x57, 0xfb, 0x89, 0x30, 0x66, 0x19, 0x86, 0xe7, 0x90, 0xd9, 0xca, 0x74, 0x15, 0x3f, 0x48, 0xe3, 0xa5, 0xd4, 0x4f, 0x09, 0x1d, 0xfc, 0x55, 0xb3, 0x3d, 0xef, 0xd5, 0xdb, 0xe3, 0xc6, 0x70, 0x2f, 0x5e, 0xee, 0x6f, 0x7d, 0xc2, 0x24, 0xbd, 0x1c, 0xbd, 0x23, 0xe2, 0x45, 0x08, 0xa2, 0xe6, 0x7c, 0x5f, 0x60, 0xd9, 0xaa, 0xfa, 0x19, 0x72, 0x79, 0xc8, 0x2d, 0xab, 0x2f, 0xab, 0x31, 0x66, 0x6b, 0x19, 0xd4, 0x8d, 0x42, 0xd5, 0xfd, 0x7f, 0xfc, 0xd3, 0x2f, 0xab, 0xfd, 0xf1, 0x67, 0xf6, 0x13, 0x4f, 0xa8, 0xa9, 0xa5, 0x4d, 0xf4, 0x57, 0x36, 0x53, 0x5a, 0x89, 0x8c, 0x37, 0x7a, 0xed, 0x8f, 0x6b, 0xa6, 0xf5, 0x14, 0xe9, 0xfc, 0x61, 0xdc, 0x7e, 0x11, 0x9e, 0x32, 0x37, 0x3d, 0x58, 0x02, 0x25, 0x8f, 0x1d, 0x75, 0x40, 0xa1, 0xa9, 0x4c, 0x67, 0xbe, 0x71, 0x5b, 0xe3, 0x38, 0xed, 0xa0, 0x24, 0xf0, 0x5d, 0xea, 0x26, 0x47, 0x77, 0x36, 0xe7, 0x56, 0xd1, 0xfc, 0x51, 0x15, 0xa5, 0xf2, 0xe5, 0x34, 0x6b, 0xf1, 0x5d, 0x4a, 0x02, 0xd1, 0x3f, 0xe0, 0x04, 0xba, 0xd5, 0x7d, 0xfe, 0xcf, 0xba, 0x1f, 0x13, 0x34, 0x0c, 0x9c, 0xf1, 0xc7, 0x3f, 0x6e, 0x63, 0x45, 0x50, 0xa7, 0x39, 0x44, 0x4e, 0x0d, 0x09, 0xcc, 0xa9, 0x1a, 0x05, 0x69, 0x15, 0x38, 0xaf, 0x7e, 0x10, 0x8b, 0x8d, 0xbb, 0xa8, 0x37, 0xfe, 0xb3, 0x8f, 0xff, 0xfd, 0x71, 0xbb, 0xb7, 0xff, 0xb3, 0xf9, 0xe8, 0x1f, 0xb7, 0x3f, 0xfe, 0x71, 0xa7, 0x13, 0x2c, 0xab, 0xb3, 0xb5, 0xff, 0x4e, 0x86, 0x22, 0xaa, 0xb3, 0xd9, 0xa3, 0x94, 0x69, 0x48, 0x84, 0xd1, 0xf6, 0xba, 0xa4, 0xce, 0xd9, 0x3e, 0x3e, 0x12, 0xfa, 0xad, 0x1a, 0x9a, 0xaa, 0x36, 0xbb, 0x54, 0xe6, 0x70, 0x9f, 0xf3, 0xcb, 0xe2, 0x53, 0xe1, 0xfa, 0x3f, 0xad, 0x1f, 0xf0, 0x78, 0x21, 0x42, 0x31, 0xb9, 0xb4, 0x81, 0x68, 0x29, 0x0a, 0xb1, 0xe1, 0xef, 0x86, 0xa4, 0x45, 0x81, 0x34, 0x8b, 0xa3, 0xc6, 0xa6, 0x0f, 0x87, 0xe6, 0x27, 0x59, 0xe2, 0x15, 0x62, 0xc5, 0x8c, 0x11, 0x95, 0x08, 0xd8, 0x5d, 0x64, 0xb8, 0x02, 0xbc, 0x69, 0xc2, 0xd6, 0x12, 0xcd, 0xa2, 0xd9, 0xdb, 0x9e, 0xe9, 0xd8, 0xba, 0xbb, 0xc9, 0x2d, 0xfe, 0xba, 0xd4, 0x86, 0xf6, 0x56, 0xa0, 0xc0, 0x48, 0x69, 0x69, 0x63, 0x2f, 0xf4, 0x33, 0x89, 0xbb, 0x50, 0x7d, 0x3f, 0xc9, 0xb8, 0x32, 0x0f, 0x45, 0xf2, 0xe2, 0x21, 0x76, 0xa2, 0xac, 0x35, 0xf6, 0x32, 0x5d, 0x9a, 0x86, 0x16, 0x6d, 0x2a, 0x2e, 0x5b, 0x36, 0xc4, 0xdd, 0x0a, 0x67, 0x13, 0x64, 0xa3, 0x68, 0x73, 0x56, 0x38, 0x75, 0xb9, 0x28, 0x16, 0xb3, 0x47, 0xab, 0xa4, 0xe7, 0x54, 0xc5, 0x52, 0x15, 0x2e, 0xfd, 0xd4, 0xc9, 0x70, 0x93, 0xb0, 0x5e, 0xcf, 0x8b, 0x45, 0x02, 0x11, 0x8d, 0x1f, 0x81, 0x13, 0x32, 0xb0, 0xab, 0xc1, 0x89, 0x54, 0x0f, 0x81, 0xf0, 0x1a, 0xa0, 0xb3, 0xb5, 0xde, 0x5a, 0xb4, 0x4e, 0x95, 0xf3, 0x64, 0xd6, 0x45, 0xe3, 0xb8, 0xbc, 0xd9, 0x08, 0x79, 0x21, 0xad, 0xe3, 0xcf, 0x32, 0x2a, 0xe9, 0xcc, 0x41, 0x12, 0x93, 0x39, 0xd4, 0x2a, 0x6f, 0xf5, 0x05, 0x83, 0x6a, 0x60, 0x92, 0x60, 0xcf, 0x44, 0x92, 0x6b, 0x3f, 0xe9, 0xa1, 0xb1, 0x48, 0x3f, 0xfd, 0x0f, 0x7e, 0xd6, 0x8b, 0x63, 0xe0, 0x93, 0x9c, 0xe5, 0xd5, 0xe3, 0x02, 0x28, 0x2b, 0x44, 0xb5, 0x97, 0x37, 0xe6, 0x43, 0x87, 0x52, 0x80, 0xe2, 0xf2, 0x96, 0x03, 0xa5, 0xe3, 0xdc, 0xf4, 0xfd, 0xb6, 0x7e, 0x94, 0xae, 0x30, 0xd4, 0xde, 0xff, 0xec, 0x3a, 0x63, 0x09, 0x3e, 0x4a, 0x38, 0x05, 0x08, 0xcd, 0xcb, 0x22, 0x9f, 0x95, 0x35, 0x68, 0x2d, 0xa9, 0x84, 0x46, 0xef, 0xb6, 0x71, 0xd1, 0xf0, 0x37, 0xcb, 0x14, 0x39, 0x71, 0x9c, 0x05, 0x52, 0x8c, 0xcb, 0x40, 0x04, 0x08, 0x65, 0x9c, 0x76, 0xbc, 0x06, 0x4a, 0x0e, 0x48, 0x28, 0x6b, 0x1c, 0xd4, 0xe6, 0xbc, 0xaa, 0x3d, 0x45, 0xed, 0xc1, 0xf6, 0x5c, 0x02, 0xa9, 0x42, 0xa2, 0x7a, 0x76, 0xbb, 0x0c, 0xa7, 0x5f, 0x3a, 0x52, 0x0e, 0x46, 0xca, 0xe3, 0x82, 0xb7, 0x34, 0x14, 0x0f, 0x4f, 0xa6, 0x08, 0xf5, 0x82, 0xda, 0x07, 0x56, 0xbb, 0xc3, 0x5d, 0xca, 0x9e, 0x68, 0xdd, 0xdc, 0x70, 0x82, 0x60, 0x3c, 0x36, 0x3a, 0x5c, 0xdc, 0x14, 0xa0, 0xc9, 0xfb, 0x75, 0x73, 0x83, 0x77, 0x11, 0xe3, 0xa2, 0xc2, 0x53, 0xfc, 0x8c, 0xb9, 0xec, 0x0e, 0x74, 0xe4, 0x27, 0xc4, 0x3b, 0xc4, 0x84, 0xa0, 0x5e, 0x5c, 0xf6, 0x3c, 0xea, 0xb8, 0xb6, 0x05, 0xd3, 0x1c, 0x0f, 0xca, 0xd9, 0xb6, 0xc4, 0x5c, 0x54, 0x0c, 0x91, 0x66, 0x88, 0xa9, 0x03, 0xf4, 0xb1, 0xd9, 0xef, 0x6f, 0xa2, 0xfc, 0xd9, 0x84, 0x3f, 0x52, 0xa7, 0x41, 0x4c, 0xb3, 0x0b, 0x21, 0x30, 0x2d, 0xfc, 0x16, 0xfa, 0xf3, 0xa4, 0x63, 0xaf, 0xd3, 0xd5, 0xed, 0x6f, 0x4b, 0x4a, 0x25, 0x2e, 0xc0, 0x32, 0x28, 0xb8, 0x26, 0x1b, 0xd1, 0xee, 0x8d, 0xba, 0x13, 0x48, 0x2a, 0x94, 0x10, 0x49, 0x29, 0xf8, 0x1f, 0x8d, 0x7e, 0x96, 0x68, 0xa2, 0x93, 0x27, 0x0d, 0x17, 0x91, 0x56, 0x8a, 0xba, 0x46, 0xf5, 0xf0, 0xf1, 0x4a, 0xdb, 0x7c, 0x6f, 0xa7, 0x71, 0x7c, 0x29, 0x1c, 0xf8, 0x18, 0xac, 0x1c, 0x02, 0x6b, 0xc5, 0x6c, 0x4a, 0xbf, 0x1e, 0x4b, 0x1c, 0xa3, 0x1c, 0x48, 0x6f, 0xc2, 0xcf, 0xb1, 0xb8, 0x32, 0x0a, 0xa4, 0xd3, 0x66, 0x50, 0x72, 0xc7, 0x3d, 0xc5, 0x87, 0x3f, 0x42, 0xf9, 0x58, 0x92, 0x6d, 0x4d, 0xe4, 0x90, 0x98, 0xd6, 0x29, 0xa2, 0x95, 0xc6, 0x9c, 0xcd, 0x45, 0x66, 0x98, 0xa4, 0x77, 0x84, 0x3c, 0x58, 0xc6, 0x7d, 0x64, 0x9c, 0x5e, 0xce, 0x14, 0x60, 0xcd, 0x88, 0x77, 0x0b, 0x3b, 0xff, 0xe6, 0xe4, 0x4a, 0x54, 0x4d, 0x72, 0x26, 0xd9, 0x26, 0xd5, 0x7e, 0x0f, 0x77, 0x34, 0x4a, 0x5f, 0xec, 0x91, 0xed, 0x88, 0xfb, 0x56, 0xde, 0xc4, 0x3b, 0xfb, 0x2f, 0x64, 0xda, 0x8a, 0x7e, 0x46, 0x3a, 0xd8, 0x1a, 0xff, 0x6a, 0x73, 0x93, 0x13, 0x1f, 0xd0, 0xcd, 0xe0, 0xf1, 0x78, 0xf2, 0xf9, 0xe1, 0xb3, 0x5f, 0xac, 0x85, 0x53, 0x1e, 0xd5, 0x0a, 0xd1, 0x56, 0xc9, 0xd4, 0xab, 0x8d, 0x52, 0x33, 0xdd, 0x46, 0x1b, 0xdd, 0x5a, 0x1b, 0x35, 0xaa, 0x43, 0x8a, 0x57, 0xf4, 0x9f, 0x10, 0xbc, 0x10, 0x6a, 0xf4, 0x0a, 0xdc, 0x41, 0xeb, 0x8a, 0x11, 0x87, 0xd5, 0xd9, 0x1d, 0xce, 0x66, 0xc4, 0x06, 0xdd, 0x23, 0x1f, 0x94, 0x86, 0xeb, 0x75, 0x88, 0xea, 0xdc, 0x91, 0x25, 0x91, 0x17, 0x91, 0xcc, 0x11, 0xa7, 0x11, 0x29, 0x4f, 0x03, 0x68, 0xec, 0x5e, 0xa3, 0xc3, 0x5c, 0x0e, 0xbd, 0x8c, 0x13, 0xf9, 0xa6, 0xc1, 0x4d, 0x25, 0xdf, 0x8c, 0x93, 0xe7, 0x69, 0xaf, 0x0b, 0x48, 0xf6, 0x82, 0x95, 0x04, 0x67, 0x03, 0x3c, 0x2f, 0x00, 0xe1, 0x74, 0x2b, 0x1c, 0x0e, 0x25, 0xfa, 0x8d, 0x92, 0x94, 0x81, 0xb4, 0xe0, 0x6c, 0x31, 0x82, 0xe7, 0xdd, 0x03, 0x20, 0x85, 0x4d, 0xa4, 0x03, 0xb1, 0x1b, 0xbd, 0x86, 0x18, 0x18, 0x2f, 0x78, 0xd5, 0xdf, 0x3a, 0x50, 0x88, 0xdd, 0x6e, 0xf4, 0x4d, 0xb6, 0xc4, 0xf3, 0xc0, 0x45, 0x7f, 0x33, 0xf8, 0xd6, 0x2b, 0x96, 0xc3, 0x37, 0xf6, 0x76, 0xf1, 0x8d, 0xf3, 0x01, 0x3f, 0x75, 0x9f, 0xcf, 0x26, 0xf0, 0x66, 0xe8, 0xb9, 0x97, 0xf8, 0x1c, 0x50, 0xdc, 0xb8, 0x9a, 0x95, 0x4a, 0x54, 0x2b, 0x66, 0xb2, 0xb7, 0x17, 0x98, 0x49, 0xf7, 0x17, 0x7f, 0xe8, 0x82, 0x5c, 0xae, 0x48, 0x4c, 0xd8, 0x47, 0x8a, 0x08, 0x87, 0xca, 0x08, 0x0c, 0x60, 0xf4, 0xa7, 0x64, 0xbe, 0x0c, 0xfc, 0xf0, 0x9c, 0x2e, 0x73, 0x05, 0xe1, 0xde, 0x55, 0x84, 0x27, 0xf0, 0x72, 0x67, 0x77, 0x7b, 0xf3, 0x45, 0x7f, 0xaf, 0xbf, 0x63, 0xd2, 0xfa, 0x80, 0x0e, 0xee, 0xb0, 0x0b, 0x0a, 0x66, 0x51, 0x04, 0x42, 0x0f, 0x94, 0xd0, 0x92, 0x66, 0x30, 0x8e, 0x03, 0x73, 0x21, 0x68, 0xf5, 0x36, 0xa1, 0x07, 0x41, 0x2d, 0xb6, 0xdd, 0xfa, 0xb0, 0x7e, 0xa0, 0xeb, 0x2a, 0x62, 0x65, 0x50, 0x61, 0x8b, 0xf8, 0x99, 0x30, 0xc3, 0x99, 0xdc, 0x23, 0xc3, 0xf4, 0x6f, 0xcb, 0xb4, 0x02, 0x2d, 0x00, 0x99, 0x0a, 0x7a, 0xcf, 0x14, 0x36, 0x9f, 0x20, 0xc3, 0x68, 0x1d, 0x78, 0x23, 0x02, 0x6e, 0x49, 0x9e, 0x3c, 0xe5, 0x4f, 0xdb, 0x40, 0x20, 0xd7, 0xa0, 0xa5, 0xc4, 0xbb, 0x22, 0x6e, 0x57, 0x03, 0x76, 0x64, 0x36, 0xa2, 0x2e, 0x88, 0x60, 0xe4, 0xdd, 0xa1, 0xc7, 0xde, 0xef, 0x4e, 0x2b, 0xdd, 0x6a, 0x08, 0x36, 0x42, 0x83, 0x2e, 0x9a, 0x5d, 0x62, 0xb1, 0xed, 0xe5, 0x07, 0x5c, 0xaf, 0xc2, 0xde, 0x27, 0x5a, 0xb7, 0xc7, 0x9d, 0xec, 0x3e, 0xd4, 0x4e, 0x5c, 0x50, 0xe1, 0xb1, 0x5e, 0x8c, 0x63, 0x0b, 0x0c, 0xe5, 0x47, 0x2c, 0x0a, 0x0b, 0xff, 0x56, 0xa0, 0xd2, 0xac, 0xce, 0x84, 0x50, 0xfc, 0x8f, 0x3a, 0x00, 0x08, 0xff, 0xab, 0xd1, 0x2b, 0xb9, 0xb5, 0x4d, 0x66, 0xb3, 0x99, 0xac, 0x8c, 0xf9, 0xab, 0xa9, 0x6c, 0xf7, 0xb7, 0xa7, 0xb2, 0x9d, 0xe7, 0x52, 0x99, 0x25, 0x32, 0xbc, 0x67, 0x2b, 0x48, 0x8c, 0x8c, 0x20, 0x16, 0xbd, 0x2d, 0x54, 0xe6, 0x92, 0x99, 0xe4, 0xde, 0xf8, 0x84, 0x56, 0xa3, 0x33, 0x43, 0x66, 0x2d, 0x54, 0xc6, 0x18, 0x61, 0x4c, 0x63, 0xab, 0x49, 0x4c, 0xcb, 0xd1, 0xa3, 0xd5, 0x54, 0x56, 0xcf, 0xf8, 0x5e, 0x4d, 0x67, 0x96, 0x1c, 0x9e, 0x4d, 0x65, 0xda, 0x95, 0x88, 0xb9, 0x4e, 0x0b, 0x89, 0xd5, 0x68, 0x4c, 0x88, 0x2c, 0x48, 0x65, 0xaf, 0x42, 0x54, 0xb6, 0xfb, 0x1c, 0x2a, 0x83, 0x03, 0x9d, 0xa1, 0xa8, 0xac, 0x51, 0xd9, 0xde, 0x6f, 0x4b, 0x65, 0x88, 0x51, 0xd4, 0xac, 0x75, 0x8d, 0x8e, 0xfe, 0xd5, 0x73, 0x8c, 0x69, 0x58, 0x1d, 0xd5, 0x2b, 0x01, 0xfd, 0x65, 0x9c, 0xa2, 0x71, 0xa1, 0x9f, 0x3c, 0xb1, 0x3a, 0x2a, 0xd0, 0xf6, 0x2f, 0x3e, 0xb1, 0x9d, 0xa6, 0x65, 0x52, 0x24, 0xec, 0x35, 0xff, 0x51, 0x83, 0x17, 0x07, 0x9b, 0x9b, 0x3f, 0x93, 0x0f, 0xe8, 0x00, 0x65, 0xdf, 0xcf, 0x5e, 0x23, 0xf1, 0x80, 0x3a, 0x3b, 0xb8, 0x38, 0xfe, 0x76, 0x20, 0xde, 0x77, 0xd1, 0x39, 0x54, 0x27, 0x61, 0x3f, 0x25, 0xe8, 0xaa, 0x54, 0xbd, 0xed, 0xa9, 0xb9, 0xdc, 0xca, 0xb6, 0xf7, 0xd0, 0x55, 0x0f, 0x38, 0xa5, 0x4d, 0x09, 0x33, 0x26, 0x90, 0x3a, 0xa9, 0x8b, 0xe6, 0x32, 0x0d, 0x19, 0x55, 0x1a, 0xa5, 0xfb, 0x86, 0x1a, 0x4f, 0xc4, 0xc4, 0x01, 0xc4, 0x35, 0x93, 0x39, 0x2f, 0xae, 0x57, 0x37, 0x05, 0x15, 0xa6, 0xd0, 0xa3, 0x1b, 0x1a, 0xfc, 0x5a, 0x35, 0x3b, 0x99, 0xd7, 0x3b, 0x02, 0xf3, 0x5d, 0x14, 0x1a, 0x50, 0x0c, 0x19, 0xb9, 0xe6, 0xb7, 0xea, 0x09, 0x0c, 0x81, 0x56, 0x08, 0x38, 0x9d, 0xb3, 0xdf, 0xf8, 0x9e, 0x97, 0x02, 0x98, 0x3e, 0xd4, 0x30, 0x72, 0x50, 0x3c, 0x50, 0x0f, 0xe8, 0x4a, 0xdb, 0xac, 0x3c, 0x70, 0x53, 0x0c, 0x1a, 0x84, 0x13, 0xb0, 0x12, 0x6a, 0x64, 0x52, 0xee, 0xc1, 0x90, 0x4d, 0xbf, 0x12, 0xff, 0x22, 0xc6, 0xdf, 0xf0, 0xdf, 0xf7, 0xf1, 0xbb, 0xe8, 0xb1, 0xe6, 0x7f, 0xdd, 0xe0, 0x3f, 0xe9, 0x7b, 0x8a, 0x7f, 0x55, 0x3b, 0xe5, 0x51, 0x78, 0xa3, 0xdd, 0x8a, 0x27, 0x83, 0xcd, 0x70, 0x9e, 0xdb, 0x9a, 0x40, 0x77, 0xd5, 0x2e, 0x8c, 0x9e, 0x97, 0xb6, 0x62, 0xb8, 0x30, 0x8d, 0xbc, 0x17, 0x56, 0xb8, 0x12, 0x17, 0x24, 0x53, 0x51, 0x0f, 0xdc, 0xd6, 0x67, 0x36, 0xde, 0x2b, 0x07, 0xc0, 0x8d, 0x42, 0x03, 0x28, 0xd6, 0xdc, 0xd8, 0x43, 0xe6, 0xbd, 0xbd, 0xf5, 0xb9, 0xef, 0x92, 0xf8, 0xa0, 0x15, 0x79, 0x16, 0x29, 0x92, 0xd2, 0x3a, 0x28, 0x37, 0x7e, 0x68, 0xeb, 0x50, 0x42, 0x9f, 0x0d, 0x14, 0xed, 0xa1, 0xed, 0x3b, 0x4e, 0xd8, 0x58, 0x1a, 0xb2, 0xdd, 0xeb, 0xe7, 0x44, 0x53, 0x0d, 0x72, 0x49, 0x92, 0x4d, 0x10, 0x8e, 0x23, 0xc9, 0x4d, 0xf0, 0xf8, 0x3b, 0x7a, 0x31, 0x34, 0x64, 0xf6, 0x95, 0xc5, 0xa1, 0xfb, 0xd3, 0xde, 0x16, 0x9e, 0xaa, 0x8e, 0x82, 0xcd, 0x7d, 0x66, 0x1a, 0xea, 0xf8, 0xd3, 0x6e, 0xdc, 0xff, 0x1d, 0x71, 0xa4, 0xf6, 0xeb, 0x56, 0xf4, 0x1f, 0xe5, 0x8e, 0x4f, 0x11, 0xec, 0xa6, 0x37, 0x8c, 0x8b, 0x80, 0xcf, 0x46, 0x34, 0x44, 0xc5, 0x48, 0x51, 0x84, 0x11, 0x7d, 0x8b, 0x5b, 0x5b, 0x48, 0x4e, 0xbf, 0xf9, 0x21, 0x0c, 0x15, 0xf9, 0xdd, 0x32, 0x4c, 0xbc, 0xc1, 0x6d, 0x7c, 0xdd, 0x65, 0x64, 0x2f, 0x07, 0xd8, 0x2b, 0x9e, 0x75, 0x31, 0x12, 0x19, 0x70, 0xe7, 0xd0, 0xd9, 0xd4, 0x3e, 0x32, 0x2e, 0xe2, 0x7b, 0xc7, 0x82, 0x66, 0x64, 0xfd, 0x09, 0x05, 0x1d, 0x6c, 0x06, 0x09, 0xa6, 0x7c, 0x63, 0x44, 0x39, 0xa4, 0x7d, 0x94, 0xa3, 0x02, 0xdb, 0x20, 0x49, 0xb7, 0x07, 0x1a, 0x6b, 0x81, 0xe8, 0x86, 0xa0, 0x76, 0x4c, 0x13, 0xad, 0xfc, 0x34, 0xab, 0x56, 0x68, 0x0f, 0xc2, 0xf3, 0xe8, 0x07, 0x92, 0xaa, 0xad, 0x3b, 0x4b, 0x3b, 0x91, 0xc7, 0x02, 0xfe, 0x81, 0xaf, 0x6a, 0x0d, 0xae, 0x13, 0xc6, 0x28, 0x17, 0xd8, 0x84, 0x0f, 0xbe, 0x9d, 0x2e, 0x9a, 0x22, 0xba, 0xf7, 0x3a, 0x7f, 0xdd, 0xdb, 0x30, 0x80, 0x6b, 0xf9, 0x5d, 0x52, 0x72, 0x4f, 0x5d, 0x9c, 0x2c, 0xc6, 0x9b, 0x6f, 0xc8, 0xc9, 0x22, 0xe2, 0x8b, 0x0a, 0x4e, 0x29, 0x81, 0x54, 0x60, 0xb5, 0xbc, 0xf6, 0x30, 0x3c, 0xb3, 0x02, 0x43, 0xcd, 0xc2, 0xef, 0xd0, 0x1d, 0x03, 0xbb, 0x35, 0xe1, 0xfc, 0x34, 0x2a, 0x49, 0xc5, 0x28, 0xbc, 0xe0, 0x40, 0xb3, 0x57, 0x3f, 0x5f, 0xd4, 0x65, 0x13, 0x56, 0x37, 0x2b, 0x6f, 0x38, 0x54, 0xa6, 0xf2, 0xe5, 0x93, 0xb5, 0x0b, 0x86, 0xfd, 0x4c, 0xc4, 0x89, 0x81, 0x97, 0x8f, 0x6a, 0x59, 0x18, 0x41, 0x7a, 0x74, 0x93, 0xcc, 0xa5, 0x8d, 0x4e, 0x4b, 0x25, 0x78, 0x6b, 0xd9, 0x74, 0x7d, 0x4e, 0x9c, 0xdc, 0x37, 0xa9, 0x16, 0xfd, 0x79, 0xfe, 0x77, 0xd8, 0xe6, 0x18, 0xfb, 0xf2, 0x79, 0x57, 0x02, 0x64, 0x7d, 0xc6, 0xe7, 0x82, 0x21, 0x9a, 0xcc, 0x58, 0x95, 0x91, 0x83, 0x85, 0x27, 0x38, 0xdf, 0x5c, 0xb1, 0x1f, 0x45, 0xc7, 0x30, 0xe3, 0x93, 0x8f, 0x1f, 0xce, 0x07, 0x1f, 0x2e, 0x9b, 0x84, 0x7d, 0x79, 0x71, 0x75, 0x7d, 0xf2, 0xe6, 0xe3, 0xe5, 0xd5, 0xc5, 0xf5, 0xc5, 0xf1, 0xc5, 0x59, 0xb4, 0xbe, 0xbd, 0xb1, 0xb2, 0x42, 0xcd, 0x78, 0x20, 0x1c, 0xac, 0x43, 0x9d, 0x3f, 0xf3, 0x2c, 0x33, 0x8b, 0x75, 0x5c, 0x8f, 0x3f, 0xda, 0xf7, 0xda, 0xe7, 0xbe, 0x16, 0x0f, 0x67, 0x57, 0x04, 0x89, 0x37, 0x62, 0xeb, 0x71, 0x34, 0x5d, 0xf2, 0x4d, 0xb1, 0xd9, 0x0a, 0x8c, 0xf4, 0xe9, 0x29, 0x5c, 0x89, 0x44, 0x4c, 0x9d, 0xe2, 0xa6, 0x95, 0xee, 0xb8, 0xfd, 0xa6, 0xce, 0x82, 0x67, 0x40, 0x0a, 0x98, 0xa5, 0x8a, 0x72, 0x35, 0x59, 0x30, 0x22, 0x0a, 0xc1, 0x68, 0x9b, 0x37, 0xa8, 0xc7, 0x80, 0x04, 0xb0, 0xf2, 0xcc, 0x68, 0x74, 0x20, 0x4a, 0x2f, 0xfd, 0x5e, 0x53, 0xf2, 0x0a, 0xcc, 0x37, 0x93, 0x8e, 0xa7, 0x32, 0x11, 0x8a, 0x60, 0x52, 0x2b, 0x15, 0x8e, 0xa7, 0xc3, 0x03, 0xf8, 0x5b, 0x87, 0xab, 0x52, 0x65, 0x97, 0x17, 0x15, 0xe6, 0x97, 0x19, 0x2d, 0xe4, 0xde, 0x99, 0x14, 0x0e, 0x87, 0x4a, 0x19, 0x61, 0x19, 0x06, 0x38, 0xec, 0x89, 0x86, 0xc7, 0x18, 0xe9, 0x84, 0x6e, 0x24, 0xa9, 0x2f, 0x8a, 0x91, 0x33, 0x70, 0x17, 0xf3, 0x04, 0x21, 0xf3, 0x26, 0x62, 0xac, 0xa2, 0x8b, 0x67, 0xdf, 0x65, 0x82, 0x96, 0xa8, 0xe0, 0x8a, 0x02, 0x09, 0x9b, 0xd0, 0xe9, 0xba, 0xa4, 0x68, 0x42, 0x5c, 0x00, 0x47, 0x13, 0xe9, 0x1a, 0xec, 0x9e, 0xb7, 0x8d, 0x69, 0x35, 0xd9, 0xcf, 0xcb, 0xfe, 0x8b, 0xfd, 0xfe, 0x0e, 0x02, 0x4f, 0x5c, 0xcc, 0x30, 0x8a, 0x26, 0x8a, 0x05, 0x39, 0x97, 0xe9, 0x03, 0x82, 0xb2, 0x43, 0x29, 0x78, 0x76, 0xaf, 0x64, 0xc4, 0x90, 0x2d, 0xa5, 0xf5, 0xb0, 0x2a, 0xc9, 0x14, 0x9a, 0x40, 0xba, 0xe2, 0x0a, 0x32, 0x33, 0x02, 0x9b, 0xc0, 0x67, 0x0e, 0x24, 0x0b, 0x4d, 0xf2, 0xb2, 0x9a, 0xbc, 0xf6, 0xd4, 0xf4, 0x8d, 0x1b, 0x1c, 0x5f, 0x0a, 0x80, 0x80, 0x85, 0x3a, 0x20, 0x76, 0xae, 0xad, 0x9f, 0xb7, 0xfa, 0x5b, 0xd1, 0xe0, 0xfd, 0xd7, 0x82, 0x32, 0xf9, 0xf5, 0x20, 0xa0, 0x09, 0x90, 0x3e, 0xaf, 0xaf, 0xd7, 0xc2, 0x59, 0xb8, 0x38, 0x98, 0xdd, 0x9f, 0xf1, 0x4f, 0x4d, 0x02, 0xc7, 0xbf, 0x3b, 0x2b, 0x8e, 0x3c, 0x27, 0x9f, 0x6e, 0x69, 0xd7, 0x41, 0x22, 0x80, 0xfb, 0x5a, 0x26, 0xe1, 0x25, 0xf7, 0x57, 0xa3, 0x99, 0xed, 0x78, 0x17, 0xed, 0xc9, 0x2b, 0x66, 0x9d, 0xdd, 0x4f, 0x5d, 0x32, 0xd1, 0x94, 0x54, 0x3a, 0x34, 0x65, 0xda, 0x65, 0xed, 0x0e, 0x24, 0x58, 0x01, 0xc5, 0xc9, 0xa0, 0xc9, 0x84, 0x54, 0x43, 0x2a, 0x4b, 0xec, 0xd2, 0x2f, 0x29, 0xa2, 0x69, 0x52, 0xd6, 0xc2, 0xd0, 0x56, 0x74, 0x4c, 0x54, 0x31, 0xe6, 0x68, 0xdb, 0x06, 0x0a, 0x6f, 0x0d, 0x36, 0x16, 0x7b, 0x28, 0x49, 0x6d, 0xec, 0xec, 0x91, 0xa0, 0xdf, 0xd3, 0x07, 0xbe, 0xdb, 0x7f, 0x4f, 0x8a, 0xdc, 0x0f, 0xaf, 0x93, 0xf2, 0xa0, 0x80, 0x64, 0xa0, 0x72, 0x1f, 0x29, 0x62, 0x8a, 0xfd, 0x21, 0x7e, 0xd5, 0xbb, 0x73, 0x7f, 0xa6, 0xf6, 0xbd, 0x0c, 0x30, 0xcc, 0x4a, 0x85, 0x20, 0x66, 0x10, 0xf8, 0x5f, 0xaa, 0x21, 0x51, 0x87, 0x07, 0xcc, 0xb0, 0x8e, 0xf2, 0x91, 0x4b, 0x30, 0x3d, 0x13, 0x93, 0xd4, 0xbf, 0x31, 0x9a, 0x32, 0x36, 0xeb, 0xdf, 0x84, 0xd7, 0xb0, 0x55, 0x96, 0x05, 0x4d, 0x13, 0x7d, 0xce, 0xe7, 0xe9, 0xbd, 0x28, 0x7a, 0x93, 0x64, 0x8f, 0xca, 0xd3, 0x6d, 0xe6, 0x1a, 0x41, 0x9f, 0xdc, 0xb1, 0x4f, 0xdc, 0x56, 0xe7, 0x6b, 0x3e, 0xae, 0x99, 0xa2, 0x3f, 0xa5, 0xfa, 0x9c, 0x43, 0x9c, 0xeb, 0xb5, 0xd9, 0x06, 0xc9, 0x98, 0x72, 0xf7, 0x62, 0x9d, 0x00, 0x36, 0x34, 0xa8, 0x4b, 0xdf, 0xd3, 0x11, 0x57, 0x6e, 0xc3, 0x06, 0xc5, 0x35, 0xc9, 0xa4, 0x2b, 0x97, 0xc3, 0xbf, 0x32, 0x52, 0x7b, 0x84, 0xae, 0x85, 0x42, 0xb6, 0x41, 0xf2, 0x1c, 0xe1, 0x54, 0xe1, 0x01, 0x0e, 0x5b, 0x01, 0x77, 0xc8, 0x42, 0xc3, 0x51, 0xb0, 0x59, 0x21, 0xd2, 0xeb, 0x24, 0x46, 0x53, 0x0a, 0xd6, 0xb6, 0x25, 0x2d, 0x2a, 0x83, 0xde, 0x9f, 0xde, 0x04, 0x79, 0x2a, 0xa7, 0xcf, 0x35, 0x84, 0x2f, 0xef, 0x25, 0xe7, 0x6c, 0x9a, 0x0c, 0x62, 0x7c, 0xbc, 0x75, 0x2c, 0xe5, 0xd4, 0x65, 0xf7, 0xcf, 0xf8, 0x87, 0xbf, 0x86, 0x1a, 0xc9, 0xe2, 0x36, 0x2b, 0x23, 0xc1, 0xc7, 0x89, 0x2d, 0xd1, 0xeb, 0x6d, 0x1f, 0x78, 0x6d, 0xc5, 0xc0, 0xea, 0xb1, 0x89, 0x8b, 0x3d, 0xe7, 0x03, 0x1f, 0x32, 0x05, 0xa4, 0x53, 0xea, 0x5e, 0x18, 0x84, 0xfc, 0xfb, 0xb8, 0xc8, 0xa8, 0x42, 0xc0, 0x35, 0x84, 0x10, 0xc7, 0x64, 0x21, 0xdd, 0x33, 0xe2, 0x09, 0x26, 0x57, 0x17, 0x89, 0x05, 0xf4, 0xc5, 0x93, 0x64, 0xb8, 0x22, 0x41, 0x08, 0xd7, 0x54, 0xdf, 0x45, 0x5e, 0x31, 0x56, 0x39, 0x66, 0x63, 0xa3, 0xa6, 0x53, 0xa0, 0x8f, 0xd0, 0xd9, 0x64, 0x55, 0x92, 0x71, 0x34, 0x73, 0xf8, 0x38, 0xd2, 0x72, 0x81, 0xd1, 0x42, 0x49, 0x93, 0xe3, 0xc8, 0xab, 0xc3, 0xc1, 0xe4, 0x73, 0x9c, 0x4f, 0x47, 0x2e, 0x27, 0x1b, 0xdc, 0x8b, 0xef, 0xf2, 0x74, 0x8c, 0xbc, 0x47, 0x87, 0x23, 0xf5, 0xcd, 0x52, 0xc9, 0x75, 0xb8, 0xdb, 0x86, 0xcd, 0x63, 0x12, 0xfb, 0xca, 0xa6, 0x79, 0xc7, 0x65, 0xad, 0x7a, 0x2b, 0xad, 0x25, 0x7c, 0x53, 0xc2, 0x0b, 0x85, 0xab, 0x33, 0x0c, 0x33, 0x65, 0x1c, 0xbb, 0x12, 0xe3, 0x53, 0xd9, 0x2d, 0xce, 0x90, 0x52, 0x10, 0x33, 0xb4, 0x7a, 0x46, 0x06, 0x49, 0xaa, 0x09, 0x48, 0x5e, 0x6f, 0x51, 0x6e, 0x74, 0x01, 0x93, 0x96, 0x6b, 0xd5, 0xdc, 0xfe, 0x13, 0x32, 0xe2, 0xe1, 0x51, 0x13, 0x01, 0x57, 0xaa, 0x60, 0x0b, 0xaa, 0xcc, 0x86, 0x8d, 0x4e, 0x2b, 0x3a, 0xb0, 0x46, 0x1e, 0xb2, 0xe6, 0xe7, 0x8a, 0xbf, 0x66, 0x3e, 0x5f, 0xfa, 0x0d, 0x10, 0x25, 0x5a, 0x27, 0x95, 0xd6, 0x95, 0xed, 0x6c, 0x45, 0x0a, 0x90, 0x38, 0x6a, 0xb8, 0x49, 0x83, 0xd3, 0xb7, 0x02, 0xd3, 0xbd, 0x31, 0x7e, 0x17, 0xf6, 0x23, 0x6e, 0x1a, 0x64, 0x1e, 0x20, 0x98, 0x6c, 0xdc, 0x03, 0x26, 0xb0, 0x58, 0xe1, 0x87, 0xb3, 0xae, 0xaa, 0x5a, 0x06, 0xb3, 0x0b, 0x05, 0xc2, 0x3f, 0xe1, 0x44, 0x49, 0xd9, 0x3b, 0xbf, 0x02, 0x00, 0x34, 0x8d, 0xdd, 0xd0, 0x4e, 0x86, 0x32, 0x31, 0x9b, 0x72, 0x16, 0x17, 0xd5, 0xda, 0xb9, 0x81, 0x77, 0x90, 0x36, 0x50, 0x37, 0xac, 0x2d, 0x6d, 0x8d, 0xf7, 0x4e, 0xb6, 0xed, 0x03, 0xd7, 0xc7, 0xd1, 0x88, 0x54, 0xf6, 0x9c, 0x49, 0xee, 0xbb, 0xf3, 0x25, 0x36, 0xe5, 0xbc, 0x7d, 0x24, 0xac, 0x2c, 0x69, 0x02, 0x20, 0x4f, 0x52, 0x38, 0xc8, 0xe5, 0x76, 0xe1, 0xd3, 0x0e, 0xf8, 0x82, 0x88, 0x4f, 0xd2, 0x87, 0x70, 0x62, 0xe9, 0x4a, 0x14, 0x8a, 0x96, 0xc3, 0x08, 0x01, 0xb0, 0x8c, 0x1b, 0x69, 0xc5, 0xfa, 0xf3, 0x51, 0x8c, 0x81, 0xdb, 0x70, 0x32, 0xe3, 0x40, 0xee, 0x5b, 0x4f, 0x9f, 0x42, 0x3e, 0xad, 0x99, 0xa4, 0x8e, 0x73, 0x90, 0x1b, 0x49, 0x3d, 0x54, 0xcf, 0x48, 0xf0, 0x1d, 0xc5, 0x14, 0xaf, 0xd7, 0xb6, 0xdd, 0x32, 0xae, 0xfd, 0xa7, 0xfb, 0xdb, 0x87, 0x6e, 0x88, 0x49, 0xe3, 0x59, 0xb5, 0x7b, 0x59, 0xea, 0x9f, 0x39, 0x84, 0x1b, 0xbd, 0x6a, 0x51, 0xf4, 0xd0, 0xaf, 0x59, 0x94, 0xb7, 0x2a, 0x5a, 0x06, 0xed, 0xb7, 0x77, 0x26, 0xfc, 0x99, 0x15, 0xb1, 0xaa, 0x96, 0x25, 0xc0, 0x88, 0x2b, 0x5a, 0x09, 0x3b, 0xcb, 0x30, 0x0f, 0xfe, 0xd2, 0x95, 0x3c, 0xbd, 0x8d, 0x44, 0x1a, 0xf8, 0xdf, 0x1f, 0x0f, 0xc8, 0x0d, 0x38, 0xfe, 0xb9, 0x75, 0x1e, 0x27, 0x5d, 0x99, 0xcb, 0x27, 0x98, 0x46, 0xba, 0xb8, 0x41, 0xdd, 0xf2, 0x30, 0x54, 0x3a, 0xe5, 0x6c, 0x84, 0x3c, 0xf6, 0xdb, 0x7f, 0xbf, 0x98, 0x59, 0x90, 0xa2, 0x15, 0xdf, 0x97, 0xc7, 0x7e, 0xf3, 0xef, 0xf3, 0xdd, 0x7d, 0xd2, 0xed, 0x43, 0x8c, 0xea, 0x8d, 0xe4, 0xa7, 0x07, 0x78, 0xe2, 0xaf, 0x66, 0x8a, 0x92, 0xf3, 0xee, 0x73, 0x45, 0xf9, 0x58, 0xb0, 0x93, 0x86, 0xb0, 0x45, 0xe2, 0x8a, 0xbf, 0x09, 0x07, 0x23, 0xd6, 0xec, 0x6f, 0x8e, 0xb4, 0xb6, 0x39, 0xe4, 0x3f, 0x37, 0xbf, 0x0a, 0x9d, 0x91, 0x96, 0xd2, 0xa0, 0x14, 0xd4, 0x5e, 0x38, 0xd4, 0x5c, 0x85, 0xa1, 0x1f, 0x44, 0xe3, 0x35, 0x8d, 0x41, 0x70, 0xb3, 0x4c, 0x0f, 0x25, 0x7c, 0x35, 0xd4, 0x81, 0x47, 0x76, 0x08, 0xd3, 0x80, 0xd1, 0xbe, 0xd3, 0x30, 0x85, 0xcd, 0x19, 0x42, 0xc5, 0x23, 0x71, 0xbe, 0x58, 0xb6, 0x35, 0x53, 0x6b, 0xb6, 0x31, 0xb5, 0x20, 0xb4, 0xef, 0xba, 0xd2, 0x00, 0x07, 0x46, 0x43, 0xaa, 0x92, 0x34, 0x58, 0x09, 0x7e, 0xc8, 0x71, 0xfa, 0x50, 0x3d, 0x5c, 0xaf, 0xc1, 0xa0, 0x1b, 0x94, 0xf3, 0x8b, 0x2b, 0x3c, 0xbe, 0x38, 0x3f, 0x3f, 0x39, 0x6e, 0x06, 0x0b, 0x4d, 0x4d, 0x89, 0x55, 0xf5, 0xbd, 0xfe, 0x8b, 0xf4, 0x79, 0xc2, 0xd6, 0x97, 0x68, 0x11, 0x7f, 0x9f, 0x5a, 0x33, 0xc5, 0x02, 0xb3, 0xcb, 0xbf, 0x94, 0x02, 0x2b, 0x86, 0x60, 0x15, 0x0a, 0x08, 0x54, 0xeb, 0x79, 0xf4, 0xe0, 0x96, 0xff, 0x93, 0x33, 0x0d, 0x71, 0x3f, 0xb4, 0xc6, 0x93, 0x4c, 0x58, 0x99, 0x05, 0x65, 0xcc, 0x8f, 0xc7, 0x9b, 0x92, 0x90, 0xae, 0xdf, 0x6e, 0xa3, 0x65, 0x46, 0x6d, 0xc3, 0xb2, 0x9f, 0x5e, 0x3e, 0xe1, 0x56, 0xb0, 0xf3, 0xb8, 0xb8, 0xc5, 0x70, 0xb6, 0x53, 0x00, 0x44, 0x05, 0xa0, 0x04, 0x20, 0x3d, 0x1e, 0x87, 0x70, 0x05, 0xc8, 0xeb, 0xae, 0x15, 0x0f, 0xe4, 0xd5, 0xe3, 0xc9, 0x48, 0xfb, 0xc4, 0x03, 0xad, 0xcc, 0xc4, 0xd7, 0xb3, 0xe4, 0x1e, 0x3f, 0xc3, 0x60, 0x2a, 0x08, 0x0e, 0xe0, 0xf7, 0x63, 0x60, 0x0c, 0x70, 0x8e, 0x2a, 0x3c, 0x0a, 0x2e, 0x01, 0x1e, 0xd5, 0x9c, 0x3b, 0x1e, 0x10, 0xa8, 0x32, 0xb6, 0x10, 0xe3, 0xaa, 0x1e, 0x6f, 0xaf, 0xde, 0x09, 0x30, 0x62, 0x23, 0xa0, 0xe6, 0xb5, 0x6c, 0x92, 0x92, 0x27, 0x03, 0x96, 0x48, 0x65, 0x97, 0x6d, 0xd8, 0x32, 0xbc, 0xd3, 0x74, 0x0c, 0x68, 0xad, 0x94, 0xb5, 0x21, 0xf4, 0x74, 0xe3, 0x96, 0xc8, 0xdf, 0x00, 0x81, 0xce, 0xe9, 0xae, 0xe0, 0x27, 0x80, 0x89, 0xed, 0x37, 0x41, 0x7b, 0x09, 0xcf, 0x8a, 0x9c, 0xa4, 0x08, 0x64, 0x37, 0xa5, 0xd2, 0x05, 0x7c, 0x98, 0x2e, 0xab, 0xa7, 0xe6, 0x22, 0x43, 0xa5, 0xc2, 0x3e, 0xa9, 0x46, 0x95, 0x4e, 0xe4, 0x63, 0x4c, 0x67, 0xd3, 0xbd, 0x57, 0x60, 0x1a, 0x8e, 0x42, 0xc8, 0x05, 0x86, 0x3f, 0x17, 0xcb, 0xca, 0x0b, 0x24, 0x22, 0x44, 0x17, 0xa3, 0x33, 0x7c, 0xd5, 0xf3, 0xdb, 0x59, 0xc5, 0x63, 0xf7, 0x4c, 0x89, 0x81, 0x93, 0xd9, 0x5f, 0x56, 0x70, 0xff, 0x9f, 0x80, 0x50, 0x24, 0x08, 0x5d, 0xd3, 0xd2, 0xa3, 0x6e, 0xd5, 0xd0, 0x8e, 0x59, 0x52, 0xdd, 0x24, 0xbf, 0x42, 0x93, 0x16, 0xcc, 0x2b, 0xca, 0x22, 0x56, 0x21, 0xb1, 0x10, 0x4c, 0x64, 0x83, 0xfb, 0x81, 0x95, 0x83, 0x8e, 0xad, 0xa4, 0x4d, 0x28, 0xdd, 0x72, 0x87, 0x2d, 0x7e, 0xe8, 0xb7, 0x97, 0x4c, 0xa6, 0x9b, 0xf9, 0x13, 0x3a, 0x8a, 0x79, 0xee, 0x53, 0xcc, 0x20, 0x3a, 0x84, 0xff, 0xac, 0xfc, 0xf6, 0xf3, 0x3f, 0xeb, 0xe1, 0x15, 0x3e, 0x4f, 0xea, 0x5a, 0x2c, 0x4e, 0x0b, 0xc6, 0xe9, 0x15, 0x9a, 0xde, 0xfb, 0x65, 0x78, 0x35, 0x89, 0xbc, 0x52, 0x06, 0xdb, 0x3a, 0x34, 0x57, 0x0c, 0x07, 0x02, 0xf6, 0x21, 0x5c, 0x50, 0x09, 0x41, 0x3d, 0x4f, 0x24, 0x3f, 0x29, 0x82, 0x6b, 0x65, 0xbc, 0xcd, 0x3c, 0x2b, 0x53, 0xc6, 0xf7, 0xcc, 0x8d, 0x0b, 0x14, 0xae, 0x46, 0xff, 0xa2, 0xba, 0x42, 0xb5, 0x83, 0x35, 0x65, 0x85, 0xbe, 0x52, 0xdb, 0x84, 0xe7, 0x48, 0x25, 0x6f, 0x4b, 0x9a, 0xb5, 0x80, 0xb5, 0x8d, 0xf2, 0x77, 0x61, 0x55, 0xd6, 0xbb, 0x25, 0x4f, 0x7a, 0xea, 0x37, 0xbf, 0x16, 0xcf, 0x4f, 0xd9, 0xae, 0x1f, 0xcc, 0xca, 0x7c, 0x6d, 0xce, 0x07, 0xe6, 0x2c, 0xeb, 0xf6, 0x94, 0xed, 0x66, 0xce, 0xb6, 0xe3, 0x95, 0x08, 0x24, 0x6d, 0xd3, 0x68, 0xff, 0x17, 0xa6, 0x6c, 0xbb, 0x19, 0xdb, 0x31, 0xe5, 0x6b, 0x07, 0xd2, 0xb5, 0x65, 0xa3, 0x25, 0x5f, 0x93, 0x33, 0xb6, 0x57, 0xa6, 0x6c, 0xbb, 0x39, 0xdb, 0xab, 0x92, 0xb6, 0xa9, 0x28, 0x7d, 0x45, 0xca, 0xf6, 0xaf, 0xcb, 0xd8, 0x6e, 0x4b, 0xd9, 0xfe, 0xe5, 0x39, 0xdb, 0xbf, 0x6d, 0xca, 0xf6, 0x6f, 0x99, 0x8d, 0x4c, 0xb7, 0x07, 0x4f, 0x24, 0x1d, 0x49, 0x69, 0xd3, 0x61, 0x2b, 0x2c, 0xad, 0x16, 0xfc, 0xd5, 0x12, 0x58, 0x9c, 0x30, 0xb3, 0x0c, 0xc3, 0x1a, 0x8d, 0xa3, 0xb8, 0xfb, 0x75, 0x43, 0x42, 0x2b, 0x81, 0x0c, 0x38, 0x37, 0x0e, 0xbc, 0x1b, 0xba, 0xe9, 0x65, 0x39, 0xeb, 0xd1, 0x0c, 0xb0, 0xe6, 0xd8, 0xb3, 0x12, 0x2d, 0x9f, 0x69, 0x3c, 0xf7, 0xdb, 0xb3, 0x9c, 0x6a, 0x56, 0x6e, 0xef, 0x5a, 0x5b, 0x5d, 0xfe, 0xb2, 0xc4, 0x7a, 0xd8, 0x90, 0xdd, 0x2e, 0x05, 0x23, 0x03, 0xe1, 0x32, 0x8a, 0x72, 0xc2, 0xaf, 0x91, 0x97, 0x34, 0x31, 0x7d, 0xf9, 0x4c, 0x48, 0xc2, 0xb4, 0xd9, 0xf5, 0x8a, 0x61, 0xa8, 0x00, 0xde, 0x5d, 0x07, 0xc9, 0x10, 0x2c, 0x7b, 0x51, 0xa6, 0x5d, 0xd2, 0x2d, 0xdc, 0xee, 0xef, 0x72, 0x85, 0xb4, 0x86, 0x74, 0x64, 0x9e, 0x1e, 0xaa, 0x11, 0x7d, 0x9f, 0x41, 0xa5, 0x6d, 0x0e, 0x1a, 0xf7, 0xbd, 0xd2, 0x77, 0xfa, 0xd1, 0x15, 0xaa, 0x8f, 0xa0, 0xac, 0xc3, 0x8c, 0x64, 0x70, 0xf9, 0x5d, 0x68, 0xb8, 0x3a, 0x90, 0x29, 0xd0, 0xcf, 0x87, 0xab, 0x33, 0x3f, 0x3e, 0x4d, 0xd1, 0x83, 0x83, 0xcd, 0x4d, 0xca, 0x90, 0xba, 0x89, 0x1f, 0x1e, 0xfa, 0x65, 0xb2, 0x39, 0xce, 0x47, 0xe5, 0x26, 0x9e, 0xa0, 0x7e, 0xf9, 0xa6, 0x9a, 0xcf, 0x56, 0x65, 0x3d, 0xa4, 0xa5, 0x16, 0xe5, 0x2a, 0x6c, 0xab, 0xcd, 0xbc, 0x64, 0x6b, 0x2b, 0x75, 0xe1, 0xca, 0x89, 0xef, 0x37, 0x86, 0x93, 0xaa, 0x02, 0x58, 0x14, 0xfc, 0x1f, 0xf5, 0xed, 0xc0, 0xa0, 0x52, 0xa0, 0x70, 0xd9, 0xed, 0x6d, 0xea, 0xd4, 0x10, 0xf8, 0x07, 0xc4, 0x76, 0x00, 0xc2, 0x92, 0x26, 0x15, 0xb1, 0xb0, 0xfa, 0x9e, 0xe9, 0xa6, 0xd7, 0x9a, 0x8a, 0x1a, 0xf2, 0xf2, 0x5b, 0x7f, 0x11, 0x9d, 0xb5, 0xf4, 0x19, 0xfd, 0xcd, 0x59, 0x02, 0x50, 0x37, 0x4a, 0xf9, 0xe7, 0x28, 0xbb, 0xee, 0xa3, 0x9f, 0xe2, 0x96, 0x99, 0x84, 0xbc, 0x43, 0xce, 0xb6, 0x5b, 0x39, 0x13, 0xf3, 0xf0, 0xa7, 0x98, 0x09, 0x15, 0xe9, 0x07, 0xf9, 0x63, 0x6d, 0x0e, 0xf4, 0xd8, 0xa7, 0xf8, 0xfe, 0xdd, 0x76, 0xdb, 0x67, 0xa9, 0x91, 0x28, 0x3d, 0xf1, 0x1b, 0x7e, 0xf8, 0x83, 0x71, 0x56, 0x31, 0xa6, 0xc1, 0x21, 0xfe, 0xf7, 0x40, 0x77, 0x78, 0x65, 0x87, 0xb2, 0x16, 0xf8, 0x77, 0xa7, 0x3b, 0xba, 0x38, 0xc1, 0x56, 0x82, 0x86, 0xb4, 0xa1, 0x82, 0x30, 0x26, 0x94, 0x00, 0x43, 0x13, 0x5e, 0x7f, 0x4f, 0x51, 0xe5, 0x18, 0x41, 0x85, 0x21, 0x6d, 0x18, 0xa0, 0x44, 0x11, 0x96, 0xc0, 0x50, 0x08, 0x8b, 0x21, 0xaa, 0xe5, 0x66, 0x9d, 0xb9, 0xa1, 0x98, 0x57, 0xea, 0x32, 0xa2, 0x8b, 0xec, 0xb6, 0x8e, 0x29, 0x93, 0x99, 0x9f, 0xd6, 0xf2, 0x14, 0xee, 0x3d, 0xf1, 0x6c, 0x17, 0x89, 0x68, 0x68, 0xfc, 0x68, 0xc4, 0x57, 0x9a, 0x4c, 0x54, 0x31, 0x51, 0x67, 0x16, 0xbc, 0xc2, 0x5c, 0xf1, 0x83, 0xa8, 0xd3, 0xfb, 0x10, 0x1d, 0x74, 0xbc, 0x2d, 0xba, 0xc8, 0xa4, 0x6f, 0x08, 0x79, 0xbc, 0x0a, 0x2a, 0x84, 0xa7, 0x56, 0x44, 0xae, 0x66, 0x72, 0x83, 0x80, 0x45, 0xd6, 0x9c, 0x30, 0x98, 0xfb, 0x53, 0x2f, 0x08, 0x37, 0xd7, 0x1e, 0x93, 0xa6, 0x47, 0x0e, 0x0a, 0x12, 0x74, 0xda, 0x58, 0x00, 0x6d, 0xd2, 0x9e, 0x18, 0xff, 0x1f, 0x59, 0x2b, 0x06, 0x13, 0x31, 0x98, 0x89, 0x35, 0xdf, 0x3e, 0x60, 0x9d, 0xf4, 0x97, 0x96, 0x52, 0xba, 0x45, 0x5e, 0x96, 0xe9, 0x10, 0x38, 0xf5, 0x54, 0x58, 0x64, 0x99, 0x70, 0x3e, 0x15, 0xb7, 0xea, 0xc4, 0xdd, 0x34, 0x00, 0x00, 0xa5, 0x0f, 0xad, 0xc5, 0x2b, 0x15, 0xd0, 0x01, 0x71, 0x2e, 0xc1, 0xec, 0x98, 0xb1, 0xdd, 0xa5, 0x38, 0x34, 0x53, 0x5b, 0x1c, 0x0d, 0x8b, 0x34, 0x99, 0x60, 0xaa, 0x23, 0xe3, 0x49, 0xb1, 0xe2, 0xd5, 0x64, 0xb2, 0x33, 0x04, 0xe6, 0xc0, 0x24, 0x1d, 0xcc, 0xb4, 0x2d, 0x11, 0xb8, 0x90, 0xd2, 0xaf, 0x29, 0xf7, 0xd1, 0xe6, 0x76, 0x17, 0x09, 0x66, 0x0e, 0xdc, 0x25, 0x72, 0xac, 0xb1, 0xf6, 0x6f, 0x69, 0xc9, 0x49, 0x2d, 0x0c, 0xbe, 0x33, 0x55, 0x3b, 0x10, 0x26, 0x90, 0xc1, 0x27, 0xc1, 0x2f, 0x46, 0xda, 0xaa, 0x3d, 0xae, 0x95, 0xee, 0xf7, 0x3f, 0x19, 0x8f, 0x77, 0xbc, 0xd0, 0xbf, 0xa0, 0x0e, 0xa0, 0xde, 0x2e, 0x6a, 0x55, 0x56, 0xbc, 0x93, 0x19, 0xed, 0xa1, 0xa9, 0x84, 0xd3, 0xe1, 0x27, 0x08, 0xac, 0x1e, 0x9d, 0x37, 0xb5, 0x9c, 0x40, 0x62, 0x39, 0x26, 0xd0, 0x71, 0xbe, 0x9a, 0x59, 0x5d, 0x45, 0xd8, 0x02, 0x04, 0xd4, 0xe2, 0x06, 0x86, 0x3f, 0x78, 0x22, 0xde, 0xa6, 0xcb, 0xb7, 0x27, 0xc8, 0x3b, 0xf9, 0xf1, 0x54, 0x10, 0xc2, 0x3e, 0xf2, 0x18, 0x67, 0xe0, 0xcb, 0x64, 0xc4, 0xa1, 0xe6, 0xdc, 0x78, 0x4d, 0x8d, 0x77, 0x33, 0xe3, 0x41, 0xe7, 0x73, 0x62, 0xf5, 0x16, 0x39, 0x12, 0x1d, 0xac, 0xe1, 0x28, 0x31, 0xdd, 0x50, 0xea, 0x21, 0xf0, 0xd2, 0xeb, 0x04, 0xe8, 0xf2, 0x72, 0x1d, 0xea, 0x2e, 0x8d, 0x8d, 0x02, 0x65, 0x3f, 0xc4, 0xfb, 0x29, 0x10, 0xc2, 0x71, 0x6b, 0x6d, 0x08, 0x72, 0x7b, 0x46, 0xdc, 0x09, 0x54, 0x76, 0x9e, 0x0f, 0x06, 0x7e, 0x8a, 0x7c, 0x06, 0xc6, 0x49, 0x3e, 0xcd, 0xd2, 0xbf, 0x27, 0x63, 0x09, 0x5a, 0x36, 0xd3, 0x5b, 0x6b, 0x45, 0x0a, 0x91, 0x13, 0x90, 0xc7, 0x44, 0x09, 0x9f, 0xbf, 0x31, 0x12, 0x1c, 0x4a, 0x1d, 0x4c, 0x07, 0x43, 0x00, 0x2b, 0x93, 0x09, 0x88, 0x41, 0x06, 0x6e, 0xc2, 0x23, 0xb6, 0x98, 0xc9, 0x9d, 0xe5, 0x0f, 0x7b, 0x87, 0xab, 0x54, 0x21, 0xd8, 0x33, 0x2d, 0x08, 0x4f, 0x49, 0xf4, 0x2b, 0x8a, 0x0a, 0xa8, 0xb9, 0xde, 0x2f, 0x2f, 0x29, 0x08, 0xa3, 0x2f, 0x25, 0x0f, 0xcc, 0x40, 0x5b, 0xf0, 0xed, 0x34, 0x27, 0xbb, 0x4c, 0x42, 0xe2, 0x45, 0xf7, 0x98, 0x05, 0xe9, 0xb3, 0x50, 0xee, 0x54, 0xf9, 0x8c, 0xfd, 0xbb, 0xd5, 0x44, 0xb8, 0x33, 0x81, 0x8e, 0x67, 0x40, 0xdb, 0xa1, 0x1b, 0x5f, 0x81, 0xc9, 0xc5, 0x9f, 0x4e, 0xed, 0x3a, 0x18, 0x7f, 0x21, 0x61, 0x3c, 0x3a, 0x53, 0x09, 0x24, 0x36, 0x4a, 0xaa, 0xf8, 0x9f, 0x1e, 0x1e, 0x5a, 0x2c, 0xba, 0x3b, 0xb9, 0x97, 0xa5, 0x1a, 0x4c, 0xda, 0x46, 0xe3, 0x00, 0x7d, 0x04, 0x60, 0xc3, 0xba, 0x2a, 0x75, 0xdd, 0xc3, 0xaf, 0xb1, 0x52, 0x4b, 0xa9, 0xa2, 0x49, 0x5a, 0x16, 0x24, 0xde, 0x4c, 0x91, 0x53, 0x44, 0xc4, 0xc7, 0x6f, 0x9a, 0x9f, 0xd5, 0xa5, 0x18, 0x43, 0x90, 0x7a, 0xa4, 0x25, 0xc8, 0x34, 0xa4, 0x05, 0x2c, 0xc1, 0x26, 0x43, 0xf0, 0x58, 0x2e, 0x2b, 0x32, 0xb4, 0xd2, 0x45, 0xee, 0xc3, 0x2c, 0x57, 0x3c, 0x75, 0xbd, 0x85, 0x72, 0xd9, 0xe6, 0x62, 0x1f, 0x65, 0x90, 0x16, 0x5d, 0xfe, 0x13, 0x54, 0xa2, 0xfc, 0xaa, 0x52, 0x94, 0x4f, 0x5b, 0x89, 0x62, 0x25, 0x05, 0x4a, 0x1d, 0x5f, 0x4e, 0x50, 0x94, 0x10, 0x5d, 0x32, 0x9c, 0x06, 0x75, 0x1f, 0x9b, 0xee, 0x25, 0xfc, 0x5a, 0x63, 0xb8, 0xf0, 0x65, 0xea, 0x46, 0xb5, 0x2c, 0xd9, 0xc4, 0xe3, 0x91, 0xeb, 0xc2, 0x35, 0x42, 0xcd, 0xf9, 0x68, 0x06, 0x58, 0x32, 0x3e, 0x4e, 0x04, 0x9f, 0xeb, 0xcf, 0xb6, 0x7b, 0xc8, 0xa7, 0x36, 0xc0, 0xb6, 0x81, 0x37, 0x1f, 0x3a, 0xf2, 0xf8, 0xcb, 0x27, 0x05, 0x32, 0xdd, 0x33, 0x7c, 0xcd, 0x02, 0x60, 0x3a, 0xfc, 0xce, 0x74, 0x36, 0xe5, 0x1e, 0x6d, 0x55, 0xf8, 0xc2, 0x50, 0xb3, 0x52, 0x46, 0x3a, 0x14, 0xf6, 0x86, 0x99, 0x71, 0xf8, 0x7e, 0x0b, 0x83, 0x4b, 0x34, 0xee, 0xaa, 0x26, 0x31, 0x70, 0xf4, 0x61, 0x52, 0xdd, 0xa3, 0x16, 0x47, 0xfb, 0xa1, 0x1b, 0xe9, 0x70, 0x01, 0xd9, 0xa2, 0xd6, 0x7c, 0x97, 0x2e, 0xa7, 0xc1, 0x21, 0x43, 0x61, 0x0c, 0x5f, 0xe3, 0x17, 0xd1, 0x98, 0xae, 0x77, 0xfb, 0x82, 0xed, 0x80, 0x6c, 0x88, 0xba, 0xb6, 0x37, 0x9a, 0x8b, 0x5b, 0xab, 0x18, 0xd2, 0xb4, 0x25, 0x79, 0xd0, 0xf5, 0xf1, 0x9b, 0x6b, 0x2c, 0xd7, 0x36, 0x08, 0x58, 0x81, 0x81, 0x31, 0x7a, 0x57, 0xe6, 0xa3, 0xe7, 0xef, 0xa8, 0x5a, 0x5d, 0x3f, 0x66, 0x89, 0x71, 0xb9, 0x50, 0x68, 0xb8, 0x8d, 0xc9, 0xb0, 0x27, 0x47, 0x7e, 0x1b, 0x2f, 0xe0, 0x67, 0x18, 0x12, 0x24, 0x3c, 0x59, 0xee, 0x5d, 0xe7, 0xe5, 0x25, 0x10, 0x01, 0xb8, 0x13, 0x6b, 0x84, 0xc5, 0xe9, 0x7c, 0x7c, 0xb0, 0x7d, 0x31, 0xce, 0x42, 0x2d, 0x52, 0x4a, 0x41, 0x6e, 0x52, 0xef, 0x94, 0x06, 0xc9, 0x25, 0xd8, 0xe2, 0x0a, 0x57, 0x41, 0xa4, 0xce, 0xf8, 0x00, 0x2b, 0x1f, 0xbe, 0xba, 0xb6, 0x48, 0xbf, 0x7b, 0xfa, 0x75, 0xce, 0x70, 0xdb, 0x54, 0x91, 0xe5, 0xcd, 0x5f, 0xb2, 0xf8, 0xb4, 0x71, 0x9e, 0x75, 0xf5, 0x98, 0x3e, 0xb8, 0x7e, 0x3f, 0x54, 0x04, 0x7f, 0xd2, 0x17, 0x04, 0x02, 0x59, 0xc6, 0x37, 0xed, 0x45, 0xdb, 0x22, 0x93, 0xa1, 0x1c, 0x8e, 0xda, 0xad, 0x95, 0xd8, 0x43, 0x20, 0x36, 0xb7, 0x3e, 0xc0, 0xba, 0x88, 0xc1, 0xf1, 0xe5, 0x46, 0x74, 0xd9, 0x40, 0x82, 0xa1, 0xa2, 0x24, 0x14, 0xa6, 0x2e, 0x1f, 0x96, 0x76, 0x6e, 0x8c, 0x71, 0xd9, 0x8e, 0x1a, 0x92, 0xca, 0x15, 0x33, 0x48, 0xae, 0x14, 0xfa, 0xfd, 0xcd, 0x19, 0x53, 0x63, 0x2d, 0x47, 0x54, 0xa4, 0xc1, 0xa0, 0x20, 0x62, 0x52, 0xba, 0xd7, 0x14, 0x2c, 0xe8, 0x1c, 0x4b, 0xed, 0xb8, 0x81, 0x92, 0x38, 0xe5, 0x15, 0xff, 0x64, 0xe6, 0xa5, 0x3a, 0xd2, 0x46, 0x68, 0xd6, 0xb9, 0x83, 0x7e, 0x24, 0x9d, 0x0c, 0x4b, 0x96, 0x4a, 0x8d, 0x4e, 0x03, 0xc4, 0xc3, 0xa6, 0x49, 0xe6, 0x77, 0x2e, 0xa1, 0x8f, 0xa2, 0x20, 0x17, 0x92, 0x1e, 0xf7, 0x9b, 0xa8, 0xf9, 0x4e, 0xd0, 0x40, 0x26, 0x97, 0xe6, 0x16, 0x6d, 0xbd, 0x05, 0x61, 0x93, 0x75, 0x3c, 0x6c, 0x64, 0x88, 0x1c, 0x71, 0x8a, 0x61, 0x9a, 0x8a, 0x24, 0xdc, 0xe2, 0x11, 0x37, 0x03, 0x1e, 0x2b, 0xcb, 0x9b, 0x1d, 0xe0, 0x1b, 0x3b, 0xfd, 0xcf, 0x19, 0x17, 0xf2, 0x06, 0x84, 0x75, 0x00, 0x8e, 0x97, 0xd3, 0x47, 0xa4, 0xe5, 0x69, 0x63, 0x3c, 0xd1, 0xc2, 0xfb, 0x56, 0xf1, 0xef, 0xfd, 0x27, 0x52, 0xda, 0xdf, 0x96, 0x7e, 0xfc, 0x6e, 0x1d, 0x09, 0x2a, 0x42, 0xb2, 0xda, 0xe0, 0x06, 0x7d, 0x9c, 0x69, 0x30, 0x4c, 0x2b, 0x02, 0xc6, 0x57, 0x2b, 0xb2, 0x7e, 0x35, 0xa9, 0x89, 0x55, 0x41, 0x6f, 0x05, 0x6b, 0xe2, 0xfb, 0xd1, 0x7f, 0xe2, 0xa7, 0xf4, 0x6d, 0x2e, 0xcb, 0xa0, 0x64, 0x88, 0xaf, 0x4f, 0xde, 0x5e, 0x5c, 0x9d, 0xd4, 0xcb, 0x15, 0x2b, 0xee, 0x95, 0x4e, 0xc1, 0xfe, 0xe6, 0xec, 0x08, 0xd5, 0x4e, 0x61, 0x10, 0x24, 0x53, 0x21, 0x45, 0xbb, 0x3f, 0xba, 0xfc, 0xfe, 0x8d, 0x99, 0x1d, 0x6a, 0x09, 0x19, 0x77, 0x5a, 0x92, 0x41, 0xbb, 0xbc, 0xd3, 0x4d, 0xd1, 0x8e, 0x5a, 0x00, 0x36, 0x94, 0x92, 0x06, 0xd5, 0x66, 0x7e, 0x94, 0x62, 0xc1, 0x89, 0x31, 0x5a, 0xaa, 0x4f, 0x18, 0xea, 0x65, 0x89, 0xa5, 0xf7, 0x66, 0x50, 0x4f, 0xef, 0x65, 0xeb, 0x88, 0x01, 0xa7, 0x38, 0xb5, 0x38, 0x66, 0xf4, 0x38, 0x84, 0x94, 0xeb, 0x47, 0xfe, 0x87, 0x34, 0x29, 0x84, 0xbe, 0x12, 0x62, 0xd8, 0xd8, 0x3b, 0x9d, 0x03, 0x21, 0x2c, 0xed, 0xd0, 0xe1, 0x82, 0x44, 0x6b, 0x7a, 0x57, 0x75, 0x19, 0xe9, 0x4f, 0xc2, 0x3d, 0xee, 0x46, 0x06, 0x22, 0xe4, 0xf0, 0xcd, 0xf5, 0x12, 0x0b, 0x1d, 0x9c, 0xa9, 0x9a, 0xdf, 0x44, 0x6a, 0x41, 0xaf, 0xfd, 0x79, 0xcd, 0xd6, 0x84, 0x70, 0x0f, 0xbe, 0x70, 0xcf, 0x4a, 0xdb, 0xc3, 0x6c, 0xe3, 0xa9, 0xfc, 0x2d, 0x5d, 0x71, 0x5b, 0x3d, 0xb6, 0x84, 0xee, 0x24, 0xa5, 0x87, 0x5a, 0x89, 0x2e, 0x19, 0xae, 0x94, 0x18, 0x87, 0x08, 0x53, 0x1d, 0xa5, 0x6b, 0x80, 0xbc, 0x7d, 0xe7, 0x5e, 0xe1, 0xf6, 0x35, 0x52, 0x86, 0x43, 0x01, 0x33, 0x45, 0xae, 0xa7, 0x50, 0x04, 0x35, 0x8c, 0x2a, 0x1f, 0xb3, 0x0a, 0x2f, 0x2a, 0xf3, 0x94, 0x51, 0x5e, 0x04, 0x0b, 0xc0, 0x90, 0x90, 0x2c, 0xe9, 0x96, 0x84, 0x34, 0xf1, 0x6a, 0xff, 0x15, 0x8a, 0x76, 0xca, 0x50, 0x92, 0xae, 0x5e, 0x82, 0xef, 0x4c, 0xd1, 0x53, 0xee, 0x24, 0xe8, 0xa1, 0x29, 0xbb, 0x6b, 0xd0, 0x4e, 0xcc, 0xc3, 0x64, 0xc6, 0x9d, 0xc4, 0x06, 0xce, 0x20, 0x3e, 0x98, 0xd2, 0x8a, 0x03, 0x43, 0x18, 0x3f, 0x20, 0x9f, 0xb4, 0xbc, 0x8d, 0xd6, 0xff, 0x6d, 0xc3, 0xb4, 0x5b, 0x27, 0xfa, 0x41, 0xdf, 0x6c, 0x9a, 0x2d, 0x3d, 0xca, 0x47, 0xe7, 0x5c, 0x5a, 0xdb, 0x54, 0xda, 0x73, 0x5a, 0xdf, 0x30, 0x54, 0x93, 0x57, 0x56, 0xf9, 0x22, 0xe2, 0xd6, 0x6f, 0x85, 0x17, 0x1c, 0x93, 0xe3, 0x5a, 0x69, 0xa7, 0xb6, 0x97, 0x2d, 0xf8, 0x12, 0x91, 0x98, 0x10, 0xa1, 0x62, 0x8b, 0xc3, 0x55, 0xb5, 0xab, 0x7e, 0xf4, 0x21, 0xa3, 0x44, 0x3c, 0xa1, 0x3b, 0x91, 0x13, 0x69, 0x06, 0xeb, 0x07, 0x9a, 0x06, 0x49, 0x11, 0x60, 0x42, 0x7f, 0xab, 0x33, 0x1f, 0x61, 0x92, 0x8d, 0x00, 0x29, 0x5d, 0x5a, 0x61, 0x6b, 0x86, 0x6d, 0x45, 0xd1, 0x5b, 0xbf, 0x47, 0x1e, 0xf7, 0xf8, 0x42, 0x52, 0x87, 0xe5, 0xd0, 0xd8, 0x18, 0x02, 0x4f, 0x66, 0xb3, 0x1e, 0x83, 0xa8, 0x23, 0xa8, 0x34, 0x2a, 0xf7, 0x5c, 0x25, 0x4d, 0x09, 0x6c, 0xae, 0xe1, 0xe3, 0x49, 0x16, 0x2a, 0xf6, 0xee, 0x63, 0x09, 0x90, 0xc2, 0x8d, 0x48, 0x29, 0x96, 0x06, 0xd6, 0xb0, 0x72, 0xcf, 0x3a, 0x43, 0x68, 0x73, 0x78, 0x49, 0x6d, 0x5d, 0xad, 0x7c, 0x58, 0xd2, 0xd1, 0xcd, 0xb4, 0x58, 0x70, 0x67, 0xbd, 0x50, 0xdb, 0x3f, 0x57, 0xeb, 0xe6, 0x47, 0x95, 0x28, 0xca, 0xa4, 0xe2, 0xc9, 0xf0, 0xbb, 0xa7, 0x6f, 0x6a, 0x2d, 0xba, 0x71, 0x2b, 0xd0, 0xf4, 0x0b, 0x0f, 0x67, 0x9b, 0x84, 0xe3, 0x7d, 0xb4, 0x52, 0xc3, 0x0c, 0x65, 0x4d, 0x8c, 0xa1, 0xb6, 0x51, 0xa5, 0xdf, 0x85, 0x87, 0x93, 0x51, 0x58, 0x55, 0xe5, 0x31, 0x74, 0x60, 0x22, 0x15, 0xed, 0x21, 0x8f, 0xc4, 0x30, 0x4d, 0x0a, 0xf3, 0x19, 0x3f, 0x49, 0xf2, 0x66, 0x9e, 0x8f, 0xb1, 0xa6, 0x2b, 0x79, 0x7a, 0x2f, 0xf0, 0x49, 0x7b, 0xdf, 0xa4, 0x1c, 0xae, 0x34, 0x3d, 0x5f, 0xb9, 0x62, 0x0f, 0xa1, 0xee, 0xab, 0x52, 0x76, 0x26, 0x3c, 0x9c, 0x5d, 0xaa, 0x76, 0xba, 0x94, 0x37, 0xdd, 0x25, 0x64, 0x51, 0x3e, 0xaa, 0x9c, 0x15, 0xe0, 0x03, 0xe1, 0xe1, 0x98, 0xb1, 0x06, 0x56, 0x86, 0x05, 0x52, 0x64, 0x51, 0xae, 0x5e, 0x19, 0x3f, 0xe8, 0x1d, 0x32, 0xfc, 0x90, 0xd9, 0xb5, 0x77, 0xc2, 0xed, 0x2b, 0x0b, 0x9d, 0x30, 0xcd, 0xa0, 0x79, 0xc0, 0xda, 0xe1, 0xa8, 0xe0, 0xa3, 0xec, 0x85, 0x87, 0x33, 0x27, 0x2c, 0x60, 0xd7, 0x2b, 0x0e, 0x58, 0xbe, 0xe2, 0xed, 0xc2, 0x2c, 0x03, 0xf5, 0x6e, 0x59, 0x8c, 0x92, 0x8f, 0x34, 0xb7, 0x2a, 0x2e, 0xa6, 0x49, 0xf5, 0x71, 0xf5, 0x86, 0xcc, 0x04, 0x4d, 0xe1, 0x71, 0x4e, 0xad, 0xaa, 0x0d, 0xb3, 0x10, 0x74, 0xd9, 0x58, 0xd0, 0x05, 0x40, 0xc1, 0xe3, 0x76, 0xe0, 0x55, 0xfb, 0x86, 0x38, 0xdf, 0x8b, 0x14, 0x4a, 0x07, 0xc4, 0x65, 0x9a, 0x29, 0x88, 0x8d, 0xf0, 0x18, 0x67, 0x8a, 0x51, 0x08, 0x79, 0x69, 0x55, 0xb8, 0x6a, 0x7e, 0x8b, 0x25, 0x56, 0x46, 0x09, 0xf8, 0x18, 0x68, 0x0e, 0xe2, 0xd2, 0x31, 0x3f, 0xae, 0xc7, 0xcd, 0x6b, 0x92, 0x1a, 0x42, 0xd3, 0xd1, 0xd4, 0x3d, 0xe9, 0xc8, 0x2f, 0x85, 0x76, 0x04, 0xa2, 0x7e, 0xd0, 0xdc, 0xc8, 0xe6, 0xec, 0x16, 0xf7, 0x63, 0xe3, 0x88, 0x81, 0xbf, 0xea, 0x77, 0x55, 0xb8, 0x53, 0x6b, 0x68, 0x6d, 0x1a, 0x8c, 0x09, 0x4c, 0x3c, 0xd8, 0x44, 0x11, 0xb0, 0x5b, 0x3f, 0x9d, 0x55, 0xbe, 0xfe, 0xe3, 0x7d, 0xbc, 0x48, 0x38, 0xef, 0x95, 0xb6, 0x57, 0x0e, 0xa3, 0x7d, 0x6b, 0xe4, 0x69, 0x3b, 0x45, 0xe6, 0xee, 0x96, 0x75, 0x15, 0x81, 0x2d, 0x6a, 0x67, 0x77, 0xf2, 0xd5, 0xc6, 0x75, 0x18, 0x27, 0xe8, 0x97, 0x15, 0x42, 0xc0, 0x84, 0x2d, 0x1e, 0x48, 0xb9, 0xde, 0x2a, 0x32, 0x6a, 0xdd, 0xe3, 0x62, 0xfe, 0xc4, 0x15, 0x87, 0x07, 0xec, 0xaa, 0x18, 0x87, 0xc3, 0xac, 0xca, 0xbb, 0x97, 0x72, 0x89, 0x5b, 0x76, 0xbe, 0x6d, 0x06, 0x35, 0x1a, 0x5c, 0x35, 0x13, 0x97, 0xfa, 0xdc, 0xc9, 0xd8, 0xad, 0x05, 0x55, 0xae, 0xa2, 0x8e, 0xc5, 0x3a, 0xb3, 0xf0, 0x70, 0x86, 0x3c, 0xf5, 0x3d, 0xd9, 0x9e, 0xae, 0xe3, 0xbb, 0xe4, 0x4e, 0x22, 0x60, 0x36, 0xfa, 0xb4, 0xa1, 0xd7, 0xfb, 0x17, 0xb1, 0x07, 0xb4, 0xcf, 0x67, 0x99, 0x6b, 0x91, 0xe3, 0x17, 0x41, 0xf2, 0xae, 0x28, 0x65, 0x71, 0xda, 0x10, 0x98, 0x03, 0xe7, 0x7e, 0xb4, 0x14, 0x77, 0xa5, 0x84, 0x3c, 0x4a, 0x54, 0xa5, 0x4e, 0x54, 0xa2, 0xa4, 0x12, 0x5c, 0xdc, 0x18, 0x7b, 0x7c, 0xf8, 0x79, 0xf3, 0xfc, 0x49, 0xce, 0xda, 0x62, 0x18, 0x64, 0x8c, 0x1c, 0x8a, 0x12, 0xa2, 0xdd, 0x6e, 0xcb, 0x44, 0xac, 0x04, 0x7d, 0x3c, 0xe2, 0xb6, 0x21, 0x7e, 0x93, 0xdf, 0x46, 0x02, 0x5d, 0xd9, 0x77, 0xdc, 0x10, 0x0c, 0xb6, 0x9d, 0x4c, 0xc7, 0x6e, 0xcb, 0x6c, 0x67, 0xf9, 0x45, 0x97, 0xb7, 0x60, 0x0a, 0x8b, 0xa7, 0x3f, 0x82, 0x45, 0x22, 0xa4, 0x12, 0x93, 0xae, 0x82, 0xa8, 0x07, 0x1b, 0xd1, 0x95, 0x84, 0x36, 0x51, 0xa7, 0x7b, 0x84, 0x7b, 0xcf, 0x03, 0xac, 0xa7, 0x7d, 0x10, 0x86, 0x5c, 0x14, 0x80, 0x0a, 0x12, 0xc2, 0xf1, 0x87, 0x02, 0xc5, 0x1b, 0x12, 0x10, 0x65, 0x87, 0xdb, 0xe6, 0x76, 0x7f, 0xbb, 0xeb, 0x5a, 0x9d, 0x36, 0xf5, 0x0f, 0x75, 0xef, 0x58, 0xfa, 0x0c, 0x31, 0xe0, 0x42, 0xd3, 0xcf, 0x70, 0x85, 0x1f, 0x2e, 0x7d, 0xb7, 0x30, 0xb9, 0x96, 0xad, 0xc1, 0x72, 0x1f, 0x3f, 0xfa, 0x8a, 0xe9, 0x56, 0x6f, 0xef, 0xd5, 0xab, 0x9a, 0x3c, 0x2f, 0x1d, 0x28, 0xf5, 0xfd, 0xad, 0x2d, 0x5a, 0x9b, 0x57, 0x13, 0x0d, 0xbf, 0xe8, 0xbd, 0xa2, 0x17, 0xeb, 0xaf, 0x95, 0x09, 0x1c, 0xc1, 0xb8, 0xfd, 0xbd, 0x1e, 0xfe, 0x26, 0xf0, 0x39, 0xf2, 0xa7, 0xb4, 0xbe, 0xf5, 0x0a, 0x3f, 0x17, 0x78, 0x8b, 0x1e, 0xe6, 0x7d, 0xcc, 0x27, 0x13, 0x74, 0x64, 0xe1, 0x93, 0x8a, 0xcb, 0x73, 0x1f, 0x17, 0x63, 0x7f, 0xb9, 0x5b, 0xdd, 0xde, 0x76, 0xdb, 0x72, 0x29, 0x9a, 0x4c, 0x09, 0x70, 0x78, 0x9e, 0x68, 0x27, 0x82, 0xf5, 0xc1, 0x05, 0x42, 0xcd, 0x81, 0xb6, 0x61, 0x46, 0xdb, 0xaf, 0x5e, 0x75, 0x71, 0x66, 0xfb, 0xaf, 0x5e, 0xb5, 0x16, 0x84, 0x3b, 0x9f, 0xb9, 0xcf, 0xad, 0xfb, 0x09, 0x5f, 0xb7, 0x44, 0x53, 0xa2, 0x91, 0x13, 0xfe, 0x0e, 0xfe, 0x26, 0x7a, 0x1d, 0x9d, 0x5f, 0x5c, 0x9f, 0x38, 0x9e, 0x19, 0xba, 0x5f, 0x1c, 0x30, 0x74, 0x4c, 0x4d, 0x8a, 0xc1, 0x2e, 0xa8, 0x95, 0x17, 0x59, 0xbd, 0x60, 0x93, 0xf8, 0xc6, 0x24, 0x15, 0xab, 0xa8, 0x47, 0xf0, 0x0f, 0x7e, 0x46, 0x04, 0x35, 0xec, 0x9a, 0xa6, 0x95, 0x0b, 0xdb, 0xb4, 0x0e, 0x87, 0xbd, 0x41, 0x2e, 0x0e, 0x4e, 0x72, 0x93, 0x60, 0xca, 0x5a, 0x89, 0xd5, 0x1d, 0x9c, 0x08, 0x8b, 0xff, 0xc8, 0x17, 0x6b, 0x5e, 0x81, 0x45, 0x32, 0xc3, 0xbc, 0x55, 0x91, 0x84, 0xfc, 0x42, 0x8f, 0x9e, 0x94, 0xeb, 0x42, 0xf6, 0x2a, 0x37, 0x0a, 0x8f, 0x09, 0xd5, 0xd2, 0xfd, 0x78, 0x20, 0x9e, 0x82, 0x9c, 0x90, 0x13, 0x31, 0xb4, 0x32, 0x0b, 0x87, 0x71, 0xd1, 0x8d, 0xd7, 0x4a, 0xeb, 0xf0, 0x34, 0xde, 0xb9, 0x0c, 0xcf, 0xc1, 0xc3, 0x23, 0x64, 0x27, 0xfe, 0x38, 0x59, 0x68, 0x4a, 0x69, 0x56, 0x1f, 0x07, 0x68, 0x79, 0x92, 0x4e, 0x97, 0x45, 0x38, 0xfd, 0x92, 0xba, 0x3c, 0x48, 0xa6, 0x83, 0x76, 0x0d, 0x88, 0xef, 0xe3, 0x22, 0xd1, 0x26, 0x77, 0xd9, 0xa3, 0xb9, 0xdb, 0x6a, 0x05, 0x6b, 0x3d, 0x10, 0xb6, 0x74, 0xf0, 0x2c, 0x69, 0x2c, 0xe1, 0x02, 0x3d, 0x06, 0xbd, 0x04, 0x92, 0xa2, 0x43, 0x5e, 0x3d, 0xe9, 0xed, 0x27, 0xe9, 0x35, 0xe2, 0x40, 0xc4, 0xc3, 0xa6, 0x26, 0x7e, 0x71, 0x24, 0x5b, 0xe0, 0xe7, 0xd4, 0xad, 0xcd, 0xac, 0xef, 0x1e, 0x9f, 0x25, 0x6f, 0xcb, 0x4d, 0xee, 0xf4, 0x08, 0xf1, 0x41, 0x1b, 0x90, 0xf3, 0x30, 0x9c, 0x0b, 0xfd, 0x95, 0x0f, 0x09, 0x9e, 0xbf, 0xcf, 0x66, 0x79, 0x3c, 0xb6, 0xce, 0x93, 0x85, 0xa6, 0xeb, 0x0a, 0xe4, 0x98, 0x1c, 0xad, 0x97, 0xd5, 0x81, 0x27, 0xcd, 0x67, 0x1c, 0xad, 0x3b, 0x80, 0x22, 0x44, 0xa1, 0x8e, 0x1b, 0x84, 0xb9, 0x14, 0x52, 0x0a, 0x03, 0x64, 0x20, 0xdc, 0x8d, 0x6f, 0xf6, 0x22, 0xbd, 0xf3, 0x69, 0x99, 0x44, 0x17, 0xea, 0x99, 0x89, 0x42, 0xd2, 0x71, 0x69, 0x44, 0x83, 0xd3, 0xff, 0x79, 0xf2, 0x29, 0xa3, 0x4e, 0x45, 0x7c, 0x6f, 0x0a, 0x07, 0xbf, 0x67, 0xc0, 0x4a, 0x89, 0x06, 0x19, 0xa4, 0x8a, 0x78, 0x26, 0x36, 0x3c, 0xac, 0x97, 0x83, 0x0a, 0x14, 0x56, 0x94, 0x96, 0xb8, 0x40, 0x58, 0x3e, 0x6d, 0x63, 0x7d, 0x9f, 0x45, 0x2e, 0xe3, 0x5c, 0x74, 0xaa, 0xf8, 0x62, 0x07, 0x20, 0x9f, 0xe3, 0x9c, 0x5c, 0x89, 0x64, 0xda, 0xa3, 0xb7, 0x97, 0xe1, 0xa4, 0x02, 0xdd, 0x2e, 0x09, 0x11, 0x11, 0x27, 0x05, 0x73, 0x7d, 0xa2, 0x27, 0xa1, 0x5b, 0x69, 0x9f, 0x70, 0x43, 0x06, 0x0c, 0x4f, 0x15, 0xd1, 0xe1, 0x87, 0xab, 0xb3, 0x96, 0x72, 0xc9, 0x01, 0x9d, 0x01, 0x6e, 0x56, 0xe7, 0x2a, 0x21, 0x34, 0xb3, 0x22, 0xba, 0x8c, 0xa7, 0x49, 0xc7, 0x05, 0x90, 0xab, 0x21, 0x48, 0x8a, 0x03, 0x22, 0xe4, 0x4e, 0x71, 0xdb, 0x6e, 0x20, 0x13, 0xb7, 0x61, 0x61, 0xb7, 0xc8, 0x71, 0x32, 0x8b, 0x65, 0xef, 0x96, 0x05, 0x86, 0xf3, 0x69, 0xe7, 0x03, 0xad, 0xa4, 0xd4, 0x4f, 0xd9, 0x80, 0xfe, 0xe4, 0x2c, 0x53, 0x2e, 0xcb, 0x8a, 0x17, 0x48, 0x43, 0x51, 0xe7, 0x0b, 0xf4, 0xc0, 0x77, 0x74, 0x9a, 0xbd, 0xc4, 0x0f, 0xb2, 0xe9, 0x56, 0x60, 0x60, 0xb8, 0xe6, 0x85, 0xaa, 0xfb, 0xee, 0x71, 0xd6, 0x1a, 0x6f, 0x4d, 0x10, 0x8f, 0xb7, 0xa4, 0x58, 0xb2, 0xd7, 0x2a, 0x0c, 0xc3, 0x5f, 0x08, 0xba, 0xc8, 0x38, 0xac, 0x98, 0x71, 0x12, 0x9d, 0xc9, 0xfc, 0x0e, 0x24, 0xd8, 0xc2, 0xba, 0x90, 0x4e, 0xad, 0x96, 0x19, 0x14, 0x5a, 0x6c, 0x3c, 0xc3, 0x86, 0x38, 0xc6, 0xfb, 0x85, 0x6b, 0x1c, 0xe7, 0xd8, 0x43, 0x85, 0x7a, 0xae, 0x67, 0xc6, 0x99, 0x5c, 0x3b, 0xd9, 0x4f, 0x0e, 0x75, 0x68, 0x03, 0x40, 0x47, 0x5d, 0xe9, 0xf2, 0xd4, 0x03, 0xea, 0xc8, 0xa4, 0x0e, 0xde, 0x39, 0x56, 0x87, 0xf6, 0xfe, 0xc3, 0x69, 0x1c, 0xe2, 0x34, 0xff, 0x68, 0x41, 0xcc, 0x75, 0xa6, 0x5b, 0x51, 0x99, 0x0a, 0x1d, 0xa1, 0xd7, 0x7c, 0xc4, 0x56, 0xcc, 0x8a, 0xb0, 0x0c, 0xba, 0xf3, 0x7b, 0x4e, 0x41, 0xcb, 0x31, 0x97, 0x6e, 0xf6, 0xde, 0xa4, 0x20, 0x44, 0x4a, 0x46, 0x20, 0x22, 0x2d, 0x97, 0xdb, 0x05, 0xeb, 0x45, 0xe4, 0x12, 0xde, 0x9e, 0x8f, 0xee, 0x37, 0x92, 0xba, 0x0e, 0xf3, 0x8a, 0x89, 0xd9, 0x00, 0x45, 0x3c, 0xe1, 0x2c, 0xb6, 0xda, 0x42, 0x6c, 0x9d, 0x15, 0xd2, 0x00, 0x5e, 0x3a, 0x18, 0x08, 0xbc, 0x07, 0xfa, 0x2d, 0x03, 0xbb, 0x63, 0x70, 0x81, 0x28, 0x73, 0x86, 0x5a, 0xd8, 0xd7, 0xba, 0x30, 0x79, 0xc6, 0xa6, 0xe9, 0x7f, 0xcd, 0xc9, 0x1e, 0xcd, 0x30, 0x20, 0x4c, 0xca, 0x34, 0xc2, 0xe1, 0xc8, 0x09, 0xa3, 0xf0, 0x71, 0x69, 0xea, 0x08, 0x86, 0xed, 0x37, 0x96, 0xa0, 0x3d, 0x7c, 0xc2, 0x02, 0xf7, 0xb1, 0xb6, 0x30, 0xca, 0x19, 0x75, 0x09, 0x0f, 0x63, 0x03, 0x59, 0x2e, 0x08, 0x2f, 0xa1, 0x10, 0x3a, 0x65, 0xef, 0xe0, 0x23, 0xae, 0x1c, 0xe4, 0x84, 0x8d, 0xe8, 0x4f, 0x3d, 0xdb, 0x78, 0x63, 0xfd, 0x31, 0x01, 0x0d, 0xdb, 0x26, 0x7d, 0x90, 0x21, 0x15, 0xa8, 0xfe, 0x8c, 0xb8, 0x3b, 0x68, 0x59, 0xab, 0x4b, 0x21, 0x23, 0xc4, 0x89, 0x2c, 0xf2, 0xa6, 0x83, 0x16, 0x40, 0x69, 0x96, 0x59, 0xf2, 0x80, 0x18, 0xe0, 0xed, 0xc3, 0xf9, 0x4a, 0xf6, 0xf7, 0x47, 0x57, 0xe7, 0xa7, 0xe7, 0xdf, 0x1c, 0x20, 0x42, 0x5d, 0x52, 0x8c, 0xb0, 0x91, 0x75, 0xf4, 0xd7, 0xe5, 0x38, 0x1d, 0x31, 0xa7, 0x90, 0x16, 0xc1, 0xb5, 0xca, 0x98, 0x44, 0x1c, 0xac, 0xc0, 0x5c, 0xbc, 0x42, 0x18, 0x49, 0xe6, 0xc5, 0xba, 0x9e, 0x22, 0x9f, 0x2e, 0xcd, 0xd6, 0x8f, 0x48, 0x15, 0xa1, 0x30, 0x00, 0x85, 0x47, 0x91, 0x1f, 0x31, 0xd1, 0x62, 0xe3, 0x25, 0x50, 0x14, 0xde, 0x9c, 0x9d, 0x45, 0x3e, 0x94, 0x2f, 0xa7, 0x8f, 0x0a, 0x7d, 0x71, 0xc6, 0x10, 0x0d, 0x64, 0xf2, 0x4d, 0x31, 0x9e, 0x07, 0xc2, 0x9f, 0xfb, 0x16, 0x3a, 0x5c, 0x0f, 0x4c, 0xd7, 0xef, 0xfd, 0x4c, 0x4e, 0xca, 0x33, 0xa6, 0xe4, 0x40, 0x3a, 0xe1, 0xb4, 0x18, 0x93, 0x2d, 0x04, 0x4c, 0x32, 0x9f, 0x54, 0xa8, 0x1e, 0xd5, 0x24, 0x69, 0xbd, 0x2b, 0xd0, 0x2a, 0x67, 0xfb, 0x0d, 0x5b, 0x39, 0x35, 0xe0, 0x14, 0x8e, 0x48, 0x52, 0xd2, 0x2a, 0xd0, 0x23, 0xeb, 0x85, 0xd4, 0x49, 0x0a, 0x7d, 0x52, 0x1e, 0x35, 0x8f, 0x93, 0xd8, 0x74, 0xc7, 0x2e, 0x91, 0x5b, 0xfa, 0xec, 0xe2, 0x3e, 0x29, 0xc4, 0xf8, 0x34, 0x55, 0xc4, 0xc0, 0xec, 0xfa, 0xd1, 0x20, 0x87, 0xe7, 0x03, 0x55, 0x0b, 0xda, 0x73, 0xb1, 0xd6, 0xbc, 0x9d, 0x93, 0x68, 0x4d, 0x5e, 0x15, 0xf5, 0xa3, 0xa2, 0x98, 0x5b, 0x7d, 0xbd, 0x81, 0x7e, 0xcf, 0x48, 0xff, 0xc3, 0xc4, 0x28, 0x14, 0x8f, 0x1a, 0xda, 0x41, 0x0a, 0xe9, 0xf4, 0x80, 0x9d, 0x76, 0x70, 0x67, 0xa9, 0x0b, 0xb5, 0x33, 0xd2, 0x13, 0xbd, 0x54, 0xdd, 0x34, 0xf5, 0xe6, 0x82, 0x83, 0x2d, 0xea, 0x9c, 0xd6, 0x4f, 0xb1, 0xd8, 0x9d, 0x8e, 0xe7, 0x54, 0x3a, 0x85, 0x99, 0x50, 0x29, 0x57, 0xe9, 0x25, 0xa8, 0x61, 0x7a, 0x01, 0xf0, 0x0b, 0xdb, 0xfe, 0x11, 0x8b, 0xf4, 0x9c, 0x3a, 0x79, 0xf7, 0x65, 0x11, 0x37, 0x5d, 0xeb, 0x5c, 0x48, 0x09, 0xd2, 0xa7, 0xf2, 0xea, 0xf4, 0x26, 0xfd, 0x8d, 0x60, 0x5e, 0x0d, 0xcf, 0x41, 0x24, 0x52, 0x19, 0xdf, 0xd9, 0x84, 0xaf, 0x56, 0xc6, 0xa7, 0xc5, 0x2a, 0x4d, 0x19, 0x4d, 0x07, 0x6a, 0xbc, 0x4a, 0x3a, 0x54, 0x1c, 0x39, 0x85, 0x2c, 0x6e, 0xa8, 0xb2, 0x86, 0x49, 0xe0, 0x0f, 0x27, 0x15, 0x5f, 0x12, 0xe4, 0x6a, 0x65, 0xc2, 0x12, 0xb9, 0x49, 0xb3, 0xbb, 0x9c, 0x7e, 0x23, 0x41, 0xaa, 0x40, 0x8a, 0x4a, 0xda, 0x5a, 0xd6, 0x72, 0xdd, 0xd8, 0x55, 0x75, 0xd0, 0x68, 0x11, 0x01, 0xac, 0x85, 0x4b, 0x03, 0xdd, 0x9e, 0x2d, 0xb6, 0x4d, 0x4b, 0x93, 0x14, 0xf8, 0x32, 0x21, 0xf1, 0x76, 0x4d, 0x4b, 0x71, 0x78, 0x71, 0x56, 0x26, 0xd2, 0xe5, 0x98, 0x4b, 0x02, 0x55, 0xe0, 0x88, 0xbc, 0x49, 0x8d, 0xef, 0xa7, 0x5d, 0x92, 0xf4, 0xeb, 0x0d, 0x4b, 0x6b, 0xf6, 0x2b, 0x66, 0x34, 0xd2, 0x45, 0xa2, 0x1b, 0x3c, 0xba, 0xc9, 0x73, 0xa9, 0x39, 0x6d, 0x63, 0xb6, 0x11, 0xa9, 0x34, 0x84, 0x88, 0xd1, 0xa2, 0x3f, 0xd4, 0x5b, 0x55, 0x4a, 0x32, 0x79, 0xf3, 0xee, 0x39, 0x50, 0x83, 0x35, 0x74, 0xd2, 0xba, 0x6c, 0xe3, 0xf9, 0x18, 0xe1, 0x2c, 0xcc, 0xd5, 0x87, 0x57, 0x24, 0x2e, 0xc0, 0xa2, 0x3b, 0xbc, 0x3d, 0x92, 0x59, 0xe9, 0x6e, 0x4a, 0x50, 0xd8, 0x71, 0xae, 0xa5, 0x05, 0xc8, 0x26, 0xaa, 0x21, 0xb3, 0x29, 0xab, 0x07, 0x34, 0x68, 0xa6, 0x69, 0x45, 0x0c, 0xe4, 0x4f, 0x3b, 0x5b, 0x6d, 0x4c, 0x1e, 0x07, 0xd2, 0x1a, 0x57, 0xbc, 0x8d, 0xa5, 0xb1, 0xbf, 0x48, 0x0c, 0xda, 0xc2, 0x00, 0x94, 0x21, 0xcb, 0x05, 0xfa, 0xe9, 0x7a, 0x48, 0x2f, 0x71, 0xd9, 0xb6, 0xff, 0xfd, 0xdf, 0xa3, 0xf7, 0xa1, 0xe5, 0x5f, 0x57, 0xce, 0x19, 0xe3, 0x40, 0xa1, 0x04, 0x33, 0xe5, 0x25, 0xea, 0x27, 0x71, 0x94, 0x76, 0xab, 0x33, 0x90, 0x5d, 0x4f, 0x4d, 0xee, 0xe4, 0x72, 0xe2, 0x68, 0xbe, 0xf9, 0x1a, 0xcf, 0x17, 0x51, 0x80, 0x65, 0x75, 0xf5, 0x06, 0x68, 0x9a, 0x4a, 0x6c, 0xe1, 0x2e, 0xe3, 0x5b, 0x6d, 0xdd, 0xe7, 0xa3, 0xaf, 0x08, 0x23, 0x65, 0x63, 0x3c, 0x96, 0x74, 0x4d, 0xda, 0x10, 0xfc, 0x52, 0x5d, 0x30, 0x52, 0xce, 0x59, 0x2f, 0xe8, 0xed, 0x0f, 0x76, 0x8d, 0x90, 0xec, 0x71, 0x17, 0x0a, 0xbf, 0xc3, 0x6f, 0x77, 0xa2, 0x75, 0xe4, 0xaa, 0x1b, 0x46, 0x79, 0xf5, 0xeb, 0x9f, 0xb5, 0x39, 0x0b, 0xdb, 0x30, 0x31, 0x4b, 0xc8, 0x66, 0xf2, 0x2c, 0xea, 0xaf, 0x60, 0xe5, 0x15, 0x20, 0xff, 0xb1, 0xe7, 0x1b, 0x57, 0x0f, 0x4e, 0x96, 0xb3, 0x90, 0x99, 0x83, 0x77, 0x5b, 0x82, 0x43, 0x69, 0x59, 0x2e, 0xc5, 0x08, 0x34, 0x00, 0x33, 0x06, 0x71, 0x30, 0x9a, 0xc1, 0x7c, 0xe8, 0xd3, 0xe5, 0x0c, 0xb3, 0x4a, 0x5a, 0xd5, 0x13, 0xf2, 0x0e, 0x6b, 0x0b, 0x73, 0xd1, 0x31, 0xc5, 0x8e, 0x92, 0xd3, 0xe1, 0x46, 0x74, 0xd2, 0x48, 0x0d, 0x37, 0xa1, 0x4b, 0xb2, 0xaa, 0x31, 0x5c, 0xe7, 0xe2, 0xf2, 0xfa, 0xf4, 0xe2, 0x7c, 0x10, 0xfd, 0x5b, 0x67, 0x65, 0x79, 0x57, 0x1d, 0x58, 0xf9, 0x87, 0xae, 0x3d, 0x93, 0xe8, 0x50, 0xfc, 0x0c, 0x6d, 0xb6, 0xb1, 0xa3, 0xc4, 0x8f, 0x40, 0x7a, 0x03, 0x7f, 0xd5, 0x37, 0x05, 0xda, 0x4d, 0x4e, 0xab, 0x81, 0x46, 0xe7, 0x69, 0xcb, 0x06, 0xce, 0xaf, 0x69, 0x44, 0x33, 0xb3, 0xb7, 0x36, 0x4b, 0x63, 0xf8, 0x30, 0x07, 0x16, 0xce, 0x57, 0x4b, 0xe5, 0x94, 0x17, 0x68, 0x8b, 0xef, 0x49, 0x2d, 0x65, 0x0b, 0x7a, 0x9d, 0x79, 0xa6, 0x2a, 0x5a, 0x65, 0xa0, 0xc3, 0xdc, 0x37, 0x27, 0xd7, 0xe8, 0xa4, 0xa1, 0x2a, 0x57, 0x3b, 0x41, 0x72, 0x75, 0x89, 0xe2, 0x13, 0x1b, 0xe5, 0x4c, 0x8b, 0x5b, 0xf1, 0xd2, 0x80, 0xf6, 0x3c, 0x8b, 0xb3, 0x60, 0x09, 0x1b, 0x68, 0xb4, 0xc7, 0xb0, 0x1b, 0xb9, 0x85, 0x7e, 0x55, 0xdf, 0x89, 0xd3, 0xd7, 0x84, 0x61, 0x99, 0x2e, 0x3f, 0x5c, 0x8b, 0x9f, 0xea, 0xcd, 0xc9, 0xd9, 0xc9, 0xf5, 0x49, 0xd3, 0x72, 0x1f, 0x32, 0x98, 0x25, 0x95, 0xba, 0x54, 0xc9, 0xe8, 0x26, 0xcb, 0x67, 0xf9, 0x34, 0x95, 0x86, 0xaf, 0xd1, 0xf7, 0xc9, 0xf0, 0xcd, 0xd1, 0x77, 0xa8, 0x4f, 0xa0, 0xcf, 0xe9, 0xf2, 0xea, 0xe2, 0xf2, 0xed, 0xe9, 0xf9, 0x9b, 0x6e, 0x74, 0x7c, 0x71, 0xf9, 0x97, 0x6e, 0xf4, 0xfe, 0xe2, 0xbb, 0x93, 0x40, 0x8a, 0x33, 0x22, 0xdc, 0x7a, 0x14, 0x63, 0x9a, 0xf5, 0x59, 0xc3, 0x3b, 0xe3, 0x90, 0x85, 0x23, 0x44, 0x30, 0xff, 0x1f, 0xb4, 0x5f, 0x64, 0xb7, 0x74, 0xd7, 0x60, 0xeb, 0x40, 0x86, 0xbe, 0x3b, 0x39, 0x7a, 0xd3, 0xf5, 0x00, 0xcc, 0xb1, 0x95, 0x0a, 0x7c, 0x0c, 0xd7, 0x67, 0x16, 0x4d, 0xb0, 0xd7, 0x6c, 0x7d, 0x90, 0x86, 0xc0, 0x41, 0x2e, 0xbe, 0xb1, 0x40, 0xb0, 0x54, 0xa5, 0x3f, 0x6e, 0xcb, 0x9c, 0x10, 0x2c, 0xfe, 0xd6, 0x16, 0xcb, 0x4e, 0xd9, 0x05, 0x2a, 0x6b, 0xae, 0x9a, 0x2d, 0x60, 0x4d, 0x94, 0x56, 0xaf, 0x45, 0x58, 0x6e, 0x96, 0x6c, 0x0b, 0x62, 0x50, 0xb7, 0x06, 0x15, 0x40, 0xfc, 0x88, 0x5d, 0x8f, 0xb1, 0xf4, 0x34, 0xa4, 0xa6, 0x45, 0x60, 0x26, 0xa1, 0x56, 0x3d, 0xb1, 0x28, 0xb1, 0xab, 0x35, 0x6c, 0x01, 0x52, 0x17, 0xd8, 0x26, 0xdc, 0x3c, 0xdd, 0x20, 0xd3, 0xd3, 0xf3, 0x07, 0xfe, 0xb1, 0x80, 0x45, 0x05, 0x12, 0xb7, 0x97, 0x13, 0x20, 0xcb, 0x84, 0x53, 0xa6, 0xf8, 0x98, 0x8c, 0x5b, 0x20, 0xea, 0x9d, 0xaa, 0x53, 0x62, 0x95, 0x82, 0xa5, 0x37, 0x46, 0x1d, 0x33, 0x8c, 0x15, 0xa5, 0x3e, 0xab, 0x3a, 0x9b, 0x70, 0x3d, 0x24, 0xb8, 0xce, 0x80, 0xbe, 0xaf, 0x47, 0xac, 0x68, 0x46, 0xe2, 0xc1, 0x71, 0x37, 0x85, 0x40, 0x37, 0x3c, 0x5f, 0x16, 0x08, 0x58, 0x4f, 0xb8, 0xd0, 0x93, 0xc0, 0x4a, 0x32, 0xf1, 0x88, 0x46, 0x18, 0x7a, 0xeb, 0xb1, 0x2d, 0xed, 0xe6, 0xfc, 0x2a, 0xf7, 0x14, 0xdd, 0x54, 0xe6, 0xe0, 0x85, 0xa8, 0x68, 0x9d, 0xb5, 0x96, 0xda, 0xe6, 0x96, 0xef, 0x6e, 0x3d, 0x58, 0x1f, 0x3b, 0x6a, 0x13, 0x65, 0xd4, 0x13, 0xac, 0x6f, 0x2a, 0xde, 0xf3, 0xb6, 0x6e, 0xfd, 0x6d, 0x0b, 0x63, 0x74, 0xbd, 0xb6, 0xa6, 0xa0, 0xdf, 0xb0, 0xa8, 0xb3, 0x53, 0xb8, 0x0e, 0x01, 0x68, 0x9c, 0x71, 0x4e, 0x8d, 0xa3, 0x29, 0x1d, 0x81, 0xf4, 0x2a, 0xda, 0x7d, 0x18, 0xcb, 0xff, 0x30, 0x76, 0x52, 0x0f, 0x7e, 0x99, 0x5a, 0xac, 0x3f, 0xf1, 0x69, 0xef, 0xcc, 0xae, 0x4e, 0xae, 0xaf, 0xfa, 0xd1, 0xba, 0x8b, 0xf9, 0xfa, 0xa2, 0xbf, 0xe5, 0x07, 0x6d, 0xb0, 0x89, 0x7b, 0xf0, 0xab, 0xd4, 0xdd, 0xbd, 0xe5, 0xab, 0xc4, 0x1b, 0xf0, 0xbb, 0x7e, 0x1e, 0xb1, 0x83, 0xf4, 0xb4, 0x15, 0xfa, 0x9e, 0xdb, 0x2a, 0xbe, 0xf6, 0x3d, 0xfc, 0xc5, 0x8a, 0x55, 0xbe, 0x3b, 0x39, 0x0b, 0xf4, 0xf6, 0xf9, 0xee, 0xea, 0xed, 0x5f, 0xea, 0xab, 0xdc, 0xdd, 0x0b, 0x7c, 0xf5, 0xb7, 0x74, 0xa8, 0x27, 0x65, 0x3e, 0x03, 0x85, 0x85, 0xaa, 0x38, 0xa8, 0x88, 0xe3, 0x00, 0x44, 0x00, 0xe6, 0x9a, 0xff, 0xd8, 0x95, 0xbf, 0xfc, 0xdc, 0xef, 0xf7, 0xbf, 0xf4, 0x51, 0xd1, 0xc9, 0x47, 0x63, 0x96, 0x2b, 0xcf, 0x36, 0x2d, 0x70, 0xaa, 0x9a, 0xa1, 0x2a, 0x21, 0x8c, 0x5a, 0x2c, 0xe2, 0xb4, 0xa0, 0x9e, 0x40, 0x41, 0x81, 0x8b, 0x4b, 0xb2, 0x95, 0x5e, 0x46, 0x9b, 0x13, 0x44, 0x30, 0xbe, 0xae, 0xeb, 0xe5, 0x86, 0xd4, 0x55, 0x5b, 0x19, 0x1c, 0x8f, 0x3d, 0x47, 0x08, 0xf7, 0x65, 0xc1, 0xcf, 0x16, 0xe8, 0x9f, 0x65, 0x5b, 0xc7, 0xca, 0xda, 0x4c, 0x65, 0x87, 0xac, 0x7e, 0x6c, 0xa6, 0x1f, 0xf4, 0x5e, 0x48, 0x9d, 0xe4, 0xb1, 0x84, 0xd4, 0xc9, 0x91, 0x1c, 0x93, 0x58, 0xa1, 0x36, 0xb3, 0x49, 0x35, 0xda, 0xc4, 0x75, 0x96, 0x35, 0x0d, 0xd0, 0xa8, 0x70, 0x9e, 0x13, 0xc9, 0xcd, 0x93, 0xa4, 0x0a, 0x5a, 0x4e, 0x6e, 0x71, 0x4a, 0x12, 0x6c, 0x11, 0xaf, 0xa3, 0xa9, 0xb3, 0x7e, 0xe0, 0x73, 0xb3, 0x5a, 0x47, 0x24, 0xb7, 0x02, 0x51, 0x5b, 0x5d, 0x78, 0xec, 0xd0, 0x29, 0x53, 0xf3, 0xd5, 0x7e, 0xe2, 0xce, 0x4a, 0x49, 0x98, 0x48, 0x41, 0xe8, 0xe3, 0x93, 0x9a, 0x44, 0x50, 0x0f, 0x9d, 0x7b, 0xe8, 0x2d, 0xb5, 0xcf, 0x34, 0x01, 0x46, 0x12, 0x57, 0x23, 0x1e, 0x57, 0xea, 0xcb, 0xc3, 0xaf, 0x4d, 0xc2, 0x06, 0x95, 0x99, 0xaf, 0xfd, 0xdb, 0x1a, 0x2a, 0xc2, 0xf4, 0x7a, 0xb0, 0xb6, 0x5d, 0x09, 0x17, 0x0d, 0x1b, 0x7c, 0x2a, 0xa0, 0x37, 0x98, 0x4d, 0x31, 0xc4, 0xa7, 0xbc, 0xd4, 0x25, 0x1e, 0x5a, 0x42, 0x3f, 0xfa, 0x3e, 0x9d, 0x8d, 0x47, 0x71, 0x41, 0xe9, 0x61, 0xbe, 0x78, 0x15, 0x32, 0xe1, 0xfb, 0x54, 0xe6, 0xf4, 0x55, 0x7b, 0x79, 0xb4, 0x99, 0x4c, 0x98, 0xea, 0x03, 0x45, 0x3f, 0xe6, 0x30, 0x30, 0xf8, 0xdd, 0x56, 0x74, 0xc6, 0xe4, 0xa3, 0x7b, 0x8c, 0xa2, 0xae, 0xde, 0xc1, 0xa3, 0x7e, 0xae, 0x1a, 0x87, 0xe8, 0xed, 0xf9, 0xb1, 0x94, 0x74, 0x71, 0xb7, 0x47, 0xee, 0xab, 0x17, 0x5d, 0xfe, 0xd7, 0x0b, 0x5b, 0x7e, 0xe2, 0x18, 0x69, 0x6c, 0xc7, 0xb0, 0xd6, 0x7f, 0x7a, 0xa9, 0x45, 0xae, 0x4d, 0x9e, 0x38, 0x70, 0x30, 0xc9, 0x79, 0x96, 0x5a, 0xb6, 0x06, 0xef, 0xe8, 0x6c, 0x71, 0x47, 0x80, 0x7f, 0xfd, 0x38, 0x2c, 0x10, 0x76, 0xa4, 0x2a, 0x7f, 0x5e, 0x55, 0x4f, 0x0c, 0x3a, 0xff, 0xcb, 0x7e, 0xa0, 0xfd, 0x76, 0xf0, 0x43, 0x26, 0xdd, 0xd7, 0x7e, 0x0d, 0x81, 0xa2, 0x28, 0x6c, 0x87, 0x59, 0x3f, 0xb6, 0x9c, 0x38, 0xf8, 0xa1, 0x57, 0x4f, 0x7c, 0x88, 0x8f, 0xd4, 0xe0, 0xbe, 0xdd, 0x2b, 0x55, 0x98, 0xe9, 0x4b, 0x2f, 0xed, 0xbd, 0xfe, 0xd6, 0xf3, 0x33, 0x94, 0xad, 0xf1, 0xcd, 0xf0, 0x83, 0xfc, 0x13, 0xa2, 0x12, 0x49, 0x11, 0xcb, 0xdb, 0x68, 0x6e, 0x65, 0x67, 0x0c, 0x84, 0xcd, 0xa9, 0xf1, 0x72, 0xd8, 0x00, 0x2a, 0x11, 0x2a, 0xc0, 0x38, 0x2c, 0xbd, 0x1d, 0x38, 0xcd, 0x1a, 0xee, 0x16, 0xe1, 0x89, 0x18, 0x14, 0xe5, 0x1f, 0x23, 0xfc, 0x82, 0x72, 0xb9, 0x13, 0x2c, 0x62, 0xba, 0x3a, 0x79, 0xfb, 0x61, 0x70, 0xf2, 0x26, 0x8a, 0x03, 0x10, 0x58, 0x14, 0x2f, 0x4d, 0xc9, 0x2d, 0x27, 0x0d, 0x82, 0xaa, 0x3c, 0xe7, 0x8c, 0x20, 0x99, 0x8b, 0xd7, 0x73, 0x50, 0x92, 0x8b, 0xc0, 0x32, 0xf6, 0xeb, 0x4e, 0x58, 0x8f, 0x93, 0x17, 0x7f, 0x01, 0xee, 0x08, 0xaf, 0x7a, 0x9c, 0x60, 0x73, 0xae, 0x43, 0xce, 0x82, 0xf1, 0x40, 0xd5, 0x6c, 0x1b, 0xaf, 0x72, 0x96, 0x24, 0x0b, 0x29, 0xfa, 0xb3, 0x9d, 0xe4, 0xe1, 0x6c, 0xd4, 0x13, 0x28, 0xcd, 0x39, 0x68, 0x54, 0x0d, 0x1c, 0xc6, 0x2d, 0x9d, 0xa4, 0x08, 0x5e, 0x8d, 0x33, 0xd6, 0x2d, 0x66, 0x80, 0xdd, 0x16, 0xde, 0x95, 0xf5, 0xb4, 0x6a, 0xb8, 0xd0, 0xbd, 0xae, 0x7a, 0xe4, 0x52, 0x47, 0x80, 0x1e, 0xb0, 0x8b, 0x78, 0x32, 0xf1, 0x6c, 0x9a, 0x17, 0x30, 0xde, 0xdc, 0xd4, 0x29, 0x32, 0x9c, 0x43, 0xb9, 0xd1, 0xec, 0xc5, 0xe9, 0xd7, 0x7c, 0x73, 0xa9, 0x23, 0x85, 0xc0, 0x13, 0xae, 0xe1, 0x46, 0xb6, 0xc0, 0xfb, 0x44, 0x1e, 0x13, 0x0c, 0x0f, 0xb2, 0x4c, 0x1b, 0x48, 0xd5, 0x35, 0xed, 0x07, 0x6f, 0xa1, 0x67, 0x6e, 0x62, 0xd7, 0x91, 0xa6, 0x3b, 0x47, 0x55, 0x77, 0x0d, 0x07, 0xb8, 0x73, 0xff, 0x3d, 0xbb, 0xb9, 0x6d, 0xef, 0x84, 0x6e, 0xc0, 0x3c, 0x7e, 0x20, 0x17, 0x55, 0x2b, 0x39, 0xb0, 0xc3, 0x16, 0xb7, 0x03, 0x1f, 0x2b, 0x98, 0xe5, 0x13, 0x83, 0xb5, 0x95, 0x2f, 0x9c, 0x97, 0x64, 0x4e, 0x5a, 0x1c, 0x58, 0x64, 0x77, 0xfb, 0xa1, 0x47, 0x4a, 0xe3, 0x36, 0x2d, 0xcd, 0xc8, 0x4f, 0x18, 0xe3, 0x32, 0xd1, 0x88, 0x5b, 0xe7, 0xd6, 0x52, 0xf4, 0xbd, 0x0d, 0xfc, 0xf1, 0x2c, 0xc7, 0x28, 0x25, 0x13, 0x03, 0x7d, 0xdf, 0x87, 0xec, 0x43, 0x23, 0xa1, 0x40, 0x42, 0x54, 0x83, 0x96, 0x7d, 0xc2, 0xd4, 0xca, 0x86, 0x8a, 0xc5, 0x10, 0xc0, 0x8c, 0x3d, 0x60, 0x13, 0x3b, 0x8e, 0xbc, 0xe9, 0xe5, 0xb0, 0xf2, 0x38, 0xac, 0x28, 0xd0, 0x10, 0xdd, 0x3a, 0xb2, 0xb2, 0x6c, 0x36, 0x95, 0x67, 0x52, 0x83, 0x6a, 0x6a, 0xa5, 0x26, 0x35, 0xf2, 0x01, 0x55, 0xad, 0xab, 0xed, 0x73, 0xa8, 0xb4, 0x09, 0x97, 0x43, 0x76, 0x66, 0x9c, 0xb9, 0x73, 0xa5, 0x03, 0x80, 0x31, 0xd2, 0x7c, 0x4c, 0x45, 0x51, 0xdc, 0x86, 0xa7, 0x0d, 0x3e, 0x46, 0xe6, 0xb2, 0x86, 0x9e, 0xca, 0x87, 0x74, 0xbe, 0x9c, 0xd3, 0xfb, 0x5d, 0x2e, 0x7f, 0x9c, 0xa3, 0xd4, 0xd2, 0x43, 0xa5, 0xec, 0xc2, 0x4a, 0x29, 0x2a, 0xe4, 0xcc, 0x40, 0xde, 0x46, 0x44, 0x5b, 0x71, 0xc6, 0x0f, 0xbe, 0xc5, 0x2d, 0x36, 0xe8, 0xa0, 0xfe, 0xdb, 0xe9, 0x33, 0x3a, 0x04, 0x8d, 0xee, 0x4b, 0x7f, 0x12, 0x3e, 0xeb, 0x20, 0xba, 0xc4, 0x3c, 0xe7, 0x64, 0xec, 0x58, 0x91, 0x42, 0x6e, 0x04, 0x62, 0xc3, 0x67, 0xd4, 0xce, 0xa1, 0xa4, 0xd5, 0x24, 0xcd, 0x57, 0x28, 0x1e, 0x97, 0x6a, 0x9d, 0xbf, 0x2c, 0x96, 0x84, 0xee, 0xa7, 0x0c, 0xe9, 0xb7, 0x5c, 0x78, 0x32, 0xdf, 0xf0, 0x09, 0xa3, 0x8e, 0xc2, 0xe7, 0xb7, 0x24, 0x27, 0x46, 0x6c, 0x5b, 0xf4, 0x97, 0xcb, 0x1e, 0x1b, 0x37, 0x96, 0x34, 0x5c, 0x08, 0x77, 0xd6, 0x24, 0x5e, 0xe6, 0x09, 0x11, 0x56, 0x4c, 0x19, 0x0e, 0xe9, 0x00, 0x37, 0x85, 0x8f, 0xaf, 0xab, 0x65, 0x78, 0x7b, 0x0f, 0x0f, 0x1e, 0x85, 0x3b, 0x06, 0x31, 0xe3, 0x4d, 0xb2, 0xb5, 0xbc, 0xb7, 0xf5, 0x39, 0xfe, 0x73, 0xff, 0xa1, 0x61, 0x34, 0xf7, 0x83, 0xe0, 0x90, 0x5a, 0x96, 0x1b, 0x0f, 0x73, 0x0e, 0xc1, 0xf1, 0x86, 0xc5, 0xce, 0x66, 0x6a, 0x14, 0x41, 0x3a, 0xbf, 0xde, 0xc7, 0xb8, 0xb9, 0x79, 0xe6, 0xa7, 0x36, 0x50, 0x2e, 0xa6, 0xd3, 0xeb, 0x55, 0x03, 0xa5, 0xd4, 0xb4, 0x10, 0x94, 0x7f, 0xdc, 0x4c, 0xdd, 0x2b, 0x1d, 0x74, 0x9c, 0x2f, 0x39, 0x90, 0x99, 0x78, 0x91, 0xb1, 0x94, 0x77, 0x1f, 0xaf, 0x14, 0x88, 0xac, 0x74, 0x86, 0xef, 0xf0, 0xbd, 0x2e, 0xa3, 0x6d, 0x38, 0x86, 0x34, 0x5b, 0x56, 0x06, 0xac, 0x8f, 0x3e, 0xa8, 0x14, 0x1a, 0xdc, 0x7d, 0xe4, 0xf3, 0x46, 0xb0, 0x08, 0x2f, 0x28, 0x9d, 0x00, 0x21, 0xdf, 0x13, 0xd2, 0xc9, 0xc5, 0xc1, 0xe3, 0x4a, 0xd9, 0x80, 0xab, 0xc8, 0x44, 0x61, 0xa5, 0x73, 0x53, 0xf2, 0x00, 0x9b, 0xcd, 0x20, 0x4a, 0x91, 0x11, 0x0e, 0x56, 0xa8, 0x49, 0x86, 0x30, 0x37, 0x6c, 0x08, 0x64, 0xfe, 0xd4, 0x98, 0xb8, 0x69, 0xe1, 0x45, 0x7c, 0x2e, 0xaf, 0xe4, 0x4a, 0x9a, 0xe6, 0x6b, 0xac, 0xb5, 0x85, 0xaf, 0xb6, 0x34, 0x50, 0x63, 0x6c, 0x3d, 0xd0, 0xda, 0x5e, 0x60, 0x35, 0xb0, 0x53, 0x88, 0x06, 0x27, 0x61, 0xb2, 0x36, 0x71, 0xf8, 0x2b, 0xfa, 0xf4, 0x11, 0x86, 0x8c, 0x0f, 0x42, 0x1a, 0x99, 0x5b, 0xcc, 0x8d, 0xac, 0x97, 0x78, 0x01, 0xf9, 0xeb, 0x13, 0xc5, 0xe3, 0x46, 0xa4, 0x6e, 0xbe, 0xac, 0xc6, 0x01, 0xcf, 0xe9, 0x00, 0xc9, 0x83, 0xcf, 0x99, 0x43, 0xaa, 0xce, 0xef, 0xc8, 0x8e, 0xca, 0x18, 0xe1, 0x27, 0x97, 0xd5, 0xcd, 0xdf, 0xd3, 0x71, 0x10, 0xb9, 0x01, 0x6f, 0x03, 0xfc, 0x1a, 0x4e, 0xad, 0x64, 0xf7, 0x97, 0x22, 0x9b, 0x46, 0xeb, 0xf2, 0xda, 0x46, 0x37, 0x1a, 0x2f, 0xc9, 0x21, 0x37, 0x38, 0x1a, 0x9c, 0x45, 0x97, 0x67, 0x47, 0xa7, 0xe7, 0xf0, 0x4e, 0xcf, 0x37, 0x52, 0x0d, 0x60, 0x59, 0xb7, 0xd9, 0x62, 0x8c, 0x3c, 0x9e, 0x75, 0x4c, 0x33, 0xf3, 0x1d, 0xfe, 0x90, 0x8f, 0x69, 0x34, 0x26, 0x51, 0x5a, 0xab, 0x3d, 0xe8, 0x2d, 0x35, 0xe3, 0xa9, 0x1d, 0x55, 0xc7, 0x2a, 0x4d, 0x9a, 0x29, 0x23, 0xa9, 0xa8, 0x4e, 0xac, 0x91, 0x2f, 0x23, 0x48, 0xae, 0xbb, 0x44, 0xa6, 0xe6, 0xaf, 0x06, 0x56, 0x6e, 0xb3, 0x8b, 0x70, 0x86, 0x30, 0x23, 0xee, 0x98, 0x05, 0x54, 0xe1, 0x0c, 0x4b, 0xe0, 0x6e, 0x26, 0xcb, 0x95, 0x32, 0x06, 0xdb, 0x32, 0xa1, 0x60, 0x52, 0xe8, 0x76, 0xc4, 0xe4, 0x50, 0xd9, 0x26, 0x15, 0xb3, 0x4e, 0x56, 0x7e, 0x4c, 0x85, 0xc3, 0xc6, 0x4a, 0xc3, 0xc5, 0xae, 0x95, 0x9e, 0x84, 0x1e, 0xe6, 0x0f, 0x5d, 0x0b, 0x93, 0x40, 0xa5, 0x4d, 0x26, 0xbf, 0x61, 0x0a, 0xcc, 0x8c, 0x60, 0xa8, 0x78, 0x24, 0x18, 0xb4, 0x6b, 0x32, 0xdd, 0xcb, 0x9b, 0xd8, 0x2f, 0x18, 0x98, 0x83, 0x76, 0x0b, 0x03, 0xba, 0xae, 0xd1, 0x55, 0x34, 0xf6, 0xa2, 0xd1, 0xcb, 0x9b, 0x68, 0x2c, 0x6d, 0xea, 0x38, 0x27, 0x94, 0x65, 0x6b, 0x72, 0xe4, 0x0c, 0x77, 0x86, 0x21, 0x88, 0x8e, 0xea, 0xe4, 0xb0, 0x12, 0x80, 0x7d, 0xbb, 0xf1, 0xbd, 0x4f, 0x84, 0x12, 0xcb, 0xa8, 0xdd, 0x6d, 0x8d, 0x2f, 0xcb, 0x03, 0xfe, 0xba, 0x05, 0xa3, 0xf6, 0x27, 0xc3, 0xc8, 0x5e, 0x58, 0xcd, 0xc4, 0x0d, 0x4a, 0x43, 0xf0, 0x50, 0xf4, 0xc4, 0xa6, 0xa4, 0xc6, 0x3d, 0x95, 0x61, 0xc2, 0xd0, 0xb3, 0xba, 0xf2, 0x01, 0x52, 0x3f, 0x76, 0xf0, 0xed, 0x85, 0x60, 0xac, 0x4c, 0x7c, 0x56, 0xec, 0xac, 0x92, 0x9e, 0xc6, 0x44, 0xb9, 0x4a, 0xd4, 0x39, 0x23, 0xc9, 0x71, 0x0c, 0x9b, 0x6f, 0x86, 0x0d, 0x10, 0xfc, 0x76, 0x09, 0x9c, 0x82, 0x30, 0xe1, 0x26, 0xa9, 0x3a, 0x03, 0x67, 0x4c, 0x8f, 0x0f, 0x53, 0x13, 0x0d, 0xa2, 0xb3, 0xbf, 0x2d, 0xd3, 0x84, 0xba, 0xf9, 0x82, 0x1c, 0x8e, 0xde, 0x70, 0xc6, 0xa4, 0x34, 0x1b, 0xe5, 0xae, 0xc6, 0xd4, 0xf9, 0x18, 0x1f, 0x35, 0x13, 0xf0, 0xf8, 0x30, 0x4c, 0x08, 0xe5, 0xd3, 0x7b, 0x9a, 0xf4, 0x31, 0x4e, 0x7a, 0x0e, 0x02, 0x90, 0xfc, 0x5a, 0x0e, 0xba, 0x9e, 0x26, 0xd3, 0x68, 0x85, 0x0b, 0x8b, 0xaa, 0xb8, 0xbc, 0xf5, 0x6b, 0x58, 0xba, 0xb5, 0x4e, 0x6d, 0xe4, 0x4b, 0x11, 0xc6, 0x54, 0x61, 0x9b, 0xbf, 0x2c, 0x9e, 0x6d, 0x96, 0xd5, 0x18, 0xf5, 0x82, 0x65, 0x36, 0xc3, 0x49, 0xe2, 0x50, 0x2d, 0x7d, 0x43, 0x03, 0x38, 0x54, 0x04, 0x81, 0xde, 0x38, 0x20, 0x8a, 0xe9, 0x18, 0x36, 0x28, 0xb5, 0x7c, 0xae, 0x61, 0x87, 0x3f, 0x11, 0xb9, 0xea, 0x83, 0x62, 0xb9, 0x5b, 0x85, 0x6c, 0x87, 0x57, 0x4c, 0x1b, 0x59, 0x3b, 0xb7, 0x55, 0x10, 0x21, 0x77, 0x38, 0x21, 0x20, 0xb4, 0x61, 0x5e, 0x2a, 0x78, 0x3a, 0x2c, 0x12, 0x5e, 0xaf, 0xdd, 0x27, 0x82, 0xa0, 0xfb, 0x85, 0x28, 0x3f, 0xdc, 0x2f, 0xdd, 0xc1, 0xf8, 0x59, 0xd5, 0x26, 0xdd, 0x6f, 0x32, 0xff, 0x8b, 0x01, 0x7e, 0x42, 0x08, 0x66, 0xe8, 0x62, 0x31, 0x39, 0xc1, 0x92, 0xe8, 0x57, 0x03, 0xba, 0x21, 0xa7, 0x06, 0x26, 0x5e, 0x04, 0x5a, 0x74, 0x02, 0x39, 0x2d, 0x05, 0x1b, 0x64, 0x34, 0x03, 0x1d, 0x28, 0xe0, 0x88, 0x19, 0x08, 0x30, 0x1c, 0xc2, 0xe0, 0x75, 0x9b, 0x22, 0xbb, 0x5c, 0xa2, 0x6a, 0x3e, 0x5b, 0xe2, 0xb7, 0x19, 0x41, 0xce, 0x20, 0x98, 0x29, 0xa4, 0x41, 0x10, 0xf5, 0xcf, 0x40, 0x90, 0xe1, 0x1d, 0x75, 0x00, 0x10, 0x15, 0xd3, 0xd7, 0x60, 0x03, 0x36, 0x31, 0xa2, 0xfa, 0x2d, 0xb3, 0x43, 0x6f, 0x09, 0x0f, 0x93, 0x08, 0xc0, 0xaa, 0xe3, 0x98, 0xc2, 0x32, 0x2f, 0x9d, 0x8e, 0x20, 0x04, 0x0a, 0xa6, 0x4e, 0x10, 0xd5, 0x8d, 0x72, 0x26, 0x58, 0xf9, 0x72, 0xe7, 0xa6, 0x1a, 0x8a, 0x02, 0x08, 0x50, 0xe5, 0x85, 0x83, 0x03, 0x08, 0x04, 0x90, 0x79, 0xf1, 0x40, 0x44, 0xe6, 0xe2, 0xc6, 0x82, 0xc4, 0x73, 0x58, 0xa1, 0x96, 0x22, 0xb2, 0x52, 0xef, 0x5e, 0x6d, 0x4a, 0x0c, 0xd1, 0x94, 0x85, 0x32, 0xf8, 0xf9, 0xa5, 0x75, 0x05, 0xe9, 0xa1, 0xd7, 0x36, 0x6a, 0x71, 0xb3, 0xbc, 0x06, 0x43, 0xfd, 0xbb, 0xea, 0x5c, 0xfb, 0xf5, 0x86, 0x7a, 0x02, 0xe9, 0xf8, 0xab, 0x2e, 0x54, 0xfc, 0xbc, 0x1b, 0xd5, 0x52, 0x6d, 0xf3, 0xff, 0xe6, 0x8d, 0x8a, 0x9f, 0x77, 0xa5, 0xe2, 0xda, 0x9d, 0xc2, 0x65, 0xfa, 0x6c, 0xe9, 0xa1, 0x75, 0xc6, 0xbf, 0xe1, 0x2d, 0x33, 0x89, 0x49, 0xcf, 0xbd, 0x63, 0x4a, 0x13, 0xff, 0x6f, 0xdf, 0xb2, 0xcf, 0x1b, 0x5a, 0x20, 0xe1, 0xa3, 0xae, 0xe8, 0x5b, 0xe9, 0xe6, 0x6e, 0xa1, 0x82, 0x8c, 0xba, 0xd6, 0xa6, 0x81, 0x32, 0x0c, 0x37, 0xaf, 0x64, 0xe8, 0xad, 0x60, 0xe8, 0x32, 0xd7, 0xa3, 0xdd, 0x37, 0xc7, 0xa1, 0xb8, 0x03, 0x2b, 0x47, 0xf6, 0x9c, 0xb7, 0x8a, 0x10, 0x6d, 0x71, 0x53, 0xfa, 0xa2, 0x3e, 0xe8, 0x9a, 0xa6, 0x20, 0xd7, 0x17, 0x29, 0x69, 0x07, 0xa0, 0xb8, 0xa0, 0x79, 0xfb, 0xcd, 0x60, 0xd0, 0x3b, 0xba, 0x3c, 0x8d, 0x9e, 0xb0, 0xbb, 0x08, 0x17, 0xc6, 0xce, 0x31, 0x64, 0x2f, 0xb7, 0xa7, 0x61, 0xd5, 0xbf, 0x0e, 0x7a, 0x6e, 0x73, 0x5b, 0x8f, 0xca, 0xa8, 0x96, 0x66, 0xac, 0x93, 0x32, 0x2d, 0x37, 0x50, 0xdb, 0x56, 0xd4, 0x65, 0x4a, 0xf5, 0x47, 0x67, 0x0d, 0x72, 0x2d, 0x7a, 0xc0, 0xcb, 0xc9, 0x26, 0x84, 0x1d, 0x44, 0xc7, 0xd9, 0x7e, 0xf5, 0x62, 0x1b, 0x6e, 0xc5, 0x23, 0xa3, 0x3e, 0xca, 0xcb, 0x7b, 0xfd, 0xdd, 0xcd, 0xbd, 0xfe, 0x1e, 0xf2, 0x34, 0x09, 0x96, 0x92, 0xb3, 0x43, 0x86, 0x07, 0x6e, 0x17, 0xc8, 0x4a, 0x62, 0x21, 0x76, 0x7e, 0x72, 0x1c, 0x71, 0xea, 0x2a, 0xc1, 0x00, 0x36, 0x8c, 0x2e, 0xce, 0x70, 0xa3, 0x14, 0x16, 0x39, 0x42, 0x26, 0x56, 0xcf, 0x49, 0xe1, 0x6d, 0x87, 0x9a, 0x12, 0x64, 0x71, 0x65, 0x66, 0x22, 0xc8, 0xee, 0xd8, 0xaa, 0x90, 0x7d, 0xc1, 0x39, 0xfa, 0x15, 0x68, 0xce, 0x96, 0x38, 0x1b, 0xf6, 0x44, 0x7a, 0xf9, 0x5e, 0xfb, 0xf9, 0xa8, 0xf9, 0xd2, 0x62, 0x00, 0x59, 0xcf, 0xbd, 0x67, 0xe7, 0x08, 0x43, 0x54, 0xa3, 0x14, 0x5d, 0x90, 0xa3, 0xb9, 0x31, 0x49, 0x26, 0x7f, 0x1b, 0x67, 0xfd, 0x5f, 0x6a, 0x4f, 0x05, 0x14, 0x62, 0xc7, 0x6c, 0xd2, 0xa9, 0x0b, 0x23, 0x13, 0x5b, 0xa9, 0x6d, 0x41, 0x62, 0x22, 0x35, 0x3d, 0x64, 0x4c, 0x02, 0x78, 0x99, 0xd9, 0x82, 0x72, 0x86, 0x32, 0xe3, 0x07, 0x7e, 0xa6, 0xa3, 0x07, 0x0c, 0x72, 0xfc, 0x18, 0x8f, 0x55, 0x24, 0xf1, 0x4c, 0x66, 0xe5, 0x7c, 0xc7, 0xff, 0x25, 0xee, 0x1e, 0x31, 0xdb, 0xd2, 0x4f, 0xcb, 0x94, 0xa0, 0x82, 0x33, 0x05, 0x93, 0xa6, 0x65, 0x3b, 0xb9, 0x2c, 0x0a, 0x10, 0x27, 0xe9, 0x22, 0x9e, 0x45, 0xcf, 0xa8, 0x2d, 0x68, 0x3f, 0xfc, 0x27, 0xfa, 0xf4, 0xd2, 0xec, 0xf5, 0x76, 0xae, 0x60, 0x74, 0x92, 0x7a, 0xd4, 0x94, 0xaa, 0x01, 0x2e, 0xd7, 0x32, 0x18, 0x22, 0x27, 0x58, 0x6e, 0xa6, 0x14, 0xd7, 0x4c, 0xa0, 0x01, 0x4b, 0xd2, 0x78, 0x5e, 0xd1, 0x1d, 0x67, 0x43, 0x69, 0x3a, 0xac, 0xd4, 0xbc, 0x6e, 0x34, 0x19, 0x61, 0x88, 0xb9, 0x57, 0xb9, 0x30, 0xc5, 0x27, 0x39, 0xef, 0x6f, 0xc1, 0x0c, 0x51, 0x85, 0x63, 0x3f, 0xc3, 0x2f, 0x57, 0xe6, 0x64, 0x0b, 0xa3, 0x75, 0x4a, 0x03, 0x91, 0x1a, 0x61, 0xc5, 0x09, 0xd5, 0xc4, 0x82, 0x80, 0xb3, 0x88, 0xa2, 0xc6, 0x44, 0x20, 0xb8, 0x21, 0x4f, 0x98, 0x56, 0x01, 0xc5, 0xcf, 0xe3, 0xb3, 0xff, 0x4f, 0xa8, 0x81, 0xfb, 0x91, 0x39, 0xab, 0xe7, 0xa8, 0x83, 0x8c, 0xac, 0xce, 0xfd, 0xc6, 0x3d, 0xe8, 0x3b, 0x6b, 0x72, 0xfd, 0xff, 0xda, 0xe0, 0xff, 0x49, 0xda, 0xe0, 0xbf, 0x72, 0x4b, 0x7b, 0x92, 0xd7, 0xcc, 0xd7, 0xd2, 0x64, 0x56, 0x49, 0x1d, 0x4a, 0xb0, 0xe0, 0x60, 0xf6, 0xd8, 0x8f, 0x5a, 0xe0, 0x8d, 0x9f, 0xb8, 0xa2, 0x3e, 0x29, 0xfc, 0xbf, 0x71, 0x45, 0x9f, 0x75, 0x33, 0xff, 0x7f, 0xdf, 0xc7, 0xff, 0x6e, 0xf7, 0x30, 0x40, 0x90, 0x3a, 0xd8, 0x3a, 0x90, 0xd9, 0x3d, 0x66, 0xed, 0x71, 0xb3, 0x33, 0xb2, 0xb4, 0x37, 0xac, 0xea, 0x83, 0xe5, 0x78, 0xbc, 0x75, 0xa7, 0x97, 0xdf, 0xbd, 0x20, 0x14, 0x9e, 0x41, 0x33, 0x99, 0xa5, 0x88, 0xce, 0xde, 0x1c, 0x5d, 0xfe, 0x82, 0xdb, 0xfe, 0x17, 0x72, 0xb3, 0x2e, 0x92, 0x64, 0xdc, 0xe3, 0xb8, 0xe1, 0x21, 0xfd, 0x23, 0x18, 0x70, 0x57, 0x74, 0x0d, 0x22, 0x5b, 0x0c, 0x27, 0xfa, 0x79, 0x0c, 0xf4, 0x32, 0xa8, 0x29, 0x99, 0x60, 0xde, 0x2c, 0xa8, 0xed, 0xb2, 0xe7, 0x63, 0xc9, 0xb3, 0xf1, 0x86, 0xa8, 0x80, 0xfc, 0x6d, 0x22, 0x15, 0xc9, 0x3f, 0xc1, 0xeb, 0x3d, 0x45, 0x5c, 0x3c, 0x03, 0x1d, 0xea, 0x3c, 0xc3, 0x99, 0x78, 0xc1, 0x64, 0xa8, 0x47, 0xbb, 0x14, 0x0e, 0x79, 0x32, 0x7a, 0xdd, 0xee, 0x16, 0xfa, 0xdf, 0x89, 0x83, 0x24, 0xd5, 0x27, 0x44, 0xdb, 0x68, 0x7e, 0xbe, 0x2d, 0x9d, 0x66, 0xe5, 0x56, 0xba, 0x27, 0x51, 0xdb, 0x41, 0x8c, 0x90, 0x73, 0xe8, 0xd0, 0xeb, 0x52, 0xee, 0x7c, 0x93, 0x33, 0x48, 0x78, 0xbe, 0xe6, 0x13, 0xf5, 0xbd, 0x3c, 0x9d, 0xd4, 0xb7, 0x33, 0x90, 0xbd, 0xdb, 0xad, 0x65, 0x2b, 0xb9, 0x53, 0x32, 0x71, 0xf2, 0xed, 0x48, 0x5d, 0xfb, 0x8c, 0x29, 0x21, 0x50, 0x16, 0x7f, 0xf1, 0xb3, 0x29, 0x9d, 0xd7, 0x9f, 0xea, 0x44, 0x9c, 0x67, 0x55, 0x41, 0x2d, 0x46, 0x34, 0x85, 0xa0, 0x54, 0xd0, 0xfe, 0xa5, 0xd3, 0xcd, 0x39, 0xa6, 0x42, 0x01, 0xda, 0x35, 0xbf, 0xdd, 0x26, 0xdf, 0xef, 0xa4, 0x1a, 0xf5, 0xcd, 0xc9, 0x12, 0x80, 0x21, 0xfc, 0x6a, 0x04, 0x2a, 0xae, 0x76, 0xa4, 0xee, 0x52, 0x0b, 0x37, 0x6d, 0xce, 0xd6, 0xe2, 0xab, 0xd0, 0x4c, 0x98, 0x4f, 0xdf, 0x9e, 0x6d, 0x75, 0xff, 0x43, 0x1f, 0x42, 0x42, 0xdd, 0x31, 0x86, 0x2b, 0xc4, 0xc0, 0xce, 0x08, 0x7c, 0x81, 0x9a, 0x24, 0x63, 0x24, 0x78, 0x32, 0x8b, 0xef, 0xa5, 0x1e, 0xae, 0xc9, 0xef, 0x07, 0x67, 0xbb, 0xb4, 0xad, 0xd7, 0x67, 0x03, 0x17, 0x3e, 0xbf, 0xa4, 0x60, 0x3c, 0xd5, 0x3f, 0x7e, 0x7d, 0x72, 0x34, 0xb8, 0xee, 0x7b, 0x4b, 0xe4, 0x38, 0x70, 0x90, 0x60, 0x98, 0x09, 0x0f, 0xce, 0x60, 0xad, 0x8f, 0x08, 0x9f, 0x29, 0x75, 0x95, 0x38, 0x39, 0x9e, 0x9b, 0x8e, 0x8e, 0x76, 0x6e, 0xcc, 0xd9, 0xfd, 0x55, 0x52, 0xf8, 0x29, 0x49, 0xb0, 0x77, 0xc3, 0x74, 0x86, 0x2b, 0x80, 0x79, 0x81, 0x35, 0x34, 0x97, 0xa2, 0x09, 0xaa, 0xd2, 0xcf, 0x67, 0x98, 0x49, 0x80, 0x9f, 0xa9, 0xfb, 0x21, 0x30, 0x21, 0x59, 0xa0, 0x0b, 0xda, 0x0b, 0x91, 0x41, 0xef, 0xc8, 0xb1, 0xfd, 0x93, 0x99, 0xaa, 0xee, 0x15, 0xc7, 0x9d, 0x9d, 0x8e, 0x7d, 0x88, 0x6f, 0x84, 0x20, 0x2e, 0x7e, 0xba, 0x77, 0x5c, 0xde, 0x6a, 0x64, 0x97, 0xfa, 0x8a, 0x62, 0xd4, 0x78, 0x65, 0xce, 0x69, 0xd3, 0x12, 0x82, 0x83, 0xa6, 0x9a, 0x78, 0xac, 0x8e, 0xf2, 0x8a, 0x23, 0xd0, 0x01, 0x90, 0x25, 0xb3, 0x8d, 0x15, 0x27, 0xae, 0x99, 0x23, 0x6e, 0xdf, 0x53, 0x1c, 0x2d, 0xdc, 0x6b, 0x2d, 0x1a, 0xdd, 0x24, 0x20, 0x44, 0xfa, 0x0e, 0xb2, 0xc3, 0xb3, 0x37, 0xe4, 0x33, 0x0f, 0xfe, 0x2f, 0xb0, 0x3d, 0xbf, 0x78, 0x43, 0xf6, 0xf6, 0xfc, 0x0d, 0x29, 0x92, 0xbf, 0x8d, 0x43, 0x58, 0xe8, 0x54, 0x83, 0x42, 0xe5, 0x2f, 0x5c, 0x36, 0x72, 0xc5, 0x80, 0xee, 0x38, 0xd5, 0x4d, 0x6c, 0x69, 0xa4, 0x79, 0xf4, 0x16, 0x4c, 0x0f, 0x2d, 0x6c, 0x0c, 0x40, 0xfa, 0xed, 0xd8, 0x15, 0x74, 0xd3, 0x69, 0xbf, 0x99, 0x86, 0xe1, 0x40, 0x24, 0xbb, 0x59, 0x3e, 0xb2, 0x52, 0x83, 0xc4, 0x5c, 0x16, 0x6a, 0x8c, 0x83, 0x25, 0xa6, 0xe6, 0xf2, 0xf4, 0x7a, 0x93, 0x6a, 0x61, 0x16, 0xb6, 0x92, 0x3a, 0xb6, 0xbc, 0xcd, 0x68, 0x59, 0xfa, 0x75, 0xf1, 0xa8, 0xee, 0xd7, 0x95, 0xab, 0xf7, 0xb3, 0x2d, 0xb1, 0xe7, 0x0e, 0x27, 0x52, 0x13, 0x6a, 0x99, 0x34, 0x51, 0x6f, 0xdd, 0x06, 0x5b, 0xb2, 0x2a, 0x1b, 0xe1, 0x33, 0x0f, 0xda, 0x96, 0x5a, 0x64, 0xd4, 0x2c, 0x58, 0x38, 0xb8, 0x46, 0x47, 0x65, 0x0b, 0xb8, 0xb4, 0x92, 0x0a, 0x1a, 0xbc, 0xdb, 0x9e, 0x55, 0x60, 0xcd, 0xdf, 0x25, 0x33, 0x2a, 0xf0, 0x4e, 0xb2, 0x51, 0xf1, 0xb8, 0x70, 0xc1, 0xfb, 0xc7, 0xff, 0xca, 0xfe, 0x6b, 0x65, 0x10, 0x85, 0x8e, 0x41, 0xf1, 0x01, 0x66, 0xb7, 0xe1, 0xeb, 0x5f, 0x58, 0xa7, 0x2b, 0xe3, 0x31, 0x1e, 0x29, 0x4a, 0xe1, 0xca, 0xad, 0x15, 0x40, 0x5b, 0x46, 0x39, 0x37, 0x43, 0x68, 0x0a, 0xd4, 0xc2, 0xc4, 0x77, 0x20, 0xe3, 0xe6, 0x9a, 0x4a, 0x80, 0x67, 0x9f, 0xfc, 0x4e, 0x97, 0xb7, 0xeb, 0x6e, 0xc7, 0xe3, 0x09, 0x83, 0xb3, 0x8d, 0xe8, 0x2d, 0xfa, 0x68, 0xea, 0x4e, 0x78, 0xbc, 0xae, 0xda, 0x9e, 0x6c, 0x87, 0x1d, 0x51, 0x6e, 0xb7, 0x66, 0x85, 0xc0, 0xf7, 0x52, 0xa8, 0xa8, 0x32, 0x9c, 0xde, 0xb6, 0x35, 0xba, 0x03, 0x60, 0xad, 0x9c, 0xd8, 0xa8, 0x9e, 0x25, 0xee, 0xa9, 0xaa, 0xa5, 0xcf, 0xf0, 0xf4, 0xdd, 0x4e, 0x1b, 0x10, 0x7d, 0x5f, 0x7e, 0x4d, 0x45, 0xec, 0xe3, 0x84, 0xb0, 0xdc, 0x15, 0x4b, 0x13, 0x2b, 0xb8, 0x98, 0xde, 0x28, 0xab, 0x17, 0xdd, 0xd3, 0x2f, 0xb6, 0x5f, 0xbe, 0xd8, 0x58, 0xd5, 0xa5, 0x1c, 0x7b, 0xf7, 0x60, 0x71, 0x2e, 0x93, 0x10, 0xfe, 0x6b, 0xa7, 0xef, 0x6e, 0x50, 0x64, 0x3b, 0x9b, 0x48, 0x91, 0xb5, 0x2f, 0xe1, 0x40, 0xdc, 0x20, 0x49, 0xd0, 0x46, 0x68, 0xbb, 0x07, 0x22, 0x16, 0x5e, 0x17, 0xda, 0x32, 0x72, 0xcb, 0x89, 0x94, 0x9b, 0x46, 0xa1, 0x87, 0x44, 0x4f, 0x46, 0x62, 0x6f, 0x57, 0xe7, 0xc0, 0xd2, 0xd3, 0x6d, 0xcf, 0xc9, 0x93, 0xa5, 0xbf, 0xf7, 0xeb, 0xff, 0x72, 0x83, 0x99, 0x76, 0x80, 0x5f, 0x73, 0xca, 0xbb, 0xbf, 0xc3, 0x29, 0xef, 0xae, 0x3e, 0xe5, 0xdd, 0xe7, 0x9e, 0xf2, 0xcb, 0xfd, 0x17, 0x9f, 0xff, 0x8a, 0x53, 0x76, 0x76, 0xf8, 0xbf, 0xed, 0x94, 0x1d, 0x4a, 0xfb, 0x75, 0xa7, 0x2c, 0x49, 0x21, 0xcd, 0x82, 0x4c, 0x49, 0x7e, 0xa1, 0xb4, 0x56, 0x84, 0xd2, 0xe0, 0x32, 0x16, 0x7e, 0xd6, 0xaf, 0xb3, 0x92, 0xe6, 0x93, 0xdc, 0xf4, 0x0e, 0xf5, 0xb0, 0x80, 0x91, 0x6d, 0xa1, 0x45, 0x48, 0xc3, 0x5d, 0xcc, 0xb0, 0x77, 0xda, 0x5a, 0x6f, 0x4d, 0xdd, 0x23, 0x5a, 0x3e, 0xa9, 0xb8, 0x58, 0xfc, 0x39, 0x38, 0xea, 0xdf, 0x11, 0x55, 0xcd, 0xcf, 0x99, 0x71, 0xb2, 0x9e, 0xea, 0x9b, 0xf6, 0x38, 0x03, 0x33, 0x81, 0x73, 0x90, 0x82, 0xd9, 0x6f, 0x82, 0xfc, 0x6e, 0x90, 0x9d, 0xd4, 0x51, 0x33, 0x04, 0xa5, 0x10, 0xa4, 0x40, 0x86, 0x49, 0x3d, 0x8f, 0xb3, 0x44, 0x0a, 0x88, 0x71, 0xd1, 0x48, 0x19, 0x68, 0xca, 0x37, 0x5d, 0xc2, 0xd2, 0x2b, 0xa8, 0x91, 0xb1, 0xd4, 0x17, 0x77, 0x39, 0xa8, 0x67, 0xb5, 0xc9, 0x50, 0x10, 0xa0, 0x84, 0x5b, 0x32, 0xba, 0xe1, 0xfe, 0x22, 0x01, 0xb0, 0x9f, 0x55, 0x09, 0x7e, 0xcd, 0x84, 0xbb, 0x96, 0xde, 0x44, 0xc1, 0x0e, 0x54, 0xd8, 0xa7, 0xaa, 0xde, 0xa8, 0x8a, 0x73, 0xc4, 0x19, 0x51, 0x8f, 0x14, 0xfe, 0x66, 0xef, 0x27, 0x69, 0x1c, 0xe5, 0x15, 0x22, 0xa3, 0x4c, 0x97, 0x05, 0xd5, 0x9b, 0x2e, 0xd9, 0x6c, 0x42, 0xdd, 0x99, 0xa7, 0x6b, 0x66, 0x30, 0xe9, 0x5c, 0x7a, 0x6e, 0xab, 0x90, 0x64, 0x13, 0xfc, 0x0d, 0x9e, 0xee, 0x78, 0x39, 0x5f, 0x28, 0x18, 0x22, 0x56, 0x37, 0xa5, 0x54, 0x46, 0x27, 0x80, 0x08, 0x94, 0x74, 0x1d, 0x70, 0xa3, 0x19, 0x2f, 0x93, 0x24, 0xb7, 0xb1, 0xc7, 0x4a, 0xcf, 0x4a, 0x80, 0x3d, 0x78, 0x01, 0x94, 0xb8, 0x46, 0xa5, 0x44, 0x88, 0xaf, 0x96, 0x4c, 0xbc, 0xd4, 0x03, 0x6a, 0x54, 0x4b, 0xd1, 0xc9, 0x64, 0xb8, 0x9c, 0x2a, 0xa6, 0x80, 0x69, 0x70, 0x57, 0xa7, 0x4a, 0xaa, 0xbf, 0x42, 0x94, 0xa1, 0xa4, 0xcb, 0xc9, 0xf0, 0x8f, 0x3e, 0xb8, 0x4a, 0x85, 0xdd, 0x1d, 0x47, 0xab, 0x92, 0xc3, 0xbc, 0x85, 0x13, 0xb1, 0xd7, 0x56, 0x4e, 0x3f, 0xa9, 0x35, 0x1e, 0x0b, 0xb4, 0xce, 0x72, 0x49, 0xa5, 0x1a, 0x2d, 0x7a, 0x93, 0x18, 0xa1, 0x49, 0xbd, 0xc2, 0x72, 0x49, 0x08, 0x95, 0x2b, 0x70, 0x7d, 0x7c, 0x19, 0xbd, 0x8d, 0xa5, 0xdd, 0x50, 0xb4, 0x0e, 0x1c, 0xf8, 0xe5, 0xde, 0xf6, 0xee, 0xc6, 0x4a, 0x3d, 0xbc, 0x0e, 0xb7, 0x45, 0xdf, 0xca, 0xf2, 0x50, 0xc2, 0xfa, 0xf5, 0x12, 0xcc, 0x66, 0xc5, 0xf1, 0x81, 0x2f, 0x7d, 0x3c, 0xbf, 0x78, 0x73, 0x72, 0x76, 0xf4, 0x17, 0x83, 0x1a, 0x81, 0x9b, 0xa0, 0x95, 0xc7, 0x1f, 0xc1, 0x7c, 0x7d, 0xfc, 0x58, 0x26, 0x30, 0xe7, 0x6a, 0x7d, 0x77, 0x03, 0x2b, 0xf7, 0xbc, 0xa6, 0x90, 0xd3, 0xa4, 0x8e, 0xb5, 0xc1, 0xf5, 0x03, 0x2b, 0x00, 0xa3, 0x8c, 0x83, 0x72, 0xab, 0xbf, 0x23, 0x5d, 0x47, 0xa4, 0x6d, 0x82, 0xe5, 0x59, 0x4e, 0xe3, 0x94, 0x58, 0x60, 0xe5, 0xb8, 0x36, 0xd7, 0xaf, 0xd0, 0x42, 0x60, 0x8f, 0x74, 0x94, 0xa2, 0xb5, 0x22, 0xd7, 0x3a, 0xc5, 0x30, 0xfc, 0xa4, 0x0e, 0x4b, 0x49, 0xc5, 0xbb, 0xf8, 0x8b, 0xd5, 0x61, 0xe5, 0x3a, 0xef, 0xaf, 0x48, 0x58, 0x24, 0xb3, 0x2c, 0xa9, 0x7a, 0x32, 0xb1, 0x43, 0xf8, 0xf3, 0xf5, 0x5d, 0x3c, 0xf3, 0x4a, 0xc2, 0xb1, 0xa7, 0xa2, 0x52, 0xa6, 0x61, 0x45, 0xf8, 0xa6, 0xd3, 0x71, 0x65, 0x60, 0x5a, 0x8f, 0xe8, 0x93, 0x70, 0x55, 0xbc, 0x0e, 0x23, 0xd7, 0xd7, 0x7f, 0xb9, 0x3c, 0x79, 0x7d, 0x88, 0x8c, 0xec, 0x4b, 0xac, 0x3d, 0x29, 0x6b, 0x7c, 0x2d, 0xc2, 0x1e, 0xee, 0xde, 0x1a, 0x7e, 0x78, 0x73, 0x3a, 0xb8, 0x3c, 0xbb, 0x38, 0x7e, 0x7d, 0xf8, 0x03, 0xda, 0x94, 0x20, 0x3c, 0x1e, 0x9d, 0x77, 0xcd, 0xcf, 0x4c, 0x17, 0x05, 0x1f, 0x50, 0xe4, 0xe4, 0xfb, 0x8f, 0x27, 0xe7, 0xdf, 0xbd, 0x3e, 0xbc, 0x8b, 0x8b, 0x2e, 0xae, 0x8f, 0xdf, 0x6e, 0x69, 0x58, 0x5a, 0x23, 0x35, 0x54, 0xcf, 0x87, 0xb3, 0xdb, 0x32, 0xfd, 0x7b, 0x12, 0xc1, 0xeb, 0xb3, 0xa5, 0x0f, 0x63, 0x7e, 0xcd, 0x38, 0x0c, 0xb0, 0x19, 0xf8, 0xb7, 0xe8, 0xeb, 0xb3, 0x6f, 0x11, 0x2a, 0xd7, 0xf8, 0x49, 0xe7, 0xdc, 0x77, 0x29, 0xfa, 0x72, 0x7f, 0x7b, 0x67, 0xc3, 0x76, 0xfb, 0x24, 0xa8, 0x6d, 0x98, 0xf1, 0xad, 0x57, 0x35, 0xf5, 0x77, 0xa9, 0xff, 0xb2, 0xb5, 0x0c, 0x95, 0xb5, 0xa8, 0xb8, 0xfc, 0x40, 0x5c, 0x4e, 0x94, 0x9c, 0x4f, 0xf9, 0xaf, 0xd8, 0x2c, 0xb5, 0xa0, 0xb4, 0x75, 0xcf, 0xe3, 0x76, 0xfd, 0xd6, 0xc1, 0xb8, 0xf9, 0xda, 0x92, 0x1e, 0x4c, 0x47, 0xbc, 0x76, 0x2b, 0xe5, 0xe3, 0x27, 0x8c, 0xe5, 0x34, 0x4d, 0x4a, 0xda, 0x6c, 0x10, 0x69, 0x42, 0x3f, 0xe1, 0x7d, 0x76, 0x72, 0x7c, 0xa8, 0x02, 0x2c, 0x67, 0x6c, 0x46, 0x5a, 0xa5, 0x12, 0x9e, 0x42, 0x0a, 0x3c, 0xe1, 0xc3, 0x4b, 0xe7, 0x58, 0x7b, 0x9c, 0x94, 0x91, 0xfa, 0x77, 0x1c, 0xef, 0xcd, 0x2c, 0x99, 0xc6, 0xa3, 0x47, 0x83, 0x30, 0x4d, 0x07, 0x32, 0x6e, 0xde, 0x4e, 0xf2, 0xf0, 0x8d, 0xd0, 0x98, 0x03, 0x11, 0x3c, 0x25, 0xf6, 0xcc, 0x50, 0x2a, 0x70, 0x5d, 0x8d, 0xd3, 0x87, 0xa7, 0x66, 0xc0, 0x62, 0x54, 0x5c, 0xe2, 0xa6, 0x36, 0xa5, 0x73, 0x7d, 0x8b, 0x1b, 0xd4, 0x87, 0x64, 0x43, 0xed, 0x88, 0x57, 0xee, 0xe9, 0x5e, 0xdd, 0x63, 0xfe, 0x77, 0xba, 0xe4, 0x88, 0xc2, 0x45, 0x4e, 0xd9, 0x43, 0xfc, 0x6b, 0x18, 0x87, 0x9f, 0xda, 0x73, 0x91, 0xdb, 0x82, 0xdb, 0x4d, 0x73, 0xd3, 0x03, 0x5c, 0xb6, 0xa9, 0x2f, 0x90, 0xb6, 0x36, 0x08, 0xe7, 0x5e, 0x59, 0x77, 0x7a, 0x18, 0xe3, 0xce, 0x38, 0xb5, 0x81, 0x3c, 0x59, 0x58, 0x21, 0x65, 0xb4, 0x8c, 0x67, 0x0a, 0x74, 0xf1, 0xf7, 0x01, 0xc7, 0xa6, 0x24, 0x23, 0x1c, 0xe2, 0x58, 0xc8, 0x12, 0x51, 0x27, 0x81, 0x9d, 0xfa, 0x52, 0xa3, 0x3e, 0xd4, 0xf9, 0x28, 0x17, 0xe4, 0x35, 0x7a, 0x88, 0x91, 0x64, 0x4a, 0x1f, 0x86, 0x83, 0xb3, 0xdb, 0xd5, 0x71, 0xc0, 0x09, 0x1a, 0x18, 0x52, 0x33, 0xb0, 0xd2, 0x30, 0xcd, 0x52, 0xb5, 0x52, 0x2c, 0x82, 0x24, 0x33, 0xdd, 0x02, 0xcf, 0x06, 0xb0, 0x08, 0x9c, 0xaa, 0x3d, 0x05, 0x04, 0xe7, 0x95, 0x49, 0x3a, 0x02, 0x4d, 0x68, 0x7d, 0x8e, 0x0b, 0x91, 0xfe, 0x04, 0xdc, 0x0c, 0xa2, 0xad, 0x61, 0x7b, 0x43, 0x4a, 0xc1, 0x98, 0x38, 0x82, 0x48, 0x28, 0x92, 0x49, 0x0c, 0xcb, 0xd0, 0xd8, 0x8d, 0x40, 0xf5, 0x71, 0xc5, 0x49, 0xfc, 0x4d, 0x11, 0x85, 0xa0, 0xe2, 0x9a, 0x3a, 0x5f, 0x1b, 0x41, 0xca, 0x9c, 0xa9, 0x13, 0xdd, 0x7a, 0xcf, 0xb6, 0x08, 0x4b, 0x2b, 0xa3, 0xb2, 0x05, 0x20, 0x77, 0x0c, 0xf0, 0xb9, 0x01, 0x6e, 0x63, 0xd7, 0xa7, 0xd2, 0x87, 0x50, 0x04, 0x7e, 0x6c, 0x93, 0x4b, 0x3f, 0x95, 0x05, 0xa5, 0x81, 0xd2, 0x73, 0x6f, 0xb0, 0x2c, 0xb9, 0x77, 0x07, 0xb3, 0x76, 0x87, 0x19, 0xf0, 0x53, 0x7a, 0xbb, 0xc1, 0x66, 0xc2, 0x7a, 0xb5, 0xe8, 0xf0, 0xbb, 0x93, 0xab, 0xc1, 0xe9, 0xc5, 0xf9, 0x97, 0x41, 0x73, 0x58, 0x7e, 0x69, 0x5a, 0xbd, 0x69, 0xa5, 0xab, 0x6d, 0xc7, 0x85, 0x5e, 0x30, 0xf5, 0xb5, 0x70, 0x57, 0xa7, 0x34, 0xc3, 0x47, 0xbc, 0x2e, 0x5f, 0xa3, 0x64, 0x51, 0x91, 0xbe, 0xa4, 0xb6, 0x34, 0xed, 0x12, 0xc5, 0x2d, 0xa8, 0x0f, 0x0c, 0xd9, 0x70, 0x58, 0xea, 0x26, 0xb6, 0x9d, 0xf9, 0xdb, 0x4e, 0x00, 0xe6, 0x8d, 0x7f, 0xb3, 0xeb, 0x6d, 0x50, 0x38, 0x61, 0xc7, 0x89, 0x97, 0x2f, 0x17, 0x5c, 0x25, 0x89, 0x60, 0x26, 0x0c, 0x7c, 0xe4, 0x2e, 0xc0, 0xeb, 0xdb, 0xd0, 0xdf, 0xaa, 0xbf, 0x08, 0x0f, 0xdf, 0x6d, 0x3b, 0x15, 0x2c, 0xe6, 0xb9, 0xed, 0xd0, 0x73, 0xdb, 0xfe, 0x73, 0x3b, 0xa1, 0xe7, 0x76, 0xfc, 0xe7, 0x76, 0x43, 0xcf, 0x39, 0xeb, 0x75, 0xcc, 0x78, 0xd9, 0xb9, 0x55, 0x96, 0x71, 0xed, 0x5f, 0xbb, 0x7d, 0x7b, 0xfc, 0x9f, 0x19, 0x6f, 0x45, 0xb3, 0x51, 0xad, 0x63, 0xd8, 0xab, 0x5d, 0xdf, 0x6e, 0xd6, 0x2b, 0x9f, 0xd6, 0xe1, 0x40, 0x4d, 0x6c, 0xb8, 0x98, 0xe1, 0x7b, 0xdb, 0xbb, 0xbd, 0x51, 0xba, 0xb8, 0x41, 0xa9, 0x73, 0xa8, 0xad, 0xdd, 0x70, 0xf3, 0x71, 0xb1, 0xf2, 0x8b, 0x25, 0x9a, 0xe4, 0xbe, 0x1e, 0x72, 0x36, 0xd8, 0x88, 0x1c, 0xbc, 0x22, 0x81, 0xe8, 0xa4, 0x57, 0x22, 0x7e, 0xc7, 0xa2, 0x15, 0xf9, 0x0e, 0x66, 0xaf, 0xd4, 0xc5, 0xb8, 0x6f, 0xe0, 0x3d, 0x99, 0x00, 0x93, 0xae, 0xce, 0x4a, 0xa7, 0x29, 0x63, 0x33, 0xaa, 0xae, 0x86, 0xde, 0x9b, 0xae, 0x5d, 0xea, 0x71, 0xa1, 0xaf, 0x28, 0xc6, 0x1d, 0xf6, 0x66, 0xcb, 0x1a, 0xab, 0xe3, 0xe1, 0x8c, 0xca, 0x9d, 0x67, 0x21, 0x51, 0xf9, 0xe1, 0xea, 0xcc, 0x53, 0x2d, 0x23, 0x74, 0xcd, 0x94, 0x07, 0x9b, 0x9b, 0xd4, 0x60, 0xfc, 0x26, 0x7e, 0x78, 0xe8, 0x97, 0xc9, 0x26, 0xf0, 0x93, 0x72, 0x93, 0xfc, 0xbd, 0xf2, 0xe9, 0x9b, 0x6a, 0x3e, 0x5b, 0xe5, 0xa8, 0x4d, 0x4b, 0xc5, 0x94, 0x65, 0x2c, 0xc6, 0x31, 0xa3, 0x2e, 0xd8, 0x22, 0x6d, 0xba, 0x90, 0x7c, 0xc0, 0x9a, 0x74, 0xd7, 0x6c, 0xf8, 0xc1, 0x9d, 0x54, 0xa9, 0x8f, 0xf3, 0x36, 0xca, 0x3e, 0x12, 0x98, 0x06, 0xa2, 0x95, 0x4d, 0x48, 0xce, 0x7c, 0xb0, 0xd8, 0x39, 0xf8, 0x02, 0xd6, 0xd3, 0x26, 0x5e, 0x38, 0xc3, 0x80, 0xe4, 0x14, 0x04, 0x8a, 0x4f, 0xbe, 0x82, 0xd0, 0x9e, 0x95, 0x6e, 0xe0, 0x03, 0xdd, 0x03, 0xb2, 0xe4, 0xa0, 0x9a, 0xf1, 0x89, 0x99, 0x26, 0xa6, 0xe4, 0xa1, 0x32, 0x0f, 0x2a, 0x07, 0xfc, 0xf7, 0x4b, 0xbf, 0xe8, 0x3c, 0xa2, 0x25, 0x78, 0xa9, 0x7b, 0xa8, 0xff, 0x63, 0xd9, 0x17, 0xef, 0x3f, 0x7f, 0xcf, 0x6d, 0x8f, 0x41, 0xe6, 0x45, 0x30, 0x7c, 0x44, 0xc7, 0xd2, 0x19, 0x5c, 0x5d, 0x76, 0xba, 0x12, 0xad, 0x87, 0x0f, 0xf4, 0xe0, 0xdf, 0x11, 0x59, 0x99, 0xd8, 0x5e, 0x67, 0x7f, 0x4f, 0x12, 0xeb, 0x78, 0x8e, 0xdc, 0x64, 0xce, 0x0f, 0x1f, 0xd1, 0x2f, 0x4d, 0x72, 0x21, 0x77, 0xa1, 0xb5, 0xd5, 0xa8, 0x60, 0x00, 0xd6, 0x57, 0xc8, 0x29, 0x3f, 0x5d, 0x0b, 0xbc, 0x1e, 0x56, 0xeb, 0x0c, 0xec, 0x23, 0xd0, 0x0c, 0x4d, 0xb3, 0xdf, 0x08, 0x10, 0xe4, 0xc5, 0xad, 0xb4, 0x02, 0x91, 0x30, 0x07, 0x33, 0x17, 0xaf, 0xfb, 0x72, 0xc3, 0x8b, 0xe8, 0x50, 0x23, 0xbb, 0x58, 0x75, 0xd9, 0xb2, 0x63, 0x0a, 0x83, 0xd7, 0xd2, 0x62, 0x58, 0x69, 0x15, 0x36, 0xec, 0x9b, 0x6c, 0x89, 0x67, 0x42, 0xa3, 0x34, 0x06, 0x79, 0x02, 0xab, 0x66, 0xaf, 0x71, 0xfa, 0xba, 0x79, 0x81, 0x63, 0x37, 0xfb, 0x8a, 0x47, 0x44, 0x16, 0x8d, 0x56, 0x68, 0xe3, 0xb7, 0x1b, 0xe4, 0x60, 0x91, 0x01, 0xdb, 0xaa, 0xc9, 0x14, 0x5b, 0xc6, 0x39, 0x90, 0xbe, 0x06, 0xdf, 0x84, 0x4d, 0xdb, 0xb3, 0x76, 0xfa, 0x61, 0x3c, 0xbd, 0x20, 0x77, 0x3d, 0xf4, 0x76, 0x30, 0xe1, 0x9a, 0x28, 0x59, 0x33, 0x52, 0xa3, 0x67, 0x2d, 0x4a, 0xd6, 0xf4, 0x2b, 0x97, 0x24, 0x2e, 0xe6, 0x26, 0x8d, 0xe2, 0xca, 0x7c, 0xdf, 0xd7, 0xb3, 0x16, 0x5a, 0x5b, 0x29, 0x8a, 0xc8, 0xb0, 0x60, 0x09, 0xb8, 0xfc, 0x1d, 0x9d, 0x80, 0x74, 0x00, 0xe5, 0x74, 0x4f, 0x56, 0x55, 0x50, 0x88, 0x4f, 0x5c, 0xff, 0x38, 0x88, 0xf6, 0x31, 0xf1, 0x51, 0x8d, 0xd0, 0x61, 0x2a, 0x9f, 0x20, 0xed, 0x9e, 0x3f, 0x5f, 0x33, 0xe3, 0x08, 0x16, 0x4a, 0xd5, 0x46, 0xf6, 0xa2, 0x44, 0x9c, 0xad, 0xde, 0x18, 0xee, 0x23, 0x5e, 0xae, 0x8f, 0xc2, 0x78, 0x48, 0x89, 0xc2, 0xcb, 0x4c, 0xc0, 0x99, 0x29, 0xb6, 0x5f, 0x88, 0x09, 0x0a, 0x15, 0x63, 0x05, 0x25, 0x35, 0x8e, 0x69, 0xf6, 0x30, 0x6a, 0x0a, 0x0d, 0x18, 0x06, 0x6e, 0x21, 0x36, 0xbc, 0x56, 0x7f, 0xac, 0x6a, 0x8b, 0x0d, 0x50, 0x35, 0x6a, 0x1b, 0x62, 0x94, 0x42, 0xd9, 0x35, 0x4f, 0xf7, 0x7f, 0xaa, 0x1a, 0xda, 0x57, 0x15, 0x50, 0x83, 0xf9, 0x95, 0x87, 0xb5, 0xfd, 0x7f, 0xd8, 0x61, 0x6d, 0xff, 0xdf, 0x70, 0x58, 0x3b, 0xbf, 0xf2, 0xb0, 0x76, 0xfe, 0x0f, 0x3b, 0xac, 0x9d, 0xff, 0x1b, 0x0e, 0x6b, 0xf7, 0x57, 0x1e, 0xd6, 0xee, 0x6f, 0x7e, 0x58, 0xe7, 0xf8, 0x7b, 0x62, 0xfb, 0xaa, 0xf5, 0xa5, 0x65, 0x53, 0x29, 0x1a, 0x3e, 0x52, 0xf3, 0xf9, 0x21, 0x6e, 0x88, 0x18, 0x0c, 0xa2, 0x4c, 0x96, 0x4d, 0xab, 0xe9, 0xa8, 0x32, 0xb8, 0x52, 0xa6, 0x43, 0x8a, 0x84, 0xa0, 0x04, 0xad, 0x1e, 0x35, 0x9e, 0xaf, 0x73, 0xf4, 0xa0, 0x80, 0x66, 0xd0, 0x8d, 0xce, 0x07, 0x03, 0x4e, 0x3b, 0x1a, 0x50, 0xe8, 0xb4, 0x79, 0x58, 0xe8, 0x8c, 0x24, 0x1b, 0x67, 0x1d, 0xd5, 0xc6, 0x0b, 0x98, 0xa1, 0x65, 0x2e, 0xfc, 0xde, 0x3c, 0x1e, 0xe1, 0x8f, 0xb7, 0xfa, 0xdb, 0x76, 0x73, 0x36, 0x7e, 0x01, 0x10, 0x9c, 0x8d, 0x6b, 0x06, 0xad, 0xef, 0x00, 0x64, 0x3b, 0x66, 0x6a, 0xa0, 0x96, 0x5a, 0x3f, 0x9a, 0x07, 0x01, 0x7d, 0x53, 0xc3, 0xa6, 0x1d, 0x1c, 0x9c, 0x3a, 0xc0, 0x49, 0x68, 0x9a, 0x88, 0x5a, 0x1d, 0xa8, 0x94, 0x83, 0xc1, 0x38, 0x46, 0xbe, 0xf4, 0x6b, 0x06, 0xef, 0xd2, 0x29, 0x62, 0xe1, 0xfd, 0xd2, 0xc8, 0xb2, 0x13, 0xc5, 0xfd, 0x6f, 0x8b, 0x2c, 0x3f, 0xcb, 0x3e, 0x76, 0xaf, 0x4c, 0xd1, 0xd3, 0xd6, 0x6a, 0x61, 0xfc, 0x76, 0xeb, 0x58, 0xc4, 0x4a, 0x20, 0x82, 0x76, 0x1c, 0x33, 0xe9, 0x60, 0xa6, 0xcd, 0x89, 0xbc, 0x6b, 0xe3, 0x7b, 0x6c, 0xc6, 0xf8, 0xf8, 0x4b, 0xb9, 0x66, 0xdd, 0x1b, 0xc4, 0x21, 0x85, 0xb6, 0xe0, 0x55, 0x96, 0x4c, 0x71, 0xcb, 0x4c, 0x3f, 0x63, 0x31, 0x22, 0x08, 0xfb, 0xcc, 0x4b, 0x3f, 0x18, 0x25, 0x8c, 0x8c, 0x95, 0x3e, 0xa5, 0x29, 0xbd, 0xa8, 0xaf, 0x37, 0x1e, 0x25, 0xbd, 0xb8, 0x1c, 0xa5, 0x69, 0xb8, 0xb5, 0xab, 0xc6, 0x81, 0x31, 0xf1, 0x86, 0x3c, 0xf8, 0xf0, 0x7c, 0x84, 0x31, 0x37, 0xed, 0xd4, 0x8e, 0xfc, 0x90, 0xb0, 0xa2, 0x70, 0xba, 0xf9, 0xb2, 0x9a, 0xe6, 0xea, 0xcc, 0xef, 0x06, 0x1c, 0x83, 0x18, 0x95, 0xa3, 0x23, 0x86, 0xd3, 0x19, 0x15, 0xe9, 0x82, 0x70, 0x68, 0xdd, 0xb6, 0x70, 0x5d, 0xd3, 0x35, 0x9d, 0x9c, 0x6d, 0x12, 0x3d, 0xe5, 0x26, 0xe2, 0x1f, 0x3c, 0x03, 0xb5, 0xd3, 0xeb, 0xa0, 0x5b, 0xd3, 0x74, 0xd3, 0x82, 0x77, 0x11, 0x3d, 0xdc, 0x89, 0x5b, 0x46, 0x0a, 0x7a, 0xd4, 0x12, 0x86, 0xd7, 0x30, 0x06, 0x90, 0xd0, 0xa3, 0x22, 0x54, 0x53, 0xc3, 0x10, 0x0d, 0x4f, 0xa2, 0x00, 0x80, 0x3b, 0x88, 0xee, 0xf5, 0x5c, 0x90, 0x3a, 0x6e, 0x92, 0x07, 0xae, 0x23, 0xf5, 0x4d, 0x2e, 0x06, 0x36, 0xc4, 0x78, 0xaa, 0x84, 0xce, 0x8f, 0x06, 0xc7, 0xa7, 0xa7, 0xb5, 0xaa, 0x53, 0xdc, 0x3c, 0x86, 0xb7, 0x25, 0x68, 0x90, 0x12, 0x61, 0x7e, 0x31, 0x68, 0x1b, 0x8a, 0xc2, 0x73, 0xaf, 0x48, 0xb8, 0x7e, 0x14, 0x79, 0x01, 0x4e, 0x90, 0x6a, 0x27, 0xcf, 0x58, 0x0c, 0x8f, 0x0c, 0xa6, 0x99, 0x22, 0xf8, 0xda, 0xcd, 0x72, 0x1e, 0x67, 0x9f, 0x1e, 0x39, 0x2e, 0x5c, 0xcc, 0x21, 0xbb, 0xc5, 0xf7, 0xca, 0x8d, 0xf4, 0xfa, 0xb4, 0x16, 0x68, 0xcc, 0x71, 0x59, 0x48, 0xdb, 0x46, 0x46, 0x52, 0x93, 0xce, 0x1a, 0xb0, 0x4c, 0xc2, 0xb9, 0xe4, 0x91, 0x61, 0xad, 0x1a, 0x3c, 0x66, 0xd0, 0x7a, 0x61, 0x24, 0x78, 0x67, 0x9a, 0x4e, 0x41, 0x0e, 0xa3, 0xad, 0xac, 0x96, 0xdb, 0x6e, 0x8a, 0x4a, 0xfa, 0xc8, 0xef, 0x79, 0x03, 0xdc, 0x0b, 0xf0, 0x24, 0xfd, 0xcb, 0x05, 0x68, 0xb9, 0x01, 0x54, 0x29, 0x63, 0x9b, 0xd0, 0x3d, 0x7d, 0x09, 0x48, 0x17, 0xe9, 0xfc, 0xa9, 0x13, 0x6e, 0xdd, 0xf2, 0x8c, 0x9b, 0x54, 0x03, 0x60, 0xf9, 0x7d, 0x29, 0x2d, 0x80, 0x08, 0xe3, 0x30, 0x31, 0xf7, 0x4c, 0x97, 0x59, 0xfa, 0x40, 0x05, 0x1d, 0xa0, 0x4a, 0x1c, 0x62, 0xdb, 0x92, 0x96, 0x96, 0x1c, 0xc7, 0xac, 0xd8, 0x44, 0x5a, 0x9f, 0x42, 0xab, 0xf8, 0x00, 0x2f, 0x83, 0xca, 0x38, 0xc7, 0xfc, 0x1e, 0x1e, 0xa3, 0xeb, 0x62, 0xa3, 0x13, 0x5b, 0x0f, 0xe4, 0x07, 0x65, 0x49, 0x85, 0xfe, 0x8f, 0x95, 0x91, 0xad, 0x7a, 0xb4, 0xf0, 0x9a, 0x10, 0xc1, 0x16, 0x58, 0x34, 0xb0, 0xa2, 0xc3, 0x36, 0x07, 0xfc, 0x9c, 0x14, 0x7d, 0x17, 0x52, 0x1b, 0x23, 0x59, 0xb6, 0x11, 0x97, 0xd0, 0x8f, 0x48, 0x7d, 0x6a, 0xcb, 0x12, 0x4a, 0x65, 0x32, 0xfd, 0x83, 0x6c, 0xf7, 0xad, 0xb4, 0x19, 0x99, 0xa0, 0xfe, 0x4e, 0x36, 0x7c, 0x2b, 0x9d, 0x31, 0x7d, 0xd9, 0xdd, 0x68, 0x03, 0xd6, 0x77, 0x3a, 0x12, 0xd7, 0xba, 0x94, 0x11, 0x4e, 0x61, 0x3a, 0x43, 0xf2, 0xdf, 0xd4, 0xec, 0x86, 0x99, 0x9f, 0x7b, 0x6f, 0x5b, 0x5f, 0x31, 0xab, 0xc3, 0x42, 0x2f, 0x8a, 0x70, 0xe2, 0xbf, 0x8f, 0x59, 0xbd, 0x67, 0xb7, 0x75, 0x7d, 0x11, 0xd2, 0xce, 0xae, 0xa9, 0xbe, 0x38, 0xf1, 0xe7, 0x1b, 0xec, 0x86, 0xae, 0xf3, 0x2a, 0x98, 0x10, 0xeb, 0xfd, 0xee, 0x35, 0xa4, 0xed, 0xf4, 0xf3, 0xf1, 0xf2, 0x9a, 0x4d, 0xeb, 0x2c, 0x51, 0xa3, 0x18, 0x79, 0x16, 0x8b, 0xed, 0xb0, 0x81, 0x08, 0xe6, 0xe9, 0x99, 0xe6, 0xcb, 0x7c, 0xb0, 0xdc, 0xb6, 0x5d, 0x6a, 0x7a, 0x3d, 0x64, 0xdd, 0x74, 0x56, 0xab, 0x9b, 0x10, 0x57, 0xad, 0x96, 0x6a, 0xad, 0x83, 0xb2, 0xce, 0x4a, 0x1b, 0x5f, 0x1e, 0x6c, 0xfe, 0xa1, 0xd0, 0xec, 0xed, 0xb0, 0xdd, 0x41, 0x78, 0xa7, 0x7a, 0x02, 0x1b, 0x72, 0x8e, 0xf5, 0x58, 0xd1, 0x4d, 0x31, 0x56, 0xb6, 0xa1, 0x6a, 0x27, 0xdc, 0xf0, 0x34, 0x73, 0xc9, 0xdd, 0x8b, 0x6e, 0x49, 0x03, 0x30, 0x61, 0x4b, 0xd1, 0x91, 0xa0, 0xca, 0x27, 0xe8, 0xea, 0x6c, 0x7e, 0xa7, 0xef, 0x7e, 0x87, 0x8b, 0x65, 0x36, 0x3c, 0x00, 0xb7, 0xc7, 0x66, 0x77, 0x72, 0xf3, 0x6d, 0x9c, 0xa7, 0xd6, 0x84, 0xcb, 0xcc, 0x28, 0xb9, 0x18, 0x33, 0xab, 0x29, 0xf1, 0xc0, 0xbf, 0x89, 0x04, 0x52, 0x60, 0x8d, 0x3c, 0x02, 0x98, 0x95, 0x3e, 0x42, 0x9c, 0x71, 0x2d, 0x1c, 0x8d, 0x51, 0x64, 0x65, 0xb5, 0x18, 0xcc, 0x65, 0x68, 0x51, 0xcf, 0x53, 0x49, 0xfd, 0x0d, 0x83, 0xcd, 0xac, 0xdc, 0x92, 0x41, 0xe4, 0x68, 0xfe, 0x75, 0x36, 0xad, 0x02, 0xb1, 0xf7, 0x50, 0xae, 0x3d, 0x52, 0xda, 0xfa, 0xb1, 0x08, 0xda, 0x7e, 0x74, 0x82, 0x6f, 0xf8, 0x83, 0xfd, 0x59, 0x3a, 0x18, 0xa5, 0x6e, 0x37, 0xd0, 0x7b, 0xba, 0x0c, 0x4d, 0xba, 0x12, 0xca, 0x93, 0xd6, 0x0e, 0x54, 0xdf, 0xdf, 0x97, 0x46, 0x57, 0xa8, 0xb4, 0xab, 0x9a, 0x19, 0x75, 0xa6, 0xb3, 0x7c, 0x38, 0x84, 0x85, 0x77, 0x1c, 0xa5, 0x14, 0xbe, 0xec, 0xf9, 0x92, 0xdd, 0x79, 0x80, 0x65, 0x35, 0x25, 0x63, 0xba, 0xcb, 0x79, 0x69, 0xd2, 0x1c, 0x01, 0x05, 0xb2, 0x3a, 0xf9, 0xe5, 0xfb, 0x8a, 0x85, 0x1e, 0x90, 0x33, 0x92, 0x21, 0x2f, 0x84, 0x81, 0x0b, 0xab, 0xb9, 0xfd, 0xa9, 0x9c, 0x11, 0x7f, 0xaa, 0x13, 0xe4, 0x5c, 0xc3, 0xa8, 0x2d, 0x5d, 0xb6, 0xd6, 0x8a, 0xaa, 0xab, 0x9d, 0x08, 0xd3, 0xd2, 0x8f, 0xaf, 0xd0, 0x2e, 0xd4, 0x17, 0xd4, 0xf9, 0x07, 0xfe, 0xb1, 0xdd, 0xc5, 0xff, 0xee, 0xfc, 0xb3, 0x43, 0x21, 0x98, 0x83, 0xcd, 0xcd, 0xfb, 0xfb, 0xfb, 0xbe, 0x02, 0x0a, 0xc2, 0x91, 0x7d, 0xe6, 0x57, 0xfe, 0x21, 0x0e, 0x5b, 0xcb, 0x07, 0xae, 0xa3, 0x4e, 0x3a, 0x9f, 0xfe, 0xb8, 0xdd, 0xdb, 0xde, 0xda, 0xda, 0xfa, 0xb9, 0xbf, 0xc0, 0x2d, 0x9e, 0xd0, 0xb0, 0xf0, 0x5f, 0x77, 0xd8, 0x4d, 0x9e, 0xc9, 0x66, 0x10, 0xf2, 0x55, 0x36, 0xd2, 0x60, 0xb8, 0x64, 0xdc, 0xb6, 0x83, 0x09, 0xf9, 0xc0, 0x61, 0x32, 0x1c, 0x49, 0x8e, 0xdb, 0xeb, 0xe8, 0xb9, 0x83, 0x1e, 0x86, 0x10, 0xf6, 0x77, 0x77, 0x76, 0x22, 0x56, 0x39, 0xb8, 0x3c, 0x8d, 0x93, 0x19, 0x10, 0x99, 0x40, 0x5a, 0x8c, 0xb3, 0x2c, 0x43, 0xf8, 0xc5, 0x98, 0x83, 0x35, 0x40, 0x1b, 0x2d, 0x29, 0x9d, 0x9c, 0x3b, 0x80, 0x10, 0x8c, 0xc0, 0x7d, 0xf2, 0xf1, 0xa3, 0x1d, 0x18, 0xa8, 0xbc, 0x40, 0xde, 0xca, 0xdd, 0x40, 0x0d, 0xce, 0x63, 0x5c, 0x86, 0xb4, 0x36, 0x53, 0x6a, 0x46, 0x42, 0x8e, 0x60, 0x72, 0xb3, 0x5c, 0x1a, 0x5d, 0x53, 0xe4, 0x7e, 0xb2, 0x2c, 0xa4, 0xcb, 0x11, 0x25, 0x3a, 0xdc, 0xc7, 0x8f, 0x35, 0x61, 0x0f, 0x3b, 0x7e, 0x08, 0xff, 0xf1, 0xfc, 0xda, 0xa6, 0x80, 0x56, 0xba, 0x34, 0x4f, 0x92, 0x6a, 0x74, 0xe3, 0xa1, 0xbe, 0x13, 0xfb, 0x46, 0xd5, 0xfd, 0x06, 0x56, 0x63, 0x40, 0xd5, 0xdb, 0x3a, 0x40, 0xda, 0xba, 0x5c, 0x18, 0x14, 0xfb, 0x7d, 0x50, 0x65, 0x02, 0x37, 0x84, 0x67, 0x9e, 0xd8, 0x86, 0xee, 0x69, 0xba, 0x90, 0x52, 0xce, 0x68, 0x5a, 0x6a, 0xdd, 0xf0, 0xe8, 0x26, 0x99, 0x0b, 0xbf, 0x5c, 0xd7, 0x94, 0xc9, 0x8e, 0x10, 0x61, 0xc7, 0x17, 0x69, 0x9d, 0x89, 0xfc, 0x06, 0x16, 0xb3, 0x21, 0x75, 0xb7, 0x46, 0xca, 0x49, 0x33, 0xa4, 0xe9, 0x12, 0xad, 0xc6, 0x61, 0x2c, 0xe2, 0x44, 0x0b, 0xc2, 0xdb, 0x32, 0x9b, 0x91, 0x27, 0x26, 0x05, 0x49, 0x31, 0xf4, 0xbf, 0xf4, 0x44, 0xf7, 0x11, 0xa1, 0x4a, 0x09, 0x26, 0x70, 0x63, 0xdf, 0x9c, 0x1e, 0x5f, 0x53, 0x11, 0x6c, 0x97, 0xca, 0x65, 0xba, 0x54, 0xf9, 0xea, 0x37, 0xaa, 0xba, 0x24, 0xff, 0x08, 0x11, 0xaa, 0x44, 0x93, 0x62, 0x9b, 0x62, 0x67, 0x51, 0xc8, 0xb5, 0x8e, 0xcd, 0x69, 0x31, 0x16, 0xc8, 0x1d, 0xae, 0x69, 0x89, 0x26, 0x31, 0x71, 0x6f, 0xbf, 0xbf, 0xc5, 0x6b, 0xb4, 0x3d, 0xb0, 0xb5, 0x52, 0x8b, 0xdc, 0x48, 0x1a, 0x61, 0x8c, 0xc3, 0x39, 0x03, 0x66, 0x3a, 0xdd, 0x88, 0xd1, 0xcf, 0x19, 0x4a, 0x41, 0x7f, 0xeb, 0x64, 0x4b, 0xae, 0xd4, 0x4c, 0x5d, 0xf0, 0x53, 0x24, 0xcb, 0x06, 0x6c, 0x35, 0xc6, 0xc6, 0x72, 0x53, 0x65, 0x29, 0x38, 0x2b, 0xa1, 0x72, 0x39, 0xa2, 0x89, 0x48, 0x3c, 0x58, 0x55, 0x92, 0x75, 0x6d, 0xef, 0xa9, 0x1c, 0xa5, 0x80, 0x48, 0x2c, 0xa9, 0x3f, 0xaa, 0xb5, 0x6a, 0x0d, 0xe9, 0x27, 0x5e, 0x4b, 0xaf, 0xde, 0xd7, 0x82, 0x3c, 0xcb, 0x7a, 0x72, 0xa8, 0xf4, 0x0b, 0x8f, 0x72, 0x43, 0xb3, 0x5c, 0xd9, 0x6e, 0x55, 0x85, 0xb3, 0x8f, 0xee, 0x42, 0x3e, 0xf6, 0xaa, 0xd9, 0x94, 0x1d, 0xae, 0x68, 0xcf, 0x47, 0xab, 0x1c, 0x51, 0x3a, 0xd4, 0xa3, 0xe9, 0x1d, 0x18, 0xcb, 0x0a, 0x89, 0x12, 0xc8, 0xd8, 0x23, 0xff, 0x54, 0xe7, 0x0b, 0x0c, 0x0b, 0xbd, 0x3e, 0xea, 0xd4, 0x6e, 0x64, 0xa8, 0x7b, 0x55, 0xc9, 0xdc, 0xad, 0x6e, 0xc9, 0x08, 0x4f, 0x43, 0xbe, 0x9f, 0x3c, 0x54, 0x2c, 0xf7, 0x27, 0xd4, 0x81, 0x3a, 0xdb, 0xdd, 0x89, 0xca, 0x47, 0x50, 0x22, 0xe6, 0xee, 0x26, 0x34, 0x1b, 0x8e, 0x07, 0x43, 0x61, 0xb5, 0x4e, 0x7d, 0xcc, 0xb7, 0x3e, 0xe0, 0x2b, 0x47, 0xf4, 0x8a, 0xf4, 0xf6, 0xd2, 0x7c, 0xbd, 0x67, 0x74, 0xb1, 0xc7, 0x7c, 0x69, 0xe6, 0x62, 0xc3, 0x59, 0x9c, 0xdd, 0x9a, 0xc4, 0x6a, 0x1e, 0xa9, 0x8b, 0xed, 0x61, 0xb9, 0x92, 0xd4, 0xfe, 0x50, 0x12, 0xf8, 0x48, 0x32, 0x7a, 0x5d, 0xd4, 0x50, 0x2f, 0x9d, 0xc7, 0x05, 0x96, 0x18, 0xd2, 0x9e, 0x49, 0xf2, 0xb3, 0x7b, 0x26, 0xa6, 0xe9, 0x18, 0x4b, 0xf3, 0x77, 0x94, 0xd1, 0xce, 0xcf, 0xf9, 0x22, 0x8c, 0x63, 0xec, 0x8c, 0xfb, 0xa3, 0x19, 0xe4, 0x2d, 0x1d, 0xe1, 0x7e, 0xbb, 0xd8, 0xba, 0x01, 0x42, 0x06, 0xae, 0x0d, 0xff, 0x3d, 0xd0, 0x10, 0x60, 0x1b, 0xff, 0x36, 0xd2, 0xc3, 0x34, 0x3d, 0x37, 0x41, 0x43, 0xb7, 0x8d, 0x2d, 0xab, 0x77, 0x36, 0x50, 0x19, 0x8a, 0xb0, 0xf7, 0xa3, 0x0b, 0x6b, 0x4e, 0x66, 0x5d, 0x82, 0xc4, 0xad, 0x8a, 0x91, 0x18, 0x93, 0xf4, 0x77, 0x49, 0xdd, 0x8c, 0x67, 0xa1, 0x1d, 0xa0, 0xae, 0x6e, 0x29, 0xa1, 0x72, 0x97, 0xa1, 0xd9, 0x29, 0x7c, 0xb7, 0xf0, 0x39, 0xd8, 0x58, 0x6c, 0x2b, 0xca, 0xa1, 0xfc, 0xd8, 0xcb, 0xcc, 0xe6, 0x45, 0x84, 0xfb, 0xc9, 0x71, 0x60, 0xdf, 0x34, 0x92, 0xb5, 0x8f, 0x97, 0x12, 0xcc, 0x9f, 0x81, 0x5c, 0xe4, 0xdc, 0x13, 0xdb, 0x0f, 0x02, 0x58, 0x5a, 0x9e, 0x75, 0x3d, 0x7c, 0x27, 0x0c, 0x9d, 0xb3, 0xc7, 0x09, 0x73, 0x02, 0xe7, 0xd2, 0xbf, 0xdb, 0x34, 0x01, 0x8e, 0xf9, 0x3d, 0xa5, 0x4d, 0xf7, 0xcb, 0x4f, 0xb4, 0x1a, 0xe6, 0x5e, 0x40, 0x7a, 0x18, 0x40, 0x85, 0x5d, 0x2e, 0xe5, 0xf3, 0x96, 0x74, 0x91, 0xe9, 0x8d, 0x14, 0xb8, 0xa9, 0x94, 0x0b, 0xa9, 0x4b, 0xd7, 0xc6, 0xbc, 0xc1, 0xa6, 0x4d, 0x8e, 0xff, 0x43, 0x30, 0xbb, 0x40, 0xdd, 0xf4, 0xf4, 0x65, 0xbc, 0x8d, 0x94, 0x86, 0x08, 0x3b, 0x4c, 0x40, 0xd1, 0x98, 0xcf, 0x83, 0xd9, 0x92, 0x36, 0x39, 0x19, 0xf5, 0x89, 0x24, 0x63, 0xab, 0x3e, 0x37, 0xd8, 0x6b, 0x70, 0x3e, 0x3e, 0x76, 0xe2, 0x98, 0xa1, 0x75, 0x4b, 0x6d, 0x7a, 0x6c, 0x1a, 0x9c, 0x4f, 0x45, 0x8e, 0x94, 0x98, 0xea, 0x09, 0x1c, 0xcd, 0xc2, 0x5a, 0x97, 0xba, 0xf1, 0x81, 0xa6, 0x52, 0xbc, 0x52, 0xe9, 0xa1, 0xf1, 0xe8, 0x42, 0xfe, 0xc2, 0x5d, 0xb8, 0x4b, 0x79, 0xef, 0x19, 0xcc, 0x6c, 0x58, 0xa4, 0xc9, 0x04, 0x35, 0x10, 0x5a, 0x91, 0xe4, 0x90, 0x7a, 0x5e, 0xa3, 0x04, 0x71, 0xaf, 0x31, 0x3b, 0x1d, 0xce, 0x11, 0x0b, 0x88, 0x53, 0xf2, 0x1c, 0x31, 0x4f, 0x34, 0xbd, 0xb8, 0x18, 0x64, 0x1e, 0x6b, 0x25, 0x69, 0x11, 0xb1, 0xd6, 0x34, 0x05, 0xf3, 0x33, 0xa9, 0x0f, 0xbb, 0x78, 0x3c, 0x91, 0xba, 0x32, 0xbc, 0xc5, 0xa6, 0x97, 0x23, 0x7d, 0x91, 0xd9, 0xaa, 0x68, 0x37, 0x4e, 0x3b, 0xb0, 0x30, 0x72, 0x33, 0xee, 0xd2, 0xb7, 0x49, 0x01, 0xf2, 0x2f, 0x2f, 0xa3, 0xef, 0xf6, 0x35, 0x0d, 0x53, 0x3a, 0xd2, 0x8b, 0x2a, 0x62, 0x8a, 0x5e, 0xa9, 0x5c, 0x80, 0xa7, 0xee, 0x85, 0x2f, 0xb8, 0x78, 0x83, 0xb9, 0x97, 0xbe, 0x2e, 0x0a, 0x09, 0x1b, 0xe9, 0x59, 0xf3, 0xca, 0xc1, 0x4f, 0x80, 0xfc, 0xe0, 0x9f, 0xe1, 0xee, 0x63, 0xb6, 0x89, 0x34, 0x68, 0x57, 0x48, 0x2c, 0xe8, 0xcb, 0x83, 0xb3, 0x1c, 0x56, 0xa4, 0xe4, 0x80, 0x74, 0x32, 0x13, 0x8f, 0xae, 0x53, 0x74, 0xf7, 0x48, 0x82, 0x8d, 0xaf, 0x02, 0x72, 0xa9, 0x82, 0xa8, 0x35, 0x16, 0x1f, 0xbc, 0x91, 0x1c, 0x81, 0x7a, 0x64, 0x79, 0x83, 0x9a, 0x18, 0x6a, 0x08, 0x64, 0xe4, 0xb7, 0xa8, 0xf7, 0x2c, 0x1f, 0xcf, 0xaf, 0xcf, 0xde, 0x8b, 0xe9, 0x6c, 0xd9, 0x9c, 0x68, 0x35, 0xd6, 0x2c, 0x16, 0xb6, 0xc3, 0x54, 0xe5, 0x63, 0x02, 0xe8, 0x66, 0x68, 0x79, 0x21, 0x23, 0x52, 0xe0, 0xb6, 0x75, 0x25, 0x17, 0xa7, 0x90, 0xc2, 0x35, 0x31, 0xba, 0x74, 0x53, 0x03, 0x9e, 0x6c, 0x24, 0xc2, 0x92, 0xce, 0x9e, 0x5c, 0x25, 0x20, 0x51, 0x80, 0xd1, 0xac, 0x02, 0x58, 0x47, 0x39, 0xa7, 0xfc, 0xd0, 0xf9, 0x32, 0xaf, 0x04, 0x59, 0x0c, 0xf7, 0xcb, 0x88, 0xde, 0xe4, 0xf7, 0x59, 0xef, 0x0c, 0xeb, 0x8f, 0xa3, 0xb3, 0x7c, 0x0a, 0x5b, 0x75, 0x4e, 0x0a, 0x4b, 0xf3, 0xd4, 0x3e, 0x5c, 0x9e, 0x47, 0xeb, 0x28, 0x77, 0xa3, 0x4b, 0x83, 0x39, 0x87, 0x4f, 0x6e, 0x88, 0x7d, 0x51, 0xb2, 0x4e, 0x22, 0xb3, 0xe9, 0x46, 0x27, 0x3f, 0x1c, 0xbd, 0xbf, 0x3c, 0x3b, 0xf9, 0x89, 0x4d, 0x0c, 0x6f, 0x39, 0xf8, 0xe3, 0xaf, 0x1c, 0x9b, 0x8b, 0x22, 0x34, 0x98, 0x33, 0x08, 0xf3, 0x08, 0x02, 0xce, 0x30, 0x7d, 0x32, 0x6b, 0x54, 0x12, 0x1c, 0x0c, 0x2e, 0x4f, 0x7b, 0x0a, 0x18, 0xc7, 0xdd, 0x4a, 0xd3, 0x0c, 0x0d, 0x24, 0x92, 0x47, 0xd2, 0xe8, 0xe4, 0x5b, 0x3f, 0x18, 0xa5, 0x37, 0xa2, 0x1b, 0x9d, 0x6b, 0x2a, 0x62, 0x97, 0x4e, 0x1c, 0xaf, 0xe0, 0x9b, 0x74, 0x4a, 0x01, 0xa5, 0x46, 0x02, 0x19, 0x12, 0x07, 0x4d, 0x61, 0xe4, 0x95, 0xf3, 0x50, 0x93, 0x39, 0x8b, 0x96, 0x57, 0x26, 0x33, 0x76, 0x5f, 0xb6, 0x4a, 0x48, 0x62, 0x06, 0x74, 0x8c, 0x58, 0x27, 0xe2, 0x85, 0xca, 0xa4, 0x6e, 0x64, 0xf8, 0xe8, 0x76, 0xb7, 0x33, 0x34, 0xc2, 0x72, 0x41, 0xb4, 0x09, 0xc3, 0xf6, 0x0f, 0xa2, 0x4e, 0x6f, 0x19, 0x1d, 0x74, 0x3e, 0xa1, 0x8a, 0xe0, 0x7a, 0x7a, 0x03, 0xcd, 0xb2, 0x24, 0x5e, 0xa6, 0xae, 0x60, 0x69, 0xf1, 0x40, 0xfe, 0x6a, 0xf5, 0xb6, 0xb1, 0xc7, 0x1c, 0xae, 0xba, 0x48, 0x5f, 0x2a, 0x4d, 0x9b, 0x06, 0xe0, 0x5c, 0x32, 0xe2, 0x4b, 0x09, 0xc7, 0x4d, 0x41, 0x43, 0x5d, 0x03, 0x36, 0xc0, 0x6e, 0x7c, 0x64, 0xf1, 0x1d, 0x8a, 0x4d, 0x8a, 0x05, 0x95, 0x8f, 0x41, 0x57, 0x3d, 0xe2, 0x18, 0x44, 0x89, 0x19, 0xe8, 0xfe, 0x70, 0xb4, 0x57, 0x6b, 0x5f, 0xae, 0x49, 0x7c, 0xb5, 0x23, 0x4a, 0x15, 0xf2, 0xea, 0x0e, 0x2b, 0xb0, 0xa8, 0x18, 0xe3, 0xec, 0xe1, 0xc6, 0xaf, 0x1d, 0xae, 0x69, 0x43, 0x19, 0x7d, 0xb2, 0xc9, 0x70, 0xe8, 0x3d, 0x09, 0xf1, 0xa9, 0x5a, 0x2d, 0xa7, 0x2f, 0xb9, 0xe5, 0x20, 0x35, 0xc7, 0x09, 0x09, 0x6f, 0xee, 0x1b, 0xc9, 0x18, 0x8f, 0x1c, 0x42, 0x6c, 0xaa, 0x1c, 0xb5, 0x99, 0xcb, 0x5c, 0xff, 0x4d, 0xe7, 0xea, 0xf4, 0x56, 0xc6, 0xa0, 0x84, 0xed, 0xf1, 0x37, 0xe4, 0xf6, 0xbc, 0x6d, 0xfa, 0x10, 0xa7, 0x96, 0xa2, 0x71, 0x4c, 0x9a, 0x70, 0xb0, 0x84, 0xb0, 0xdb, 0xa8, 0xcd, 0xa3, 0xb8, 0x96, 0xef, 0xbe, 0xac, 0x0c, 0xa2, 0x29, 0x8e, 0xbc, 0x56, 0x60, 0xfb, 0xa6, 0xfc, 0x96, 0x7a, 0xba, 0xe6, 0x45, 0xeb, 0x4d, 0x55, 0xd7, 0xae, 0xa5, 0x3c, 0x96, 0xb6, 0x5a, 0x21, 0x81, 0xea, 0x04, 0x3d, 0x28, 0xea, 0x80, 0xd8, 0x76, 0x5d, 0x1f, 0xcd, 0x86, 0x5b, 0xcb, 0x69, 0x53, 0x19, 0x13, 0x7d, 0xaa, 0xc7, 0x4a, 0xb5, 0x4c, 0x38, 0x88, 0xa2, 0xef, 0x94, 0xdb, 0xd6, 0xbb, 0x17, 0x8a, 0x2f, 0x9b, 0xda, 0x0b, 0xb4, 0xd7, 0x35, 0xd2, 0x36, 0xd9, 0x7d, 0xf2, 0x2a, 0x43, 0x6d, 0x30, 0xc4, 0xcc, 0x2f, 0x9c, 0xfc, 0x19, 0x0c, 0x8b, 0x7c, 0x27, 0xb7, 0xaa, 0xf4, 0xed, 0xac, 0x37, 0x12, 0x38, 0x73, 0xe3, 0x51, 0x52, 0x2a, 0xc8, 0x8e, 0x43, 0xb1, 0x51, 0x34, 0x3c, 0xaf, 0x49, 0x03, 0x29, 0x79, 0xf7, 0xcb, 0x7e, 0x48, 0x85, 0x95, 0x36, 0x44, 0x1c, 0xb2, 0x93, 0x15, 0xb1, 0x87, 0x9d, 0xa2, 0x69, 0x3a, 0x84, 0xe4, 0xed, 0x74, 0xcd, 0xd8, 0x81, 0xd0, 0x2a, 0x49, 0x8f, 0xdd, 0x62, 0x4c, 0xc1, 0x8a, 0x47, 0x49, 0xac, 0xe1, 0xb6, 0xdd, 0xd9, 0xad, 0xa6, 0x1b, 0xe2, 0xc8, 0xc9, 0x43, 0x32, 0x5a, 0x56, 0xf5, 0x12, 0x38, 0x67, 0x4e, 0x02, 0xec, 0x44, 0x53, 0x5a, 0xa7, 0x8b, 0xa0, 0xc6, 0xe8, 0xa5, 0xa2, 0xf2, 0x1c, 0x74, 0x36, 0x34, 0x88, 0x1b, 0x8b, 0x0e, 0xcf, 0xbf, 0x08, 0xc5, 0x67, 0x75, 0xca, 0x45, 0xc2, 0x1e, 0x55, 0x9b, 0xaa, 0x10, 0xfc, 0x3c, 0xd0, 0x68, 0x11, 0xfc, 0xfa, 0x5b, 0xf6, 0xbd, 0x39, 0x1f, 0x37, 0xdd, 0x3a, 0xc5, 0x2d, 0x57, 0x7a, 0x57, 0xd9, 0xfb, 0x32, 0xb5, 0x2d, 0x07, 0x06, 0x75, 0x07, 0xd4, 0x4d, 0x86, 0xbc, 0xbe, 0xaa, 0x9b, 0xef, 0xb9, 0x43, 0x4f, 0x2f, 0xef, 0x5e, 0x38, 0xde, 0x6c, 0x94, 0x78, 0xf4, 0x23, 0xc3, 0xf1, 0xbd, 0x55, 0xdc, 0x16, 0xc3, 0x3d, 0xf8, 0xe3, 0x5b, 0xfc, 0x63, 0xc2, 0x7e, 0x01, 0x01, 0xd5, 0x63, 0x3f, 0xac, 0x4f, 0xda, 0x08, 0x8a, 0x10, 0xb9, 0xc8, 0x0a, 0x94, 0xa9, 0x85, 0x85, 0x8a, 0x88, 0xc0, 0x67, 0xc1, 0x90, 0xc8, 0xaa, 0xd1, 0x61, 0xba, 0x5c, 0x3c, 0xec, 0x07, 0x29, 0xe5, 0x7f, 0x84, 0x18, 0xc7, 0x88, 0x6c, 0x5d, 0xf2, 0x39, 0x0d, 0xb8, 0xa5, 0x6a, 0x1e, 0xaa, 0x1f, 0x85, 0xad, 0xfa, 0x3b, 0x06, 0x2a, 0x4c, 0x25, 0x3b, 0x70, 0x00, 0x4d, 0xad, 0x50, 0x02, 0xb4, 0x09, 0x1d, 0xec, 0x9e, 0xc6, 0x8b, 0xc6, 0xfc, 0x2c, 0x6d, 0x99, 0x42, 0xfb, 0x92, 0x49, 0xba, 0xcb, 0x1f, 0x3e, 0xe8, 0x6c, 0xfb, 0x7b, 0x6f, 0xa8, 0x7a, 0x9a, 0x6f, 0xbc, 0xf6, 0x31, 0x44, 0x85, 0x4d, 0x8f, 0xda, 0xe2, 0x47, 0xf0, 0xa3, 0x86, 0x3b, 0xb0, 0x5a, 0xd2, 0x32, 0xcf, 0x39, 0xb7, 0x8d, 0xc4, 0xae, 0x1b, 0xc4, 0x16, 0x6e, 0xd9, 0x27, 0x83, 0x29, 0x4d, 0xc9, 0x1c, 0x43, 0x5f, 0x46, 0x32, 0x32, 0x8c, 0x17, 0x6a, 0x56, 0xf8, 0xb9, 0x5e, 0x78, 0xb8, 0x31, 0x6a, 0x6f, 0x28, 0x65, 0x39, 0x7d, 0xeb, 0x0f, 0x5e, 0xb4, 0xb3, 0x7c, 0xcc, 0x46, 0x37, 0x6f, 0xce, 0x07, 0xe1, 0xd7, 0x9b, 0x8b, 0xa3, 0xa7, 0x41, 0x0b, 0x41, 0x5a, 0x60, 0x93, 0x53, 0x50, 0x2c, 0xd1, 0x7d, 0x76, 0xe4, 0xfc, 0x36, 0x3c, 0x5c, 0xfd, 0x15, 0xe3, 0x0a, 0x44, 0xcd, 0x82, 0xb9, 0xb8, 0x28, 0x9e, 0x54, 0x29, 0xd2, 0x8b, 0xf1, 0x2e, 0xb0, 0xd7, 0x23, 0x3c, 0x5c, 0x75, 0x83, 0xd1, 0x22, 0x20, 0x02, 0x19, 0xb1, 0x70, 0x12, 0xd0, 0x9a, 0x74, 0x4d, 0x0d, 0x77, 0xf4, 0x8f, 0x5f, 0x72, 0xcc, 0x67, 0x60, 0xd1, 0x26, 0x81, 0xe0, 0xa2, 0xb7, 0x43, 0x26, 0x4e, 0x63, 0x63, 0xbf, 0x40, 0xaa, 0x33, 0x7c, 0x9d, 0xa9, 0xb4, 0x2b, 0xc4, 0x4a, 0x3f, 0x2a, 0xda, 0x96, 0x04, 0x7b, 0xb2, 0xf3, 0xcd, 0xd7, 0xbe, 0xf4, 0x7c, 0x73, 0xde, 0xf2, 0x39, 0xfc, 0x4d, 0x4f, 0xab, 0x09, 0x45, 0x23, 0x70, 0x14, 0x7a, 0x7f, 0x2f, 0x04, 0x0a, 0x39, 0x3c, 0x01, 0xc5, 0x49, 0x7e, 0x82, 0x4b, 0x20, 0x40, 0x3c, 0xff, 0xb1, 0xf2, 0x41, 0xc9, 0xe9, 0x0f, 0x7f, 0x8a, 0x0b, 0x25, 0x38, 0xc3, 0x2f, 0xba, 0xe2, 0x28, 0xee, 0xa5, 0x28, 0xc2, 0x1b, 0xab, 0xce, 0x28, 0x3c, 0x1c, 0xf2, 0xb7, 0x10, 0x24, 0x15, 0xb2, 0x85, 0x1d, 0xfe, 0x63, 0x73, 0xc7, 0xa4, 0xa6, 0x99, 0x92, 0x50, 0xba, 0xa6, 0x20, 0xc1, 0x7d, 0x05, 0x21, 0x4b, 0x1f, 0x06, 0x94, 0x4f, 0xd0, 0x42, 0xcd, 0x94, 0x78, 0xc0, 0x19, 0x07, 0x66, 0x72, 0x38, 0x4f, 0xd5, 0xc4, 0x82, 0x33, 0x19, 0xb0, 0xfb, 0xee, 0x29, 0x62, 0x4a, 0x03, 0xd9, 0x74, 0xab, 0x70, 0x37, 0xdf, 0x83, 0x92, 0x84, 0xc2, 0xf5, 0xd9, 0x44, 0xaa, 0x2f, 0x44, 0xeb, 0x43, 0x10, 0xd7, 0x0e, 0x8c, 0x0e, 0xab, 0xd8, 0x7b, 0x5c, 0xc2, 0x12, 0x1e, 0x6e, 0xff, 0xf3, 0xfd, 0xbd, 0x8d, 0x8d, 0xae, 0xfa, 0xaa, 0x24, 0x41, 0x66, 0x48, 0x05, 0x59, 0x29, 0x72, 0x2e, 0x6e, 0x97, 0x0e, 0x5b, 0x7c, 0x43, 0x8c, 0xc1, 0xf8, 0x8c, 0xc2, 0xc3, 0xa1, 0x1c, 0xd3, 0xf7, 0xf0, 0x10, 0xd1, 0x04, 0x27, 0x86, 0x6e, 0x0c, 0x61, 0x14, 0x36, 0x09, 0x3f, 0x60, 0x62, 0x2e, 0xad, 0x5c, 0x81, 0x1c, 0x29, 0xd6, 0xc3, 0x88, 0x8e, 0x25, 0x0e, 0x17, 0xc7, 0x2a, 0x69, 0xfd, 0x44, 0xd0, 0x4b, 0x16, 0x7b, 0xf4, 0x07, 0x15, 0x3f, 0xde, 0x68, 0x0b, 0xe7, 0xcb, 0xe5, 0x70, 0x06, 0x32, 0x68, 0xb0, 0x9c, 0x4c, 0xe0, 0xb4, 0xcf, 0x52, 0xe9, 0xc5, 0xcd, 0x3a, 0xb8, 0x24, 0x37, 0xb4, 0xc9, 0x1c, 0x5a, 0x77, 0x9d, 0xd0, 0x24, 0xd7, 0xd3, 0x16, 0x70, 0x8b, 0xd6, 0x16, 0x75, 0x16, 0xfc, 0x21, 0x38, 0xa1, 0x49, 0xaf, 0x6d, 0x61, 0x0f, 0x49, 0xe9, 0x9b, 0x71, 0xef, 0x31, 0x6e, 0x0b, 0x02, 0xfb, 0xd9, 0x47, 0x6f, 0x9a, 0x5e, 0xd7, 0x53, 0x76, 0x8d, 0xde, 0x79, 0x8f, 0x7a, 0x27, 0x81, 0xf0, 0x60, 0x2c, 0x23, 0x3a, 0x64, 0x0d, 0xb3, 0xbd, 0x0b, 0xb2, 0x82, 0x21, 0xb8, 0xba, 0x28, 0x69, 0xf5, 0xe4, 0xf7, 0x8f, 0xb1, 0xff, 0xa1, 0x24, 0x61, 0xce, 0x12, 0x8c, 0x35, 0x12, 0x7f, 0xf4, 0x51, 0x49, 0x0a, 0xf6, 0x4f, 0xf2, 0x18, 0xe2, 0xfb, 0x10, 0x0f, 0x3e, 0xe5, 0xd6, 0xc5, 0x84, 0xaa, 0xc4, 0x5e, 0x20, 0x46, 0xf3, 0x61, 0x9f, 0x17, 0xd0, 0xce, 0x83, 0xc7, 0x13, 0x24, 0xa5, 0x36, 0x7b, 0x8c, 0x9c, 0x38, 0x8f, 0xc2, 0x2d, 0x94, 0xb5, 0x2f, 0x79, 0xae, 0x1b, 0xac, 0xbe, 0xf6, 0x74, 0x92, 0x8a, 0x6c, 0xe2, 0x0e, 0xcf, 0xa8, 0x43, 0xe5, 0xe5, 0x1a, 0x3f, 0xa7, 0xec, 0x2b, 0xb5, 0x1a, 0x58, 0xef, 0xd6, 0xb1, 0xc5, 0x43, 0x19, 0x07, 0x62, 0xea, 0x3a, 0xc7, 0xce, 0x57, 0x9a, 0xc9, 0xd5, 0xd1, 0x14, 0x80, 0x46, 0x6b, 0x7a, 0x19, 0x53, 0x86, 0x0c, 0x20, 0x2e, 0x70, 0x5a, 0x04, 0x25, 0xa9, 0xe3, 0xa9, 0xc1, 0x90, 0xbd, 0x4e, 0x50, 0xa1, 0x35, 0x1b, 0x60, 0x7a, 0x4c, 0xd6, 0xcc, 0x3e, 0xfd, 0x84, 0x8d, 0xfa, 0x61, 0x7a, 0x77, 0x95, 0x56, 0x4b, 0x9f, 0xe9, 0x0e, 0x15, 0x1f, 0x94, 0x10, 0x2a, 0x48, 0x4c, 0xe3, 0x61, 0x58, 0x18, 0x09, 0x32, 0xf3, 0x30, 0xe1, 0x13, 0x9b, 0xad, 0x96, 0x86, 0x47, 0xa0, 0xf3, 0x73, 0x96, 0xdf, 0x7b, 0x19, 0xe2, 0x68, 0x61, 0x98, 0xd9, 0xd5, 0xeb, 0xdf, 0xe0, 0xed, 0x3f, 0xfd, 0x43, 0x7f, 0xf9, 0x11, 0x77, 0xea, 0x9f, 0xba, 0x53, 0x9a, 0x74, 0x17, 0x7b, 0x30, 0x09, 0x64, 0x5b, 0x47, 0x7f, 0xa2, 0x5d, 0xf9, 0x2b, 0x66, 0x35, 0xf1, 0xd6, 0x20, 0x42, 0x11, 0x0d, 0xf8, 0xa7, 0xbe, 0xd1, 0xa3, 0x65, 0x90, 0x18, 0xeb, 0xbe, 0x49, 0xd9, 0x1f, 0x3e, 0x7a, 0x2e, 0x29, 0x24, 0xc3, 0x9f, 0xb2, 0x2e, 0x41, 0x2d, 0x83, 0x49, 0x87, 0x28, 0x2d, 0xdc, 0x4c, 0x97, 0x4f, 0xf1, 0xa7, 0x42, 0xf0, 0x86, 0xc0, 0x96, 0x81, 0x99, 0xa3, 0xa1, 0xc7, 0x3f, 0x0f, 0x1b, 0x16, 0x9a, 0xd4, 0x22, 0xde, 0x94, 0x1a, 0x04, 0x15, 0x8c, 0x83, 0x2d, 0xe2, 0xd5, 0x10, 0x1f, 0x2a, 0xfa, 0x0b, 0x4d, 0x15, 0x9e, 0x6e, 0x9e, 0x3d, 0x61, 0xb4, 0x08, 0x38, 0x90, 0xbe, 0xcc, 0x4d, 0xdb, 0x4c, 0x8e, 0xc6, 0x9f, 0xfe, 0xc1, 0x89, 0x80, 0xff, 0xf4, 0x75, 0xdf, 0x8b, 0xeb, 0x93, 0x03, 0x9a, 0xd2, 0x9f, 0x7a, 0xe5, 0xe3, 0x7c, 0x98, 0xcf, 0xe4, 0xe2, 0xe1, 0xe6, 0xc3, 0x06, 0xea, 0xcf, 0x98, 0x4a, 0x28, 0x56, 0xd7, 0x73, 0x00, 0x4c, 0xba, 0xc1, 0xde, 0x14, 0x68, 0x87, 0xe5, 0x23, 0xae, 0x68, 0xc5, 0xc2, 0x05, 0xb8, 0x79, 0x7f, 0x8a, 0x14, 0x93, 0x84, 0xfb, 0xd2, 0x4a, 0x07, 0x62, 0xf1, 0xa8, 0x6a, 0x09, 0x48, 0x30, 0x04, 0xb4, 0x9a, 0x8e, 0x0d, 0x4f, 0x0f, 0x42, 0xbf, 0x20, 0xbf, 0x80, 0x69, 0x7e, 0xa4, 0xa2, 0x49, 0x31, 0x73, 0x8f, 0xf9, 0x67, 0xbd, 0x6b, 0xfa, 0x99, 0xe6, 0xd1, 0x08, 0xd8, 0x00, 0x66, 0x66, 0x48, 0xf1, 0x49, 0xd7, 0x2f, 0x50, 0x8e, 0x42, 0xa9, 0x79, 0x98, 0xf8, 0x0e, 0x7c, 0xc6, 0x9b, 0xa7, 0xde, 0xea, 0x8f, 0x09, 0x01, 0xf2, 0xa6, 0x77, 0xc9, 0xea, 0xd1, 0xa8, 0xc3, 0x0f, 0x30, 0xe6, 0x79, 0x2c, 0xc9, 0x6c, 0x9c, 0xbd, 0x66, 0xee, 0x93, 0xc2, 0xa2, 0x51, 0x6e, 0x33, 0x9c, 0x76, 0xff, 0xa9, 0xe1, 0x70, 0x4f, 0xb5, 0x6a, 0x43, 0x32, 0x7f, 0xd0, 0xbf, 0x96, 0x4e, 0x8c, 0x86, 0x51, 0x61, 0x41, 0x0e, 0xa6, 0x1c, 0xe1, 0xc8, 0x4f, 0xac, 0x35, 0xd7, 0x10, 0x85, 0xb0, 0x2d, 0x0e, 0x57, 0x5e, 0x74, 0x23, 0x1b, 0xdd, 0xd6, 0xa4, 0xbe, 0x08, 0x03, 0xe1, 0xab, 0x87, 0x33, 0x51, 0x72, 0x13, 0x9a, 0x3a, 0xa5, 0x76, 0xdd, 0x39, 0xa7, 0x1f, 0xd2, 0x3c, 0xb1, 0x8e, 0x65, 0x8e, 0x5e, 0xdb, 0x40, 0x9c, 0x39, 0x0a, 0x70, 0x7b, 0x0a, 0x8e, 0xfe, 0x87, 0x13, 0x6d, 0x67, 0xd7, 0x56, 0xcf, 0x89, 0xb2, 0x83, 0x2e, 0xc2, 0xa0, 0x97, 0xab, 0x87, 0xe3, 0xfc, 0xfb, 0x17, 0xfd, 0xad, 0x0d, 0xef, 0x50, 0xab, 0xc5, 0x47, 0xa0, 0x8d, 0xe2, 0xf1, 0x23, 0x66, 0xa9, 0xd2, 0x99, 0x69, 0x54, 0x81, 0x7e, 0x40, 0x3b, 0xcb, 0xe8, 0x05, 0xcb, 0x05, 0x8e, 0x43, 0x64, 0x3e, 0xcb, 0xd9, 0x60, 0x7b, 0x6a, 0x19, 0xf5, 0x7c, 0x50, 0x17, 0x44, 0x67, 0xbd, 0xde, 0x03, 0x6e, 0xcf, 0x9b, 0x18, 0x26, 0xa0, 0x7c, 0xa4, 0xc8, 0xb5, 0x21, 0x26, 0x90, 0x7b, 0x49, 0x91, 0x8e, 0xdc, 0x86, 0xa8, 0xf4, 0x00, 0x91, 0x14, 0x63, 0x83, 0x62, 0x28, 0x3b, 0x08, 0x82, 0xdc, 0xf8, 0x1f, 0xf9, 0x7f, 0x9d, 0x90, 0x95, 0x49, 0x77, 0xa4, 0xd3, 0x86, 0x89, 0x62, 0x66, 0x8d, 0xcd, 0x40, 0x38, 0x7d, 0x62, 0x9d, 0x84, 0xb2, 0xbe, 0xc3, 0x78, 0x75, 0xb3, 0x34, 0x2e, 0xcd, 0x04, 0x79, 0x05, 0x74, 0xa3, 0x68, 0xbd, 0x84, 0x2d, 0x77, 0xe3, 0xd5, 0x7e, 0x45, 0x81, 0xa8, 0x11, 0xc7, 0x9a, 0x26, 0x79, 0xbf, 0x65, 0x67, 0x38, 0x71, 0xb8, 0xb9, 0x33, 0xed, 0x1b, 0xc2, 0x6b, 0xf6, 0x83, 0x8f, 0x4d, 0xb7, 0x02, 0x6f, 0xec, 0xba, 0x04, 0xf1, 0x48, 0x39, 0xdf, 0xe0, 0xdb, 0x42, 0xb4, 0xe0, 0xc0, 0xc8, 0x11, 0x83, 0x79, 0xe2, 0xd6, 0xae, 0xd7, 0xfb, 0x2b, 0xb7, 0x9c, 0xb3, 0xc1, 0xe9, 0x60, 0x8e, 0x86, 0x3f, 0x8b, 0x2c, 0x78, 0x07, 0x27, 0xf7, 0x51, 0x21, 0x9d, 0x61, 0x3d, 0xb3, 0xc7, 0x28, 0x88, 0xaf, 0xbf, 0xe2, 0xf3, 0xfb, 0x5b, 0x01, 0xfa, 0xa7, 0xf4, 0xe1, 0x8f, 0xe9, 0xc2, 0xe1, 0x59, 0xa7, 0x97, 0x78, 0x58, 0x54, 0xf7, 0x22, 0x65, 0x13, 0x9c, 0x63, 0x8c, 0x29, 0x17, 0xda, 0xa5, 0x8a, 0x73, 0x95, 0x9e, 0xdc, 0xcc, 0x11, 0x23, 0x20, 0xb0, 0x43, 0xc0, 0x85, 0x8a, 0x00, 0xfb, 0x56, 0xb4, 0x34, 0x71, 0x10, 0x9c, 0x5e, 0xde, 0xed, 0xf9, 0x81, 0xa8, 0x28, 0xe0, 0x2e, 0x73, 0x97, 0xb4, 0xf3, 0xaa, 0x75, 0x49, 0xdc, 0x51, 0x43, 0x96, 0xc4, 0x0b, 0x70, 0xdb, 0xe0, 0xc8, 0x42, 0x74, 0x1d, 0xee, 0x44, 0x9f, 0x58, 0x92, 0x5d, 0xc4, 0x93, 0x33, 0x81, 0x6f, 0x7d, 0x34, 0x18, 0xed, 0x20, 0x9b, 0xf9, 0xd3, 0xf8, 0x6d, 0x50, 0x4c, 0x2c, 0x7a, 0x3b, 0xe2, 0x17, 0x2a, 0x91, 0xf2, 0x54, 0xc2, 0x1a, 0x75, 0x14, 0x50, 0xb0, 0x1b, 0xf4, 0xb5, 0x1b, 0x9c, 0x83, 0x76, 0xa2, 0x2d, 0xcd, 0x1c, 0x60, 0x0a, 0xf6, 0x87, 0x7c, 0x5d, 0x50, 0xf4, 0x4d, 0x72, 0xe9, 0x9a, 0x6e, 0x66, 0xf3, 0xc4, 0x1c, 0xf8, 0x0a, 0x3c, 0x3d, 0x0b, 0xba, 0x46, 0x1f, 0xcb, 0x72, 0x86, 0xa4, 0x9e, 0x4e, 0x1e, 0x61, 0x4a, 0x65, 0x2b, 0x78, 0x8c, 0x2b, 0x40, 0xf9, 0x39, 0x3d, 0x2e, 0xc7, 0x60, 0x5e, 0x2b, 0xc9, 0xa7, 0xb9, 0x48, 0x30, 0xfd, 0x86, 0xc1, 0xc1, 0x9f, 0x22, 0x46, 0x94, 0xc3, 0xf4, 0x79, 0x1b, 0xe8, 0x13, 0x3e, 0x61, 0x94, 0x85, 0x7e, 0xb4, 0x65, 0x2c, 0xc1, 0x27, 0x08, 0xa1, 0x36, 0x12, 0x0e, 0x62, 0xa3, 0xdb, 0xf5, 0x0d, 0xc1, 0x42, 0x44, 0x6f, 0x43, 0x74, 0xf7, 0x3f, 0x92, 0x26, 0xc0, 0xf1, 0x68, 0xc9, 0x3a, 0x37, 0x38, 0x49, 0x38, 0x28, 0xd1, 0x86, 0xc6, 0x94, 0x7b, 0x67, 0x28, 0x0c, 0x67, 0x01, 0xf0, 0xf3, 0x28, 0x00, 0x66, 0x41, 0xcd, 0xae, 0x28, 0x07, 0xdb, 0x1e, 0xf5, 0x7a, 0x2e, 0x15, 0xa5, 0x3d, 0xac, 0x84, 0xed, 0xd1, 0x2f, 0xa2, 0x56, 0x17, 0xab, 0x4d, 0xf7, 0xa8, 0x36, 0xba, 0xaa, 0xd5, 0xa9, 0xaa, 0x26, 0x39, 0x36, 0x84, 0x5f, 0x49, 0x8c, 0x7f, 0x84, 0x7d, 0x61, 0x28, 0xd3, 0x2c, 0x5e, 0x3d, 0x9c, 0x4e, 0x47, 0xfa, 0xa5, 0x91, 0xb5, 0x35, 0x25, 0x68, 0xaf, 0xbc, 0x41, 0x4a, 0x20, 0x54, 0x02, 0x3b, 0x87, 0xc2, 0xd4, 0xb0, 0xac, 0x6b, 0x2b, 0x5f, 0x7d, 0xc6, 0xf5, 0x2f, 0x5d, 0xef, 0x16, 0x16, 0xd5, 0xe0, 0x42, 0x4f, 0x09, 0xc6, 0x20, 0x63, 0x90, 0x35, 0x28, 0x8f, 0x72, 0xd6, 0xd0, 0xc6, 0xa3, 0x3e, 0x15, 0x8b, 0x92, 0xec, 0xd7, 0x5a, 0xdc, 0x88, 0x92, 0x05, 0xe5, 0x17, 0xeb, 0xa5, 0x85, 0x51, 0xc6, 0x62, 0xb9, 0xb1, 0x89, 0x18, 0x6c, 0x84, 0x90, 0xd6, 0x9a, 0x6a, 0x1c, 0x50, 0xb0, 0x2b, 0xb2, 0x28, 0x1c, 0xfd, 0xe4, 0xdd, 0x40, 0xa8, 0xba, 0x8f, 0xa6, 0x9b, 0x07, 0x07, 0x6e, 0xf2, 0x0a, 0xf3, 0x3c, 0xe6, 0x20, 0xcf, 0x89, 0x19, 0x30, 0xe8, 0xa0, 0x65, 0x5c, 0xfa, 0x74, 0xc0, 0x47, 0x47, 0xa3, 0x49, 0x18, 0x38, 0x5a, 0x35, 0x9a, 0xd6, 0x08, 0x9a, 0xa1, 0x28, 0x94, 0xfa, 0xc4, 0x4d, 0x43, 0x34, 0xa0, 0xe0, 0x17, 0xf5, 0x12, 0xcb, 0x9e, 0xf2, 0x27, 0x57, 0xac, 0xc0, 0x31, 0xde, 0x57, 0x7f, 0xd1, 0x65, 0x11, 0xe1, 0x4f, 0x4b, 0xfa, 0x7f, 0xf4, 0xbc, 0xad, 0xd3, 0x0c, 0x76, 0x7f, 0x2c, 0x6c, 0x64, 0x62, 0xcf, 0x01, 0xc7, 0x8a, 0x31, 0x91, 0x60, 0xea, 0xb4, 0x5a, 0xe1, 0xf6, 0x37, 0xd6, 0xa6, 0x01, 0xde, 0x59, 0x2e, 0x11, 0x23, 0x7b, 0xf2, 0x94, 0x2c, 0x67, 0xec, 0x28, 0xf6, 0x20, 0x99, 0xf1, 0x10, 0x5c, 0xb2, 0xde, 0x03, 0xa6, 0x65, 0x56, 0x66, 0x89, 0xb4, 0xb9, 0x3a, 0x2d, 0x2d, 0x7c, 0xf8, 0x8d, 0x66, 0xc5, 0xa3, 0x3d, 0x67, 0x4e, 0xff, 0xaa, 0x5c, 0x6b, 0x4a, 0x32, 0x12, 0x55, 0x46, 0xc2, 0x3c, 0x8b, 0xd9, 0xaf, 0x16, 0x65, 0x35, 0x69, 0xf5, 0xf4, 0x9d, 0x6d, 0x13, 0x65, 0xdb, 0x41, 0x16, 0xc2, 0x98, 0xde, 0xfa, 0xbf, 0xb7, 0xa8, 0x38, 0x93, 0xa8, 0x58, 0xe4, 0x29, 0x92, 0x5c, 0xd6, 0x15, 0xdb, 0xf2, 0x9e, 0x6c, 0x4b, 0xeb, 0x87, 0x0c, 0xd7, 0xdd, 0x46, 0x81, 0x0c, 0x74, 0x72, 0x5d, 0xa9, 0x53, 0x85, 0x8d, 0x08, 0xf5, 0x8c, 0xb0, 0x6b, 0xa4, 0xff, 0x7c, 0x86, 0xfc, 0x62, 0x37, 0xbc, 0x06, 0x9a, 0xd1, 0x27, 0x5e, 0x43, 0xbb, 0x5f, 0xa8, 0x1f, 0xb9, 0xa8, 0xae, 0xab, 0x87, 0x93, 0x3c, 0x79, 0x76, 0x25, 0xb9, 0x4d, 0xcb, 0x6a, 0xd0, 0xdd, 0xe8, 0x07, 0x8e, 0xd8, 0x59, 0xfb, 0x84, 0xc5, 0x43, 0x2f, 0x68, 0x62, 0x35, 0x17, 0x98, 0xd6, 0x2d, 0x87, 0xe0, 0x96, 0xa1, 0x50, 0xf8, 0x18, 0x2f, 0x16, 0x22, 0x6d, 0x9e, 0x26, 0xf9, 0x88, 0x81, 0x1b, 0xb9, 0x4d, 0x2f, 0x36, 0x8a, 0x22, 0x88, 0xcc, 0x2a, 0xcf, 0x6f, 0xd9, 0xa9, 0xca, 0x29, 0xd8, 0x58, 0x0c, 0xe9, 0x23, 0x45, 0x7b, 0x24, 0x3f, 0xd3, 0x7b, 0xb3, 0x39, 0x18, 0xbc, 0xdb, 0x4c, 0xaa, 0x91, 0x4a, 0xbd, 0x4d, 0x9b, 0xfd, 0x27, 0xd6, 0xf7, 0xd3, 0x5a, 0x2c, 0x49, 0x5e, 0xea, 0xd8, 0x87, 0xc4, 0x6f, 0xfc, 0xda, 0xcf, 0xa0, 0x7d, 0xda, 0x84, 0xba, 0x2d, 0xfa, 0x09, 0x96, 0x89, 0x78, 0xd7, 0xfa, 0x91, 0xba, 0x4b, 0x81, 0x26, 0xbd, 0xce, 0x98, 0xb1, 0x60, 0xa7, 0x3e, 0x7d, 0xb3, 0xed, 0xe2, 0x82, 0x4b, 0x41, 0xd7, 0x0a, 0xa6, 0xfc, 0x2c, 0x17, 0xff, 0x2d, 0xe7, 0x49, 0x9e, 0x1d, 0x8e, 0xfd, 0x52, 0x82, 0xd4, 0xd3, 0x13, 0x5e, 0xa0, 0x0f, 0x83, 0xdd, 0x14, 0x4f, 0xcf, 0xf8, 0xd9, 0x13, 0x7e, 0xde, 0x8c, 0x25, 0x30, 0x40, 0x3e, 0x34, 0x9d, 0x04, 0xcd, 0x99, 0xdc, 0xd3, 0x82, 0xf3, 0x8d, 0x35, 0x01, 0xd3, 0x34, 0x7b, 0x8e, 0x73, 0xcf, 0xa4, 0xe8, 0xa0, 0xbf, 0x15, 0x5b, 0xcc, 0x9b, 0x41, 0x25, 0x01, 0xb8, 0x94, 0x5c, 0xe1, 0x69, 0xfe, 0xe4, 0xec, 0x62, 0x01, 0xda, 0x46, 0xb1, 0xe0, 0x38, 0xdf, 0x47, 0x4a, 0x3f, 0x98, 0xc7, 0x93, 0x8e, 0x96, 0x98, 0x7f, 0x1c, 0xe8, 0x38, 0xed, 0xb9, 0xb1, 0x40, 0xdf, 0xe3, 0x5a, 0xab, 0x3b, 0x0c, 0xcb, 0xb7, 0x9c, 0x85, 0xd1, 0xeb, 0x9f, 0xda, 0x6c, 0x4c, 0xbd, 0x9e, 0xcd, 0x8c, 0x1d, 0xf0, 0xa4, 0x48, 0x02, 0x71, 0xb6, 0xd0, 0xed, 0x41, 0xba, 0x20, 0x32, 0x61, 0x32, 0xed, 0xea, 0xc5, 0xe8, 0x46, 0xcf, 0x26, 0x05, 0x0a, 0x35, 0xe8, 0xd6, 0x5a, 0xd8, 0x60, 0x3a, 0x4b, 0x8c, 0xb5, 0xf3, 0x2f, 0xe3, 0x91, 0x01, 0x30, 0x7a, 0x6a, 0x76, 0x31, 0x77, 0x9a, 0x6b, 0xec, 0x02, 0xe7, 0x11, 0xd5, 0x34, 0x0a, 0xca, 0x8e, 0x7a, 0x96, 0x38, 0x4f, 0xa5, 0xdf, 0xb6, 0x09, 0xed, 0xb9, 0xbb, 0x55, 0x5a, 0xfe, 0xfc, 0x0c, 0x81, 0x17, 0x34, 0xc8, 0x69, 0xaa, 0x34, 0xf3, 0xe7, 0x5f, 0x9f, 0x4f, 0x70, 0xe1, 0x39, 0x45, 0x0d, 0x55, 0xd2, 0xe6, 0xc5, 0xd1, 0x66, 0x0b, 0xcf, 0x75, 0x85, 0x50, 0x86, 0xbe, 0x3a, 0xc9, 0x4d, 0xae, 0x5b, 0x83, 0x45, 0x70, 0x4c, 0x67, 0x56, 0xe6, 0x4f, 0x6b, 0x81, 0x74, 0x02, 0x4e, 0xfa, 0x3a, 0x82, 0xeb, 0xb3, 0x03, 0x13, 0xec, 0x20, 0xbc, 0x38, 0x95, 0x12, 0xcd, 0xd3, 0x2e, 0x45, 0x38, 0xc3, 0xf0, 0x8d, 0x11, 0xab, 0xa0, 0x6e, 0x24, 0xf8, 0xbb, 0x6c, 0x90, 0x62, 0x29, 0x6f, 0x8f, 0x52, 0x6c, 0x9f, 0x43, 0x44, 0xe8, 0xf0, 0x0c, 0xdc, 0x55, 0x6a, 0x5b, 0xa0, 0x46, 0x19, 0x7f, 0x99, 0xea, 0x33, 0x8d, 0xd3, 0x34, 0xe1, 0xf8, 0x13, 0xbe, 0x6e, 0xcb, 0x39, 0xc8, 0x0a, 0x45, 0x7d, 0xb2, 0xf7, 0x94, 0xab, 0x9d, 0x82, 0x12, 0x18, 0x95, 0xa0, 0x1c, 0x52, 0x6a, 0x53, 0x8d, 0x61, 0x09, 0x0d, 0x7f, 0x8a, 0x4f, 0x42, 0x81, 0xf6, 0x0f, 0x56, 0x0f, 0xa7, 0x2d, 0x3a, 0x3e, 0x21, 0xd2, 0xe8, 0x43, 0x0c, 0x77, 0x20, 0x54, 0x1f, 0x50, 0xc6, 0x24, 0x85, 0x6c, 0x5b, 0x14, 0x0e, 0x98, 0xd4, 0x3b, 0xda, 0x56, 0xcd, 0xfe, 0xe9, 0x65, 0x15, 0x28, 0x21, 0x01, 0xb5, 0x9e, 0xe2, 0xdb, 0x2c, 0x2c, 0xc0, 0xa2, 0x8e, 0xa9, 0x7a, 0x04, 0x4f, 0x39, 0x79, 0xa8, 0x38, 0xbe, 0x40, 0xbf, 0xc3, 0xb9, 0xa4, 0xa0, 0xd7, 0x61, 0x48, 0xdb, 0x42, 0x98, 0x06, 0xaa, 0x2a, 0xa4, 0x8e, 0x95, 0xbe, 0x66, 0xfc, 0x75, 0x0f, 0xe3, 0x69, 0x3f, 0x2f, 0x52, 0x94, 0x37, 0x94, 0xc8, 0xa9, 0x83, 0x21, 0xdd, 0x77, 0x89, 0x9f, 0xa0, 0xf5, 0x18, 0x1a, 0x4e, 0x23, 0x6b, 0x51, 0xc4, 0xa1, 0x35, 0x6f, 0xe8, 0x39, 0xd1, 0x2b, 0xfe, 0xce, 0x8c, 0x2a, 0xd0, 0x09, 0xa1, 0xfa, 0x72, 0xad, 0xc1, 0x31, 0xbd, 0x5c, 0x35, 0xe5, 0xc5, 0xac, 0xd6, 0x2e, 0x14, 0x63, 0xb0, 0x40, 0x78, 0x05, 0x57, 0xb2, 0x7b, 0xbe, 0xa8, 0xb4, 0x2c, 0x97, 0x74, 0x60, 0x6f, 0x4f, 0xcf, 0x4e, 0x4c, 0x56, 0xdb, 0xff, 0xda, 0xec, 0xe3, 0x96, 0x17, 0x23, 0x2f, 0x87, 0x8f, 0x6b, 0x48, 0x9d, 0x82, 0x60, 0x29, 0x32, 0xfd, 0xb6, 0xcb, 0x9d, 0x2f, 0xe9, 0xc7, 0xb5, 0x0a, 0xd3, 0x93, 0xf3, 0xef, 0x4e, 0xaf, 0x2e, 0xce, 0xdf, 0x9f, 0x9c, 0x5f, 0x7f, 0xe6, 0xb0, 0xbb, 0x50, 0x5f, 0x87, 0xd2, 0x4f, 0x2e, 0x48, 0x31, 0x1c, 0x74, 0x4f, 0x45, 0x80, 0xdc, 0x5d, 0x05, 0x56, 0x2a, 0xff, 0xea, 0xbb, 0xc3, 0x39, 0x0f, 0xa9, 0x67, 0x1f, 0x33, 0x49, 0x16, 0xe8, 0xd9, 0x19, 0x63, 0x5c, 0xb5, 0xcf, 0xb1, 0x00, 0xd3, 0x39, 0x18, 0x5b, 0x4b, 0x3c, 0x20, 0x94, 0x37, 0xa5, 0x02, 0x63, 0xed, 0xd8, 0x67, 0x66, 0x4b, 0x38, 0x08, 0x68, 0x63, 0xa5, 0xb5, 0x49, 0x58, 0xe2, 0xfe, 0x20, 0x05, 0xa0, 0x59, 0x14, 0x5c, 0x8d, 0xa2, 0xdf, 0x91, 0x42, 0x40, 0x9f, 0xbd, 0xe1, 0x3c, 0x1c, 0x8e, 0xbe, 0x30, 0x93, 0x70, 0x72, 0x40, 0x1d, 0x5c, 0x60, 0xa7, 0xc9, 0x71, 0x13, 0x0b, 0xd8, 0x59, 0xc5, 0x8f, 0xea, 0x2c, 0x3a, 0xd8, 0xdc, 0xfc, 0x99, 0xfa, 0x6b, 0x7f, 0x29, 0x0d, 0xb6, 0x7d, 0x08, 0xd4, 0xd2, 0x99, 0x86, 0x2d, 0x19, 0xd2, 0xea, 0x42, 0xa4, 0x5b, 0xb3, 0x9d, 0xe4, 0x06, 0xfe, 0x78, 0x79, 0x75, 0xf1, 0xc3, 0x5f, 0x7e, 0xe3, 0x4f, 0x38, 0xc9, 0x66, 0x3f, 0x62, 0x0e, 0xa6, 0x0e, 0xfe, 0xf3, 0x6f, 0xfe, 0xb5, 0xfa, 0xf0, 0x5d, 0x89, 0xb4, 0x73, 0x33, 0x70, 0x5f, 0x21, 0xe3, 0xe2, 0x6d, 0x06, 0xbb, 0xb7, 0x29, 0xd1, 0x91, 0xe3, 0xe3, 0x30, 0xc9, 0x40, 0x24, 0xe2, 0xca, 0x3a, 0x81, 0xc6, 0x3e, 0xf4, 0x75, 0x9f, 0x4b, 0x8a, 0x6d, 0x06, 0xaf, 0x56, 0x95, 0x63, 0xe5, 0x38, 0xd7, 0x96, 0x53, 0x3e, 0xaa, 0xd9, 0x8f, 0xa3, 0xb3, 0xb3, 0xdf, 0x74, 0x13, 0xa8, 0x47, 0xb1, 0x5d, 0x4b, 0xcf, 0x68, 0xa8, 0xf2, 0xf4, 0x13, 0x48, 0xb4, 0xe7, 0x17, 0x32, 0x9b, 0x43, 0x52, 0x8e, 0x7b, 0x65, 0x02, 0x2a, 0x6d, 0x8c, 0xf1, 0x7e, 0x85, 0x16, 0xc7, 0x89, 0x95, 0x9b, 0x9c, 0x38, 0xe9, 0x21, 0x9d, 0xd3, 0x43, 0x94, 0x2c, 0x40, 0x26, 0x14, 0xe5, 0x55, 0xf2, 0x6e, 0x72, 0x59, 0x1c, 0xd5, 0x2d, 0xe4, 0x06, 0x97, 0x88, 0x3b, 0xa6, 0x73, 0xc7, 0xee, 0x49, 0xa0, 0x21, 0x33, 0xa3, 0x43, 0xa0, 0xbc, 0x2d, 0xd2, 0xf2, 0x96, 0x8a, 0x3a, 0xf0, 0x86, 0x92, 0x82, 0xa4, 0xf5, 0xfb, 0xa8, 0xf2, 0xd2, 0x9c, 0xfa, 0x0c, 0x31, 0x62, 0xab, 0xe9, 0xd2, 0x32, 0x34, 0x3b, 0xea, 0x6c, 0xc5, 0xa2, 0x18, 0xdd, 0xa8, 0xec, 0x84, 0x8e, 0x6b, 0xa5, 0x5d, 0x02, 0xcf, 0xce, 0x49, 0x54, 0xa5, 0xc1, 0x19, 0x08, 0x95, 0xa5, 0x77, 0xb5, 0xdc, 0x18, 0x1f, 0xe0, 0x4f, 0x57, 0x65, 0x32, 0x9b, 0x84, 0x2b, 0xec, 0x83, 0xdc, 0x42, 0x2a, 0xfc, 0x4d, 0xcb, 0x78, 0x25, 0x56, 0x3c, 0xac, 0x84, 0x30, 0x69, 0x30, 0xb4, 0xe0, 0xfb, 0xeb, 0x84, 0x0e, 0x6b, 0x79, 0x06, 0x0f, 0xb6, 0xd1, 0x57, 0xe4, 0x54, 0xb3, 0x72, 0x9e, 0x98, 0x9e, 0xed, 0xeb, 0xb1, 0x5f, 0x30, 0x05, 0x1c, 0xc9, 0xc5, 0xef, 0x50, 0xc9, 0xdb, 0x7b, 0x88, 0x14, 0x38, 0x84, 0xcf, 0xa9, 0xf6, 0x8c, 0xfc, 0xe6, 0x39, 0xc3, 0x51, 0xfb, 0x84, 0x12, 0x73, 0xa3, 0x65, 0xaa, 0x51, 0x85, 0xd9, 0xbd, 0x55, 0x24, 0x7e, 0x71, 0x56, 0xc2, 0x09, 0x6b, 0xc7, 0xaf, 0x93, 0x70, 0x26, 0xbe, 0x6a, 0xa2, 0xad, 0x33, 0x0d, 0xc4, 0x86, 0xe1, 0x31, 0x74, 0xc1, 0x33, 0x88, 0x8c, 0x3b, 0x9e, 0x99, 0x27, 0x69, 0xab, 0x3c, 0x47, 0xd6, 0xe3, 0x14, 0x4a, 0x2b, 0x09, 0x05, 0xe1, 0x82, 0xe9, 0x37, 0xee, 0x95, 0x91, 0xbb, 0x60, 0x4a, 0xda, 0x49, 0x09, 0x37, 0x65, 0xa1, 0x36, 0xd2, 0x8e, 0xe1, 0x96, 0xc8, 0xf7, 0x8f, 0x53, 0xfc, 0x05, 0x85, 0x3a, 0x31, 0x22, 0x8a, 0x95, 0x98, 0xba, 0x03, 0x29, 0x96, 0xa5, 0xfa, 0xba, 0xa1, 0x96, 0x19, 0x6b, 0x70, 0x0b, 0x44, 0xe0, 0x2c, 0x2f, 0x43, 0x70, 0x9a, 0x43, 0xcc, 0x9a, 0x4f, 0xa8, 0x15, 0x0f, 0x5f, 0x79, 0xf8, 0xef, 0xf5, 0xc5, 0xf1, 0xc5, 0x19, 0xfc, 0xe5, 0xe4, 0xed, 0xe9, 0x0f, 0x56, 0x2b, 0x60, 0x80, 0x8a, 0x5a, 0x81, 0x0c, 0xe1, 0x2e, 0xbe, 0xec, 0xba, 0x6c, 0x88, 0x73, 0x10, 0x31, 0xfd, 0x90, 0x53, 0xe2, 0x9a, 0x14, 0x6a, 0xb8, 0xa5, 0xc3, 0xe7, 0x50, 0x4e, 0x63, 0xbe, 0xa8, 0x83, 0x3f, 0x12, 0x0b, 0xf0, 0x12, 0x6a, 0xd1, 0x3c, 0xb2, 0x29, 0xa6, 0xb0, 0x9b, 0x8c, 0x35, 0x52, 0x2e, 0x9b, 0x93, 0x6c, 0x54, 0xfb, 0xc9, 0x54, 0x61, 0x89, 0x6a, 0x93, 0xcb, 0x0b, 0xd3, 0xa7, 0xb6, 0x72, 0x7b, 0xa0, 0x37, 0x9a, 0xce, 0xb8, 0x88, 0xf6, 0x59, 0xe2, 0x2e, 0xd2, 0x34, 0x2e, 0xaf, 0x8a, 0x84, 0xb8, 0x22, 0x01, 0xd5, 0xa1, 0x22, 0xe0, 0xa2, 0x7c, 0x34, 0x28, 0x82, 0x2a, 0x74, 0xcc, 0x88, 0xf5, 0x35, 0xc9, 0x06, 0x48, 0x2e, 0x1f, 0xe5, 0x56, 0xa0, 0x1e, 0xef, 0x40, 0xfc, 0x08, 0xb5, 0x06, 0xcb, 0x05, 0xa5, 0x4e, 0x09, 0xff, 0xa0, 0xec, 0x2a, 0x8e, 0x62, 0x08, 0x47, 0xbd, 0x76, 0x9a, 0xaf, 0xb3, 0x54, 0x90, 0xe0, 0xd3, 0xc2, 0x37, 0xad, 0xf0, 0x0c, 0x44, 0xd9, 0xaf, 0x6b, 0x1c, 0x65, 0xdb, 0xa7, 0xd1, 0x44, 0x95, 0x3d, 0xb0, 0x9f, 0xf6, 0xb2, 0xae, 0x31, 0xeb, 0xbb, 0xdc, 0x5b, 0x35, 0x06, 0x6a, 0x84, 0x7f, 0x5b, 0xa6, 0x77, 0x31, 0xd5, 0x96, 0xc1, 0x65, 0xe9, 0xf5, 0xf8, 0xa5, 0xc6, 0x18, 0xf1, 0xaf, 0x1a, 0x24, 0xae, 0x8f, 0xb2, 0xff, 0x6b, 0x06, 0xd9, 0x6f, 0x8c, 0x71, 0xf3, 0xab, 0x06, 0xe9, 0xa9, 0x80, 0x00, 0xc5, 0xf8, 0x87, 0xd3, 0xeb, 0xe8, 0xf8, 0xe2, 0x8d, 0xbd, 0x60, 0xd7, 0x26, 0x7b, 0x3b, 0x8e, 0x86, 0xcb, 0x0c, 0x68, 0x10, 0xbb, 0x25, 0x99, 0xfe, 0x13, 0x9c, 0xa6, 0x88, 0x39, 0x38, 0xa5, 0x56, 0xac, 0xa5, 0x05, 0x43, 0x11, 0x61, 0x5e, 0x0d, 0x23, 0x29, 0x39, 0x35, 0xba, 0xf8, 0xf4, 0x1c, 0x81, 0x8e, 0xa6, 0x2a, 0x7d, 0xf1, 0x56, 0x22, 0xd6, 0x5d, 0x5c, 0x68, 0x55, 0xe9, 0x30, 0x46, 0x30, 0xa3, 0x8c, 0x6b, 0x23, 0x41, 0x76, 0x06, 0xa0, 0x87, 0x75, 0x38, 0x17, 0x81, 0x18, 0x74, 0xe7, 0xb4, 0xd2, 0xa9, 0xb8, 0x99, 0x84, 0xdb, 0x9a, 0xeb, 0x5f, 0xa3, 0x74, 0x69, 0x40, 0x47, 0xc2, 0x0f, 0xf3, 0xba, 0xc7, 0x06, 0xce, 0x1a, 0x55, 0xe2, 0xcc, 0xe6, 0xec, 0x73, 0x1b, 0x6a, 0x4f, 0x62, 0x9b, 0x21, 0xcc, 0x77, 0x76, 0x24, 0x94, 0x00, 0x2a, 0x3a, 0xfb, 0x0d, 0x24, 0xaf, 0x2c, 0xfd, 0xbb, 0xa3, 0xa0, 0xef, 0x1a, 0x7d, 0x0c, 0x56, 0x3e, 0xa3, 0xde, 0xce, 0x63, 0xbe, 0x10, 0xe5, 0x23, 0x08, 0xf5, 0x07, 0x32, 0xc8, 0xd1, 0x7e, 0x12, 0x38, 0x27, 0xfb, 0xe6, 0x9e, 0x68, 0x65, 0x91, 0xc1, 0x8d, 0xa2, 0x06, 0x59, 0x8b, 0x7a, 0x34, 0xc8, 0x7a, 0x2d, 0xb4, 0x44, 0x9a, 0x42, 0x9c, 0x49, 0x89, 0xbd, 0xa6, 0x03, 0x9e, 0x0b, 0x9b, 0x78, 0xc0, 0xf0, 0x0d, 0x5c, 0x6e, 0x2d, 0xf0, 0xdb, 0x4e, 0x23, 0x41, 0x03, 0xf6, 0x83, 0x99, 0x49, 0xb4, 0x5f, 0x3d, 0xee, 0xa2, 0xe4, 0xd5, 0xa5, 0xdb, 0x0a, 0x4c, 0xb5, 0x38, 0xc6, 0x39, 0x6d, 0x60, 0x97, 0x32, 0x79, 0xb1, 0xe9, 0x7d, 0x8c, 0x50, 0x0f, 0xd4, 0xbc, 0x30, 0xce, 0xb8, 0xd2, 0x50, 0x4f, 0x20, 0x5c, 0x73, 0x67, 0x6b, 0x9e, 0xf6, 0xf9, 0x8f, 0x63, 0xd5, 0xd8, 0xa4, 0x6c, 0xc8, 0x65, 0x2c, 0x2c, 0x64, 0xc4, 0xba, 0xc9, 0x09, 0xa3, 0x03, 0x65, 0x10, 0xad, 0x8f, 0x18, 0xa4, 0xbf, 0x09, 0x65, 0xc3, 0xc7, 0xf9, 0xa2, 0xe5, 0x2b, 0x0c, 0xe9, 0x64, 0x3f, 0xe2, 0xfa, 0xe4, 0x75, 0x0b, 0xe5, 0x59, 0x67, 0xb4, 0x97, 0x4d, 0xba, 0x70, 0x3c, 0xfb, 0x34, 0xa2, 0x79, 0xf2, 0x73, 0xf1, 0x45, 0x24, 0x58, 0xb4, 0x28, 0xca, 0x73, 0x91, 0x2c, 0x66, 0xb2, 0x32, 0xf9, 0x09, 0x05, 0x8e, 0xc9, 0x9b, 0x40, 0xbb, 0x3c, 0xd2, 0x59, 0x82, 0x3a, 0xec, 0x9a, 0x82, 0xaf, 0xe4, 0xb3, 0xd8, 0xa6, 0x8d, 0x55, 0x07, 0xc2, 0xdd, 0x48, 0x0d, 0xbd, 0x49, 0x5b, 0x78, 0xfa, 0x11, 0x26, 0x38, 0x12, 0xaa, 0x83, 0xfe, 0x5b, 0xde, 0xf0, 0x90, 0xee, 0x1a, 0xae, 0x64, 0x5c, 0xed, 0xb2, 0xe0, 0xa2, 0x5d, 0x8b, 0xed, 0xa8, 0x60, 0xeb, 0x92, 0xff, 0x57, 0x20, 0x24, 0x5f, 0x1f, 0x78, 0x51, 0xee, 0xa1, 0x4f, 0xe6, 0x93, 0x4a, 0xb0, 0xbf, 0xb8, 0x23, 0x1a, 0xef, 0xcf, 0x4d, 0x9c, 0x4d, 0x13, 0xf6, 0xbf, 0x38, 0xf0, 0x94, 0xdc, 0x4d, 0x8f, 0xc5, 0x21, 0xdc, 0x75, 0x72, 0xf2, 0xb4, 0xa2, 0x4f, 0xd8, 0x7d, 0xd8, 0xde, 0x32, 0xfb, 0xc0, 0x8d, 0xb2, 0xa8, 0x3a, 0x05, 0x77, 0xe1, 0x7b, 0x42, 0x24, 0xbc, 0x8f, 0xb9, 0x91, 0xae, 0xb6, 0x9b, 0xb7, 0x46, 0x8b, 0x09, 0xf3, 0x60, 0x64, 0xcd, 0xcf, 0x93, 0x26, 0x24, 0x07, 0xcc, 0x82, 0x41, 0x7d, 0x80, 0x53, 0x3d, 0xb9, 0xbc, 0x51, 0xc4, 0x55, 0x97, 0x0c, 0x7a, 0xc3, 0x20, 0x39, 0xce, 0x4a, 0xbc, 0xf7, 0x2e, 0x09, 0xc1, 0x66, 0x28, 0x6e, 0x95, 0x93, 0xcd, 0x61, 0x41, 0x43, 0x9c, 0xf5, 0x6c, 0x9b, 0xf5, 0xdc, 0x13, 0xa1, 0x5c, 0x1e, 0x0d, 0x06, 0x4a, 0x26, 0xc7, 0x3e, 0x45, 0x48, 0xf4, 0x88, 0x10, 0x74, 0xa4, 0x48, 0x3a, 0xa0, 0x2a, 0xca, 0x20, 0x8d, 0x24, 0x83, 0x6d, 0xe6, 0x69, 0x6f, 0x98, 0x31, 0x93, 0x36, 0x21, 0xeb, 0x65, 0xba, 0xd2, 0x15, 0xdf, 0xaf, 0xde, 0xc9, 0xcf, 0x82, 0xe9, 0x2a, 0x1c, 0xb0, 0xc4, 0x7d, 0xa6, 0x62, 0x64, 0xe5, 0xf1, 0xa4, 0x1a, 0x3e, 0x2c, 0xd2, 0x5a, 0xcf, 0xc2, 0xed, 0x5d, 0x7f, 0xd1, 0xdf, 0xf1, 0xaa, 0xba, 0xff, 0xd2, 0xa2, 0xbf, 0x0b, 0x2c, 0x7a, 0xcf, 0x5e, 0x1c, 0xfe, 0x58, 0xb4, 0xb3, 0xf3, 0x52, 0x0b, 0x42, 0x80, 0x8e, 0xe9, 0x7b, 0xf6, 0x83, 0xce, 0x17, 0xe1, 0xb9, 0x1e, 0xd5, 0x1f, 0xf8, 0xdf, 0x72, 0x2e, 0xaf, 0xf3, 0xa9, 0x7d, 0xf3, 0x29, 0x50, 0xbf, 0xd1, 0x02, 0x05, 0x9d, 0x9e, 0xb9, 0x8c, 0xc7, 0x7c, 0xd4, 0x94, 0x43, 0x35, 0xfc, 0x1e, 0xf3, 0xa7, 0x2a, 0xa3, 0x4b, 0x36, 0x3e, 0xa5, 0xb3, 0x70, 0xbe, 0xf3, 0xc2, 0xb8, 0x51, 0x36, 0x77, 0x34, 0x80, 0x7e, 0x44, 0xbc, 0x78, 0x96, 0xcc, 0x89, 0x32, 0xc7, 0x09, 0xa2, 0xf5, 0x58, 0xf7, 0x1f, 0xd7, 0xdc, 0x4d, 0x8a, 0x98, 0xd0, 0x96, 0x67, 0xf1, 0x63, 0x00, 0x6c, 0x4b, 0x3c, 0xc5, 0x6c, 0xae, 0xc4, 0x38, 0xfb, 0x0c, 0x6d, 0x05, 0xd2, 0x04, 0xc4, 0x6d, 0x86, 0x7e, 0x58, 0x3c, 0xd1, 0x7c, 0x62, 0x5c, 0xb5, 0xf2, 0x55, 0x0f, 0x0e, 0xa0, 0x94, 0x06, 0x86, 0x7c, 0x65, 0x44, 0x4b, 0x08, 0x63, 0xc3, 0x6d, 0xbf, 0xb4, 0x47, 0x64, 0xce, 0x01, 0x1d, 0x5b, 0x0c, 0x11, 0xe2, 0xec, 0x9e, 0xf2, 0x12, 0x8d, 0x07, 0x48, 0x1f, 0x1d, 0x8c, 0xd2, 0xa5, 0xbe, 0xd5, 0x5c, 0x38, 0x0a, 0xe2, 0x36, 0x73, 0xe3, 0x4b, 0x64, 0x76, 0x02, 0xb8, 0xdb, 0x8f, 0x2e, 0xc8, 0x0b, 0x57, 0x83, 0x18, 0x9f, 0x30, 0xe9, 0xdb, 0xa2, 0xd1, 0x3a, 0xe1, 0xbe, 0xb2, 0x27, 0xac, 0x73, 0xd2, 0xe4, 0x97, 0x4d, 0x65, 0xb2, 0x46, 0xa0, 0xa8, 0xb7, 0x39, 0x89, 0xae, 0x4e, 0xae, 0xaf, 0x28, 0xce, 0x4b, 0x0c, 0xc0, 0x03, 0x49, 0x8d, 0x8b, 0x0d, 0x03, 0x12, 0x24, 0xec, 0xcc, 0xea, 0x21, 0x96, 0x41, 0x30, 0x7e, 0x99, 0x39, 0x6f, 0xfe, 0xa7, 0xbe, 0xc7, 0xd5, 0x2f, 0x89, 0xd6, 0x9a, 0xd8, 0x88, 0x4e, 0x1d, 0x59, 0x6d, 0x67, 0xc7, 0x66, 0x21, 0x71, 0x73, 0x63, 0x16, 0x73, 0x92, 0x49, 0xde, 0x97, 0xec, 0x16, 0x2d, 0xbe, 0xd0, 0x66, 0x76, 0xf8, 0x10, 0x67, 0x63, 0xe7, 0x45, 0x40, 0xe4, 0xca, 0xa7, 0x55, 0xfe, 0xf3, 0x14, 0x2c, 0x8a, 0x1a, 0x7f, 0x8d, 0x7f, 0xca, 0xdc, 0x53, 0x2a, 0x00, 0xa3, 0xbd, 0xad, 0xad, 0x00, 0xec, 0x70, 0x3c, 0x04, 0xa6, 0x2a, 0xda, 0x9c, 0x54, 0xf5, 0xd0, 0x5b, 0xec, 0x35, 0x25, 0xf5, 0xb2, 0x44, 0x53, 0xa3, 0x37, 0x41, 0x37, 0x26, 0xee, 0x98, 0x6f, 0x54, 0xec, 0x30, 0x8f, 0xf9, 0x9e, 0xaa, 0x8c, 0x74, 0xd3, 0x1a, 0xcc, 0x85, 0x4b, 0x90, 0xb4, 0x7b, 0x6e, 0xec, 0x80, 0x31, 0x8b, 0xff, 0xdb, 0x9b, 0x99, 0xc7, 0xbf, 0x77, 0xf6, 0x7d, 0x8a, 0x18, 0x5c, 0x5f, 0x5c, 0x09, 0x85, 0xf9, 0xa2, 0x99, 0x77, 0x84, 0x1e, 0xb1, 0x68, 0x2b, 0x5d, 0x1f, 0x72, 0x67, 0x6c, 0xf0, 0x01, 0x0c, 0x8a, 0xa9, 0xf3, 0x55, 0xe6, 0x00, 0xd4, 0x40, 0x4f, 0x96, 0xf6, 0x9d, 0x20, 0x02, 0x28, 0x5e, 0xaf, 0xde, 0x4b, 0xe7, 0x25, 0xbe, 0x66, 0x17, 0x7c, 0x7f, 0xb9, 0x7a, 0x1d, 0xe9, 0x48, 0xea, 0xd8, 0x11, 0xef, 0x57, 0xd2, 0x61, 0x4d, 0xa7, 0xcf, 0x26, 0x2d, 0xf2, 0x25, 0xba, 0xb0, 0x90, 0xcc, 0xcc, 0xe1, 0x65, 0x9d, 0xc6, 0x2a, 0xa6, 0x6e, 0xb3, 0xc8, 0x27, 0x18, 0xb2, 0x58, 0x12, 0x9b, 0x62, 0xf6, 0x85, 0x8d, 0x3c, 0x58, 0xf7, 0xbc, 0x18, 0x4b, 0xfa, 0x8a, 0x08, 0x4e, 0x35, 0x16, 0xac, 0x9e, 0x6d, 0xa5, 0xfe, 0xe5, 0xc5, 0xd5, 0xb5, 0x91, 0xf9, 0xf8, 0x59, 0xfa, 0x41, 0xe3, 0xf6, 0x60, 0xbf, 0x14, 0xc1, 0x9f, 0x10, 0xc9, 0x46, 0x3d, 0x7c, 0x3f, 0x0b, 0x42, 0x10, 0xc8, 0x91, 0xd0, 0x38, 0x3a, 0x50, 0x97, 0x3a, 0xed, 0x8d, 0x73, 0x86, 0xf3, 0x31, 0xfc, 0x86, 0x3d, 0xe8, 0x24, 0x68, 0x5a, 0x90, 0xc1, 0xac, 0x72, 0xbb, 0xbb, 0xed, 0x53, 0x06, 0xda, 0xd0, 0x57, 0x27, 0x83, 0x6b, 0x9e, 0x39, 0xfe, 0xcd, 0x9b, 0x39, 0xd7, 0x87, 0xca, 0x0f, 0x7d, 0x27, 0xaa, 0xa1, 0x0c, 0xcc, 0x40, 0x03, 0x6b, 0x83, 0xc6, 0x37, 0x05, 0xee, 0xce, 0x8e, 0xed, 0x3a, 0xd9, 0x86, 0xc4, 0x34, 0x85, 0x4e, 0xe8, 0x7e, 0xd3, 0x0f, 0x3a, 0xf2, 0x95, 0x0e, 0xa8, 0x65, 0x7c, 0x1d, 0x6a, 0xf0, 0xeb, 0xbb, 0x7b, 0x76, 0x84, 0x05, 0x4a, 0x2a, 0x19, 0xe0, 0x54, 0xdb, 0xe4, 0xe2, 0x0f, 0x7b, 0x4a, 0x2a, 0x24, 0x2c, 0x98, 0x28, 0xf8, 0x39, 0x3b, 0xce, 0xbe, 0x94, 0xa8, 0x9f, 0x19, 0x55, 0xc1, 0x99, 0x0a, 0xfe, 0x58, 0x53, 0x7e, 0x48, 0xdb, 0x68, 0x90, 0xdc, 0x2e, 0x53, 0xfa, 0xd7, 0x98, 0x2d, 0x68, 0xd2, 0x16, 0x79, 0xed, 0xae, 0x5c, 0x00, 0x65, 0x2b, 0xcd, 0x96, 0x09, 0xe9, 0x68, 0x71, 0x31, 0xc3, 0x5e, 0x0f, 0xc0, 0x44, 0x0a, 0xae, 0x1f, 0xbb, 0xcf, 0x42, 0xb0, 0xd4, 0xce, 0x37, 0x44, 0xfe, 0x9c, 0x9e, 0x9d, 0xd8, 0xa3, 0xe2, 0x3e, 0x11, 0x74, 0x89, 0xad, 0xae, 0x8f, 0xad, 0xed, 0x8d, 0x98, 0xe8, 0x47, 0x97, 0xd8, 0xb3, 0x9c, 0x74, 0xa6, 0xf2, 0xdf, 0xed, 0x68, 0x7c, 0x49, 0xc8, 0x03, 0x0f, 0x62, 0x93, 0xca, 0x9d, 0xd3, 0x0c, 0x4e, 0x96, 0x7e, 0x82, 0x7f, 0x75, 0x30, 0xcd, 0xbd, 0xe5, 0xbe, 0xb2, 0x2f, 0x97, 0xb0, 0x12, 0xb0, 0xd0, 0x9b, 0x8f, 0xec, 0x09, 0x5d, 0x81, 0xf9, 0x4e, 0x43, 0x18, 0xd6, 0x8c, 0x77, 0x59, 0x9a, 0xc5, 0x8c, 0x79, 0x84, 0x89, 0x3e, 0x53, 0x63, 0xe1, 0xce, 0x50, 0x2c, 0x0c, 0x8e, 0x86, 0xa6, 0x81, 0x10, 0x26, 0x09, 0xa3, 0x22, 0x07, 0x63, 0x65, 0xc8, 0x69, 0x67, 0x26, 0xd7, 0xde, 0x8d, 0x01, 0xd3, 0xd6, 0x1a, 0xbc, 0xa8, 0xe6, 0xe6, 0x36, 0x1a, 0xb0, 0xef, 0x31, 0x25, 0x1a, 0xb2, 0x31, 0xf2, 0xab, 0x36, 0x3b, 0xc9, 0x4e, 0x16, 0xdc, 0x3b, 0x74, 0x1a, 0x60, 0x3c, 0x00, 0xe4, 0xbb, 0xab, 0xfc, 0xef, 0xed, 0xdb, 0xa1, 0x26, 0x04, 0xde, 0xa3, 0x7c, 0xfd, 0xa8, 0xe6, 0x94, 0x33, 0x9d, 0x24, 0x52, 0xf3, 0x24, 0x9b, 0x8d, 0x5c, 0x7b, 0x1e, 0xb8, 0x52, 0xce, 0x37, 0x5e, 0x8a, 0xe9, 0x8b, 0xb6, 0x6f, 0xf6, 0x68, 0x93, 0xef, 0xfb, 0x1c, 0x55, 0x66, 0xbf, 0x19, 0x37, 0xaa, 0x91, 0xdf, 0x08, 0x08, 0xe3, 0x8d, 0xf8, 0x65, 0xb0, 0x15, 0x95, 0x87, 0xb8, 0xb8, 0x9c, 0x4b, 0x0e, 0xaf, 0xf3, 0xa5, 0xcf, 0xc5, 0x93, 0x81, 0xc5, 0xe7, 0x99, 0x05, 0x29, 0x72, 0x16, 0x82, 0x8a, 0xae, 0x58, 0xcd, 0x1a, 0xca, 0x07, 0xe6, 0x38, 0x8a, 0x4d, 0x0a, 0xb0, 0x8f, 0xb1, 0x87, 0xc8, 0x65, 0xc8, 0x66, 0x45, 0xd9, 0x55, 0x8f, 0x42, 0xae, 0x45, 0xc0, 0xe2, 0x59, 0x90, 0xc7, 0xf8, 0x57, 0xa6, 0x69, 0x90, 0xef, 0x12, 0x2f, 0x92, 0xbf, 0x92, 0x22, 0xd9, 0x37, 0xdd, 0x5a, 0x35, 0xa0, 0x1c, 0x67, 0xcb, 0xd8, 0xb1, 0xe5, 0xf7, 0x5e, 0x89, 0x87, 0x4a, 0xdc, 0x20, 0x18, 0x59, 0xcf, 0x10, 0xfc, 0xba, 0x11, 0x5e, 0xdc, 0xdf, 0x36, 0xbe, 0x4a, 0x4c, 0x99, 0x95, 0x3a, 0x10, 0x37, 0x71, 0x16, 0xe1, 0x8f, 0x07, 0xef, 0xa2, 0xf7, 0x6f, 0xf6, 0x31, 0xa1, 0x67, 0x9a, 0x14, 0x8b, 0x02, 0x93, 0x38, 0x95, 0x86, 0x2f, 0xbe, 0x75, 0x06, 0xdb, 0xb1, 0xd9, 0x17, 0x0a, 0x8e, 0x28, 0xcc, 0x4c, 0xec, 0x05, 0x38, 0x42, 0x2c, 0x7c, 0x9e, 0x6a, 0x0b, 0x4c, 0xc5, 0xf1, 0x53, 0xb4, 0x2a, 0xd2, 0x5a, 0x3e, 0x6b, 0x26, 0x85, 0xd7, 0x18, 0xd8, 0xfe, 0xae, 0x65, 0x60, 0xc5, 0xe3, 0x02, 0x9b, 0xab, 0x64, 0x53, 0x34, 0x0b, 0x02, 0x37, 0x6a, 0x9f, 0x99, 0xe6, 0x31, 0xdf, 0x7b, 0xd4, 0x61, 0xfd, 0xd7, 0x48, 0x3d, 0x27, 0x77, 0xa9, 0xf3, 0xde, 0xbe, 0xeb, 0x55, 0x28, 0xa5, 0x33, 0x9a, 0xb4, 0xc4, 0x20, 0x0d, 0xc5, 0x79, 0xf6, 0x85, 0x79, 0x16, 0xfd, 0x46, 0x69, 0xe6, 0xb4, 0x30, 0x6a, 0x79, 0x43, 0x94, 0x5f, 0x35, 0x10, 0x54, 0x31, 0x63, 0x7d, 0xc7, 0xd9, 0x7b, 0xe7, 0x95, 0x57, 0x75, 0xa7, 0x09, 0xf5, 0x36, 0x30, 0x84, 0x49, 0x8b, 0xa2, 0xce, 0xb2, 0x8e, 0x9b, 0x85, 0x65, 0xf4, 0x65, 0x33, 0x0f, 0x5a, 0x79, 0x60, 0xe2, 0x22, 0x88, 0xe8, 0x55, 0x67, 0xd2, 0x3f, 0x3e, 0x8a, 0xda, 0x8a, 0x80, 0x88, 0xd6, 0x9d, 0x8f, 0x6c, 0xcb, 0x9d, 0xc1, 0xbe, 0xd4, 0xd3, 0x2c, 0xfd, 0x7b, 0xe2, 0xe4, 0x82, 0x69, 0xfb, 0x29, 0xe7, 0xf1, 0x1d, 0x61, 0x18, 0xdc, 0x7b, 0x98, 0x98, 0x22, 0x06, 0x4f, 0xed, 0x03, 0xbb, 0x42, 0xb5, 0xdc, 0x3d, 0x8e, 0x73, 0x1f, 0x60, 0x54, 0x0a, 0xdd, 0x27, 0xb5, 0xb4, 0xfa, 0x17, 0x7b, 0xa2, 0x73, 0xa9, 0x6e, 0x8c, 0x92, 0x17, 0x37, 0x62, 0x46, 0x80, 0x8c, 0x4d, 0x36, 0xfd, 0x42, 0xc4, 0x9e, 0x1c, 0xa5, 0x69, 0x41, 0x65, 0xda, 0x79, 0xe1, 0x5f, 0xef, 0xd3, 0x4c, 0x12, 0xdd, 0xbd, 0xd7, 0x5f, 0xb4, 0xb8, 0x1f, 0x4b, 0x96, 0x99, 0x27, 0x44, 0x4b, 0xce, 0xf3, 0x2f, 0xed, 0x4d, 0xb0, 0x08, 0xb4, 0x5d, 0x8b, 0x7b, 0xdb, 0x75, 0x31, 0x4b, 0xf5, 0x2e, 0xb1, 0x0b, 0x25, 0xe1, 0x5e, 0x07, 0x01, 0x64, 0xf9, 0x89, 0xf9, 0xfc, 0x2c, 0x47, 0x6e, 0xea, 0x7c, 0x8f, 0x49, 0xea, 0x2d, 0xf5, 0xaa, 0xb0, 0xc6, 0x41, 0x16, 0x5d, 0x3b, 0x65, 0xb2, 0xf6, 0xe9, 0x57, 0x42, 0x1b, 0x2a, 0x2f, 0x8d, 0xb1, 0xda, 0xf6, 0xc6, 0xcb, 0x2d, 0x57, 0x59, 0x1d, 0x63, 0x54, 0x96, 0xcb, 0xf8, 0x5b, 0x5f, 0x60, 0xca, 0x38, 0x05, 0x31, 0x32, 0x05, 0xa2, 0xa6, 0x67, 0x2c, 0x9a, 0xa1, 0x7d, 0x6c, 0xa7, 0xc6, 0x74, 0xaf, 0x5d, 0xf5, 0x29, 0x3a, 0x7d, 0xe3, 0x3c, 0xb8, 0x6b, 0x17, 0x18, 0xcf, 0x50, 0x1b, 0x78, 0x64, 0x3f, 0x55, 0x19, 0xad, 0xe3, 0x5b, 0x0e, 0x66, 0xc9, 0x4b, 0xa6, 0x8c, 0xf3, 0x9c, 0x51, 0xb7, 0x68, 0xfb, 0xbd, 0x67, 0x98, 0x1c, 0x8e, 0x6f, 0x40, 0xaa, 0x8d, 0x2a, 0xca, 0x09, 0xcd, 0x34, 0xc6, 0xd5, 0x3c, 0xfb, 0x97, 0x2f, 0x56, 0x3c, 0x2b, 0x42, 0xb3, 0x34, 0xa2, 0xde, 0x79, 0xef, 0xa5, 0x7f, 0xcd, 0xd5, 0x1c, 0xd0, 0x32, 0x05, 0xb8, 0x6a, 0x78, 0xd3, 0xa2, 0x75, 0x2c, 0x8f, 0xfe, 0x77, 0x75, 0x0c, 0x16, 0x88, 0x27, 0x58, 0xfe, 0xbb, 0x3b, 0xdf, 0xcf, 0xdd, 0x5a, 0x07, 0xf6, 0x0a, 0x16, 0x09, 0xc5, 0x09, 0x46, 0xb5, 0x76, 0x11, 0x36, 0x47, 0x88, 0x76, 0xc7, 0x19, 0x81, 0xcf, 0x1c, 0xf4, 0x88, 0x65, 0x66, 0x39, 0x07, 0x1b, 0x81, 0x82, 0x46, 0x30, 0x76, 0xa1, 0x27, 0x91, 0xe7, 0x8b, 0x07, 0xca, 0xf1, 0xa1, 0x6e, 0x35, 0xae, 0x41, 0x79, 0xb3, 0x64, 0x93, 0xdb, 0xac, 0xc8, 0x3a, 0xd8, 0x9c, 0xd7, 0x76, 0x2c, 0xf7, 0xa2, 0xb9, 0x91, 0xda, 0x78, 0x0c, 0xb3, 0x65, 0x9b, 0xdc, 0xf4, 0x0f, 0xa0, 0x7a, 0xe9, 0xfb, 0x22, 0xc7, 0xbf, 0x2a, 0x44, 0xc8, 0x7a, 0xdc, 0x92, 0x9a, 0x29, 0x49, 0xe4, 0xce, 0x67, 0x44, 0xb5, 0xc1, 0x14, 0x27, 0x38, 0xa5, 0x9b, 0x64, 0x74, 0xab, 0x57, 0x46, 0x06, 0xb1, 0xa9, 0xe7, 0xce, 0x5b, 0x7b, 0x66, 0x6b, 0xc9, 0xa0, 0xb9, 0x3a, 0x69, 0x5a, 0x01, 0xf6, 0x51, 0xa6, 0x9a, 0xab, 0xeb, 0xc1, 0xe5, 0x01, 0xce, 0x99, 0xe3, 0x86, 0x70, 0x21, 0x8e, 0x07, 0xc9, 0xdf, 0xa4, 0xce, 0xac, 0xb4, 0x4f, 0xbf, 0x68, 0x79, 0x7a, 0x20, 0x8e, 0xbd, 0x53, 0x42, 0x6a, 0x86, 0x73, 0x70, 0x5f, 0x62, 0xa2, 0x59, 0x66, 0xea, 0xdf, 0x67, 0xff, 0x17, 0xce, 0x8c, 0xb8, 0x21, 0xc6, 0x96, 0xed, 0xc3, 0x9f, 0x5b, 0x9b, 0xe6, 0x66, 0x99, 0xdd, 0x1a, 0x7d, 0x51, 0x70, 0xf4, 0xf4, 0x80, 0xed, 0x0b, 0xaf, 0xf4, 0x6a, 0x38, 0x7e, 0x50, 0x93, 0xf7, 0xd4, 0x15, 0x0f, 0x85, 0xb8, 0x1d, 0x25, 0xe6, 0x09, 0xfc, 0x75, 0xe9, 0xec, 0xc1, 0xab, 0x2d, 0x23, 0x7e, 0x05, 0x92, 0xe7, 0x36, 0x79, 0xb4, 0x54, 0xa7, 0x39, 0x16, 0x8b, 0x34, 0x43, 0x17, 0x84, 0x7d, 0xc4, 0x0e, 0xb0, 0x5d, 0x13, 0x02, 0x4d, 0x75, 0xa3, 0xac, 0xe2, 0x6a, 0xe9, 0x88, 0x98, 0x57, 0x4c, 0x3b, 0x03, 0x8c, 0x3a, 0xce, 0x85, 0x5e, 0xd3, 0x4c, 0xbd, 0x6d, 0x0d, 0x17, 0x9a, 0xbe, 0xf4, 0xc3, 0x0f, 0x2c, 0x47, 0x72, 0x05, 0x46, 0x92, 0xd0, 0x95, 0x69, 0xfe, 0x04, 0x4c, 0x97, 0x55, 0x0f, 0xbc, 0xc2, 0x14, 0xef, 0x29, 0x12, 0xec, 0x4f, 0xa9, 0xd8, 0x37, 0x74, 0x79, 0x42, 0xd1, 0xf3, 0x3c, 0x93, 0x98, 0x2d, 0x26, 0x6f, 0x92, 0xeb, 0x93, 0xc1, 0xa6, 0xd9, 0x15, 0x06, 0x33, 0x38, 0xfa, 0x70, 0xfd, 0xee, 0xe2, 0x6a, 0x10, 0x6d, 0x62, 0x6d, 0xfb, 0xf5, 0xd5, 0xe9, 0xd7, 0x1f, 0xae, 0xe1, 0x9f, 0x3a, 0xd2, 0x9b, 0x38, 0x4b, 0x41, 0x3a, 0x0d, 0xaa, 0x24, 0x03, 0x5a, 0x99, 0x6a, 0x8f, 0x26, 0xca, 0x41, 0x41, 0x79, 0x9c, 0x17, 0x0a, 0x69, 0x82, 0xe9, 0x28, 0xf9, 0xcc, 0x26, 0x13, 0xb0, 0x07, 0x1b, 0x73, 0xfc, 0x72, 0x6b, 0x39, 0xa7, 0x8d, 0xa2, 0x7c, 0x4d, 0xdb, 0x89, 0xae, 0xdf, 0x1d, 0x9d, 0x7f, 0x3b, 0xd0, 0x0e, 0x1e, 0xdf, 0x7f, 0xff, 0x7d, 0x33, 0xb8, 0x4b, 0x3a, 0xec, 0x4d, 0xfc, 0xf0, 0xd0, 0x2f, 0x93, 0xcf, 0x3e, 0x1b, 0x9c, 0x9c, 0x44, 0x47, 0x67, 0x83, 0x8b, 0xcf, 0x2c, 0x8e, 0xc3, 0xfa, 0xf6, 0x06, 0x28, 0x69, 0xd3, 0xa4, 0x82, 0xbf, 0x7c, 0xf6, 0xd9, 0xff, 0x07, 0x20, 0xad, 0x4e, 0xbd, 0x33, 0x97, 0x02, 0x00, }; #define BUF_SIZE 0x10000 static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size) { (void) opaque; /* not a typo, keep it calloc() */ return (voidpf) calloc(items, size); |
︙ | ︙ |
Changes to jni/curl/src/tool_main.c.
︙ | ︙ | |||
109 110 111 112 113 114 115 | /* use the value as file name */ char fname[CURL_MT_LOGFNAME_BUFSIZE]; if(strlen(env) >= CURL_MT_LOGFNAME_BUFSIZE) env[CURL_MT_LOGFNAME_BUFSIZE-1] = '\0'; strcpy(fname, env); curl_free(env); curl_dbg_memdebug(fname); | | | | | 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | /* use the value as file name */ char fname[CURL_MT_LOGFNAME_BUFSIZE]; if(strlen(env) >= CURL_MT_LOGFNAME_BUFSIZE) env[CURL_MT_LOGFNAME_BUFSIZE-1] = '\0'; strcpy(fname, env); curl_free(env); curl_dbg_memdebug(fname); /* this weird stuff here is to make curl_free() get called before curl_gdb_memdebug() as otherwise memory tracking will log a free() without an alloc! */ } /* if CURL_MEMLIMIT is set, this enables fail-on-alloc-number-N feature */ env = curlx_getenv("CURL_MEMLIMIT"); if(env) { char *endptr; long num = strtol(env, &endptr, 10); if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) |
︙ | ︙ | |||
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; #endif /* Initialise the global config */ config->showerror = -1; /* Will show errors */ config->errors = stderr; /* Default errors to stderr */ config->styled_output = TRUE; /* enable detection */ /* Allocate the initial operate config */ config->first = config->last = malloc(sizeof(struct OperationConfig)); if(config->first) { /* Perform the libcurl initialization */ result = curl_global_init(CURL_GLOBAL_DEFAULT); if(!result) { /* Get information about libcurl */ result = get_libcurl_info(); if(!result) { | > < < < | | < | < < < < < < | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; #endif /* Initialise the global config */ config->showerror = -1; /* Will show errors */ config->errors = stderr; /* Default errors to stderr */ config->styled_output = TRUE; /* enable detection */ config->parallel_max = PARALLEL_DEFAULT; /* Allocate the initial operate config */ config->first = config->last = malloc(sizeof(struct OperationConfig)); if(config->first) { /* Perform the libcurl initialization */ result = curl_global_init(CURL_GLOBAL_DEFAULT); if(!result) { /* Get information about libcurl */ result = get_libcurl_info(); if(!result) { /* Initialise the config */ config_init(config->first); config->first->global = config; } else { helpf(stderr, "error retrieving curl library information\n"); free(config->first); } } else { |
︙ | ︙ | |||
210 211 212 213 214 215 216 | /* * This is the main global destructor for the app. Call this after * _all_ libcurl usage is done. */ static void main_free(struct GlobalConfig *config) { /* Cleanup the easy handle */ | < < < | 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | /* * This is the main global destructor for the app. Call this after * _all_ libcurl usage is done. */ static void main_free(struct GlobalConfig *config) { /* Cleanup the easy handle */ /* Main cleanup */ curl_global_cleanup(); convert_cleanup(); metalink_cleanup(); #ifdef USE_NSS if(PR_Initialized()) { /* prevent valgrind from reporting still reachable mem from NSRP arenas */ |
︙ | ︙ |
Changes to jni/curl/src/tool_main.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_TOOL_MAIN_H #define HEADER_CURL_TOOL_MAIN_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #ifndef HEADER_CURL_TOOL_MAIN_H #define HEADER_CURL_TOOL_MAIN_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" #define DEFAULT_MAXREDIRS 50L #define RETRY_SLEEP_DEFAULT 1000L /* ms */ #define RETRY_SLEEP_MAX 600000L /* ms == 10 minutes */ #define MAX_PARALLEL 300 /* conservative */ #define PARALLEL_DEFAULT 50 #ifndef STDIN_FILENO # define STDIN_FILENO fileno(stdin) #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO fileno(stdout) |
︙ | ︙ |
Changes to jni/curl/src/tool_metalink.c.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
100 101 102 103 104 105 106 107 108 109 110 111 112 113 | /* use our own printf() functions */ #include "curlx.h" #include "tool_getparam.h" #include "tool_paramhlp.h" #include "tool_cfgable.h" #include "tool_metalink.h" #include "tool_msgs.h" #include "memdebug.h" /* keep this as LAST include */ /* Copied from tool_getparam.c */ #define GetStr(str,val) do { \ if(*(str)) { \ | > | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | /* use our own printf() functions */ #include "curlx.h" #include "tool_getparam.h" #include "tool_paramhlp.h" #include "tool_cfgable.h" #include "tool_metalink.h" #include "tool_operate.h" #include "tool_msgs.h" #include "memdebug.h" /* keep this as LAST include */ /* Copied from tool_getparam.c */ #define GetStr(str,val) do { \ if(*(str)) { \ |
︙ | ︙ | |||
670 671 672 673 674 675 676 | return -2; } rv = check_hash(filename, mlfile->checksum->digest_def, mlfile->checksum->digest, config->errors); return rv; } | | | > | 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 | return -2; } rv = check_hash(filename, mlfile->checksum->digest_def, mlfile->checksum->digest, config->errors); return rv; } static metalink_checksum * checksum_from_hex_digest(const metalink_digest_def *digest_def, const char *hex_digest) { metalink_checksum *chksum; unsigned char *digest; size_t i; size_t len = strlen(hex_digest); digest = malloc(len/2); if(!digest) |
︙ | ︙ | |||
750 751 752 753 754 755 756 | for(digest_alias = digest_aliases; digest_alias->alias_name; ++digest_alias) { metalink_checksum_t **p; for(p = fileinfo->checksums; *p; ++p) { if(curl_strequal(digest_alias->alias_name, (*p)->type) && check_hex_digest((*p)->hash, digest_alias->digest_def)) { f->checksum = | | | | 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 | for(digest_alias = digest_aliases; digest_alias->alias_name; ++digest_alias) { metalink_checksum_t **p; for(p = fileinfo->checksums; *p; ++p) { if(curl_strequal(digest_alias->alias_name, (*p)->type) && check_hex_digest((*p)->hash, digest_alias->digest_def)) { f->checksum = checksum_from_hex_digest(digest_alias->digest_def, (*p)->hash); break; } } if(f->checksum) { break; } } |
︙ | ︙ | |||
887 888 889 890 891 892 893 | metalink_delete(metalink); return (warnings) ? -2 : 0; } size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata) { | > | | 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 | metalink_delete(metalink); return (warnings) ? -2 : 0; } size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata) { struct per_transfer *per = userdata; struct OutStruct *outs = &per->outs; struct OperationConfig *config = outs->config; int rv; /* * Once that libcurl has called back tool_write_cb() the returned value * is checked against the amount that was intended to be written, if * it does not match then it fails with CURLE_WRITE_ERROR. So at this |
︙ | ︙ |
Changes to jni/curl/src/tool_metalink.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_TOOL_METALINK_H #define HEADER_CURL_TOOL_METALINK_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #ifndef HEADER_CURL_TOOL_METALINK_H #define HEADER_CURL_TOOL_METALINK_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2014, 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" #include "tool_sdecls.h" struct GlobalConfig; struct OperationConfig; /* returns 1 for success, 0 otherwise (we use OpenSSL *_Init fncs directly) */ typedef int (* Curl_digest_init_func)(void *context); |
︙ | ︙ |
Changes to jni/curl/src/tool_operate.c.
︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #ifdef HAVE_FCNTL_H # include <fcntl.h> #endif #ifdef HAVE_LOCALE_H # include <locale.h> #endif #ifdef __VMS # include <fabdef.h> #endif #ifdef __AMIGA__ # include <proto/dos.h> | > > > > | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #ifdef HAVE_FCNTL_H # include <fcntl.h> #endif #ifdef HAVE_LOCALE_H # include <locale.h> #endif #ifdef HAVE_SYS_SELECT_H # include <sys/select.h> #endif #ifdef __VMS # include <fabdef.h> #endif #ifdef __AMIGA__ # include <proto/dos.h> |
︙ | ︙ | |||
71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include "tool_urlglob.h" #include "tool_util.h" #include "tool_writeout.h" #include "tool_xattr.h" #include "tool_vms.h" #include "tool_help.h" #include "tool_hugehelp.h" #include "memdebug.h" /* keep this as LAST include */ #ifdef CURLDEBUG /* libcurl's debug builds provide an extra function */ CURLcode curl_easy_perform_ev(CURL *easy); #endif | > | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include "tool_urlglob.h" #include "tool_util.h" #include "tool_writeout.h" #include "tool_xattr.h" #include "tool_vms.h" #include "tool_help.h" #include "tool_hugehelp.h" #include "tool_progress.h" #include "memdebug.h" /* keep this as LAST include */ #ifdef CURLDEBUG /* libcurl's debug builds provide an extra function */ CURLcode curl_easy_perform_ev(CURL *easy); #endif |
︙ | ︙ | |||
93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #define CURL_CA_CERT_ERRORMSG \ "More details here: https://curl.haxx.se/docs/sslcerts.html\n\n" \ "curl failed to verify the legitimacy of the server and therefore " \ "could not\nestablish a secure connection to it. To learn more about " \ "this situation and\nhow to fix it, please visit the web page mentioned " \ "above.\n" static bool is_fatal_error(CURLcode code) { switch(code) { case CURLE_FAILED_INIT: case CURLE_OUT_OF_MEMORY: case CURLE_UNKNOWN_OPTION: | > > > > > | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #define CURL_CA_CERT_ERRORMSG \ "More details here: https://curl.haxx.se/docs/sslcerts.html\n\n" \ "curl failed to verify the legitimacy of the server and therefore " \ "could not\nestablish a secure connection to it. To learn more about " \ "this situation and\nhow to fix it, please visit the web page mentioned " \ "above.\n" static CURLcode create_transfers(struct GlobalConfig *global, struct OperationConfig *config, CURLSH *share, bool capath_from_env); static bool is_fatal_error(CURLcode code) { switch(code) { case CURLE_FAILED_INIT: case CURLE_OUT_OF_MEMORY: case CURLE_UNKNOWN_OPTION: |
︙ | ︙ | |||
183 184 185 186 187 188 189 | return stat_buf->st_size; } } #endif /* __VMS */ #define BUFFER_SIZE (100*1024) | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > | > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > | > | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 | return stat_buf->st_size; } } #endif /* __VMS */ #define BUFFER_SIZE (100*1024) struct per_transfer *transfers; /* first node */ static struct per_transfer *transfersl; /* last node */ static CURLcode add_transfer(struct per_transfer **per) { struct per_transfer *p; p = calloc(sizeof(struct per_transfer), 1); if(!p) return CURLE_OUT_OF_MEMORY; if(!transfers) /* first entry */ transfersl = transfers = p; else { /* make the last node point to the new node */ transfersl->next = p; /* make the new node point back to the formerly last node */ p->prev = transfersl; /* move the last node pointer to the new entry */ transfersl = p; } *per = p; all_xfers++; /* count total number of transfers added */ return CURLE_OK; } /* Remove the specified transfer from the list (and free it), return the next in line */ static struct per_transfer *del_transfer(struct per_transfer *per) { struct per_transfer *n; struct per_transfer *p; DEBUGASSERT(transfers); DEBUGASSERT(transfersl); DEBUGASSERT(per); n = per->next; p = per->prev; if(p) p->next = n; else transfers = n; if(n) n->prev = p; else transfersl = p; free(per); return n; } static CURLcode pre_transfer(struct GlobalConfig *global, struct per_transfer *per) { curl_off_t uploadfilesize = -1; struct_stat fileinfo; CURLcode result = CURLE_OK; if(per->separator_err) fprintf(global->errors, "%s\n", per->separator_err); if(per->separator) printf("%s\n", per->separator); if(per->uploadfile && !stdin_upload(per->uploadfile)) { /* VMS Note: * * Reading binary from files can be a problem... Only FIXED, VAR * etc WITHOUT implied CC will work Others need a \n appended to a * line * * - Stat gives a size but this is UNRELIABLE in VMS As a f.e. a * fixed file with implied CC needs to have a byte added for every * record processed, this can by derived from Filesize & recordsize * for VARiable record files the records need to be counted! for * every record add 1 for linefeed and subtract 2 for the record * header for VARIABLE header files only the bare record data needs * to be considered with one appended if implied CC */ #ifdef __VMS /* Calculate the real upload size for VMS */ per->infd = -1; if(stat(per->uploadfile, &fileinfo) == 0) { fileinfo.st_size = VmsSpecialSize(uploadfile, &fileinfo); switch(fileinfo.st_fab_rfm) { case FAB$C_VAR: case FAB$C_VFC: case FAB$C_STMCR: per->infd = open(per->uploadfile, O_RDONLY | O_BINARY); break; default: per->infd = open(per->uploadfile, O_RDONLY | O_BINARY, "rfm=stmlf", "ctx=stm"); } } if(per->infd == -1) #else per->infd = open(per->uploadfile, O_RDONLY | O_BINARY); if((per->infd == -1) || fstat(per->infd, &fileinfo)) #endif { helpf(global->errors, "Can't open '%s'!\n", per->uploadfile); if(per->infd != -1) { close(per->infd); per->infd = STDIN_FILENO; } return CURLE_READ_ERROR; } per->infdopen = TRUE; /* we ignore file size for char/block devices, sockets, etc. */ if(S_ISREG(fileinfo.st_mode)) uploadfilesize = fileinfo.st_size; if(uploadfilesize != -1) my_setopt(per->curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize); per->input.fd = per->infd; } show_error: return result; } /* * Call this after a transfer has completed. */ static CURLcode post_transfer(struct GlobalConfig *global, CURLSH *share, struct per_transfer *per, CURLcode result, bool *retryp) { struct OutStruct *outs = &per->outs; CURL *curl = per->curl; struct OperationConfig *config = per->config; *retryp = FALSE; if(per->infdopen) close(per->infd); #ifdef __VMS if(is_vms_shell()) { /* VMS DCL shell behavior */ if(!global->showerror) vms_show = VMSSTS_HIDE; } else #endif if(config->synthetic_error) { ; } else if(result && global->showerror) { fprintf(global->errors, "curl: (%d) %s\n", result, (per->errorbuffer[0]) ? per->errorbuffer : curl_easy_strerror(result)); if(result == CURLE_PEER_FAILED_VERIFICATION) fputs(CURL_CA_CERT_ERRORMSG, global->errors); } /* Set file extended attributes */ if(!result && config->xattr && outs->fopened && outs->stream) { int rc = fwrite_xattr(curl, fileno(outs->stream)); if(rc) warnf(config->global, "Error setting extended attributes: %s\n", strerror(errno)); } if(!result && !outs->stream && !outs->bytes) { /* we have received no data despite the transfer was successful ==> force cration of an empty output file (if an output file was specified) */ long cond_unmet = 0L; /* do not create (or even overwrite) the file in case we get no data because of unmet condition */ curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &cond_unmet); if(!cond_unmet && !tool_create_output_file(outs)) result = CURLE_WRITE_ERROR; } if(!outs->s_isreg && outs->stream) { /* Dump standard stream buffered data */ int rc = fflush(outs->stream); if(!result && rc) { /* something went wrong in the writing process */ result = CURLE_WRITE_ERROR; fprintf(global->errors, "(%d) Failed writing body\n", result); } } #ifdef USE_METALINK if(per->metalink && !per->metalink_next_res) fprintf(global->errors, "Metalink: fetching (%s) from (%s) OK\n", per->mlfile->filename, per->this_url); if(!per->metalink && config->use_metalink && result == CURLE_OK) { int rv = parse_metalink(config, outs, per->this_url); if(!rv) { fprintf(config->global->errors, "Metalink: parsing (%s) OK\n", per->this_url); } else if(rv == -1) fprintf(config->global->errors, "Metalink: parsing (%s) FAILED\n", per->this_url); result = create_transfers(global, config, share, FALSE); } else if(per->metalink && result == CURLE_OK && !per->metalink_next_res) { int rv; (void)fflush(outs->stream); rv = metalink_check_hash(global, per->mlfile, outs->filename); if(!rv) per->metalink_next_res = 1; } #else (void)share; #endif /* USE_METALINK */ #ifdef USE_METALINK if(outs->metalink_parser) metalink_parser_context_delete(outs->metalink_parser); #endif /* USE_METALINK */ if(outs->is_cd_filename && outs->stream && !global->mute && outs->filename) printf("curl: Saved to filename '%s'\n", outs->filename); /* if retry-max-time is non-zero, make sure we haven't exceeded the time */ if(per->retry_numretries && (!config->retry_maxtime || (tvdiff(tvnow(), per->retrystart) < config->retry_maxtime*1000L)) ) { enum { RETRY_NO, RETRY_TIMEOUT, RETRY_CONNREFUSED, RETRY_HTTP, RETRY_FTP, RETRY_LAST /* not used */ } retry = RETRY_NO; long response; if((CURLE_OPERATION_TIMEDOUT == result) || (CURLE_COULDNT_RESOLVE_HOST == result) || (CURLE_COULDNT_RESOLVE_PROXY == result) || (CURLE_FTP_ACCEPT_TIMEOUT == result)) /* retry timeout always */ retry = RETRY_TIMEOUT; else if(config->retry_connrefused && (CURLE_COULDNT_CONNECT == result)) { long oserrno; curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &oserrno); if(ECONNREFUSED == oserrno) retry = RETRY_CONNREFUSED; } else if((CURLE_OK == result) || (config->failonerror && (CURLE_HTTP_RETURNED_ERROR == result))) { /* If it returned OK. _or_ failonerror was enabled and it returned due to such an error, check for HTTP transient errors to retry on. */ long protocol; curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol); if((protocol == CURLPROTO_HTTP) || (protocol == CURLPROTO_HTTPS)) { /* This was HTTP(S) */ curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); switch(response) { case 500: /* Internal Server Error */ case 502: /* Bad Gateway */ case 503: /* Service Unavailable */ case 504: /* Gateway Timeout */ retry = RETRY_HTTP; /* * At this point, we have already written data to the output * file (or terminal). If we write to a file, we must rewind * or close/re-open the file so that the next attempt starts * over from the beginning. * * TODO: similar action for the upload case. We might need * to start over reading from a previous point if we have * uploaded something when this was returned. */ break; } } } /* if CURLE_OK */ else if(result) { long protocol; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol); if((protocol == CURLPROTO_FTP || protocol == CURLPROTO_FTPS) && response / 100 == 4) /* * This is typically when the FTP server only allows a certain * amount of users and we are not one of them. All 4xx codes * are transient. */ retry = RETRY_FTP; } if(retry) { long sleeptime = 0; curl_off_t retry_after = 0; static const char * const m[]={ NULL, "timeout", "connection refused", "HTTP error", "FTP error" }; sleeptime = per->retry_sleep; if(RETRY_HTTP == retry) { curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &retry_after); if(retry_after) { /* store in a 'long', make sure it doesn't overflow */ if(retry_after > LONG_MAX/1000) sleeptime = LONG_MAX; else sleeptime = (long)retry_after * 1000; /* milliseconds */ } } warnf(config->global, "Transient problem: %s " "Will retry in %ld seconds. " "%ld retries left.\n", m[retry], per->retry_sleep/1000L, per->retry_numretries); per->retry_numretries--; tool_go_sleep(sleeptime); if(!config->retry_delay) { per->retry_sleep *= 2; if(per->retry_sleep > RETRY_SLEEP_MAX) per->retry_sleep = RETRY_SLEEP_MAX; } if(outs->bytes && outs->filename && outs->stream) { int rc; /* We have written data to a output file, we truncate file */ if(!global->mute) fprintf(global->errors, "Throwing away %" CURL_FORMAT_CURL_OFF_T " bytes\n", outs->bytes); fflush(outs->stream); /* truncate file at the position where we started appending */ #ifdef HAVE_FTRUNCATE if(ftruncate(fileno(outs->stream), outs->init)) { /* when truncate fails, we can't just append as then we'll create something strange, bail out */ if(!global->mute) fprintf(global->errors, "failed to truncate, exiting\n"); return CURLE_WRITE_ERROR; } /* now seek to the end of the file, the position where we just truncated the file in a large file-safe way */ rc = fseek(outs->stream, 0, SEEK_END); #else /* ftruncate is not available, so just reposition the file to the location we would have truncated it. This won't work properly with large files on 32-bit systems, but most of those will have ftruncate. */ rc = fseek(outs->stream, (long)outs->init, SEEK_SET); #endif if(rc) { if(!global->mute) fprintf(global->errors, "failed seeking to end of file, exiting\n"); return CURLE_WRITE_ERROR; } outs->bytes = 0; /* clear for next round */ } *retryp = TRUE; /* curl_easy_perform loop */ return CURLE_OK; } } /* if retry_numretries */ else if(per->metalink) { /* Metalink: Decide to try the next resource or not. Try the next resource if download was not successful. */ long response; if(CURLE_OK == result) { /* TODO We want to try next resource when download was not successful. How to know that? */ char *effective_url = NULL; curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url); if(effective_url && curl_strnequal(effective_url, "http", 4)) { /* This was HTTP(S) */ curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); if(response != 200 && response != 206) { per->metalink_next_res = 1; fprintf(global->errors, "Metalink: fetching (%s) from (%s) FAILED " "(HTTP status code %ld)\n", per->mlfile->filename, per->this_url, response); } } } else { per->metalink_next_res = 1; fprintf(global->errors, "Metalink: fetching (%s) from (%s) FAILED (%s)\n", per->mlfile->filename, per->this_url, curl_easy_strerror(result)); } } if((global->progressmode == CURL_PROGRESS_BAR) && per->progressbar.calls) /* if the custom progress bar has been displayed, we output a newline here */ fputs("\n", per->progressbar.out); if(config->writeout) ourWriteOut(per->curl, &per->outs, config->writeout); /* Close the outs file */ if(outs->fopened && outs->stream) { int rc = fclose(outs->stream); if(!result && rc) { /* something went wrong in the writing process */ result = CURLE_WRITE_ERROR; fprintf(global->errors, "(%d) Failed writing body\n", result); } } /* File time can only be set _after_ the file has been closed */ if(!result && config->remote_time && outs->s_isreg && outs->filename) { /* Ask libcurl if we got a remote file time */ curl_off_t filetime = -1; curl_easy_getinfo(curl, CURLINFO_FILETIME_T, &filetime); setfiletime(filetime, outs->filename, config->global->errors); } /* Close function-local opened file descriptors */ if(per->heads.fopened && per->heads.stream) fclose(per->heads.stream); if(per->heads.alloc_filename) Curl_safefree(per->heads.filename); curl_easy_cleanup(per->curl); if(outs->alloc_filename) free(outs->filename); free(per->this_url); free(per->separator_err); free(per->separator); free(per->outfile); free(per->uploadfile); return CURLE_OK; } /* go through the list of URLs and configs and add transfers */ static CURLcode create_transfers(struct GlobalConfig *global, struct OperationConfig *config, CURLSH *share, bool capath_from_env) { CURLcode result = CURLE_OK; struct getout *urlnode; metalinkfile *mlfile_last = NULL; bool orig_noprogress = global->noprogress; bool orig_isatty = global->isatty; char *httpgetfields = NULL; if(config->postfields) { if(config->use_httpget) { /* Use the postfields data for a http get */ httpgetfields = strdup(config->postfields); Curl_safefree(config->postfields); if(!httpgetfields) { |
︙ | ︙ | |||
337 338 339 340 341 342 343 | if(SetHTTPrequest(config, HTTPREQ_SIMPLEPOST, &config->httpreq)) { result = CURLE_FAILED_INIT; goto quit_curl; } } } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | < | 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 | if(SetHTTPrequest(config, HTTPREQ_SIMPLEPOST, &config->httpreq)) { result = CURLE_FAILED_INIT; goto quit_curl; } } } for(urlnode = config->url_list; urlnode; urlnode = urlnode->next) { unsigned long li; unsigned long up; /* upload file counter within a single upload glob */ char *infiles; /* might be a glob pattern */ char *outfiles; unsigned long infilenum; URLGlob *inglob; bool metalink = FALSE; /* metalink download? */ metalinkfile *mlfile; metalink_resource *mlres; outfiles = NULL; infilenum = 1; inglob = NULL; |
︙ | ︙ | |||
457 458 459 460 461 462 463 | else if(!up) { uploadfile = strdup(infiles); if(!uploadfile) { helpf(global->errors, "out of memory\n"); result = CURLE_OUT_OF_MEMORY; } } | < < | 776 777 778 779 780 781 782 783 784 785 786 787 788 789 | else if(!up) { uploadfile = strdup(infiles); if(!uploadfile) { helpf(global->errors, "out of memory\n"); result = CURLE_OUT_OF_MEMORY; } } if(!uploadfile) break; } if(metalink) { /* For Metalink download, we don't use glob. Instead we use the number of resources as urlnum. */ |
︙ | ︙ | |||
486 487 488 489 490 491 492 | urlnum = 1; /* without globbing, this is a single URL */ /* if multiple files extracted to stdout, insert separators! */ separator = ((!outfiles || !strcmp(outfiles, "-")) && urlnum > 1); /* Here's looping around each globbed URL */ for(li = 0 ; li < urlnum; li++) { | | < < < | | > > > | > > | > > > > > > > | > > > > | > > > > > > > > > > > > > > > > > > > > > > | | > | > > | | | < < | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | < < | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < | < | | 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 | urlnum = 1; /* without globbing, this is a single URL */ /* if multiple files extracted to stdout, insert separators! */ separator = ((!outfiles || !strcmp(outfiles, "-")) && urlnum > 1); /* Here's looping around each globbed URL */ for(li = 0 ; li < urlnum; li++) { struct per_transfer *per; struct OutStruct *outs; struct InStruct *input; struct OutStruct *heads; struct HdrCbData *hdrcbdata = NULL; CURL *curl = curl_easy_init(); result = add_transfer(&per); if(result || !curl) { free(uploadfile); curl_easy_cleanup(curl); result = CURLE_OUT_OF_MEMORY; goto show_error; } per->config = config; per->curl = curl; per->uploadfile = uploadfile; /* default headers output stream is stdout */ heads = &per->heads; heads->stream = stdout; heads->config = config; /* Single header file for all URLs */ if(config->headerfile) { /* open file for output: */ if(strcmp(config->headerfile, "-")) { FILE *newfile = fopen(config->headerfile, "wb"); if(!newfile) { warnf(config->global, "Failed to open %s\n", config->headerfile); result = CURLE_WRITE_ERROR; goto quit_curl; } else { heads->filename = config->headerfile; heads->s_isreg = TRUE; heads->fopened = TRUE; heads->stream = newfile; } } else { /* always use binary mode for protocol header output */ set_binmode(heads->stream); } } hdrcbdata = &per->hdrcbdata; outs = &per->outs; input = &per->input; per->outfile = NULL; per->infdopen = FALSE; per->infd = STDIN_FILENO; /* default output stream is stdout */ outs->stream = stdout; outs->config = config; if(metalink) { /* For Metalink download, use name in Metalink file as filename. */ per->outfile = strdup(mlfile->filename); if(!per->outfile) { result = CURLE_OUT_OF_MEMORY; goto show_error; } per->this_url = strdup(mlres->url); if(!per->this_url) { result = CURLE_OUT_OF_MEMORY; goto show_error; } per->mlfile = mlfile; } else { if(urls) { result = glob_next_url(&per->this_url, urls); if(result) goto show_error; } else if(!li) { per->this_url = strdup(urlnode->url); if(!per->this_url) { result = CURLE_OUT_OF_MEMORY; goto show_error; } } else per->this_url = NULL; if(!per->this_url) break; if(outfiles) { per->outfile = strdup(outfiles); if(!per->outfile) { result = CURLE_OUT_OF_MEMORY; goto show_error; } } } if(((urlnode->flags&GETOUT_USEREMOTE) || (per->outfile && strcmp("-", per->outfile))) && (metalink || !config->use_metalink)) { /* * We have specified a file name to store the result in, or we have * decided we want to use the remote file name. */ if(!per->outfile) { /* extract the file name from the URL */ result = get_url_file_name(&per->outfile, per->this_url); if(result) goto show_error; if(!*per->outfile && !config->content_disposition) { helpf(global->errors, "Remote file name has no length!\n"); result = CURLE_WRITE_ERROR; goto quit_urls; } } else if(urls) { /* fill '#1' ... '#9' terms from URL pattern */ char *storefile = per->outfile; result = glob_match_url(&per->outfile, storefile, urls); Curl_safefree(storefile); if(result) { /* bad globbing */ warnf(config->global, "bad output glob!\n"); goto quit_urls; } } /* Create the directory hierarchy, if not pre-existent to a multiple file output call */ if(config->create_dirs || metalink) { result = create_dir_hierarchy(per->outfile, global->errors); /* create_dir_hierarchy shows error upon CURLE_WRITE_ERROR */ if(result == CURLE_WRITE_ERROR) goto quit_urls; if(result) { goto show_error; } } if((urlnode->flags & GETOUT_USEREMOTE) && config->content_disposition) { /* Our header callback MIGHT set the filename */ DEBUGASSERT(!outs->filename); } if(config->resume_from_current) { /* We're told to continue from where we are now. Get the size of the file as it is now and open it for append instead */ struct_stat fileinfo; /* VMS -- Danger, the filesize is only valid for stream files */ if(0 == stat(per->outfile, &fileinfo)) /* set offset to current file size: */ config->resume_from = fileinfo.st_size; else /* let offset be 0 */ config->resume_from = 0; } if(config->resume_from) { #ifdef __VMS /* open file for output, forcing VMS output format into stream mode which is needed for stat() call above to always work. */ FILE *file = fopen(outfile, config->resume_from?"ab":"wb", "ctx=stm", "rfm=stmlf", "rat=cr", "mrs=0"); #else /* open file for output: */ FILE *file = fopen(per->outfile, config->resume_from?"ab":"wb"); #endif if(!file) { helpf(global->errors, "Can't open '%s'!\n", per->outfile); result = CURLE_WRITE_ERROR; goto quit_urls; } outs->fopened = TRUE; outs->stream = file; outs->init = config->resume_from; } else { outs->stream = NULL; /* open when needed */ } outs->filename = per->outfile; outs->s_isreg = TRUE; } if(per->uploadfile && !stdin_upload(per->uploadfile)) { /* * We have specified a file to upload and it isn't "-". */ char *nurl = add_file_name_to_url(per->this_url, per->uploadfile); if(!nurl) { result = CURLE_OUT_OF_MEMORY; goto show_error; } per->this_url = nurl; } else if(per->uploadfile && stdin_upload(per->uploadfile)) { /* count to see if there are more than one auth bit set in the authtype field */ int authbits = 0; int bitcheck = 0; while(bitcheck < 32) { if(config->authtype & (1UL << bitcheck++)) { authbits++; |
︙ | ︙ | |||
729 730 731 732 733 734 735 | if(config->proxyanyauth || (authbits>1)) { warnf(config->global, "Using --anyauth or --proxy-anyauth with upload from stdin" " involves a big risk of it not working. Use a temporary" " file or a fixed auth type instead!\n"); } | | | | | | | | | > | | > | | | | | | | > | | > > > > > > > | | < | | | < < < | | 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 | if(config->proxyanyauth || (authbits>1)) { warnf(config->global, "Using --anyauth or --proxy-anyauth with upload from stdin" " involves a big risk of it not working. Use a temporary" " file or a fixed auth type instead!\n"); } DEBUGASSERT(per->infdopen == FALSE); DEBUGASSERT(per->infd == STDIN_FILENO); set_binmode(stdin); if(!strcmp(per->uploadfile, ".")) { if(curlx_nonblock((curl_socket_t)per->infd, TRUE) < 0) warnf(config->global, "fcntl failed on fd=%d: %s\n", per->infd, strerror(errno)); } } if(per->uploadfile && config->resume_from_current) config->resume_from = -1; /* -1 will then force get-it-yourself */ if(output_expected(per->this_url, per->uploadfile) && outs->stream && isatty(fileno(outs->stream))) /* we send the output to a tty, therefore we switch off the progress meter */ global->noprogress = global->isatty = TRUE; else { /* progress meter is per download, so restore config values */ global->noprogress = orig_noprogress; global->isatty = orig_isatty; } if(urlnum > 1 && !global->mute) { per->separator_err = aprintf("\n[%lu/%lu]: %s --> %s", li + 1, urlnum, per->this_url, per->outfile ? per->outfile : "<stdout>"); if(separator) per->separator = aprintf("%s%s", CURLseparator, per->this_url); } if(httpgetfields) { char *urlbuffer; /* Find out whether the url contains a file name */ const char *pc = strstr(per->this_url, "://"); char sep = '?'; if(pc) pc += 3; else pc = per->this_url; pc = strrchr(pc, '/'); /* check for a slash */ if(pc) { /* there is a slash present in the URL */ if(strchr(pc, '?')) /* Ouch, there's already a question mark in the URL string, we then append the data with an ampersand separator instead! */ sep = '&'; } /* * Then append ? followed by the get fields to the url. */ if(pc) urlbuffer = aprintf("%s%c%s", per->this_url, sep, httpgetfields); else /* Append / before the ? to create a well-formed url if the url contains a hostname only */ urlbuffer = aprintf("%s/?%s", per->this_url, httpgetfields); if(!urlbuffer) { result = CURLE_OUT_OF_MEMORY; goto show_error; } Curl_safefree(per->this_url); /* free previous URL */ per->this_url = urlbuffer; /* use our new URL instead! */ } if(!global->errors) global->errors = stderr; if((!per->outfile || !strcmp(per->outfile, "-")) && !config->use_ascii) { /* We get the output to stdout and we have not got the ASCII/text flag, then set stdout to be binary */ set_binmode(stdout); } /* explicitly passed to stdout means okaying binary gunk */ config->terminal_binary_ok = (per->outfile && !strcmp(per->outfile, "-")); /* avoid having this setopt added to the --libcurl source output */ result = curl_easy_setopt(curl, CURLOPT_SHARE, share); if(result) goto show_error; if(!config->tcp_nodelay) my_setopt(curl, CURLOPT_TCP_NODELAY, 0L); if(config->tcp_fastopen) my_setopt(curl, CURLOPT_TCP_FASTOPEN, 1L); /* where to store */ my_setopt(curl, CURLOPT_WRITEDATA, per); my_setopt(curl, CURLOPT_INTERLEAVEDATA, per); if(metalink || !config->use_metalink) /* what call to write */ my_setopt(curl, CURLOPT_WRITEFUNCTION, tool_write_cb); #ifdef USE_METALINK else /* Set Metalink specific write callback function to parse XML data progressively. */ my_setopt(curl, CURLOPT_WRITEFUNCTION, metalink_write_cb); #endif /* USE_METALINK */ /* for uploads */ input->config = config; /* Note that if CURLOPT_READFUNCTION is fread (the default), then * lib/telnet.c will Curl_poll() on the input file descriptor * rather then calling the READFUNCTION at regular intervals. * The circumstances in which it is preferable to enable this * behaviour, by omitting to set the READFUNCTION & READDATA options, * have not been determined. */ my_setopt(curl, CURLOPT_READDATA, input); /* what call to read */ my_setopt(curl, CURLOPT_READFUNCTION, tool_read_cb); /* in 7.18.0, the CURLOPT_SEEKFUNCTION/DATA pair is taking over what CURLOPT_IOCTLFUNCTION/DATA pair previously provided for seeking */ my_setopt(curl, CURLOPT_SEEKDATA, input); my_setopt(curl, CURLOPT_SEEKFUNCTION, tool_seek_cb); if(config->recvpersecond && (config->recvpersecond < BUFFER_SIZE)) /* use a smaller sized buffer for better sleeps */ my_setopt(curl, CURLOPT_BUFFERSIZE, (long)config->recvpersecond); else my_setopt(curl, CURLOPT_BUFFERSIZE, (long)BUFFER_SIZE); my_setopt_str(curl, CURLOPT_URL, per->this_url); my_setopt(curl, CURLOPT_NOPROGRESS, global->noprogress?1L:0L); if(config->no_body) my_setopt(curl, CURLOPT_NOBODY, 1L); if(config->oauth_bearer) my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->oauth_bearer); |
︙ | ︙ | |||
911 912 913 914 915 916 917 | my_setopt(curl, CURLOPT_SUPPRESS_CONNECT_HEADERS, config->suppress_connect_headers?1L:0L); } my_setopt(curl, CURLOPT_FAILONERROR, config->failonerror?1L:0L); my_setopt(curl, CURLOPT_REQUEST_TARGET, config->request_target); | | | | 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 | my_setopt(curl, CURLOPT_SUPPRESS_CONNECT_HEADERS, config->suppress_connect_headers?1L:0L); } my_setopt(curl, CURLOPT_FAILONERROR, config->failonerror?1L:0L); my_setopt(curl, CURLOPT_REQUEST_TARGET, config->request_target); my_setopt(curl, CURLOPT_UPLOAD, per->uploadfile?1L:0L); my_setopt(curl, CURLOPT_DIRLISTONLY, config->dirlistonly?1L:0L); my_setopt(curl, CURLOPT_APPEND, config->ftp_append?1L:0L); if(config->netrc_opt) my_setopt_enum(curl, CURLOPT_NETRC, (long)CURL_NETRC_OPTIONAL); else if(config->netrc || config->netrc_file) my_setopt_enum(curl, CURLOPT_NETRC, (long)CURL_NETRC_REQUIRED); else my_setopt_enum(curl, CURLOPT_NETRC, (long)CURL_NETRC_IGNORED); if(config->netrc_file) my_setopt_str(curl, CURLOPT_NETRC_FILE, config->netrc_file); my_setopt(curl, CURLOPT_TRANSFERTEXT, config->use_ascii?1L:0L); if(config->login_options) my_setopt_str(curl, CURLOPT_LOGIN_OPTIONS, config->login_options); my_setopt_str(curl, CURLOPT_USERPWD, config->userpwd); my_setopt_str(curl, CURLOPT_RANGE, config->range); my_setopt(curl, CURLOPT_ERRORBUFFER, per->errorbuffer); my_setopt(curl, CURLOPT_TIMEOUT_MS, (long)(config->timeout * 1000)); switch(config->httpreq) { case HTTPREQ_SIMPLEPOST: my_setopt_str(curl, CURLOPT_POSTFIELDS, config->postfields); my_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, |
︙ | ︙ | |||
1178 1179 1180 1181 1182 1183 1184 | if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) { if(!config->insecure_ok) { char *home; char *file; result = CURLE_OUT_OF_MEMORY; home = homedir(); if(home) { | | | 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 | if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) { if(!config->insecure_ok) { char *home; char *file; result = CURLE_OUT_OF_MEMORY; home = homedir(); if(home) { file = aprintf("%s/.ssh/known_hosts", home); if(file) { /* new in curl 7.19.6 */ result = res_setopt_str(curl, CURLOPT_SSH_KNOWNHOSTS, file); curl_free(file); if(result == CURLE_UNKNOWN_OPTION) /* libssh2 version older than 1.1.1 */ result = CURLE_OK; |
︙ | ︙ | |||
1226 1227 1228 1229 1230 1231 1232 1233 | my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest); customrequest_helper(config, config->httpreq, config->customrequest); my_setopt(curl, CURLOPT_STDERR, global->errors); /* three new ones in libcurl 7.3: */ my_setopt_str(curl, CURLOPT_INTERFACE, config->iface); my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel); | > < | | 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 | my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest); customrequest_helper(config, config->httpreq, config->customrequest); my_setopt(curl, CURLOPT_STDERR, global->errors); /* three new ones in libcurl 7.3: */ my_setopt_str(curl, CURLOPT_INTERFACE, config->iface); my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel); progressbarinit(&per->progressbar, config); if((global->progressmode == CURL_PROGRESS_BAR) && !global->noprogress && !global->mute) { /* we want the alternative style, then we have to implement it ourselves! */ my_setopt(curl, CURLOPT_XFERINFOFUNCTION, tool_progress_cb); my_setopt(curl, CURLOPT_XFERINFODATA, &per->progressbar); } /* new in libcurl 7.24.0: */ if(config->dns_servers) my_setopt_str(curl, CURLOPT_DNS_SERVERS, config->dns_servers); /* new in libcurl 7.33.0: */ |
︙ | ︙ | |||
1416 1417 1418 1419 1420 1421 1422 | if(config->proto_present) my_setopt_flags(curl, CURLOPT_PROTOCOLS, config->proto); if(config->proto_redir_present) my_setopt_flags(curl, CURLOPT_REDIR_PROTOCOLS, config->proto_redir); if(config->content_disposition && (urlnode->flags & GETOUT_USEREMOTE)) | | | | | | | | | 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 | if(config->proto_present) my_setopt_flags(curl, CURLOPT_PROTOCOLS, config->proto); if(config->proto_redir_present) my_setopt_flags(curl, CURLOPT_REDIR_PROTOCOLS, config->proto_redir); if(config->content_disposition && (urlnode->flags & GETOUT_USEREMOTE)) hdrcbdata->honor_cd_filename = TRUE; else hdrcbdata->honor_cd_filename = FALSE; hdrcbdata->outs = outs; hdrcbdata->heads = heads; hdrcbdata->global = global; hdrcbdata->config = config; my_setopt(curl, CURLOPT_HEADERFUNCTION, tool_header_cb); my_setopt(curl, CURLOPT_HEADERDATA, per); if(config->resolve) /* new in 7.21.3 */ my_setopt_slist(curl, CURLOPT_RESOLVE, config->resolve); if(config->connect_to) /* new in 7.49.0 */ |
︙ | ︙ | |||
1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 | if(config->proxy_ssl_allow_beast) my_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, (long)CURLSSLOPT_ALLOW_BEAST); if(config->mail_auth) my_setopt_str(curl, CURLOPT_MAIL_AUTH, config->mail_auth); /* new in 7.31.0 */ if(config->sasl_ir) my_setopt(curl, CURLOPT_SASL_IR, 1L); if(config->nonpn) { my_setopt(curl, CURLOPT_SSL_ENABLE_NPN, 0L); } | > > > > | 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 | if(config->proxy_ssl_allow_beast) my_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, (long)CURLSSLOPT_ALLOW_BEAST); if(config->mail_auth) my_setopt_str(curl, CURLOPT_MAIL_AUTH, config->mail_auth); /* new in 7.66.0 */ if(config->sasl_authzid) my_setopt_str(curl, CURLOPT_SASL_AUTHZID, config->sasl_authzid); /* new in 7.31.0 */ if(config->sasl_ir) my_setopt(curl, CURLOPT_SASL_IR, 1L); if(config->nonpn) { my_setopt(curl, CURLOPT_SSL_ENABLE_NPN, 0L); } |
︙ | ︙ | |||
1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 | config->unix_socket_path); } else { my_setopt_str(curl, CURLOPT_UNIX_SOCKET_PATH, config->unix_socket_path); } } /* new in 7.45.0 */ if(config->proto_default) my_setopt_str(curl, CURLOPT_DEFAULT_PROTOCOL, config->proto_default); /* new in 7.47.0 */ if(config->expect100timeout > 0) my_setopt_str(curl, CURLOPT_EXPECT_100_TIMEOUT_MS, | > | 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 | config->unix_socket_path); } else { my_setopt_str(curl, CURLOPT_UNIX_SOCKET_PATH, config->unix_socket_path); } } /* new in 7.45.0 */ if(config->proto_default) my_setopt_str(curl, CURLOPT_DEFAULT_PROTOCOL, config->proto_default); /* new in 7.47.0 */ if(config->expect100timeout > 0) my_setopt_str(curl, CURLOPT_EXPECT_100_TIMEOUT_MS, |
︙ | ︙ | |||
1532 1533 1534 1535 1536 1537 1538 | #ifdef USE_ALTSVC /* only if explicitly enabled in configure */ if(config->altsvc) my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc); #endif | < < < < < < < < < < < < < < < < < | < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | < < < < < < < < < < < < | < < | < < | < < < | < < < < < < < < < < < < < | | < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | < < < < < < < < < < < < < < < < < < | < < < < < < < < | < < < < < < < | < < < < < < < < < < < < < < < < < | < < < < < < < < < | < | < < < < < < < < < < < < < < < < < < < < < < < < < < | | | 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 | #ifdef USE_ALTSVC /* only if explicitly enabled in configure */ if(config->altsvc) my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc); #endif #ifdef USE_METALINK if(!metalink && config->use_metalink) { outs->metalink_parser = metalink_parser_context_new(); if(outs->metalink_parser == NULL) { result = CURLE_OUT_OF_MEMORY; goto show_error; } fprintf(config->global->errors, "Metalink: parsing (%s) metalink/XML...\n", per->this_url); } else if(metalink) fprintf(config->global->errors, "Metalink: fetching (%s) from (%s)...\n", mlfile->filename, per->this_url); #endif /* USE_METALINK */ per->metalink = metalink; /* initialize retry vars for loop below */ per->retry_sleep_default = (config->retry_delay) ? config->retry_delay*1000L : RETRY_SLEEP_DEFAULT; /* ms */ per->retry_numretries = config->req_retry; per->retry_sleep = per->retry_sleep_default; /* ms */ per->retrystart = tvnow(); } /* loop to the next URL */ show_error: quit_urls: if(urls) { /* Free list of remaining URLs */ glob_cleanup(urls); urls = NULL; } |
︙ | ︙ | |||
1958 1959 1960 1961 1962 1963 1964 | /* Free this URL node data without destroying the the node itself nor modifying next pointer. */ Curl_safefree(urlnode->url); Curl_safefree(urlnode->outfile); Curl_safefree(urlnode->infile); urlnode->flags = 0; | < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < < < < < < < < < < < < < < < | 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 | /* Free this URL node data without destroying the the node itself nor modifying next pointer. */ Curl_safefree(urlnode->url); Curl_safefree(urlnode->outfile); Curl_safefree(urlnode->infile); urlnode->flags = 0; } /* for-loop through all URLs */ quit_curl: /* Free function-local referenced allocated memory */ Curl_safefree(httpgetfields); return result; } static long all_added; /* number of easy handles currently added */ /* * add_parallel_transfers() sets 'morep' to TRUE if there are more transfers * to add even after this call returns. sets 'addedp' to TRUE if one or more * transfers were added. */ static int add_parallel_transfers(struct GlobalConfig *global, CURLM *multi, bool *morep, bool *addedp) { struct per_transfer *per; CURLcode result; CURLMcode mcode; *addedp = FALSE; *morep = FALSE; for(per = transfers; per && (all_added < global->parallel_max); per = per->next) { if(per->added) /* already added */ continue; result = pre_transfer(global, per); if(result) break; (void)curl_easy_setopt(per->curl, CURLOPT_PRIVATE, per); (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFOFUNCTION, xferinfo_cb); (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFODATA, per); mcode = curl_multi_add_handle(multi, per->curl); if(mcode) return CURLE_OUT_OF_MEMORY; per->added = TRUE; all_added++; *addedp = TRUE; } *morep = per ? TRUE : FALSE; return CURLE_OK; } static CURLcode parallel_transfers(struct GlobalConfig *global, CURLSH *share) { CURLM *multi; bool done = FALSE; CURLMcode mcode = CURLM_OK; CURLcode result = CURLE_OK; int still_running = 1; struct timeval start = tvnow(); bool more_transfers; bool added_transfers; multi = curl_multi_init(); if(!multi) return CURLE_OUT_OF_MEMORY; result = add_parallel_transfers(global, multi, &more_transfers, &added_transfers); if(result) return result; while(!done && !mcode && (still_running || more_transfers)) { mcode = curl_multi_poll(multi, NULL, 0, 1000, NULL); if(!mcode) mcode = curl_multi_perform(multi, &still_running); progress_meter(global, &start, FALSE); if(!mcode) { int rc; CURLMsg *msg; bool removed = FALSE; do { msg = curl_multi_info_read(multi, &rc); if(msg) { bool retry; struct per_transfer *ended; CURL *easy = msg->easy_handle; result = msg->data.result; curl_easy_getinfo(easy, CURLINFO_PRIVATE, (void *)&ended); curl_multi_remove_handle(multi, easy); result = post_transfer(global, share, ended, result, &retry); if(retry) continue; progress_finalize(ended); /* before it goes away */ all_added--; /* one fewer added */ removed = TRUE; (void)del_transfer(ended); } } while(msg); if(removed) { /* one or more transfers completed, add more! */ (void)add_parallel_transfers(global, multi, &more_transfers, &added_transfers); if(added_transfers) /* we added new ones, make sure the loop doesn't exit yet */ still_running = 1; } } } (void)progress_meter(global, &start, TRUE); /* Make sure to return some kind of error if there was a multi problem */ if(mcode) { result = (mcode == CURLM_OUT_OF_MEMORY) ? CURLE_OUT_OF_MEMORY : /* The other multi errors should never happen, so return something suitably generic */ CURLE_BAD_FUNCTION_ARGUMENT; } curl_multi_cleanup(multi); return result; } static CURLcode serial_transfers(struct GlobalConfig *global, CURLSH *share) { CURLcode returncode = CURLE_OK; CURLcode result = CURLE_OK; struct per_transfer *per; for(per = transfers; per;) { bool retry; result = pre_transfer(global, per); if(result) break; #ifndef CURL_DISABLE_LIBCURL_OPTION if(global->libcurl) { result = easysrc_perform(); if(result) break; } #endif #ifdef CURLDEBUG if(global->test_event_based) result = curl_easy_perform_ev(per->curl); else #endif result = curl_easy_perform(per->curl); /* store the result of the actual transfer */ returncode = result; result = post_transfer(global, share, per, result, &retry); if(retry) continue; per = del_transfer(per); /* Bail out upon critical errors or --fail-early */ if(result || is_fatal_error(returncode) || (returncode && global->fail_early)) break; } if(returncode) /* returncode errors have priority */ result = returncode; return result; } static CURLcode operate_do(struct GlobalConfig *global, struct OperationConfig *config, CURLSH *share) { CURLcode result = CURLE_OK; bool capath_from_env; /* Check we have a url */ if(!config->url_list || !config->url_list->url) { helpf(global->errors, "no URL specified!\n"); return CURLE_FAILED_INIT; } /* On WIN32 we can't set the path to curl-ca-bundle.crt * at compile time. So we look here for the file in two ways: * 1: look at the environment variable CURL_CA_BUNDLE for a path * 2: if #1 isn't found, use the windows API function SearchPath() * to find it along the app's path (includes app's dir and CWD) * * We support the environment variable thing for non-Windows platforms * too. Just for the sake of it. */ capath_from_env = false; if(!config->cacert && !config->capath && !config->insecure_ok) { CURL *curltls = curl_easy_init(); struct curl_tlssessioninfo *tls_backend_info = NULL; /* With the addition of CAINFO support for Schannel, this search could find * a certificate bundle that was previously ignored. To maintain backward * compatibility, only perform this search if not using Schannel. */ result = curl_easy_getinfo(curltls, CURLINFO_TLS_SSL_PTR, &tls_backend_info); if(result) return result; /* Set the CA cert locations specified in the environment. For Windows if * no environment-specified filename is found then check for CA bundle * default filename curl-ca-bundle.crt in the user's PATH. * * If Schannel is the selected SSL backend then these locations are * ignored. We allow setting CA location for schannel only when explicitly * specified by the user via CURLOPT_CAINFO / --cacert. */ if(tls_backend_info->backend != CURLSSLBACKEND_SCHANNEL) { char *env; env = curlx_getenv("CURL_CA_BUNDLE"); if(env) { config->cacert = strdup(env); if(!config->cacert) { curl_free(env); helpf(global->errors, "out of memory\n"); return CURLE_OUT_OF_MEMORY; } } else { env = curlx_getenv("SSL_CERT_DIR"); if(env) { config->capath = strdup(env); if(!config->capath) { curl_free(env); helpf(global->errors, "out of memory\n"); return CURLE_OUT_OF_MEMORY; } capath_from_env = true; } else { env = curlx_getenv("SSL_CERT_FILE"); if(env) { config->cacert = strdup(env); if(!config->cacert) { curl_free(env); helpf(global->errors, "out of memory\n"); return CURLE_OUT_OF_MEMORY; } } } } if(env) curl_free(env); #ifdef WIN32 else { result = FindWin32CACert(config, tls_backend_info->backend, "curl-ca-bundle.crt"); } #endif } curl_easy_cleanup(curltls); } if(!result) /* loop through the list of given URLs */ result = create_transfers(global, config, share, capath_from_env); return result; } static CURLcode operate_transfers(struct GlobalConfig *global, CURLSH *share, CURLcode result) { /* Save the values of noprogress and isatty to restore them later on */ bool orig_noprogress = global->noprogress; bool orig_isatty = global->isatty; struct per_transfer *per; /* Time to actually do the transfers */ if(!result) { if(global->parallel) result = parallel_transfers(global, share); else result = serial_transfers(global, share); } /* cleanup if there are any left */ for(per = transfers; per;) { bool retry; (void)post_transfer(global, share, per, result, &retry); /* Free list of given URLs */ clean_getout(per->config); /* Release metalink related resources here */ clean_metalink(per->config); per = del_transfer(per); } /* Reset the global config variables */ global->noprogress = orig_noprogress; global->isatty = orig_isatty; return result; } CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[]) { CURLcode result = CURLE_OK; |
︙ | ︙ | |||
2036 2037 2038 2039 2040 2041 2042 | else if(res == PARAM_MANUAL_REQUESTED) hugehelp(); /* Check if we were asked for the version information */ else if(res == PARAM_VERSION_INFO_REQUESTED) tool_version_info(); /* Check if we were asked to list the SSL engines */ else if(res == PARAM_ENGINES_REQUESTED) | | > > > > > > | > > > > > > > > > > < > | | | < | < < | > > > | 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 | else if(res == PARAM_MANUAL_REQUESTED) hugehelp(); /* Check if we were asked for the version information */ else if(res == PARAM_VERSION_INFO_REQUESTED) tool_version_info(); /* Check if we were asked to list the SSL engines */ else if(res == PARAM_ENGINES_REQUESTED) tool_list_engines(); else if(res == PARAM_LIBCURL_UNSUPPORTED_PROTOCOL) result = CURLE_UNSUPPORTED_PROTOCOL; else result = CURLE_FAILED_INIT; } else { #ifndef CURL_DISABLE_LIBCURL_OPTION if(config->libcurl) { /* Initialise the libcurl source output */ result = easysrc_init(); } #endif /* Perform the main operations */ if(!result) { size_t count = 0; struct OperationConfig *operation = config->first; CURLSH *share = curl_share_init(); if(!share) { #ifndef CURL_DISABLE_LIBCURL_OPTION if(config->libcurl) { /* Cleanup the libcurl source output */ easysrc_cleanup(); } #endif return CURLE_OUT_OF_MEMORY; } curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE); curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS); curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION); curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_PSL); /* Get the required arguments for each operation */ do { result = get_args(operation, count++); operation = operation->next; } while(!result && operation); /* Set the current operation pointer */ config->current = config->first; /* Setup all transfers */ while(!result && config->current) { result = operate_do(config, config->current, share); config->current = config->current->next; } /* now run! */ result = operate_transfers(config, share, result); curl_share_cleanup(share); #ifndef CURL_DISABLE_LIBCURL_OPTION if(config->libcurl) { /* Cleanup the libcurl source output */ easysrc_cleanup(); /* Dump the libcurl code if previously enabled */ dumpeasysrc(config); |
︙ | ︙ |
Changes to jni/curl/src/tool_operate.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_TOOL_OPERATE_H #define HEADER_CURL_TOOL_OPERATE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #ifndef HEADER_CURL_TOOL_OPERATE_H #define HEADER_CURL_TOOL_OPERATE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" #include "tool_cb_hdr.h" #include "tool_cb_prg.h" #include "tool_sdecls.h" struct per_transfer { /* double linked */ struct per_transfer *next; struct per_transfer *prev; struct OperationConfig *config; /* for this transfer */ CURL *curl; long retry_numretries; long retry_sleep_default; long retry_sleep; struct timeval retrystart; bool metalink; /* nonzero for metalink download. */ bool metalink_next_res; metalinkfile *mlfile; metalink_resource *mlres; char *this_url; char *outfile; bool infdopen; /* TRUE if infd needs closing */ int infd; struct ProgressData progressbar; struct OutStruct outs; struct OutStruct heads; struct InStruct input; struct HdrCbData hdrcbdata; char errorbuffer[CURL_ERROR_SIZE]; bool added; /* set TRUE when added to the multi handle */ /* for parallel progress bar */ curl_off_t dltotal; curl_off_t dlnow; curl_off_t ultotal; curl_off_t ulnow; bool dltotal_added; /* if the total has been added from this */ bool ultotal_added; /* NULL or malloced */ char *separator_err; char *separator; char *uploadfile; }; CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[]); extern struct per_transfer *transfers; /* first node */ #endif /* HEADER_CURL_TOOL_OPERATE_H */ |
Changes to jni/curl/src/tool_operhlp.c.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
67 68 69 70 71 72 73 | !strcmp(uploadfile, ".")) ? TRUE : FALSE; } /* * Adds the file name to the URL if it doesn't already have one. * url will be freed before return if the returned pointer is different */ | | > > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | !strcmp(uploadfile, ".")) ? TRUE : FALSE; } /* * Adds the file name to the URL if it doesn't already have one. * url will be freed before return if the returned pointer is different */ char *add_file_name_to_url(char *url, const char *filename) { /* If no file name part is given in the URL, we add this file name */ char *ptr = strstr(url, "://"); CURL *curl = curl_easy_init(); /* for url escaping */ if(!curl) return NULL; /* error! */ if(ptr) ptr += 3; else ptr = url; ptr = strrchr(ptr, '/'); if(!ptr || !strlen(++ptr)) { /* The URL has no file name part, add the local file name. In order |
︙ | ︙ | |||
116 117 118 119 120 121 122 123 124 125 126 127 128 129 | return NULL; url = urlbuffer; /* use our new URL instead! */ } else Curl_safefree(url); } return url; } /* Extracts the name portion of the URL. * Returns a pointer to a heap-allocated string or NULL if * no name part, at location indicated by first argument. */ | > | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | return NULL; url = urlbuffer; /* use our new URL instead! */ } else Curl_safefree(url); } curl_easy_cleanup(curl); return url; } /* Extracts the name portion of the URL. * Returns a pointer to a heap-allocated string or NULL if * no name part, at location indicated by first argument. */ |
︙ | ︙ |
Changes to jni/curl/src/tool_operhlp.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_TOOL_OPERHLP_H #define HEADER_CURL_TOOL_OPERHLP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef HEADER_CURL_TOOL_OPERHLP_H #define HEADER_CURL_TOOL_OPERHLP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
27 28 29 30 31 32 33 | void clean_getout(struct OperationConfig *config); bool output_expected(const char *url, const char *uploadfile); bool stdin_upload(const char *uploadfile); | | | 27 28 29 30 31 32 33 34 35 36 37 38 | void clean_getout(struct OperationConfig *config); bool output_expected(const char *url, const char *uploadfile); bool stdin_upload(const char *uploadfile); char *add_file_name_to_url(char *url, const char *filename); CURLcode get_url_file_name(char **filename, const char *url); #endif /* HEADER_CURL_TOOL_OPERHLP_H */ |
Changes to jni/curl/src/tool_paramhlp.c.
︙ | ︙ | |||
192 193 194 195 196 197 198 199 200 201 202 203 204 205 | if(result != PARAM_OK) return result; if(*val < 0) return PARAM_NEGATIVE_NUMERIC; return PARAM_OK; } /* * Parse the string and write the double in the given address. Return PARAM_OK * on success, otherwise a parameter specific error enum. * * The 'max' argument is the maximum value allowed, as the numbers are often * multiplied when later used. | > > > > > > > > > > > > > > > > > > > > > > | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | if(result != PARAM_OK) return result; if(*val < 0) return PARAM_NEGATIVE_NUMERIC; return PARAM_OK; } /* * Parse the string and write the long in the given address if it is below the * maximum allowed value. Return PARAM_OK on success, otherwise a parameter * error enum. ONLY ACCEPTS POSITIVE NUMBERS! * * Since this function gets called with the 'nextarg' pointer from within the * getparameter a lot, we must check it for NULL before accessing the str * data. */ ParameterError str2unummax(long *val, const char *str, long max) { ParameterError result = str2unum(val, str); if(result != PARAM_OK) return result; if(*val > max) return PARAM_NUMBER_TOO_LARGE; return PARAM_OK; } /* * Parse the string and write the double in the given address. Return PARAM_OK * on success, otherwise a parameter specific error enum. * * The 'max' argument is the maximum value allowed, as the numbers are often * multiplied when later used. |
︙ | ︙ |
Changes to jni/curl/src/tool_paramhlp.h.
1 2 3 4 5 6 7 8 9 | #ifndef HEADER_CURL_TOOL_PARAMHLP_H #define HEADER_CURL_TOOL_PARAMHLP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef HEADER_CURL_TOOL_PARAMHLP_H #define HEADER_CURL_TOOL_PARAMHLP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
29 30 31 32 33 34 35 36 37 38 39 40 41 42 | ParameterError file2memory(char **bufp, size_t *size, FILE *file); void cleanarg(char *str); ParameterError str2num(long *val, const char *str); ParameterError str2unum(long *val, const char *str); ParameterError str2udouble(double *val, const char *str, long max); long proto2num(struct OperationConfig *config, long *val, const char *str); int check_protocol(const char *str); ParameterError str2offset(curl_off_t *val, const char *str); | > | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | ParameterError file2memory(char **bufp, size_t *size, FILE *file); void cleanarg(char *str); ParameterError str2num(long *val, const char *str); ParameterError str2unum(long *val, const char *str); ParameterError str2unummax(long *val, const char *str, long max); ParameterError str2udouble(double *val, const char *str, long max); long proto2num(struct OperationConfig *config, long *val, const char *str); int check_protocol(const char *str); ParameterError str2offset(curl_off_t *val, const char *str); |
︙ | ︙ |
Changes to jni/curl/src/tool_parsecfg.c.
︙ | ︙ | |||
30 31 32 33 34 35 36 | #include "tool_helpers.h" #include "tool_homedir.h" #include "tool_msgs.h" #include "tool_parsecfg.h" #include "memdebug.h" /* keep this as LAST include */ | < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > < | < < | > > > | < < < < < < | | | < < < < < | < < | | > > > > | > > | | | | < < < | > | > | | > > > > > | < < | | | | < < < < < < < < | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | #include "tool_helpers.h" #include "tool_homedir.h" #include "tool_msgs.h" #include "tool_parsecfg.h" #include "memdebug.h" /* keep this as LAST include */ /* only acknowledge colon or equals as separators if the option was not specified with an initial dash! */ #define ISSEP(x,dash) (!dash && (((x) == '=') || ((x) == ':'))) static const char *unslashquote(const char *line, char *param); static char *my_get_line(FILE *fp); #ifdef WIN32 static FILE *execpath(const char *filename) { char filebuffer[512]; /* Get the filename of our executable. GetModuleFileName is already declared * via inclusions done in setup header file. We assume that we are using * the ASCII version here. */ unsigned long len = GetModuleFileNameA(0, filebuffer, sizeof(filebuffer)); if(len > 0 && len < sizeof(filebuffer)) { /* We got a valid filename - get the directory part */ char *lastdirchar = strrchr(filebuffer, '\\'); if(lastdirchar) { size_t remaining; *lastdirchar = 0; /* If we have enough space, build the RC filename */ remaining = sizeof(filebuffer) - strlen(filebuffer); if(strlen(filename) < remaining - 1) { msnprintf(lastdirchar, remaining, "%s%s", DIR_CHAR, filename); return fopen(filebuffer, FOPEN_READTEXT); } } } return NULL; } #endif /* return 0 on everything-is-fine, and non-zero otherwise */ int parseconfig(const char *filename, struct GlobalConfig *global) { FILE *file = NULL; bool usedarg = FALSE; int rc = 0; struct OperationConfig *operation = global->first; char *pathalloc = NULL; if(!filename || !*filename) { /* NULL or no file name attempts to load .curlrc from the homedir! */ char *home = homedir(); /* portable homedir finder */ #ifndef WIN32 if(home) { pathalloc = curl_maprintf("%s%s.curlrc", home, DIR_CHAR); if(!pathalloc) { free(home); return 1; /* out of memory */ } filename = pathalloc; } #else /* Windows */ if(home) { int i = 0; char prefix = '.'; do { /* check for .curlrc then _curlrc in the home dir */ pathalloc = curl_maprintf("%s%s%ccurlrc", home, DIR_CHAR, prefix); if(!pathalloc) { free(home); return 1; /* out of memory */ } /* Check if the file exists - if not, try _curlrc */ file = fopen(pathalloc, FOPEN_READTEXT); if(file) { filename = pathalloc; break; } prefix = '_'; } while(++i < 2); } if(!filename) { /* check for .curlrc then _curlrc in the dir of the executable */ file = execpath(".curlrc"); if(!file) file = execpath("_curlrc"); } #endif Curl_safefree(home); /* we've used it, now free it */ } if(!file && filename) { /* no need to fopen() again */ if(strcmp(filename, "-")) file = fopen(filename, FOPEN_READTEXT); else file = stdin; } if(file) { |
︙ | ︙ | |||
226 227 228 229 230 231 232 | if(operation->url_list && operation->url_list->url) { /* Allocate the next config */ operation->next = malloc(sizeof(struct OperationConfig)); if(operation->next) { /* Initialise the newly created config */ config_init(operation->next); | < < < | 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | if(operation->url_list && operation->url_list->url) { /* Allocate the next config */ operation->next = malloc(sizeof(struct OperationConfig)); if(operation->next) { /* Initialise the newly created config */ config_init(operation->next); /* Set the global config pointer */ operation->next->global = global; /* Update the last operation pointer */ global->last = operation->next; /* Move onto the new config */ |
︙ | ︙ | |||
270 271 272 273 274 275 276 277 278 279 280 281 282 283 | } if(file != stdin) fclose(file); } else rc = 1; /* couldn't open the file */ return rc; } /* * Copies the string from line to the buffer at param, unquoting * backslash-quoted characters and NUL-terminating the output string. * Stops at the first non-backslash-quoted double quote character or the | > | 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | } if(file != stdin) fclose(file); } else rc = 1; /* couldn't open the file */ free(pathalloc); return rc; } /* * Copies the string from line to the buffer at param, unquoting * backslash-quoted characters and NUL-terminating the output string. * Stops at the first non-backslash-quoted double quote character or the |
︙ | ︙ |
Added jni/curl/src/tool_progress.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" #include "tool_operate.h" #include "tool_progress.h" #include "tool_util.h" #define ENABLE_CURLX_PRINTF /* use our own printf() functions */ #include "curlx.h" /* The point of this function would be to return a string of the input data, but never longer than 5 columns (+ one zero byte). Add suffix k, M, G when suitable... */ static char *max5data(curl_off_t bytes, char *max5) { #define ONE_KILOBYTE CURL_OFF_T_C(1024) #define ONE_MEGABYTE (CURL_OFF_T_C(1024) * ONE_KILOBYTE) #define ONE_GIGABYTE (CURL_OFF_T_C(1024) * ONE_MEGABYTE) #define ONE_TERABYTE (CURL_OFF_T_C(1024) * ONE_GIGABYTE) #define ONE_PETABYTE (CURL_OFF_T_C(1024) * ONE_TERABYTE) if(bytes < CURL_OFF_T_C(100000)) msnprintf(max5, 6, "%5" CURL_FORMAT_CURL_OFF_T, bytes); else if(bytes < CURL_OFF_T_C(10000) * ONE_KILOBYTE) msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "k", bytes/ONE_KILOBYTE); else if(bytes < CURL_OFF_T_C(100) * ONE_MEGABYTE) /* 'XX.XM' is good as long as we're less than 100 megs */ msnprintf(max5, 6, "%2" CURL_FORMAT_CURL_OFF_T ".%0" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE, (bytes%ONE_MEGABYTE) / (ONE_MEGABYTE/CURL_OFF_T_C(10)) ); #if (CURL_SIZEOF_CURL_OFF_T > 4) else if(bytes < CURL_OFF_T_C(10000) * ONE_MEGABYTE) /* 'XXXXM' is good until we're at 10000MB or above */ msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE); else if(bytes < CURL_OFF_T_C(100) * ONE_GIGABYTE) /* 10000 MB - 100 GB, we show it as XX.XG */ msnprintf(max5, 6, "%2" CURL_FORMAT_CURL_OFF_T ".%0" CURL_FORMAT_CURL_OFF_T "G", bytes/ONE_GIGABYTE, (bytes%ONE_GIGABYTE) / (ONE_GIGABYTE/CURL_OFF_T_C(10)) ); else if(bytes < CURL_OFF_T_C(10000) * ONE_GIGABYTE) /* up to 10000GB, display without decimal: XXXXG */ msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "G", bytes/ONE_GIGABYTE); else if(bytes < CURL_OFF_T_C(10000) * ONE_TERABYTE) /* up to 10000TB, display without decimal: XXXXT */ msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "T", bytes/ONE_TERABYTE); else /* up to 10000PB, display without decimal: XXXXP */ msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "P", bytes/ONE_PETABYTE); /* 16384 petabytes (16 exabytes) is the maximum a 64 bit unsigned number can hold, but our data type is signed so 8192PB will be the maximum. */ #else else msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE); #endif return max5; } int xferinfo_cb(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { struct per_transfer *per = clientp; per->dltotal = dltotal; per->dlnow = dlnow; per->ultotal = ultotal; per->ulnow = ulnow; return 0; } /* Provide a string that is 2 + 1 + 2 + 1 + 2 = 8 letters long (plus the zero byte) */ static void time2str(char *r, curl_off_t seconds) { curl_off_t h; if(seconds <= 0) { strcpy(r, "--:--:--"); return; } h = seconds / CURL_OFF_T_C(3600); if(h <= CURL_OFF_T_C(99)) { curl_off_t m = (seconds - (h*CURL_OFF_T_C(3600))) / CURL_OFF_T_C(60); curl_off_t s = (seconds - (h*CURL_OFF_T_C(3600))) - (m*CURL_OFF_T_C(60)); msnprintf(r, 9, "%2" CURL_FORMAT_CURL_OFF_T ":%02" CURL_FORMAT_CURL_OFF_T ":%02" CURL_FORMAT_CURL_OFF_T, h, m, s); } else { /* this equals to more than 99 hours, switch to a more suitable output format to fit within the limits. */ curl_off_t d = seconds / CURL_OFF_T_C(86400); h = (seconds - (d*CURL_OFF_T_C(86400))) / CURL_OFF_T_C(3600); if(d <= CURL_OFF_T_C(999)) msnprintf(r, 9, "%3" CURL_FORMAT_CURL_OFF_T "d %02" CURL_FORMAT_CURL_OFF_T "h", d, h); else msnprintf(r, 9, "%7" CURL_FORMAT_CURL_OFF_T "d", d); } } static curl_off_t all_dltotal = 0; static curl_off_t all_ultotal = 0; static curl_off_t all_dlalready = 0; static curl_off_t all_ulalready = 0; curl_off_t all_xfers = 0; /* current total */ struct speedcount { curl_off_t dl; curl_off_t ul; struct timeval stamp; }; #define SPEEDCNT 10 static unsigned int speedindex; static bool indexwrapped; static struct speedcount speedstore[SPEEDCNT]; /* |DL% UL% Dled Uled Xfers Live Qd Total Current Left Speed | 6 -- 9.9G 0 2 2 0 0:00:40 0:00:02 0:00:37 4087M */ bool progress_meter(struct GlobalConfig *global, struct timeval *start, bool final) { static struct timeval stamp; static bool header = FALSE; struct timeval now; long diff; if(global->noprogress) return FALSE; now = tvnow(); diff = tvdiff(now, stamp); if(!header) { header = TRUE; fputs("DL% UL% Dled Uled Xfers Live Qd " "Total Current Left Speed\n", global->errors); } if(final || (diff > 500)) { char time_left[10]; char time_total[10]; char time_spent[10]; char buffer[3][6]; curl_off_t spent = tvdiff(now, *start)/1000; char dlpercen[4]="--"; char ulpercen[4]="--"; struct per_transfer *per; curl_off_t all_dlnow = 0; curl_off_t all_ulnow = 0; bool dlknown = TRUE; bool ulknown = TRUE; curl_off_t all_running = 0; /* in progress */ curl_off_t all_queued = 0; /* pending */ curl_off_t speed = 0; unsigned int i; stamp = now; /* first add the amounts of the already completed transfers */ all_dlnow += all_dlalready; all_ulnow += all_ulalready; for(per = transfers; per; per = per->next) { all_dlnow += per->dlnow; all_ulnow += per->ulnow; if(!per->dltotal) dlknown = FALSE; else if(!per->dltotal_added) { /* only add this amount once */ all_dltotal += per->dltotal; per->dltotal_added = TRUE; } if(!per->ultotal) ulknown = FALSE; else if(!per->ultotal_added) { /* only add this amount once */ all_ultotal += per->ultotal; per->ultotal_added = TRUE; } if(!per->added) all_queued++; else all_running++; } if(dlknown && all_dltotal) /* TODO: handle integer overflow */ msnprintf(dlpercen, sizeof(dlpercen), "%3d", all_dlnow * 100 / all_dltotal); if(ulknown && all_ultotal) /* TODO: handle integer overflow */ msnprintf(ulpercen, sizeof(ulpercen), "%3d", all_ulnow * 100 / all_ultotal); /* get the transfer speed, the higher of the two */ i = speedindex; speedstore[i].dl = all_dlnow; speedstore[i].ul = all_ulnow; speedstore[i].stamp = now; if(++speedindex >= SPEEDCNT) { indexwrapped = TRUE; speedindex = 0; } { long deltams; curl_off_t dl; curl_off_t ul; curl_off_t dls; curl_off_t uls; if(indexwrapped) { /* 'speedindex' is the oldest stored data */ deltams = tvdiff(now, speedstore[speedindex].stamp); dl = all_dlnow - speedstore[speedindex].dl; ul = all_ulnow - speedstore[speedindex].ul; } else { /* since the beginning */ deltams = tvdiff(now, *start); dl = all_dlnow; ul = all_ulnow; } dls = (curl_off_t)((double)dl / ((double)deltams/1000.0)); uls = (curl_off_t)((double)ul / ((double)deltams/1000.0)); speed = dls > uls ? dls : uls; } if(dlknown && speed) { curl_off_t est = all_dltotal / speed; curl_off_t left = (all_dltotal - all_dlnow) / speed; time2str(time_left, left); time2str(time_total, est); } else { time2str(time_left, 0); time2str(time_total, 0); } time2str(time_spent, spent); fprintf(global->errors, "\r" "%-3s " /* percent downloaded */ "%-3s " /* percent uploaded */ "%s " /* Dled */ "%s " /* Uled */ "%5" CURL_FORMAT_CURL_OFF_T " " /* Xfers */ "%5" CURL_FORMAT_CURL_OFF_T " " /* Live */ "%5" CURL_FORMAT_CURL_OFF_T " " /* Queued */ "%s " /* Total time */ "%s " /* Current time */ "%s " /* Time left */ "%s " /* Speed */ "%5s" /* final newline */, dlpercen, /* 3 letters */ ulpercen, /* 3 letters */ max5data(all_dlnow, buffer[0]), max5data(all_ulnow, buffer[1]), all_xfers, all_running, all_queued, time_total, time_spent, time_left, max5data(speed, buffer[2]), /* speed */ final ? "\n" :""); return TRUE; } return FALSE; } void progress_finalize(struct per_transfer *per) { /* get the numbers before this transfer goes away */ all_dlalready += per->dlnow; all_ulalready += per->ulnow; } |
Added jni/curl/src/tool_progress.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #ifndef HEADER_CURL_TOOL_PROGRESS_H #define HEADER_CURL_TOOL_PROGRESS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "tool_setup.h" int xferinfo_cb(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); bool progress_meter(struct GlobalConfig *global, struct timeval *start, bool final); void progress_finalize(struct per_transfer *per); extern curl_off_t all_xfers; /* total number */ #endif /* HEADER_CURL_TOOL_PROGRESS_H */ |
Changes to jni/curl/src/tool_setopt.c.
︙ | ︙ | |||
78 79 80 81 82 83 84 85 86 87 88 89 90 91 | const NameValue setopt_nv_CURL_HTTP_VERSION[] = { NV(CURL_HTTP_VERSION_NONE), NV(CURL_HTTP_VERSION_1_0), NV(CURL_HTTP_VERSION_1_1), NV(CURL_HTTP_VERSION_2_0), NV(CURL_HTTP_VERSION_2TLS), NVEND, }; const NameValue setopt_nv_CURL_SSLVERSION[] = { NV(CURL_SSLVERSION_DEFAULT), NV(CURL_SSLVERSION_TLSv1), NV(CURL_SSLVERSION_SSLv2), | > | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | const NameValue setopt_nv_CURL_HTTP_VERSION[] = { NV(CURL_HTTP_VERSION_NONE), NV(CURL_HTTP_VERSION_1_0), NV(CURL_HTTP_VERSION_1_1), NV(CURL_HTTP_VERSION_2_0), NV(CURL_HTTP_VERSION_2TLS), NV(CURL_HTTP_VERSION_3), NVEND, }; const NameValue setopt_nv_CURL_SSLVERSION[] = { NV(CURL_SSLVERSION_DEFAULT), NV(CURL_SSLVERSION_TLSv1), NV(CURL_SSLVERSION_SSLv2), |
︙ | ︙ | |||
818 819 820 821 822 823 824 825 826 827 828 829 830 831 | switch(tag) { case CURLOPT_TFTP_BLKSIZE: case CURLOPT_TFTP_NO_OPTIONS: return TRUE; default: break; } #endif #ifndef USED_TAG (void)tag; #endif return FALSE; } | > > > > > > > > > > | 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 | switch(tag) { case CURLOPT_TFTP_BLKSIZE: case CURLOPT_TFTP_NO_OPTIONS: return TRUE; default: break; } #endif #ifdef CURL_DISABLE_NETRC #define USED_TAG switch(tag) { case CURLOPT_NETRC: case CURLOPT_NETRC_FILE: return TRUE; default: break; } #endif #ifndef USED_TAG (void)tag; #endif return FALSE; } |
Changes to jni/curl/src/tool_version.h.
︙ | ︙ | |||
21 22 23 24 25 26 27 | * KIND, either express or implied. * ***************************************************************************/ #include <curl/curlver.h> #define CURL_NAME "curl" #define CURL_COPYRIGHT LIBCURL_COPYRIGHT | | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | * KIND, either express or implied. * ***************************************************************************/ #include <curl/curlver.h> #define CURL_NAME "curl" #define CURL_COPYRIGHT LIBCURL_COPYRIGHT #define CURL_VERSION "7.66.0" #define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR #define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR #define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH #define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") " #endif /* HEADER_CURL_TOOL_VERSION_H */ |
Changes to jni/curl/src/tool_writeout.c.
1 2 3 4 5 6 7 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is |
︙ | ︙ | |||
309 310 311 312 313 314 315 316 317 318 319 320 321 322 | version = "1.0"; break; case CURL_HTTP_VERSION_1_1: version = "1.1"; break; case CURL_HTTP_VERSION_2_0: version = "2"; break; } fprintf(stream, version); } break; case VAR_SCHEME: | > > > | 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 | version = "1.0"; break; case CURL_HTTP_VERSION_1_1: version = "1.1"; break; case CURL_HTTP_VERSION_2_0: version = "2"; break; case CURL_HTTP_VERSION_3: version = "3"; break; } fprintf(stream, version); } break; case VAR_SCHEME: |
︙ | ︙ |
Changes to jni/curl/tests/Makefile.in.
︙ | ︙ | |||
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
469 470 471 472 473 474 475 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ | | | | 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 | case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ |
︙ | ︙ |
Changes to jni/curl/tests/README.
︙ | ︙ | |||
212 213 214 215 216 217 218 | system using ssh or some other remote execution method. See the comments at the beginning of runtests.pl for details. 2. Numbering 2.1 Test case numbering | < < < < < < < | < < < < | < < < | < < > | | 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | system using ssh or some other remote execution method. See the comments at the beginning of runtests.pl for details. 2. Numbering 2.1 Test case numbering Test cases used to be numbered by category, but the ranges filled up. Subsets of tests can now be selected by passing keywords to the runtests.pl script via the make TFLAGS variable. New tests should now be added by finding a free number in tests/data/Makefile.inc. 3. Write tests Here's a quick description on writing test cases. We basically have three kinds of tests: the ones that test the curl tool, the ones that build small applications and test libcurl directly and the unit tests that test individual (possibly internal) functions. |
︙ | ︙ |
Changes to jni/curl/tests/certs/Makefile.in.
︙ | ︙ | |||
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ |
Changes to jni/curl/tests/certs/scripts/Makefile.in.
︙ | ︙ | |||
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ |
Changes to jni/curl/tests/data/Makefile.in.
︙ | ︙ | |||
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
391 392 393 394 395 396 397 | test271 test272 test273 test274 test275 test276 test277 test278 test279 \ test280 test281 test282 test283 test284 test285 test286 test287 test288 \ test289 test290 test291 test292 test293 test294 test295 test296 test297 \ test298 test299 test300 test301 test302 test303 test304 test305 test306 \ test307 test308 test309 test310 test311 test312 test313 test314 test315 \ test316 test317 test318 test319 test320 test321 test322 test323 test324 \ test325 test326 test327 test328 test329 test330 test331 test332 test333 \ | | | 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 | test271 test272 test273 test274 test275 test276 test277 test278 test279 \ test280 test281 test282 test283 test284 test285 test286 test287 test288 \ test289 test290 test291 test292 test293 test294 test295 test296 test297 \ test298 test299 test300 test301 test302 test303 test304 test305 test306 \ test307 test308 test309 test310 test311 test312 test313 test314 test315 \ test316 test317 test318 test319 test320 test321 test322 test323 test324 \ test325 test326 test327 test328 test329 test330 test331 test332 test333 \ test334 test335 \ test340 \ \ test350 test351 test352 test353 test354 test355 test356 \ test393 test394 test395 \ \ test400 test401 test402 test403 test404 test405 test406 test407 test408 \ test409 \ |
︙ | ︙ | |||
427 428 429 430 431 432 433 | test709 test710 test711 test712 test713 test714 test715 test716 test717 \ \ test800 test801 test802 test803 test804 test805 test806 test807 test808 \ test809 test810 test811 test812 test813 test814 test815 test816 test817 \ test818 test819 test820 test821 test822 test823 test824 test825 test826 \ test827 test828 test829 test830 test831 test832 test833 test834 test835 \ test836 test837 test838 test839 test840 test841 test842 test843 test844 \ | | | | > | 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 | test709 test710 test711 test712 test713 test714 test715 test716 test717 \ \ test800 test801 test802 test803 test804 test805 test806 test807 test808 \ test809 test810 test811 test812 test813 test814 test815 test816 test817 \ test818 test819 test820 test821 test822 test823 test824 test825 test826 \ test827 test828 test829 test830 test831 test832 test833 test834 test835 \ test836 test837 test838 test839 test840 test841 test842 test843 test844 \ test845 test846 test847 test848 test849 \ \ test850 test851 test852 test853 test854 test855 test856 test857 test858 \ test859 test860 test861 test862 test863 test864 test865 test866 test867 \ test868 test869 test870 test871 test872 test873 test874 test875 test876 \ test877 test878 test879 test880 test881 test882 test883 test884 test885 \ test886 test887 test888 test889 test890 test891 test892 test893 \ \ test900 test901 test902 test903 test904 test905 test906 test907 test908 \ test909 test910 test911 test912 test913 test914 test915 test916 test917 \ test918 test919 test920 test921 test922 test923 test924 test925 test926 \ test927 test928 test929 test930 test931 test932 test933 test934 test935 \ test936 test937 test938 test939 test940 test941 test942 test943 test944 \ test945 test946 test947 test948 test949 test950 test951 test952 test953 \ test954 \ \ test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \ test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \ test1016 test1017 test1018 test1019 test1020 test1021 test1022 test1023 \ test1024 test1025 test1026 test1027 test1028 test1029 test1030 test1031 \ test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 \ test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \ |
︙ | ︙ | |||
463 464 465 466 467 468 469 | test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \ test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \ test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \ test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \ test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \ test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \ test1160 test1161 test1162 test1163 test1164 test1165 \ | | | | 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 | test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \ test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \ test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \ test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \ test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \ test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \ test1160 test1161 test1162 test1163 test1164 test1165 \ test1170 test1171 test1172 test1173 test1174 \ \ test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \ test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \ test1216 test1217 test1218 test1219 \ test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \ test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \ test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \ test1244 test1245 test1246 test1247 test1248 test1249 test1250 test1251 \ test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 \ test1260 test1261 test1262 test1263 test1264 test1265 test1266 test1267 \ test1268 test1269 \ \ test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 \ test1288 test1289 test1290 test1291 test1292 \ test1298 test1299 \ test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 \ test1308 test1309 test1310 test1311 test1312 test1313 test1314 test1315 \ test1316 test1317 test1318 test1319 test1320 test1321 test1322 test1323 \ |
︙ | ︙ | |||
511 512 513 514 515 516 517 | \ test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \ test1533 test1534 test1535 test1536 test1537 test1538 \ test1540 test1541 \ test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \ test1558 test1559 test1560 test1561 test1562 test1563 \ \ | | | 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 | \ test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \ test1533 test1534 test1535 test1536 test1537 test1538 \ test1540 test1541 \ test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \ test1558 test1559 test1560 test1561 test1562 test1563 \ \ test1590 test1591 test1592 test1593 test1594 \ \ test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \ test1608 test1609 test1620 test1621 \ \ test1650 test1651 test1652 test1653 test1654 \ \ test1700 test1701 test1702 \ |
︙ | ︙ | |||
533 534 535 536 537 538 539 | test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \ test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \ test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \ test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \ test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \ test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \ test2064 test2065 test2066 test2067 test2068 test2069 \ | | > | | | 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 | test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \ test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \ test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \ test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \ test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \ test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \ test2064 test2065 test2066 test2067 test2068 test2069 \ test2071 test2072 test2073 test2074 test2075 test2076 test2077 \ test2078 \ test2080 \ test2100 \ \ test3000 test3001 # TESTCASES are taken from Makefile.inc EXTRA_DIST = $(TESTCASES) DISABLED CMakeLists.txt all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ |
︙ | ︙ |
Changes to jni/curl/tests/data/Makefile.inc.
︙ | ︙ | |||
53 54 55 56 57 58 59 | test271 test272 test273 test274 test275 test276 test277 test278 test279 \ test280 test281 test282 test283 test284 test285 test286 test287 test288 \ test289 test290 test291 test292 test293 test294 test295 test296 test297 \ test298 test299 test300 test301 test302 test303 test304 test305 test306 \ test307 test308 test309 test310 test311 test312 test313 test314 test315 \ test316 test317 test318 test319 test320 test321 test322 test323 test324 \ test325 test326 test327 test328 test329 test330 test331 test332 test333 \ | | | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | test271 test272 test273 test274 test275 test276 test277 test278 test279 \ test280 test281 test282 test283 test284 test285 test286 test287 test288 \ test289 test290 test291 test292 test293 test294 test295 test296 test297 \ test298 test299 test300 test301 test302 test303 test304 test305 test306 \ test307 test308 test309 test310 test311 test312 test313 test314 test315 \ test316 test317 test318 test319 test320 test321 test322 test323 test324 \ test325 test326 test327 test328 test329 test330 test331 test332 test333 \ test334 test335 \ test340 \ \ test350 test351 test352 test353 test354 test355 test356 \ test393 test394 test395 \ \ test400 test401 test402 test403 test404 test405 test406 test407 test408 \ test409 \ |
︙ | ︙ | |||
89 90 91 92 93 94 95 | test709 test710 test711 test712 test713 test714 test715 test716 test717 \ \ test800 test801 test802 test803 test804 test805 test806 test807 test808 \ test809 test810 test811 test812 test813 test814 test815 test816 test817 \ test818 test819 test820 test821 test822 test823 test824 test825 test826 \ test827 test828 test829 test830 test831 test832 test833 test834 test835 \ test836 test837 test838 test839 test840 test841 test842 test843 test844 \ | | | | > | 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | test709 test710 test711 test712 test713 test714 test715 test716 test717 \ \ test800 test801 test802 test803 test804 test805 test806 test807 test808 \ test809 test810 test811 test812 test813 test814 test815 test816 test817 \ test818 test819 test820 test821 test822 test823 test824 test825 test826 \ test827 test828 test829 test830 test831 test832 test833 test834 test835 \ test836 test837 test838 test839 test840 test841 test842 test843 test844 \ test845 test846 test847 test848 test849 \ \ test850 test851 test852 test853 test854 test855 test856 test857 test858 \ test859 test860 test861 test862 test863 test864 test865 test866 test867 \ test868 test869 test870 test871 test872 test873 test874 test875 test876 \ test877 test878 test879 test880 test881 test882 test883 test884 test885 \ test886 test887 test888 test889 test890 test891 test892 test893 \ \ test900 test901 test902 test903 test904 test905 test906 test907 test908 \ test909 test910 test911 test912 test913 test914 test915 test916 test917 \ test918 test919 test920 test921 test922 test923 test924 test925 test926 \ test927 test928 test929 test930 test931 test932 test933 test934 test935 \ test936 test937 test938 test939 test940 test941 test942 test943 test944 \ test945 test946 test947 test948 test949 test950 test951 test952 test953 \ test954 \ \ test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \ test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \ test1016 test1017 test1018 test1019 test1020 test1021 test1022 test1023 \ test1024 test1025 test1026 test1027 test1028 test1029 test1030 test1031 \ test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 \ test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \ |
︙ | ︙ | |||
125 126 127 128 129 130 131 | test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \ test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \ test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \ test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \ test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \ test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \ test1160 test1161 test1162 test1163 test1164 test1165 \ | | | | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \ test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \ test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \ test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \ test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \ test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \ test1160 test1161 test1162 test1163 test1164 test1165 \ test1170 test1171 test1172 test1173 test1174 \ \ test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \ test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \ test1216 test1217 test1218 test1219 \ test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \ test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \ test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \ test1244 test1245 test1246 test1247 test1248 test1249 test1250 test1251 \ test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 \ test1260 test1261 test1262 test1263 test1264 test1265 test1266 test1267 \ test1268 test1269 \ \ test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 \ test1288 test1289 test1290 test1291 test1292 \ test1298 test1299 \ test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 \ test1308 test1309 test1310 test1311 test1312 test1313 test1314 test1315 \ test1316 test1317 test1318 test1319 test1320 test1321 test1322 test1323 \ |
︙ | ︙ | |||
173 174 175 176 177 178 179 | \ test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \ test1533 test1534 test1535 test1536 test1537 test1538 \ test1540 test1541 \ test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \ test1558 test1559 test1560 test1561 test1562 test1563 \ \ | | | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | \ test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \ test1533 test1534 test1535 test1536 test1537 test1538 \ test1540 test1541 \ test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \ test1558 test1559 test1560 test1561 test1562 test1563 \ \ test1590 test1591 test1592 test1593 test1594 \ \ test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \ test1608 test1609 test1620 test1621 \ \ test1650 test1651 test1652 test1653 test1654 \ \ test1700 test1701 test1702 \ |
︙ | ︙ | |||
195 196 197 198 199 200 201 | test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \ test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \ test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \ test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \ test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \ test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \ test2064 test2065 test2066 test2067 test2068 test2069 \ | | > | 196 197 198 199 200 201 202 203 204 205 206 207 208 | test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \ test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \ test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \ test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \ test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \ test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \ test2064 test2065 test2066 test2067 test2068 test2069 \ test2071 test2072 test2073 test2074 test2075 test2076 test2077 \ test2078 \ test2080 \ test2100 \ \ test3000 test3001 |
Changes to jni/curl/tests/data/test1002.
︙ | ︙ | |||
97 98 99 100 101 102 103 104 105 106 107 108 109 110 | Content-Range: bytes 2-4/5 Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 Expect: 100-continue st GET http://%HOSTIP:%HTTPPORT/1002.upload2 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload2", response="d711f0d2042786d930de635ba0d1a1d0" Content-Range: bytes 2-4/5 User-Agent: curl/7.16.1 Accept: */* Proxy-Connection: Keep-Alive | > > > > > > > > | 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | Content-Range: bytes 2-4/5 Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 Expect: 100-continue st GET http://%HOSTIP:%HTTPPORT/1002.upload2 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Content-Range: bytes 2-4/5 User-Agent: curl/7.16.1 Accept: */* Proxy-Connection: Keep-Alive Content-Length: 0 GET http://%HOSTIP:%HTTPPORT/1002.upload2 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload2", response="d711f0d2042786d930de635ba0d1a1d0" Content-Range: bytes 2-4/5 User-Agent: curl/7.16.1 Accept: */* Proxy-Connection: Keep-Alive |
︙ | ︙ |
Changes to jni/curl/tests/data/test1135.
︙ | ︙ | |||
87 88 89 90 91 92 93 94 95 96 97 98 99 100 | CURL_EXTERN char *curl_maprintf(const char *format, ...); CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); CURL_EXTERN CURLM *curl_multi_init(void); CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, CURL_EXTERN const char *curl_multi_strerror(CURLMcode); CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, | > | 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | CURL_EXTERN char *curl_maprintf(const char *format, ...); CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); CURL_EXTERN CURLM *curl_multi_init(void); CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, CURL_EXTERN const char *curl_multi_strerror(CURLMcode); CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, |
︙ | ︙ |
Added jni/curl/tests/data/test1174.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <testcase> <info> <keywords> HTTP HTTP/0.9 </keywords> </info> # # Server-side <reply> <data> -foo- swsclose </data> <datacheck> </datacheck> </reply> # # Client-side <client> <server> http </server> <name> HTTP/0.9 GET response denied by default </name> <command> http://%HOSTIP:%HTTPPORT/1174 </command> </client> # # Verify data after the test has been "shot" <verify> <strip> ^User-Agent:.* </strip> <protocol> GET /1174 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* </protocol> # unsupported protocol <errorcode> 1 </errorcode> </verify> </testcase> |
Added jni/curl/tests/data/test1269.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <testcase> <info> <keywords> --retry-delay </keywords> </info> # # Server-side <reply> </reply> # # Client-side <client> <server> none </server> <name> too large --retry-delay value </name> <command> --retry 3 --retry-delay 9223372036854776 http://%HOSTIP:%HTTPPORT/1269 </command> </client> # # Verify data after the test has been "shot" <verify> <errorcode> 2 </errorcode> </verify> </testcase> |
Changes to jni/curl/tests/data/test1291.
︙ | ︙ | |||
17 18 19 20 21 22 23 | # Client-side <client> <server> none </server> <name> | | | < < < < < < | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | # Client-side <client> <server> none </server> <name> Attempt to upload 1000 files but fail immediately </name> <command> -K log/cmd1291 --fail-early </command> <file name="log/upload-this"> XXXXXXXx </file> # generate the config file <precheck> perl -e 'for(1 .. 1000) { printf("upload-file=log/upload-this\nurl=htttttp://non-existing-host.haxx.se/upload/1291\n", $_);}' > log/cmd1291; </precheck> </client> # Verify data after the test has been "shot" <verify> <errorcode> 1 </errorcode> </verify> </testcase> |
Changes to jni/curl/tests/data/test1401.
︙ | ︙ | |||
84 85 86 87 88 89 90 | curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1401"); curl_easy_setopt(hnd, CURLOPT_USERPWD, "fake:user"); curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_BASIC); curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, slist1); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "MyUA"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); | < | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1401"); curl_easy_setopt(hnd, CURLOPT_USERPWD, "fake:user"); curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_BASIC); curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, slist1); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "MyUA"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); curl_easy_setopt(hnd, CURLOPT_COOKIE, "chocolate=chip"); curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); curl_easy_setopt(hnd, CURLOPT_PROTOCOLS, (long)CURLPROTO_FILE | (long)CURLPROTO_FTP | (long)CURLPROTO_HTTP); |
︙ | ︙ |
Changes to jni/curl/tests/data/test1402.
︙ | ︙ | |||
76 77 78 79 80 81 82 | hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1402"); curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "foo=bar&baz=quux"); curl_easy_setopt(hnd, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)16); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); | < | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1402"); curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "foo=bar&baz=quux"); curl_easy_setopt(hnd, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)16); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); /* Here is a list of options the curl code used that cannot get generated as source easily. You may select to either not use them or implement them yourself. |
︙ | ︙ |
Changes to jni/curl/tests/data/test1403.
︙ | ︙ | |||
71 72 73 74 75 76 77 | CURL *hnd; hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1403?foo=bar&baz=quux"); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); | < | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | CURL *hnd; hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1403?foo=bar&baz=quux"); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); /* Here is a list of options the curl code used that cannot get generated as source easily. You may select to either not use them or implement them yourself. |
︙ | ︙ |
Changes to jni/curl/tests/data/test1404.
︙ | ︙ | |||
142 143 144 145 146 147 148 | slist1 = NULL; curl_mime_subparts(part1, mime2); mime2 = NULL; curl_mime_name(part1, "file"); curl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime1); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); | < | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | slist1 = NULL; curl_mime_subparts(part1, mime2); mime2 = NULL; curl_mime_name(part1, "file"); curl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime1); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); /* Here is a list of options the curl code used that cannot get generated as source easily. You may select to either not use them or implement them yourself. |
︙ | ︙ |
Changes to jni/curl/tests/data/test1406.
︙ | ︙ | |||
72 73 74 75 76 77 78 | slist1 = NULL; slist1 = curl_slist_append(slist1, "recipient.one@example.com"); slist1 = curl_slist_append(slist1, "recipient.two@example.com"); hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); | < > | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | slist1 = NULL; slist1 = curl_slist_append(slist1, "recipient.one@example.com"); slist1 = curl_slist_append(slist1, "recipient.two@example.com"); hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "smtp://%HOSTIP:%SMTPPORT/1406"); curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L); curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); curl_easy_setopt(hnd, CURLOPT_MAIL_FROM, "sender@example.com"); curl_easy_setopt(hnd, CURLOPT_MAIL_RCPT, slist1); curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, (curl_off_t)38); /* Here is a list of options the curl code used that cannot get generated as source easily. You may select to either not use them or implement them yourself. CURLOPT_WRITEDATA set to a objectpointer CURLOPT_WRITEFUNCTION set to a functionpointer |
︙ | ︙ |
Changes to jni/curl/tests/data/test1412.
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | WWW-Authenticate: Basic realm="gimme all yer s3cr3ts" WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344" Content-Type: text/html; charset=iso-8859-1 Connection: close This is not the real page </data> # This is supposed to be returned when the server gets a # Authorization: Digest line passed-in from the client <data1000> HTTP/1.1 200 OK swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 Content-Type: text/html; charset=iso-8859-1 | > > > > > > > > > > > > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | WWW-Authenticate: Basic realm="gimme all yer s3cr3ts" WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344" Content-Type: text/html; charset=iso-8859-1 Connection: close This is not the real page </data> # The second URL will get this response <data1> HTTP/1.1 401 Authorization Required swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts" WWW-Authenticate: Basic realm="gimme all yer s3cr3ts" WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344" Content-Type: text/html; charset=iso-8859-1 Connection: close This is not the real page </data1> # This is supposed to be returned when the server gets a # Authorization: Digest line passed-in from the client <data1000> HTTP/1.1 200 OK swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 Content-Type: text/html; charset=iso-8859-1 |
︙ | ︙ | |||
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | Accept: */* GET /1412 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1412", response="0390dbe89e31adca0413d11f91f30e7f" User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3 Accept: */* GET /14120001 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/14120001", response="0085df91870374c8bf4e94415e7fbf8e" User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3 Accept: */* </protocol> </verify> </testcase> | > > > > > | 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | Accept: */* GET /1412 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1412", response="0390dbe89e31adca0413d11f91f30e7f" User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3 Accept: */* GET /14120001 HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3 Accept: */* GET /14120001 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/14120001", response="0085df91870374c8bf4e94415e7fbf8e" User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3 Accept: */* </protocol> </verify> </testcase> |
Changes to jni/curl/tests/data/test1418.
︙ | ︙ | |||
18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Content-Length: 20 WWW-Authenticate: Digest realm="loonie", nonce="314156592" WWW-Authenticate: Basic Please auth with me </data> # This is supposed to be returned when the server gets the second # Authorization: NTLM line passed-in from the client <data1000> HTTP/1.1 200 Things are fine in server land Server: Microsoft-IIS/5.0 Content-Length: 4 | > > > > > > > > > | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | Content-Length: 20 WWW-Authenticate: Digest realm="loonie", nonce="314156592" WWW-Authenticate: Basic Please auth with me </data> <data3> HTTP/1.1 401 Authentication please! Content-Length: 20 WWW-Authenticate: Digest realm="loonie", nonce="314156592" WWW-Authenticate: Basic Please auth with me </data3> # This is supposed to be returned when the server gets the second # Authorization: NTLM line passed-in from the client <data1000> HTTP/1.1 200 Things are fine in server land Server: Microsoft-IIS/5.0 Content-Length: 4 |
︙ | ︙ | |||
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | Host: %HOSTIP:%HTTPPORT Accept: */* GET /1418 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/1418", response="986238b7e0077754944c966f56d9bc77" Accept: */* GET /14180003 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/14180003", response="1c6390a67bac3283a9b023402f3b3540" Accept: */* [DISCONNECT] </protocol> </verify> </testcase> | > > > > | 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | Host: %HOSTIP:%HTTPPORT Accept: */* GET /1418 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/1418", response="986238b7e0077754944c966f56d9bc77" Accept: */* GET /14180003 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* GET /14180003 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/14180003", response="1c6390a67bac3283a9b023402f3b3540" Accept: */* [DISCONNECT] </protocol> </verify> </testcase> |
Changes to jni/curl/tests/data/test1420.
︙ | ︙ | |||
62 63 64 65 66 67 68 | CURLcode ret; CURL *hnd; hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "imap://%HOSTIP:%IMAPPORT/1420/;MAILINDEX=1"); curl_easy_setopt(hnd, CURLOPT_USERPWD, "user:secret"); | < | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | CURLcode ret; CURL *hnd; hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "imap://%HOSTIP:%IMAPPORT/1420/;MAILINDEX=1"); curl_easy_setopt(hnd, CURLOPT_USERPWD, "user:secret"); curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); /* Here is a list of options the curl code used that cannot get generated as source easily. You may select to either not use them or implement them yourself. |
︙ | ︙ |
Changes to jni/curl/tests/data/test1514.
1 2 3 4 5 6 7 8 9 10 11 12 | <testcase> <info> <keywords> HTTP HTTP POST Content-Length </keywords> </info> # Server-side <reply> <data nocheck="yes"> | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <testcase> <info> <keywords> HTTP HTTP POST Content-Length chunked Transfer-Encoding </keywords> </info> # Server-side <reply> <data nocheck="yes"> HTTP/1.1 200 OK Date: Sun, 19 Jan 2014 18:50:58 GMT Server: test-server/fake swsclose Connection: close </data> </reply> # Client-side |
︙ | ︙ | |||
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | http://%HOSTIP:%HTTPPORT/1514 </command> </client> # Verify data after the test has been "shot" <verify> # Content-Length header is not present <protocol> POST /1514 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* Content-Type: application/x-www-form-urlencoded Expect: 100-continue </protocol> </verify> </testcase> | > > > > > > > > > > > > > > | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | http://%HOSTIP:%HTTPPORT/1514 </command> </client> # Verify data after the test has been "shot" <verify> # Content-Length header is not present # Transfer-Encoding header is added automatically <protocol> POST /1514 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* Transfer-Encoding: chunked Content-Type: application/x-www-form-urlencoded Expect: 100-continue 1 d 1 u 1 m 1 m 1 y 0 </protocol> </verify> </testcase> |
Changes to jni/curl/tests/data/test153.
1 2 3 4 5 6 7 8 9 10 11 | <testcase> <info> <keywords> HTTP HTTP GET HTTP Digest auth </keywords> </info> # Server-side <reply> | | > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <testcase> <info> <keywords> HTTP HTTP GET HTTP Digest auth </keywords> </info> # Server-side <reply> # First reply back and ask for Digest auth <data1> HTTP/1.1 401 Authorization Required swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 WWW-Authenticate: Digest realm="testrealm", nonce="1053604145" Content-Type: text/html; charset=iso-8859-1 Content-Length: 26 This is not the real page </data1> # second reply back <data2> HTTP/1.1 401 Authorization Required swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 WWW-Authenticate: Digest realm="testrealm", nonce="1053604145" Content-Type: text/html; charset=iso-8859-1 Content-Length: 26 This is not the real page </data2> # This is supposed to be returned when the server gets a # Authorization: Digest line passed-in from the client <data1001> HTTP/1.1 200 OK Server: Apache/1.3.27 (Darwin) PHP/4.1.2 Content-Type: text/html; charset=iso-8859-1 |
︙ | ︙ | |||
86 87 88 89 90 91 92 93 94 95 96 97 98 99 | Accept: */* GET /1530001 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530001", response="f4f83139396995bac665f24a1f1055c7" User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3 Accept: */* GET /1530002 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530002", response="f84511b014fdd0ba6494f42871079c32" User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS Accept: */* | > > > > > | 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | Accept: */* GET /1530001 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530001", response="f4f83139396995bac665f24a1f1055c7" User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3 Accept: */* GET /1530002 HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS Accept: */* GET /1530002 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530002", response="f84511b014fdd0ba6494f42871079c32" User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS Accept: */* |
︙ | ︙ | |||
113 114 115 116 117 118 119 120 121 122 123 124 125 126 | HTTP/1.1 200 OK Server: Apache/1.3.27 (Darwin) PHP/4.1.2 Content-Type: text/html; charset=iso-8859-1 Content-Length: 23 This IS the real page! HTTP/1.1 401 Authorization re-negotiation please swsbounce Server: Apache/1.3.27 (Darwin) PHP/4.1.2 WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, nonce="999999", stale=true, qop="auth" Content-Type: text/html; charset=iso-8859-1 Content-Length: 26 HTTP/1.1 200 OK | > > > > > > | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | HTTP/1.1 200 OK Server: Apache/1.3.27 (Darwin) PHP/4.1.2 Content-Type: text/html; charset=iso-8859-1 Content-Length: 23 This IS the real page! HTTP/1.1 401 Authorization Required swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 WWW-Authenticate: Digest realm="testrealm", nonce="1053604145" Content-Type: text/html; charset=iso-8859-1 Content-Length: 26 HTTP/1.1 401 Authorization re-negotiation please swsbounce Server: Apache/1.3.27 (Darwin) PHP/4.1.2 WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, nonce="999999", stale=true, qop="auth" Content-Type: text/html; charset=iso-8859-1 Content-Length: 26 HTTP/1.1 200 OK |
︙ | ︙ |
Changes to jni/curl/tests/data/test1538.
︙ | ︙ | |||
122 123 124 125 126 127 128 | e87: Unable to parse FTP file list e88: Chunk callback failed e89: The max connection limit is reached e90: SSL public key does not match pinned public key e91: SSL server certificate status verification FAILED e92: Stream error in the HTTP/2 framing layer e93: API function called from within callback | > | | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | e87: Unable to parse FTP file list e88: Chunk callback failed e89: The max connection limit is reached e90: SSL public key does not match pinned public key e91: SSL server certificate status verification FAILED e92: Stream error in the HTTP/2 framing layer e93: API function called from within callback e94: An authentication function returned an error e95: Unknown error m-1: Please call curl_multi_perform() soon m0: No error m1: Invalid multi handle m2: Invalid easy handle m3: Out of memory m4: Internal error m5: Invalid socket argument |
︙ | ︙ |
Added jni/curl/tests/data/test1594.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <testcase> <info> <keywords> HTTP HTTP GET HTTP replaced headers CURLOPT_TIMECONDITION If-Modified-Since </keywords> </info> # Server-side <reply> <data nocheck="yes"> HTTP/1.1 503 Error Date: Thu, 11 Jul 2019 02:26:59 GMT Server: test-server/swsclose Retry-After: 22 </data> </reply> # Client-side <client> <server> http </server> <name> HTTP Retry-After header parsing and extraction </name> <tool> lib1594 </tool> <command> http://%HOSTIP:%HTTPPORT/1594 </command> </client> <verify> <strip> ^User-Agent:.* </strip> <protocol> GET /1594 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* </protocol> <stdout> Retry-After: 22 </stdout> </verify> </testcase> |
Changes to jni/curl/tests/data/test1654.
︙ | ︙ | |||
28 29 30 31 32 33 34 | </command> <tool> unit1654 </tool> <file name="log/1654" mode="text"> h2 example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1 # a comment | | | | | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | </command> <tool> unit1654 </tool> <file name="log/1654" mode="text"> h2 example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1 # a comment h2 foo.example.com 443 h3 shiny.example.com 8443 "20291231 23:30:00" 0 1 h1 example.com 443 h3 shiny.example.com 8443 "20121231 00:00:01" 0 1 h3 example.com 443 h3 shiny.example.com 8443 "20131231 00:00:00" 0 1 # also a comment bad example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1 rubbish </file> </client> <verify> <file name="log/1654-out" mode="text"> # Your alt-svc cache. https://curl.haxx.se/docs/alt-svc.html # This file was generated by libcurl! Edit at your own risk. h2 example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1 h2 foo.example.com 443 h3 shiny.example.com 8443 "20291231 23:30:00" 0 1 h1 example.com 443 h3 shiny.example.com 8443 "20121231 00:00:01" 0 1 h3 example.com 443 h3 shiny.example.com 8443 "20131231 00:00:00" 0 1 h1 example.org 8080 h2 example.com 8080 "20190125 22:34:21" 0 0 h1 2.example.org 8080 h3 2.example.org 8080 "20190125 22:34:21" 0 0 h1 3.example.org 8080 h2 example.com 8080 "20190125 22:34:21" 0 0 h1 3.example.org 8080 h3 yesyes.com 8080 "20190125 22:34:21" 0 0 h2 example.org 80 h2 example.com 443 "20190124 22:36:21" 0 0 </file> </verify> </testcase> |
Changes to jni/curl/tests/data/test2006.
︙ | ︙ | |||
82 83 84 85 86 87 88 | Accept: */* </protocol> <file1 name="log/download2006"> Some data delivered from an HTTP resource </file1> <file2 name="log/heads2006"> | < < < < | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | Accept: */* </protocol> <file1 name="log/download2006"> Some data delivered from an HTTP resource </file1> <file2 name="log/heads2006"> HTTP/1.1 200 OK Date: Thu, 21 Jun 2012 14:49:01 GMT Server: test-server/fake Content-Length: 42 Connection: close Content-Type: text/html Content-Disposition: filename=name2006; charset=funny; option=strange |
︙ | ︙ |
Changes to jni/curl/tests/data/test2007.
︙ | ︙ | |||
86 87 88 89 90 91 92 | <file1 name="log/download2007"> Something delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2007"> | < < < < | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | <file1 name="log/download2007"> Something delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2007"> HTTP/1.1 200 OK Date: Thu, 21 Jun 2012 14:50:02 GMT Server: test-server/fake Content-Length: 42 Connection: close Content-Type: text/html Content-Disposition: filename=name2007; charset=funny; option=strange |
︙ | ︙ |
Changes to jni/curl/tests/data/test2008.
︙ | ︙ | |||
78 79 80 81 82 83 84 | <file1 name="log/download2008"> Some stuff delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2008"> | < < < < | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | <file1 name="log/download2008"> Some stuff delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2008"> HTTP/1.1 200 OK Date: Thu, 21 Jun 2012 15:23:48 GMT Server: test-server/fake Content-Length: 43 Connection: close Content-Type: text/html Content-Disposition: filename=name2008; charset=funny; option=strange |
︙ | ︙ |
Changes to jni/curl/tests/data/test2009.
︙ | ︙ | |||
79 80 81 82 83 84 85 | <file1 name="log/download2009"> Some contents delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2009"> | < < < < | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | <file1 name="log/download2009"> Some contents delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2009"> HTTP/1.1 200 OK Date: Thu, 21 Jun 2012 16:27:17 GMT Server: test-server/fake Content-Length: 46 Connection: close Content-Type: text/html Content-Disposition: filename=name2009; charset=funny; option=strange |
︙ | ︙ |
Changes to jni/curl/tests/data/test2010.
︙ | ︙ | |||
78 79 80 81 82 83 84 | <file1 name="log/download2010"> Contents delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2010"> | < < < < | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | <file1 name="log/download2010"> Contents delivered from an HTTP resource </file1> <stripfile2> s/Last-Modified:.*// </stripfile2> <file2 name="log/heads2010"> HTTP/1.1 200 OK Date: Thu, 21 Jun 2012 17:37:27 GMT Server: test-server/fake Content-Length: 41 Connection: close Content-Type: text/html Content-Disposition: filename=name2010; charset=funny; option=strange |
︙ | ︙ |
Changes to jni/curl/tests/data/test2047.
︙ | ︙ | |||
88 89 90 91 92 93 94 | Content-Length: 3 Content-Type: text/plain; charset=us-ascii OK 1 1 3 | | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | Content-Length: 3 Content-Type: text/plain; charset=us-ascii OK 1 1 3 http://åäö.se/20470001 text/plain; charset=us-ascii 200 </stdout> </verify> </testcase> |
Added jni/curl/tests/data/test2077.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <testcase> <info> <keywords> HTTP HTTP GET GSS-API </keywords> </info> # Server-side <reply> <data> HTTP/1.1 200 OK swsclose Content-Length: 23 This IS the real page! </data> </reply> # Client-side <client> <server> http </server> <features> GSS-API </features> <name> curl --fail --negotiate to unauthenticated service fails </name> <command> http://%HOSTIP:%HTTPPORT/2077 -u : --fail --negotiate </command> </client> # Verify data after the test has been "shot" <verify> <errorcode> 0 </errorcode> </verify> </testcase> |
Added jni/curl/tests/data/test2078.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <testcase> <info> <keywords> HTTP HTTP GET GSS-API </keywords> </info> # Server-side <reply> <data> HTTP/1.1 200 OK swsclose Content-Length: 23 This IS the real page! </data> </reply> # Client-side <client> <server> http </server> <features> GSS-API </features> <name> curl --negotiate should not send empty POST request only </name> <command> http://%HOSTIP:%HTTPPORT/2078 -u : --negotiate --data name=value </command> </client> # Verify data after the test has been "shot" <verify> <errorcode> 0 </errorcode> <strip> ^User-Agent:.* </strip> <protocol nonewline="yes"> POST /2078 HTTP/1.1 Host: 127.0.0.1:8990 Accept: */* Content-Length: 10 Content-Type: application/x-www-form-urlencoded name=value </protocol> </verify> </testcase> |
Added jni/curl/tests/data/test335.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | # Mostly a duplicate of test168 <testcase> <info> <keywords> HTTP HTTP GET HTTP proxy HTTP proxy Digest auth HTTP Digest auth HTTP auth in URL </keywords> </info> # Server-side <reply> # this is returned first since we get no proxy-auth <data> HTTP/1.1 407 Authorization Required to proxy me my dear swsclose Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345" And you should ignore this data. </data> # then this is returned since we get no server-auth <data1000> HTTP/1.1 401 Authorization to the remote host as well swsbounce swsclose WWW-Authenticate: Digest realm="realmweirdo", nonce="123456" you should ignore this data too </data1000> <data1001> HTTP/1.1 200 OK swsclose Server: no Content-Length: 15 Nice auth sir! </data1001> <datacheck> HTTP/1.1 407 Authorization Required to proxy me my dear swsclose Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345" HTTP/1.1 401 Authorization to the remote host as well swsbounce swsclose WWW-Authenticate: Digest realm="realmweirdo", nonce="123456" HTTP/1.1 200 OK swsclose Server: no Content-Length: 15 Nice auth sir! </datacheck> </reply> # Client-side <client> <server> http </server> <features> !SSPI crypto </features> <name> HTTP with proxy Digest and site Digest with creds in URLs </name> <command> http://digest:alot@data.from.server.requiring.digest.hohoho.com/335 --proxy http://foo:bar@%HOSTIP:%HTTPPORT --proxy-digest --digest </command> </client> # Verify data after the test has been "shot" <verify> <strip> ^User-Agent: curl/.* </strip> <protocol> GET http://data.from.server.requiring.digest.hohoho.com/335 HTTP/1.1 Host: data.from.server.requiring.digest.hohoho.com User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3 Accept: */* Proxy-Connection: Keep-Alive GET http://data.from.server.requiring.digest.hohoho.com/335 HTTP/1.1 Host: data.from.server.requiring.digest.hohoho.com Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/335", response="f61609cd8f5bb205ef4e169b2c5626cb" User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3 Accept: */* Proxy-Connection: Keep-Alive GET http://data.from.server.requiring.digest.hohoho.com/335 HTTP/1.1 Host: data.from.server.requiring.digest.hohoho.com Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/335", response="f61609cd8f5bb205ef4e169b2c5626cb" Authorization: Digest username="digest", realm="realmweirdo", nonce="123456", uri="/335", response="08a2e2e684047f4219a38ddc189ac00c" User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3 Accept: */* Proxy-Connection: Keep-Alive </protocol> </verify> </testcase> |
Changes to jni/curl/tests/data/test356.
︙ | ︙ | |||
12 13 14 15 16 17 18 | <data> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:00 GMT Content-Length: 6 Connection: close Content-Type: text/html Funny-head: yesyes | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <data> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:00 GMT Content-Length: 6 Connection: close Content-Type: text/html Funny-head: yesyes Alt-Svc: h1="nowhere.foo:81", un-kno22!wn=":82" -foo- </data> </reply> # # Client-side |
︙ | ︙ |
Added jni/curl/tests/data/test848.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <testcase> <info> <keywords> IMAP SASL SASL AUTH PLAIN RFC4616 </keywords> </info> # # Server-side <reply> <servercmd> AUTH PLAIN REPLY AUTHENTICATE + REPLY c2hhcmVkLW1haWxib3gAdXNlcgBzZWNyZXQ= A002 OK AUTHENTICATE completed </servercmd> <data> From: me@somewhere To: fake@nowhere body -- yours sincerely </data> </reply> # # Client-side <client> <server> imap </server> <name> IMAP plain authentication with alternative authorization identity </name> <command> 'imap://%HOSTIP:%IMAPPORT/848/;MAILINDEX=1' -u user:secret --sasl-authzid shared-mailbox </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> A001 CAPABILITY A002 AUTHENTICATE PLAIN c2hhcmVkLW1haWxib3gAdXNlcgBzZWNyZXQ= A003 SELECT 848 A004 FETCH 1 BODY[] A005 LOGOUT </protocol> </verify> </testcase> |
Added jni/curl/tests/data/test849.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <testcase> <info> <keywords> IMAP SASL SASL AUTH PLAIN RFC4616 </keywords> </info> # # Server-side <reply> <servercmd> AUTH PLAIN REPLY AUTHENTICATE + REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= A002 NO Not authorized </servercmd> </reply> # # Client-side <client> <server> imap </server> <name> IMAP plain authentication with alternative authorization identity (Not authorized) </name> <command> 'imap://%HOSTIP:%IMAPPORT/849/;MAILINDEX=1' -u kurt:xipj3plmq --sasl-authzid ursel </command> </client> # # Verify data after the test has been "shot" <verify> # 67 - CURLE_LOGIN_DENIED <errorcode> 67 </errorcode> # # The multi interface considers a broken "CONNECT" as a prematurely broken # transfer and such a connection will not get a "LOGOUT" <protocol> A001 CAPABILITY A002 AUTHENTICATE PLAIN dXJzZWwAa3VydAB4aXBqM3BsbXE= </protocol> </verify> </testcase> |
Added jni/curl/tests/data/test892.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <testcase> <info> <keywords> POP3 SASL SASL AUTH PLAIN RFC1734 RFC4616 RFC5034 </keywords> </info> # # Server-side <reply> <servercmd> AUTH PLAIN REPLY AUTH + REPLY c2hhcmVkLW1haWxib3gAdXNlcgBzZWNyZXQ= +OK Login successful </servercmd> <data> From: me@somewhere To: fake@nowhere body -- yours sincerely </data> </reply> # # Client-side <client> <server> pop3 </server> <name> POP3 plain authentication with alternative authorization identity </name> <command> pop3://%HOSTIP:%POP3PORT/892 -u user:secret --sasl-authzid shared-mailbox </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> CAPA AUTH PLAIN c2hhcmVkLW1haWxib3gAdXNlcgBzZWNyZXQ= RETR 892 QUIT </protocol> </verify> </testcase> |
Added jni/curl/tests/data/test893.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <testcase> <info> <keywords> POP3 SASL SASL AUTH PLAIN RFC1734 RFC4616 RFC5034 </keywords> </info> # # Server-side <reply> <servercmd> AUTH PLAIN REPLY AUTH + REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= -ERR Not authorized </servercmd> </reply> # # Client-side <client> <server> pop3 </server> <name> POP3 plain authentication with alternative authorization identity (Not authorized) </name> <command> pop3://%HOSTIP:%POP3PORT/893 -u kurt:xipj3plmq --sasl-authzid ursel </command> </client> # # Verify data after the test has been "shot" <verify> # 67 - CURLE_LOGIN_DENIED <errorcode> 67 </errorcode> # # The multi interface considers a broken "CONNECT" as a prematurely broken # transfer and such a connection will not get a "QUIT" <protocol> CAPA AUTH PLAIN dXJzZWwAa3VydAB4aXBqM3BsbXE= </protocol> </verify> </testcase> |
Added jni/curl/tests/data/test953.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <testcase> <info> <keywords> SMTP SASL SASL AUTH PLAIN RFC4616 RFC4954 </keywords> </info> # # Server-side <reply> <servercmd> AUTH PLAIN REPLY AUTH 334 PLAIN supported REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= 235 Authenticated </servercmd> </reply> # # Client-side <client> <server> smtp </server> <name> SMTP plain authentication with alternative authorization identity </name> <stdin> mail body </stdin> <command> smtp://%HOSTIP:%SMTPPORT/953 --mail-rcpt recipient@example.com --mail-from sender@example.com -u kurt:xipj3plmq --sasl-authzid ursel -T - </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> EHLO 953 AUTH PLAIN dXJzZWwAa3VydAB4aXBqM3BsbXE= MAIL FROM:<sender@example.com> RCPT TO:<recipient@example.com> DATA QUIT </protocol> <upload> mail body . </upload> </verify> </testcase> |
Added jni/curl/tests/data/test954.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <testcase> <info> <keywords> SMTP SASL SASL AUTH PLAIN RFC4616 RFC4954 </keywords> </info> # # Server-side <reply> <servercmd> AUTH PLAIN REPLY AUTH 334 PLAIN supported REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= 501 Not authorized </servercmd> </reply> # # Client-side <client> <server> smtp </server> <name> SMTP plain authentication with alternative authorization identity (Not authorized) </name> <stdin> mail body </stdin> <command> smtp://%HOSTIP:%SMTPPORT/954 --mail-rcpt recipient@example.com --mail-from sender@example.com -u kurt:xipj3plmq --sasl-authzid ursel -T - </command> </client> # # Verify data after the test has been "shot" <verify> # 67 - CURLE_LOGIN_DENIED <errorcode> 67 </errorcode> # # The multi interface considers a broken "CONNECT" as a prematurely broken # transfer and such a connection will not get a "QUIT" <protocol> EHLO 954 AUTH PLAIN dXJzZWwAa3VydAB4aXBqM3BsbXE= </protocol> </verify> </testcase> |
Changes to jni/curl/tests/libtest/Makefile.in.
︙ | ︙ | |||
134 135 136 137 138 139 140 | lib1533$(EXEEXT) lib1534$(EXEEXT) lib1535$(EXEEXT) \ lib1536$(EXEEXT) lib1537$(EXEEXT) lib1538$(EXEEXT) \ lib1540$(EXEEXT) lib1541$(EXEEXT) lib1550$(EXEEXT) \ lib1551$(EXEEXT) lib1552$(EXEEXT) lib1553$(EXEEXT) \ lib1554$(EXEEXT) lib1555$(EXEEXT) lib1556$(EXEEXT) \ lib1557$(EXEEXT) lib1558$(EXEEXT) lib1559$(EXEEXT) \ lib1560$(EXEEXT) lib1591$(EXEEXT) lib1592$(EXEEXT) \ | > | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | lib1533$(EXEEXT) lib1534$(EXEEXT) lib1535$(EXEEXT) \ lib1536$(EXEEXT) lib1537$(EXEEXT) lib1538$(EXEEXT) \ lib1540$(EXEEXT) lib1541$(EXEEXT) lib1550$(EXEEXT) \ lib1551$(EXEEXT) lib1552$(EXEEXT) lib1553$(EXEEXT) \ lib1554$(EXEEXT) lib1555$(EXEEXT) lib1556$(EXEEXT) \ lib1557$(EXEEXT) lib1558$(EXEEXT) lib1559$(EXEEXT) \ lib1560$(EXEEXT) lib1591$(EXEEXT) lib1592$(EXEEXT) \ lib1593$(EXEEXT) lib1594$(EXEEXT) lib1596$(EXEEXT) \ lib1900$(EXEEXT) lib1905$(EXEEXT) lib1906$(EXEEXT) \ lib2033$(EXEEXT) @USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB @CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_2 = -no-undefined @CURL_LT_SHLIB_USE_MIMPURE_TEXT_TRUE@am__append_3 = -mimpure-text @DOING_CURL_SYMBOL_HIDING_TRUE@am__append_4 = -DCURL_HIDDEN_SYMBOLS @DOING_CURL_SYMBOL_HIDING_TRUE@am__append_5 = $(CFLAG_CURL_SYMBOL_HIDING) # Build a stub gssapi implementation for testing |
︙ | ︙ | |||
549 550 551 552 553 554 555 | $(am__objects_128) $(am__objects_129) lib1592_OBJECTS = $(am_lib1592_OBJECTS) lib1592_DEPENDENCIES = $(am__DEPENDENCIES_1) am_lib1593_OBJECTS = lib1593.$(OBJEXT) $(am__objects_121) \ $(am__objects_122) $(am__objects_123) lib1593_OBJECTS = $(am_lib1593_OBJECTS) lib1593_DEPENDENCIES = $(am__DEPENDENCIES_1) | > > > > | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 | $(am__objects_128) $(am__objects_129) lib1592_OBJECTS = $(am_lib1592_OBJECTS) lib1592_DEPENDENCIES = $(am__DEPENDENCIES_1) am_lib1593_OBJECTS = lib1593.$(OBJEXT) $(am__objects_121) \ $(am__objects_122) $(am__objects_123) lib1593_OBJECTS = $(am_lib1593_OBJECTS) lib1593_DEPENDENCIES = $(am__DEPENDENCIES_1) am_lib1594_OBJECTS = lib1594.$(OBJEXT) $(am__objects_121) \ $(am__objects_122) $(am__objects_123) lib1594_OBJECTS = $(am_lib1594_OBJECTS) lib1594_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_130 = lib1596-first.$(OBJEXT) am__objects_131 = lib1596-testutil.$(OBJEXT) am__objects_132 = ../../lib/lib1596-warnless.$(OBJEXT) am_lib1596_OBJECTS = lib1596-lib1594.$(OBJEXT) $(am__objects_130) \ $(am__objects_131) $(am__objects_132) lib1596_OBJECTS = $(am_lib1596_OBJECTS) lib1596_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_133 = lib1900-first.$(OBJEXT) am__objects_134 = lib1900-testutil.$(OBJEXT) am__objects_135 = ../../lib/lib1900-warnless.$(OBJEXT) am_lib1900_OBJECTS = lib1900-lib1900.$(OBJEXT) $(am__objects_133) \ $(am__objects_134) $(am__objects_135) lib1900_OBJECTS = $(am_lib1900_OBJECTS) lib1900_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_136 = lib1905-first.$(OBJEXT) am__objects_137 = lib1905-testutil.$(OBJEXT) am__objects_138 = ../../lib/lib1905-warnless.$(OBJEXT) am_lib1905_OBJECTS = lib1905-lib1905.$(OBJEXT) $(am__objects_136) \ $(am__objects_137) $(am__objects_138) lib1905_OBJECTS = $(am_lib1905_OBJECTS) lib1905_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_139 = lib1906-first.$(OBJEXT) am__objects_140 = lib1906-testutil.$(OBJEXT) am__objects_141 = ../../lib/lib1906-warnless.$(OBJEXT) am_lib1906_OBJECTS = lib1906-lib1906.$(OBJEXT) $(am__objects_139) \ $(am__objects_140) $(am__objects_141) lib1906_OBJECTS = $(am_lib1906_OBJECTS) lib1906_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_142 = lib2033-first.$(OBJEXT) am__objects_143 = lib2033-testutil.$(OBJEXT) am__objects_144 = ../../lib/lib2033-warnless.$(OBJEXT) am_lib2033_OBJECTS = lib2033-libntlmconnect.$(OBJEXT) \ $(am__objects_142) $(am__objects_143) $(am__objects_144) lib2033_OBJECTS = $(am_lib2033_OBJECTS) lib2033_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_145 = lib500-first.$(OBJEXT) am__objects_146 = lib500-testutil.$(OBJEXT) am__objects_147 = lib500-testtrace.$(OBJEXT) am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_145) \ $(am__objects_146) $(am__objects_147) lib500_OBJECTS = $(am_lib500_OBJECTS) lib500_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_148 = lib501-first.$(OBJEXT) am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_148) lib501_OBJECTS = $(am_lib501_OBJECTS) lib501_LDADD = $(LDADD) lib501_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_149 = lib502-first.$(OBJEXT) am__objects_150 = lib502-testutil.$(OBJEXT) am__objects_151 = ../../lib/lib502-warnless.$(OBJEXT) am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_149) \ $(am__objects_150) $(am__objects_151) lib502_OBJECTS = $(am_lib502_OBJECTS) lib502_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_152 = lib503-first.$(OBJEXT) am__objects_153 = lib503-testutil.$(OBJEXT) am__objects_154 = ../../lib/lib503-warnless.$(OBJEXT) am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_152) \ $(am__objects_153) $(am__objects_154) lib503_OBJECTS = $(am_lib503_OBJECTS) lib503_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_155 = lib504-first.$(OBJEXT) am__objects_156 = lib504-testutil.$(OBJEXT) am__objects_157 = ../../lib/lib504-warnless.$(OBJEXT) am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_155) \ $(am__objects_156) $(am__objects_157) lib504_OBJECTS = $(am_lib504_OBJECTS) lib504_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_158 = lib505-first.$(OBJEXT) am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_158) lib505_OBJECTS = $(am_lib505_OBJECTS) lib505_LDADD = $(LDADD) lib505_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_159 = lib506-first.$(OBJEXT) am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_159) lib506_OBJECTS = $(am_lib506_OBJECTS) lib506_LDADD = $(LDADD) lib506_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_160 = lib507-first.$(OBJEXT) am__objects_161 = lib507-testutil.$(OBJEXT) am__objects_162 = ../../lib/lib507-warnless.$(OBJEXT) am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_160) \ $(am__objects_161) $(am__objects_162) lib507_OBJECTS = $(am_lib507_OBJECTS) lib507_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_163 = lib508-first.$(OBJEXT) am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_163) lib508_OBJECTS = $(am_lib508_OBJECTS) lib508_LDADD = $(LDADD) lib508_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_164 = lib509-first.$(OBJEXT) am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_164) lib509_OBJECTS = $(am_lib509_OBJECTS) lib509_LDADD = $(LDADD) lib509_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_165 = lib510-first.$(OBJEXT) am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_165) lib510_OBJECTS = $(am_lib510_OBJECTS) lib510_LDADD = $(LDADD) lib510_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_166 = lib511-first.$(OBJEXT) am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_166) lib511_OBJECTS = $(am_lib511_OBJECTS) lib511_LDADD = $(LDADD) lib511_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_167 = lib512-first.$(OBJEXT) am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_167) lib512_OBJECTS = $(am_lib512_OBJECTS) lib512_LDADD = $(LDADD) lib512_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_168 = lib513-first.$(OBJEXT) am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_168) lib513_OBJECTS = $(am_lib513_OBJECTS) lib513_LDADD = $(LDADD) lib513_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_169 = lib514-first.$(OBJEXT) am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_169) lib514_OBJECTS = $(am_lib514_OBJECTS) lib514_LDADD = $(LDADD) lib514_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_170 = lib515-first.$(OBJEXT) am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_170) lib515_OBJECTS = $(am_lib515_OBJECTS) lib515_LDADD = $(LDADD) lib515_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_171 = lib516-first.$(OBJEXT) am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_171) lib516_OBJECTS = $(am_lib516_OBJECTS) lib516_LDADD = $(LDADD) lib516_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_172 = lib517-first.$(OBJEXT) am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_172) lib517_OBJECTS = $(am_lib517_OBJECTS) lib517_LDADD = $(LDADD) lib517_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_173 = lib518-first.$(OBJEXT) am__objects_174 = ../../lib/lib518-warnless.$(OBJEXT) am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_173) \ $(am__objects_174) lib518_OBJECTS = $(am_lib518_OBJECTS) lib518_LDADD = $(LDADD) lib518_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_175 = lib519-first.$(OBJEXT) am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_175) lib519_OBJECTS = $(am_lib519_OBJECTS) lib519_LDADD = $(LDADD) lib519_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_176 = lib520-first.$(OBJEXT) am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_176) lib520_OBJECTS = $(am_lib520_OBJECTS) lib520_LDADD = $(LDADD) lib520_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_177 = lib521-first.$(OBJEXT) am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_177) lib521_OBJECTS = $(am_lib521_OBJECTS) lib521_LDADD = $(LDADD) lib521_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_178 = lib523-first.$(OBJEXT) am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_178) lib523_OBJECTS = $(am_lib523_OBJECTS) lib523_LDADD = $(LDADD) lib523_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_179 = lib524-first.$(OBJEXT) am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_179) lib524_OBJECTS = $(am_lib524_OBJECTS) lib524_LDADD = $(LDADD) lib524_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_180 = lib525-first.$(OBJEXT) am__objects_181 = lib525-testutil.$(OBJEXT) am__objects_182 = ../../lib/lib525-warnless.$(OBJEXT) am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_180) \ $(am__objects_181) $(am__objects_182) lib525_OBJECTS = $(am_lib525_OBJECTS) lib525_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_183 = lib526-first.$(OBJEXT) am__objects_184 = lib526-testutil.$(OBJEXT) am__objects_185 = ../../lib/lib526-warnless.$(OBJEXT) am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_183) \ $(am__objects_184) $(am__objects_185) lib526_OBJECTS = $(am_lib526_OBJECTS) lib526_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_186 = lib527-first.$(OBJEXT) am__objects_187 = lib527-testutil.$(OBJEXT) am__objects_188 = ../../lib/lib527-warnless.$(OBJEXT) am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_186) \ $(am__objects_187) $(am__objects_188) lib527_OBJECTS = $(am_lib527_OBJECTS) lib527_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_189 = lib529-first.$(OBJEXT) am__objects_190 = lib529-testutil.$(OBJEXT) am__objects_191 = ../../lib/lib529-warnless.$(OBJEXT) am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_189) \ $(am__objects_190) $(am__objects_191) lib529_OBJECTS = $(am_lib529_OBJECTS) lib529_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_192 = lib530-first.$(OBJEXT) am__objects_193 = lib530-testutil.$(OBJEXT) am__objects_194 = ../../lib/lib530-warnless.$(OBJEXT) am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_192) \ $(am__objects_193) $(am__objects_194) lib530_OBJECTS = $(am_lib530_OBJECTS) lib530_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_195 = lib532-first.$(OBJEXT) am__objects_196 = lib532-testutil.$(OBJEXT) am__objects_197 = ../../lib/lib532-warnless.$(OBJEXT) am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_195) \ $(am__objects_196) $(am__objects_197) lib532_OBJECTS = $(am_lib532_OBJECTS) lib532_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_198 = lib533-first.$(OBJEXT) am__objects_199 = lib533-testutil.$(OBJEXT) am__objects_200 = ../../lib/lib533-warnless.$(OBJEXT) am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_198) \ $(am__objects_199) $(am__objects_200) lib533_OBJECTS = $(am_lib533_OBJECTS) lib533_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_201 = lib537-first.$(OBJEXT) am__objects_202 = ../../lib/lib537-warnless.$(OBJEXT) am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_201) \ $(am__objects_202) lib537_OBJECTS = $(am_lib537_OBJECTS) lib537_LDADD = $(LDADD) lib537_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_203 = lib539-first.$(OBJEXT) am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_203) lib539_OBJECTS = $(am_lib539_OBJECTS) lib539_LDADD = $(LDADD) lib539_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_204 = lib540-first.$(OBJEXT) am__objects_205 = lib540-testutil.$(OBJEXT) am__objects_206 = ../../lib/lib540-warnless.$(OBJEXT) am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_204) \ $(am__objects_205) $(am__objects_206) lib540_OBJECTS = $(am_lib540_OBJECTS) lib540_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_207 = lib541-first.$(OBJEXT) am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_207) lib541_OBJECTS = $(am_lib541_OBJECTS) lib541_LDADD = $(LDADD) lib541_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_208 = lib542-first.$(OBJEXT) am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_208) lib542_OBJECTS = $(am_lib542_OBJECTS) lib542_LDADD = $(LDADD) lib542_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_209 = lib543-first.$(OBJEXT) am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_209) lib543_OBJECTS = $(am_lib543_OBJECTS) lib543_LDADD = $(LDADD) lib543_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_210 = lib544-first.$(OBJEXT) am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_210) lib544_OBJECTS = $(am_lib544_OBJECTS) lib544_LDADD = $(LDADD) lib544_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_211 = lib545-first.$(OBJEXT) am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_211) lib545_OBJECTS = $(am_lib545_OBJECTS) lib545_LDADD = $(LDADD) lib545_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_212 = lib547-first.$(OBJEXT) am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_212) lib547_OBJECTS = $(am_lib547_OBJECTS) lib547_LDADD = $(LDADD) lib547_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_213 = lib548-first.$(OBJEXT) am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_213) lib548_OBJECTS = $(am_lib548_OBJECTS) lib548_LDADD = $(LDADD) lib548_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_214 = lib549-first.$(OBJEXT) am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_214) lib549_OBJECTS = $(am_lib549_OBJECTS) lib549_LDADD = $(LDADD) lib549_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_215 = lib552-first.$(OBJEXT) am__objects_216 = ../../lib/lib552-warnless.$(OBJEXT) am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_215) \ $(am__objects_216) lib552_OBJECTS = $(am_lib552_OBJECTS) lib552_LDADD = $(LDADD) lib552_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_217 = lib553-first.$(OBJEXT) am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_217) lib553_OBJECTS = $(am_lib553_OBJECTS) lib553_LDADD = $(LDADD) lib553_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_218 = lib554-first.$(OBJEXT) am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_218) lib554_OBJECTS = $(am_lib554_OBJECTS) lib554_LDADD = $(LDADD) lib554_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_219 = lib555-first.$(OBJEXT) am__objects_220 = lib555-testutil.$(OBJEXT) am__objects_221 = ../../lib/lib555-warnless.$(OBJEXT) am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_219) \ $(am__objects_220) $(am__objects_221) lib555_OBJECTS = $(am_lib555_OBJECTS) lib555_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_222 = lib556-first.$(OBJEXT) am__objects_223 = ../../lib/lib556-warnless.$(OBJEXT) am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_222) \ $(am__objects_223) lib556_OBJECTS = $(am_lib556_OBJECTS) lib556_LDADD = $(LDADD) lib556_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_224 = lib557-first.$(OBJEXT) am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_224) lib557_OBJECTS = $(am_lib557_OBJECTS) lib557_LDADD = $(LDADD) lib557_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_225 = lib558-first.$(OBJEXT) am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_225) lib558_OBJECTS = $(am_lib558_OBJECTS) lib558_LDADD = $(LDADD) lib558_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_226 = lib559-first.$(OBJEXT) am_lib559_OBJECTS = lib559-lib559.$(OBJEXT) $(am__objects_226) lib559_OBJECTS = $(am_lib559_OBJECTS) lib559_LDADD = $(LDADD) lib559_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_227 = lib560-first.$(OBJEXT) am__objects_228 = lib560-testutil.$(OBJEXT) am__objects_229 = ../../lib/lib560-warnless.$(OBJEXT) am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_227) \ $(am__objects_228) $(am__objects_229) lib560_OBJECTS = $(am_lib560_OBJECTS) lib560_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_230 = lib562-first.$(OBJEXT) am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_230) lib562_OBJECTS = $(am_lib562_OBJECTS) lib562_LDADD = $(LDADD) lib562_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_231 = lib564-first.$(OBJEXT) am__objects_232 = lib564-testutil.$(OBJEXT) am__objects_233 = ../../lib/lib564-warnless.$(OBJEXT) am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_231) \ $(am__objects_232) $(am__objects_233) lib564_OBJECTS = $(am_lib564_OBJECTS) lib564_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_234 = lib565-first.$(OBJEXT) am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_234) lib565_OBJECTS = $(am_lib565_OBJECTS) lib565_LDADD = $(LDADD) lib565_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_235 = lib566-first.$(OBJEXT) am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_235) lib566_OBJECTS = $(am_lib566_OBJECTS) lib566_LDADD = $(LDADD) lib566_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_236 = lib567-first.$(OBJEXT) am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_236) lib567_OBJECTS = $(am_lib567_OBJECTS) lib567_LDADD = $(LDADD) lib567_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_237 = lib568-first.$(OBJEXT) am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_237) lib568_OBJECTS = $(am_lib568_OBJECTS) lib568_LDADD = $(LDADD) lib568_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_238 = lib569-first.$(OBJEXT) am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_238) lib569_OBJECTS = $(am_lib569_OBJECTS) lib569_LDADD = $(LDADD) lib569_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_239 = lib570-first.$(OBJEXT) am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_239) lib570_OBJECTS = $(am_lib570_OBJECTS) lib570_LDADD = $(LDADD) lib570_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_240 = lib571-first.$(OBJEXT) am__objects_241 = ../../lib/lib571-warnless.$(OBJEXT) am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_240) \ $(am__objects_241) lib571_OBJECTS = $(am_lib571_OBJECTS) lib571_LDADD = $(LDADD) lib571_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_242 = lib572-first.$(OBJEXT) am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_242) lib572_OBJECTS = $(am_lib572_OBJECTS) lib572_LDADD = $(LDADD) lib572_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_243 = lib573-first.$(OBJEXT) am__objects_244 = lib573-testutil.$(OBJEXT) am__objects_245 = ../../lib/lib573-warnless.$(OBJEXT) am__objects_246 = lib573-testtrace.$(OBJEXT) am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_243) \ $(am__objects_244) $(am__objects_245) $(am__objects_246) lib573_OBJECTS = $(am_lib573_OBJECTS) lib573_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_247 = lib574-first.$(OBJEXT) am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_247) lib574_OBJECTS = $(am_lib574_OBJECTS) lib574_LDADD = $(LDADD) lib574_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_248 = lib575-first.$(OBJEXT) am__objects_249 = lib575-testutil.$(OBJEXT) am__objects_250 = ../../lib/lib575-warnless.$(OBJEXT) am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_248) \ $(am__objects_249) $(am__objects_250) lib575_OBJECTS = $(am_lib575_OBJECTS) lib575_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_251 = lib576-first.$(OBJEXT) am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_251) lib576_OBJECTS = $(am_lib576_OBJECTS) lib576_LDADD = $(LDADD) lib576_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_252 = lib578-first.$(OBJEXT) am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_252) lib578_OBJECTS = $(am_lib578_OBJECTS) lib578_LDADD = $(LDADD) lib578_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_253 = lib579-first.$(OBJEXT) am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_253) lib579_OBJECTS = $(am_lib579_OBJECTS) lib579_LDADD = $(LDADD) lib579_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_254 = lib582-first.$(OBJEXT) am__objects_255 = lib582-testutil.$(OBJEXT) am__objects_256 = ../../lib/lib582-warnless.$(OBJEXT) am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_254) \ $(am__objects_255) $(am__objects_256) lib582_OBJECTS = $(am_lib582_OBJECTS) lib582_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_257 = lib583-first.$(OBJEXT) am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_257) lib583_OBJECTS = $(am_lib583_OBJECTS) lib583_LDADD = $(LDADD) lib583_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_258 = lib585-first.$(OBJEXT) am__objects_259 = lib585-testutil.$(OBJEXT) am__objects_260 = lib585-testtrace.$(OBJEXT) am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_258) \ $(am__objects_259) $(am__objects_260) lib585_OBJECTS = $(am_lib585_OBJECTS) lib585_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_261 = lib586-first.$(OBJEXT) am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_261) lib586_OBJECTS = $(am_lib586_OBJECTS) lib586_LDADD = $(LDADD) lib586_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_262 = lib587-first.$(OBJEXT) am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_262) lib587_OBJECTS = $(am_lib587_OBJECTS) lib587_LDADD = $(LDADD) lib587_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_263 = lib589-first.$(OBJEXT) am_lib589_OBJECTS = lib589-lib589.$(OBJEXT) $(am__objects_263) lib589_OBJECTS = $(am_lib589_OBJECTS) lib589_LDADD = $(LDADD) lib589_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_264 = lib590-first.$(OBJEXT) am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_264) lib590_OBJECTS = $(am_lib590_OBJECTS) lib590_LDADD = $(LDADD) lib590_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_265 = lib591-first.$(OBJEXT) am__objects_266 = lib591-testutil.$(OBJEXT) am__objects_267 = ../../lib/lib591-warnless.$(OBJEXT) am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_265) \ $(am__objects_266) $(am__objects_267) lib591_OBJECTS = $(am_lib591_OBJECTS) lib591_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_268 = lib597-first.$(OBJEXT) am__objects_269 = lib597-testutil.$(OBJEXT) am__objects_270 = ../../lib/lib597-warnless.$(OBJEXT) am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_268) \ $(am__objects_269) $(am__objects_270) lib597_OBJECTS = $(am_lib597_OBJECTS) lib597_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_271 = lib598-first.$(OBJEXT) am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_271) lib598_OBJECTS = $(am_lib598_OBJECTS) lib598_LDADD = $(LDADD) lib598_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_272 = lib599-first.$(OBJEXT) am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_272) lib599_OBJECTS = $(am_lib599_OBJECTS) lib599_LDADD = $(LDADD) lib599_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_273 = lib643-first.$(OBJEXT) am_lib643_OBJECTS = lib643-lib643.$(OBJEXT) $(am__objects_273) lib643_OBJECTS = $(am_lib643_OBJECTS) lib643_LDADD = $(LDADD) lib643_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_274 = lib644-first.$(OBJEXT) am_lib644_OBJECTS = lib644-lib643.$(OBJEXT) $(am__objects_274) lib644_OBJECTS = $(am_lib644_OBJECTS) lib644_LDADD = $(LDADD) lib644_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_275 = lib645-first.$(OBJEXT) am_lib645_OBJECTS = lib645-lib643.$(OBJEXT) $(am__objects_275) lib645_OBJECTS = $(am_lib645_OBJECTS) lib645_LDADD = $(LDADD) lib645_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_276 = lib650-first.$(OBJEXT) am_lib650_OBJECTS = lib650-lib650.$(OBJEXT) $(am__objects_276) lib650_OBJECTS = $(am_lib650_OBJECTS) lib650_LDADD = $(LDADD) lib650_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_277 = lib651-first.$(OBJEXT) am_lib651_OBJECTS = lib651-lib651.$(OBJEXT) $(am__objects_277) lib651_OBJECTS = $(am_lib651_OBJECTS) lib651_LDADD = $(LDADD) lib651_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_278 = lib652-first.$(OBJEXT) am_lib652_OBJECTS = lib652-lib652.$(OBJEXT) $(am__objects_278) lib652_OBJECTS = $(am_lib652_OBJECTS) lib652_LDADD = $(LDADD) lib652_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_279 = lib653-first.$(OBJEXT) am_lib653_OBJECTS = lib653-lib653.$(OBJEXT) $(am__objects_279) lib653_OBJECTS = $(am_lib653_OBJECTS) lib653_LDADD = $(LDADD) lib653_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_280 = lib654-first.$(OBJEXT) am_lib654_OBJECTS = lib654-lib654.$(OBJEXT) $(am__objects_280) lib654_OBJECTS = $(am_lib654_OBJECTS) lib654_LDADD = $(LDADD) lib654_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_281 = lib655-first.$(OBJEXT) am_lib655_OBJECTS = lib655-lib655.$(OBJEXT) $(am__objects_281) lib655_OBJECTS = $(am_lib655_OBJECTS) lib655_LDADD = $(LDADD) lib655_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_282 = lib658-first.$(OBJEXT) am__objects_283 = lib658-testutil.$(OBJEXT) am__objects_284 = ../../lib/lib658-warnless.$(OBJEXT) am_lib658_OBJECTS = lib658-lib658.$(OBJEXT) $(am__objects_282) \ $(am__objects_283) $(am__objects_284) lib658_OBJECTS = $(am_lib658_OBJECTS) lib658_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_285 = lib659-first.$(OBJEXT) am__objects_286 = lib659-testutil.$(OBJEXT) am__objects_287 = ../../lib/lib659-warnless.$(OBJEXT) am_lib659_OBJECTS = lib659-lib659.$(OBJEXT) $(am__objects_285) \ $(am__objects_286) $(am__objects_287) lib659_OBJECTS = $(am_lib659_OBJECTS) lib659_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_288 = libauthretry-first.$(OBJEXT) am_libauthretry_OBJECTS = libauthretry-libauthretry.$(OBJEXT) \ $(am__objects_288) libauthretry_OBJECTS = $(am_libauthretry_OBJECTS) libauthretry_LDADD = $(LDADD) libauthretry_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_289 = libntlmconnect-first.$(OBJEXT) am__objects_290 = libntlmconnect-testutil.$(OBJEXT) am__objects_291 = ../../lib/libntlmconnect-warnless.$(OBJEXT) am_libntlmconnect_OBJECTS = libntlmconnect-libntlmconnect.$(OBJEXT) \ $(am__objects_289) $(am__objects_290) $(am__objects_291) libntlmconnect_OBJECTS = $(am_libntlmconnect_OBJECTS) libntlmconnect_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) |
︙ | ︙ | |||
1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 | ../../lib/$(DEPDIR)/lib1540-warnless.Po \ ../../lib/$(DEPDIR)/lib1541-warnless.Po \ ../../lib/$(DEPDIR)/lib1555-warnless.Po \ ../../lib/$(DEPDIR)/lib1556-warnless.Po \ ../../lib/$(DEPDIR)/lib1557-warnless.Po \ ../../lib/$(DEPDIR)/lib1591-warnless.Po \ ../../lib/$(DEPDIR)/lib1592-warnless.Po \ ../../lib/$(DEPDIR)/lib1900-warnless.Po \ ../../lib/$(DEPDIR)/lib1905-warnless.Po \ ../../lib/$(DEPDIR)/lib1906-warnless.Po \ ../../lib/$(DEPDIR)/lib2033-warnless.Po \ ../../lib/$(DEPDIR)/lib502-warnless.Po \ ../../lib/$(DEPDIR)/lib503-warnless.Po \ ../../lib/$(DEPDIR)/lib504-warnless.Po \ | > | 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 | ../../lib/$(DEPDIR)/lib1540-warnless.Po \ ../../lib/$(DEPDIR)/lib1541-warnless.Po \ ../../lib/$(DEPDIR)/lib1555-warnless.Po \ ../../lib/$(DEPDIR)/lib1556-warnless.Po \ ../../lib/$(DEPDIR)/lib1557-warnless.Po \ ../../lib/$(DEPDIR)/lib1591-warnless.Po \ ../../lib/$(DEPDIR)/lib1592-warnless.Po \ ../../lib/$(DEPDIR)/lib1596-warnless.Po \ ../../lib/$(DEPDIR)/lib1900-warnless.Po \ ../../lib/$(DEPDIR)/lib1905-warnless.Po \ ../../lib/$(DEPDIR)/lib1906-warnless.Po \ ../../lib/$(DEPDIR)/lib2033-warnless.Po \ ../../lib/$(DEPDIR)/lib502-warnless.Po \ ../../lib/$(DEPDIR)/lib503-warnless.Po \ ../../lib/$(DEPDIR)/lib504-warnless.Po \ |
︙ | ︙ | |||
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 | ./$(DEPDIR)/lib1556-testutil.Po ./$(DEPDIR)/lib1557-first.Po \ ./$(DEPDIR)/lib1557-lib1557.Po ./$(DEPDIR)/lib1557-testutil.Po \ ./$(DEPDIR)/lib1558.Po ./$(DEPDIR)/lib1559.Po \ ./$(DEPDIR)/lib1560.Po ./$(DEPDIR)/lib1591-first.Po \ ./$(DEPDIR)/lib1591-lib1591.Po ./$(DEPDIR)/lib1591-testutil.Po \ ./$(DEPDIR)/lib1592-first.Po ./$(DEPDIR)/lib1592-lib1592.Po \ ./$(DEPDIR)/lib1592-testutil.Po ./$(DEPDIR)/lib1593.Po \ ./$(DEPDIR)/lib1900-first.Po ./$(DEPDIR)/lib1900-lib1900.Po \ ./$(DEPDIR)/lib1900-testutil.Po ./$(DEPDIR)/lib1905-first.Po \ ./$(DEPDIR)/lib1905-lib1905.Po ./$(DEPDIR)/lib1905-testutil.Po \ ./$(DEPDIR)/lib1906-first.Po ./$(DEPDIR)/lib1906-lib1906.Po \ ./$(DEPDIR)/lib1906-testutil.Po ./$(DEPDIR)/lib2033-first.Po \ ./$(DEPDIR)/lib2033-libntlmconnect.Po \ ./$(DEPDIR)/lib2033-testutil.Po ./$(DEPDIR)/lib500-first.Po \ | > > | 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 | ./$(DEPDIR)/lib1556-testutil.Po ./$(DEPDIR)/lib1557-first.Po \ ./$(DEPDIR)/lib1557-lib1557.Po ./$(DEPDIR)/lib1557-testutil.Po \ ./$(DEPDIR)/lib1558.Po ./$(DEPDIR)/lib1559.Po \ ./$(DEPDIR)/lib1560.Po ./$(DEPDIR)/lib1591-first.Po \ ./$(DEPDIR)/lib1591-lib1591.Po ./$(DEPDIR)/lib1591-testutil.Po \ ./$(DEPDIR)/lib1592-first.Po ./$(DEPDIR)/lib1592-lib1592.Po \ ./$(DEPDIR)/lib1592-testutil.Po ./$(DEPDIR)/lib1593.Po \ ./$(DEPDIR)/lib1594.Po ./$(DEPDIR)/lib1596-first.Po \ ./$(DEPDIR)/lib1596-lib1594.Po ./$(DEPDIR)/lib1596-testutil.Po \ ./$(DEPDIR)/lib1900-first.Po ./$(DEPDIR)/lib1900-lib1900.Po \ ./$(DEPDIR)/lib1900-testutil.Po ./$(DEPDIR)/lib1905-first.Po \ ./$(DEPDIR)/lib1905-lib1905.Po ./$(DEPDIR)/lib1905-testutil.Po \ ./$(DEPDIR)/lib1906-first.Po ./$(DEPDIR)/lib1906-lib1906.Po \ ./$(DEPDIR)/lib1906-testutil.Po ./$(DEPDIR)/lib2033-first.Po \ ./$(DEPDIR)/lib2033-libntlmconnect.Po \ ./$(DEPDIR)/lib2033-testutil.Po ./$(DEPDIR)/lib500-first.Po \ |
︙ | ︙ | |||
1412 1413 1414 1415 1416 1417 1418 | $(lib1533_SOURCES) $(lib1534_SOURCES) $(lib1535_SOURCES) \ $(lib1536_SOURCES) $(lib1537_SOURCES) $(lib1538_SOURCES) \ $(lib1540_SOURCES) $(lib1541_SOURCES) $(lib1550_SOURCES) \ $(lib1551_SOURCES) $(lib1552_SOURCES) $(lib1553_SOURCES) \ $(lib1554_SOURCES) $(lib1555_SOURCES) $(lib1556_SOURCES) \ $(lib1557_SOURCES) $(lib1558_SOURCES) $(lib1559_SOURCES) \ $(lib1560_SOURCES) $(lib1591_SOURCES) $(lib1592_SOURCES) \ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 | $(lib1533_SOURCES) $(lib1534_SOURCES) $(lib1535_SOURCES) \ $(lib1536_SOURCES) $(lib1537_SOURCES) $(lib1538_SOURCES) \ $(lib1540_SOURCES) $(lib1541_SOURCES) $(lib1550_SOURCES) \ $(lib1551_SOURCES) $(lib1552_SOURCES) $(lib1553_SOURCES) \ $(lib1554_SOURCES) $(lib1555_SOURCES) $(lib1556_SOURCES) \ $(lib1557_SOURCES) $(lib1558_SOURCES) $(lib1559_SOURCES) \ $(lib1560_SOURCES) $(lib1591_SOURCES) $(lib1592_SOURCES) \ $(lib1593_SOURCES) $(lib1594_SOURCES) $(lib1596_SOURCES) \ $(lib1900_SOURCES) $(lib1905_SOURCES) $(lib1906_SOURCES) \ $(lib2033_SOURCES) $(lib500_SOURCES) $(lib501_SOURCES) \ $(lib502_SOURCES) $(lib503_SOURCES) $(lib504_SOURCES) \ $(lib505_SOURCES) $(lib506_SOURCES) $(lib507_SOURCES) \ $(lib508_SOURCES) $(lib509_SOURCES) $(lib510_SOURCES) \ $(lib511_SOURCES) $(lib512_SOURCES) $(lib513_SOURCES) \ $(lib514_SOURCES) $(lib515_SOURCES) $(lib516_SOURCES) \ $(lib517_SOURCES) $(lib518_SOURCES) $(lib519_SOURCES) \ $(lib520_SOURCES) $(lib521_SOURCES) $(lib523_SOURCES) \ $(lib524_SOURCES) $(lib525_SOURCES) $(lib526_SOURCES) \ $(lib527_SOURCES) $(lib529_SOURCES) $(lib530_SOURCES) \ $(lib532_SOURCES) $(lib533_SOURCES) $(lib537_SOURCES) \ $(lib539_SOURCES) $(lib540_SOURCES) $(lib541_SOURCES) \ $(lib542_SOURCES) $(lib543_SOURCES) $(lib544_SOURCES) \ $(lib545_SOURCES) $(lib547_SOURCES) $(lib548_SOURCES) \ $(lib549_SOURCES) $(lib552_SOURCES) $(lib553_SOURCES) \ $(lib554_SOURCES) $(lib555_SOURCES) $(lib556_SOURCES) \ $(lib557_SOURCES) $(lib558_SOURCES) $(lib559_SOURCES) \ $(lib560_SOURCES) $(lib562_SOURCES) $(lib564_SOURCES) \ $(lib565_SOURCES) $(lib566_SOURCES) $(lib567_SOURCES) \ $(lib568_SOURCES) $(lib569_SOURCES) $(lib570_SOURCES) \ $(lib571_SOURCES) $(lib572_SOURCES) $(lib573_SOURCES) \ $(lib574_SOURCES) $(lib575_SOURCES) $(lib576_SOURCES) \ $(lib578_SOURCES) $(lib579_SOURCES) $(lib582_SOURCES) \ $(lib583_SOURCES) $(lib585_SOURCES) $(lib586_SOURCES) \ $(lib587_SOURCES) $(lib589_SOURCES) $(lib590_SOURCES) \ $(lib591_SOURCES) $(lib597_SOURCES) $(lib598_SOURCES) \ $(lib599_SOURCES) $(lib643_SOURCES) $(lib644_SOURCES) \ $(lib645_SOURCES) $(lib650_SOURCES) $(lib651_SOURCES) \ $(lib652_SOURCES) $(lib653_SOURCES) $(lib654_SOURCES) \ $(lib655_SOURCES) $(lib658_SOURCES) $(lib659_SOURCES) \ $(libauthretry_SOURCES) $(libntlmconnect_SOURCES) DIST_SOURCES = $(libhostname_la_SOURCES) \ $(am__libstubgss_la_SOURCES_DIST) $(chkdecimalpoint_SOURCES) \ $(chkhostname_SOURCES) $(lib1156_SOURCES) $(lib1500_SOURCES) \ $(lib1501_SOURCES) $(lib1502_SOURCES) $(lib1503_SOURCES) \ $(lib1504_SOURCES) $(lib1505_SOURCES) $(lib1506_SOURCES) \ $(lib1507_SOURCES) $(lib1508_SOURCES) $(lib1509_SOURCES) \ $(lib1510_SOURCES) $(lib1511_SOURCES) $(lib1512_SOURCES) \ $(lib1513_SOURCES) $(lib1514_SOURCES) $(lib1515_SOURCES) \ $(lib1517_SOURCES) $(lib1518_SOURCES) $(lib1520_SOURCES) \ $(lib1522_SOURCES) $(lib1523_SOURCES) $(lib1525_SOURCES) \ $(lib1526_SOURCES) $(lib1527_SOURCES) $(lib1528_SOURCES) \ $(lib1529_SOURCES) $(lib1530_SOURCES) $(lib1531_SOURCES) \ $(lib1532_SOURCES) $(lib1533_SOURCES) $(lib1534_SOURCES) \ $(lib1535_SOURCES) $(lib1536_SOURCES) $(lib1537_SOURCES) \ $(lib1538_SOURCES) $(lib1540_SOURCES) $(lib1541_SOURCES) \ $(lib1550_SOURCES) $(lib1551_SOURCES) $(lib1552_SOURCES) \ $(lib1553_SOURCES) $(lib1554_SOURCES) $(lib1555_SOURCES) \ $(lib1556_SOURCES) $(lib1557_SOURCES) $(lib1558_SOURCES) \ $(lib1559_SOURCES) $(lib1560_SOURCES) $(lib1591_SOURCES) \ $(lib1592_SOURCES) $(lib1593_SOURCES) $(lib1594_SOURCES) \ $(lib1596_SOURCES) $(lib1900_SOURCES) $(lib1905_SOURCES) \ $(lib1906_SOURCES) $(lib2033_SOURCES) $(lib500_SOURCES) \ $(lib501_SOURCES) $(lib502_SOURCES) $(lib503_SOURCES) \ $(lib504_SOURCES) $(lib505_SOURCES) $(lib506_SOURCES) \ $(lib507_SOURCES) $(lib508_SOURCES) $(lib509_SOURCES) \ $(lib510_SOURCES) $(lib511_SOURCES) $(lib512_SOURCES) \ $(lib513_SOURCES) $(lib514_SOURCES) $(lib515_SOURCES) \ $(lib516_SOURCES) $(lib517_SOURCES) $(lib518_SOURCES) \ |
︙ | ︙ | |||
1445 1446 1447 1448 1449 1450 1451 | $(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \ $(lib598_SOURCES) $(lib599_SOURCES) $(lib643_SOURCES) \ $(lib644_SOURCES) $(lib645_SOURCES) $(lib650_SOURCES) \ $(lib651_SOURCES) $(lib652_SOURCES) $(lib653_SOURCES) \ $(lib654_SOURCES) $(lib655_SOURCES) $(lib658_SOURCES) \ $(lib659_SOURCES) $(libauthretry_SOURCES) \ $(libntlmconnect_SOURCES) | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 | $(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \ $(lib598_SOURCES) $(lib599_SOURCES) $(lib643_SOURCES) \ $(lib644_SOURCES) $(lib645_SOURCES) $(lib650_SOURCES) \ $(lib651_SOURCES) $(lib652_SOURCES) $(lib653_SOURCES) \ $(lib654_SOURCES) $(lib655_SOURCES) $(lib658_SOURCES) \ $(lib659_SOURCES) $(libauthretry_SOURCES) \ $(libntlmconnect_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, |
︙ | ︙ | |||
1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ | |||
2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 | lib1591_LDADD = $(TESTUTIL_LIBS) lib1591_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1591 lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1592_LDADD = $(TESTUTIL_LIBS) lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592 lib1593_SOURCES = lib1593.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1593_LDADD = $(TESTUTIL_LIBS) lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1900_LDADD = $(TESTUTIL_LIBS) lib1900_CPPFLAGS = $(AM_CPPFLAGS) lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1905_LDADD = $(TESTUTIL_LIBS) lib1905_CPPFLAGS = $(AM_CPPFLAGS) lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) | > > > > > | 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 | lib1591_LDADD = $(TESTUTIL_LIBS) lib1591_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1591 lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1592_LDADD = $(TESTUTIL_LIBS) lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592 lib1593_SOURCES = lib1593.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1593_LDADD = $(TESTUTIL_LIBS) lib1594_SOURCES = lib1594.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1594_LDADD = $(TESTUTIL_LIBS) lib1596_SOURCES = lib1594.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1596_LDADD = $(TESTUTIL_LIBS) lib1596_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1596 lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1900_LDADD = $(TESTUTIL_LIBS) lib1900_CPPFLAGS = $(AM_CPPFLAGS) lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1905_LDADD = $(TESTUTIL_LIBS) lib1905_CPPFLAGS = $(AM_CPPFLAGS) lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) |
︙ | ︙ | |||
2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 | lib1592$(EXEEXT): $(lib1592_OBJECTS) $(lib1592_DEPENDENCIES) $(EXTRA_lib1592_DEPENDENCIES) @rm -f lib1592$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1592_OBJECTS) $(lib1592_LDADD) $(LIBS) lib1593$(EXEEXT): $(lib1593_OBJECTS) $(lib1593_DEPENDENCIES) $(EXTRA_lib1593_DEPENDENCIES) @rm -f lib1593$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1593_OBJECTS) $(lib1593_LDADD) $(LIBS) ../../lib/lib1900-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \ ../../lib/$(DEPDIR)/$(am__dirstamp) lib1900$(EXEEXT): $(lib1900_OBJECTS) $(lib1900_DEPENDENCIES) $(EXTRA_lib1900_DEPENDENCIES) @rm -f lib1900$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1900_OBJECTS) $(lib1900_LDADD) $(LIBS) ../../lib/lib1905-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \ | > > > > > > > > > > | 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 | lib1592$(EXEEXT): $(lib1592_OBJECTS) $(lib1592_DEPENDENCIES) $(EXTRA_lib1592_DEPENDENCIES) @rm -f lib1592$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1592_OBJECTS) $(lib1592_LDADD) $(LIBS) lib1593$(EXEEXT): $(lib1593_OBJECTS) $(lib1593_DEPENDENCIES) $(EXTRA_lib1593_DEPENDENCIES) @rm -f lib1593$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1593_OBJECTS) $(lib1593_LDADD) $(LIBS) lib1594$(EXEEXT): $(lib1594_OBJECTS) $(lib1594_DEPENDENCIES) $(EXTRA_lib1594_DEPENDENCIES) @rm -f lib1594$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1594_OBJECTS) $(lib1594_LDADD) $(LIBS) ../../lib/lib1596-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \ ../../lib/$(DEPDIR)/$(am__dirstamp) lib1596$(EXEEXT): $(lib1596_OBJECTS) $(lib1596_DEPENDENCIES) $(EXTRA_lib1596_DEPENDENCIES) @rm -f lib1596$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1596_OBJECTS) $(lib1596_LDADD) $(LIBS) ../../lib/lib1900-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \ ../../lib/$(DEPDIR)/$(am__dirstamp) lib1900$(EXEEXT): $(lib1900_OBJECTS) $(lib1900_DEPENDENCIES) $(EXTRA_lib1900_DEPENDENCIES) @rm -f lib1900$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lib1900_OBJECTS) $(lib1900_LDADD) $(LIBS) ../../lib/lib1905-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \ |
︙ | ︙ | |||
3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 | @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1540-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1541-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1555-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1556-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1557-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1591-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1592-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1900-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1905-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1906-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib2033-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib503-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib504-warnless.Po@am__quote@ # am--include-marker | > | 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 | @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1540-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1541-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1555-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1556-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1557-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1591-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1592-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1596-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1900-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1905-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1906-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib2033-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib503-warnless.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib504-warnless.Po@am__quote@ # am--include-marker |
︙ | ︙ | |||
3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-lib1591.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-lib1592.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1593.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-lib1900.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-lib1905.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-first.Po@am__quote@ # am--include-marker | > > > > | 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-lib1591.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-lib1592.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1593.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1594.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1596-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1596-lib1594.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1596-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-lib1900.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-first.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-lib1905.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-testutil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-first.Po@am__quote@ # am--include-marker |
︙ | ︙ | |||
6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 | ../../lib/lib1592-warnless.obj: ../../lib/warnless.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1592-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1592-warnless.Tpo -c -o ../../lib/lib1592-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1592-warnless.Tpo ../../lib/$(DEPDIR)/lib1592-warnless.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1592-warnless.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1592-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi` lib1900-lib1900.o: lib1900.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1900_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1900-lib1900.o -MD -MP -MF $(DEPDIR)/lib1900-lib1900.Tpo -c -o lib1900-lib1900.o `test -f 'lib1900.c' || echo '$(srcdir)/'`lib1900.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1900-lib1900.Tpo $(DEPDIR)/lib1900-lib1900.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1900.c' object='lib1900-lib1900.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1900_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1900-lib1900.o `test -f 'lib1900.c' || echo '$(srcdir)/'`lib1900.c | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 | ../../lib/lib1592-warnless.obj: ../../lib/warnless.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1592-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1592-warnless.Tpo -c -o ../../lib/lib1592-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1592-warnless.Tpo ../../lib/$(DEPDIR)/lib1592-warnless.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1592-warnless.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1592-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi` lib1596-lib1594.o: lib1594.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1596-lib1594.o -MD -MP -MF $(DEPDIR)/lib1596-lib1594.Tpo -c -o lib1596-lib1594.o `test -f 'lib1594.c' || echo '$(srcdir)/'`lib1594.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1596-lib1594.Tpo $(DEPDIR)/lib1596-lib1594.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1594.c' object='lib1596-lib1594.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1596-lib1594.o `test -f 'lib1594.c' || echo '$(srcdir)/'`lib1594.c lib1596-lib1594.obj: lib1594.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1596-lib1594.obj -MD -MP -MF $(DEPDIR)/lib1596-lib1594.Tpo -c -o lib1596-lib1594.obj `if test -f 'lib1594.c'; then $(CYGPATH_W) 'lib1594.c'; else $(CYGPATH_W) '$(srcdir)/lib1594.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1596-lib1594.Tpo $(DEPDIR)/lib1596-lib1594.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1594.c' object='lib1596-lib1594.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1596-lib1594.obj `if test -f 'lib1594.c'; then $(CYGPATH_W) 'lib1594.c'; else $(CYGPATH_W) '$(srcdir)/lib1594.c'; fi` lib1596-first.o: first.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1596-first.o -MD -MP -MF $(DEPDIR)/lib1596-first.Tpo -c -o lib1596-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1596-first.Tpo $(DEPDIR)/lib1596-first.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1596-first.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1596-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c lib1596-first.obj: first.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1596-first.obj -MD -MP -MF $(DEPDIR)/lib1596-first.Tpo -c -o lib1596-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1596-first.Tpo $(DEPDIR)/lib1596-first.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1596-first.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1596-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi` lib1596-testutil.o: testutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1596-testutil.o -MD -MP -MF $(DEPDIR)/lib1596-testutil.Tpo -c -o lib1596-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1596-testutil.Tpo $(DEPDIR)/lib1596-testutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1596-testutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1596-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c lib1596-testutil.obj: testutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1596-testutil.obj -MD -MP -MF $(DEPDIR)/lib1596-testutil.Tpo -c -o lib1596-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1596-testutil.Tpo $(DEPDIR)/lib1596-testutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1596-testutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1596-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi` ../../lib/lib1596-warnless.o: ../../lib/warnless.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1596-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1596-warnless.Tpo -c -o ../../lib/lib1596-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1596-warnless.Tpo ../../lib/$(DEPDIR)/lib1596-warnless.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1596-warnless.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1596-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c ../../lib/lib1596-warnless.obj: ../../lib/warnless.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1596-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1596-warnless.Tpo -c -o ../../lib/lib1596-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1596-warnless.Tpo ../../lib/$(DEPDIR)/lib1596-warnless.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1596-warnless.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1596-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi` lib1900-lib1900.o: lib1900.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1900_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1900-lib1900.o -MD -MP -MF $(DEPDIR)/lib1900-lib1900.Tpo -c -o lib1900-lib1900.o `test -f 'lib1900.c' || echo '$(srcdir)/'`lib1900.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1900-lib1900.Tpo $(DEPDIR)/lib1900-lib1900.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1900.c' object='lib1900-lib1900.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1900_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1900-lib1900.o `test -f 'lib1900.c' || echo '$(srcdir)/'`lib1900.c |
︙ | ︙ | |||
9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 | -rm -f ../../lib/$(DEPDIR)/lib1540-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1541-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po | > | 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 | -rm -f ../../lib/$(DEPDIR)/lib1540-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1541-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po |
︙ | ︙ | |||
9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 | -rm -f ./$(DEPDIR)/lib1591-first.Po -rm -f ./$(DEPDIR)/lib1591-lib1591.Po -rm -f ./$(DEPDIR)/lib1591-testutil.Po -rm -f ./$(DEPDIR)/lib1592-first.Po -rm -f ./$(DEPDIR)/lib1592-lib1592.Po -rm -f ./$(DEPDIR)/lib1592-testutil.Po -rm -f ./$(DEPDIR)/lib1593.Po -rm -f ./$(DEPDIR)/lib1900-first.Po -rm -f ./$(DEPDIR)/lib1900-lib1900.Po -rm -f ./$(DEPDIR)/lib1900-testutil.Po -rm -f ./$(DEPDIR)/lib1905-first.Po -rm -f ./$(DEPDIR)/lib1905-lib1905.Po -rm -f ./$(DEPDIR)/lib1905-testutil.Po -rm -f ./$(DEPDIR)/lib1906-first.Po | > > > > | 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 | -rm -f ./$(DEPDIR)/lib1591-first.Po -rm -f ./$(DEPDIR)/lib1591-lib1591.Po -rm -f ./$(DEPDIR)/lib1591-testutil.Po -rm -f ./$(DEPDIR)/lib1592-first.Po -rm -f ./$(DEPDIR)/lib1592-lib1592.Po -rm -f ./$(DEPDIR)/lib1592-testutil.Po -rm -f ./$(DEPDIR)/lib1593.Po -rm -f ./$(DEPDIR)/lib1594.Po -rm -f ./$(DEPDIR)/lib1596-first.Po -rm -f ./$(DEPDIR)/lib1596-lib1594.Po -rm -f ./$(DEPDIR)/lib1596-testutil.Po -rm -f ./$(DEPDIR)/lib1900-first.Po -rm -f ./$(DEPDIR)/lib1900-lib1900.Po -rm -f ./$(DEPDIR)/lib1900-testutil.Po -rm -f ./$(DEPDIR)/lib1905-first.Po -rm -f ./$(DEPDIR)/lib1905-lib1905.Po -rm -f ./$(DEPDIR)/lib1905-testutil.Po -rm -f ./$(DEPDIR)/lib1906-first.Po |
︙ | ︙ | |||
10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 | -rm -f ../../lib/$(DEPDIR)/lib1540-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1541-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po | > | 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 | -rm -f ../../lib/$(DEPDIR)/lib1540-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1541-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po -rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po |
︙ | ︙ | |||
10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 | -rm -f ./$(DEPDIR)/lib1591-first.Po -rm -f ./$(DEPDIR)/lib1591-lib1591.Po -rm -f ./$(DEPDIR)/lib1591-testutil.Po -rm -f ./$(DEPDIR)/lib1592-first.Po -rm -f ./$(DEPDIR)/lib1592-lib1592.Po -rm -f ./$(DEPDIR)/lib1592-testutil.Po -rm -f ./$(DEPDIR)/lib1593.Po -rm -f ./$(DEPDIR)/lib1900-first.Po -rm -f ./$(DEPDIR)/lib1900-lib1900.Po -rm -f ./$(DEPDIR)/lib1900-testutil.Po -rm -f ./$(DEPDIR)/lib1905-first.Po -rm -f ./$(DEPDIR)/lib1905-lib1905.Po -rm -f ./$(DEPDIR)/lib1905-testutil.Po -rm -f ./$(DEPDIR)/lib1906-first.Po | > > > > | 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 | -rm -f ./$(DEPDIR)/lib1591-first.Po -rm -f ./$(DEPDIR)/lib1591-lib1591.Po -rm -f ./$(DEPDIR)/lib1591-testutil.Po -rm -f ./$(DEPDIR)/lib1592-first.Po -rm -f ./$(DEPDIR)/lib1592-lib1592.Po -rm -f ./$(DEPDIR)/lib1592-testutil.Po -rm -f ./$(DEPDIR)/lib1593.Po -rm -f ./$(DEPDIR)/lib1594.Po -rm -f ./$(DEPDIR)/lib1596-first.Po -rm -f ./$(DEPDIR)/lib1596-lib1594.Po -rm -f ./$(DEPDIR)/lib1596-testutil.Po -rm -f ./$(DEPDIR)/lib1900-first.Po -rm -f ./$(DEPDIR)/lib1900-lib1900.Po -rm -f ./$(DEPDIR)/lib1900-testutil.Po -rm -f ./$(DEPDIR)/lib1905-first.Po -rm -f ./$(DEPDIR)/lib1905-lib1905.Po -rm -f ./$(DEPDIR)/lib1905-testutil.Po -rm -f ./$(DEPDIR)/lib1906-first.Po |
︙ | ︙ |
Changes to jni/curl/tests/libtest/Makefile.inc.
︙ | ︙ | |||
28 29 30 31 32 33 34 | lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515 lib1517 \ lib1518 lib1520 lib1521 lib1522 lib1523 \ lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 lib1533 \ lib1534 lib1535 lib1536 lib1537 lib1538 \ lib1540 lib1541 \ lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \ lib1558 lib1559 lib1560 \ | | | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515 lib1517 \ lib1518 lib1520 lib1521 lib1522 lib1523 \ lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 lib1533 \ lib1534 lib1535 lib1536 lib1537 lib1538 \ lib1540 lib1541 \ lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \ lib1558 lib1559 lib1560 \ lib1591 lib1592 lib1593 lib1594 lib1596 \ lib1900 lib1905 lib1906 \ lib2033 chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \ ../../lib/curl_ctype.c chkdecimalpoint_LDADD = chkdecimalpoint_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB \ |
︙ | ︙ | |||
539 540 541 542 543 544 545 546 547 548 549 550 551 552 | lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1592_LDADD = $(TESTUTIL_LIBS) lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592 lib1593_SOURCES = lib1593.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1593_LDADD = $(TESTUTIL_LIBS) lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1900_LDADD = $(TESTUTIL_LIBS) lib1900_CPPFLAGS = $(AM_CPPFLAGS) lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1905_LDADD = $(TESTUTIL_LIBS) | > > > > > > > | 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 | lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1592_LDADD = $(TESTUTIL_LIBS) lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592 lib1593_SOURCES = lib1593.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1593_LDADD = $(TESTUTIL_LIBS) lib1594_SOURCES = lib1594.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1594_LDADD = $(TESTUTIL_LIBS) lib1596_SOURCES = lib1594.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1596_LDADD = $(TESTUTIL_LIBS) lib1596_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1596 lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1900_LDADD = $(TESTUTIL_LIBS) lib1900_CPPFLAGS = $(AM_CPPFLAGS) lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1905_LDADD = $(TESTUTIL_LIBS) |
︙ | ︙ |
Changes to jni/curl/tests/libtest/first.c.
︙ | ︙ | |||
93 94 95 96 97 98 99 | /* use the value as file name */ char fname[CURL_MT_LOGFNAME_BUFSIZE]; if(strlen(env) >= CURL_MT_LOGFNAME_BUFSIZE) env[CURL_MT_LOGFNAME_BUFSIZE-1] = '\0'; strcpy(fname, env); curl_free(env); curl_dbg_memdebug(fname); | | | | | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | /* use the value as file name */ char fname[CURL_MT_LOGFNAME_BUFSIZE]; if(strlen(env) >= CURL_MT_LOGFNAME_BUFSIZE) env[CURL_MT_LOGFNAME_BUFSIZE-1] = '\0'; strcpy(fname, env); curl_free(env); curl_dbg_memdebug(fname); /* this weird stuff here is to make curl_free() get called before curl_dbg_memdebug() as otherwise memory tracking will log a free() without an alloc! */ } /* if CURL_MEMLIMIT is set, this enables fail-on-alloc-number-N feature */ env = curl_getenv("CURL_MEMLIMIT"); if(env) { char *endptr; long num = strtol(env, &endptr, 10); if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) |
︙ | ︙ |
Changes to jni/curl/tests/libtest/lib1560.c.
︙ | ︙ | |||
136 137 138 139 140 141 142 143 144 145 146 147 148 149 | {"file://C:\\programs\\foo", "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]", CURLU_DEFAULT_SCHEME, 0, CURLUE_OK}, {"file:///C:\\programs\\foo", "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]", CURLU_DEFAULT_SCHEME, 0, CURLUE_OK}, #endif /* URL without host name */ {"http://a:b@/x", "", CURLU_DEFAULT_SCHEME, 0, CURLUE_NO_HOST}, {"boing:80", "https | [11] | [12] | [13] | boing | 80 | / | [16] | [17]", CURLU_DEFAULT_SCHEME, 0, CURLUE_OK}, {"http://[fd00:a41::50]:8080", | > > > > | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | {"file://C:\\programs\\foo", "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]", CURLU_DEFAULT_SCHEME, 0, CURLUE_OK}, {"file:///C:\\programs\\foo", "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]", CURLU_DEFAULT_SCHEME, 0, CURLUE_OK}, #endif {"http://[ab.be:1]/x", "", CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT}, {"http://[ab.be]/x", "", CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT}, /* URL without host name */ {"http://a:b@/x", "", CURLU_DEFAULT_SCHEME, 0, CURLUE_NO_HOST}, {"boing:80", "https | [11] | [12] | [13] | boing | 80 | / | [16] | [17]", CURLU_DEFAULT_SCHEME, 0, CURLUE_OK}, {"http://[fd00:a41::50]:8080", |
︙ | ︙ |
Added jni/curl/tests/libtest/lib1594.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* Testing Retry-After header parser */ #include "test.h" #include "memdebug.h" int test(char *URL) { struct curl_slist *header = NULL; curl_off_t retry; CURL *curl = NULL; int res = 0; global_init(CURL_GLOBAL_ALL); easy_init(curl); easy_setopt(curl, CURLOPT_URL, URL); res = curl_easy_perform(curl); if(res) goto test_cleanup; res = curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &retry); if(res) goto test_cleanup; #ifdef LIB1596 /* we get a relative number of seconds, so add the number of seconds we're at to make it a somewhat stable number. Then remove accuracy. */ retry += time(NULL); retry /= 10000; #endif printf("Retry-After: %" CURL_FORMAT_CURL_OFF_T "\n", retry); test_cleanup: /* always cleanup */ curl_easy_cleanup(curl); curl_slist_free_all(header); curl_global_cleanup(); return res; } |
Changes to jni/curl/tests/runtests.1.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH runtests.pl 1 "May 05, 2017" "Curl 7.66.0" "runtests" .SH NAME runtests.pl \- run one or more test cases .SH SYNOPSIS .B runtests.pl [options] [test number] [!test number] [key word] [!key word] .SH DESCRIPTION \fIruntests.pl\fP runs one, several or all the existing test cases in curl's |
︙ | ︙ |
Changes to jni/curl/tests/server/Makefile.in.
︙ | ︙ | |||
531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ |
Changes to jni/curl/tests/symbol-scan.pl.
︙ | ︙ | |||
114 115 116 117 118 119 120 121 122 123 124 125 | for my $e (sort @syms) { # OBSOLETE - names that are just placeholders for a position where we # previously had a name, that is now removed. The OBSOLETE names should # never be used for anything. # # CURL_EXTERN - is a define used for libcurl functions that are external, # public. No app or other code should ever use it. # # *_LAST and *_LASTENTRY are just prefix for the placeholders used for the # last entry in many enum series. # | > > | | 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | for my $e (sort @syms) { # OBSOLETE - names that are just placeholders for a position where we # previously had a name, that is now removed. The OBSOLETE names should # never be used for anything. # # CURL_EXTERN - is a define used for libcurl functions that are external, # public. No app or other code should ever use it. # # CURLINC_ - defines for header dual-include prevention, ignore those. # # *_LAST and *_LASTENTRY are just prefix for the placeholders used for the # last entry in many enum series. # if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURLINC_|_LAST\z|_LASTENTRY\z)/) { $ignored++; next; } if($doc{$e}) { if($verbose) { print $e."\n"; } |
︙ | ︙ |
Changes to jni/curl/tests/testcurl.1.
︙ | ︙ | |||
16 17 18 19 20 21 22 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" ************************************************************************** .\" .TH testcurl.pl 1 "October 22, 2016" "Curl 7.66.0" "testcurl" .SH NAME testcurl.pl \- (automatically) test curl .SH SYNOPSIS .B testcurl.pl [options] [dir] > output .SH DESCRIPTION \fItestcurl.pl\fP is the master script to use for automatic testing of curl |
︙ | ︙ |
Changes to jni/curl/tests/unit/Makefile.in.
︙ | ︙ | |||
624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ | > > > > | 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 | USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ USE_MBEDTLS = @USE_MBEDTLS@ USE_MESALINK = @USE_MESALINK@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@ USE_NSS = @USE_NSS@ USE_OPENLDAP = @USE_OPENLDAP@ USE_QUICHE = @USE_QUICHE@ USE_SCHANNEL = @USE_SCHANNEL@ USE_SECTRANSP = @USE_SECTRANSP@ USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ |
︙ | ︙ |
Changes to jni/curl/tests/unit/unit1607.c.
︙ | ︙ | |||
21 22 23 24 25 26 27 | ***************************************************************************/ #include "curlcheck.h" #include "urldata.h" #include "connect.h" #include "share.h" | < < < < | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ***************************************************************************/ #include "curlcheck.h" #include "urldata.h" #include "connect.h" #include "share.h" #include "memdebug.h" /* LAST include file */ static void unit_stop(void) { curl_global_cleanup(); } |
︙ | ︙ | |||
150 151 152 153 154 155 156 | if(!addr && !tests[i].address[j]) break; if(tests[i].address[j] == &skip) continue; | | | | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | if(!addr && !tests[i].address[j]) break; if(tests[i].address[j] == &skip) continue; if(addr && !Curl_addr2string(addr->ai_addr, addr->ai_addrlen, ipaddress, &port)) { fprintf(stderr, "%s:%d tests[%d] failed. getaddressinfo failed.\n", __FILE__, __LINE__, i); problem = true; break; } if(addr && !tests[i].address[j]) { |
︙ | ︙ |
Changes to jni/curl/tests/unit/unit1609.c.
︙ | ︙ | |||
21 22 23 24 25 26 27 | ***************************************************************************/ #include "curlcheck.h" #include "urldata.h" #include "connect.h" #include "share.h" | < < < < | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ***************************************************************************/ #include "curlcheck.h" #include "urldata.h" #include "connect.h" #include "share.h" #include "memdebug.h" /* LAST include file */ static void unit_stop(void) { curl_global_cleanup(); } |
︙ | ︙ | |||
150 151 152 153 154 155 156 | for(j = 0; j < addressnum; ++j) { long port = 0; char ipaddress[MAX_IPADR_LEN] = {0}; if(!addr && !tests[i].address[j]) break; | | | | | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | for(j = 0; j < addressnum; ++j) { long port = 0; char ipaddress[MAX_IPADR_LEN] = {0}; if(!addr && !tests[i].address[j]) break; if(addr && !Curl_addr2string(addr->ai_addr, addr->ai_addrlen, ipaddress, &port)) { fprintf(stderr, "%s:%d tests[%d] failed. Curl_addr2string failed.\n", __FILE__, __LINE__, i); problem = true; break; } if(addr && !tests[i].address[j]) { fprintf(stderr, "%s:%d tests[%d] failed. the retrieved addr " |
︙ | ︙ |
Changes to jni/curl/tests/unit/unit1654.c.
︙ | ︙ | |||
86 87 88 89 90 91 92 | fprintf(stderr, "Curl_altsvc_parse(3) failed!\n"); unitfail++; } /* that one should make two entries */ fail_unless(asi->num == 8, "wrong number of entries"); result = Curl_altsvc_parse(curl, asi, "h2=\"example.com:443\"; ma = 120;", | | | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | fprintf(stderr, "Curl_altsvc_parse(3) failed!\n"); unitfail++; } /* that one should make two entries */ fail_unless(asi->num == 8, "wrong number of entries"); result = Curl_altsvc_parse(curl, asi, "h2=\"example.com:443\"; ma = 120;", ALPN_h2, "example.org", 80); if(result) { fprintf(stderr, "Curl_altsvc_parse(4) failed!\n"); unitfail++; } fail_unless(asi->num == 9, "wrong number of entries"); result = Curl_altsvc_parse(curl, asi, |
︙ | ︙ |
Changes to jni/curl/winbuild/MakefileBuild.vc.
︙ | ︙ | |||
555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 | @if not exist "$(DIRDIST)\include\curl" mkdir $(DIRDIST)\include\curl @if not exist "$(DIRDIST)\lib" mkdir $(DIRDIST)\lib $(LIB_DIROBJ): @if not exist "$(LIB_DIROBJ)" mkdir $(LIB_DIROBJ) @if not exist "$(LIB_DIROBJ)\vauth" mkdir $(LIB_DIROBJ)\vauth @if not exist "$(LIB_DIROBJ)\vtls" mkdir $(LIB_DIROBJ)\vtls $(CURL_DIROBJ): @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ) # we need a lib dir for the portability functions from libcurl # we use the .c directly here @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)\lib .SUFFIXES: .c .obj .res {$(LIBCURL_SRC_DIR)\}.c{$(LIB_DIROBJ)\}.obj: $(CURL_CC) $(CFLAGS) /Fo"$@" $< {$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj: $(CURL_CC) $(CFLAGS) /Fo"$@" $< {$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj: $(CURL_CC) $(CFLAGS) /Fo"$@" $< $(LIB_DIROBJ)\libcurl.res: $(LIBCURL_SRC_DIR)\libcurl.rc $(RC) $(RC_FLAGS) # # curl.exe # | > > > > | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 | @if not exist "$(DIRDIST)\include\curl" mkdir $(DIRDIST)\include\curl @if not exist "$(DIRDIST)\lib" mkdir $(DIRDIST)\lib $(LIB_DIROBJ): @if not exist "$(LIB_DIROBJ)" mkdir $(LIB_DIROBJ) @if not exist "$(LIB_DIROBJ)\vauth" mkdir $(LIB_DIROBJ)\vauth @if not exist "$(LIB_DIROBJ)\vtls" mkdir $(LIB_DIROBJ)\vtls @if not exist "$(LIB_DIROBJ)\vquic" mkdir $(LIB_DIROBJ)\vquic $(CURL_DIROBJ): @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ) # we need a lib dir for the portability functions from libcurl # we use the .c directly here @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)\lib .SUFFIXES: .c .obj .res {$(LIBCURL_SRC_DIR)\}.c{$(LIB_DIROBJ)\}.obj: $(CURL_CC) $(CFLAGS) /Fo"$@" $< {$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj: $(CURL_CC) $(CFLAGS) /Fo"$@" $< {$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj: $(CURL_CC) $(CFLAGS) /Fo"$@" $< {$(LIBCURL_SRC_DIR)\vquic\}.c{$(LIB_DIROBJ)\vquic\}.obj: $(CURL_CC) $(CFLAGS) /Fo"$@" $< $(LIB_DIROBJ)\libcurl.res: $(LIBCURL_SRC_DIR)\libcurl.rc $(RC) $(RC_FLAGS) # # curl.exe # |
︙ | ︙ |
Changes to jni/sdl2tk/library/ttk/spinbox.tcl.
︙ | ︙ | |||
77 78 79 80 81 82 83 84 85 86 87 88 89 90 | } ## MouseWheel -- # Mousewheel callback. Turn these into <<Increment>> (-1, up) # or <<Decrement> (+1, down) events. # proc ttk::spinbox::MouseWheel {w dir} { if {$dir < 0} { event generate $w <<Increment>> } else { event generate $w <<Decrement>> } } | > | 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | } ## MouseWheel -- # Mousewheel callback. Turn these into <<Increment>> (-1, up) # or <<Decrement> (+1, down) events. # proc ttk::spinbox::MouseWheel {w dir} { if {[$w instate disabled]} { return } if {$dir < 0} { event generate $w <<Increment>> } else { event generate $w <<Decrement>> } } |
︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | ## Spin -- # Handle <<Increment>> and <<Decrement>> events. # If -values is specified, cycle through the list. # Otherwise cycle through numeric range based on # -from, -to, and -increment. # proc ttk::spinbox::Spin {w dir} { set nvalues [llength [set values [$w cget -values]]] set value [$w get] if {$nvalues} { set current [lsearch -exact $values $value] set index [Adjust $w [expr {$current + $dir}] 0 [expr {$nvalues - 1}]] $w set [lindex $values $index] } else { | > | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | ## Spin -- # Handle <<Increment>> and <<Decrement>> events. # If -values is specified, cycle through the list. # Otherwise cycle through numeric range based on # -from, -to, and -increment. # proc ttk::spinbox::Spin {w dir} { if {[$w instate disabled]} { return } set nvalues [llength [set values [$w cget -values]]] set value [$w get] if {$nvalues} { set current [lsearch -exact $values $value] set index [Adjust $w [expr {$current + $dir}] 0 [expr {$nvalues - 1}]] $w set [lindex $values $index] } else { |
︙ | ︙ |
Changes to jni/sdl2tk/win/makefile.vc.
︙ | ︙ | |||
332 333 334 335 336 337 338 339 340 341 342 343 344 345 | #--------------------------------------------------------------------- release: setup $(TKSTUBLIB) $(WISH) all: release $(CAT32) core: setup $(TKSTUBLIB) $(TKLIB) cwish: $(WISHC) install: install-binaries install-libraries install-docs tktest: setup $(TKTEST) $(CAT32) setup: default-setup test: test-classic test-ttk test-classic: setup $(TKTEST) $(TKLIB) $(CAT32) | > > > | 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | #--------------------------------------------------------------------- release: setup $(TKSTUBLIB) $(WISH) all: release $(CAT32) core: setup $(TKSTUBLIB) $(TKLIB) cwish: $(WISHC) install: install-binaries install-libraries install-docs !if $(SYMBOLS) install: install-pdbs !endif tktest: setup $(TKTEST) $(CAT32) setup: default-setup test: test-classic test-ttk test-classic: setup $(TKTEST) $(TKLIB) $(CAT32) |
︙ | ︙ | |||
512 513 514 515 516 517 518 519 520 521 522 | install-docs: !if exist("$(CHMFILE)") @echo Installing compiled HTML help @$(CPY) "$(CHMFILE)" "$(DOC_INSTALL_DIR)\" !endif # "emacs font-lock highlighting fix #--------------------------------------------------------------------- # Special case object file targets #--------------------------------------------------------------------- | > > > > > | | | | | | 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 | install-docs: !if exist("$(CHMFILE)") @echo Installing compiled HTML help @$(CPY) "$(CHMFILE)" "$(DOC_INSTALL_DIR)\" !endif # "emacs font-lock highlighting fix install-pdbs: @echo Installing debug symbols @$(CPY) "$(OUT_DIR)\*.pdb" "$(BIN_INSTALL_DIR)\" # "emacs font-lock highlighting fix #--------------------------------------------------------------------- # Special case object file targets #--------------------------------------------------------------------- $(TMP_DIR)\testMain.obj: $(WIN_DIR)\winMain.c $(cc32) $(appcflags_nostubs) -DTK_TEST \ -DTCL_USE_STATIC_PACKAGES=$(TCL_USE_STATIC_PACKAGES) \ -Fo$@ $? $(TMP_DIR)\tkTest.obj: $(GENERICDIR)\tkTest.c $(cc32) $(appcflags_nostubs) -Fo$@ $? $(TMP_DIR)\tkOldTest.obj: $(GENERICDIR)\tkOldTest.c $(cc32) $(appcflags_nostubs) -Fo$@ $? $(TMP_DIR)\tkWinTest.obj: $(WIN_DIR)\tkWinTest.c $(cc32) $(appcflags_nostubs) -Fo$@ $? $(TMP_DIR)\tkSquare.obj: $(GENERICDIR)\tkSquare.c $(cc32) $(appcflags_nostubs) -Fo$@ $? $(TMP_DIR)\winMain.obj: $(WIN_DIR)\winMain.c $(cc32) $(appcflags_nostubs) \ -DTCL_USE_STATIC_PACKAGES=$(TCL_USE_STATIC_PACKAGES) \ -Fo$@ $? $(TMP_DIR)\tkMain2.obj: $(GENERICDIR)\tkMain.c $(cc32) $(pkgcflags) -DTK_ASCII_MAIN -Fo$@ $? # The following objects are part of the stub library and should not # be built as DLL objects but none of the symbols should be exported # and no reference made to a C runtime. $(TMP_DIR)\tkStubLib.obj : $(GENERICDIR)\tkStubLib.c $(cc32) $(stubscflags) -Fo$@ $? $(TMP_DIR)\wish.exe.manifest: $(WIN_DIR)\wish.exe.manifest.in @nmakehlp -s << $** >$@ @MACHINE@ $(MACHINE:IX86=X86) @TK_WIN_VERSION@ $(DOTVERSION).0.0 << #--------------------------------------------------------------------- # Generate the source dependencies. Having dependency rules will # improve incremental build accuracy without having to resort to a # full rebuild just because some non-global header file like # tclCompile.h was changed. These rules aren't needed when building # from scratch. #--------------------------------------------------------------------- depend: !if !exist($(TCLSH)) @echo Build tclsh first! !else set TCL_LIBRARY=$(TCL_LIBRARY) $(TCLSH) $(TCLTOOLSDIR:\=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \ -passthru:"-DBUILD_tk $(TK_INCLUDES)" $(GENERICDIR),$$(GENERICDIR) \ $(WIN_DIR),$$(WIN_DIR) $(TTKDIR),$$(TTKDIR) $(XLIBDIR),$$(XLIBDIR) \ $(BITMAPDIR),$$(BITMAPDIR) @<< $(TKOBJS) << !endif #--------------------------------------------------------------------- # Dependency rules |
︙ | ︙ |
Changes to jni/sdl2tk/win/rules.vc.
︙ | ︙ | |||
20 21 22 23 24 25 26 | !ifndef _RULES_VC _RULES_VC = 1 # The following macros define the version of the rules.vc nmake build system # For modifications that are not backward-compatible, you *must* change # the major version. RULES_VERSION_MAJOR = 1 | | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | !ifndef _RULES_VC _RULES_VC = 1 # The following macros define the version of the rules.vc nmake build system # For modifications that are not backward-compatible, you *must* change # the major version. RULES_VERSION_MAJOR = 1 RULES_VERSION_MINOR = 4 # The PROJECT macro must be defined by parent makefile. !if "$(PROJECT)" == "" !error *** Error: Macro PROJECT not defined! Please define it before including rules.vc !endif !if "$(PRJ_PACKAGE_TCLNAME)" == "" |
︙ | ︙ | |||
158 159 160 161 162 163 164 | # some Tcl interfaces that are not publicly exposed. # # The fragment will set the following macros: # ROOT - root of this module sources # COMPATDIR - source directory that holds compatibility sources # DOCDIR - source directory containing documentation files # GENERICDIR - platform-independent source directory | | | 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | # some Tcl interfaces that are not publicly exposed. # # The fragment will set the following macros: # ROOT - root of this module sources # COMPATDIR - source directory that holds compatibility sources # DOCDIR - source directory containing documentation files # GENERICDIR - platform-independent source directory # WIN_DIR - Windows-specific source directory # TESTDIR - directory containing test files # TOOLSDIR - directory containing build tools # _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set # when building Tcl itself. # _INSTALLDIR - native form of the installation path. For Tcl # this will be the root of the Tcl installation. For extensions # this will be the lib directory under the root. |
︙ | ︙ | |||
211 212 213 214 215 216 217 | !ifndef DEMODIR !if exist("$(LIBDIR)\demos") DEMODIR = $(LIBDIR)\demos !else DEMODIR = $(ROOT)\demos !endif !endif # ifndef DEMODIR | | | < < | | | | | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 | !ifndef DEMODIR !if exist("$(LIBDIR)\demos") DEMODIR = $(LIBDIR)\demos !else DEMODIR = $(ROOT)\demos !endif !endif # ifndef DEMODIR # Do NOT use WINDIR because it is Windows internal environment # variable to point to c:\windows! WIN_DIR = $(ROOT)\win !ifndef RCDIR !if exist("$(WIN_DIR)\rc") RCDIR = $(WIN_DIR)\rc !else RCDIR = $(WIN_DIR) !endif !endif RCDIR = $(RCDIR:/=\) # The target directory where the built packages and binaries will be installed. # INSTALLDIR is the (optional) path specified by the user. # _INSTALLDIR is INSTALLDIR using the backslash separator syntax |
︙ | ︙ | |||
389 390 391 392 393 394 395 | *** Warning: This extension requires the source distribution of Tk.^ *** Please set the TKDIR macro to point to the Tk sources. !error $(MSG) !endif !endif | | | | 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | *** Warning: This extension requires the source distribution of Tk.^ *** Please set the TKDIR macro to point to the Tk sources. !error $(MSG) !endif !endif # If INSTALLDIR set to Tcl installation root dir then reset to the # lib dir for installing extensions !if exist("$(_INSTALLDIR)\include\tcl.h") _INSTALLDIR=$(_INSTALLDIR)\lib !endif # END Case 2(c) or (d) - Building an extension !endif # if $(DOING_TCL) |
︙ | ︙ | |||
470 471 472 473 474 475 476 477 478 479 480 481 482 483 | !endif !if "$(MACHINE)" != "$(ARCH)" !error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH). !endif !else MACHINE=$(ARCH) !endif #------------------------------------------------------------ # Figure out the *host* architecture by reading the registry !if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86] NATIVE_ARCH=IX86 !else | > > > > > > > > > > > > > > > | 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 | !endif !if "$(MACHINE)" != "$(ARCH)" !error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH). !endif !else MACHINE=$(ARCH) !endif #--------------------------------------------------------------- # The PLATFORM_IDENTIFY macro matches the values returned by # the Tcl platform::identify command !if "$(MACHINE)" == "AMD64" PLATFORM_IDENTIFY = win32-x86_64 !else PLATFORM_IDENTIFY = win32-ix86 !endif # The MULTIPLATFORM macro controls whether binary extensions are installed # in platform-specific directories. Intended to be set/used by extensions. !ifndef MULTIPLATFORM_INSTALL MULTIPLATFORM_INSTALL = 0 !endif #------------------------------------------------------------ # Figure out the *host* architecture by reading the registry !if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86] NATIVE_ARCH=IX86 !else |
︙ | ︙ | |||
542 543 544 545 546 547 548 | # 5. Test for compiler features # Visual C++ compiler options have changed over the years. Check # which options are supported by the compiler in use. # # The following macros are set: # OPTIMIZATIONS - the compiler flags to be used for optimized builds # DEBUGFLAGS - the compiler flags to be used for debug builds | | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 | # 5. Test for compiler features # Visual C++ compiler options have changed over the years. Check # which options are supported by the compiler in use. # # The following macros are set: # OPTIMIZATIONS - the compiler flags to be used for optimized builds # DEBUGFLAGS - the compiler flags to be used for debug builds # LINKERFLAGS - Flags passed to the linker # # Note that these are the compiler settings *available*, not those # that will be *used*. The latter depends on the OPTS macro settings # which we have not yet parsed. # # Also note that some of the flags in OPTIMIZATIONS are not really # related to optimization. They are placed there only for legacy reasons |
︙ | ︙ | |||
667 668 669 670 671 672 673 674 675 676 677 678 679 680 | # USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation. # 0 -> Use the non-thread allocator. # UNCHECKED - 1 -> when doing a debug build with symbols, use the release # C runtime, 0 -> use the debug C runtime. # USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking # CONFIG_CHECK - 1 -> check current build configuration against Tcl # configuration (ignored for Tcl itself) # Further, LINKERFLAGS are modified based on above. # Default values for all the above STATIC_BUILD = 0 TCL_THREADS = 1 DEBUG = 0 SYMBOLS = 0 | > > | 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 | # USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation. # 0 -> Use the non-thread allocator. # UNCHECKED - 1 -> when doing a debug build with symbols, use the release # C runtime, 0 -> use the debug C runtime. # USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking # CONFIG_CHECK - 1 -> check current build configuration against Tcl # configuration (ignored for Tcl itself) # _USE_64BIT_TIME_T - forces a build using 64-bit time_t for 32-bit build # (CRT library should support this) # Further, LINKERFLAGS are modified based on above. # Default values for all the above STATIC_BUILD = 0 TCL_THREADS = 1 DEBUG = 0 SYMBOLS = 0 |
︙ | ︙ | |||
728 729 730 731 732 733 734 | TCL_USE_STATIC_PACKAGES = 1 !else TCL_USE_STATIC_PACKAGES = 0 !endif !if [nmakehlp -f $(OPTS) "nothreads"] !message *** Compile explicitly for non-threaded tcl | | > > > > > > > | 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 | TCL_USE_STATIC_PACKAGES = 1 !else TCL_USE_STATIC_PACKAGES = 0 !endif !if [nmakehlp -f $(OPTS) "nothreads"] !message *** Compile explicitly for non-threaded tcl TCL_THREADS = 0 USE_THREAD_ALLOC= 0 !else TCL_THREADS = 1 USE_THREAD_ALLOC= 1 !endif !if [nmakehlp -f $(OPTS) "time64bit"] !message *** Force 64-bit time_t _USE_64BIT_TIME_T = 1 !endif # Yes, it's weird that the "symbols" option controls DEBUG and # the "pdbs" option controls SYMBOLS. That's historical. !if [nmakehlp -f $(OPTS) "symbols"] !message *** Doing symbols DEBUG = 1 !else DEBUG = 0 !endif |
︙ | ︙ | |||
966 967 968 969 970 971 972 | ################################################################ # 10. Construct output directory and file paths # Figure-out how to name our intermediate and output directories. # In order to avoid inadvertent mixing of object files built using # different compilers, build configurations etc., # # Naming convention (suffixes): | | | 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 | ################################################################ # 10. Construct output directory and file paths # Figure-out how to name our intermediate and output directories. # In order to avoid inadvertent mixing of object files built using # different compilers, build configurations etc., # # Naming convention (suffixes): # t = full thread support. (Not used for Tcl >= 8.7) # s = static library (as opposed to an import library) # g = linked to the debug enabled C run-time. # x = special static build when it links to the dynamic C run-time. # # The following macros are set in this section: # SUFX - the suffix to use for binaries based on above naming convention # BUILDDIRTOP - the toplevel default output directory |
︙ | ︙ | |||
1024 1025 1026 1027 1028 1029 1030 | EXT = lib !if !$(MSVCRT) TMP_DIRFULL = $(TMP_DIRFULL:X=) SUFX = $(SUFX:x=) !endif !endif | | | 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 | EXT = lib !if !$(MSVCRT) TMP_DIRFULL = $(TMP_DIRFULL:X=) SUFX = $(SUFX:x=) !endif !endif !if !$(TCL_THREADS) || $(TCL_VERSION) > 86 TMP_DIRFULL = $(TMP_DIRFULL:Threaded=) SUFX = $(SUFX:t=) !endif !ifndef TMP_DIR TMP_DIR = $(TMP_DIRFULL) !ifndef OUT_DIR |
︙ | ︙ | |||
1057 1058 1059 1060 1061 1062 1063 | # The name of the stubs library for the project being built STUBPREFIX = $(PROJECT)stub # Set up paths to various Tcl executables and libraries needed by extensions !if $(DOING_TCL) | | | | < < < | | | | < < < | | | | 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 | # The name of the stubs library for the project being built STUBPREFIX = $(PROJECT)stub # Set up paths to various Tcl executables and libraries needed by extensions !if $(DOING_TCL) TCLSHNAME = $(PROJECT)sh$(VERSION)$(SUFX).exe TCLSH = $(OUT_DIR)\$(TCLSHNAME) TCLIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib TCLLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) TCLLIB = $(OUT_DIR)\$(TCLLIBNAME) TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib TCLSTUBLIB = $(OUT_DIR)\$(TCLSTUBLIBNAME) TCL_INCLUDES = -I"$(WIN_DIR)" -I"$(GENERICDIR)" !else # ! $(DOING_TCL) !if $(TCLINSTALL) # Building against an installed Tcl # When building extensions, we need to locate tclsh. Depending on version # of Tcl we are building against, this may or may not have a "t" suffix. # Try various possibilities in turn. TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX:t=).exe !if !exist("$(TCLSH)") TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX:t=).exe !endif TCLSTUBLIB = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX:t=).lib # When building extensions, may be linking against Tcl that does not add # "t" suffix (e.g. 8.5 or 8.7). If lib not found check for that possibility. !if !exist("$(TCLIMPLIB)") TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)t$(SUFX:t=).lib !endif TCL_LIBRARY = $(_TCLDIR)\lib TCLREGLIB = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib TCLDDELIB = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib TCLTOOLSDIR = \must\have\tcl\sources\to\build\this\target TCL_INCLUDES = -I"$(_TCLDIR)\include" !else # Building against Tcl sources TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX:t=).exe !if !exist($(TCLSH)) TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX:t=).exe !endif TCLSTUBLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX:t=).lib # When building extensions, may be linking against Tcl that does not add # "t" suffix (e.g. 8.5 or 8.7). If lib not found check for that possibility. !if !exist("$(TCLIMPLIB)") TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)t$(SUFX:t=).lib !endif TCL_LIBRARY = $(_TCLDIR)\library TCLREGLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib TCLDDELIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib TCLTOOLSDIR = $(_TCLDIR)\tools TCL_INCLUDES = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win" |
︙ | ︙ | |||
1146 1147 1148 1149 1150 1151 1152 | TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX).lib !if $(DOING_TK) WISH = $(OUT_DIR)\$(WISHNAME) TKSTUBLIB = $(OUT_DIR)\$(TKSTUBLIBNAME) TKIMPLIB = $(OUT_DIR)\$(TKIMPLIBNAME) TKLIB = $(OUT_DIR)\$(TKLIBNAME) | | | 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 | TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX).lib !if $(DOING_TK) WISH = $(OUT_DIR)\$(WISHNAME) TKSTUBLIB = $(OUT_DIR)\$(TKSTUBLIBNAME) TKIMPLIB = $(OUT_DIR)\$(TKIMPLIBNAME) TKLIB = $(OUT_DIR)\$(TKLIBNAME) TK_INCLUDES = -I"$(WIN_DIR)" -I"$(GENERICDIR)" !else # effectively NEED_TK !if $(TKINSTALL) # Building against installed Tk WISH = $(_TKDIR)\bin\$(WISHNAME) TKSTUBLIB = $(_TKDIR)\lib\$(TKSTUBLIBNAME) TKIMPLIB = $(_TKDIR)\lib\$(TKIMPLIBNAME) |
︙ | ︙ | |||
1205 1206 1207 1208 1209 1210 1211 | # The following macros get defined in this section: # LIB_INSTALL_DIR - where libraries should be installed # BIN_INSTALL_DIR - where the executables should be installed # DOC_INSTALL_DIR - where documentation should be installed # SCRIPT_INSTALL_DIR - where scripts should be installed # INCLUDE_INSTALL_DIR - where C include files should be installed # DEMO_INSTALL_DIR - where demos should be installed | | > > > > > | | 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 | # The following macros get defined in this section: # LIB_INSTALL_DIR - where libraries should be installed # BIN_INSTALL_DIR - where the executables should be installed # DOC_INSTALL_DIR - where documentation should be installed # SCRIPT_INSTALL_DIR - where scripts should be installed # INCLUDE_INSTALL_DIR - where C include files should be installed # DEMO_INSTALL_DIR - where demos should be installed # PRJ_INSTALL_DIR - where package will be installed (not set for Tcl and Tk) !if $(DOING_TCL) || $(DOING_TK) LIB_INSTALL_DIR = $(_INSTALLDIR)\lib BIN_INSTALL_DIR = $(_INSTALLDIR)\bin DOC_INSTALL_DIR = $(_INSTALLDIR)\doc !if $(DOING_TCL) SCRIPT_INSTALL_DIR = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION) !else # DOING_TK SCRIPT_INSTALL_DIR = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION) !endif DEMO_INSTALL_DIR = $(SCRIPT_INSTALL_DIR)\demos INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\include !else # extension other than Tk PRJ_INSTALL_DIR = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION) !if $(MULTIPLATFORM_INSTALL) LIB_INSTALL_DIR = $(PRJ_INSTALL_DIR)\$(PLATFORM_IDENTIFY) BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR)\$(PLATFORM_IDENTIFY) !else LIB_INSTALL_DIR = $(PRJ_INSTALL_DIR) BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR) !endif DOC_INSTALL_DIR = $(PRJ_INSTALL_DIR) SCRIPT_INSTALL_DIR = $(PRJ_INSTALL_DIR) DEMO_INSTALL_DIR = $(PRJ_INSTALL_DIR)\demos INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\..\include !endif ################################################################### # 12. Set up actual options to be passed to the compiler and linker # Now we have all the information we need, set up the actual flags and # options that we will pass to the compiler and linker. The main |
︙ | ︙ | |||
1260 1261 1262 1263 1264 1265 1266 | !if $(TCL_MEM_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_MEM_DEBUG !endif !if $(TCL_COMPILE_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS !endif | | | | 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 | !if $(TCL_MEM_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_MEM_DEBUG !endif !if $(TCL_COMPILE_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS !endif !if $(TCL_THREADS) && $(TCL_VERSION) < 87 OPTDEFINES = $(OPTDEFINES) -DTCL_THREADS=1 !if $(USE_THREAD_ALLOC) && $(TCL_VERSION) < 87 OPTDEFINES = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1 !endif !endif !if $(STATIC_BUILD) OPTDEFINES = $(OPTDEFINES) -DSTATIC_BUILD !endif !if $(TCL_NO_DEPRECATED) |
︙ | ︙ | |||
1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 | !endif !if "$(MACHINE)" == "AMD64" OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DO64BIT !endif !if $(VCVERSION) < 1300 OPTDEFINES = $(OPTDEFINES) -DNO_STRTOI64 !endif # _ATL_XP_TARGETING - Newer SDK's need this to build for XP COMPILERFLAGS = /D_ATL_XP_TARGETING # Following is primarily for the benefit of extensions. Tcl 8.5 builds # Tcl without /DUNICODE, while 8.6 builds with it defined. When building # an extension, it is advisable (but not mandated) to use the same Windows # API as the Tcl build. This is accordingly defaulted below. A particular # extension can override this by pre-definining USE_WIDECHAR_API. !ifndef USE_WIDECHAR_API !if $(TCL_VERSION) > 85 USE_WIDECHAR_API = 1 !else USE_WIDECHAR_API = 0 !endif !endif !if $(USE_WIDECHAR_API) | > > > > | | | 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 | !endif !if "$(MACHINE)" == "AMD64" OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DO64BIT !endif !if $(VCVERSION) < 1300 OPTDEFINES = $(OPTDEFINES) -DNO_STRTOI64 !endif !if "$(_USE_64BIT_TIME_T)" == "1" OPTDEFINES = $(OPTDEFINES) -D_USE_64BIT_TIME_T !endif # _ATL_XP_TARGETING - Newer SDK's need this to build for XP COMPILERFLAGS = /D_ATL_XP_TARGETING # Following is primarily for the benefit of extensions. Tcl 8.5 builds # Tcl without /DUNICODE, while 8.6 builds with it defined. When building # an extension, it is advisable (but not mandated) to use the same Windows # API as the Tcl build. This is accordingly defaulted below. A particular # extension can override this by pre-definining USE_WIDECHAR_API. !ifndef USE_WIDECHAR_API !if $(TCL_VERSION) > 85 USE_WIDECHAR_API = 1 !else USE_WIDECHAR_API = 0 !endif !endif !if $(USE_WIDECHAR_API) COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE !endif # Like the TEA system only set this non empty for non-Tk extensions # Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME # so we pass both !if !$(DOING_TCL) && !$(DOING_TK) PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \ -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \ -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \ -DMODULE_SCOPE=extern !endif # crt picks the C run time based on selected OPTS !if $(MSVCRT) !if $(DEBUG) && !$(UNCHECKED) crt = -MDd !else |
︙ | ︙ | |||
1386 1387 1388 1389 1390 1391 1392 | !if $(DEBUG) # Turn warnings into errors cwarn = $(cwarn) -WX !endif INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES) !if !$(DOING_TCL) && !$(DOING_TK) | | < > | | | | 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 | !if $(DEBUG) # Turn warnings into errors cwarn = $(cwarn) -WX !endif INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES) !if !$(DOING_TCL) && !$(DOING_TK) INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WIN_DIR)" -I"$(COMPATDIR)" !endif # These flags are defined roughly in the order of the pre-reform # rules.vc/makefile.vc to help visually compare that the pre- and # post-reform build logs # cflags contains generic flags used for building practically all object files cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug) # appcflags contains $(cflags) and flags for building the application # object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus # flags used for building shared object files The two differ in the # BUILD_$(PROJECT) macro which should be defined only for the shared # library *implementation* and not for its caller interface appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) appcflags = $(appcflags_nostubs) $(USE_STUBS_DEFS) pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT) pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT) # stubscflags contains $(cflags) plus flags used for building a stubs # library for the package. Note: -DSTATIC_BUILD is defined in # $(OPTDEFINES) only if the OPTS configuration indicates a static # library. However the stubs library is ALWAYS static hence included # here irrespective of the OPTS setting. # # TBD - tclvfs has a comment that stubs libs should not be compiled with -GL # without stating why. Tcl itself compiled stubs libs with this flag. # so we do not remove it from cflags. -GL may prevent extensions # compiled with one VC version to fail to link against stubs library # compiled with another VC version. Check for this and fix accordingly. stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES) $(USE_STUBS_DEFS) # Link flags !if $(DEBUG) ldebug = -debug -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3 !if $(SYMBOLS) ldebug = $(ldebug) -debug -debugtype:cv !endif !endif # Note: Profiling is currently only possible with the Visual Studio Enterprise !if $(PROFILE) ldebug= $(ldebug) -profile !endif ### Declarations common to all linker versions lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug) !if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900 lflags = $(lflags) -nodefaultlib:libucrt.lib !endif # Old linkers (Visual C++ 6 in particular) will link for fast loading |
︙ | ︙ | |||
1500 1501 1502 1503 1504 1505 1506 | RESCMD = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \ $(TCL_INCLUDES) \ -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \ -DCOMMAVERSION=$(DOTVERSION:.=,),0 \ -DDOTVERSION=\"$(DOTVERSION)\" \ -DVERSION=\"$(VERSION)\" \ -DSUFX=\"$(SUFX)\" \ | | | > > > > > > | > | > > > > > > > | | | > | > > > > > > > | | | | | | | | | | | | | | | 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 | RESCMD = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \ $(TCL_INCLUDES) \ -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \ -DCOMMAVERSION=$(DOTVERSION:.=,),0 \ -DDOTVERSION=\"$(DOTVERSION)\" \ -DVERSION=\"$(VERSION)\" \ -DSUFX=\"$(SUFX)\" \ -DPROJECT=\"$(PROJECT)\" \ -DPRJLIBNAME=\"$(PRJLIBNAME)\" !ifndef DEFAULT_BUILD_TARGET DEFAULT_BUILD_TARGET = $(PROJECT) !endif default-target: $(DEFAULT_BUILD_TARGET) !if $(MULTIPLATFORM_INSTALL) default-pkgindex: @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \ [list load [file join $$dir $(PLATFORM_IDENTIFY) $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl !else default-pkgindex: @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \ [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl !endif default-pkgindex-tea: @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl @PACKAGE_VERSION@ $(DOTVERSION) @PACKAGE_NAME@ $(PRJ_PACKAGE_TCLNAME) @PACKAGE_TCLNAME@ $(PRJ_PACKAGE_TCLNAME) @PKG_LIB_FILE@ $(PRJLIBNAME) << default-install: default-install-binaries default-install-libraries !if $(SYMBOLS) default-install: default-install-pdbs !endif # Again to deal with historical brokenness, there is some confusion # in terminlogy. For extensions, the "install-binaries" was used to # locate target directory for *binary shared libraries* and thus # the appropriate macro is LIB_INSTALL_DIR since BIN_INSTALL_DIR is # for executables (exes). On the other hand the "install-libraries" # target is for *scripts* and should have been called "install-scripts". default-install-binaries: $(PRJLIB) @echo Installing binaries to '$(LIB_INSTALL_DIR)' @if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)" @$(CPY) $(PRJLIB) "$(LIB_INSTALL_DIR)" >NUL # Alias for default-install-scripts default-install-libraries: default-install-scripts default-install-scripts: $(OUT_DIR)\pkgIndex.tcl @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)' @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)" @echo Installing package index in '$(SCRIPT_INSTALL_DIR)' @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR) default-install-stubs: @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)' @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)" @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL default-install-pdbs: @echo Installing PDBs to '$(LIB_INSTALL_DIR)' @if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)" @$(CPY) "$(OUT_DIR)\*.pdb" "$(LIB_INSTALL_DIR)\" default-install-docs-html: @echo Installing documentation files to '$(DOC_INSTALL_DIR)' @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)" @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)" default-install-docs-n: @echo Installing documentation files to '$(DOC_INSTALL_DIR)' @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)" @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)" default-install-demos: @echo Installing demos to '$(DEMO_INSTALL_DIR)' @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)" @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)" default-clean: @echo Cleaning $(TMP_DIR)\* ... @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR) @echo Cleaning $(WIN_DIR)\nmakehlp.obj, nmakehlp.exe ... @if exist $(WIN_DIR)\nmakehlp.obj del $(WIN_DIR)\nmakehlp.obj @if exist $(WIN_DIR)\nmakehlp.exe del $(WIN_DIR)\nmakehlp.exe @if exist $(WIN_DIR)\nmakehlp.out del $(WIN_DIR)\nmakehlp.out @echo Cleaning $(WIN_DIR)\nmhlp-out.txt ... @if exist $(WIN_DIR)\nmhlp-out.txt del $(WIN_DIR)\nmhlp-out.txt @echo Cleaning $(WIN_DIR)\_junk.pch ... @if exist $(WIN_DIR)\_junk.pch del $(WIN_DIR)\_junk.pch @echo Cleaning $(WIN_DIR)\vercl.x, vercl.i ... @if exist $(WIN_DIR)\vercl.x del $(WIN_DIR)\vercl.x @if exist $(WIN_DIR)\vercl.i del $(WIN_DIR)\vercl.i @echo Cleaning $(WIN_DIR)\versions.vc, version.vc ... @if exist $(WIN_DIR)\versions.vc del $(WIN_DIR)\versions.vc @if exist $(WIN_DIR)\version.vc del $(WIN_DIR)\version.vc default-hose: default-clean @echo Hosing $(OUT_DIR)\* ... @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR) # Only for backward compatibility default-distclean: default-hose |
︙ | ︙ | |||
1598 1599 1600 1601 1602 1603 1604 | cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS) default-shell: default-setup $(PROJECT) @set TCLLIBPATH=$(OUT_DIR:\=/) @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)" $(DEBUGGER) $(TCLSH) | | | 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 | cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS) default-shell: default-setup $(PROJECT) @set TCLLIBPATH=$(OUT_DIR:\=/) @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)" $(DEBUGGER) $(TCLSH) # Generation of Windows version resource !ifdef RCFILE # Note: don't use $** in below rule because there may be other dependencies # and only the "master" rc must be passed to the resource compiler $(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc $(RESCMD) $(RCDIR)\$(PROJECT).rc |
︙ | ︙ | |||
1637 1638 1639 1640 1641 1642 1643 | BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "Tcl extension " PROJECT VALUE "OriginalFilename", PRJLIBNAME VALUE "FileVersion", DOTVERSION VALUE "ProductName", "Package " PROJECT " for Tcl" | | | 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 | BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "Tcl extension " PROJECT VALUE "OriginalFilename", PRJLIBNAME VALUE "FileVersion", DOTVERSION VALUE "ProductName", "Package " PROJECT " for Tcl" VALUE "ProductVersion", DOTVERSION END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END |
︙ | ︙ | |||
1663 1664 1665 1666 1667 1668 1669 | # main application, the master makefile should define explicit rules. {$(ROOT)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << | | | | 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 | # main application, the master makefile should define explicit rules. {$(ROOT)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(WIN_DIR)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(GENERICDIR)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(COMPATDIR)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(RCDIR)}.rc{$(TMP_DIR)}.res: $(RESCMD) $< {$(WIN_DIR)}.rc{$(TMP_DIR)}.res: $(RESCMD) $< {$(TMP_DIR)}.rc{$(TMP_DIR)}.res: $(RESCMD) $< .SUFFIXES: .SUFFIXES:.c .rc |
︙ | ︙ | |||
1716 1717 1718 1719 1720 1721 1722 | !if $(CONFIG_CHECK) !ifdef TCLNMAKECONFIG !include $(TCLNMAKECONFIG) !if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)" !error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)). !endif | | | 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 | !if $(CONFIG_CHECK) !ifdef TCLNMAKECONFIG !include $(TCLNMAKECONFIG) !if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)" !error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)). !endif !if $(TCL_VERSION) < 87 && defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC) !message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)). !endif !if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG) !message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)). !endif !endif |
︙ | ︙ |
Changes to jni/tcl/generic/tclCompile.c.
︙ | ︙ | |||
2122 2123 2124 2125 2126 2127 2128 | const char *p = script; /* Where we are in our compile. */ int depth = TclGetStackDepth(envPtr); Interp *iPtr = (Interp *) interp; if (envPtr->iPtr == NULL) { Tcl_Panic("TclCompileScript() called on uninitialized CompileEnv"); } | | | 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 | const char *p = script; /* Where we are in our compile. */ int depth = TclGetStackDepth(envPtr); Interp *iPtr = (Interp *) interp; if (envPtr->iPtr == NULL) { Tcl_Panic("TclCompileScript() called on uninitialized CompileEnv"); } /* * Check depth to avoid overflow of the C execution stack by too many * nested calls of TclCompileScript (considering interp recursionlimit). * Factor 5/4 (1.25) is used to avoid too mistaken limit recognition * during "mixed" evaluation and compilation process (nested eval+compile) * and is good enough for default recursionlimit (1000). */ if (iPtr->numLevels / 5 > iPtr->maxNestingDepth / 4) { |
︙ | ︙ | |||
2214 2215 2216 2217 2218 2219 2220 | * The advantage of this shortcut is that CompileCommandTokens() * can be written with an assumption that parsePtr->numWords > 0, with * the implication the CCT() always generates bytecode. */ continue; } | | | 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 | * The advantage of this shortcut is that CompileCommandTokens() * can be written with an assumption that parsePtr->numWords > 0, with * the implication the CCT() always generates bytecode. */ continue; } /* * Avoid stack exhaustion by too many nested calls of TclCompileScript * (considering interp recursionlimit). */ iPtr->numLevels++; lastCmdIdx = CompileCommandTokens(interp, parsePtr, envPtr); |
︙ | ︙ |
Changes to jni/tcl/generic/tclEncoding.c.
︙ | ︙ | |||
1778 1779 1780 1781 1782 1783 1784 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 192 ... 207 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 208 ... 223 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 224 ... 239 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 240 ... 255 */ }; Tcl_DStringInit(&lineString); | | | 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 192 ... 207 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 208 ... 223 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 224 ... 239 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 240 ... 255 */ }; Tcl_DStringInit(&lineString); if (Tcl_Gets(chan, &lineString) == -1) { return NULL; } line = Tcl_DStringValue(&lineString); fallback = (int) strtol(line, &line, 16); symbol = (int) strtol(line, &line, 10); numPages = (int) strtol(line, &line, 10); |
︙ | ︙ | |||
2112 2113 2114 2115 2116 2117 2118 | Tcl_DStringFree(&lineString); } size = sizeof(EscapeEncodingData) - sizeof(EscapeSubTable) + Tcl_DStringLength(&escapeData); dataPtr = ckalloc(size); dataPtr->initLen = strlen(init); | | | | | 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 | Tcl_DStringFree(&lineString); } size = sizeof(EscapeEncodingData) - sizeof(EscapeSubTable) + Tcl_DStringLength(&escapeData); dataPtr = ckalloc(size); dataPtr->initLen = strlen(init); memcpy(dataPtr->init, init, dataPtr->initLen + 1); dataPtr->finalLen = strlen(final); memcpy(dataPtr->final, final, dataPtr->finalLen + 1); dataPtr->numSubTables = Tcl_DStringLength(&escapeData) / sizeof(EscapeSubTable); memcpy(dataPtr->subTables, Tcl_DStringValue(&escapeData), Tcl_DStringLength(&escapeData)); Tcl_DStringFree(&escapeData); memset(dataPtr->prefixBytes, 0, sizeof(dataPtr->prefixBytes)); for (i = 0; i < dataPtr->numSubTables; i++) { dataPtr->prefixBytes[UCHAR(dataPtr->subTables[i].sequence[0])] = 1; } if (dataPtr->init[0] != '\0') { |
︙ | ︙ | |||
2206 2207 2208 2209 2210 2211 2212 | srcLen = dstLen; result = TCL_CONVERT_NOSPACE; } *srcReadPtr = srcLen; *dstWrotePtr = srcLen; *dstCharsPtr = srcLen; | | | 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 | srcLen = dstLen; result = TCL_CONVERT_NOSPACE; } *srcReadPtr = srcLen; *dstWrotePtr = srcLen; *dstCharsPtr = srcLen; memcpy(dst, src, srcLen); return result; } /* *------------------------------------------------------------------------- * * UtfIntToUtfExtProc -- |
︙ | ︙ | |||
3733 3734 3735 3736 3737 3738 3739 | if (flags & TCL_ENCODING_START) { state = 0; if ((dst + dataPtr->initLen) > dstEnd) { *srcReadPtr = 0; *dstWrotePtr = 0; return TCL_CONVERT_NOSPACE; } | | | 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 | if (flags & TCL_ENCODING_START) { state = 0; if ((dst + dataPtr->initLen) > dstEnd) { *srcReadPtr = 0; *dstWrotePtr = 0; return TCL_CONVERT_NOSPACE; } memcpy(dst, dataPtr->init, dataPtr->initLen); dst += dataPtr->initLen; } else { state = PTR2INT(*statePtr); } encodingPtr = GetTableEncoding(dataPtr, state); tableDataPtr = encodingPtr->clientData; |
︙ | ︙ | |||
3812 3813 3814 3815 3816 3817 3818 | */ state = oldState; result = TCL_CONVERT_NOSPACE; break; } memcpy(dst, subTablePtr->sequence, | | | 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 | */ state = oldState; result = TCL_CONVERT_NOSPACE; break; } memcpy(dst, subTablePtr->sequence, subTablePtr->sequenceLen); dst += subTablePtr->sequenceLen; } } if (tablePrefixBytes[(word >> 8)] != 0) { if (dst + 1 > dstEnd) { result = TCL_CONVERT_NOSPACE; |
︙ | ︙ | |||
3855 3856 3857 3858 3859 3860 3861 | if ((dst + dataPtr->finalLen + (state?len:0)) > dstEnd) { result = TCL_CONVERT_NOSPACE; } else { if (state) { memcpy(dst, dataPtr->subTables[0].sequence, len); dst += len; } | | | 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 | if ((dst + dataPtr->finalLen + (state?len:0)) > dstEnd) { result = TCL_CONVERT_NOSPACE; } else { if (state) { memcpy(dst, dataPtr->subTables[0].sequence, len); dst += len; } memcpy(dst, dataPtr->final, dataPtr->finalLen); dst += dataPtr->finalLen; state &= ~TCL_ENCODING_END; } } *statePtr = (Tcl_EncodingState) INT2PTR(state); *srcReadPtr = src - srcStart; |
︙ | ︙ |
Changes to jni/tcl/generic/tclUtil.c.
︙ | ︙ | |||
920 921 922 923 924 925 926 | Tcl_SetErrorCode(interp, "TCL", "INTERNAL", "Tcl_SplitList", NULL); } return TCL_ERROR; } argv[i] = p; if (literal) { | | | 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 | Tcl_SetErrorCode(interp, "TCL", "INTERNAL", "Tcl_SplitList", NULL); } return TCL_ERROR; } argv[i] = p; if (literal) { memcpy(p, element, elSize); p += elSize; *p = 0; p++; } else { p += 1 + TclCopyAndCollapse(elSize, element, p); } } |
︙ | ︙ | |||
958 959 960 961 962 963 964 | * None. * *---------------------------------------------------------------------- */ int Tcl_ScanElement( | | | | | 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 | * None. * *---------------------------------------------------------------------- */ int Tcl_ScanElement( const char *src, /* String to convert to list element. */ int *flagPtr) /* Where to store information to guide * Tcl_ConvertCountedElement. */ { return Tcl_ScanCountedElement(src, -1, flagPtr); } /* *---------------------------------------------------------------------- * |
︙ | ︙ | |||
1338 1339 1340 1341 1342 1343 1344 | * None. * *---------------------------------------------------------------------- */ int Tcl_ConvertElement( | | | | | 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 | * None. * *---------------------------------------------------------------------- */ int Tcl_ConvertElement( const char *src, /* Source information for list element. */ char *dst, /* Place to put list-ified element. */ int flags) /* Flags produced by Tcl_ScanElement. */ { return Tcl_ConvertCountedElement(src, -1, dst, flags); } /* *---------------------------------------------------------------------- * |
︙ | ︙ | |||
1368 1369 1370 1371 1372 1373 1374 | * None. * *---------------------------------------------------------------------- */ int Tcl_ConvertCountedElement( | | | | | | 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 | * None. * *---------------------------------------------------------------------- */ int Tcl_ConvertCountedElement( const char *src, /* Source information for list element. */ int length, /* Number of bytes in src, or -1. */ char *dst, /* Place to put list-ified element. */ int flags) /* Flags produced by Tcl_ScanElement. */ { int numBytes = TclConvertElement(src, length, dst, flags); dst[numBytes] = '\0'; return numBytes; } /* |
︙ | ︙ | |||
1401 1402 1403 1404 1405 1406 1407 | * None. * *---------------------------------------------------------------------- */ int TclConvertElement( | | | | | | 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 | * None. * *---------------------------------------------------------------------- */ int TclConvertElement( const char *src, /* Source information for list element. */ int length, /* Number of bytes in src, or -1. */ char *dst, /* Place to put list-ified element. */ int flags) /* Flags produced by Tcl_ScanElement. */ { int conversion = flags & CONVERT_MASK; char *p = dst; /* * Let the caller demand we use escape sequences rather than braces. */ |
︙ | ︙ | |||
2031 2032 2033 2034 2035 2036 2037 | Tcl_Panic("Tcl_Concat: max size of Tcl value exceeded"); } /* * All element bytes + (argc - 1) spaces + 1 terminating NULL. */ | | | 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 | Tcl_Panic("Tcl_Concat: max size of Tcl value exceeded"); } /* * All element bytes + (argc - 1) spaces + 1 terminating NULL. */ result = ckalloc(bytesNeeded + argc); for (p = result, i = 0; i < argc; i++) { int triml, trimr, elemLength; const char *element; element = argv[i]; elemLength = strlen(argv[i]); |
︙ | ︙ | |||
2064 2065 2066 2067 2068 2069 2070 | /* * Append to the result with space if needed. */ if (needSpace) { *p++ = ' '; } | | | 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 | /* * Append to the result with space if needed. */ if (needSpace) { *p++ = ' '; } memcpy(p, element, elemLength); p += elemLength; needSpace = 1; } *p = '\0'; return result; } |
︙ | ︙ | |||
2766 2767 2768 2769 2770 2771 2772 | */ if (newSize >= dsPtr->spaceAvl) { dsPtr->spaceAvl = newSize * 2; if (dsPtr->string == dsPtr->staticSpace) { char *newString = ckalloc(dsPtr->spaceAvl); | | | 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 | */ if (newSize >= dsPtr->spaceAvl) { dsPtr->spaceAvl = newSize * 2; if (dsPtr->string == dsPtr->staticSpace) { char *newString = ckalloc(dsPtr->spaceAvl); memcpy(newString, dsPtr->string, dsPtr->length); dsPtr->string = newString; } else { int offset = -1; /* See [16896d49fd] */ if (bytes >= dsPtr->string && bytes <= dsPtr->string + dsPtr->length) { |
︙ | ︙ | |||
2869 2870 2871 2872 2873 2874 2875 | */ if (newSize >= dsPtr->spaceAvl) { dsPtr->spaceAvl = newSize * 2; if (dsPtr->string == dsPtr->staticSpace) { char *newString = ckalloc(dsPtr->spaceAvl); | | | 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 | */ if (newSize >= dsPtr->spaceAvl) { dsPtr->spaceAvl = newSize * 2; if (dsPtr->string == dsPtr->staticSpace) { char *newString = ckalloc(dsPtr->spaceAvl); memcpy(newString, dsPtr->string, dsPtr->length); dsPtr->string = newString; } else { int offset = -1; /* See [16896d49fd] */ if (element >= dsPtr->string && element <= dsPtr->string + dsPtr->length) { |
︙ | ︙ | |||
2963 2964 2965 2966 2967 2968 2969 | dsPtr->spaceAvl = newsize; } else { dsPtr->spaceAvl = length + 1; } if (dsPtr->string == dsPtr->staticSpace) { char *newString = ckalloc(dsPtr->spaceAvl); | | | 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 | dsPtr->spaceAvl = newsize; } else { dsPtr->spaceAvl = length + 1; } if (dsPtr->string == dsPtr->staticSpace) { char *newString = ckalloc(dsPtr->spaceAvl); memcpy(newString, dsPtr->string, dsPtr->length); dsPtr->string = newString; } else { dsPtr->string = ckrealloc(dsPtr->string, dsPtr->spaceAvl); } } dsPtr->length = length; dsPtr->string[length] = 0; |
︙ | ︙ | |||
3067 3068 3069 3070 3071 3072 3073 | if (dsPtr->string != dsPtr->staticSpace) { ckfree(dsPtr->string); } /* * Do more efficient transfer when we know the result is a Tcl_Obj. When | | | 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 | if (dsPtr->string != dsPtr->staticSpace) { ckfree(dsPtr->string); } /* * Do more efficient transfer when we know the result is a Tcl_Obj. When * there's no string result, we only have to deal with two cases: * * 1. When the string rep is the empty string, when we don't copy but * instead use the staticSpace in the DString to hold an empty string. * 2. When the string rep is not there or there's a real string rep, when * we use Tcl_GetString to fetch (or generate) the string rep - which * we know to have been allocated with ckalloc() - and use it to |
︙ | ︙ | |||
3112 3113 3114 3115 3116 3117 3118 | dsPtr->length = strlen(iPtr->result); if (iPtr->freeProc != NULL) { if (iPtr->freeProc == TCL_DYNAMIC) { dsPtr->string = iPtr->result; dsPtr->spaceAvl = dsPtr->length+1; } else { dsPtr->string = ckalloc(dsPtr->length+1); | | | | 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 | dsPtr->length = strlen(iPtr->result); if (iPtr->freeProc != NULL) { if (iPtr->freeProc == TCL_DYNAMIC) { dsPtr->string = iPtr->result; dsPtr->spaceAvl = dsPtr->length+1; } else { dsPtr->string = ckalloc(dsPtr->length+1); memcpy(dsPtr->string, iPtr->result, dsPtr->length+1); iPtr->freeProc(iPtr->result); } dsPtr->spaceAvl = dsPtr->length+1; iPtr->freeProc = NULL; } else { if (dsPtr->length < TCL_DSTRING_STATIC_SIZE) { dsPtr->string = dsPtr->staticSpace; dsPtr->spaceAvl = TCL_DSTRING_STATIC_SIZE; } else { dsPtr->string = ckalloc(dsPtr->length+1); dsPtr->spaceAvl = dsPtr->length + 1; } memcpy(dsPtr->string, iPtr->result, dsPtr->length+1); } iPtr->result = iPtr->resultSpace; iPtr->resultSpace[0] = 0; } /* |
︙ | ︙ | |||
3280 3281 3282 3283 3284 3285 3286 | * at least TCL_DOUBLE_SPACE characters. */ { char *p, c; int exponent; int signum; char *digits; char *end; | | | 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 | * at least TCL_DOUBLE_SPACE characters. */ { char *p, c; int exponent; int signum; char *digits; char *end; int *precisionPtr = Tcl_GetThreadData(&precisionKey, sizeof(int)); /* * Handle NaN. */ if (TclIsNaN(value)) { TclFormatNaN(value, dst); |
︙ | ︙ | |||
4119 4120 4121 4122 4123 4124 4125 | int TclCheckBadOctal( Tcl_Interp *interp, /* Interpreter to use for error reporting. If * NULL, then no error message is left after * errors. */ const char *value) /* String to check. */ { | | | 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 | int TclCheckBadOctal( Tcl_Interp *interp, /* Interpreter to use for error reporting. If * NULL, then no error message is left after * errors. */ const char *value) /* String to check. */ { const char *p = value; /* * A frequent mistake is invalid octal values due to an unwanted leading * zero. Try to generate a meaningful error message. */ while (TclIsSpaceProc(*p)) { |
︙ | ︙ | |||
4310 4311 4312 4313 4314 4315 4316 | if (NULL != pgvPtr->value) { ckfree(pgvPtr->value); } else { Tcl_CreateExitHandler(FreeProcessGlobalValue, pgvPtr); } bytes = Tcl_GetStringFromObj(newValue, &pgvPtr->numBytes); pgvPtr->value = ckalloc(pgvPtr->numBytes + 1); | | | 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 | if (NULL != pgvPtr->value) { ckfree(pgvPtr->value); } else { Tcl_CreateExitHandler(FreeProcessGlobalValue, pgvPtr); } bytes = Tcl_GetStringFromObj(newValue, &pgvPtr->numBytes); pgvPtr->value = ckalloc(pgvPtr->numBytes + 1); memcpy(pgvPtr->value, bytes, pgvPtr->numBytes + 1); if (pgvPtr->encoding) { Tcl_FreeEncoding(pgvPtr->encoding); } pgvPtr->encoding = encoding; /* * Fill the local thread copy directly with the Tcl_Obj value to avoid |
︙ | ︙ | |||
4376 4377 4378 4379 4380 4381 4382 | pgvPtr->numBytes, &native); Tcl_ExternalToUtfDString(current, Tcl_DStringValue(&native), Tcl_DStringLength(&native), &newValue); Tcl_DStringFree(&native); ckfree(pgvPtr->value); pgvPtr->value = ckalloc(Tcl_DStringLength(&newValue) + 1); memcpy(pgvPtr->value, Tcl_DStringValue(&newValue), | | | | 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 | pgvPtr->numBytes, &native); Tcl_ExternalToUtfDString(current, Tcl_DStringValue(&native), Tcl_DStringLength(&native), &newValue); Tcl_DStringFree(&native); ckfree(pgvPtr->value); pgvPtr->value = ckalloc(Tcl_DStringLength(&newValue) + 1); memcpy(pgvPtr->value, Tcl_DStringValue(&newValue), Tcl_DStringLength(&newValue) + 1); Tcl_DStringFree(&newValue); Tcl_FreeEncoding(pgvPtr->encoding); pgvPtr->encoding = current; Tcl_MutexUnlock(&pgvPtr->mutex); } else { Tcl_FreeEncoding(current); } } cacheMap = GetThreadHash(&pgvPtr->key); hPtr = Tcl_FindHashEntry(cacheMap, INT2PTR(epoch)); if (NULL == hPtr) { int dummy; /* * No cache for the current epoch - must be a new one. * * First, clear the cacheMap, as anything in it must refer to some |
︙ | ︙ |
Changes to jni/tcl/library/init.tcl.
︙ | ︙ | |||
643 644 645 646 647 648 649 | return [set auto_execs($name) [list $file]] } } return "" } set path "[file dirname [info nameof]];.;" | | > > | 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 | return [set auto_execs($name) [list $file]] } } return "" } set path "[file dirname [info nameof]];.;" if {[info exists env(SystemRoot)]} { set windir $env(SystemRoot) } elseif {[info exists env(WINDIR)]} { set windir $env(WINDIR) } if {[info exists windir]} { if {$tcl_platform(os) eq "Windows NT"} { append path "$windir/system32;" } append path "$windir/system;$windir;" |
︙ | ︙ |
Changes to jni/tcl/tests/chanio.test.
︙ | ︙ | |||
32 33 34 35 36 37 38 | catch { ::tcltest::loadTestedCommands package require -exact Tcltest [info patchlevel] set ::tcltestlib [lindex [package ifneeded Tcltest [info patchlevel]] 1] } package require tcltests | | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | catch { ::tcltest::loadTestedCommands package require -exact Tcltest [info patchlevel] set ::tcltestlib [lindex [package ifneeded Tcltest [info patchlevel]] 1] } package require tcltests testConstraint testbytestring [llength [info commands testbytestring]] testConstraint testchannel [llength [info commands testchannel]] testConstraint openpipe 1 testConstraint testfevent [llength [info commands testfevent]] testConstraint testchannelevent [llength [info commands testchannelevent]] testConstraint testmainthread [llength [info commands testmainthread]] |
︙ | ︙ | |||
122 123 124 125 126 127 128 | set path(test2) [makeFile {} test2] test chan-io-1.8 {Tcl_WriteChars: WriteChars} { # This test written for SF bug #506297. # # Executing this test without the fix for the referenced bug applied to # tcl will cause tcl, more specifically WriteChars, to go into an infinite # loop. | | | | | | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | set path(test2) [makeFile {} test2] test chan-io-1.8 {Tcl_WriteChars: WriteChars} { # This test written for SF bug #506297. # # Executing this test without the fix for the referenced bug applied to # tcl will cause tcl, more specifically WriteChars, to go into an infinite # loop. set f [open $path(test2) w] chan configure $f -encoding iso2022-jp chan puts -nonewline $f [format %s%c [string repeat " " 4] 12399] chan close $f contents $path(test2) } " \x1b\$B\$O\x1b(B" test chan-io-1.9 {Tcl_WriteChars: WriteChars} { # When closing a channel with an encoding that appends escape bytes, check # for the case where the escape bytes overflow the current IO buffer. The # bytes should be moved into a new buffer. set data "1234567890 [format %c 12399]" |
︙ | ︙ | |||
240 241 242 243 244 245 246 | contents $path(test1) } -cleanup { chan close $f } -result "\r\n12" test chan-io-3.4 {WriteChars: loop over stage buffer} { # stage buffer maps to more than can be queued at once. set f [open $path(test1) w] | | | | 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 | contents $path(test1) } -cleanup { chan close $f } -result "\r\n12" test chan-io-3.4 {WriteChars: loop over stage buffer} { # stage buffer maps to more than can be queued at once. set f [open $path(test1) w] chan configure $f -encoding jis0208 -buffersize 16 chan puts -nonewline $f "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" set x [list [contents $path(test1)]] chan close $f lappend x [contents $path(test1)] } [list "!)!)!)!)!)!)!)!)" "!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)"] test chan-io-3.5 {WriteChars: saved != 0} { # Bytes produced by UtfToExternal from end of last channel buffer had to # be moved to beginning of next channel buffer to preserve requested # buffersize. set f [open $path(test1) w] chan configure $f -encoding jis0208 -buffersize 17 chan puts -nonewline $f "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" set x [list [contents $path(test1)]] chan close $f lappend x [contents $path(test1)] } [list "!)!)!)!)!)!)!)!)!" "!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)"] test chan-io-3.6 {WriteChars: (stageRead + dstWrote == 0)} { # One incomplete UTF-8 character at end of staging buffer. Backup in src |
︙ | ︙ | |||
280 281 282 283 284 285 286 | test chan-io-3.7 {WriteChars: (bufPtr->nextAdded > bufPtr->length)} { # When translating UTF-8 to external, the produced bytes went past end of # the channel buffer. This is done on purpose - we then truncate the bytes # at the end of the partial character to preserve the requested blocksize # on flush. The truncated bytes are moved to the beginning of the next # channel buffer. set f [open $path(test1) w] | | | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | test chan-io-3.7 {WriteChars: (bufPtr->nextAdded > bufPtr->length)} { # When translating UTF-8 to external, the produced bytes went past end of # the channel buffer. This is done on purpose - we then truncate the bytes # at the end of the partial character to preserve the requested blocksize # on flush. The truncated bytes are moved to the beginning of the next # channel buffer. set f [open $path(test1) w] chan configure $f -encoding jis0208 -buffersize 17 chan puts -nonewline $f "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" set x [list [contents $path(test1)]] chan close $f lappend x [contents $path(test1)] } [list "!)!)!)!)!)!)!)!)!" "!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)"] test chan-io-3.8 {WriteChars: reset sawLF after each buffer} { set f [open $path(test1) w] |
︙ | ︙ | |||
345 346 347 348 349 350 351 | chan puts -nonewline $f "12345678901\n456789012345678901234" chan close $f set x [contents $path(test1)] } "12345678901\r\n456789012345678901234" test chan-io-5.1 {CheckFlush: not full} { set f [open $path(test1) w] | | | 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 | chan puts -nonewline $f "12345678901\n456789012345678901234" chan close $f set x [contents $path(test1)] } "12345678901\r\n456789012345678901234" test chan-io-5.1 {CheckFlush: not full} { set f [open $path(test1) w] chan configure $f chan puts -nonewline $f "12345678901234567890" set x [list [contents $path(test1)]] chan close $f lappend x [contents $path(test1)] } [list "" "12345678901234567890"] test chan-io-5.2 {CheckFlush: full} { set f [open $path(test1) w] |
︙ | ︙ | |||
433 434 435 436 437 438 439 | } -cleanup { chan close $f } -result [list 2 "\u4e00\u4e01"] set a "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" append a $a append a $a test chan-io-6.6 {Tcl_GetsObj: loop test} -body { | | | 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 | } -cleanup { chan close $f } -result [list 2 "\u4e00\u4e01"] set a "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" append a $a append a $a test chan-io-6.6 {Tcl_GetsObj: loop test} -body { # if (dst >= dstEnd) set f [open $path(test1) w] chan puts $f $a chan puts $f hi chan close $f set f [open $path(test1)] list [chan gets $f line] $line } -cleanup { |
︙ | ︙ | |||
742 743 744 745 746 747 748 | set f [open $path(test1)] chan configure $f -translation crlf -buffersize 16 list [chan gets $f line] $line [chan eof $f] } -cleanup { chan close $f } -result [list 16 "123456789012345\r" 1] test chan-io-6.34 {Tcl_GetsObj: crlf mode: buffer exhausted, not followed by \n} -body { | | | 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 | set f [open $path(test1)] chan configure $f -translation crlf -buffersize 16 list [chan gets $f line] $line [chan eof $f] } -cleanup { chan close $f } -result [list 16 "123456789012345\r" 1] test chan-io-6.34 {Tcl_GetsObj: crlf mode: buffer exhausted, not followed by \n} -body { # not (*eol == '\n') set f [open $path(test1) w] chan configure $f -translation lf chan puts -nonewline $f "123456789012345\rabcd\r\nefg" chan close $f set f [open $path(test1)] chan configure $f -translation crlf -buffersize 16 list [chan gets $f line] $line [chan tell $f] |
︙ | ︙ | |||
852 853 854 855 856 857 858 | # if (chanPtr->flags & INPUT_SAW_CR) set f [openpipe w+ $path(cat)] chan configure $f -translation {auto lf} -buffering none chan puts -nonewline $f "bbbbbbbbbbbbbbb\n123456789abcdef\r" chan configure $f -buffersize 16 lappend x [chan gets $f] chan configure $f -blocking 0 | | | | | 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 | # if (chanPtr->flags & INPUT_SAW_CR) set f [openpipe w+ $path(cat)] chan configure $f -translation {auto lf} -buffering none chan puts -nonewline $f "bbbbbbbbbbbbbbb\n123456789abcdef\r" chan configure $f -buffersize 16 lappend x [chan gets $f] chan configure $f -blocking 0 lappend x [chan gets $f line] $line [testchannel queuedcr $f] chan configure $f -blocking 1 chan puts -nonewline $f "\nabcd\refg\x1a" lappend x [chan gets $f line] $line [testchannel queuedcr $f] lappend x [chan gets $f line] $line } -cleanup { chan close $f } -result {bbbbbbbbbbbbbbb 15 123456789abcdef 1 4 abcd 0 3 efg} test chan-io-6.44 {Tcl_GetsObj: input saw cr, not followed by cr} -setup { set x "" } -constraints {stdio testchannel openpipe fileevent} -body { # not (*eol == '\n') set f [openpipe w+ $path(cat)] chan configure $f -translation {auto lf} -buffering none chan puts -nonewline $f "bbbbbbbbbbbbbbb\n123456789abcdef\r" chan configure $f -buffersize 16 lappend x [chan gets $f] chan configure $f -blocking 0 lappend x [chan gets $f line] $line [testchannel queuedcr $f] chan configure $f -blocking 1 chan puts -nonewline $f "abcd\refg\x1a" lappend x [chan gets $f line] $line [testchannel queuedcr $f] lappend x [chan gets $f line] $line } -cleanup { chan close $f } -result {bbbbbbbbbbbbbbb 15 123456789abcdef 1 4 abcd 0 3 efg} |
︙ | ︙ | |||
949 950 951 952 953 954 955 | chan close $f set f [open $path(test1)] list [chan gets $f] [testchannel queuedcr $f] [chan tell $f] [chan gets $f] } -cleanup { chan close $f } -result {123456 0 8 78901} test chan-io-6.50 {Tcl_GetsObj: auto mode: \r not followed by \n} -constraints {testchannel} -body { | | | 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 | chan close $f set f [open $path(test1)] list [chan gets $f] [testchannel queuedcr $f] [chan tell $f] [chan gets $f] } -cleanup { chan close $f } -result {123456 0 8 78901} test chan-io-6.50 {Tcl_GetsObj: auto mode: \r not followed by \n} -constraints {testchannel} -body { # not (*eol == '\n') set f [open $path(test1) w] chan configure $f -translation lf chan puts -nonewline $f "123456\r78901" chan close $f set f [open $path(test1)] list [chan gets $f] [testchannel queuedcr $f] [chan tell $f] [chan gets $f] } -cleanup { |
︙ | ︙ | |||
1175 1176 1177 1178 1179 1180 1181 | chan flush $f # here list [chan gets $f line] $line [testchannel queuedcr $f] } -cleanup { chan close $f } -result {15 abcdefghijklmno 1} test chan-io-8.6 {PeekAhead: change to non-blocking mode} -constraints {stdio testchannel openpipe fileevent} -body { | | | 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 | chan flush $f # here list [chan gets $f line] $line [testchannel queuedcr $f] } -cleanup { chan close $f } -result {15 abcdefghijklmno 1} test chan-io-8.6 {PeekAhead: change to non-blocking mode} -constraints {stdio testchannel openpipe fileevent} -body { # ((chanPtr->flags & CHANNEL_NONBLOCKING) == 0) set f [openpipe w+ $path(cat)] chan configure $f -translation {auto binary} -buffersize 16 chan puts -nonewline $f "abcdefghijklmno\r" chan flush $f # here list [chan gets $f line] $line [testchannel queuedcr $f] } -cleanup { |
︙ | ︙ | |||
1415 1416 1417 1418 1419 1420 1421 | set f [open $path(test1)] chan configure $f -translation crlf chan read $f } -cleanup { chan close $f } -result "abcd\ndef\n" test chan-io-13.3 {TranslateInputEOL: crlf mode: naked cr} -body { | | | | | 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 | set f [open $path(test1)] chan configure $f -translation crlf chan read $f } -cleanup { chan close $f } -result "abcd\ndef\n" test chan-io-13.3 {TranslateInputEOL: crlf mode: naked cr} -body { # (src >= srcMax) set f [open $path(test1) w] chan configure $f -translation lf chan puts -nonewline $f "abcd\r\ndef\r" chan close $f set f [open $path(test1)] chan configure $f -translation crlf chan read $f } -cleanup { chan close $f } -result "abcd\ndef\r" test chan-io-13.4 {TranslateInputEOL: crlf mode: cr followed by not \n} -body { # (src >= srcMax) set f [open $path(test1) w] chan configure $f -translation lf chan puts -nonewline $f "abcd\r\ndef\rfgh" chan close $f set f [open $path(test1)] chan configure $f -translation crlf chan read $f } -cleanup { chan close $f } -result "abcd\ndef\rfgh" test chan-io-13.5 {TranslateInputEOL: crlf mode: naked lf} -body { # (src >= srcMax) set f [open $path(test1) w] chan configure $f -translation lf chan puts -nonewline $f "abcd\r\ndef\nfgh" chan close $f set f [open $path(test1)] chan configure $f -translation crlf chan read $f |
︙ | ︙ | |||
1507 1508 1509 1510 1511 1512 1513 | set f [open $path(test1)] chan configure $f -translation auto chan read $f } -cleanup { chan close $f } -result "abcd\ndef" test chan-io-13.10 {TranslateInputEOL: auto mode: \n} -body { | | | 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 | set f [open $path(test1)] chan configure $f -translation auto chan read $f } -cleanup { chan close $f } -result "abcd\ndef" test chan-io-13.10 {TranslateInputEOL: auto mode: \n} -body { # not (*src == '\r') set f [open $path(test1) w] chan configure $f -translation lf chan puts -nonewline $f "abcd\ndef" chan close $f set f [open $path(test1)] chan configure $f -translation auto chan read $f |
︙ | ︙ | |||
2812 2813 2814 2815 2816 2817 2818 | set cs [socket 127.0.0.1 [lindex [chan configure $ss -sockname] 2]] vwait [namespace which -variable x] chan configure $cs -blocking off writelots $cs $l chan close $cs chan close $ss vwait [namespace which -variable x] | | | 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 | set cs [socket 127.0.0.1 [lindex [chan configure $ss -sockname] 2]] vwait [namespace which -variable x] chan configure $cs -blocking off writelots $cs $l chan close $cs chan close $ss vwait [namespace which -variable x] set c } -result 2000 test chan-io-29.35 {Tcl_Chan Close vs chan event vs multiple interpreters} -setup { catch {interp delete x} catch {interp delete y} } -constraints {socket tempNotMac fileevent} -body { # On Mac, this test screws up sockets such that subsequent tests using # port 2828 either cause errors or panic(). |
︙ | ︙ | |||
3893 3894 3895 3896 3897 3898 3899 | set line "123456789ABCDE" ;# 14 char plus crlf chan puts -nonewline $f x ;# shift crlf across block boundary for {set i 0} {$i < 700} {incr i} { chan puts $f $line } chan close $f set f [open $path(test1) r] | | | 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 | set line "123456789ABCDE" ;# 14 char plus crlf chan puts -nonewline $f x ;# shift crlf across block boundary for {set i 0} {$i < 700} {incr i} { chan puts $f $line } chan close $f set f [open $path(test1) r] chan configure $f -translation crlf while {[chan gets $f line] >= 0} { append c $line\n } chan close $f string length $c } -result [expr 700*15+1] test chan-io-31.32 {Tcl_Write crlf on block boundary, Tcl_Gets auto} -setup { |
︙ | ︙ | |||
5155 5156 5157 5158 5159 5160 5161 | } -cleanup { chan close $f } -result 40000 test chan-io-39.14 {Tcl_SetChannelOption: -encoding, binary & utf-8} -setup { file delete $path(test1) } -body { set f [open $path(test1) w] | | | 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 | } -cleanup { chan close $f } -result 40000 test chan-io-39.14 {Tcl_SetChannelOption: -encoding, binary & utf-8} -setup { file delete $path(test1) } -body { set f [open $path(test1) w] chan configure $f -encoding {} chan puts -nonewline $f \xe7\x89\xa6 chan close $f set f [open $path(test1) r] chan configure $f -encoding utf-8 chan read $f } -cleanup { chan close $f |
︙ | ︙ | |||
5300 5301 5302 5303 5304 5305 5306 | [chan configure $sock -translation] } -cleanup { chan close $sock } -result {{{}} auto} test chan-io-39.24 {Tcl_SetChannelOption, server socket is not readable or\ writable so we can't change -eofchar or -translation} -setup { set l [list] | | | 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 | [chan configure $sock -translation] } -cleanup { chan close $sock } -result {{{}} auto} test chan-io-39.24 {Tcl_SetChannelOption, server socket is not readable or\ writable so we can't change -eofchar or -translation} -setup { set l [list] } -body { set sock [socket -server [namespace code accept] -myaddr 127.0.0.1 0] chan configure $sock -eofchar D -translation lf lappend l [chan configure $sock -eofchar] \ [chan configure $sock -translation] } -cleanup { chan close $sock } -result {{{}} auto} |
︙ | ︙ | |||
5453 5454 5455 5456 5457 5458 5459 | set f [open $path(test3) WRONLY] chan configure $f -eofchar {} chan puts -nonewline $f "ab" chan seek $f 0 current set x [list [catch {chan gets $f} msg] $msg] chan close $f lappend x [viewFile test3] | | | 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 | set f [open $path(test3) WRONLY] chan configure $f -eofchar {} chan puts -nonewline $f "ab" chan seek $f 0 current set x [list [catch {chan gets $f} msg] $msg] chan close $f lappend x [viewFile test3] } -match glob -result {1 {channel "*" wasn't opened for reading} abzzy} test chan-io-40.14 {POSIX open access modes: RDWR} -match regexp -body { file delete $path(test3) open $path(test3) RDWR } -returnCodes error -result {(?i)couldn't open ".*test3": no such file or directory} test chan-io-40.15 {POSIX open access modes: RDWR} { makeFile xyzzy test3 set f [open $path(test3) RDWR] |
︙ | ︙ | |||
5956 5957 5958 5959 5960 5961 5962 | chan puts $f {exit} vwait [namespace which -variable x] list $x $l } -cleanup { chan close $f } -result {done {0 1 0 1 0 1 0 1 0 1 0 1 0 0}} unset path(bar) | | | 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 | chan puts $f {exit} vwait [namespace which -variable x] list $x $l } -cleanup { chan close $f } -result {done {0 1 0 1 0 1 0 1 0 1 0 1 0 0}} unset path(bar) removeFile bar test chan-io-48.4 {lf write, testing readability, ^Z termination, auto read mode} -setup { file delete $path(test1) set c 0 set l "" } -constraints {fileevent} -body { set f [open $path(test1) w] |
︙ | ︙ | |||
7028 7029 7030 7031 7032 7033 7034 | set token [after 1000 { lappend ::RES {bgerror/FAIL timeout} set ::forever has-been-reached }] vwait ::forever catch {after cancel $token} # Report | | | 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 | set token [after 1000 { lappend ::RES {bgerror/FAIL timeout} set ::forever has-been-reached }] vwait ::forever catch {after cancel $token} # Report set ::RES } -cleanup { chan close $f chan close $g catch {unset ::RES} catch {unset ::forever} rename ::bgerror {} removeFile foo |
︙ | ︙ | |||
7228 7229 7230 7231 7232 7233 7234 | set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] # We need to delay on some systems until the creation of the server socket # completes. set done 0 for {set i 0} {$i < 10} {incr i} { if {![catch { set cs [socket 127.0.0.1 [lindex [chan configure $ss -sockname] 2]] | | | 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 | set ss [socket -server [namespace code accept] -myaddr 127.0.0.1 0] # We need to delay on some systems until the creation of the server socket # completes. set done 0 for {set i 0} {$i < 10} {incr i} { if {![catch { set cs [socket 127.0.0.1 [lindex [chan configure $ss -sockname] 2]] }]} { set done 1 break } after 100 } if {$done == 0} { chan close $ss |
︙ | ︙ | |||
7300 7301 7302 7303 7304 7305 7306 | chan flush $writer } producer vwait [namespace which -variable done] chan close $writer chan close $s after cancel $after | | | 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 | chan flush $writer } producer vwait [namespace which -variable done] chan close $writer chan close $s after cancel $after set counter } -cleanup { if {$accept ne {}} {chan close $accept} } -result 1 set path(fooBar) [makeFile {} fooBar] test chan-io-55.1 {ChannelEventScriptInvoker: deletion} -constraints { |
︙ | ︙ | |||
7327 7328 7329 7330 7331 7332 7333 | set handler [interp bgerror {}] interp bgerror {} [namespace which myHandler] } -body { set f [open $path(fooBar) w] chan event $f writable [namespace code [list eventScript $f]] variable x not_done vwait [namespace which -variable x] | | | 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 | set handler [interp bgerror {}] interp bgerror {} [namespace which myHandler] } -body { set f [open $path(fooBar) w] chan event $f writable [namespace code [list eventScript $f]] variable x not_done vwait [namespace which -variable x] set x } -cleanup { interp bgerror {} $handler } -result {got_error} test chan-io-56.1 {ChannelTimerProc} {testchannelevent} { set f [open $path(fooBar) w] chan puts $f "this is a test" |
︙ | ︙ | |||
7372 7373 7374 7375 7376 7377 7378 | chan puts $s "12\n34567890" chan flush $s variable result [chan gets $s2] after 1000 [namespace code {lappend result timer}] vwait [namespace which -variable result] lappend result [chan gets $s2] vwait [namespace which -variable result] | | | 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 | chan puts $s "12\n34567890" chan flush $s variable result [chan gets $s2] after 1000 [namespace code {lappend result timer}] vwait [namespace which -variable result] lappend result [chan gets $s2] vwait [namespace which -variable result] set result } -cleanup { chan close $s chan close $s2 chan close $server } -result {12 readable 34567890 timer} test chan-io-57.2 {buffered data and file events, read} -setup { variable s2 |
︙ | ︙ | |||
7397 7398 7399 7400 7401 7402 7403 | chan puts -nonewline $s "1234567890" chan flush $s variable result [chan read $s2 1] after 1000 [namespace code {lappend result timer}] vwait [namespace which -variable result] lappend result [chan read $s2 9] vwait [namespace which -variable result] | | | 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 | chan puts -nonewline $s "1234567890" chan flush $s variable result [chan read $s2 1] after 1000 [namespace code {lappend result timer}] vwait [namespace which -variable result] lappend result [chan read $s2 9] vwait [namespace which -variable result] set result } -cleanup { chan close $s chan close $s2 chan close $server } -result {1 readable 234567890 timer} test chan-io-58.1 {Tcl_NotifyChannel and error when closing} {stdio unixOrWin openpipe fileevent} { |
︙ | ︙ |
Changes to jni/tcl/tests/cmdAH.test.
︙ | ︙ | |||
1345 1346 1347 1348 1349 1350 1351 | } -cleanup { removeFile touch.me /tmp } -result 1 test cmdAH-25.3 {Tcl_FileObjCmd: owned} {unix notRoot} { file owned / } 0 test cmdAH-25.3.1 {Tcl_FileObjCmd: owned} -constraints win -body { | > > > | > | 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 | } -cleanup { removeFile touch.me /tmp } -result 1 test cmdAH-25.3 {Tcl_FileObjCmd: owned} {unix notRoot} { file owned / } 0 test cmdAH-25.3.1 {Tcl_FileObjCmd: owned} -constraints win -body { if {[info exists env(SystemRoot)]} { file owned $env(SystemRoot) } else { file owned $env(windir) } } -result 0 test cmdAH-25.4 {Tcl_FileObjCmd: owned} -body { file owned nosuchfile } -result 0 # readlink test cmdAH-26.1 {Tcl_FileObjCmd: readlink} -returnCodes error -body { |
︙ | ︙ |
Changes to jni/tcl/win/makefile.vc.
︙ | ︙ | |||
47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # Visual Studio/Windows SDK for the appropriate target architecture. # # NOTE: For older (Visual C++ 6 or the 2003 SDK), to use the Platform # SDK (not expressly needed), run setenv.bat after # vcvars32.bat according to the instructions for it. This can also # turn on the 64-bit compiler, if your SDK has it. # # Examples: # c:\tcl_src\win\>nmake -f makefile.vc release # c:\tcl_src\win\>nmake -f makefile.vc test # c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl # c:\tcl_src\win\>nmake -f makefile.vc release OPTS=pdbs # c:\tcl_src\win\>nmake -f makefile.vc release OPTS=symbols # | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | # Visual Studio/Windows SDK for the appropriate target architecture. # # NOTE: For older (Visual C++ 6 or the 2003 SDK), to use the Platform # SDK (not expressly needed), run setenv.bat after # vcvars32.bat according to the instructions for it. This can also # turn on the 64-bit compiler, if your SDK has it. # # Basic macros and options usable on the commandline (see rules.vc for more info): # OPTS=msvcrt,static,staticpkg,symbols,nothreads,profile,unchecked,time64bit,none # Sets special options for the core. The default is for none. # Any combination of the above may be used (comma separated). # 'none' will over-ride everything to nothing. # # msvcrt = Affects the static option only to switch it from # using libcmt(d) as the C runtime [by default] to # msvcrt(d). This is useful for static embedding # support. # static = Builds a static library of the core instead of a # dll. The shell will be static (and large), as well. # staticpkg= Affects the static option only to switch # tclshXX.exe to have the dde and reg extension linked # inside it. # nothreads = Turns off full multithreading support (default on). # thrdalloc = Use the thread allocator (shared global free pool). # symbols = Adds symbols for step debugging. # profile = Adds profiling hooks. Map file is assumed. # unchecked = Allows a symbols build to not use the debug # enabled runtime (msvcrt.dll not msvcrtd.dll # or libcmt.lib not libcmtd.lib). # time64bit = Forces a build using 64-bit time_t for 32-bit build # (CRT library should support this). # # STATS=compdbg,memdbg,none # Sets optional memory and bytecode compiler debugging code added # to the core. The default is for none. Any combination of the # above may be used (comma separated). 'none' will over-ride # everything to nothing. # # compdbg = Enables byte compilation logging. # memdbg = Enables the debugging memory allocator. # # CHECKS=64bit,fullwarn,nodep,none # Sets special macros for checking compatibility. # # 64bit = Enable 64bit portability warnings (if available) # fullwarn = Builds with full compiler and link warnings enabled. # Very verbose. # nodep = Turns off compatibility macros to ensure the core # isn't being built with deprecated functions. # # MACHINE=(ALPHA|AMD64|IA64|IX86) # Set the machine type used for the compiler, linker, and # resource compiler. This hook is needed to tell the tools # when alternate platforms are requested. IX86 is the default # when not specified. If the CPU environment variable has been # set (ie: recent Platform SDK) then MACHINE is set from CPU. # # TMP_DIR=<path> # OUT_DIR=<path> # Hooks to allow the intermediate and output directories to be # changed. $(OUT_DIR) is assumed to be # $(BINROOT)\(Release|Debug) based on if symbols are requested. # $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default. # # TESTPAT=<file> # Reads the tests requested to be run from this file. # # CFG_ENCODING=encoding # name of encoding for configuration information. Defaults # to cp1252 # # Examples: # c:\tcl_src\win\>nmake -f makefile.vc release # c:\tcl_src\win\>nmake -f makefile.vc test # c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl # c:\tcl_src\win\>nmake -f makefile.vc release OPTS=pdbs # c:\tcl_src\win\>nmake -f makefile.vc release OPTS=symbols # |
︙ | ︙ | |||
412 413 414 415 416 417 418 419 420 421 | !else $(TCLLIB): $(TCLOBJS) $(DLLCMD) @<< $** << $(_VC_MANIFEST_EMBED_DLL) $(TCLIMPLIB): $(TCLLIB) !endif # $(STATIC_BUILD) | > < | 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 | !else $(TCLLIB): $(TCLOBJS) $(DLLCMD) @<< $** << $(_VC_MANIFEST_EMBED_DLL) $(TCLIMPLIB): $(TCLLIB) !endif # $(STATIC_BUILD) $(TCLSTUBLIB): $(TCLSTUBOBJS) $(LIBCMD) -nodefaultlib $(TCLSTUBOBJS) $(TCLSH): $(TCLSHOBJS) $(TCLSTUBLIB) $(TCLIMPLIB) $(CONEXECMD) -stack:2300000 $** $(_VC_MANIFEST_EMBED_EXE) |
︙ | ︙ | |||
478 479 480 481 482 483 484 | @for /d %d in ($(PKGSDIR)\*) do \ @if exist "%~fd\win\makefile.vc" ( \ pushd "%~fd\win" & \ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) clean &\ popd \ ) | | | 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 | @for /d %d in ($(PKGSDIR)\*) do \ @if exist "%~fd\win\makefile.vc" ( \ pushd "%~fd\win" & \ $(MAKE) -$(MAKEFLAGS) -f makefile.vc TCLDIR=$(ROOT) clean &\ popd \ ) $(CAT32): $(WIN_DIR)\cat.c $(cc32) $(cflags) $(crt) -D_CRT_NONSTDC_NO_DEPRECATE -DCONSOLE -Fo$(TMP_DIR)\ $? $(CONEXECMD) -stack:16384 $(TMP_DIR)\cat.obj $(_VC_MANIFEST_EMBED_EXE) #--------------------------------------------------------------------- # Regenerate the stubs files. [Development use only] #--------------------------------------------------------------------- |
︙ | ︙ | |||
588 589 590 591 592 593 594 | #--------------------------------------------------------------------- # Build tclConfig.sh for the TEA build system. #--------------------------------------------------------------------- tclConfig: $(OUT_DIR)\tclConfig.sh # TBD - is this tclConfig.sh file ever used? The values are incorrect! | | | 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 | #--------------------------------------------------------------------- # Build tclConfig.sh for the TEA build system. #--------------------------------------------------------------------- tclConfig: $(OUT_DIR)\tclConfig.sh # TBD - is this tclConfig.sh file ever used? The values are incorrect! $(OUT_DIR)\tclConfig.sh: $(WIN_DIR)\tclConfig.sh.in @echo Creating tclConfig.sh @nmakehlp -s << $** >$@ @TCL_DLL_FILE@ $(TCLLIBNAME) @TCL_VERSION@ $(DOTVERSION) @TCL_MAJOR_VERSION@ $(TCL_MAJOR_VERSION) @TCL_MINOR_VERSION@ $(TCL_MINOR_VERSION) @TCL_PATCH_LEVEL@ $(TCL_PATCH_LEVEL) |
︙ | ︙ | |||
664 665 666 667 668 669 670 | --name-prefix=TclDate \ $(GENERICDIR)/tclGetDate.y #--------------------------------------------------------------------- # Special case object file targets #--------------------------------------------------------------------- | | | | | | | | | 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 | --name-prefix=TclDate \ $(GENERICDIR)/tclGetDate.y #--------------------------------------------------------------------- # Special case object file targets #--------------------------------------------------------------------- $(TMP_DIR)\testMain.obj: $(WIN_DIR)\tclAppInit.c $(cc32) $(appcflags) -DTCL_TEST \ -DTCL_USE_STATIC_PACKAGES=$(TCL_USE_STATIC_PACKAGES) \ -Fo$@ $? $(TMP_DIR)\tclMain2.obj: $(GENERICDIR)\tclMain.c $(cc32) $(pkgcflags) -DTCL_ASCII_MAIN \ -Fo$@ $? $(TMP_DIR)\tclTest.obj: $(GENERICDIR)\tclTest.c $(cc32) $(appcflags) -Fo$@ $? $(TMP_DIR)\tclTestObj.obj: $(GENERICDIR)\tclTestObj.c $(cc32) $(appcflags) -Fo$@ $? $(TMP_DIR)\tclWinTest.obj: $(WIN_DIR)\tclWinTest.c $(CCAPPCMD) $? $(TMP_DIR)\tclZlib.obj: $(GENERICDIR)\tclZlib.c $(cc32) $(pkgcflags) -I$(COMPATDIR)\zlib -Fo$@ $? $(TMP_DIR)\tclPkgConfig.obj: $(GENERICDIR)\tclPkgConfig.c $(cc32) $(pkgcflags) \ -DCFG_INSTALL_LIBDIR="\"$(LIB_INSTALL_DIR:\=\\)\"" \ -DCFG_INSTALL_BINDIR="\"$(BIN_INSTALL_DIR:\=\\)\"" \ -DCFG_INSTALL_SCRDIR="\"$(SCRIPT_INSTALL_DIR:\=\\)\"" \ -DCFG_INSTALL_INCDIR="\"$(INCLUDE_INSTALL_DIR:\=\\)\"" \ -DCFG_INSTALL_DOCDIR="\"$(DOC_INSTALL_DIR:\=\\)\"" \ -DCFG_RUNTIME_LIBDIR="\"$(LIB_INSTALL_DIR:\=\\)\"" \ -DCFG_RUNTIME_BINDIR="\"$(BIN_INSTALL_DIR:\=\\)\"" \ -DCFG_RUNTIME_SCRDIR="\"$(SCRIPT_INSTALL_DIR:\=\\)\"" \ -DCFG_RUNTIME_INCDIR="\"$(INCLUDE_INSTALL_DIR:\=\\)\"" \ -DCFG_RUNTIME_DOCDIR="\"$(DOC_INSTALL_DIR:\=\\)\"" \ -Fo$@ $? $(TMP_DIR)\tclAppInit.obj: $(WIN_DIR)\tclAppInit.c $(cc32) $(appcflags) \ -DTCL_USE_STATIC_PACKAGES=$(TCL_USE_STATIC_PACKAGES) \ -Fo$@ $? ### The following objects should be built using the stub interfaces ### *ALL* extensions need to built with -DTCL_THREADS=1 $(TMP_DIR)\tclWinReg.obj: $(WIN_DIR)\tclWinReg.c !if $(STATIC_BUILD) $(cc32) $(appcflags) -DSTATIC_BUILD -Fo$@ $? !else $(cc32) $(appcflags) -DUSE_TCL_STUBS -Fo$@ $? !endif $(TMP_DIR)\tclWinDde.obj: $(WIN_DIR)\tclWinDde.c !if $(STATIC_BUILD) $(cc32) $(appcflags) -DSTATIC_BUILD -Fo$@ $? !else $(cc32) $(appcflags) -DUSE_TCL_STUBS -Fo$@ $? !endif ### The following objects are part of the stub library and should not ### be built as DLL objects. -Zl is used to avoid a dependency on any ### specific C run-time. $(TMP_DIR)\tclStubLib.obj: $(GENERICDIR)\tclStubLib.c $(cc32) $(stubscflags) -Fo$@ $? $(TMP_DIR)\tclTomMathStubLib.obj: $(GENERICDIR)\tclTomMathStubLib.c $(cc32) $(stubscflags) -Fo$@ $? $(TMP_DIR)\tclOOStubLib.obj: $(GENERICDIR)\tclOOStubLib.c $(cc32) $(stubscflags) -Fo$@ $? $(TMP_DIR)\tclsh.exe.manifest: $(WIN_DIR)\tclsh.exe.manifest.in @nmakehlp -s << $** >$@ @MACHINE@ $(MACHINE:IX86=X86) @TCL_WIN_VERSION@ $(DOTVERSION).0.0 << #--------------------------------------------------------------------- # Generate the source dependencies. Having dependency rules will # improve incremental build accuracy without having to resort to a # full rebuild just because some non-global header file like # tclCompile.h was changed. These rules aren't needed when building # from scratch. #--------------------------------------------------------------------- depend: !if !exist($(TCLSH)) @echo Build tclsh first! !else $(TCLSH) $(TOOLSDIR:\=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \ -passthru:"-DBUILD_tcl $(TCL_INCLUDES) $(PRJ_INCLUDES)" $(GENERICDIR),$$(GENERICDIR) \ $(COMPATDIR),$$(COMPATDIR) $(TOMMATHDIR),$$(TOMMATHDIR) $(WIN_DIR),$$(WIN_DIR) @<< $(TCLOBJS) << !endif #--------------------------------------------------------------------- # Dependency rules #--------------------------------------------------------------------- |
︙ | ︙ | |||
793 794 795 796 797 798 799 | << {$(COMPATDIR)\zlib}.c{$(TMP_DIR)}.obj:: $(cc32) $(pkgcflags) -Fo$(TMP_DIR)\ @<< $< << | | | 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 | << {$(COMPATDIR)\zlib}.c{$(TMP_DIR)}.obj:: $(cc32) $(pkgcflags) -Fo$(TMP_DIR)\ @<< $< << $(TMP_DIR)\tclsh.res: $(TMP_DIR)\tclsh.exe.manifest $(WIN_DIR)\tclsh.rc #--------------------------------------------------------------------- # Installation. #--------------------------------------------------------------------- install-binaries: |
︙ | ︙ | |||
851 852 853 854 855 856 857 | @$(CPY) "$(ROOT)\library\parray.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\safe.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\tclIndex" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\package.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\word.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\auto.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(OUT_DIR)\tclConfig.sh" "$(LIB_INSTALL_DIR)\" | | | | | | 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 | @$(CPY) "$(ROOT)\library\parray.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\safe.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\tclIndex" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\package.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\word.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(ROOT)\library\auto.tcl" "$(SCRIPT_INSTALL_DIR)\" @$(CPY) "$(OUT_DIR)\tclConfig.sh" "$(LIB_INSTALL_DIR)\" @$(CPY) "$(WIN_DIR)\tclooConfig.sh" "$(LIB_INSTALL_DIR)\" @$(CPY) "$(WIN_DIR)\rules.vc" "$(LIB_INSTALL_DIR)\nmake\" @$(CPY) "$(WIN_DIR)\targets.vc" "$(LIB_INSTALL_DIR)\nmake\" @$(CPY) "$(WIN_DIR)\nmakehlp.c" "$(LIB_INSTALL_DIR)\nmake\" @$(CPY) "$(OUT_DIR)\tcl.nmake" "$(LIB_INSTALL_DIR)\nmake\" @echo Installing library http1.0 directory @$(CPY) "$(ROOT)\library\http1.0\*.tcl" \ "$(SCRIPT_INSTALL_DIR)\http1.0\" @echo Installing library opt0.4 directory @$(CPY) "$(ROOT)\library\opt\*.tcl" \ "$(SCRIPT_INSTALL_DIR)\opt0.4\" |
︙ | ︙ |
Changes to jni/tcl/win/rules.vc.
︙ | ︙ | |||
20 21 22 23 24 25 26 | !ifndef _RULES_VC _RULES_VC = 1 # The following macros define the version of the rules.vc nmake build system # For modifications that are not backward-compatible, you *must* change # the major version. RULES_VERSION_MAJOR = 1 | | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | !ifndef _RULES_VC _RULES_VC = 1 # The following macros define the version of the rules.vc nmake build system # For modifications that are not backward-compatible, you *must* change # the major version. RULES_VERSION_MAJOR = 1 RULES_VERSION_MINOR = 4 # The PROJECT macro must be defined by parent makefile. !if "$(PROJECT)" == "" !error *** Error: Macro PROJECT not defined! Please define it before including rules.vc !endif !if "$(PRJ_PACKAGE_TCLNAME)" == "" |
︙ | ︙ | |||
158 159 160 161 162 163 164 | # some Tcl interfaces that are not publicly exposed. # # The fragment will set the following macros: # ROOT - root of this module sources # COMPATDIR - source directory that holds compatibility sources # DOCDIR - source directory containing documentation files # GENERICDIR - platform-independent source directory | | | 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | # some Tcl interfaces that are not publicly exposed. # # The fragment will set the following macros: # ROOT - root of this module sources # COMPATDIR - source directory that holds compatibility sources # DOCDIR - source directory containing documentation files # GENERICDIR - platform-independent source directory # WIN_DIR - Windows-specific source directory # TESTDIR - directory containing test files # TOOLSDIR - directory containing build tools # _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set # when building Tcl itself. # _INSTALLDIR - native form of the installation path. For Tcl # this will be the root of the Tcl installation. For extensions # this will be the lib directory under the root. |
︙ | ︙ | |||
211 212 213 214 215 216 217 | !ifndef DEMODIR !if exist("$(LIBDIR)\demos") DEMODIR = $(LIBDIR)\demos !else DEMODIR = $(ROOT)\demos !endif !endif # ifndef DEMODIR | | | < < | | | | | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 | !ifndef DEMODIR !if exist("$(LIBDIR)\demos") DEMODIR = $(LIBDIR)\demos !else DEMODIR = $(ROOT)\demos !endif !endif # ifndef DEMODIR # Do NOT use WINDIR because it is Windows internal environment # variable to point to c:\windows! WIN_DIR = $(ROOT)\win !ifndef RCDIR !if exist("$(WIN_DIR)\rc") RCDIR = $(WIN_DIR)\rc !else RCDIR = $(WIN_DIR) !endif !endif RCDIR = $(RCDIR:/=\) # The target directory where the built packages and binaries will be installed. # INSTALLDIR is the (optional) path specified by the user. # _INSTALLDIR is INSTALLDIR using the backslash separator syntax |
︙ | ︙ | |||
682 683 684 685 686 687 688 689 690 691 692 693 694 695 | # USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation. # 0 -> Use the non-thread allocator. # UNCHECKED - 1 -> when doing a debug build with symbols, use the release # C runtime, 0 -> use the debug C runtime. # USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking # CONFIG_CHECK - 1 -> check current build configuration against Tcl # configuration (ignored for Tcl itself) # Further, LINKERFLAGS are modified based on above. # Default values for all the above STATIC_BUILD = 0 TCL_THREADS = 1 DEBUG = 0 SYMBOLS = 0 | > > | 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 | # USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation. # 0 -> Use the non-thread allocator. # UNCHECKED - 1 -> when doing a debug build with symbols, use the release # C runtime, 0 -> use the debug C runtime. # USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking # CONFIG_CHECK - 1 -> check current build configuration against Tcl # configuration (ignored for Tcl itself) # _USE_64BIT_TIME_T - forces a build using 64-bit time_t for 32-bit build # (CRT library should support this) # Further, LINKERFLAGS are modified based on above. # Default values for all the above STATIC_BUILD = 0 TCL_THREADS = 1 DEBUG = 0 SYMBOLS = 0 |
︙ | ︙ | |||
743 744 745 746 747 748 749 | TCL_USE_STATIC_PACKAGES = 1 !else TCL_USE_STATIC_PACKAGES = 0 !endif !if [nmakehlp -f $(OPTS) "nothreads"] !message *** Compile explicitly for non-threaded tcl | | > > > > > | 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 | TCL_USE_STATIC_PACKAGES = 1 !else TCL_USE_STATIC_PACKAGES = 0 !endif !if [nmakehlp -f $(OPTS) "nothreads"] !message *** Compile explicitly for non-threaded tcl TCL_THREADS = 0 USE_THREAD_ALLOC= 0 !else TCL_THREADS = 1 USE_THREAD_ALLOC= 1 !endif !if [nmakehlp -f $(OPTS) "time64bit"] !message *** Force 64-bit time_t _USE_64BIT_TIME_T = 1 !endif # Yes, it's weird that the "symbols" option controls DEBUG and # the "pdbs" option controls SYMBOLS. That's historical. !if [nmakehlp -f $(OPTS) "symbols"] !message *** Doing symbols DEBUG = 1 !else |
︙ | ︙ | |||
1074 1075 1076 1077 1078 1079 1080 | # The name of the stubs library for the project being built STUBPREFIX = $(PROJECT)stub # Set up paths to various Tcl executables and libraries needed by extensions !if $(DOING_TCL) | | | | < < < | | | | < < < | | | | 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 | # The name of the stubs library for the project being built STUBPREFIX = $(PROJECT)stub # Set up paths to various Tcl executables and libraries needed by extensions !if $(DOING_TCL) TCLSHNAME = $(PROJECT)sh$(VERSION)$(SUFX).exe TCLSH = $(OUT_DIR)\$(TCLSHNAME) TCLIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib TCLLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) TCLLIB = $(OUT_DIR)\$(TCLLIBNAME) TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib TCLSTUBLIB = $(OUT_DIR)\$(TCLSTUBLIBNAME) TCL_INCLUDES = -I"$(WIN_DIR)" -I"$(GENERICDIR)" !else # ! $(DOING_TCL) !if $(TCLINSTALL) # Building against an installed Tcl # When building extensions, we need to locate tclsh. Depending on version # of Tcl we are building against, this may or may not have a "t" suffix. # Try various possibilities in turn. TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX:t=).exe !if !exist("$(TCLSH)") TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX:t=).exe !endif TCLSTUBLIB = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX:t=).lib # When building extensions, may be linking against Tcl that does not add # "t" suffix (e.g. 8.5 or 8.7). If lib not found check for that possibility. !if !exist("$(TCLIMPLIB)") TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)t$(SUFX:t=).lib !endif TCL_LIBRARY = $(_TCLDIR)\lib TCLREGLIB = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib TCLDDELIB = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib TCLTOOLSDIR = \must\have\tcl\sources\to\build\this\target TCL_INCLUDES = -I"$(_TCLDIR)\include" !else # Building against Tcl sources TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX:t=).exe !if !exist($(TCLSH)) TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX:t=).exe !endif TCLSTUBLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX:t=).lib # When building extensions, may be linking against Tcl that does not add # "t" suffix (e.g. 8.5 or 8.7). If lib not found check for that possibility. !if !exist("$(TCLIMPLIB)") TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)t$(SUFX:t=).lib !endif TCL_LIBRARY = $(_TCLDIR)\library TCLREGLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib TCLDDELIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib TCLTOOLSDIR = $(_TCLDIR)\tools TCL_INCLUDES = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win" |
︙ | ︙ | |||
1163 1164 1165 1166 1167 1168 1169 | TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX).lib !if $(DOING_TK) WISH = $(OUT_DIR)\$(WISHNAME) TKSTUBLIB = $(OUT_DIR)\$(TKSTUBLIBNAME) TKIMPLIB = $(OUT_DIR)\$(TKIMPLIBNAME) TKLIB = $(OUT_DIR)\$(TKLIBNAME) | | | 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 | TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX).lib !if $(DOING_TK) WISH = $(OUT_DIR)\$(WISHNAME) TKSTUBLIB = $(OUT_DIR)\$(TKSTUBLIBNAME) TKIMPLIB = $(OUT_DIR)\$(TKIMPLIBNAME) TKLIB = $(OUT_DIR)\$(TKLIBNAME) TK_INCLUDES = -I"$(WIN_DIR)" -I"$(GENERICDIR)" !else # effectively NEED_TK !if $(TKINSTALL) # Building against installed Tk WISH = $(_TKDIR)\bin\$(WISHNAME) TKSTUBLIB = $(_TKDIR)\lib\$(TKSTUBLIBNAME) TKIMPLIB = $(_TKDIR)\lib\$(TKIMPLIBNAME) |
︙ | ︙ | |||
1282 1283 1284 1285 1286 1287 1288 | !if $(TCL_MEM_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_MEM_DEBUG !endif !if $(TCL_COMPILE_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS !endif | | | | 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 | !if $(TCL_MEM_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_MEM_DEBUG !endif !if $(TCL_COMPILE_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS !endif !if $(TCL_THREADS) && $(TCL_VERSION) < 87 OPTDEFINES = $(OPTDEFINES) -DTCL_THREADS=1 !if $(USE_THREAD_ALLOC) && $(TCL_VERSION) < 87 OPTDEFINES = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1 !endif !endif !if $(STATIC_BUILD) OPTDEFINES = $(OPTDEFINES) -DSTATIC_BUILD !endif !if $(TCL_NO_DEPRECATED) |
︙ | ︙ | |||
1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 | !endif !if "$(MACHINE)" == "AMD64" OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DO64BIT !endif !if $(VCVERSION) < 1300 OPTDEFINES = $(OPTDEFINES) -DNO_STRTOI64 !endif # _ATL_XP_TARGETING - Newer SDK's need this to build for XP COMPILERFLAGS = /D_ATL_XP_TARGETING # Following is primarily for the benefit of extensions. Tcl 8.5 builds # Tcl without /DUNICODE, while 8.6 builds with it defined. When building # an extension, it is advisable (but not mandated) to use the same Windows | > > > > | 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 | !endif !if "$(MACHINE)" == "AMD64" OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DO64BIT !endif !if $(VCVERSION) < 1300 OPTDEFINES = $(OPTDEFINES) -DNO_STRTOI64 !endif !if "$(_USE_64BIT_TIME_T)" == "1" OPTDEFINES = $(OPTDEFINES) -D_USE_64BIT_TIME_T !endif # _ATL_XP_TARGETING - Newer SDK's need this to build for XP COMPILERFLAGS = /D_ATL_XP_TARGETING # Following is primarily for the benefit of extensions. Tcl 8.5 builds # Tcl without /DUNICODE, while 8.6 builds with it defined. When building # an extension, it is advisable (but not mandated) to use the same Windows |
︙ | ︙ | |||
1408 1409 1410 1411 1412 1413 1414 | !if $(DEBUG) # Turn warnings into errors cwarn = $(cwarn) -WX !endif INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES) !if !$(DOING_TCL) && !$(DOING_TK) | | | 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 | !if $(DEBUG) # Turn warnings into errors cwarn = $(cwarn) -WX !endif INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES) !if !$(DOING_TCL) && !$(DOING_TK) INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WIN_DIR)" -I"$(COMPATDIR)" !endif # These flags are defined roughly in the order of the pre-reform # rules.vc/makefile.vc to help visually compare that the pre- and # post-reform build logs # cflags contains generic flags used for building practically all object files |
︙ | ︙ | |||
1602 1603 1604 1605 1606 1607 1608 | @echo Installing demos to '$(DEMO_INSTALL_DIR)' @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)" @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)" default-clean: @echo Cleaning $(TMP_DIR)\* ... @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR) | | | | | | | | | | | | | | | | 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 | @echo Installing demos to '$(DEMO_INSTALL_DIR)' @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)" @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)" default-clean: @echo Cleaning $(TMP_DIR)\* ... @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR) @echo Cleaning $(WIN_DIR)\nmakehlp.obj, nmakehlp.exe ... @if exist $(WIN_DIR)\nmakehlp.obj del $(WIN_DIR)\nmakehlp.obj @if exist $(WIN_DIR)\nmakehlp.exe del $(WIN_DIR)\nmakehlp.exe @if exist $(WIN_DIR)\nmakehlp.out del $(WIN_DIR)\nmakehlp.out @echo Cleaning $(WIN_DIR)\nmhlp-out.txt ... @if exist $(WIN_DIR)\nmhlp-out.txt del $(WIN_DIR)\nmhlp-out.txt @echo Cleaning $(WIN_DIR)\_junk.pch ... @if exist $(WIN_DIR)\_junk.pch del $(WIN_DIR)\_junk.pch @echo Cleaning $(WIN_DIR)\vercl.x, vercl.i ... @if exist $(WIN_DIR)\vercl.x del $(WIN_DIR)\vercl.x @if exist $(WIN_DIR)\vercl.i del $(WIN_DIR)\vercl.i @echo Cleaning $(WIN_DIR)\versions.vc, version.vc ... @if exist $(WIN_DIR)\versions.vc del $(WIN_DIR)\versions.vc @if exist $(WIN_DIR)\version.vc del $(WIN_DIR)\version.vc default-hose: default-clean @echo Hosing $(OUT_DIR)\* ... @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR) # Only for backward compatibility default-distclean: default-hose |
︙ | ︙ | |||
1707 1708 1709 1710 1711 1712 1713 | # main application, the master makefile should define explicit rules. {$(ROOT)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << | | | | 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 | # main application, the master makefile should define explicit rules. {$(ROOT)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(WIN_DIR)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(GENERICDIR)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(COMPATDIR)}.c{$(TMP_DIR)}.obj:: $(CCPKGCMD) @<< $< << {$(RCDIR)}.rc{$(TMP_DIR)}.res: $(RESCMD) $< {$(WIN_DIR)}.rc{$(TMP_DIR)}.res: $(RESCMD) $< {$(TMP_DIR)}.rc{$(TMP_DIR)}.res: $(RESCMD) $< .SUFFIXES: .SUFFIXES:.c .rc |
︙ | ︙ | |||
1760 1761 1762 1763 1764 1765 1766 | !if $(CONFIG_CHECK) !ifdef TCLNMAKECONFIG !include $(TCLNMAKECONFIG) !if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)" !error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)). !endif | | | 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 | !if $(CONFIG_CHECK) !ifdef TCLNMAKECONFIG !include $(TCLNMAKECONFIG) !if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)" !error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)). !endif !if $(TCL_VERSION) < 87 && defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC) !message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)). !endif !if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG) !message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)). !endif !endif |
︙ | ︙ |