Compare commits

..

881 Commits

Author SHA1 Message Date
Daniel Stenberg
4f0258ec09 7.12.2 2004-10-18 07:48:28 +00:00
Daniel Stenberg
db4d0d307a new mirror 2004-10-17 07:48:00 +00:00
Daniel Stenberg
2baf22e184 today's changes 2004-10-16 14:07:31 +00:00
Daniel Stenberg
21d5aead47 Alexander Krasnostavsky made the CURLOPT_FTP_CREATE_MISSING_DIRS option work
fine even for third party transfers.
2004-10-16 14:06:54 +00:00
Daniel Stenberg
f40c9b83df libcurl leaked memory for cookies with the "max-age" field set. 2004-10-16 13:54:40 +00:00
Gisle Vanem
b9e082b811 Changes for issue 50 2004-10-16 13:20:33 +00:00
Gisle Vanem
0bfa601a9f Open "debugit" in binary mode ("rb"). 2004-10-16 13:17:15 +00:00
Gisle Vanem
e356420123 Added Traian Nicolescu's patches for threaded resolver on
Windows. Plugged some potential handle and memory leaks.

Refs.
  http://curl.haxx.se/mail/lib-2004-10/0134.html
  http://curl.haxx.se/mail/lib-2004-10/0157.html
2004-10-16 12:59:05 +00:00
Daniel Stenberg
e8f85cba0f Eric Vergnaud pointed out that libcurl didn't treat ?-letters in the user name
and password fields properly in URLs, like
ftp://us?er:pass?word@site.com/. Added test 191 to verify the fix.
2004-10-14 13:44:54 +00:00
Daniel Stenberg
1aba99b1e7 use quotes to make gdb usage on this easier 2004-10-14 13:44:16 +00:00
Daniel Stenberg
12815d7cd6 let's fix this too 2004-10-14 13:34:42 +00:00
Gisle Vanem
9deb76ce3e Set errno = ENOMEM on faild countcheck(). 2004-10-13 19:11:46 +00:00
Daniel Stenberg
c98676068e .NET binding 2004-10-13 08:46:36 +00:00
Daniel Stenberg
b534f74bf4 correction 2004-10-12 18:20:36 +00:00
Daniel Stenberg
411e9b0c45 #include "strerror.h" to get the strerror proto 2004-10-12 12:49:38 +00:00
Daniel Stenberg
3fa1879f6a recent fixes 2004-10-12 12:47:38 +00:00
Daniel Stenberg
d30cf22c12 one item fixed, one added for 7.12.2 and two more for 7.12.3 2004-10-12 12:47:31 +00:00
Daniel Stenberg
557b6cfd3f add proper error message when send() fails 2004-10-12 07:24:19 +00:00
Daniel Stenberg
84bf03b365 removed trailing whitespace 2004-10-11 17:26:24 +00:00
Daniel Stenberg
34342bcd19 SO_NOSIGPIPE 2004-10-11 17:23:41 +00:00
Daniel Stenberg
5322a86313 another lame attempt to avoid the "warning: will never be executed" warning
by gcc 3.4
2004-10-10 14:36:22 +00:00
Gisle Vanem
1dc50e21c4 MSVC uses 'i64' suffix for 64-bit sizes. 2004-10-10 14:08:05 +00:00
Daniel Stenberg
1eddbb1b47 attempt to make the configure output appear in the build log when it runs
on my solaris 2.7 box too (currently unknown perl version)
2004-10-10 07:51:25 +00:00
Daniel Stenberg
bb8591cf54 set the SIZEOF_LONG define to get the new lib/strtoofft.h fine 2004-10-10 07:45:41 +00:00
Daniel Stenberg
a7913a62a9 If long is 8 bytes we can use strtol() to get 64 bit numbers and won't need
our strtoll() replacement function.
2004-10-10 03:39:59 +00:00
Daniel Stenberg
6d1b37b3da Prevent a longjmp warning by moving the rc assign within Curl_resolv().
Andy Cedilnik reported. Warning on HP-UX?
2004-10-10 03:32:01 +00:00
Daniel Stenberg
34750cc738 Use LL suffix for long long constants if the compiler supports it, to prevent
warnings.
2004-10-10 03:28:51 +00:00
Daniel Stenberg
af677c4e1d If long long is supported, check if [num]LL is supported for numerical
constants.
2004-10-10 03:22:45 +00:00
Daniel Stenberg
298076e00f --enable-ares on AIX has problem 2004-10-08 12:59:36 +00:00
Daniel Stenberg
0d2cdd9773 Use 'struct lifreq' and SIOCGLIFADDR 2004-10-08 09:57:33 +00:00
Daniel Stenberg
eb5d3b5a7c killed trailing whitespace 2004-10-08 09:39:37 +00:00
Daniel Stenberg
7663775971 if basename was found, check for a prototype and if none was found, provide
our own in the formdata.c file to prevent warnings on systems without it
2004-10-08 08:18:08 +00:00
Daniel Stenberg
fe46572f2b prevent warning with comparison between signed and unsigned 2004-10-08 08:16:02 +00:00
Daniel Stenberg
a6d4d3eeac use curlx_strnequal() from the private lib sources instead of strncasecmp()
for maximum portability
2004-10-07 22:57:24 +00:00
Daniel Stenberg
62f97f1817 use curl_strnequal(), not strncasecmp() 2004-10-07 22:56:24 +00:00
Daniel Stenberg
253ff7b2ad Gisle's new fix, the old file:// leak 2004-10-07 12:17:53 +00:00
Daniel Stenberg
c274e51654 use tld_strerror() only if previously detected, since otherwise we can't
work with libidn < 0.5.6
2004-10-07 07:41:44 +00:00
Daniel Stenberg
1239e48304 check for tld_strerror 2004-10-07 07:41:14 +00:00
Gisle Vanem
52313cbac9 Added tld_check_name(). 2004-10-06 19:00:37 +00:00
Gisle Vanem
071218a201 Fixed tld_check_name(). idna_to_unicode_lzlz() should never fail,
but return FALSE if 'uc_name == NULL' just in case.
2004-10-06 18:55:58 +00:00
Gisle Vanem
f0d6cc23ae USE_LIBIDN: Added Top-level-domain (TLD) check for host->name.
Only print a warning if check fails.
2004-10-06 18:40:10 +00:00
Daniel Stenberg
ceefe2e248 test resume and redirect 2004-10-06 14:58:07 +00:00
Daniel Stenberg
9a2aed7d7a Chih-Chung Chang reported that if you use CURLOPT_RESUME_FROM and enabled
CURLOPT_FOLLOWLOCATION, libcurl reported error if a redirect happened even if
the new URL would provide the resumed file. Test case 188 added to verify the
fix (together with existing test 99).
2004-10-06 13:37:12 +00:00
Gisle Vanem
a91a75355d *** empty log message *** 2004-10-06 13:24:08 +00:00
Daniel Stenberg
01acbfa1a5 updates of today 2004-10-06 09:04:20 +00:00
Daniel Stenberg
49b2896a3b avoid warnings on systems with this member set const 2004-10-06 07:52:20 +00:00
Daniel Stenberg
39af394a1c removed tabs and trailing whitespace from source 2004-10-06 07:50:18 +00:00
Daniel Stenberg
5c7dcc6c33 Dan Fandrich fix for hosts that need both -lnsl and -lsocket 2004-10-06 07:33:03 +00:00
Daniel Stenberg
6c5ea2af27 untabify 2004-10-06 06:58:42 +00:00
Gisle Vanem
93e084e097 djgpp has basename() 2004-10-05 13:48:50 +00:00
Daniel Stenberg
1a61bcecfc minor edit to re-use a variable and to hopefully avoid a (moot) warning
about code that won't be reached
2004-10-05 11:03:59 +00:00
Daniel Stenberg
3d9fb701e2 recent fixes 2004-10-05 10:52:51 +00:00
Daniel Stenberg
19a568a983 make the given path to --with-libidn override any other installation 2004-10-05 08:45:13 +00:00
Daniel Stenberg
70c3f6a8dd avoid warning for unused variable 2004-10-05 08:42:56 +00:00
Daniel Stenberg
bb999d8213 use idna_strerror() if it is available (only in libidn 0.5.6 or later) 2004-10-05 08:40:26 +00:00
Daniel Stenberg
121197bc87 Only include libgen.h if we have a basename as well.
Mainly meant to deal with the IRIX case which seems to requrie a "-lgen" lib
to find the basename function and thus without the gen lib, it finds the
header but not the function and our replacement function has a prototype
that doesn't match the IRIX one.

A different approach would be to make configure detect and use -lgen for the
systems that require it.
2004-10-05 06:55:09 +00:00
Daniel Stenberg
d5dd8e0fdc let our basename() be static 2004-10-05 06:49:09 +00:00
Daniel Stenberg
c368800877 name mix fix 2004-10-04 12:54:58 +00:00
Daniel Stenberg
6eb58549a9 closing in on release 2004-10-04 10:37:30 +00:00
Daniel Stenberg
95def48071 Made the dns entry remain locked while a connection to the host remains to
allow verbose output during this period. Bertrand Demiddelaer reported and
helped fixing.
2004-10-04 10:36:51 +00:00
Daniel Stenberg
2ee6c33412 set async.done to TRUE last in the addrinfo callback to prevent the risk that
the multi-threaded resolver does wrong
2004-10-03 21:32:24 +00:00
Daniel Stenberg
be7ce435c0 Replaced the use of isspace() with our own version instead since we have most
data as 'char *' and that makes us pass in negative values if there is 8bit
data in the string. Changing to unsigned causes too much warnings or too many
required typecasts to the normal string functions.
2004-10-03 21:02:01 +00:00
Daniel Stenberg
f4252f8672 when building with libidn support, check for idna_strerror() which is
included in very recent versions
2004-10-03 20:50:47 +00:00
Daniel Stenberg
f4f961c4ea added info about how users get info (like the CURLcode return code) from
individual transfers
2004-10-03 17:38:57 +00:00
Daniel Stenberg
e2fe03df8e removed trailing whitespace 2004-10-03 08:15:40 +00:00
Daniel Stenberg
19b284c214 Gisle Vanem provided code that displays an error message when the (libidn
based) IDN conversion fails. This is really due to a missing suitable
function in the libidn API that I hope we can remove once libidn gets a
function like this.
2004-10-02 13:01:44 +00:00
Daniel Stenberg
6b3e3095ea removed weird preprocessor juggling not needed 2004-10-02 12:58:27 +00:00
Daniel Stenberg
fd2aad1d9b someone should hit me 2004-10-01 11:27:14 +00:00
Daniel Stenberg
d239fc5d04 Aleksandar Milivojevic reported a problem in the Redhat bugzilla (see
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134133) and not to anyone
involved in the curl project! This happens when you try to curl a file from a
proftpd site using SSL. It seems proftpd sends a somewhat unorthodox PASS
response code (232 instead of 230). I relaxed the response code check to deal
with this and similar cases.
2004-10-01 11:22:11 +00:00
Daniel Stenberg
ec4da97a35 fixed the basename() replacement, reported by Gisle 2004-10-01 11:20:38 +00:00
Daniel Stenberg
bb48ccedd7 mention when this option was added 2004-10-01 06:43:48 +00:00
Daniel Stenberg
afc0dfb141 reflect the last few changes 2004-10-01 06:43:37 +00:00
Daniel Stenberg
8e87223195 - Based on Fedor Karpelevitch's formpost path basename patch, file parts in
formposts no longer include the path part. If you _really_ want them, you
  must provide your preferred full file name with CURLFORM_FILENAME.

  Added detection for libgen.h and basename() to configure. My custom
  basename() replacement function for systems without it, might be a bit too
  naive...

  Updated 6 test cases to make them work with the stripped paths.
2004-10-01 06:36:11 +00:00
Daniel Stenberg
be1cece69b - Larry Campbell added CURLINFO_OS_ERRNO to curl_easy_getinfo() that allows an
app to retrieve the errno variable after a (connect) failure. It will make
  sense to provide this for more failures in a more generic way, but let's
  start like this.
2004-09-30 21:01:23 +00:00
Daniel Stenberg
45be6d6645 killed trailing whitespace 2004-09-30 20:50:34 +00:00
Daniel Stenberg
d4db35c125 Gnter Knauf and Casey O'Donnell worked out an extra #if condition for the
curl/multi.h header to work better in winsock-using apps.
2004-09-30 19:50:36 +00:00
Daniel Stenberg
94c6a5eeab Jean-Philippe Barrette-LaPierre made buildconf run better on Mac OS X by
properly using glibtoolize instead of plain libtoolize. (This is made if
glibtool was found and used instead of plain libtool.)
2004-09-30 19:46:32 +00:00
Daniel Stenberg
35292e794a --max-redirs is _not_ -Z 2004-09-30 14:38:29 +00:00
Daniel Stenberg
c2043a7f94 48 - Harshal Pradhan's isspace() fix for 8bit cookie content 2004-09-30 12:20:04 +00:00
Daniel Stenberg
e752588e8d issue 47 - Peter Sylvester's patch related to the new SRP on the TLS layer 2004-09-30 11:41:25 +00:00
Daniel Stenberg
8f30dbd4f0 fix the multi.h too 2004-09-30 11:38:46 +00:00
Daniel Stenberg
29eb80dbd1 added issue 45 "Chris' suspected race condition in the windows threaded
resolver"
2004-09-30 08:01:47 +00:00
Daniel Stenberg
6cf6f9a21e added five things I want fixed before the next release 2004-09-30 07:59:17 +00:00
Daniel Stenberg
6af6a2bbe8 Fixed an error message: we use CWD, we don't cd into dirs with FTP 2004-09-29 07:21:23 +00:00
Daniel Stenberg
2576ac1c76 Bertrand Demiddelaer fixed curl_easy_reset() so that it doesn't mistakingly
enable the progress meter.
2004-09-28 22:26:47 +00:00
Daniel Stenberg
bfeea8e6b7 - Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
  other OSes. He made c-ares check for and understand it if present.

- Now c-ares will use local host name lookup _before_ DNS resolving by default
  if nothing else is told.
2004-09-28 22:19:39 +00:00
Daniel Stenberg
2f89f2311c recent stuff 2004-09-28 22:04:17 +00:00
Daniel Stenberg
75e5967afd made pkg-config not get used if a path is given with --with-ssl 2004-09-28 22:04:05 +00:00
Daniel Stenberg
1003628103 Only active the engine code if ssl is enabled. This is how the actual engine
member in the struct is used.
2004-09-28 07:11:32 +00:00
Daniel Stenberg
3451e888b9 - Henrik Stoerner: found out that C-ARES does not look at the /etc/host.conf
file to determine the sequence in which to search /etc/hosts and DNS.  So on
  systems where this order is defined by /etc/host.conf instead of a "lookup"
  entry in /etc/resolv.conf, C-ARES will always default to looking in DNS
  first, and /etc/hosts second.

  c-ares now looks at

  1) resolv.conf (for the "lookup" line);
  2) nsswitch.fon (for the "hosts:" line);
  3) host.conf (for the "order" line).

  First match wins.
2004-09-26 22:35:18 +00:00
Daniel Stenberg
12dc142a28 Dominick Meglio host file path discovery patch for windows 2004-09-26 18:20:58 +00:00
Daniel Stenberg
cb80670885 Ben Greear's minor fix to build (better) with cross-compiled(?) mingw 2004-09-26 06:53:53 +00:00
Daniel Stenberg
c189687188 allow setting CURLOPT_SSLENGINE to NULL even if no SSL engine is supported 2004-09-25 21:28:26 +00:00
Daniel Stenberg
595016d393 Dan Fandrich patched three tests 2004-09-22 18:23:14 +00:00
Daniel Stenberg
23550fe5de Dan Fandrich's fix to use 127.0.0.1 instead of localhost to not depend on
it resolving nicely
2004-09-22 18:21:45 +00:00
Daniel Stenberg
8420de971f Jean-Claude Chauve is a friend! 2004-09-22 12:54:41 +00:00
Daniel Stenberg
17f8f32b2e typo 2004-09-22 12:53:58 +00:00
Daniel Stenberg
7676f40218 jean-claude Chauve fixed an LDAP bug 2004-09-22 08:01:41 +00:00
Daniel Stenberg
2de62cb06f less long => int implicit conversion warnings 2004-09-20 13:21:48 +00:00
Gunter Knauf
be1df3ca0a removed getdate.c hack. 2004-09-19 23:30:34 +00:00
Daniel Stenberg
543ab6f331 added URL to the exception paragraph in the GPL FAQ 2004-09-19 22:37:26 +00:00
Daniel Stenberg
2b6f7ef2a9 the error message fix for failed connects 2004-09-19 14:30:16 +00:00
Daniel Stenberg
0d37f8564e kill trailing whitespace and clarify a few errors 2004-09-19 14:28:16 +00:00
Daniel Stenberg
6cd2536048 set an error message when connection fails 2004-09-19 14:27:56 +00:00
Daniel Stenberg
60fccf4e37 Location:-follow problem 2004-09-17 07:55:14 +00:00
Daniel Stenberg
8a8028394f one more option, one more friend 2004-09-16 22:10:15 +00:00
Daniel Stenberg
6a06667cc0 Added CURLOPT_FTPSSLAUTH 2004-09-16 21:45:16 +00:00
Daniel Stenberg
25bf23105d Location: problem with bad original URL, identified in bug report #1029478 2004-09-16 21:28:38 +00:00
Daniel Stenberg
2544c78083 Bertrand Demiddelaer's correction 2004-09-16 14:26:04 +00:00
Daniel Stenberg
40b9b6f6dc ftp-ssl mistake corrected 2004-09-16 08:45:11 +00:00
Daniel Stenberg
f5e1beddf1 no more getdate.c to care about 2004-09-15 08:07:20 +00:00
Daniel Stenberg
d4076c9a8a fixed to use the new file. Can we make this use Makefile.inc somehow? 2004-09-15 08:05:53 +00:00
Daniel Stenberg
106695d45e the new date parser affects -z 2004-09-15 07:31:48 +00:00
Daniel Stenberg
f71b3f48a1 Replaced the former date parser with a rewrite. No more yacc/bison needed. 2004-09-15 07:28:04 +00:00
Daniel Stenberg
aa8dd932c1 ignore more 2004-09-14 21:31:06 +00:00
Daniel Stenberg
adbe3eefb6 and moved back the month array to a static one since the ftp code won't need
it anymore
2004-09-13 20:49:27 +00:00
Daniel Stenberg
33f69c0546 removed this file again, we only provide a single public function and that
is already in the public header file
2004-09-13 20:48:24 +00:00
Daniel Stenberg
6c3a87a599 no longer includes getdate.h, there's no need for it 2004-09-13 20:47:31 +00:00
Daniel Stenberg
13cc010e38 getdate.h is not required to include, it adds nothing new 2004-09-13 20:47:15 +00:00
Daniel Stenberg
e99bf99829 revert the change for the new date parser, as the new one can deal with
the old format now
2004-09-13 20:43:12 +00:00
Daniel Stenberg
2e7dcc1e2a support for YYYYMMDD added, which allows us to keep using the lib/ftp.c code
I was previously #ifdef'ing to a different look when this parser is used
2004-09-13 20:40:27 +00:00
Daniel Stenberg
b85a036e4a added more examples/docs in the top comment 2004-09-13 07:57:12 +00:00
Daniel Stenberg
7885264b29 Since many users probably already use local time strings as input, I now
made it deal with named time zones as well as mail-style +0200 ones.

Seems to work fine. I'm comparing with GNU date command:

date -d [date] -u +%s
2004-09-13 07:45:19 +00:00
Daniel Stenberg
73dd450147 describes how you can extract the CA cert from a site using the openssl tool 2004-09-12 18:27:12 +00:00
Daniel Stenberg
96efa990f9 Added parsedate.[ch] 2004-09-11 20:06:33 +00:00
Daniel Stenberg
4e0aee9408 mention more friends 2004-09-11 20:06:14 +00:00
Daniel Stenberg
27d509cfe9 Minor adjustment needed for the new date parser to succeed. ifdef'ed out
for now.
2004-09-11 19:19:59 +00:00
Daniel Stenberg
ade8e47a8c more docs and fixed the delta compared to GMT that prevented test case 141 to
work with this
2004-09-11 19:16:34 +00:00
Daniel Stenberg
ca52c963c7 1. cookie expire-strings MUST use GMT timezones
2. adjusted date strings to upcoming date parser rewrite
2004-09-11 19:12:37 +00:00
Daniel Stenberg
17acdb5acf slightly better but still lacks 2004-09-11 13:07:42 +00:00
Daniel Stenberg
f6433211ae getdate replacement code. smaller, slicker, faster. 2004-09-11 09:24:02 +00:00
Daniel Stenberg
0ec4c66fba fixed -F to support setting type= even on parts that aren't file-uploads 2004-09-10 21:47:52 +00:00
Daniel Stenberg
1faa9d6fd5 minor indent change 2004-09-10 21:46:58 +00:00
Daniel Stenberg
23d64e720d up to date with recent changes 2004-09-10 21:13:55 +00:00
Daniel Stenberg
b8b56248bd - Bug report #1025986. When following a Location: with a custom Host: header
replacement, curl only replaced the Host: header on the initial request
  and didn't replace it on the following ones. This resulted in requests with
  two Host: headers.

  Now, curl checks if the location is on the same host as the initial request
  and then continues to replace the Host: header. And when it moves to another
  host, it doesn't replace the Host: header but it also doesn't make the
  second Host: header get used in the request.

  This change is verified by the two new test cases 184 and 185.
2004-09-10 20:58:51 +00:00
Daniel Stenberg
33929117f9 curl --sync 2004-09-09 06:58:01 +00:00
Daniel Stenberg
2b1673c9c8 Now the test servers and test cases can run on a custom port number. There's
no fixed port numbers in use anymore. Starting now, the default ports the
servers use are 8990 - 8993. There's no option to modify these yet, but
changing the $base option in the top of the runtests.pl script.
2004-09-08 08:08:38 +00:00
Gunter Knauf
702f549a6a fixed nasty warnings with gcc 3.3. 2004-09-03 18:51:36 +00:00
Daniel Stenberg
428741d7cf clarify CURLE_SSL_CERTPROBLEM somewhat 2004-09-02 21:05:56 +00:00
Daniel Stenberg
6fa624cf8c improved error message when client cert return failure 2004-09-02 21:03:41 +00:00
Daniel Stenberg
5f60188b8a use the correct struct name in the example 2004-09-02 20:42:44 +00:00
Daniel Stenberg
75a6fdeb58 added more info on the nobody 2004-09-01 12:05:59 +00:00
Daniel Stenberg
5f3fa92062 minor edit of HTTPGET 2004-09-01 09:25:19 +00:00
Daniel Stenberg
66077ae48b fix formatting flaw 2004-09-01 09:24:01 +00:00
Daniel Stenberg
92637303db fix the return code for curl_multi_add_handle() 2004-08-31 06:04:43 +00:00
Daniel Stenberg
811dfd710b mention when the function was added to the lib 2004-08-31 06:03:16 +00:00
Daniel Stenberg
b08dc2cadb proxy connection close and so 2004-08-30 15:02:37 +00:00
Daniel Stenberg
f7c5a097e3 proxy-connection close 2004-08-30 15:02:18 +00:00
Daniel Stenberg
5eb3102cd1 removed issue 36 from this list, we don't know how to do it and no one has
stepped forward to help us. Let's postpone that fix.
2004-08-30 14:22:47 +00:00
Daniel Stenberg
05825a8a9f Make "Proxy-Connection: close" close the current proxy connection, as
Roman Koifman found out.
2004-08-30 12:51:32 +00:00
Daniel Stenberg
24353c4372 getdate fix, adacurl release 2004-08-30 09:16:43 +00:00
Daniel Stenberg
e89ea07626 mention Gisle's recent fixes 2004-08-30 09:16:31 +00:00
Gisle Vanem
b99c95ba46 Removed ares_free_errmem.c from MSCV project files.
Fixed line-endings to CR-LF.
2004-08-29 15:40:17 +00:00
Daniel Stenberg
9432bfe90c updated with minor edits 2004-08-27 07:17:52 +00:00
Daniel Stenberg
37bf6da9c8 don't do SO_KEEPALIVE, we already have a finer grained method built-in 2004-08-27 07:04:31 +00:00
Daniel Stenberg
b3ebbd60a2 added some more details 2004-08-26 13:26:27 +00:00
Daniel Stenberg
e942394bdb getdate and new test cases from yday 2004-08-25 11:21:15 +00:00
Daniel Stenberg
4adfcd4fd7 not accurate anymore anyway 2004-08-25 11:18:33 +00:00
Daniel Stenberg
c10196afc0 Frankie V's description on how to get a CA cert for a random site using
IE
2004-08-25 08:09:48 +00:00
Daniel Stenberg
49746d1dce returned memory should not be freed 2004-08-24 20:36:38 +00:00
Daniel Stenberg
d46e235c2a added test 183 to verify that we properly send good Host: headers when
getting multiple URLs over a single proxy connection
2004-08-24 14:40:32 +00:00
Daniel Stenberg
ee44677d7e Attempt to quick-fix the getdate problem by post-replacing the getdate.c
file after the bison/yacc process to add the fix Harshal Pradhan suggested.
2004-08-24 11:48:02 +00:00
Daniel Stenberg
20057aee2e prevent files named ".nfs[something]" from being displayed when failing 2004-08-24 09:23:40 +00:00
Daniel Stenberg
7119679080 updated in CVS, generated with a much newer bison version 2004-08-23 15:28:53 +00:00
Daniel Stenberg
d869b51a57 Expect: 100-continue info added 2004-08-23 14:46:43 +00:00
Daniel Stenberg
dbacc81af7 added note about WRITEFUNCTION now being called with zero bytes if the file
to be transfered is empty
2004-08-23 14:41:54 +00:00
Daniel Stenberg
b233c13dca verify that transferring a zero byte FTP file results in a zero byte local
file
2004-08-23 14:41:19 +00:00
Daniel Stenberg
464be27479 Provide support for "transferring" zero bytes FTP files and comparing that
the output file actually is zero bytes after the transfer.
2004-08-23 14:40:43 +00:00
Daniel Stenberg
d736ac51c0 stripped trailing whitespace 2004-08-23 14:22:52 +00:00
Daniel Stenberg
e8b295ff7d lost of more into on how to tweak some headers 2004-08-23 14:22:44 +00:00
Daniel Stenberg
4a4490d5f1 debug.c is a fresh new example showing how to use the DEBUGFUNCTION to get
lots of fine info from a transfer
2004-08-23 14:22:26 +00:00
Daniel Stenberg
46313be2f5 added more header info for PUT and POST requests 2004-08-23 14:04:38 +00:00
Daniel Stenberg
723bfe42e7 Roman Koifman pointed out that libcurl send Expect: 100-continue on POSTs and
PUTs even when told to use HTTP 1.0, which is not correct.
2004-08-23 12:34:55 +00:00
Gisle Vanem
e35c7dcd72 More patches for Watt-32 on Win32; don't include "nameser.h". 2004-08-20 14:10:44 +00:00
Gisle Vanem
fa83a0573e No WSAGetLastError() on Watt-32/DOS 2004-08-20 14:07:11 +00:00
Gisle Vanem
7b97371ab1 No <sys/uio.h> on DOS/Win32 2004-08-20 13:48:24 +00:00
Gisle Vanem
b17e32baa7 Changes for Watt-32 on Windows. I've assumed Configure
sets the required HAVE_xx defines for non-DOS/Win targets.
2004-08-20 13:45:26 +00:00
Daniel Stenberg
cd52b9f0da Alexander Krasnostavsky made the write callback get called even when a zero
byte file is downloaded.
2004-08-20 12:09:09 +00:00
Daniel Stenberg
c3d74ffe48 socks proxy and timeouts bug 2004-08-20 10:52:35 +00:00
Daniel Stenberg
a231a96841 actually, we check for a numerical host using either ipv4 or ipv6, as neither
should result in a reverse dns lookup
2004-08-20 09:18:12 +00:00
Daniel Stenberg
93b61bf0d3 use inet_pton() correctly! 2004-08-20 09:11:52 +00:00
Gisle Vanem
06d39bd303 ZLIB_ROOT not needed 2004-08-19 15:24:49 +00:00
Gisle Vanem
52177b1f60 My first CVS commit just to see if this works.
BTW. Used eclipse IDE fo this, which really kicks ass.
2004-08-19 15:16:40 +00:00
Daniel Stenberg
566f7b5e58 simplified expression 2004-08-19 09:37:22 +00:00
Daniel Stenberg
c8c47768c7 Ling Thio pointed out that getaddrinfo() reverse-lookups ip-only names, and
this is an attempt to prevent it from doing that. affects ipv6-enabled only.
2004-08-19 06:44:19 +00:00
Daniel Stenberg
62ff567c47 the autobuilds failed all over on AIX, attempt to fix the strerror_r() problem
by setting _THREAD_SAFE (and -qthreaded) before strerror_r() is checked for.
2004-08-19 06:41:49 +00:00
Daniel Stenberg
ee400f9552 reuse handles in PHP/CURL works - Kirk Hedden told us 2004-08-19 06:31:29 +00:00
Daniel Stenberg
9ac7629e2c PHP FAQ 2004-08-18 11:18:36 +00:00
Daniel Stenberg
d72ca96a43 indented the code curl-style 2004-08-18 06:12:01 +00:00
Daniel Stenberg
d0dcb3b554 removed trailing whitespace 2004-08-17 19:46:34 +00:00
Daniel Stenberg
e139e49826 see also the reset function 2004-08-17 12:39:10 +00:00
Daniel Stenberg
3838745fdb mention the reset function 2004-08-17 12:37:35 +00:00
Daniel Stenberg
06a5c70f4d Kjetil Jacobsen reported an open file leak in file:// transfers of empty
files.
2004-08-17 12:00:39 +00:00
Daniel Stenberg
62af3fb7b9 added a check for the xlc compiler on AIX, and if that is detect we use
the -qthreaded compiler option
2004-08-17 10:47:57 +00:00
Daniel Stenberg
db302a1055 define _THREAD_SAFE on (recent) AIX systems to build thread-safe code 2004-08-17 09:00:30 +00:00
Daniel Stenberg
847c91e568 recent fixes 2004-08-17 06:56:53 +00:00
Daniel Stenberg
2646af106b allow a custom "Accept-Encoding:" header override the internally set one
that gets set with CURLOPT_ENCODING
2004-08-16 13:25:30 +00:00
Daniel Stenberg
7261b4556b strip trailing whitespace 2004-08-16 13:24:01 +00:00
Gunter Knauf
071e3cf007 syncronized with libcurl.def. 2004-08-16 11:09:30 +00:00
Gunter Knauf
164184b484 cosmetic fix. 2004-08-16 11:09:01 +00:00
Daniel Stenberg
8b6e87abee summary edit: mention that some options take a curl_off_t 2004-08-16 10:49:57 +00:00
Daniel Stenberg
45197b188e Roland Krikava's cookies over proxy fix. 2004-08-16 07:24:25 +00:00
Gunter Knauf
559553b169 fixed linkage dll targets. (submitted by Casey O'Donnell) 2004-08-14 22:03:40 +00:00
Daniel Stenberg
84ec4068de added two good ideas 2004-08-13 12:06:30 +00:00
Daniel Stenberg
aea87be19e mention Harshal Pradhan's windows fix 2004-08-13 12:01:20 +00:00
Daniel Stenberg
9f14744d16 Harshal Pradhan made minor syntax change to make this build with MSVC 7.1 2004-08-13 12:00:33 +00:00
Daniel Stenberg
1dc8c1dbc8 removed the ispell-added local word, compressed the final links into a
short section
2004-08-13 11:56:15 +00:00
Daniel Stenberg
e9812c53cb strip trailing whitespace 2004-08-13 11:53:33 +00:00
Daniel Stenberg
ed98565963 spell 2004-08-13 11:47:31 +00:00
Daniel Stenberg
1d3233612a Added "5.9 How does libcurl resolve host names?" since I wrote the text in
a mail anyway the other day.
2004-08-12 14:09:10 +00:00
Daniel Stenberg
8362a34cef updated with recent changes 2004-08-12 14:08:46 +00:00
Daniel Stenberg
edd16d978f hm 2004-08-12 11:39:00 +00:00
Daniel Stenberg
4356356305 3.16 What certificates do I need with I use SSL?
my first attempt at a basic description of the certs involvede
2004-08-12 11:02:01 +00:00
Daniel Stenberg
cb88135220 removed trailing whitespace, indented to curl-style levels 2004-08-12 07:01:20 +00:00
Daniel Stenberg
498a0fe795 Removed the _XOPEN_SOURCE defining again since it caused major havoc in IRIX
land with many warnings and even compiler errors due to missing structs etc
2004-08-12 06:30:17 +00:00
Daniel Stenberg
0ca1b6afcf --disable-[protocol] doesn't disable tests of the specific protocol 2004-08-11 11:18:24 +00:00
Daniel Stenberg
d3c9f3d6f8 clarify that CURLE_FTP_USER_PASSWORD_INCORRECT might in fact get returned
even if user and password are correct
2004-08-11 08:44:36 +00:00
Daniel Stenberg
df59ca1a45 include the server response in the error message when an FTP server gives
back a 530 after the password is provided, as it isn't necessary because of a
bad user name or password.
2004-08-11 08:39:48 +00:00
Daniel Stenberg
9d84442409 define the _XOPEN_SOURCE define in the config.h file instead, and also added a
decent quote about the define, taken from
http://www.opengroup.org/onlinepubs/007908799/xsh/compilation.html
2004-08-11 07:25:08 +00:00
Daniel Stenberg
5ab9d72e45 fixed the default result for xopen and mimpure to work better 2004-08-11 07:14:34 +00:00
Daniel Stenberg
6060e7ed96 experimental code to detect mips-sgi-irix systems that build without gcc
and if so, define _XOPEN_SOURCE to 500 in an attempt to build with less
warnings (on the 64bit versions)
2004-08-11 07:11:35 +00:00
Daniel Stenberg
7ca7f7a725 added several recent bindings 2004-08-11 06:42:20 +00:00
Daniel Stenberg
355b3d3057 updated the CURLOPT_POST description after input from Alan Pinstein 2004-08-10 13:22:08 +00:00
Daniel Stenberg
d5bdf5f89c Ok, setting CURLOPT_POST to 0 will now convert the request to a GET (this
remains undocumented as this is not the way we recommend)
2004-08-10 13:21:32 +00:00
Daniel Stenberg
17de7e0f1c minor reformat to suit the new FAQ parser 2004-08-10 12:41:44 +00:00
Daniel Stenberg
2cea484428 ignore curllib.dsp 2004-08-10 10:43:41 +00:00
Daniel Stenberg
fb3e19ae50 ignore more files 2004-08-10 10:43:10 +00:00
Daniel Stenberg
99db7fb222 7.12.2 work in progress 2004-08-10 10:40:56 +00:00
Daniel Stenberg
49d0272627 and we're back on a clean notes sheet again 2004-08-10 08:56:12 +00:00
Daniel Stenberg
da30242640 7.12.1 notes 2004-08-10 08:42:54 +00:00
Daniel Stenberg
811edcde18 added "5.8 libcurl.so.3: open failed: No such file or directory" and made
some general cleanups
2004-08-10 08:41:41 +00:00
Daniel Stenberg
4934e6471b 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. Work-around brought by Alexis S. L. Carvalho.
2004-08-10 08:06:43 +00:00
Daniel Stenberg
9dbd6659dc more typecasts to please picky compilers 2004-08-10 06:41:13 +00:00
Daniel Stenberg
5ddad4cdb3 version string, krb4 link fix, added number of web mirrors and libcurl bindings 2004-08-09 13:13:10 +00:00
Daniel Stenberg
338c2da24f GSS/Kerberos 5 for ftp 2004-08-09 12:39:28 +00:00
Daniel Stenberg
b5cafc0b83 added info about my current idea about option separation between URLs on
the command line
2004-08-09 12:36:17 +00:00
Daniel Stenberg
c50ced6cc2 adding notes for 7.12.2 now, 7.12.1 is removed due to release ANY DAY NOW 2004-08-09 12:18:30 +00:00
Daniel Stenberg
f4783bda27 --negotiate does not work without username/password, bug report #1004841 2004-08-09 12:15:23 +00:00
Daniel Stenberg
b55507c8a7 the krb4 stuff needs -lcom_err to link now, for some odd reason. This is
possibly only on some platforms, but it happens on my Solaris 2.7 box and I
don't know anyone else that regularly build curl with krb4 support.
2004-08-09 10:06:15 +00:00
Daniel Stenberg
827a805966 typecast the assigment of an unsigned variable to a signed one to prevent
picky warnings
2004-08-09 08:29:39 +00:00
Daniel Stenberg
e23ba31eb9 ->fread() should get a size_t variable passed in 2004-08-09 08:28:17 +00:00
Daniel Stenberg
02c6fde11e made telrcv() take a ssize_t argument instead of int to better match other
functions (and prevent warnings)
2004-08-09 08:25:39 +00:00
Daniel Stenberg
d003f6e125 mention the new cool CA extraction way just documented 2004-08-09 07:02:51 +00:00
Daniel Stenberg
1dfff2487f new web mirror 2004-08-06 17:44:59 +00:00
Daniel Stenberg
4ff9cd39c5 negotiate fix and new glib/GTK+ binding 2004-08-05 18:55:51 +00:00
Daniel Stenberg
9c4ffcc250 Enrico Scholz fixed the service name to be uppercase as reported in bug
report #1004105
2004-08-05 18:52:54 +00:00
Daniel Stenberg
6b5a04cf83 multi-connect fix and cookie domain fix 2004-08-04 13:12:00 +00:00
Daniel Stenberg
55e61c092e Fixed multiple IP connects with the multi interface. This fix is influenced
by Gisle Vanem's patch, only modified by me.
2004-08-04 12:38:01 +00:00
Daniel Stenberg
de6ab3de22 Dylan Salisbury's fix to prevent us from accepting cookies from TLD only 2004-08-04 12:26:27 +00:00
Daniel Stenberg
5e1eb58e5a borland is already mentioned 2004-07-31 20:47:04 +00:00
Daniel Stenberg
d892a4dc23 mention this is new 2004-07-31 19:47:00 +00:00
Daniel Stenberg
496ea65f39 link to reset as well 2004-07-31 19:46:25 +00:00
Daniel Stenberg
6577b15d08 curl_easy_reset() documented 2004-07-31 19:46:01 +00:00
Daniel Stenberg
f2e35fad27 digest fix 2004-07-31 19:23:57 +00:00
Daniel Stenberg
81c48aa43d Joel Chen reported that we assumed content within quotes a bit too much in
the digest code. This fixes it.
2004-07-31 07:36:01 +00:00
Daniel Stenberg
0cfa9b52ae prevent all the sig and alarm stuff when using ares 2004-07-29 08:06:33 +00:00
Daniel Stenberg
48b92c163f fix a mingw32 build warning 2004-07-29 07:48:47 +00:00
Daniel Stenberg
b7575b39c4 mingw32 builds make .a libs 2004-07-29 07:37:36 +00:00
Daniel Stenberg
ae2f002b44 added typecast in an attempt to fix a mingw32 warning 2004-07-29 07:34:17 +00:00
Daniel Stenberg
89c312691e additional typecasts to please MIPSPro on 64bit IRIX 2004-07-29 07:30:38 +00:00
Daniel Stenberg
1d23affbc5 oops, curl_easy_reset is a void 2004-07-29 07:29:56 +00:00
Daniel Stenberg
26ffaa263b variable type fix 2004-07-29 07:24:39 +00:00
Daniel Stenberg
ca5e6160b7 provide a curl_easy_reset() proto 2004-07-29 07:20:19 +00:00
Daniel Stenberg
6d60ff6ea1 removed C++ comment to please picky source checkers 2004-07-29 07:19:27 +00:00
Daniel Stenberg
43ae26f146 fixes! 2004-07-28 22:00:14 +00:00
Daniel Stenberg
3e01f70468 curl_easy_reset was added 2004-07-28 21:40:20 +00:00
Daniel Stenberg
b9f1dd7691 Bertrand Demiddelaer fixed the host name to get setup properly even when
a connection is re-used, when a proxy is in use.
2004-07-28 21:27:33 +00:00
Daniel Stenberg
a7bed4fc7c Fixes Brian Akins' reported problems with duplicate Host: headers on re-used
connections.
2004-07-28 21:13:29 +00:00
Daniel Stenberg
7ca49dc91d use Makefile.inc and make it get included in dist archives 2004-07-28 18:40:50 +00:00
Daniel Stenberg
645ee8a42a renamed CURL_HEADERS, since it is a magic automake name we must not use 2004-07-28 18:40:18 +00:00
Daniel Stenberg
115dd6f095 Bertrand Demiddelaer made the testing work with valgrind 2.1 2004-07-26 15:45:03 +00:00
Daniel Stenberg
0e03165467 Bertrand Demiddelaer fixed two missing newlines 2004-07-26 15:42:07 +00:00
Daniel Stenberg
6574f4106e -o #[num] fix 2004-07-26 15:30:23 +00:00
Daniel Stenberg
8e7fcd9ee1 using #[num] with -o now make it literally used if there's no globbing for
that particular index. Reported in bug report 997536.
2004-07-26 09:11:10 +00:00
Daniel Stenberg
ad63e1e698 removed trailing whitespace 2004-07-26 09:09:26 +00:00
Daniel Stenberg
d784526dae libs built with libtool are named .la in the build dir 2004-07-25 06:03:10 +00:00
Daniel Stenberg
79d480e1e7 --enable-debug builds static only, Gisle fixed a memory leak and more 2004-07-24 21:51:43 +00:00
Daniel Stenberg
b3b2ba31f7 Gisle Vanem:
Basically in loops like handle_errors(), 'query->next' was assigned a local
variable and then query was referenced after the memory was freed by
next_server(). I've changed that so next_server() and end_query() returns the
next query. So callers should use this ret-value.

The next problem was that 'server->tcp_buffer_pos' had a random value at entry
to 1st recv() (luckily causing Winsock to return ENOBUFS).

I've also added a ares_writev() for Windows to streamline the code
a bit more.
2004-07-24 21:47:49 +00:00
Daniel Stenberg
7f78bc3c6d autobuilds with ares and curl_easy_reset() 2004-07-24 21:43:33 +00:00
Daniel Stenberg
f508f30fb6 curl_easy_reset() added. Need testing and docs. I also think we should make
the initial setting up the struct should use this single function to avoid
having the initialisation code at two places.
2004-07-24 21:31:01 +00:00
Daniel Stenberg
d20a05161a AM_PROG_LIBTOOL is deprecated and AC_PROG_LIBTOOL should be used instead 2004-07-24 21:29:43 +00:00
Daniel Stenberg
6769ab2797 if --enable-ares is used, we must run 'buildconf' in the ares dir before
we run configure.
2004-07-24 21:24:03 +00:00
Daniel Stenberg
85867cbe94 --enable-debug now makes the lib built static only since otherwise we
get problems
2004-07-24 21:22:46 +00:00
Daniel Stenberg
5e8d3988a2 generate the new configure better 2004-07-24 06:29:38 +00:00
Daniel Stenberg
1cd0a08575 now generated by automake 2004-07-23 18:34:21 +00:00
Daniel Stenberg
efd71af2a1 buildconf and memanalyze are parts of the plain release 2004-07-22 22:23:34 +00:00
Daniel Stenberg
2ea80c29fa Added buildconf buildconf.bat to the dist 2004-07-22 22:22:49 +00:00
Daniel Stenberg
e3fc0d5e78 refer bug reports to the mailing lists, not the old email alias 2004-07-22 22:22:29 +00:00
Daniel Stenberg
33f42aacca recent activities 2004-07-22 22:20:07 +00:00
Daniel Stenberg
c85bf83e88 - Fixed a few variable return types for some system calls. Made configure
check for ssize_t to make it possible to use that when receiving the send()
  error code. This is necessary to prevent compiler warnings on some systems.

- Made configure create config.h, and all source files now include setup.h that
  might include the proper config.h (or a handicrafted alternative).

- Switched to 'ares_socket_t' type for sockets in ares, since Windows don't
  use 'int' for that.

- automake-ified and libool-ified c-ares. Now it builds libcares as a shared
  lib on most platforms if wanted. (This bloated the size of the release
  archive with another 200K!)

- Makefile.am now uses Makefile.inc for the c sources, h headers and man
  pages, to make it easier for other makefiles to use the exact same set of
  files.

- Adjusted 'maketgz' to use the new automake magic when building distribution
  archives.
2004-07-22 22:18:45 +00:00
Daniel Stenberg
060b6ce148 the multi interface is not so new anymore! 2004-07-17 08:24:22 +00:00
Daniel Stenberg
35618b4712 minor format fix 2004-07-17 08:22:50 +00:00
Daniel Stenberg
cd2e99e980 deal with negative Content-Length: headers by ignoring the info 2004-07-16 21:01:16 +00:00
Daniel Stenberg
0359ae8f40 test downloading from a server claiming negative content-length 2004-07-16 21:00:50 +00:00
Gunter Knauf
972d39234f removed Makefile.b32.resp from repository. 2004-07-16 10:14:51 +00:00
Gunter Knauf
798349fce6 removed Makefile.b32.resp from the list. 2004-07-16 09:23:29 +00:00
Gunter Knauf
9612fda886 changed to use a temporary response file with tlib to give W9x a chance to build; looks ugly but works fine. 2004-07-16 09:20:57 +00:00
Gunter Knauf
4b217efb84 added borland-ssl and borland-ssl-zlib targets. 2004-07-15 22:20:52 +00:00
Gunter Knauf
555cfb3059 fixed zlib suport. 2004-07-15 21:54:10 +00:00
Gunter Knauf
c0d1d6926c some more tweaks, fixed zlib suport. 2004-07-15 21:51:59 +00:00
Gunter Knauf
fca8fcec3e added just another switch. 2004-07-15 19:36:30 +00:00
Gunter Knauf
6844d5dcad removed old CXXFLAGS; added switch to suppress linker banner. 2004-07-15 18:17:15 +00:00
Gunter Knauf
d759e97166 removed unneeded libs from linking. 2004-07-15 17:21:07 +00:00
Daniel Stenberg
cbfc737d79 recent activities 2004-07-15 09:03:32 +00:00
Gunter Knauf
ab64bf6fb1 added Borland support. 2004-07-15 02:34:58 +00:00
Gunter Knauf
0b0d20021c made OpenSSL support conditional. 2004-07-15 02:09:40 +00:00
Gunter Knauf
932a6f6b77 made OpenSSL support conditional;
removed ugly dependence on Makefile.b32.resp.
2004-07-15 01:59:59 +00:00
Gunter Knauf
1318760ad2 Gisle's fix to support Borland builds again. 2004-07-15 01:08:08 +00:00
Daniel Stenberg
15a403a98d now known as libcurl-tutorial.3 2004-07-14 15:33:27 +00:00
Daniel Stenberg
a92b7c1b16 Jason Nye pointed out that callbacks don't need to use the "C namespace" 2004-07-14 15:32:09 +00:00
Daniel Stenberg
0c54013ee3 An Andres Garcia fix: add a typecast to make it work better 2004-07-14 14:20:53 +00:00
Daniel Stenberg
ca5d1e7a8d removed the config-netware.h from the release archives 2004-07-14 14:18:31 +00:00
Gunter Knauf
40a39e2270 some more fixes; added cw32mt.lib, winmm.lib to the link libs for curl.exe. 2004-07-14 12:12:08 +00:00
Gunter Knauf
982530b186 changed Borland target since Borland's make doesnt understand '&'. 2004-07-14 11:39:29 +00:00
Gunter Knauf
fadc08445a changed to use Makefile.inc. 2004-07-14 11:30:01 +00:00
Gunter Knauf
783381c163 updated for current cvs sources; looking for getting rid of this file.... 2004-07-13 20:02:31 +00:00
Gunter Knauf
5f26bee7c8 changed to use Makefile.inc. 2004-07-13 20:01:15 +00:00
Gunter Knauf
2be57d0833 minor corrections. 2004-07-12 11:29:36 +00:00
Gunter Knauf
6e6748f051 changed to use Makefile.inc since Gisle agreed. 2004-07-11 23:43:32 +00:00
Gunter Knauf
a8d544d9b3 minor cleanup. 2004-07-11 18:14:11 +00:00
Gunter Knauf
5f1490e1bd added some lines to fetch ares version. 2004-07-11 17:59:07 +00:00
Gunter Knauf
2c3e557b5c updated MSVC build instructions. 2004-07-11 13:49:52 +00:00
Gunter Knauf
08df4b8971 changed paths to external libs to recent versions. 2004-07-11 13:49:18 +00:00
Gunter Knauf
11f58ea896 added new vc-zlib target. 2004-07-11 12:31:29 +00:00
Gunter Knauf
15f3b4b6d1 removed zlib dependence from default target; added new zlib targets. 2004-07-11 12:28:07 +00:00
Gunter Knauf
35270e50c2 removed obsolete NetWare config files;
we generate now config.h dynamically from Makefile.
2004-07-11 09:31:53 +00:00
Gunter Knauf
8c975657e7 added ifdef for NetWare to ares.h. 2004-07-11 08:30:23 +00:00
Gunter Knauf
03cb3b9db1 ifdef keep_sigact since its only used when SIGALRM is defined. 2004-07-10 23:11:22 +00:00
Gunter Knauf
19ad942739 fixed ares linking. 2004-07-07 20:46:39 +00:00
Daniel Stenberg
3cf452b923 file:// upload fix on windows 2004-07-06 15:17:32 +00:00
Daniel Stenberg
2a6f9aa155 Andres Garcia pointed out that we searched for a slash badly since it is
converted and thus we must search for backslash on windows
2004-07-06 15:16:05 +00:00
Daniel Stenberg
570455b21d clarify the -Q option a bit better 2004-07-06 08:08:13 +00:00
Daniel Stenberg
dccdf9e66c mingw and netware makefiles added by Gunter Knauf 2004-07-06 08:06:03 +00:00
Gunter Knauf
dd4d5bb1e0 fixed Win32 prebuild section; fixed minor cosmetic bug. 2004-07-06 02:37:52 +00:00
Gunter Knauf
842e4aaa0d added vc-ssl-zlib target. 2004-07-06 01:52:32 +00:00
Gunter Knauf
ebb09cd9c4 minor cleanup. 2004-07-06 01:18:35 +00:00
Gunter Knauf
9a6df07d3d be a bit more verbose when things go wrong. 2004-07-05 23:35:49 +00:00
Gunter Knauf
c59c429a69 added additional check to avoid calling a non-existant external script. 2004-07-05 23:07:59 +00:00
Gunter Knauf
69f9d0c916 the simple way was too simple, so added --mktarball option. 2004-07-05 22:35:00 +00:00
Gunter Knauf
56edbe3804 minor cosmetic fix. 2004-07-05 21:44:09 +00:00
Gunter Knauf
94c4a18541 added simple way to create a tarball just before the build is deleted. 2004-07-05 21:41:28 +00:00
Gunter Knauf
bdcf8d626d changed to reflect recent NetWare makefile changes;
moved call to buildconf.bat down so that it takes place in the build dir.
2004-07-05 21:32:18 +00:00
Gunter Knauf
576b40b1b0 added MingW32 makefile. 2004-07-05 13:53:27 +00:00
Gunter Knauf
954575a19d changed to use Makefile.inc; made paths overwritable. 2004-07-05 13:25:30 +00:00
Gunter Knauf
47bbe36725 added comment. 2004-07-05 13:24:44 +00:00
Daniel Stenberg
1a8f7e830c Added README.netware to the release archive 2004-07-05 11:43:32 +00:00
Gunter Knauf
dfc85b7291 added line where to find compile instructions. 2004-07-05 02:34:17 +00:00
Gunter Knauf
1457b80617 minor NetWare upate. 2004-07-05 02:20:20 +00:00
Gunter Knauf
dba40b35f2 try to relax linux build host detection. 2004-07-05 01:58:33 +00:00
Gunter Knauf
e9d95f1a25 added a simple README.netware. 2004-07-05 01:00:47 +00:00
Gunter Knauf
67e40a2b16 added section for compiling NetWare target. 2004-07-05 00:55:48 +00:00
Daniel Stenberg
25f5f14d35 Gnter Knauf made c-ares build and run on Novell Netware. 2004-07-04 22:20:26 +00:00
Daniel Stenberg
dfda9cc007 explicit typecasts to prevent warnings 2004-07-04 21:54:49 +00:00
Daniel Stenberg
e39b29fc48 typecast the conversion to uInt when assigning z->avail_in to prevent
warnings from picky compilers
2004-07-04 21:53:46 +00:00
Daniel Stenberg
4c17ba4fc0 make sure the 3rd argument passed to bind() is a socklen_t 2004-07-04 21:48:54 +00:00
Daniel Stenberg
4511f7ac50 SSL_get_verify_result() returns a long, so we receive the result in a long
and not an int.
2004-07-04 21:42:32 +00:00
Daniel Stenberg
b9f76f11bb typecast long => int conversion 2004-07-04 21:38:36 +00:00
Daniel Stenberg
17841a20e3 explicit typecasts when converting from long to int to avoid warnings 2004-07-04 21:37:35 +00:00
Gunter Knauf
d90d40b5d1 added NetWare section for paths. 2004-07-04 21:36:32 +00:00
Daniel Stenberg
d2e6a0583a made 'connectindex' a long variable to prevent compiler warnings when
implicitly converting it to int
2004-07-04 21:36:14 +00:00
Gunter Knauf
b2c9277e66 update to build both test apps. 2004-07-04 21:35:26 +00:00
Daniel Stenberg
31c332af93 typecast the conversion from long to int to prevent picky compiler warnings 2004-07-04 21:35:12 +00:00
Gunter Knauf
90af60a6ef removed now obsolete ifdef. Shouldnt the other ifdefs be inside the else as they are in ./src/setup.h ? 2004-07-04 15:37:25 +00:00
Gunter Knauf
80c7566203 removed now obsolete ifdef. 2004-07-04 15:34:58 +00:00
Gunter Knauf
efb1fdbec8 removed abort() - sync'd with getdate.y 1.26 2004-07-04 15:27:08 +00:00
Daniel Stenberg
bada8cc259 include the Makefile.inc file to get all sources and headers 2004-07-04 08:45:25 +00:00
Gunter Knauf
c3a076176e minor fix for compiling on Linux. 2004-07-03 22:25:37 +00:00
Gunter Knauf
2cda3070d5 added few ifdefs to make it usable for NetWare. 2004-07-03 21:48:42 +00:00
Gunter Knauf
728bed8c98 added NetWare makefile. 2004-07-03 21:44:32 +00:00
Gunter Knauf
6e72ea7442 reverted, older gcc breaks compilation since it doesnt know the switch. 2004-07-03 20:18:02 +00:00
Gunter Knauf
a4aac27fd3 killed warning with gcc 3.3.1 and later when using -O2. 2004-07-03 19:58:01 +00:00
Gunter Knauf
5b8816dcb7 modified to use new Makefile.inc to build up object list;
added generation of config.h and a prebuild target to create all neded files.
2004-07-03 19:13:28 +00:00
Gunter Knauf
fc0df97278 modified to use new Makefile.inc to build up object list;
added generation of config.h and a prebuild target to create all neded files.
2004-07-03 18:06:39 +00:00
Gunter Knauf
592658e874 added Makefile.inc which can be included from other makefiles to reduce maintaining. 2004-07-03 17:49:40 +00:00
Daniel Stenberg
5a70e42428 I prefer CURLOPT_WRITEDATA before CURLOPT_FILE 2004-07-02 14:00:49 +00:00
Daniel Stenberg
e4caa98901 snprintf instead of sprintf,
better support for HUGE files with the -# progress bar
2004-07-02 12:48:53 +00:00
Daniel Stenberg
c211a7c685 added typecasts to please compilers 2004-07-02 12:29:15 +00:00
Daniel Stenberg
7876c078bc variable type cleanup to hush compilers,
killed trailing whitespace
2004-07-02 12:28:57 +00:00
Daniel Stenberg
aedadfc779 explicit typecasts to double to prevent warnings about implicit conversions
that might lose accuracy
2004-07-02 11:56:26 +00:00
Daniel Stenberg
2046a6b9e5 curl_share_cleanup fix 2004-07-02 11:27:06 +00:00
Daniel Stenberg
d1d53b2bbf make clean now removes getdate.c 2004-07-02 11:25:13 +00:00
Daniel Stenberg
950aa1c743 configure --disable-http works these days 2004-07-02 09:14:46 +00:00
Daniel Stenberg
a9572bf88a Andrs Garca found out the share cleanup code crashes when you cleanup
and there are not lock/unlock functions set!
2004-07-02 08:28:31 +00:00
Daniel Stenberg
5a93f50394 typecase the argument to curl_easy_strerror() to a CURLcode to please
picky compilers
2004-07-01 14:06:44 +00:00
Daniel Stenberg
60af1cbcc2 djgpp fixes by Gisle 2004-07-01 13:55:13 +00:00
Daniel Stenberg
8952ef933b Gisle's win32-fix. 'errno' is not used for errors when socket() fails on
Windows.
2004-07-01 13:54:24 +00:00
Daniel Stenberg
b350d5da59 Gisle added makefile for djgpp builds 2004-07-01 13:53:13 +00:00
Daniel Stenberg
6df3bf3644 --trace fix 2004-07-01 12:37:55 +00:00
Daniel Stenberg
35840a2c5c make functions use size_t instead of int next major update 2004-07-01 08:22:52 +00:00
Daniel Stenberg
090b89cc76 Variable type cleanups to please the picky MIPSPro compiler. 2004-07-01 08:10:21 +00:00
Daniel Stenberg
f05d47ddd6 variable type cleanup to fix picky compiler warnings 2004-07-01 07:43:20 +00:00
Daniel Stenberg
fcfd4bef2d typecast to prevent picky compiler warning 2004-07-01 07:30:19 +00:00
Daniel Stenberg
18dc8fbc26 typecast to int when the variable is int! 2004-07-01 07:28:36 +00:00
Daniel Stenberg
d9ceee1c75 Gisle's djgpp magic 2004-07-01 06:59:43 +00:00
Daniel Stenberg
097281f459 Gisle Vanem made this build fine with djgpp and the Watt-32 stack. 2004-07-01 06:58:47 +00:00
Daniel Stenberg
087748c48e don't close the trace stream until _after_ the easy handle has been cleaned
up, as that can send traces too
2004-07-01 06:19:19 +00:00
Daniel Stenberg
e35187741b spellfixed comments 2004-07-01 06:08:06 +00:00
Daniel Stenberg
574e911375 Another Gisle update 2004-06-30 12:34:33 +00:00
Daniel Stenberg
ce945bd2f0 5K array on the stack is a big hefty, it is now allocated with malloc
instead
2004-06-30 12:05:07 +00:00
Daniel Stenberg
8efa6f407d I think 1024 bytes is enough for even most ipv6 addresses :-) 2004-06-30 12:04:37 +00:00
Daniel Stenberg
85bd4621db Prevent a very long password to buffer overflow the global variable we
use when built with a very old OpenSSL version.
2004-06-30 11:53:34 +00:00
Daniel Stenberg
6c3759d78d removed trailing whitespace, free a missing malloc when returning error 2004-06-30 11:51:24 +00:00
Daniel Stenberg
4af08a19f8 passing in a very long interface name could make a buffer overflow 2004-06-30 11:48:19 +00:00
Daniel Stenberg
c14650caec not PIN code, pass phrase 2004-06-30 11:34:57 +00:00
Daniel Stenberg
c7a9e07909 simplified the check for when to free() the buf data 2004-06-30 11:32:16 +00:00
Daniel Stenberg
185baf036b NOBODY set TRUE after a POST makes a good HEAD now 2004-06-30 11:09:16 +00:00
Daniel Stenberg
3523613826 wxcurldav 2004-06-30 10:47:14 +00:00
Daniel Stenberg
782ade7223 fixed 2004-06-30 09:29:00 +00:00
Daniel Stenberg
ba40eccc90 make the SSL connect use the same default connect timeout define as the
generic connect uses
2004-06-30 09:22:48 +00:00
Daniel Stenberg
4191741fb6 Curl_addrinfo is another typedef we use frequently 2004-06-29 18:45:52 +00:00
Daniel Stenberg
7a52f44bd4 Gisle fixed a bad free from the resolve reorg, I changed type of the buf
variable to sort out some compiler warnings.
2004-06-29 18:44:59 +00:00
Daniel Stenberg
efa5485744 Gisle's djgpp updates 2004-06-29 18:43:56 +00:00
Daniel Stenberg
c81ac51e5c Gisle's update 2004-06-29 18:43:04 +00:00
Gunter Knauf
fd17cf2e3c fixed argument parsing; added --setup option. 2004-06-29 13:20:37 +00:00
Daniel Stenberg
d4b0999415 'M-x ispell-buffer' 2004-06-29 13:16:30 +00:00
Daniel Stenberg
03f8ec89db multi interface connect fix 2004-06-29 11:27:33 +00:00
Daniel Stenberg
f633ab688b commented out the check for gethostbyname_r() as we no longer use it 2004-06-29 11:22:39 +00:00
Daniel Stenberg
808621ab22 corrected the Curl_is_connected() proto 2004-06-29 11:21:05 +00:00
Daniel Stenberg
6ed5feda2b First attempt at making the multi interface work when connecting to a host
that resolves to multiple IP addresses.
2004-06-29 11:20:07 +00:00
Daniel Stenberg
964066c0de Added missing info for the command line tool, as noted by Mike Kienenberger 2004-06-29 07:58:52 +00:00
Daniel Stenberg
a913e93667 --limit-rate problems on Mac OS X was reported by Rob Stanzel 2004-06-28 07:08:09 +00:00
Daniel Stenberg
a7b99fc463 check for a fine poll() before it is used to sleep subsecond 2004-06-27 21:51:54 +00:00
Daniel Stenberg
6f252f4704 reset CURLOPT_CUSTOMREQUEST with NULL 2004-06-27 21:19:54 +00:00
Daniel Stenberg
b596c34bed snprintf and version 2004-06-24 15:20:29 +00:00
Daniel Stenberg
b0cd96478c oops 5 bytes makes 4 letters plus zero byte 2004-06-24 15:15:27 +00:00
Daniel Stenberg
387ec712e6 fix warning 2004-06-24 15:06:25 +00:00
Daniel Stenberg
f2a99d7d74 the _num_chars() function is not used, removing 2004-06-24 15:05:39 +00:00
Daniel Stenberg
8b6b15dccc to prevent compier warnings, we only declare len if we have code
that uses it
2004-06-24 14:52:51 +00:00
Daniel Stenberg
bbb72b7b6b Gisle: free used memory better 2004-06-24 14:40:16 +00:00
Daniel Stenberg
785bad388b Gisle cleaned up remaining host resolve re-org issues 2004-06-24 14:39:52 +00:00
Daniel Stenberg
cf10df6c68 include header for our printfs 2004-06-24 14:35:45 +00:00
Daniel Stenberg
5b55dcbfbb reverted bad win32 fix 2004-06-24 14:34:13 +00:00
Gunter Knauf
e7dbbd16a5 fixed the MSVC build. 2004-06-24 13:49:14 +00:00
Daniel Stenberg
62f0457961 length limit the sscanf() parsing to prevent buffer overflow 2004-06-24 12:07:36 +00:00
Daniel Stenberg
8879b57b73 ah, simplified my latest change more 2004-06-24 12:01:20 +00:00
Daniel Stenberg
e49a6feabb fix for systems without gethostbyname_r() 2004-06-24 11:58:43 +00:00
Daniel Stenberg
feb2dd2835 Replaced all uses of sprintf() with the safer snprintf(). It is just a
precaution to prevent mistakes to lead to buffer overflows.
2004-06-24 11:54:11 +00:00
Daniel Stenberg
5e34f3dc01 made the Curl_he2ai() take the port number as an int intead, to avoid lots
of typecasts all over
2004-06-24 10:43:50 +00:00
Daniel Stenberg
0031d76f2a use snprintf() to be on the safe side 2004-06-24 10:43:22 +00:00
Daniel Stenberg
00ee738fdd typecasts to prevent warnings 2004-06-24 09:14:59 +00:00
Daniel Stenberg
8d0a823124 only use sockaddr_in6 on ipv6-enabled hosts 2004-06-24 09:13:50 +00:00
Daniel Stenberg
9729df1756 socks proxy support even when libcurl is built ipv6-enabled 2004-06-24 08:59:54 +00:00
Daniel Stenberg
cdb419d65e typecast to prevent warning 2004-06-24 08:31:17 +00:00
Daniel Stenberg
d6f9a41539 use Curl_addrinfo, not 'struct addrinfo' 2004-06-24 08:30:39 +00:00
Daniel Stenberg
1daa258b8a fixed problems I missed to fix from my cleanup 2004-06-24 08:09:54 +00:00
Daniel Stenberg
560c257bd0 prevent warning 2004-06-24 08:08:28 +00:00
Daniel Stenberg
d7aae417b1 Yet another resolve code re-org 2004-06-24 07:56:07 +00:00
Daniel Stenberg
c39858aac0 Source cleanups. The major one being that we now _always_ use a Curl_addrinfo
linked list for name resolved data, even on hosts/systems with only IPv4
stacks as this simplifies a lot of code.
2004-06-24 07:43:48 +00:00
Daniel Stenberg
818aed35e2 static functions are better not Curl_ prefixed to make their static
status more obvious
2004-06-23 09:08:03 +00:00
Daniel Stenberg
2ed524f07e When adding the return -1 to prevent warnings on some compilers, others
started complaining since it won't be reached... So I removed the call to
abort() and just return -1 instead. abort() was wrong to call anyway since
this is a library!
2004-06-23 06:17:17 +00:00
Daniel Stenberg
5f1eefd03f prevent a warning 2004-06-23 06:14:23 +00:00
Gunter Knauf
522b4d7576 one copy&paste too much, removed the define again. 2004-06-22 23:56:19 +00:00
Gunter Knauf
d6dcb08407 argh - copy&paste error. 2004-06-22 23:22:37 +00:00
Gunter Knauf
806c756a2d syncronized with recent getdate.y updates. 2004-06-22 23:04:57 +00:00
Daniel Stenberg
2494701347 the hostname variable wasn't assigned and we no longer use it 2004-06-22 21:25:53 +00:00
Daniel Stenberg
1c10272e15 cookie size 2004-06-22 21:22:42 +00:00
Daniel Stenberg
0badcf381a extended to include a cookie with 4998 bytes of content 2004-06-22 21:21:54 +00:00
Daniel Stenberg
35558e6bd7 David Cohen pointed out that RFC2109 says clients should allow cookies to
contain least 4096 bytes while libcurl only allowed 2047. I raised the limit
to 4999 now and made the used buffer get malloc()ed instead of simply
allocated on stack as before.
2004-06-22 21:15:51 +00:00
Daniel Stenberg
7659747e6f Gnter Knauf fixed getdate.y to remove a few warnings. I removed the
ifdef'ed test we never ever use anyway.
2004-06-22 21:12:34 +00:00
Gunter Knauf
53189fb2d7 added new --target option for autobuilding other targets than GNU-like. 2004-06-22 20:02:49 +00:00
Gunter Knauf
450c178d77 added 'clean' targets for mingw32 and netware. 2004-06-22 18:26:23 +00:00
Daniel Stenberg
a20eb6df1b reset CURLOPT_HTTPHEADER with NULL 2004-06-22 17:22:30 +00:00
Daniel Stenberg
d73425061a Moved the "About to connect() to" text to the place where the host name is
actually known, as before this text lied when used in i.e FTP.
2004-06-22 15:23:01 +00:00
Daniel Stenberg
0051d5ac88 Gisle Vanem improved the certificate wildcard checks 2004-06-22 08:54:42 +00:00
Daniel Stenberg
76920413d9 Gisle fixed the wildcard checks for certificates. 2004-06-22 08:51:22 +00:00
Daniel Stenberg
44d9a8ba4e Gunter's fix to avoid the notorious YYSTACK_USE_ALLOCA warning we get on
several platforms/compilers/yacc versions.
2004-06-22 07:27:43 +00:00
Daniel Stenberg
38dc548a87 retry to read the sent request a few times if it doesn't exist the first time 2004-06-22 07:09:47 +00:00
Daniel Stenberg
dca6386234 pass an int pointer when it expects an int pointer... 2004-06-22 06:50:41 +00:00
Daniel Stenberg
2a701a1aac modified some logging output 2004-06-22 06:44:14 +00:00
Daniel Stenberg
0cb297abc9 testcurl.sh is dead, long live tests/testcurl.pl! 2004-06-21 14:58:03 +00:00
Daniel Stenberg
821a23535b This is the old script for testing curl, now use tests/testcurl.pl instead.
It is more portable.
2004-06-21 14:56:48 +00:00
Daniel Stenberg
bc80599178 read callback return code and fixed the pycurl url 2004-06-21 14:20:34 +00:00
Daniel Stenberg
941374b573 CURL_READFUNC_ABORT stuff 2004-06-21 14:10:39 +00:00
Daniel Stenberg
1886893d66 Added blurb for the READFUNCTION, including the new CURL_READFUNC_ABORT
return code.
2004-06-21 14:09:23 +00:00
Daniel Stenberg
7291772b1f added test case 513 2004-06-21 14:08:48 +00:00
Daniel Stenberg
8e28721057 The read callback can now return CURL_READFUNC_ABORT to stop a transfer. 2004-06-21 14:07:38 +00:00
Daniel Stenberg
8d2120566e added CURL_READFUNC_ABORT 2004-06-21 14:04:36 +00:00
Daniel Stenberg
67341c4cbe when the client disconnects prematurely, dump the request as received thus
far
2004-06-21 14:00:11 +00:00
Daniel Stenberg
f8188ddfee recent events 2004-06-21 10:56:33 +00:00
Daniel Stenberg
29c546b426 typecasts to prevent compiler warnings 2004-06-21 08:37:53 +00:00
Daniel Stenberg
0d259b898b updates 2004-06-21 08:28:18 +00:00
Daniel Stenberg
c136b80af5 refer to the new tutorial man page 2004-06-21 08:28:10 +00:00
Daniel Stenberg
83b87d53c1 removed libcurl-the-guide from the dist 2004-06-21 08:27:45 +00:00
Daniel Stenberg
1e99f1ee41 libcurl-tutorial.3 is the former libcurl-the-guide converted to man page format 2004-06-21 08:17:08 +00:00
Daniel Stenberg
d7fe136d54 test 177 HTTP POST with --digest that gets a 302 response 2004-06-19 10:10:50 +00:00
Daniel Stenberg
cd7a0f829f When doing auth negotiations or authprobing, we only consider HTTP code
<300 to be good.
2004-06-19 10:10:24 +00:00
Daniel Stenberg
cf3f1ef284 prevent compiler warning 2004-06-19 09:38:08 +00:00
Daniel Stenberg
a737864a1c ispell-buffer 2004-06-18 13:11:49 +00:00
Daniel Stenberg
c68a6805b3 two issues to remember to fix before next release 2004-06-18 11:47:08 +00:00
Daniel Stenberg
bd3d5a17b4 Gisle's "SSL patch" from June 16th 2004, modified by me as discussed on the
mailing list.
2004-06-18 06:20:43 +00:00
Daniel Stenberg
d4b577114b With David Byron's test server I could repeat his problem and make sure that
POSTing over HTTPS:// with NTLM works fine now. There was a general problem
with multi-pass authentication with non-GET operations with CONNECT.
2004-06-18 06:15:26 +00:00
Daniel Stenberg
713effb6e4 large file FTP upload bug 2004-06-17 08:07:24 +00:00
Daniel Stenberg
b92e2ab6b1 new daring features, not used by any current test 2004-06-17 08:06:03 +00:00
Daniel Stenberg
05baf94b43 Keep the upload byte counter in an curl_off_t, not an int. 32bits is not
enough. This is most likely the bug Jean-Louis Lemaire reported that makes
2GB FTP uploads to report error when completed.
Also padded comments to get them aligned again, only for visibility.
2004-06-16 09:28:47 +00:00
Daniel Stenberg
a76288b99a Alexander Krasnostavsky fixed a flaw in the 3rd party transfer code that
didn't properly check return code.
2004-06-16 09:05:22 +00:00
Daniel Stenberg
557e95c0a3 post with auth problems fixed 2004-06-15 11:04:21 +00:00
Daniel Stenberg
0a83fa90bb skip the pid from the logging 2004-06-15 10:28:56 +00:00
Daniel Stenberg
daeb143177 test 176, use --ntlm and POST when the server doesn't require any auth 2004-06-15 09:20:04 +00:00
Daniel Stenberg
9f752120c0 added test case 175, use HTTP POST and DIGEST set but the server requires no
auth
2004-06-15 08:50:15 +00:00
Daniel Stenberg
80a1e972fc Fix the auth code to enable us to i.e set DIGEST and then find out that the
server doesn't require any auth at all and then we just continue nicely. We
now have an extra bit in the connection struct named 'authprobe' that is TRUE
when doing pure "HTTP authentication probing".
2004-06-15 08:45:22 +00:00
Daniel Stenberg
5e65d48ffa we actually build and run fine with libidn 0.4.1 too, so let's not require
anything newer than that
2004-06-14 21:40:11 +00:00
Daniel Stenberg
752ef08141 lots of multi interface description but also some general updates and additions 2004-06-14 14:44:28 +00:00
Daniel Stenberg
070e0e8b0a prevent compiler warnings on non-win32 platforms 2004-06-14 10:45:30 +00:00
Daniel Stenberg
2ed0728cef added test 174, HTTP POST --anyauth to server without auth requirements.
An attempt to repeat a reported auth problem. Works for me!
2004-06-14 09:16:39 +00:00
Daniel Stenberg
a79b9e9d4a recent action 2004-06-14 08:54:59 +00:00
Daniel Stenberg
24572daccc Allow formposting of files larger than what fits in memory by not reading the
file until it is actually being uploaded.
Make sure we build and still work with HTTP disabled - the SSL code might use
the boundary string for some random seeding.
2004-06-14 08:51:43 +00:00
Daniel Stenberg
1770563fff refuse running the torture tests without a debug build 2004-06-14 08:25:54 +00:00
Daniel Stenberg
4cd96483f6 moved default: in a switch case to prevent compiler warning that 'request'
might be used uninitialized
2004-06-13 09:08:38 +00:00
Daniel Stenberg
8f1783b8a7 provide curl_formfree() even when http is disabled, it does nothing then 2004-06-13 08:59:37 +00:00
Daniel Stenberg
be72eaa327 use Curl_strcasestr() when checking wildcard cert names 2004-06-13 08:33:26 +00:00
Daniel Stenberg
61bded1d82 added Curl_strcasestr() for case insensitive strstr() searching 2004-06-13 08:32:57 +00:00
Gunter Knauf
4b3937373a removed unused include path. 2004-06-11 17:27:03 +00:00
Gunter Knauf
08bf0907d4 fixed xdc generation, added lib target, load curl.nlm into ring3 by default. 2004-06-11 15:33:07 +00:00
Daniel Stenberg
eb044f8787 Tim Sneddon made it build fine on VMS again. 2004-06-11 12:29:30 +00:00
Gunter Knauf
8d0c77403c some more makefile changes. 2004-06-11 02:29:16 +00:00
Gunter Knauf
601062455c respect CVS builds in version string. 2004-06-11 01:36:27 +00:00
Gunter Knauf
5be788ba36 some more makefile changes. 2004-06-11 01:04:06 +00:00
Gunter Knauf
281559b31b cosmetic correction. 2004-06-10 22:24:37 +00:00
Gunter Knauf
ef1aa4e5e9 converted to UNIX format. 2004-06-10 21:20:15 +00:00
Gunter Knauf
7b7ac04895 added timeval.c to the sources for curlx_ functions. 2004-06-10 20:46:24 +00:00
Gunter Knauf
60f5b2b275 minor output fix. 2004-06-10 20:43:46 +00:00
Gunter Knauf
c0f9d7fdb7 ups! no copy command defined. 2004-06-10 20:29:19 +00:00
Gunter Knauf
fc4d6f73a6 added generation of missing files. 2004-06-10 20:25:02 +00:00
Gunter Knauf
295169f9d9 added generation of missing files. 2004-06-10 20:12:49 +00:00
Gunter Knauf
1a3797a699 make include path overridable. 2004-06-10 17:11:39 +00:00
Daniel Stenberg
977e106924 Gisle Vanem's init patch for Windows 2004-06-10 13:11:32 +00:00
Daniel Stenberg
8d76d4016d removed trailing whitespace 2004-06-10 11:56:02 +00:00
Daniel Stenberg
9f92657f76 Gisle corrected two comments 2004-06-10 11:55:37 +00:00
Daniel Stenberg
9f341f9ce5 Gisle Vanem's improved verbose output and timeout handling when connecting to
a host name that resolves to multiple IP addresses.
2004-06-10 11:06:21 +00:00
Daniel Stenberg
2098871509 build again with disabled http 2004-06-10 07:46:24 +00:00
Daniel Stenberg
3d00c86f4c Steven Bazyl and Seshubabu Pasam pointed out a bug on win32 when freeing the
path after a transfer.
2004-06-10 07:17:28 +00:00
Daniel Stenberg
90037b85d1 Alexander Krasnostavsky's fix to make libcurl build fine with configure
--disable-http, which thus builds a libcurl without HTTP support.
2004-06-09 08:23:55 +00:00
Daniel Stenberg
6ec145d4b4 when built with HTTP disabled, provide a curl_formadd() function anyway to
keep the API complete at all times
2004-06-09 08:22:02 +00:00
Daniel Stenberg
40a58c392f Added CURL_FORMADD_DISABLED when libcurl is built with HTTP disabled 2004-06-09 08:21:11 +00:00
Daniel Stenberg
9733cd59bb removed reference to the removed curl_formparse 2004-06-09 08:18:17 +00:00
Daniel Stenberg
b3caf7bfa8 Setting CURLOPT_RANGE to NULL disables it.
Setting CURLOPT_RESUME_FROM to 0 prevents a resumed transfer.
2004-06-09 08:05:23 +00:00
Daniel Stenberg
23fbb89805 recent changes 2004-06-09 07:01:48 +00:00
Daniel Stenberg
bd1adaf7ea when producing curllib.dsp, include libcurl.def as a source file.
An Alexander Krasnostavsky fix.
2004-06-09 06:54:12 +00:00
Gunter Knauf
0c9e23fc0c added the new source files. 2004-06-09 01:27:48 +00:00
Gunter Knauf
f091ce64ac corrected copyright. 2004-06-09 01:15:03 +00:00
Daniel Stenberg
55a69ebea6 Gisle's patch that'll allow curl to continue with the following URLs even
if one transfer fails.
2004-06-08 21:56:30 +00:00
Daniel Stenberg
d6b3850562 fix 2004-06-08 21:26:03 +00:00
Daniel Stenberg
80197cf493 James Bursa fixed a RISC OS init issue, removed trailing whitespace 2004-06-08 21:25:11 +00:00
Daniel Stenberg
8ee564c216 Marty Kuhrt's VMS fixes 2004-06-08 21:21:53 +00:00
Gunter Knauf
5bfeb60a83 corrected defines. 2004-06-08 15:05:45 +00:00
Daniel Stenberg
1ab4a2f870 delete trailing whitespace 2004-06-08 15:05:20 +00:00
Gunter Knauf
2a627059ac convert to UNIX format. 2004-06-08 14:57:37 +00:00
Gunter Knauf
3f739acf24 converted to UNIX format. 2004-06-08 14:52:32 +00:00
Daniel Stenberg
d3454ceb94 Kjetil Jacobsen pointed out that the CURLOPT_FILETIME option was wrongly
marked as accepting an objectpoint argument while it actually assumes a long.
The comment was also grossly misleading. The man page was and is correct
though.
2004-06-08 14:13:50 +00:00
Daniel Stenberg
59695c05b1 time schedule for this year 2004-06-08 12:23:48 +00:00
Daniel Stenberg
f0969c9692 prevent compiler warning with picky compilers 2004-06-07 10:28:14 +00:00
Daniel Stenberg
18dd8154e2 Reverted the previous change and redid it differently as it seemed to not
work. This is supposed to detect cross-compiling and alert the user, and not
do the POSIX-check for strerror_r() if it already detected a glibc-compatible
strerror_r().
2004-06-07 08:30:36 +00:00
Daniel Stenberg
4c58797607 When sending info about which host that sends what, include proper direction
to/from, based on a suggestion from Alexander Krasnostavsky
2004-06-07 07:01:29 +00:00
Daniel Stenberg
d620f1e529 configure fix 2004-06-04 20:57:59 +00:00
Daniel Stenberg
e0b436f8e1 1 - do better when cross-compiling when checking for strerror_r() - alert
the user.
2 - don't check for POSIX-style if glibc-style is found first
2004-06-04 19:01:58 +00:00
Daniel Stenberg
e99d1e97de test 173 added: HTTP RFC1867-formpost a file from stdin with "faked" filename 2004-06-04 12:24:47 +00:00
Daniel Stenberg
1fb74b4fa2 fixed spell, removed reference to a 'tools' subdir in the curl dir, as we
don't have one
2004-06-04 07:21:12 +00:00
Daniel Stenberg
473f6ea9f0 Gnter Knauf's netware fix 2004-06-04 07:04:32 +00:00
Daniel Stenberg
0b04c52119 Gnter Knauf's netware build fixes 2004-06-04 07:02:30 +00:00
Daniel Stenberg
8383945acc 3rd party transfers are in CVS now 2004-06-04 06:48:58 +00:00
Daniel Stenberg
fce9d51122 updated a comment 2004-06-03 14:42:08 +00:00
Daniel Stenberg
7c3ee84295 updates 2004-06-03 14:41:44 +00:00
Daniel Stenberg
a8db25f48b the test targets won't invoke the test suite if curl is built cross-compiled.
Pointed out by Chris Gaukroger.
2004-06-03 14:38:07 +00:00
Daniel Stenberg
20705ca311 set an automake conditional for if this is a cross-compile or not 2004-06-03 14:37:14 +00:00
Daniel Stenberg
af33c6b549 deleted trailing whitespace 2004-06-03 13:03:57 +00:00
Daniel Stenberg
2b8775dff7 7.12.0 introduced IDN support 2004-06-03 11:43:21 +00:00
Daniel Stenberg
ea81dd9e2e Alexander Krasnostavsky's FTP third party transfer (proxy) support 2004-06-03 11:41:05 +00:00
Daniel Stenberg
7dcb102733 Mention the python-isque mailing list, don't mention the commit mailing lists
as they are probably very rarely intresting to the "common people" anyway.
2004-06-03 11:30:30 +00:00
Daniel Stenberg
aa0e32060e CURLE_FAILED_INIT is returend when an unknown option is set 2004-06-03 11:19:35 +00:00
Daniel Stenberg
2e8f37aca5 Added example of how to use the upcoming support for FTP 3rd party transfers 2004-06-03 11:15:27 +00:00
Daniel Stenberg
195d769c4b corrected to use the proxy user name for proxy auth, as was just bugfixed! 2004-06-03 10:42:53 +00:00
Daniel Stenberg
70f08b5baa Vincent Bronner made the code use the correct user name + password when
doing proxy authentication.
2004-06-03 10:42:20 +00:00
Daniel Stenberg
9e987ac6a2 getinfo.c is a new tiny example that uses curl_easy_getinfo() to get the
content-type after a transfer.
2004-06-03 09:20:48 +00:00
Daniel Stenberg
de03f172ad very minor format edit 2004-06-02 14:39:34 +00:00
Daniel Stenberg
0078944486 CURLOPT_PUT is deprecated 2004-06-02 14:06:49 +00:00
Daniel Stenberg
d3f796ac59 Made CURLOPT_UPLOAD and CURLOPT_PUT mean the same thing internally (the
previous difference was not clear nor documented properly). They can now both
be used interchangeably, but we prefer UPLOAD to PUT since it is a more
generic term.
2004-06-02 13:57:38 +00:00
Daniel Stenberg
3d38080d54 *seven* new options to support 3rd party FTP transfers 2004-06-02 13:51:36 +00:00
Daniel Stenberg
fe07962f9c 7.12.1-CVS in progress 2004-06-02 11:39:06 +00:00
Daniel Stenberg
938a72b2db Gisle's adjustments to allow building with lcc-win32 2004-06-02 11:36:07 +00:00
Daniel Stenberg
a8827b1ed6 Gisle made ftp_mkd static 2004-06-02 11:34:53 +00:00
Daniel Stenberg
ff40cd71ac and we start all over again 2004-06-02 11:31:36 +00:00
Daniel Stenberg
39626d8cfd 7.12.0 2004-06-02 09:03:02 +00:00
Daniel Stenberg
67ad29e716 more changes 2004-06-02 08:57:43 +00:00
Daniel Stenberg
8bbf9b13af Renaud Duhaut corrected the unescaping procedure 2004-06-01 08:33:15 +00:00
Daniel Stenberg
cb21851c74 David Byron made this use the mm lib by default, as was previously done. This
might be done differently in the future.
2004-06-01 08:09:43 +00:00
Daniel Stenberg
8d611bec6e --create-dirs clarification 2004-06-01 07:03:46 +00:00
Daniel Stenberg
1de1dc7314 minor edits 2004-05-28 11:16:09 +00:00
Daniel Stenberg
aca79af7de check for failing strdup()s 2004-05-28 09:56:59 +00:00
Daniel Stenberg
da6eea9b38 delete trailing whitespace 2004-05-28 09:52:15 +00:00
Daniel Stenberg
dcf7310b2d fixed curl_easy_duphandle() to properly clean up all memory if any memory
function fails and it returns NULL
2004-05-27 07:48:09 +00:00
Daniel Stenberg
c2e8ba0fba free() allocated memory when the ares search can't be made 2004-05-27 07:10:36 +00:00
Daniel Stenberg
a5360255ba clear the domains and sortlist when the 'channel' is first created so that
we can compare if non-NULL elsewhere
2004-05-27 07:10:02 +00:00
Daniel Stenberg
5690a2b493 better checks to avoid free(NULL) 2004-05-27 07:09:21 +00:00
Daniel Stenberg
ff0429a802 James Bursa's fix to prevent free(NULL) to occur 2004-05-27 06:42:48 +00:00
Daniel Stenberg
46cdc83b81 the CONNECT issue seems fixed too now 2004-05-26 14:32:15 +00:00
Daniel Stenberg
76dfef7117 Mohun Biswas added release-zlib and debug-zlib targets. 2004-05-26 11:49:28 +00:00
Daniel Stenberg
de2aeb9fc2 MSVC makefiles updated and an auth problem when using CONNECT 2004-05-26 10:35:01 +00:00
Daniel Stenberg
17a5b44205 curllib.dsp works in the latest snapshots 2004-05-26 10:32:48 +00:00
Daniel Stenberg
f99e347878 bugs, changes, sponsors! 2004-05-26 09:23:11 +00:00
Daniel Stenberg
f5a0c17322 updated with recent stuff 2004-05-26 09:19:46 +00:00
Daniel Stenberg
8442c3942d three new functions in the public API 2004-05-26 09:17:20 +00:00
Daniel Stenberg
15cd35f67f added example that makes an upload to a file:// url 2004-05-26 09:00:03 +00:00
Daniel Stenberg
459801d6e0 strip trailing whitespace 2004-05-26 08:58:25 +00:00
Daniel Stenberg
2c43d64302 Added a new 'bit' in the connect struct named 'tunnel_proxy' that is set
if a connection is tunneled through a proxy. A tunnel is done with CONNECT,
either when using HTTPS or FTPS, or if explicitly enabled by the app.
2004-05-26 08:54:36 +00:00
Daniel Stenberg
fd802db39f initial support for "uploading" to file:// URLs 2004-05-25 21:47:29 +00:00
Daniel Stenberg
765754d39d --proxy-basic added for completeness 2004-05-25 14:44:25 +00:00
Daniel Stenberg
f7f6b288eb removed some stuff that actually is done now, added the --optionseparator
idea (not really new, but its better to have it mentioned in here)
2004-05-25 14:39:53 +00:00
Daniel Stenberg
11ee9540bf Bug report #948950, excessive amount of file descriptors might crash libcurl 2004-05-25 14:28:44 +00:00
Daniel Stenberg
f6319bd706 Massimiliano Ziccardi's updates for the VC6 makefiles 2004-05-25 13:52:12 +00:00
Daniel Stenberg
0912015a5c preprocessor magic around the libidn idn_free() stuff to remain workable
both with older libidn versions without idn_free() and with libidn versions
that gets installed without idn-free.h
2004-05-25 12:00:15 +00:00
Daniel Stenberg
4e7575fc7a checl for the idn_free stuff to remain functionall even with older libidn
versions
2004-05-25 11:59:32 +00:00
Daniel Stenberg
6531a6116d remove trailing whitespace 2004-05-25 11:13:49 +00:00
Daniel Stenberg
9a33561e80 make one call instead of two 2004-05-25 07:51:06 +00:00
Daniel Stenberg
88229a0f2a new example proving that the debug callback works even when the multi
interface is used
2004-05-24 15:16:53 +00:00
Daniel Stenberg
120394cc45 remove trailing whitespace 2004-05-24 15:16:29 +00:00
Daniel Stenberg
1adfe0fe18 multi interface, debug callback 2004-05-24 15:12:37 +00:00
Daniel Stenberg
d57c178a62 delete trailing whitespace 2004-05-24 13:31:28 +00:00
Daniel Stenberg
6faa83bc6a if no errorbuffer string was provided when a return code was returned, use
the curl_easy_strerror() function to provide one
2004-05-24 13:27:48 +00:00
Daniel Stenberg
9fb4e019fa IDN is a recognized feature 2004-05-24 13:23:54 +00:00
Daniel Stenberg
74551597b1 fixed a reference 2004-05-24 13:21:31 +00:00
Daniel Stenberg
37c269d0ba meta-m runs delete-trailing-whitespace in curl-mode 2004-05-24 12:12:09 +00:00
Daniel Stenberg
5d8b526b80 delete trailing whitespace 2004-05-24 11:57:34 +00:00
Daniel Stenberg
83dcc3e061 delete trailing whitespace 2004-05-24 10:46:22 +00:00
Daniel Stenberg
4ed58463f7 better name 2004-05-24 09:01:45 +00:00
Daniel Stenberg
85b2056dc7 only idn_free() if built with libidn 2004-05-24 08:19:37 +00:00
Daniel Stenberg
94ca911dc1 delete trailing whitespace 2004-05-24 07:53:25 +00:00
Daniel Stenberg
24420c2191 Simon Josefsson added a idn_free() function in libidn 0.4.5 as a reaction to
Gisle's previous mail. We now use this function, and thus we require libidn
 0.4.5 or later. No earler version will do.
2004-05-24 07:40:00 +00:00
Daniel Stenberg
59f904d8de Robert D. Young reported that CURLOPT_COOKIEFILE and CURLOPT_COOKIE could
not be used both in one request. Fixed it and added test case 172 to verify.
2004-05-24 07:13:48 +00:00
Daniel Stenberg
755f98e768 While talking to host a.b.c, libcurl did wrongly not accept cookies that were
set to the domain .a.b.c (that is with a dot prefix). This is now fixed and
test case 171 verifies it.
2004-05-21 20:40:15 +00:00
Daniel Stenberg
aadc797225 quickfix to avoid division by zero, possibly we should go over all of these
once and for all
2004-05-21 12:23:53 +00:00
Daniel Stenberg
5c882bdfa3 fixed transfer speed math 2004-05-20 20:48:16 +00:00
Daniel Stenberg
60f9450594 calculate upload and download speed using doubles to keep precision.
deleted trailing whitespace
2004-05-20 20:35:42 +00:00
Daniel Stenberg
ff52ba7f7b NTLM requires SSL 2004-05-19 11:25:21 +00:00
Daniel Stenberg
0fbcea45d6 cert verify 2004-05-19 11:10:36 +00:00
Daniel Stenberg
ca6d430561 added test 170 2004-05-19 10:32:25 +00:00
Daniel Stenberg
91601b3bf4 David Byron's test case with -F that used to crash 2004-05-19 10:31:58 +00:00
Daniel Stenberg
cdd70596df killed trailing whitespace 2004-05-19 09:25:00 +00:00
Daniel Stenberg
7e186f9a63 just code formatting and killed whitespace 2004-05-19 09:24:18 +00:00
Daniel Stenberg
a94e117ede language! 2004-05-19 09:09:31 +00:00
Daniel Stenberg
662cb30372 Set CURLOPT_USERAGENT too 2004-05-19 09:08:19 +00:00
Daniel Stenberg
bd3aba5d6a The kill trailing whitespace needs to be set better as this way it takes
effect globally which isn't nice. Commented it out for now. Display trailing
whitespace still, to remind me.
2004-05-19 08:16:08 +00:00
Daniel Stenberg
29ed6d24bf simplified all die messages 2004-05-18 10:55:40 +00:00
Daniel Stenberg
e2c5c20896 simplified the automake failed message too 2004-05-18 09:25:46 +00:00
Daniel Stenberg
7c4b6cb0d9 make this script tell that this is the obsolete version, to make it possible
to detect
2004-05-18 09:22:41 +00:00
Daniel Stenberg
aced2904ff simplified the die-line when aclocal fails, the previous one confused
the netbsd shell
2004-05-18 09:02:38 +00:00
Daniel Stenberg
17eb1fca7c + when storing the address in the cache fails, cleanup the resolved address
properly
+ delete trailing whitespace
2004-05-18 07:35:37 +00:00
Daniel Stenberg
2511d1193a * seed_enough() was converted to a macro to avoid the IRIX compiler warning
about that passed-in argument not being used.
* killed trailing whitespace
2004-05-18 07:25:13 +00:00
Daniel Stenberg
e9056f5f95 if shrinking the buffer fails, use the older larger one 2004-05-17 22:07:43 +00:00
Daniel Stenberg
a9893ca79a Peter Sylvester's patch that addresses two flaws in the peer certificate name
verification:

- when multiple common names are used (as in the curl tests), the last name
needs to be selected.

- allow comparing with encoded values, at least with BMP and ISO latin1
encoded T61strings.
2004-05-17 22:01:16 +00:00
Daniel Stenberg
f39f7c28f0 'make test-torture' in the root now runs a full torture test 2004-05-17 10:54:00 +00:00
Daniel Stenberg
a807065ccc removed debug output and trailing whitespace 2004-05-17 10:53:34 +00:00
Daniel Stenberg
67532e916c grrr, fix the check again if no ftp server at all is running 2004-05-17 10:51:51 +00:00
Daniel Stenberg
3920b4dae8 torture testing and a moved CVS repo 2004-05-17 10:39:44 +00:00
Daniel Stenberg
d70a335dce new Curl_done() proto 2004-05-17 08:07:07 +00:00
Daniel Stenberg
8001921112 I made Curl_done() take a pointer-pointer in the first argument instead, and
if the connection is killed it blanks the pointer it points to, to make it
easier to detect usage problems whereever Curl_done() is used.
2004-05-17 08:05:46 +00:00
Daniel Stenberg
d7cb09bd18 better bailing out on memory failure 2004-05-17 08:04:42 +00:00
Daniel Stenberg
e11710714c When waiting for the second connect, we now use alarm to timeout the waiting.
This is necessary in case the client never connects or somehow fails to do
it timely. The timeout used now is only 2 seconds, which might cause problems
on really slow hosts but longer times are painful when doing torture testing
on FTP test cases.

I'm not sure how this 'alarm' functionality works on Windows or other systems
that don't actually have the alarm() function.
2004-05-17 08:02:23 +00:00
Daniel Stenberg
5b0bfc298f improved the check for our own ftp server 2004-05-17 07:59:10 +00:00
Daniel Stenberg
0383f7f19d modified to not leak memory if a libcurl function returns failure, for better
memory leak detection
2004-05-17 07:45:20 +00:00
Daniel Stenberg
23a43c6e0f Seshubabu Pasam's format fixes and added notes about DER not working for
some (SSL-)options.
2004-05-17 07:12:32 +00:00
Daniel Stenberg
eb946690d2 make it not leak memory when it returns prematurely 2004-05-17 06:55:04 +00:00
Daniel Stenberg
c090fdbdf1 automatically delete trailing white space on save in curl-mode 2004-05-17 06:54:20 +00:00
Daniel Stenberg
de279099e5 bail out nicely if strdup() returns NULL, removed trailing whitespace 2004-05-17 06:53:41 +00:00
Daniel Stenberg
6bd8db3c99 deleted trailing whitespace 2004-05-17 06:50:32 +00:00
Daniel Stenberg
6176f14141 fixed a warning on IRIX, deleted trailing whitespace 2004-05-17 06:50:08 +00:00
Daniel Stenberg
512e54ff85 added string for the new share error code 2004-05-14 11:46:35 +00:00
Daniel Stenberg
a5aa569fe3 Added CURLSHE_NOMEM 2004-05-14 09:30:31 +00:00
Daniel Stenberg
e2e593a036 clean up properly on failure to enable easier libcurl leak detection 2004-05-14 09:22:12 +00:00
Daniel Stenberg
9ce0a7b49d new cvs instructions 2004-05-14 09:21:42 +00:00
Daniel Stenberg
4ab0d74250 enable memory debugging the same way the curl command line tool already does 2004-05-14 08:40:33 +00:00
Daniel Stenberg
b5f85ba77d memory cleanup and check fix 2004-05-13 15:19:02 +00:00
Daniel Stenberg
b6ee33c6e1 check that memory allocation functions truly return good data or bail out 2004-05-13 15:18:29 +00:00
Daniel Stenberg
1c69b15c7c return on memory alloc fail 2004-05-13 15:17:49 +00:00
Daniel Stenberg
54cd2bee58 better bailing out in case of no memory 2004-05-13 15:17:07 +00:00
Daniel Stenberg
5bf02b16a0 curl_free() doesn't free(NULL) but just returns 2004-05-13 15:16:36 +00:00
Daniel Stenberg
594cb8507b deal with input arguments as NULL 2004-05-13 15:16:10 +00:00
Daniel Stenberg
78aba6e4cd return CURLDIGEST_NOMEM when a memory function fails to deliver 2004-05-13 14:14:03 +00:00
Daniel Stenberg
ccdcdb2a46 mark a value as alloced when strdup()ed to prevent memory leaks 2004-05-13 14:13:12 +00:00
Daniel Stenberg
b121e41ec3 bail out when no memory occurs 2004-05-13 14:12:49 +00:00
Daniel Stenberg
05d8e56ffd Gisle Vamem reintroduced the verifyconnect() call on windows as well, and
we now use it to provide more info back on connect failures.
2004-05-13 10:40:17 +00:00
Daniel Stenberg
4345c7a712 Gisle: minor fix 2004-05-13 10:38:57 +00:00
Daniel Stenberg
12d5e33dc9 no more Curl_ldap_done 2004-05-13 10:38:37 +00:00
Daniel Stenberg
6d70a82757 Added two two missing header files I missed when I removed the noinst_HEADERS 2004-05-13 09:01:15 +00:00
Daniel Stenberg
47d52d4eca added https.c 2004-05-13 08:23:09 +00:00
Daniel Stenberg
4973b0f88a basic https fetching script 2004-05-13 08:22:40 +00:00
Daniel Stenberg
d1542bf549 made 'runtests.pl -t' run over all the tests just like other command lines
Also made -t imply -n to disable valgrind, it runs sloooow otherwise.

This now manages to run all tests OK up to test case 100 (the first FTP one)
for me.
2004-05-13 07:52:33 +00:00
Daniel Stenberg
2b7727aad1 James Bursa's patch to avoid free(NULL) (mainly because the libcurl memdebug
system thinks free(NULL) is badness)
2004-05-13 06:53:29 +00:00
Daniel Stenberg
fd775454ca Check that memory functions return non-NULL or return error. 2004-05-12 13:24:40 +00:00
Daniel Stenberg
8e09a389c4 make sure the returned pointer is NULL when encoding fails 2004-05-12 13:23:17 +00:00
Daniel Stenberg
aa3ae01878 clean up and return better on out of memory 2004-05-12 13:05:01 +00:00
Daniel Stenberg
c123676825 return NULL on out of memory 2004-05-12 13:04:30 +00:00
Daniel Stenberg
d60c22572b Curl_done() and the protocol-specific conn->curl_done() functions now all
take a CURLcode as a second argument, that is non-zero when Curl_done()
is called after an error was returned from Curl_do() (or similar).
2004-05-12 12:06:39 +00:00
Daniel Stenberg
1d7ce36791 return faster when we "hit a wall" while printfing 2004-05-12 12:05:13 +00:00
Daniel Stenberg
34e8baab9a general cleanup to bail out nice and clean when a memory function fails
to deliver
2004-05-12 12:04:38 +00:00
Daniel Stenberg
a219d774fe even if Curl_do() fails, we must call Curl_done() to do proper cleaning up 2004-05-12 09:02:54 +00:00
Daniel Stenberg
005042e973 improved cleaning up in case of memory allocation failures 2004-05-12 09:02:23 +00:00
Daniel Stenberg
d301d69fbf bail out if we can't allocate the new range string, and make use of aprintf()
instead of using snprintf() + strdup().
2004-05-12 08:26:56 +00:00
Daniel Stenberg
34af02caca Disable memdebug for the allocs done by the app, unless CURLTOOLDEBUG is
defined (which it never is atm).

Now, we can focus on making 'runtests -t [num]' work on all test cases and
we should never leak nor crash.
2004-05-12 08:22:04 +00:00
Daniel Stenberg
91025d1dd6 new man page 2004-05-12 08:10:25 +00:00
Daniel Stenberg
c9bab31a7f use size_t better for buffer and alloc lengths 2004-05-12 08:00:21 +00:00
Daniel Stenberg
2f60e91a9b removed another jhrg-reference in a comment 2004-05-12 07:56:01 +00:00
Daniel Stenberg
018affe6d0 Edited comments only. 2004-05-12 07:55:05 +00:00
Daniel Stenberg
aeb27ccfdb The Curl_unencode_XXX_write() function take a ssize_t as third argument, so
we typecast on invoke.
2004-05-12 07:54:44 +00:00
Daniel Stenberg
939866faab Left-over from before the return-code fix. This is probably the code that
causes xlc and gcc act differently on AIX.
2004-05-12 06:27:40 +00:00
Daniel Stenberg
98f968f2ee fixed Curl_open() to not leak anything if one malloc() fails, fix by
James Bursa only modified by me.
2004-05-11 21:17:03 +00:00
Daniel Stenberg
864f1a3366 - Nico Stappenbelt reported that when processing domain and search lines in
the resolv.conf file, the first entry encountered is processed and used as
  the search list. According to the manual pages for both Linux, Solaris and
  Tru64, the last entry of either a domain or a search field is used.
2004-05-11 21:12:10 +00:00
Daniel Stenberg
f42b10242f revert the accidentally added use of strace 2004-05-11 18:57:03 +00:00
Daniel Stenberg
853134017d minor leak in case of error, thanks to "./runtests.pl -n -t 25" 2004-05-11 14:53:24 +00:00
Daniel Stenberg
d3999e06d1 clear up memory on failure a little better 2004-05-11 14:48:53 +00:00
Daniel Stenberg
0b0b37cffe make the libidn pointer in the version struct a const 2004-05-11 14:22:51 +00:00
Daniel Stenberg
a13f5888d5 they're at least 36 functions now 2004-05-11 14:21:34 +00:00
Daniel Stenberg
c8807438ce updated to reflect reality! 2004-05-11 14:15:49 +00:00
Daniel Stenberg
3f106afd00 cut out the changelog, it is far from accurate anyway 2004-05-11 12:22:50 +00:00
Daniel Stenberg
d925057e11 added curl_global_init_mem 2004-05-11 11:48:09 +00:00
Daniel Stenberg
bbafb2eb27 curl_global_init_mem() allows the memory functions to be replaced.
memory.h is included everywhere for this.
2004-05-11 11:30:23 +00:00
Daniel Stenberg
434bc13812 *** empty log message *** 2004-05-11 11:29:31 +00:00
Daniel Stenberg
5c592f7dd9 Make this source code use our internal *printf().
Also some minor edits.
2004-05-11 11:29:02 +00:00
Daniel Stenberg
9bf1ba2f7e Added recent events to the log 2004-05-11 08:10:32 +00:00
Daniel Stenberg
724e4a3585 more changes, more news, more people 2004-05-11 08:10:15 +00:00
Daniel Stenberg
f69711fc78 another official download mirror 2004-05-11 08:09:56 +00:00
Daniel Stenberg
04e2520dbb new attempt at an improved DSP-file generation 2004-05-11 07:54:55 +00:00
Daniel Stenberg
7a35fb5403 slightly better dealing of bad mem situations 2004-05-10 14:45:11 +00:00
Daniel Stenberg
63f97b38eb Moved the fetching of the list of matching cookies to make it easier to free
that list in case something goes wrong in the function and we must bail out.
Courtesy of the torture testing.
2004-05-10 14:22:20 +00:00
Daniel Stenberg
b8541929c8 curl_slist_append() fixed to clear up properly if a memory function fails 2004-05-10 14:21:19 +00:00
Daniel Stenberg
329f17ac7c better detect if/when curl_slist_append() returns failure, and bail out
accordingly
2004-05-10 14:04:35 +00:00
Daniel Stenberg
5dcab07c54 if a malloc fails, clear up the memory and return failure 2004-05-10 14:04:06 +00:00
Daniel Stenberg
1f798affb9 typo 2004-05-10 10:52:29 +00:00
Daniel Stenberg
a2ecdf4249 the aprintf() versions now return NULL if _any_ alloc along the way failed,
previously they could return a piece of the string, making it impossible
for the caller to detect errors.
2004-05-10 10:50:43 +00:00
Daniel Stenberg
71fdc063bd better detection for when add_buffer() returns failure, and return when that
happens
2004-05-10 10:49:35 +00:00
Daniel Stenberg
887d78a9ad Curl_hash_add() was modified to clear up better in case of internal failure.
When failing, it should not tamper at all with the data it was supposed to
add to the cache.
2004-05-10 09:17:50 +00:00
Daniel Stenberg
00557a5475 checkpasswd() prevents segfault by checking that input argument is non-NULL 2004-05-10 09:16:21 +00:00
Daniel Stenberg
e18d27b78a James Bursa's adjustments to make the -t option work for any test case.
The -t is the "torture" test that first runs the test and counts the number
of allocations performed during it, then it runs the test repeatedly over and
over again and makes alloc number N fail to verify that we detect and return
properly from error cases everywhere.
2004-05-10 09:01:45 +00:00
Daniel Stenberg
228fea4628 make Curl_llist_insert_next() fail properly if malloc() fails 2004-05-10 08:57:37 +00:00
Daniel Stenberg
e64dacb40e better checking that strdup() works 2004-05-10 08:57:18 +00:00
Daniel Stenberg
fff01f24bf Luca fixed the nc= in the digest line since it apparantly should not have
quotes...
2004-05-10 08:09:15 +00:00
Daniel Stenberg
e55dee3807 James Bursa added better error checking for failer memory calls when
building formposts
2004-05-10 07:11:52 +00:00
Daniel Stenberg
8c2ce33c0b build curllib.dsp from these 2004-05-10 07:03:46 +00:00
Daniel Stenberg
135394f511 don't use -i when checking for our own server 2004-05-10 06:29:52 +00:00
Daniel Stenberg
fe065dc851 James' and Gisle' reports/fixes 2004-05-07 20:08:38 +00:00
Daniel Stenberg
445c7791a7 James Bursa changed two error message to use the display-name instead of the
internally-used name.
2004-05-07 18:56:33 +00:00
Daniel Stenberg
686ba84128 James Bursa's fix to make this deal with malloc(0) as OK to free() 2004-05-07 18:54:09 +00:00
Daniel Stenberg
3394c01826 We don't support any long protocol names so we can use a smaller buffer.
Also, make sure we have room for the trailing zero, only scan to size-1.

Gisle Vanem reported.
2004-05-07 18:46:28 +00:00
Daniel Stenberg
d67ea8c7ad count the formdata size using a 64bit size if avaialble 2004-05-07 09:50:49 +00:00
Daniel Stenberg
535046430a Made the lib/curllib.dsp file get generated automaticly 2004-05-07 09:45:33 +00:00
Daniel Stenberg
9aebdff219 don't use a magic define name 2004-05-07 09:42:23 +00:00
Daniel Stenberg
90da930131 This file is now generated at dist-time. 2004-05-07 09:41:28 +00:00
Daniel Stenberg
fbdc1b1e3d Generate curllib.dsp on dist.time from msvcproj.head msvcproj.foot and the
known source files. Not actually verified to work yet.
2004-05-07 09:41:05 +00:00
Daniel Stenberg
e942df755b get the display host name properly 2004-05-07 06:18:47 +00:00
Daniel Stenberg
91c8be3628 removed two odd comments 2004-05-06 15:17:10 +00:00
Daniel Stenberg
d56c03840b little fixes 2004-05-06 15:11:16 +00:00
Daniel Stenberg
d3d5cdf305 removed the warning if libidn isn't found 2004-05-06 15:05:23 +00:00
Daniel Stenberg
af43ce73e5 very minor output change 2004-05-06 15:04:04 +00:00
Daniel Stenberg
84b52e92f4 simplied the creation of new urls 2004-05-06 13:29:04 +00:00
Daniel Stenberg
0aa7d11cc9 %ld for long 2004-05-06 13:21:32 +00:00
Daniel Stenberg
933f7cecae int/long fix 2004-05-06 12:44:08 +00:00
Daniel Stenberg
8e73e55336 Michael Benedict brought a fix that fills in the errorbuffer properly
when ares fails to resolve a name. This was fixed before but somehow has
fallen out again!
2004-05-06 11:10:51 +00:00
Daniel Stenberg
55c015c136 typo AGAIN 2004-05-06 11:02:50 +00:00
Daniel Stenberg
bde6c6685e When using the icc compiler, we also ignore remark #1418 "external definition
with no prior declaration" since this is a habit we have in the code.
2004-05-06 10:58:57 +00:00
Daniel Stenberg
58387b91f9 printf %s with plain 'char *', not unsigned ones to silence icc's picky
warnings
2004-05-06 10:57:07 +00:00
Daniel Stenberg
6f74820cfc if no strerror_r prototype is found, we provide our own to prevent picky
compilers to warn
2004-05-06 10:49:40 +00:00
Daniel Stenberg
af72f198ba removed the unused 'len' variable, made use of the ptr pointer even if no
extra lib is used to prevent compiler warnings ("variable set but not used")
on that case
2004-05-06 07:32:30 +00:00
Daniel Stenberg
3fc831f9eb typecast the unsigned long to plain long to prevent compiler warnings 2004-05-06 07:24:47 +00:00
Daniel Stenberg
9f660862ec unused variable removed 2004-05-06 07:22:32 +00:00
Daniel Stenberg
1354671c90 use %ld to printf now.tv_sec 2004-05-06 07:21:19 +00:00
Daniel Stenberg
1175a226e3 curlx.h is a header to add to the release archive(s) 2004-05-06 07:19:58 +00:00
Daniel Stenberg
358b72bb12 fixed typo 2004-05-05 20:12:59 +00:00
Daniel Stenberg
6c408c885a Temporary disable the logic that runs gdb on a core dump, as it can't blindly
assume that the curl file is a proper binary, it is often a script file
produced by libtool.
2004-05-05 14:34:35 +00:00
Daniel Stenberg
9cf04dff6a hm, avoid division by zero more carefully with that new percentage math 2004-05-05 14:22:46 +00:00
Daniel Stenberg
6bdcfecbcf Joe Halpin fixed the warning on the typecast from data pointer to function
pointer!
2004-05-05 14:08:52 +00:00
Daniel Stenberg
3f21fe60fc Gisle fixed the percentage to work, I adjusted it slightly to not as easily
overflow on 32bit filesize-systems
2004-05-05 13:44:44 +00:00
Daniel Stenberg
b2c290e40e Gisle-fix: constified the 'interface' argument. 2004-05-05 13:42:23 +00:00
Daniel Stenberg
bc5b2fa12c Gisle fix: curl_formparse is gone. 2004-05-05 13:42:05 +00:00
Daniel Stenberg
32a9554c92 Gisle fixed: don't reference 'mem' if it's NULL. 2004-05-05 13:41:54 +00:00
Daniel Stenberg
afc1ed60f7 initiate variables properly to default to no auth for server and proxy 2004-05-05 13:00:03 +00:00
Daniel Stenberg
91018f4f24 AC_CHECK_TOOL is prolly better to use when checking for ar 2004-05-05 10:26:51 +00:00
Daniel Stenberg
fb086b57a8 slightly odd fix to prevent -Wunreachable-code to warn 2004-05-05 09:20:08 +00:00
Daniel Stenberg
3fc39a6efb alert the user if 'sed' or 'ar' couldn't be found, as it might very well
render a build impossible
2004-05-05 09:17:53 +00:00
Daniel Stenberg
6062ac7c37 made the progress meter display not overflow even if _very_ large files
are transfered. The maximum size we support now is 8 exabytes, which equals
to 8192 petabytes...
2004-05-05 08:43:23 +00:00
Daniel Stenberg
caf7854a3c if the values allow it, avoid floting point math for the current speed 2004-05-05 07:45:21 +00:00
Daniel Stenberg
6def0892ea additional typecasts in an attempt to avoid compiler warnings when switching
from 64 bit types to 32 bit ones
2004-05-05 07:30:52 +00:00
Daniel Stenberg
1c0744bde6 removed bad free() 2004-05-05 07:20:08 +00:00
Daniel Stenberg
7591e07b7c do the alarm time-left math using unsigned longs since that is what alarm()
returns and uses as input and converting to signed generates warnings and
actually risks loss of accuracy
2004-05-05 07:17:37 +00:00
Daniel Stenberg
35ab93f484 fix_hostname() now (void)s the conn argument to prevent warnings on non-idn
enabled builds
2004-05-05 07:08:31 +00:00
Daniel Stenberg
dcf5e52b62 ERR_error_string() returns an unsigned long so we should use one of those
for the return code
2004-05-05 07:01:33 +00:00
Daniel Stenberg
aae521d086 gcc 3.4 now uses the -Wunreachable-code option, I believe we can make older
ones use this too...
2004-05-05 06:59:27 +00:00
Daniel Stenberg
78e6508e22 check the size of size_t for lib/mprintf.c 2004-05-05 06:57:49 +00:00
Daniel Stenberg
4d9517f0b4 prevent warnings when using the gcc option -Wunreachable-code 2004-05-05 06:57:26 +00:00
Daniel Stenberg
a331aa0221 make the memlimit final NULL return get written to stderr as wella 2004-05-05 06:57:04 +00:00
Daniel Stenberg
679cabb532 mention the LICENSE-MIXING document 2004-05-05 06:12:24 +00:00
Daniel Stenberg
7332350e85 minor update edits 2004-05-05 06:11:57 +00:00
Daniel Stenberg
69f4dda74a added a third URL to the torture testing, this one also hangs at some point
for a reason I don't know
2004-05-05 06:11:13 +00:00
Daniel Stenberg
c19c3bd15a multipart formposts should be more streamy 2004-05-04 14:36:29 +00:00
Daniel Stenberg
76ff92b811 bail out when an add_buffer() function returns failure 2004-05-04 14:27:07 +00:00
Daniel Stenberg
4250637e7d improved the cleaning up of memory when we fail to resolve names due to
out of memory (thanks to 'runtests.pl -t')
2004-05-04 13:40:30 +00:00
Daniel Stenberg
08d1da106e check malloc() return code 2004-05-04 13:39:24 +00:00
Daniel Stenberg
9e31a0536e removed more leftovers from the formparse function 2004-05-04 09:31:04 +00:00
Daniel Stenberg
2960d37d71 removed curl_formparse() from the library 2004-05-04 08:24:13 +00:00
Daniel Stenberg
c63af5fc01 Gisle made item 38, now there's only one low-prio task left... 2004-05-04 07:54:08 +00:00
Daniel Stenberg
fc6eff13b5 General HTTP authentication cleanup and fixes 2004-05-04 07:52:53 +00:00
Daniel Stenberg
e7ee1ccf45 Gisle fixed the problem with ldap_search_s() fails with "filter error": a case
of using 'lud_filter' after freeing 'lud_dn'.
2004-05-03 15:01:34 +00:00
Daniel Stenberg
98bf69f8f1 improved the name of the test 2004-05-03 14:57:58 +00:00
Daniel Stenberg
0363fbc411 Added --proxy-digest, added the standard curl source header to this file. 2004-05-03 14:55:31 +00:00
Daniel Stenberg
e3bc92ae53 fixed the pdf and html for the strerror functions 2004-05-03 14:40:22 +00:00
Daniel Stenberg
27e76021e9 Added support for --proxy-digest 2004-05-03 11:56:18 +00:00
Daniel Stenberg
93dde29979 don't free(NULL) 2004-05-03 09:17:49 +00:00
Daniel Stenberg
d42dcd60cd Gisle Vanem:
Patch for ldap.c under Windows. It works with wldap32.dll as supplied with
Win-98/ME/2000/XP, so no extra .dlls are required.  I've mostly tested it
against Verisign's ldap server. Added code in the case there are to many
responses (rc = LDAP_SIZELIMIT_EXCEEDED) and print only those we got. E.g.

curl
ldap://directory.verisign.net/?cn,display-name,mail,info?subtree?(cn=*Nelson*)

will print the first 10 results.

My only problem with it is that ldap_search_s() fails with "filter error" when
CURLDEBUG is defined ?! Maybe someone can spot the error.
2004-05-03 09:14:12 +00:00
Daniel Stenberg
ade89799f5 mucho 2004-04-30 10:55:57 +00:00
Daniel Stenberg
6e118ce50f Display "exit OK" when the exit code has been verified to be OK, and added
initial basic valgrind-log scan for memory leaks it could detect.
2004-04-30 10:37:40 +00:00
Daniel Stenberg
34be9df773 deprecated functions 2004-04-30 10:34:54 +00:00
Daniel Stenberg
7356a67780 25 and 37 are now done, only two low-prio tasks left for the 7.12 release 2004-04-30 09:17:04 +00:00
Daniel Stenberg
f77949ef3b recent changes 2004-04-30 08:52:11 +00:00
Daniel Stenberg
26b8b3fc53 updated with more and new info 2004-04-30 08:51:19 +00:00
Daniel Stenberg
38cc79a54f these functions are marked to get removed from the public API "soon" 2004-04-30 08:38:08 +00:00
Daniel Stenberg
ec113aefb9 use the new lib/curlx.h header and modified the code to use all to-become-
curlx_-functions with the new prefix to prepare this code for the future
removal of several curl_-functions from the public libcurl API.
2004-04-30 08:23:50 +00:00
Daniel Stenberg
913e1570bd New header file that offers easy access to the curlx_ functions for an app.
curlx_ functions are NOT part of the offical API, but only available as source
code functions from the lib directory in case of need.
2004-04-30 08:22:38 +00:00
Daniel Stenberg
e2aaf22d5d support the new libcurl IDN feature, also a first attempt to display a stack
trace if a test results in a 'core' file and gdb is present
2004-04-30 08:03:07 +00:00
Daniel Stenberg
3304589043 idn is a new feature that can be made required for a test 2004-04-30 08:00:42 +00:00
Daniel Stenberg
0247642bb6 added test 166, formpost with white space in file name 2004-04-30 06:46:34 +00:00
Daniel Stenberg
19f5aa165c make the contents able to be any data, the previous stopped at white space 2004-04-30 06:45:53 +00:00
Daniel Stenberg
1756499b11 oops, a bad strtok() was fixed by Luca 2004-04-30 05:53:42 +00:00
Daniel Stenberg
15f9a93c25 include the full size of the sent response in the log 2004-04-30 05:51:37 +00:00
Daniel Stenberg
e99287734b Gisle fixed the counting of calloc()s 2004-04-29 14:33:19 +00:00
Daniel Stenberg
8349dde0f1 Introducing IDN host name testing. Test case 165 requires an IDN-capable
libcurl.
2004-04-29 13:43:04 +00:00
Daniel Stenberg
59907ebc0e fixed the host/proxy name issue when re-using a connection and made IDN names
work when using proxy by converting the IDN-name to the ACE-encoded version
before the request-URL is passed to the proxy.
2004-04-29 13:41:48 +00:00
Daniel Stenberg
da91d6ac66 remove newline from matching pattern 2004-04-29 13:31:57 +00:00
Daniel Stenberg
7548115a0e ignore cnonce lines too as they are based on the current time and will differ
from time to time!
2004-04-29 13:24:50 +00:00
Daniel Stenberg
8ca37dd1c7 encode the correct name 2004-04-29 11:57:52 +00:00
Daniel Stenberg
31e9e4bb76 curl_easy_duphandle() works again with ares enabled 2004-04-29 10:58:22 +00:00
Daniel Stenberg
84a322ab23 test 512 does some basic curl_easy_duphandle() testing 2004-04-29 10:57:10 +00:00
Daniel Stenberg
707f217b2d new test case for a simple curl_easy_duphandle() test 2004-04-29 10:56:22 +00:00
Daniel Stenberg
e6b45a66ec updated to work with the new Digest code 2004-04-29 10:47:13 +00:00
Daniel Stenberg
b34c40dcf5 Luca Altea's major HTTP Digest update 2004-04-29 08:18:32 +00:00
Daniel Stenberg
699ebe2f0b Gisle made the code use ERR_error_string_n() 2004-04-29 07:36:40 +00:00
Daniel Stenberg
e1c6f216c2 the new way of accessing the host name 2004-04-28 20:34:04 +00:00
Daniel Stenberg
630b73bfa8 Added LICENSE-MIXING to the release archive 2004-04-27 18:31:35 +00:00
Daniel Stenberg
877f16e5a5 IDN: Gisle Vanem made the win32 version handle a missing CHARSET environment
and then figure it out with a suitable windows call.
2004-04-27 15:19:28 +00:00
Daniel Stenberg
fbe1fa9dcc outputed elsewhere already 2004-04-27 15:13:46 +00:00
Daniel Stenberg
5b65cc55a2 idn stuff in code and configure script 2004-04-27 14:22:58 +00:00
Daniel Stenberg
97769737d0 we released yesterday, we have heaps of new stuff today! :-) 2004-04-27 14:22:40 +00:00
Daniel Stenberg
5b0a5c4050 provide our own inet_ntoa_r() proto if the system has none on its own 2004-04-27 14:17:36 +00:00
Daniel Stenberg
4b9f8e766d Made host name and proxy name get stored in a 'struct hostname' and set
all things up to work with encoded host names internally, as well as keeping
'display names' to show in debug messages. IDN resolves work for me now using
ipv6, ipv4 and ares resolving. Even cookies on IDN sites seem to do right.
2004-04-27 13:56:23 +00:00
Daniel Stenberg
96002646f1 without-libidn works too now 2004-04-27 12:08:53 +00:00
Daniel Stenberg
5ef6904ec3 hugehelp.c fix, without-ssl fix 2004-04-27 11:16:46 +00:00
Daniel Stenberg
2f53da5e7a make the loop use a fixed number of attempts to prevent eternal loops 2004-04-27 10:59:43 +00:00
Daniel Stenberg
58f1cc0b5f added curl_*_strerror 2004-04-27 07:05:40 +00:00
Daniel Stenberg
98c70b73f2 added doctype tag to get HTML compliant 2004-04-27 07:05:22 +00:00
Daniel Stenberg
6bd02a3ab5 We now make sure to only scan for SSL options with pkg-config if we haven't
disabled SSL with --without-ssl. This previously made the Makefiles use
the SSL libs even though told not to.
2004-04-26 22:13:36 +00:00
Daniel Stenberg
372e7a6cd4 Include "setup.h" and not "config.h" since setup.h is made to include
the correct config.h for the platform, and when this is done the USE_MANUAL
define is properly known.
2004-04-26 21:15:48 +00:00
Daniel Stenberg
211004bb0d my nroff 1.18.1 complained the URL as it contains a nroff combo somehow
and when I modified it slightly the warning dissappeared...
2004-04-26 21:12:10 +00:00
Daniel Stenberg
80d2fff1a1 oops, .obj not .c! 2004-04-26 20:41:33 +00:00
Daniel Stenberg
cf3cf413c8 improved libidn detection to correct the false positives we got 2004-04-26 15:31:43 +00:00
Daniel Stenberg
e218811ca3 made the verbose connect use the proper host name string even when using
a proxy
2004-04-26 15:19:55 +00:00
Daniel Stenberg
a9f2274bd8 NI_MAXHOST is not generally available, we use plain 256 bytes for the hostname
instead, its only for debug verbose output anyway
2004-04-26 15:14:19 +00:00
Daniel Stenberg
92179ff990 corrected mistake 2004-04-26 15:11:56 +00:00
Daniel Stenberg
4aac210a83 Gisle fixed a mistaken check 2004-04-26 14:18:42 +00:00
Daniel Stenberg
245e3122df Made defines instead of plain numbers for the Curl_resolv() return code to
make the code easier to read
2004-04-26 14:18:00 +00:00
Daniel Stenberg
ffc5fa3a2b typedef CURL in the curl.h file instead of only having a single useful typedef
in the separate types.h
2004-04-26 14:06:51 +00:00
Daniel Stenberg
f5042cce34 IDN adjustments and host cleanups by Gisle 2004-04-26 14:03:25 +00:00
Daniel Stenberg
712c67b4ae no longer include curl/types.h, it serves no purpose 2004-04-26 14:02:51 +00:00
Daniel Stenberg
5dcfb8ad66 ignore the curl/types.h header file 2004-04-26 14:02:01 +00:00
Daniel Stenberg
673ff5eb2c Moved down the ares check again to the bottom of the script since it
modified the compiler and link options so nothing can be tested for after
this check, as the c-ares lib might not have been built yet!
2004-04-26 13:42:39 +00:00
Daniel Stenberg
92fc3f07ba added the new files to the build 2004-04-26 12:33:14 +00:00
Daniel Stenberg
cff90cf3f9 "configure summary" 2004-04-26 12:29:30 +00:00
Daniel Stenberg
a33c53a36b Removed the FTPS test cases, they only annoy us as they don't work for anyone
anywhere. We need to write a better ftps-server for test purposes and then
we can re-introduced FTPS tests.
2004-04-26 12:04:34 +00:00
Daniel Stenberg
2370d4fa02 Curl_ip2addr() now takes an in_addr_t argument instead to prevent compiler
warnings
2004-04-26 12:02:33 +00:00
Daniel Stenberg
f128d904a5 removed assignment of variable never used 2004-04-26 11:56:05 +00:00
Daniel Stenberg
fb1039f2ab Tor Arntsen fixed a 'Statement not reachable'-warning 2004-04-26 11:52:43 +00:00
Daniel Stenberg
923ce98e42 Kim Karlsson pointed out that error 57 was wrongly documented 2004-04-26 09:28:02 +00:00
Daniel Stenberg
8e935b58a2 TommyTam made a patch to handle stdin redirection for win32. 2004-04-26 07:50:51 +00:00
Daniel Stenberg
c93e972543 some fixed, one removed, edited some. 7.12.0 in progress. 2004-04-26 07:47:16 +00:00
Daniel Stenberg
1cb66f5262 the recent commits explained 2004-04-26 07:26:16 +00:00
Daniel Stenberg
648e82f05d Major hostip.c cleanup and split into multiple files and easier #ifdef
usage.
2004-04-26 07:20:11 +00:00
Daniel Stenberg
1dbe60b8b7 supports showing "IDN" as a libcurl feature, now outputs the features
in alphabetical order
2004-04-26 07:14:47 +00:00
Daniel Stenberg
9631fa7407 added libidn awareness 2004-04-26 07:14:08 +00:00
Daniel Stenberg
9befc682ee added many comments 2004-04-26 07:12:52 +00:00
Daniel Stenberg
fbeb674479 major update of the error strings 2004-04-26 07:12:29 +00:00
Daniel Stenberg
af641d20a7 added comments 2004-04-26 07:11:39 +00:00
Daniel Stenberg
d02587750c added function headers and comments 2004-04-26 07:11:06 +00:00
Daniel Stenberg
241a4b3d45 --with-libidn[=PATH] is now supported 2004-04-26 07:08:36 +00:00
Daniel Stenberg
496e81a25a the next release is planned to become 7.12.0 2004-04-26 07:04:40 +00:00
Daniel Stenberg
f39b081253 start all over again 2004-04-26 07:03:51 +00:00
436 changed files with 22669 additions and 20540 deletions

811
CHANGES
View File

@@ -6,6 +6,817 @@
Changelog Changelog
Version 7.12.2 (18 October 2004)
Daniel (16 October 2004)
- Alexander Krasnostavsky made the CURLOPT_FTP_CREATE_MISSING_DIRS option work
fine even for third party transfers.
- runekl at opoint.com found out (and provided a fix) that libcurl leaked
memory for cookies with the "max-age" field set.
Gisle (16 October 2004)
- Issue 50 in TODO-RELEASE; Added Traian Nicolescu's patches for threaded
resolver on Windows. Plugged some potential handle and memory leaks.
Daniel (14 October 2004)
- Eric Vergnaud pointed out that libcurl didn't treat ?-letters in the user
name and password fields properly in URLs, like
ftp://us?er:pass?word@site.com/. Added test 191 to verify the fix.
Daniel (11 October 2004)
- libcurl now uses SO_NOSIGPIPE for systems that support it (Mac OS X 10.2 or
later is one) to inhibit the SIGPIPE signal when writing to a socket while
the peer dies. The same effect is provide by the MSG_NOSIGNAL parameter to
send() on other systems. Alan Pinstein verified the fix.
Daniel (10 October 2004)
- Systems with 64bit longs no longeruse strtoll() or our strtoll- replacement
to parse 64 bit numbers. strtol() works fine. Added a configure check to
detect if [constant]LL works and if so, use that in the strtoll replacement
code to work around compiler warnings reported by Andy Cedilnik.
Gisle (6 October 2004)
- For USE_LIBIDN builds: Added Top-Level-Domain (TLD) check of host-name
used in fix_hostname(). Checks if characters in 'host->name' (indirectly
via 'ace_hostname') are legal according to the TLD tables in libidn.
Daniel (6 October 2004)
- Chih-Chung Chang reported that if you use CURLOPT_RESUME_FROM and enabled
CURLOPT_FOLLOWLOCATION, libcurl reported error if a redirect happened even
if the new URL would provide the resumed file. Test case 188 added to verify
the fix (together with existing test 99).
- Dan Fandrich fixed a configure flaw for systems that need both nsl and socket
libs to use gethostbyname().
- Removed tabs and trailing whitespace from lots of source files.
Daniel (5 October 2004)
- Made configure --with-libidn=PATH try the given PATH before the default
paths to make it possible to override.
- If idna_strerror() is present in libidn, we can use that instead of our
internal replacement. This function was added by Simon in libidn 0.5.6 and
is detected by configure.
- It seems basename() on IRIX is in the libgen library and since we don't use
that, configure finds libgen.h but not basename and then we get a compiler
error because our basename() replacement doesn't match the proto in
libgen.h. Starting now, we don't include the file if basename wasn't found
as well.
Daniel (4 October 2004)
- Chris found a race condition resulting in CURLE_COULDNT_RESOLVE_HOST and
potential crash, in the windows threaded name resolver code.
Daniel (3 October 2004)
- Replaced the use of isspace() in cookie.c with our own version instead since
we have most data as 'char *' and that makes us pass in negative values if
there is 8bit data in the string. Changing to unsigned causes too much
warnings or too many required typecasts to the normal string functions.
Harshal Pradhan identified this problem.
Daniel (2 October 2004)
- Bertrand Demiddelaer found a case where libcurl could read already freed
data when CURLOPT_VERBOSE is used and a (very) persistent connection. It
happened when the dns cache entry for the connection was pruned while the
connection was still alive and then again re-used. We worked together on
this fix.
- Gisle Vanem provided code that displays an error message when the (libidn
based) IDN conversion fails. This is really due to a missing suitable
function in the libidn API that I hope we can remove once libidn gets a
function like this.
Daniel (1 October 2004)
- Aleksandar Milivojevic reported a problem in the Redhat bugzilla (see
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134133) and not to
anyone involved in the curl project! This happens when you try to curl a
file from a proftpd site using SSL. It seems proftpd sends a somewhat
unorthodox response code (232 instead of 230). I relaxed the response code
check to deal with this and similar cases.
- Based on Fedor Karpelevitch's formpost path basename patch, file parts in
formposts no longer include the path part. If you _really_ want them, you
must provide your preferred full file name with CURLFORM_FILENAME.
Added detection for libgen.h and basename() to configure. My custom
basename() replacement function for systems without it, might be a bit too
naive...
Updated 6 test cases to make them work with the stripped paths.
Daniel (30 September 2004)
- Larry Campbell added CURLINFO_OS_ERRNO to curl_easy_getinfo() that allows an
app to retrieve the errno variable after a (connect) failure. It will make
sense to provide this for more failures in a more generic way, but let's
start like this.
- G<>nter Knauf and Casey O'Donnell worked out an extra #if condition for the
curl/multi.h header to work better in winsock-using apps.
- Jean-Philippe Barrette-LaPierre made buildconf run better on Mac OS X by
properly using glibtoolize instead of plain libtoolize. (This is made if
glibtool was found and used instead of plain libtool.)
Daniel (29 September 2004)
- Bertrand Demiddelaer fixed curl_easy_reset() so that it doesn't mistakingly
enable the progress meter.
Daniel (28 September 2004)
- "Mekonikum" found out that if you built curl without SSL support, although
your current SSL installation supports Engine, the compile fails.
Daniel (27 September 2004)
- When --with-ssl=PATH is used to the configure script, it no longer uses
pkg-config to figure out extra details. That is now only done if no PATH is
included or if SSL is checked for by default without the --with-ssl option.
Daniel (25 September 2004)
- Peter Sylvester pointed out that CURLOPT_SSLENGINE couldn't even be set to
NULL when no engine was supported. It can now.
Daniel (22 September 2004)
- Dan Fandrich fixed three test cases to no longer use "localhost" but instead
use "127.0.0.1" to avoid requiring that localhost resolves nicely.
- Jean-Claude Chauve fixed an LDAP crash when more than one record was
retrieved.
Daniel (19 September 2004)
- Andreas Rieke pointed out that when attempting to connect to a host without
a service on the specified port, curl_easy_perform() didn't properly provide
an error message in the CURLOPT_ERRORBUFFER buffer.
Daniel (16 September 2004)
- Daniel at touchtunes uses the FTP+SSL server "BSDFTPD-SSL from
http://bsdftpd-ssl.sc.ru/" which accordingly doesn't properly work with curl
when "AUTH SSL" is issued (although the server responds fine and everything)
but requires that curl issues "AUTH TLS" instead. See
http://curl.haxx.se/feedback/display.cgi?id=10951944937603&support=yes
Introducing CURLOPT_FTPSSLAUTH that allows the application to select which
of the AUTH strings to attempt first.
- Anonymous filed bug report #1029478 which identified a bug when you 1) used
a URL without properly seperating the host name and the parameters with a
slash. 2) the URL had parameters to the right of a ? that contains a slash
3) curl was told to follow Location:s 4) the request got a response that
contained a Location: to redirect to "/dir". curl then appended the new path
on the wrong position of the original URL.
Test case 187 was added to verify that this was fixed properly.
Daniel (11 September 2004)
- Added parsedate.c that contains a rewrite of the date parser currently
provided by getdate.y. The new one is MUCH smaller and will allow us to run
away from the yacc/bison jungle. It is also slightly lacking in features
compared to the old one, but it supports parsing of all date formats HTTP
involves (and a fair bunch of others).
Daniel (10 September 2004)
- As found out by Jonas Forsman, curl didn't allow -F to set Content-Type on
text-parts. Starting now, we can do -F "name=daniel;type=text/extra". Added
test case 186 to verify.
- Bug report #1025986. When following a Location: with a custom Host: header
replacement, curl only replaced the Host: header on the initial request
and didn't replace it on the following ones. This resulted in requests with
two Host: headers.
Now, curl checks if the location is on the same host as the initial request
and then continues to replace the Host: header. And when it moves to another
host, it doesn't replace the Host: header but it also doesn't make the
second Host: header get used in the request.
This change is verified by the two new test cases 184 and 185.
Daniel (8 September 2004)
- Modified the test suite to be able to use and run with customized port
numbers. This was always intended but never before possible. Now a simple
change in the runtests.pl script can make all tests use different ports.
The default ports in use from now on are 8990 to 8993.
Daniel (2 September 2004)
- Minor modification of an SSL-related error message.
Daniel (31 August 2004)
- David Tarendash found out that curl_multi_add_handle() returned
CURLM_CALL_MULTI_PERFORM instead of CURLM_OK.
Daniel (30 August 2004)
- Make "Proxy-Connection: close" close the current proxy connection, as Roman
Koifman found out.
Daniel (24 August 2004)
- Fixed a getdate problem by post-replacing the getdate.c file after the
bison/yacc process to add the fix Harshal Pradhan suggested. The problem
caused a crash on Windows when parsing some dates.
Daniel (23 August 2004)
- Roman Koifman pointed out that libcurl send Expect: 100-continue on POSTs
even when told to use HTTP 1.0, which is not correct. Test case 180 and
181 verify this.
- Added test case 182 to verify that zero byte transfers call the callback
properly.
Daniel (20 August 2004)
- Alexander Krasnostavsky made the write callback get called even when a zero
byte file is downloaded.
Daniel (18 August 2004)
- Ling Thio pointed out that when libcurl is built ipv6-enabled, it still did
reverse DNS lookups when fed with a numerical IP-address (like
http://127.0.0.1/), although it doesn't when built ipv6-disabled. libcurl
should never do reverse lookups.
Daniel (17 August 2004)
- Kjetil Jacobsen noticed that when transferring a file:// URL pointing to an
empty file, libcurl would return with the file still open.
- Alexander Krasnostavsky pointed out that the configure script needs to define
_THREAD_SAFE for AIX systems to make libcurl built really thread-safe.
Also added a check for the xlc compiler on AIX, and if that is detect we use
the -qthreaded compiler option
Daniel (16 August 2004)
- libcurl now allows a custom "Accept-Encoding:" header override the
internally set one that gets set with CURLOPT_ENCODING. Pointed out by Alex.
- Roland Krikava found and fixed a cookie problem when using a proxy (the
path matching was wrong). I added test case 179 to verify that we now do
right.
Daniel (15 August 2004)
- Casey O'Donnell fixed some MSVC makefile targets to link properly.
Daniel (11 August 2004)
- configure now defines _XOPEN_SOURCE to 500 on systems that need it to build
warning-free (the only known one so far is non-gcc builds on 64bit SGI
IRIX). (Reverted this change later as it caused compiler errors.)
- the FTP code now includes the server response in the error message when the
server gives back a 530 after the password is provided, as it isn't
necessary because of a bad user name or password.
Version 7.12.1 (10 August 2004)
Daniel (10 August 2004)
- In OpenSSL 0.9.7d and earlier, ASN1_STRING_to_UTF8 fails if the input is
already UTF-8 encoded. This made the certificate verification fail if the
remote server used a certificate with the name UTF-8 encoded.
Work-around brought by Alexis S. L. Carvalho.
Daniel (9 August 2004)
- I fixed the configure script for krb4 to use -lcom_err as well, as I started
to get link problems with it unless I did that on my Solaris 2.7 box. I
don't understand why I started to get problems with this now!
Daniel (5 August 2004)
- Enrico Scholz fixed the HTTP-Negotiate service name to be uppercase as
reported in bug report #1004105
Daniel (4 August 2004)
- Gisle Vanem provided a fix for the multi interface and connecting to a host
using multiple IP (bad) addresses.
- Dylan Salisbury made libcurl no longer accept cookies set to a TLD only (it
previously allowed that on the seven three-letter domains).
Daniel (31 July 2004)
- Joel Chen reported that the digest code assumed quotes around the contents a
bit too much.
Daniel (28 July 2004)
- Bertrand Demiddelaer fixed the host name to get setup properly even when a
connection is re-used, when a proxy is in use. Previously the wrong Host:
header could get sent when re-using a proxy connection to a different target
host.
- Fixed Brian Akins' reported problems with duplicate Host: headers on re-used
connections. If you attempted to replace the Host: header in the second
request, you got two such headers!
- src/Makefile.am now includes the Makefile.inc file to get info about files
Daniel (26 July 2004)
- Made "curl [URL] -o name#2" work as expected. If there's no globbing for the
#-number, it will simply be used as #2 in the file name.
- Bertrand Demiddelaer fixed testing with valgrind 2.1.x and added two missing
newlines in the cookie informationals.
Daniel (24 July 2004)
- I fixed the autobuilds with ares, since they now need to have buildconf run
in the ares dir before the configure script is run.
- Added Casey O'Donnell's curl_easy_reset() function. It has a proto in
curl/curl.h but we have no man page yet.
Daniel (20 July 2004)
- Added buildconf and buildconf.bat to the release archives, since they are
handy for rebuilding curl when using a daily snapshot (and not a pure CVS
checkout).
Daniel (16 July 2004)
- As suggested by Toby Peterson, libcurl now ignores Content-Length data if the
given size is a negative number. Test case 178 verifies this.
Daniel (14 July 2004)
- G<>nter Knauf has made the Netware builds do without the config-netware.h
files, so they are now removed from the dist packages.
- G<>nter Knauf made curl and libcurl build with Borland again.
- Andres Garcia fixed the common test 505 failures on windows.
Daniel (6 July 2004)
- Andr<64>s Garc<72>a found out why the windows tests failed on file:// "uploads".
Daniel (2 July 2004)
- Andr<64>s Garc<72>a reported a curl_share_cleanup() crash that occurs when no
lock/unlock callbacks have been set and the share is cleaned up.
Daniel (1 July 2004)
- When using curl --trace or --trace-ascii, no trace messages that were sent
by curl_easy_cleanup() were included in the trace file. This made the
message "Closing connection #0" never appear in trace dumps.
Daniel (30 June 2004)
- Niels van Tongeren found that setting CURLOPT_NOBODY to TRUE doesn't disable
a previously set POST request, making a very odd request get sent (unless
you disabled the POST) a HEAD request with a POST request-body. I've now
made CURLOPT_NOBODY enforce a proper HEAD. Added test case 514 for this.
Daniel (29 June 2004)
- G<>nter Knauf made the testcurl.pl script capable of using a custom setup
file to easier run multiple autobuilds on the same source tree.
- Gisle fixed the djgpp build and fixed a memory problem in some of the
reorged name resolved code.
- Fixed code to allow connects done using the multi interface to attempt the
next IP when connecting to a host that resolves to multiple IPs and a
connect attempt fails.
Daniel (27 June 2004)
- Based on Rob Stanzel's bug report #979480, I wrote a configure check that
checks if poll() can be used to wait on NULL as otherwise select() should be
used to do it. The select() usage was also fixed according to his report.
Mac OS X 10.3 says "poll() functionality for Mac OS X is implemented via an
emulation layer on top of select(), not in the kernel directly. It is
recommended that programs running under OS X 10.3 prefer select() over
poll(). Configure scripts should look for the _POLL_EMUL_H_ define (instead
of _POLL_H_ or _SYS_POLL_H_) and avoid implementations where poll is not
implemented in the kernel."
Yes, we can probably use select() on most platforms but today I prefered to
leave the code unaltered.
Daniel (24 June 2004)
- The standard curl_version() string now only includes version info about
involved libraries and not about particular features. Thus it will no longer
include info about ipv6 nor GSS. That info is of course still available in
the feature bitmask curl_version_info() offers.
- Replaced all occurances of sprintf() with snprintf(). This is mostly because
it is "A Good Thing" rather than actually fixing any known problem. This
will help preventing future possible mistakes to cause buffer overflows.
- Major reorganization in the host resolve code (again). This time, I've
modified the code to now always use a linked list of Curl_addrinfo structs
to return resolved info in, no matter what resolver method or support that
is available on the platform. It makes it a lot easier to write code that
uses or depends on resolved data.
Internally, this means amongst other things that we can stop doing the weird
"increase buffer size until it works" trick when resolving hosts on
ipv4-only with gethostbyname_r(), we support socks even on libcurls built
with ipv6 enabled (but only to socks servers that resolve to an ipv4
address) and we no longer deep-copy or relocate hostent structs (we create
Curl_addrinfo chains instead).
The new "hostent to Curl_addrinfo" converter function is named Curl_he2ai()
and is slightly naive and simple, yet I believe it is functional enough to
work for libcurl.
Daniel (22 June 2004)
- David Cohen pointed out that RFC2109 says clients should allow cookies to
contain least 4096 bytes while libcurl only allowed 2047. I raised the limit
to 4999 now and made the used buffer get malloc()ed instead of simply
allocated on stack as before. Extended test case 46 to include a cookie with
very huge content to verify the fix.
- G<>nter Knauf fixed getdate.y to remove a few warnings. I removed the
ifdef'ed test we never ever use anyway.
- Gisle Vanem fixed the certificate wildcard checks to support a '*'-letter
anywhere in the wildcard string, support multiple '*'-letters in the
wildcard and to allow the '*'-letter to match a string that includes a dot.
Daniel (21 June 2004)
- testcurl.sh is now removed completely, tests/testcurl.pl is the script to
use when autobuilding curl!
- Kjetil Jacobsen brought my attention to the fact that you cannot properly
abort an upload with the readfunction callback, since returning 0 or -1 only
stops the upload and libcurl will continue waiting for downloaded data and
the server often waits for the rest of the upload data to arrive.
Thus, I've now added the ability for read callbacks to return
CURL_READFUNC_ABORT to abort an upload from a read callback. This will stop
the transfer immediately with a CURLE_ABORTED_BY_CALLBACK return code.
Test case 513 was added to verify that it works. I had to improve the test
HTTP server too to dump the request to a file even when the client
disconnects prematurely.
Daniel (19 June 2004)
- Luca Alteas provided a test case with a failing curl operation: when we POST
to a site with --digest (or similar) set, and the server responded with a 302
Location: to the "authprobe" request, it was not treated correctly. We still
will behave badly if FOLLOWLOCATION is enabled for this case, but I'm not
in the mood to dive into this right now and will leave it as-is for now.
Verified my fix with test case 177.
Daniel (18 June 2004)
- Gisle Vanem's patch that provides more details from the SSL layers (if you
use an OpenSSL version that supports it). It also introduces two new types
of data that can be sent to the debug callback: CURLINFO_SSL_DATA_IN and
CURLINFO_SSL_DATA_OUT.
- With David Byron's test server I could repeat his problem and make sure that
POSTing over HTTPS:// with NTLM works fine now. There was a general problem
with multi-pass authentication with non-GET operations with CONNECT.
Daniel (16 June 2004)
- Modified to keep the upload byte counter in an curl_off_t, not an int as
before. 32bits is not enough. This is most likely the bug Jean-Louis Lemaire
reported that makes 2GB FTP uploads to report error ("unaligned file sizes")
when completed.
Daniel (15 June 2004)
- Luca Alteas reported a problem that I fixed: if you did a POST with
CURLAUTH_DIGEST set but the server didn't require any authentication,
libcurl would repeatedly send HEAD lots of times until it gives up. This was
actually the case for all multi-pass authentications. Added test case 174,
175 and 176 to verify this.
Daniel (14 June 2004)
- Multipart formposts uploading files no longer inserts the files themselves
into the huge prebuilt chunk. This enables libcurl to formpost files that is
larger than the amount of system memory. When the file given is passed on
stdin, libcurl still uses the old method of reading the full fill before the
upload takes place. This approach was selected in order to not alter the
behavior for existing applications, as when using stdin libcurl can't know
the size of the upload and chunked transfer-encoding can only be used on
HTTP 1.1 servers.
Daniel (13 June 2004)
- Gisle found out that we did wildcard cert name checks wrong, so that parts
of the check wrongly was case sensitive.
Daniel (11 June 2004)
- Tim Sneddon brought a minor VMS fix to make curl build properly on his VMS
machine. He also had some interesting libcurl patches... they might be able
to do in a slightly nicer way. Discussions are in progress.
Daniel (10 June 2004)
- Gisle Vanem brought code cleanupsm better verbose output and better connect
timeout handling when attempting to connect to a host that resolves to
multiple IP addresses.
- Steven Bazyl and Seshubabu Pasam pointed out a bug on win32 when freeing the
path after a file:// transfer.
Daniel (9 June 2004)
- Alexander Krasnostavsky made 'configure --disable-http' work to build libcurl
without HTTP support. I added a new return code for curl_formadd() in case
libcurl is built with HTTP disable: CURL_FORMADD_DISABLED.
- Alexander Krasnostavsky pointed out a missing file in the generated
curllib.dsp file, and now people building with this should get a libcurl.lib
file generated as it used to do before we generated this file.
Daniel (8 June 2004)
- Marty Kuhrt fixed a minor build problem for VMS.
Daniel (7 June 2004)
- Reverted the configure check from the 4th since it obviously didn't work.
Remade it in a different manner that hopefully works better.
Daniel (4 June 2004)
- G<>nter Knauf brought patches to make curl build fine on NetWare again.
- Made the configure checks for strerror_r() not exit the configure script
when built for cross-compiling.
Daniel (3 June 2004)
- Chris Gaukroger pointed out that 'make test' attempts to run the tests even
if curl is built cross-compiled. I've now made it output a short message
instead, saying it isn't possible to do.
- Alexander Krasnostavsky brought FTP 3rd party transfer support to libcurl.
You can now use libcurl to transfer files between two remote hosts using
FTP. There are a bunch of new options to control this with:
CURLOPT_SOURCE_HOST
CURLOPT_SOURCE_USERPWD
CURLOPT_SOURCE_PATH
CURLOPT_SOURCE_PORT
CURLOPT_PASV_HOST
CURLOPT_SOURCE_PREQUOTE
CURLOPT_SOURCE_POSTQUOTE
(They still remain to be documented properly in the curl_easy_setopt man
page.)
When using this, the ordinary CURLOPT_URL specifies the target URL, and you
specify the source data with these additional options. ftp3rdparty.c is a
new example source code showing how to use this.
- Vincent Bronner fixed the HTTP Digest code to use the proxy user name and
password when doing proxy authentication, it previously always used the host
user name and password!
Daniel (2 June 2004)
- CURLOPT_UPLOAD and CURLOPT_PUT now do the exact same thing internally, which
fixes some old confusions on when which of these should be used and what the
differences are.
- Applied Gisle's fixes to make curl build fine with lcc-win32
Version 7.12.0 (2 June 2004)
Daniel (1 June 2004)
- I clarified the --create-dirs option somewhat in the curl man page.
- Renaud Duhaut corrected the curl_unescape man page.
- David Byron modified one of Massimiliano Ziccardi's recent MSVC makefile
changes to now again use the mm lib by default.
Daniel (26 May 2004)
- Mohun Biswas added release-zlib and debug-zlib targets to the MSVC libcurl
Makefile
- David Byron reported a problem with proxy authentication when doing CONNECT,
like when accessing HTTPS sites wiht a proxy. This probably broke when I
rewrote the auth stuff recently.
- I added fileupload.c in the examples directory, showing how an upload to a
file:// URL is made.
Daniel (25 May 2004)
- Massimiliano Ziccardi updated the MSVC makefiles.
Daniel (24 May 2004)
- libcurl now supports "uploading" to file:// URLs. Test 204 and 205 were
added to verify.
- Simon Josefsson added a idn_free() function in libidn 0.4.5 as a reaction to
Gisle's previous mail. We now use this function, and thus we require libidn
0.4.5 or later. No earlier version will do.
- Robert D. Young reported that CURLOPT_COOKIEFILE and CURLOPT_COOKIE could
not be used both in one request. Fixed it and added test case 172 to verify.
Daniel (21 May 2004)
- While talking to host a.b.c, libcurl did wrongly not accept cookies that
were set to the domain .a.b.c (that is with a dot prefix). This is now fixed
and test case 171 verifies it.
Daniel (20 May 2004)
- Jesse Noller reported that the upload speed info reported by libcurl was
wrong. The same was true for the download speed. Fixed now.
Daniel (19 May 2004)
- David Byron added test case 170 - this used to crash the previous version of
curl.
Daniel (17 May 2004)
- Peter Sylvester's patch that addresses two flaws in the peer certificate
name verification:
o when multiple common names are used (as in the curl tests), the last name
needs to be selected.
o allow comparing with encoded values, at least with BMP and ISO latin1
encoded T61strings.
- All 191 test cases run through the torture test OK! 'make test-torture' is
now available in the root makefile (on configure-based environments).
Daniel (14 May 2004)
- With a slightly modified ftpserver.pl I've now run almost all tests through
with runtests.pl -t. This is goodness!
- Since I have been unable to contact the CVS admins for several months, I've
decided that the current CVS hosting was not good enough. I've now moved the
CVS repo once again, see README for updated cvs checkout instructions.
Daniel (13 May 2004)
- runtests.pl -t now runs fine all the way to test 100. I believe test case
100 fails because of an FTP server problem.
Daniel (12 May 2004)
- General cleanups all over to make libcurl survive and do well when a memory
function returns NULL. runtests.pl -t now works fine for the first 26 test
cases.
Daniel (11 May 2004)
- Seshubabu Pasam provided a patch that introduces curl_global_init_mem() -
like normal curl_global_init() but allows the app to replace all memory
functions with its own set. I modified it slightly.
- Based on Luca Alteas' comments, I modified the curllib.dsp generation code.
Daniel (10 May 2004)
- Gisle mailed Simon Josefsson (of libidn fame) about the benefits of a
separate free()-function by that lib to make sure the memory is freed by the
same memory subsystem that allocated it. He responded positively and this
will likely cause us to require a newer version of libidn as soon as Simon
releases one with such a libidn_free() function.
- James Bursa made runtests.pl's -t option work for any given test case, and I
edited to allow -g too. Not even test case 1 worked...
- Luca Altea made the nc= field not use quotes in outgoing HTTP Digest headers.
- Andr<64>s Garc<72>a fixed a problem in the test script that made it fail to
recognize our own running HTTP server.
Daniel (7 May 2004)
- James Bursa fixed the memanalyze.pl script to conder malloc(0) areas OK to
free() and he made two failed-resolve error messages use the new display-
name instead of the internally-used name.
- Gisle Vanem tried curl with
www.etdomenenavnkanmaksimaltinneholdesekstitrebokstaversliksomdette.com
which caused problems, and I fixed the single zero byte buffer overwrite
that occurred (due to a stupid protocol buffer size and parser).
- Made the lib/curllib.dsp file get generated automaticly when a distribution
package is made, with the msvcproj.* files as templates and all
win32-sources added. I think this can be made to work better than the always
lagging-behind previous approach. I'm not sure this builds a working project
file right now though!
Daniel (6 May 2004)
- Michael Benedict brought a fix that fills in the errorbuffer properly when
ares fails to resolve a name for a case not previously dealt with like this.
Daniel (5 May 2004)
- Joe Halpin fixed the annoying typecast warning in lib/ldap.c
- Gisle Vanem fixes:
o memdebug to not access NULL on several places
o libcurl.def; curl_formparse is gone.
o progress.c; fixed the percent values being trunced to 0.
o if2ip.*; constified the 'interface' argument.
- Tor Arntsen reported that many of his autobuilds froze and I found and fixed
a problem introduced with the HTTP auth overhaul that could lead to a
never-ending internal request-loop due to un-initialized variables!
- Removed several compiler warnings on various compilers/platforms.
Daniel (4 May 2004)
- curl_formparse() has been removed from the library. It has been marked and
mentioned as deprecated for several years.
Daniel (3 May 2004)
- Rewritten HTTP authentication code. The previous code could not properly
deal with the added test cases 167, 168 and 169. I've now rewritten the code
to better separate host and proxy authentication and not re-use the same
variables as much as before as it proved non working in the more involved
cases. All the current tests run OK now, and so do the new ones. The curl
tool got a new option named --proxy-digest to enable HTTP Digest
authentication with the proxy. I also made the library support it.
- Gisle Vanem made the LDAP code work with wldap32.dll as supplied with
Win-98/ME/2000/XP, so no extra .dlls are required when curl/libcurl is used
on these Windows versions.
Daniel (30 April 2004)
- runtests.pl now scans the valgrind log for valgrind-detected memory leaks
after each test case if valgrind was found and used.
- I modified the app-code in curl to include the new lib/curlx.h and only
access those functions using the curlx_-prefix in preparation for the future
removal of several curl_-functions from the public libcurl API.
- Introduced lib/curlx.h as a single header to provide the curlx_-functions
to apps.
- Added notices in the man pages for curl_getenv, curl_mprintf, curl_strequal
and curl_strnequal that they are subject for removal in a future release.
STOP USING THESE FUNCTIONS.
- Mihai Ionescu noticed he couldn't do formposts with whitespace in the file
names and yes, I broke that on April 23. Sigh. I fixed it now and added
test case 166 to verify it.
- Luca Altea pointed out a mistake left from the Digest patch of yesterday.
Daniel (29 April 2004)
- Made IDN domains work when sending requsts over HTTP proxy as well. Added
test case 165 to verify the functionality.
- Fixed a bug in the new internal host name setup when re-using connections.
- James Bursa found out that curl_easy_duphandle() with ares-built libcurl
created a bad handle that would crash in the first name resolve attempt. This
is now fixed and test case 512 was added to verify it.
- Luca Altea provided a major HTTP Digest code fix and cleanup. We now follow
the Digest RFC a lot better.
- Gisle Vanem made the SSL code use ERR_error_string_n() where applicable.
Daniel (27 April 2004)
- I remodeled Gisle's IDN code slightly and now we convert both the host name
and proxy name to the ACE encoded version to use internally for resolves and
cookies etc. They are now using one 'struct hostname' each that keep both
the original name and the possibly encoded name. IDN resolves work for me
now using ipv6, ipv4 and ares resolving. Even cookies on IDN sites seem to
do right. I got some failures at first when CHARSET wasn't set at all which
confused libidn completely and it decided by encoding of choice was
'ANSI_X3.4-1968'...
- made 'configure --without-libidn' work
Daniel (25 April 2004)
- Fixed the src/hugehelp.c file to include "setup.h" instead of "config.h" to
make the problems with USE_MANUAL on windows go away.
- configure --without-ssl could still wrongly include some OpenSSL info in the
Makefiles if pkg-config had info about OpenSSL. Bug #941762 reported by
Martin.
- Since we can now build and use quite a large set of 3rd party libraries, I
decided I would make configure produce a summary at the end showing what
libraries it uses and if not, what option to use to make it use that. I also
added some other random info that is nice in a "configure summary" output.
- Applied TommyTam's patch that now make curl work with telnet and stdin
properly on Windows.
- The changes for today below were made by me and Gisle Vanem.
The file previously known as hostip.c has now undergone a huge cleanup and
split:
hostip.c explained
==================
The main COMPILE-TIME DEFINES to keep in mind when reading the host*.c
source file are these:
CURLRES_IPV6 - this host has getaddrinfo() and family, and thus we use
that. The host may not be able to resolve IPv6, but we don't really have to
take that into account. Hosts that aren't IPv6-enabled have CURLRES_IPV4
defined.
CURLRES_ARES - is defined if libcurl is built to use c-ares for asynchronous
name resolves. It cannot have ENABLE_IPV6 defined at the same time, as
c-ares has no ipv6 support. This can be Windows or *nix.
CURLRES_THREADED - is defined if libcurl is built to run under (native)
Windows, and then the name resolve will be done in a new thread, and the
supported asynch API will be the same as for ares-builds.
If any of the two previous are defined, CURLRES_ASYNCH is defined too. If
libcurl is not built to use an asynchronous resolver, CURLRES_SYNCH is
defined.
The host*.c sources files are split up like this:
hostip.c - method-independent resolver functions and utility functions
hostasyn.c - functions for asynchronous name resolves
hostsyn.c - functions for synchronous name resolves
hostares.c - functions for ares-using name resolves
hostthre.c - functions for threaded name resolves
hostip4.c - ipv4-specific functions
hostip6.c - ipv6-specific functions
The hostip.h is the single united header file for all this. It defines the
CURLRES_* defines based on the config*.h and setup.h defines.
- Added function header comments to many functions in an attempt to better
explain the purpose of them all.
- configure --with-libidn is now supported. It makes the configure script
check for libidn libs and include files in the prefix path given. If you
say --with-libidn=/usr/local, it will check for the lib in /usr/local/lib
and the includes in /usr/local/include etc.
- curl_version_info() now returns a struct aged CURLVERSION_THIRD including
libidn version info. The string curl_version() returns also includes libidn
version info, if available.
Version 7.11.2 (26 April 2004) Version 7.11.2 (26 April 2004)
Daniel (25 April 2004) Daniel (25 April 2004)

View File

@@ -15,12 +15,6 @@ Compile and build instructions follow below.
CHANGES.0 contains ancient changes. CHANGES.0 contains ancient changes.
CHANGES.$year contains changes for the particular year. CHANGES.$year contains changes for the particular year.
tests/memanalyze.pl
is for analyzing the output generated by curl if -DCURLDEBUG
is used when compiling (run configure with --enable-debug)
buildconf builds the makefiles and configure stuff
Makefile.dist is included as the root Makefile in distribution archives Makefile.dist is included as the root Makefile in distribution archives
perl/ is a subdirectory with various perl scripts perl/ is a subdirectory with various perl scripts

View File

@@ -23,8 +23,8 @@
AUTOMAKE_OPTIONS = foreign AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \ EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist curl-config.in \
curl-config.in curl-style.el sample.emacs testcurl.sh RELEASE-NOTES curl-style.el sample.emacs RELEASE-NOTES buildconf buildconf.bat
bin_SCRIPTS = curl-config bin_SCRIPTS = curl-config
@@ -54,6 +54,9 @@ test:
test-full: test-full:
@(cd tests; $(MAKE) all full-test) @(cd tests; $(MAKE) all full-test)
test-torture:
@(cd tests; $(MAKE) all torture-test)
# #
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros # Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
# must contain the following line: # must contain the following line:

View File

@@ -30,8 +30,28 @@ ssl:
make make
borland: borland:
cd lib & make -f Makefile.b32 cd lib
cd src & make -f Makefile.b32 make -f Makefile.b32
cd ..\src
make -f Makefile.b32
borland-ssl:
cd lib
make -f Makefile.b32 WITH_SSL=1
cd ..\src
make -f Makefile.b32 WITH_SSL=1
borland-ssl-zlib:
cd lib
make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
cd ..\src
make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
borland-clean:
cd lib
make -f Makefile.b32 clean
cd ..\src
make -f Makefile.b32 clean
mingw32: mingw32:
cd lib & make -f Makefile.m32 ZLIB=1 cd lib & make -f Makefile.m32 ZLIB=1
@@ -41,18 +61,34 @@ mingw32-ssl:
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1 cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
cd src & make -f Makefile.m32 SSL=1 ZLIB=1 cd src & make -f Makefile.m32 SSL=1 ZLIB=1
mingw32-clean:
cd lib & make -f Makefile.m32 clean
cd src & make -f Makefile.m32 clean
vc: vc:
cd lib cd lib
nmake /f Makefile.vc6 cfg=release nmake /f Makefile.vc6 cfg=release
cd ..\src cd ..\src
nmake /f Makefile.vc6 nmake /f Makefile.vc6
vc-zlib:
cd lib
nmake /f Makefile.vc6 cfg=release-zlib
cd ..\src
nmake /f Makefile.vc6 cfg=release-zlib
vc-ssl: vc-ssl:
cd lib cd lib
nmake /f Makefile.vc6 cfg=release-ssl nmake /f Makefile.vc6 cfg=release-ssl
cd ..\src cd ..\src
nmake /f Makefile.vc6 cfg=release-ssl nmake /f Makefile.vc6 cfg=release-ssl
vc-ssl-zlib:
cd lib
nmake /f Makefile.vc6 cfg=release-ssl-zlib
cd ..\src
nmake /f Makefile.vc6 cfg=release-ssl-zlib
vc-ssl-dll: vc-ssl-dll:
cd lib cd lib
nmake /f Makefile.vc6 cfg=release-ssl-dll nmake /f Makefile.vc6 cfg=release-ssl-dll
@@ -82,8 +118,16 @@ amiga:
cd ./src && make -f makefile.amiga cd ./src && make -f makefile.amiga
netware: netware:
cd lib && make -f Makefile.netware $(MAKE) -C lib -f Makefile.netware
cd src && make -f Makefile.netware $(MAKE) -C src -f Makefile.netware
netware-ssl:
$(MAKE) -C lib -f Makefile.netware SSL=1
$(MAKE) -C src -f Makefile.netware SSL=1
netware-clean:
$(MAKE) -C lib -f Makefile.netware clean
$(MAKE) -C src -f Makefile.netware clean
unix: all unix: all

17
README
View File

@@ -6,7 +6,7 @@
README README
Curl is a command line tool for transfering data specified with URL Curl is a command line tool for transferring data specified with URL
syntax. Find out how to use Curl by reading the curl.1 man page or the syntax. Find out how to use Curl by reading the curl.1 man page or the
MANUAL document. Find out how to install Curl by reading the INSTALL MANUAL document. Find out how to install Curl by reading the INSTALL
document. document.
@@ -17,7 +17,9 @@ README
You find answers to the most frequent questions we get in the FAQ document. You find answers to the most frequent questions we get in the FAQ document.
Study the COPYING file for distribution terms and similar. Study the COPYING file for distribution terms and similar. If you distribute
curl binaries or other binaries that involve libcurl, you might enjoy the
LICENSE-MIXING document.
CONTACT CONTACT
@@ -50,6 +52,7 @@ DOWNLOAD
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/ Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
Germany -- http://curl.mirror.at.stealer.net/download.html Germany -- http://curl.mirror.at.stealer.net/download.html
Germany -- http://curl.netmirror.org/download.html Germany -- http://curl.netmirror.org/download.html
Germany -- http://www.mirrorspace.org/curl/
Hongkong -- http://www.execve.net/curl/ Hongkong -- http://www.execve.net/curl/
Russia -- http://curl.tsuren.net/download.html Russia -- http://curl.tsuren.net/download.html
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/ Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
@@ -61,18 +64,14 @@ CVS
To download the very latest source off the CVS server do this: To download the very latest source off the CVS server do this:
cvs -d :pserver:cvsread@cvs.php.net:/repository login cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl login
(enter "phpfi" when asked for password) (just press enter when asked for password)
cvs -d :pserver:cvsread@cvs.php.net:/repository co curl cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl co curl
(you'll get a directory named curl created, filled with the source code) (you'll get a directory named curl created, filled with the source code)
cvs -d :pserver:cvsread@cvs.php.net:/repository logout
(you're off the hook!)
NOTICE NOTICE
Curl contains pieces of source code that is Copyright (c) 1998, 1999 Curl contains pieces of source code that is Copyright (c) 1998, 1999

View File

@@ -1,74 +1,84 @@
Curl and libcurl 7.11.2. A bugfix release. Curl and libcurl 7.12.2
Public curl release number: 80 Public curl release number: 83
Releases counted from the very beginning: 107 Releases counted from the very beginning: 110
Available command line options: 94 Available command line options: 96
Available curl_easy_setopt() options: 113 Available curl_easy_setopt() options: 121
Number of public functions in libcurl: 36
Amount of public web site mirrors: 13
Number of known libcurl bindings: 27
This release includes the following changes: This release includes the following changes:
o removed maximum user+password+hostname size limit o the IDN code now verifies that only TLD-legitmate letters are used in the
o removed maximum dir depth limit for FTP name or a warning is displayed (when verbose is enabled)
o the ares build now requires c-ares 1.2.0 or later o provides error texts for IDN errors
o --tcp-nodelay and CURLOPT_TCP_NODELAY were added o file upload parts in formposts now get their directory names cut off
o curl/curlver.h contains the libcurl version info now o added CURLINFO_OS_ERRNO
o added CURLOPT_FTPSSLAUTH to allow ftp connects to attempt "AUTH TLS" instead
before "AUTH SSL"
o curl_getdate() completely rewritten: may affect rare curl -z use cases
This release includes the following bugfixes: This release includes the following bugfixes:
o configure --disable-manual works better o CURLOPT_FTP_CREATE_MISSING_DIRS works for third party transfers
o removed a memory leak when doing a windows threaded resolve and it failed o memory leak for cookies received with max-age set
o --proxy-ntlm now checks if libcurl supports NTLM before using it o potential memory leaks in the window name resolver
o minor --fail with authentication bugfix o URLs with ?-letters in the user name or password fields
o CURLOPT_IPRESOLVE set to CURL_IPRESOLVE_V6 will now cause a returned error o libcurl error message is now provided when send() fails
if the host only can resolve ipv4 addresses o no more SIGPIPE on Mac OS X and other SO_NOSIGPIPE-supporting platforms
o curl -4/-6 now actually sets the requested option in libcurl o HTTP resume was refused if redirected
o multi interface on Windows without ares works again o configure's gethostbyname check when both nsl and socket libs are required
o improved resolution for the CURLINFO_*_TIME info variables o configure --with-libidn now checks the given path before defaults
o getting only a 100 Continue response and nothing else, when talking HTTP, o a race condition sometimes resulting in CURLE_COULDNT_RESOLVE_HOST in the
is now treated as an error by libcurl windows threaded name resolver code
o fixed minor memory leak in libcurl for Windows when statically linked o isspace() invokes with negative values in the cookie code
o POST/PUT using Digest/NTLM/Negotiate (including anyauth) now work better o a case of read-already-freed-data when CURLOPT_VERBOSE is used and a (very)
o --limit-rate with high speed rates is a lot more accurate now, and supports persistent connection
limiting to speeds >2GB/sec on systems with Large File support. o now includes descriptive error messages for IDN errors
o curl_strnqual.3 "refer-to" man page fix o more forgivning PASS response code check for better working with proftpd
o fixed a minor very old progress meter final update bug o curl/multi.h works better included in winsock-using apps
o added checks for a working NI_WITHSCOPEID before that is used o curl_easy_reset() no longer enables the progress meter
o fixed a flaw that prevented ares name resolve timeouts to occur o build fix for SSL disabled curl with SSL Engine support present
o getting user name from http_proxy env variable works now o configure --with-ssl=PATH now ignores pkg-config path info
o fixed too early name resolve timeouts with ares o CURLOPT_SSLENGINE can be set to NULL even if no engine support is available
o HTTP Digest "re-negotiation" works now o LDAP crash when more than one record was received
o CURLOPT_FAILONERROR (-f/--fail) works with all kinds of authentication o connect failures properly stores an error message in the errorbuffer
o better thread-safety thanks to the internal strerror() replacement o Rare Location:-following problem with bad original URL
o better thread-safety on AIX thanks to better function detection o -F can now add Content-Type on non-file sections
o minor ipv6 build fix for windows o double Host: header when following Location: with replaced Host:
o the test suite runs fine with mingw-built curl o curl_multi_add_handle() return code
o the postit2.c example works now o "Proxy-Connection: close" is now understood and properly dealt with
o better error message when --interface fails on windows o curl_getdate() crash
o the progress meter now displays very long times better o downloading empty files now calls the write callback properly
o CURLINFO_CONTENT_LENGTH_DOWNLOAD with CURLOPT_NOBODY set TRUE now works o no reverse DNS lookups for ip-only addresses with ipv6-enabled libcurl
o passwords longer than 14 letters work with NTLM o file handler leak when getting an empty file:// URL
o 'make netware' in the root dir works now o libcurl works better multi-threaded on AIX (when built with xlc)
o builds fine on VMS again and even nicer than before o cookies over proxy didn't match the path properly
o MSVC makefile fixes to build better
o FTP response 530 on 'PASS' now sends back a better error message
Other curl-related news since the previous public release: Other curl-related news since the previous public release:
o PycURL 7.11.1 was released: http://pycurl.sf.net/ o AdacURL version 7.12.1 http://www.almroth.com/adacurl/index.html
o CURLHandle 1.9 was released: http://curlhandle.sourceforge.net/ o pycurl version 7.12.1 http://pycurl.sourceforge.net/
o A curl module for the Q language was announced: o tclcurl version 0.12.1
http://q-lang.sourceforge.net/ http://personal1.iddeo.es/andresgarci/tclcurl/english/
o c-ares 1.2.0 was released: http://daniel.haxx.se/projects/c-ares/ o libcurl.NET was announce: http://www.seasideresearch.com/downloads.html
o New curl web mirrors: o Get your fresh Mozilla-extracted ca cert bundle here:
Germany http://curl.netmirror.org/ http://curl.haxx.se/docs/caextract.html
USA http://curl.signal42.com/ o New web mirror in Taiwan: http://curl.cs.pu.edu.tw/
Denmark http://curl.cofman.dk/
This release would not have looked like this without help, code, reports and This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
Thomas Schwinge, Marty Kuhrt, G<>nter Knauf, Kevin Roth, Glen Nakamura, Gisle Casey O'Donnell, Roland Krikava, Alex, Alexander Krasnostavsky, Kjetil
Vanem, Greg Hewgill, Joe Halpin, Tor Arntsen, Dirk Manske, Roy Shan, Mitz Jacobsen, Ling Thio, Roman Koifman, Harshal Pradhan, Jonas Forsman, David
Wark, Andr<64>s Garc<72>a, Robin Kay, Alan Pinstein, David Byron, Nathan Tarendash, Daniel at touchtunes, Bertrand Demiddelaer, Andreas Rieke,
O'Sullivan, Erwin Authried Jean-Claude Chauve, Dan Fandrich, Peter Sylvester, "Mekonikum", Jean-Philippe
Barrette-LaPierre, G<>nter Knauf, Larry Campbell, Fedor Karpelevitch,
Aleksandar Milivojevic, Gisle Vanem, Chris "Bob Bob", Chih-Chung Chang, Andy
Cedilnik, Alan Pinstein, Eric Vergnaud, Traian Nicolescu, runekl at
opoint.com
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@@ -1,37 +1,11 @@
Issues not sorted in any particular order. Issues not sorted in any particular order.
#[num] refers to bug report numbers.
UNASSIGNED means that no person has publicly stated to work on the issue.
DELETE means the issue is subject for dismissal
To get fixed in 7.11.2 (planned release late April 2004) To get fixed in 7.12.2 (planned release: mid October 2004)
====================== ======================
To get fixed in 7.12.3 (planned release: December 2004)
To get fixed in 7.12.0 (no date)
====================== ======================
25. curl_easy_strerror() curl_multi_strerror() curl_share_strerror() 47 - Peter Sylvester's patch for SRP on the TLS layer
Code already in CVS. Messages need overview/improvements.
Medium prio.
26. i18n of error messages? 48 - MSVC Makefile improvements by Samuel D<>az Garc<72>a
Low prio. Nobody has volunteered. Subject for removal.
33. Add a function to replace the malloc-calls within libcurl.
Low prio. Seshubabu Pasam works on this.
35. Rearrange lib/hostip.c to reduce the amount of #ifdefs and make it easier
to understand and edit. Daniel works on this. See
http://curl.haxx.se/beta/hostip-cleanup1.patch
Medium prio.
36. Add support for a threaded getaddrinfo() on Windows and IPv6 enabled
libcurl.
37. Configure option "--with-libidn" to support IDNA (Internationalising
Domain Names in Applications). Translate to/from ACE encoded domain
names as needed.
38. Make the ldap protocol work with Windows' built-in LDAP-client.
I.e. dynamically link to WLDAP32.DLL and add ldap URL parsing
(WLDAP32.DLL doesn't have an UTF-8 ldap_url_parse).

View File

@@ -396,6 +396,17 @@ AC_DEFUN([CURL_CHECK_STRERROR_R],
AC_MSG_RESULT(no))])]) AC_MSG_RESULT(no))])])
if test "x$strerror_r" = "xyes"; then if test "x$strerror_r" = "xyes"; then
dnl check if strerror_r is properly declared in the headers
AC_CHECK_DECL(strerror_r, ,
AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
,
[#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
])
dnl determine if this strerror_r() is glibc or POSIX dnl determine if this strerror_r() is glibc or POSIX
AC_MSG_CHECKING([for a glibc strerror_r API]) AC_MSG_CHECKING([for a glibc strerror_r API])
AC_TRY_RUN([ AC_TRY_RUN([
@@ -412,11 +423,16 @@ main () {
return 0; return 0;
} }
], ],
GLIBC_STRERROR_R="1"
AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()]) AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
AC_MSG_RESULT([yes]), AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no]) AC_MSG_RESULT([no]),
dnl cross-compiling!
AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
) )
if test -z "$GLIBC_STRERROR_R"; then
AC_MSG_CHECKING([for a POSIX strerror_r API]) AC_MSG_CHECKING([for a POSIX strerror_r API])
AC_TRY_RUN([ AC_TRY_RUN([
#include <string.h> #include <string.h>
@@ -435,10 +451,14 @@ main () {
], ],
AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()]) AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
AC_MSG_RESULT([yes]), AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no]) AC_MSG_RESULT([no]) ,
dnl cross-compiling!
AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
) )
fi fi dnl if not using glibc API
fi dnl we have a strerror_r
]) ])
@@ -658,10 +678,11 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
dnl "invalid format string conversion" dnl "invalid format string conversion"
dnl * 279 warns on static conditions in while expressions dnl * 279 warns on static conditions in while expressions
dnl * 981 warns on "operands are evaluated in unspecified order" dnl * 981 warns on "operands are evaluated in unspecified order"
dnl * 1418 "external definition with no prior declaration"
dnl * 1419 warns on "external declaration in primary source file" dnl * 1419 warns on "external declaration in primary source file"
dnl which we know and do on purpose. dnl which we know and do on purpose.
WARN="-wd279,269,1419,981" WARN="-wd279,269,981,1418,1419"
if test "$gccnum" -gt "600"; then if test "$gccnum" -gt "600"; then
dnl icc 6.0 and older doesn't have the -Wall flag dnl icc 6.0 and older doesn't have the -Wall flag
@@ -697,6 +718,11 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
WARN="$WARN -Wendif-labels -Wstrict-prototypes" WARN="$WARN -Wendif-labels -Wstrict-prototypes"
fi fi
if test "$gccnum" -ge "304"; then
# try -Wunreachable-code on gcc 3.4
WARN="$WARN -Wunreachable-code"
fi
for flag in $CPPFLAGS; do for flag in $CPPFLAGS; do
case "$flag" in case "$flag" in
-I*) -I*)

View File

@@ -6,3 +6,17 @@ ahost
config.log config.log
config.status config.status
aclocal.m4 aclocal.m4
.deps
Makefile.in
config.guess
config.h
config.h.in
config.sub
libtool
ltmain.sh
stamp-h1
*.lo
.libs
depcomp
libcares.la
missing

View File

@@ -1,5 +1,136 @@
Changelog for the c-ares project Changelog for the c-ares project
* September 29
- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
other OSes. He made c-ares check for and understand it if present.
- Now c-ares will use local host name lookup _before_ DNS resolving by default
if nothing else is told.
* September 26
- Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf
file to determine the sequence in which to search /etc/hosts and DNS. So on
systems where this order is defined by /etc/host.conf instead of a "lookup"
entry in /etc/resolv.conf, c-ares will always default to looking in DNS
first, and /etc/hosts second.
c-ares now looks at
1) resolv.conf (for the "lookup" line);
2) nsswitch.fon (for the "hosts:" line);
3) host.conf (for the "order" line).
First match wins.
- Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is
located in a static location. It assumed
C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact,
the location of the HOSTS file can be changed via a registry setting.
There is a key called DatabasePath which specifies the path to the HOSTS
file:
http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx
The patch will make c-ares correctly consult the registry for the location
of this file.
* August 29
- Gisle Vanem fixed the MSVC build files.
* August 20
- Gisle Vanem made c-ares build and work with his Watt-32 TCP/IP stack.
* August 13
- Harshal Pradhan made a minor syntax change in ares_init.c to make it build
fine with MSVC 7.1
* July 24
- Made the lib get built static only if --enable-debug is used.
- Gisle Vanem fixed:
Basically in loops like handle_errors(), 'query->next' was assigned a local
variable and then query was referenced after the memory was freed by
next_server(). I've changed that so next_server() and end_query() returns
the next query. So callers should use this ret-value.
The next problem was that 'server->tcp_buffer_pos' had a random value at
entry to 1st recv() (luckily causing Winsock to return ENOBUFS).
I've also added a ares_writev() for Windows to streamline the code a bit
more.
* July 20
- Fixed a few variable return types for some system calls. Made configure
check for ssize_t to make it possible to use that when receiving the send()
error code. This is necessary to prevent compiler warnings on some systems.
- Made configure create config.h, and all source files now include setup.h that
might include the proper config.h (or a handicrafted alternative).
- Switched to 'ares_socket_t' type for sockets in ares, since Windows don't
use 'int' for that.
- automake-ified and libool-ified c-ares. Now it builds libcares as a shared
lib on most platforms if wanted. (This bloated the size of the release
archive with another 200K!)
- Makefile.am now uses Makefile.inc for the c sources, h headers and man
pages, to make it easier for other makefiles to use the exact same set of
files.
- Adjusted 'maketgz' to use the new automake magic when building distribution
archives.
- Anyone desires HTML and/or PDF versions of the man pages in the release
archives?
* July 3
- G<>nter Knauf made c-ares build and run on Novell Netware.
* July 1
- Gisle Vanem provided Makefile.dj to build with djgpp, added a few more djgpp
fixes and made ares not use 'errno' to provide further info on Windows.
* June 30
- Gisle Vanem made it build with djgpp and run fine with the Watt-32 stack.
* June 10
- Gisle Vanem's init patch for Windows:
The init_by_resolv_conf() function fetches the DNS-server(s)
from a series of registry branches.
This can be wrong in the case where DHCP has assigned nameservers, but the
user has overridden these servers with other prefered settings. Then it's
wrong to use the DHCPNAMESERVER setting in registry.
In the case of no global DHCP-assigned or fixed servers, but DNS server(s)
per adapter, one has to query the adapter branches. But how can c-ares know
which adapter is valid for use? AFAICS it can't. There could be one adapter
that is down (e.g. a VPN adapter).
So it's better to leave this to the IP Helper API (iphlapi) available in
Win-98/2000 and later. My patch falls-back to the old way if not available.
* June 8
- James Bursa fixed an init issue for RISC OS.
* May 11
- Nico Stappenbelt reported that when processing domain and search lines in
the resolv.conf file, the first entry encountered is processed and used as
the search list. According to the manual pages for both Linux, Solaris and
Tru64, the last entry of either a domain or a search field is used.
This is now adjusted in the code
Version 1.2.0 (April 13, 2004) Version 1.2.0 (April 13, 2004)
* April 2, 2004 * April 2, 2004

View File

@@ -10,6 +10,9 @@ maketgz
aclocal.m4 aclocal.m4
acinclude.m4 acinclude.m4
Makefile.in Makefile.in
Makefile.dj
Makefile.m32
Makefile.netware
install-sh install-sh
mkinstalldirs mkinstalldirs
configure configure

57
ares/Makefile.am Normal file
View File

@@ -0,0 +1,57 @@
AUTOMAKE_OPTIONS = foreign
lib_LTLIBRARIES = libcares.la
man_MANS = $(MANPAGES)
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/adig/adig.mak \
vc/adig/adig.plg vc/vc.dsw vc/ahost/ahost.dep vc/ahost/ahost.dsp \
vc/ahost/ahost.mak vc/ahost/ahost.plg vc/areslib/areslib.dep \
vc/areslib/areslib.dsp vc/areslib/areslib.mak vc/areslib/areslib.plg
# adig and ahost are just sample programs and thus not mentioned with the
# regular sources and headers
EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
$(MSVCFILES)
VER=-version-info 0:0:0
# 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.
#
# If either revision or age are omitted, they default to 0. Also note that age
# must be less than or equal to the current interface number.
#
# Here are a set of rules to help you update your library version information:
#
# 1.Start with version information of 0:0:0 for each libtool library.
#
# 2.Update the version information only immediately before a public release of
# your software. More frequent updates are unnecessary, and only guarantee
# that the current interface number gets larger faster.
#
# 3.If the library source code has changed at all since the last update, then
# increment revision (c:r+1:a)
#
# 4.If any interfaces have been added, removed, or changed since the last
# update, increment current, and set revision to 0. (c+1:r=0:a)
#
# 5.If any interfaces have been added since the last public release, then
# increment age. (c:r:a+1)
#
# 6.If any interfaces have been removed since the last public release, then
# set age to 0. (c:r:a=0)
#
libcares_la_LDFLAGS = $(VER)
# Makefile.inc provides the CSOURCES and HHEADERS defines
include Makefile.inc
libcares_la_SOURCES = $(CSOURCES) $(HHEADERS)
# where to install the c-ares headers
libcares_ladir = $(includedir)
# what headers to install on 'make install':
libcares_la_HEADERS = ares.h ares_version.h

50
ares/Makefile.dj Normal file
View File

@@ -0,0 +1,50 @@
#
# c-ares Makefile for djgpp/gcc/Watt-32.
# By Gisle Vanem <giva@bgnett.no> 2004.
#
.SUFFIXES: .exe
include Makefile.inc
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
CC = gcc
CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -I$(WATT32_ROOT)/inc
LDFLAGS = -s
EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a
OBJ_DIR = djgpp
OBJECTS = $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
all: $(OBJ_DIR) libcares.a ahost.exe adig.exe
@echo Welcome to c-ares.
$(OBJ_DIR):
- mkdir $(OBJ_DIR)
libcares.a: $(OBJECTS)
ar rs $@ $?
ahost.exe: ahost.c libcares.a
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
adig.exe: adig.c libcares.a
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
clean:
rm -f $(OBJECTS) libcares.a
vclean realclean: clean
rm -f ahost.exe adig.exe depend.dj
- rmdir $(OBJ_DIR)
$(OBJ_DIR)/%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $<
@echo
depend:
$(CC) -MM $(CFLAGS) $(CSOURCES) | \
sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/' > depend.dj
-include depend.dj

View File

@@ -1,79 +0,0 @@
# $Id$
SHELL=/bin/sh
INSTALL=@INSTALL@
RANLIB=@RANLIB@
VPATH=@srcdir@
srcdir=@srcdir@
top_srcdir=@top_srcdir@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
mandir=@mandir@
LIB=libcares.a
CC=@CC@
CPPFLAGS=@CPPFLAGS@
CFLAGS=@CFLAGS@ ${WARN_CFLAGS} ${ERROR_CFLAGS}
DEFS=@DEFS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
OBJS= ares__close_sockets.o ares__get_hostent.o ares__read_line.o \
ares_destroy.o ares_expand_name.o ares_fds.o \
ares_free_hostent.o ares_free_string.o ares_gethostbyaddr.o \
ares_gethostbyname.o ares_init.o ares_mkquery.o ares_parse_a_reply.o \
ares_parse_ptr_reply.o ares_process.o ares_query.o ares_search.o \
ares_send.o ares_strerror.o ares_timeout.o ares_version.o \
ares_expand_string.o ares_cancel.o
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3 \
ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3 \
ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
ares_version.3 ares_cancel.3
$(LIB): ${OBJS}
ar cru $@ ${OBJS}
${RANLIB} $@
all: $(LIB) demos
demos: adig ahost
tags:
etags *.[ch]
adig: adig.o $(LIB)
${CC} ${LDFLAGS} -o $@ adig.o $(LIB) ${LIBS}
ahost: ahost.o $(LIB)
${CC} ${LDFLAGS} -o $@ ahost.o $(LIB) ${LIBS}
${OBJS}: ares.h ares_dns.h ares_private.h
.c.o:
${CC} -c ${ALL_CFLAGS} $<
check:
install:
${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
${RANLIB} ${DESTDIR}${libdir}/$(LIB)
chmod u-w ${DESTDIR}${libdir}/$(LIB)
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
(for man in $(MANPAGES); do \
${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
done)
clean:
rm -f ${OBJS} $(LIB) adig.o adig ahost.o ahost
distclean: clean
rm -f config.cache config.log config.status Makefile

15
ares/Makefile.inc Normal file
View File

@@ -0,0 +1,15 @@
CSOURCES = ares_fds.c ares_process.c ares_free_hostent.c ares_query.c \
ares__close_sockets.c ares_free_string.c ares_search.c ares__get_hostent.c \
ares_gethostbyaddr.c ares_send.c ares__read_line.c ares_gethostbyname.c \
ares_strerror.c ares_cancel.c ares_init.c ares_timeout.c ares_destroy.c \
ares_mkquery.c ares_version.c ares_expand_name.c ares_parse_a_reply.c \
windows_port.c ares_expand_string.c ares_parse_ptr_reply.c
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h nameser.h
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3 \
ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3 \
ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
ares_version.3 ares_cancel.3

75
ares/Makefile.m32 Normal file
View File

@@ -0,0 +1,75 @@
#############################################################
# $Id$
#
## Makefile for building libcares.a with MingW32 (GCC-3.2)
## Use: make -f Makefile.m32 [demos]
##
## Quick hack by Guenter; comments to: /dev/nul
CC = gcc
AR = ar
RANLIB = ranlib
STRIP = strip -g
#RM = rm -f
########################################################
## Nothing more to do below this line!
LIB=libcares.a
CC=gcc
#CPPFLAGS=@CPPFLAGS@
WARN_FLAGS=-Wall
CFLAGS=-O2
CFLAGS+=${WARN_CFLAGS} ${ERROR_CFLAGS}
DEFS=-DMINGW32
LDFLAGS=-s
LIBS=-lwsock32
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
OBJS += windows_port.o
$(LIB): ${OBJS}
ar cru $@ ${OBJS}
${RANLIB} $@
all: $(LIB) demos
demos: adig.exe ahost.exe
tags:
etags *.[ch]
adig.exe: adig.o $(LIB)
${CC} ${LDFLAGS} -o $@ adig.o $(LIB) ${LIBS}
ahost.exe: ahost.o $(LIB)
${CC} ${LDFLAGS} -o $@ ahost.o $(LIB) ${LIBS}
${OBJS}: ares.h ares_dns.h ares_private.h
.c.o:
${CC} -c ${ALL_CFLAGS} $<
check:
install:
${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
${RANLIB} ${DESTDIR}${libdir}/$(LIB)
chmod u-w ${DESTDIR}${libdir}/$(LIB)
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
(for man in $(MANPAGES); do \
${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
done)
clean:
rm -f ${OBJS} $(LIB) adig.o adig.exe ahost.o ahost.exe
distclean: clean
rm -f config.cache config.log config.status Makefile

317
ares/Makefile.netware Normal file
View File

@@ -0,0 +1,317 @@
#################################################################
#
## Makefile for building libares.lib (NetWare version - gnu make)
## Use: make -f Makefile.netware
##
## Comments to: Guenter Knauf <eflash@gmx.net>
#
#################################################################
# Edit the path below to point to the base of your Novell NDK.
ifndef NDKBASE
NDKBASE = c:/novell
endif
ifndef INSTDIR
INSTDIR = ../curl-$(LIBCURL_VERSION_STR)-bin-nw
endif
# Edit the vars below to change NLM target settings.
TARGETS = adig.nlm ahost.nlm
LTARGET = libcares.lib
VERSION = $(LIBCARES_VERSION)
COPYR = Copyright (c) 1996 - 2004, Daniel Stenberg, <daniel@haxx.se>
DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
MTSAFE = YES
STACK = 64000
SCREEN = none
#EXPORTS =
# Comment the line below if you dont want to load protected automatically.
#LDRING = 3
# Edit the var below to point to your lib architecture.
ifndef LIBARCH
LIBARCH = LIBC
endif
# must be equal to DEBUG or NDEBUG
DB = NDEBUG
# DB = DEBUG
# DB = CURLDEBUG
# Optimization: -O<n> or debugging: -g
ifeq ($(DB),NDEBUG)
OPT = -O2
OBJDIR = release
else
OPT = -g
OBJDIR = debug
endif
# Include the version info retrieved from curlver.h
-include $(OBJDIR)/version.inc
# The following line defines your compiler.
ifdef METROWERKS
CC = mwccnlm
else
CC = gcc
endif
YACC = bison -y
CP = cp -afv
# RM = rm -f
# if you want to mark the target as MTSAFE you will need a tool for
# generating the xdc data for the linker; here's a minimal tool:
# http://www.gknw.com/development/prgtools/mkxdc.zip
MPKXDC = mkxdc
# Global flags for all compilers
CFLAGS = $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
ifeq ($(CC),mwccnlm)
LD = mwldnlm
LDFLAGS = -nostdlib $(PRELUDE) $(OBJS) $(<:.def=.o) -o $@ -commandfile
AR = mwldnlm
ARFLAGS = -type library -w nocmdline $(OBJDIR)/*.o -o
CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
CFLAGS += -relax_pointers
#CFLAGS += -w on
ifeq ($(LIBARCH),LIBC)
PRELUDE = $(SDK_LIBC)/imports/libcpre.o
CFLAGS += -align 4
else
PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj"
# CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h"
CFLAGS += -align 1
endif
else
LD = nlmconv
LDFLAGS = -T
AR = ar
ARFLAGS = -cq
CFLAGS += -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing
CFLAGS += -Wall -Wno-format # -pedantic
ifeq ($(LIBARCH),LIBC)
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
else
PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
endif
endif
NDK_ROOT = $(NDKBASE)/ndk
SDK_CLIB = $(NDK_ROOT)/nwsdk
SDK_LIBC = $(NDK_ROOT)/libc
ifeq ($(LIBARCH),LIBC)
INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks
INCLUDES += -I$(SDK_LIBC)/include/winsock
CFLAGS += -D_POSIX_SOURCE
# CFLAGS += -D__ANSIC__
else
INCLUDES += -I$(SDK_CLIB)/include/nlm -I$(SDK_CLIB)/include
# INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete
CFLAGS += -DNETDB_USE_INTERNET
endif
CFLAGS += -I. $(INCLUDES)
ifeq ($(MTSAFE),YES)
XDCOPT = -n
endif
ifeq ($(MTSAFE),NO)
XDCOPT = -u
endif
ifeq ($(findstring linux,$(OSTYPE)),linux)
DL = '
#-include $(NDKBASE)/nlmconv/ncpfs.inc
endif
OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(wildcard ares_*.c))
.PHONY: lib nlm prebuild dist install clean
lib: prebuild $(LTARGET)
nlm: prebuild $(TARGETS)
prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h arpa/nameser.h
dist: all
-$(RM) $(OBJS) $(OBJDIR)/*.map $(OBJDIR)/*.ncv
-$(RM) $(OBJDIR)/*.def $(OBJDIR)/*.xdc $(OBJDIR)/version.inc
install: $(INSTDIR) all
@$(CP) *.nlm $(INSTDIR)
@$(CP) ../CHANGES $(INSTDIR)
@$(CP) ../COPYING $(INSTDIR)
@$(CP) ../README $(INSTDIR)
@$(CP) ../RELEASE-NOTES $(INSTDIR)
clean:
-$(RM) $(LTARGET) $(TARGETS) config.h
-$(RM) -r $(OBJDIR)
-$(RM) -r arpa
%.lib: $(OBJS)
@echo Creating $@
@-$(RM) $@
@$(AR) $(ARFLAGS) $@ $^
%.nlm: $(OBJDIR)/%.def $(OBJDIR)/%.o $(OBJDIR)/%.xdc $(OBJS)
@echo Linking $@
@-$(RM) $@
@$(LD) $(LDFLAGS) $<
$(INSTDIR):
@mkdir $(INSTDIR)
$(OBJDIR):
@mkdir $(OBJDIR)
$(OBJDIR)/%.o: %.c
# @echo Compiling $<
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/version.inc: ares_version.h $(OBJDIR)
@echo Creating $@
@awk -f ../packages/NetWare/get_ver.awk $< > $@
$(OBJDIR)/%.xdc: Makefile.netware
@echo Creating $@
@$(MPKXDC) $(XDCOPT) $@
$(OBJDIR)/%.def: Makefile.netware
@echo Creating $@
@echo $(DL)# DEF file for linking with $(LD)$(DL) > $@
@echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@
@echo $(DL)# All your changes will be lost!!$(DL) >> $@
@echo $(DL)#$(DL) >> $@
@echo $(DL)copyright "$(COPYR)"$(DL) >> $@
@echo $(DL)description "$(DESCR)"$(DL) >> $@
@echo $(DL)version $(VERSION)$(DL) >> $@
ifdef NLMTYPE
@echo $(DL)type $(NLMTYPE)$(DL) >> $@
endif
ifdef STACK
@echo $(DL)stack $(STACK)$(DL) >> $@
endif
ifdef SCREEN
@echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
else
@echo $(DL)screenname "DEFAULT"$(DL) >> $@
endif
ifeq ($(DB),DEBUG)
@echo $(DL)debug$(DL) >> $@
endif
@echo $(DL)threadname "$^"$(DL) >> $@
ifdef XDCOPT
@echo $(DL)xdcdata $(@:.def=.xdc)$(DL) >> $@
endif
ifeq ($(LDRING),0)
@echo $(DL)flag_on 16$(DL) >> $@
endif
ifeq ($(LDRING),3)
@echo $(DL)flag_on 512$(DL) >> $@
endif
ifeq ($(LIBARCH),CLIB)
@echo $(DL)start _Prelude$(DL) >> $@
@echo $(DL)exit _Stop$(DL) >> $@
@echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@
@echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@
@echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
@echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@
@echo $(DL)module clib$(DL) >> $@
else
@echo $(DL)flag_on 64$(DL) >> $@
@echo $(DL)pseudopreemption$(DL) >> $@
@echo $(DL)start _LibCPrelude$(DL) >> $@
@echo $(DL)exit _LibCPostlude$(DL) >> $@
@echo $(DL)check _LibCCheckUnload$(DL) >> $@
@echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
@echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@
@echo $(DL)module libc$(DL) >> $@
endif
ifdef MODULES
@echo $(DL)module $(MODULES)$(DL) >> $@
endif
ifdef EXPORTS
@echo $(DL)export $(EXPORTS)$(DL) >> $@
endif
ifdef IMPORTS
@echo $(DL)import $(IMPORTS)$(DL) >> $@
endif
ifeq ($(LD),nlmconv)
@echo $(DL)input $(OBJS)$(DL) >> $@
@echo $(DL)input $(PRELUDE)$(DL) >> $@
@echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@
endif
config.h: Makefile.netware
@echo Creating $@
@echo $(DL)/* $@ for NetWare target.$(DL) > $@
@echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
@echo $(DL)** All your changes will be lost!!$(DL) >> $@
@echo $(DL)*/$(DL) >> $@
@echo $(DL)#define OS "i586-pc-NetWare"$(DL) >> $@
@echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@
@echo $(DL)#define PACKAGE_BUGREPORT "curl-bug@haxx.se"$(DL) >> $@
@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
@echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@
@echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@
@echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
@echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
@echo $(DL)#define HAVE_FIONBIO 1$(DL) >> $@
@echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
@echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
@echo $(DL)#define HAVE_INET_NTOA 1$(DL) >> $@
@echo $(DL)#define HAVE_INET_PTON 1$(DL) >> $@
@echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
@echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
@echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
@echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
@echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
@echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
@echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
@echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
@echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
@echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
@echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
@echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
@echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
ifdef NW_WINSOCK
@echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@
else
@echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
@echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@
@echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
@echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
endif
ifdef OLD_NOVELLSDK
@echo $(DL)#define socklen_t int$(DL) >> $@
endif
arpa/nameser.h: nameser.h
@echo Fix missing header $@
@-mkdir arpa
@$(CP) $< arpa

View File

@@ -1,3 +1,6 @@
Major changes since:
* see the CHANGES file
Major changes in release 1.1.1: Major changes in release 1.1.1:
* ares should now compile as C++ code (no longer uses reserved word * ares should now compile as C++ code (no longer uses reserved word
"class"). "class").

View File

@@ -13,6 +13,7 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #ifdef WIN32

View File

@@ -13,6 +13,7 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #ifdef WIN32

View File

@@ -20,14 +20,17 @@
#include <sys/types.h> #include <sys/types.h>
#ifdef _AIX #if defined(_AIX) || defined(NETWARE)
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
libc5-based Linux systems. Only include it on system that are known to libc5-based Linux systems. Only include it on system that are known to
require it! */ require it! */
#include <sys/select.h> #include <sys/select.h>
#endif #endif
#ifdef WIN32 #if defined(WATT32)
#include <netinet/in.h>
#include <tcp.h>
#elif defined(WIN32)
#include <winsock.h> #include <winsock.h>
#include <windows.h> #include <windows.h>
#else #else

View File

@@ -13,11 +13,13 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <stdlib.h> #include <stdlib.h>
#ifdef WIN32 #ifdef HAVE_UNISTD_H
#else
#include <unistd.h> #include <unistd.h>
#endif #endif
#include "ares.h" #include "ares.h"
#include "ares_private.h" #include "ares_private.h"
@@ -42,14 +44,14 @@ void ares__close_sockets(struct server_state *server)
server->tcp_lenbuf_pos = 0; server->tcp_lenbuf_pos = 0;
/* Close the TCP and UDP sockets. */ /* Close the TCP and UDP sockets. */
if (server->tcp_socket != -1) if (server->tcp_socket != ARES_SOCKET_BAD)
{ {
closesocket(server->tcp_socket); closesocket(server->tcp_socket);
server->tcp_socket = -1; server->tcp_socket = ARES_SOCKET_BAD;
} }
if (server->udp_socket != -1) if (server->udp_socket != ARES_SOCKET_BAD)
{ {
closesocket(server->udp_socket); closesocket(server->udp_socket);
server->udp_socket = -1; server->udp_socket = ARES_SOCKET_BAD;
} }
} }

View File

@@ -13,11 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if !defined(WIN32) || defined(WATT32)
#else
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
@@ -143,6 +142,7 @@ int ares__get_hostent(FILE *fp, struct hostent **host)
free(line); free(line);
return ARES_SUCCESS; return ARES_SUCCESS;
} }
if(line)
free(line); free(line);
if (status == ARES_SUCCESS) if (status == ARES_SUCCESS)
@@ -150,18 +150,21 @@ int ares__get_hostent(FILE *fp, struct hostent **host)
/* Memory allocation failure; clean up. */ /* Memory allocation failure; clean up. */
if (hostent) if (hostent)
{ {
if(hostent->h_name)
free((char *) hostent->h_name); free((char *) hostent->h_name);
if (hostent->h_aliases) if (hostent->h_aliases)
{ {
for (alias = hostent->h_aliases; *alias; alias++) for (alias = hostent->h_aliases; *alias; alias++)
free(*alias); free(*alias);
} }
if(hostent->h_aliases)
free(hostent->h_aliases); free(hostent->h_aliases);
if (hostent->h_addr_list) if (hostent->h_addr_list && hostent->h_addr_list[0])
free(hostent->h_addr_list[0]); free(hostent->h_addr_list[0]);
if(hostent->h_addr_list)
free(hostent->h_addr_list); free(hostent->h_addr_list);
}
free(hostent); free(hostent);
}
return ARES_ENOMEM; return ARES_ENOMEM;
} }

View File

@@ -13,6 +13,7 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>

View File

@@ -1,18 +1,17 @@
/* Copyright 1998 by the Massachusetts Institute of Technology. /* Copyright (C) 2004 by Daniel Stenberg et al
* *
* Permission to use, copy, modify, and distribute this * Permission to use, copy, modify, and distribute this software and its
* software and its documentation for any purpose and without * documentation for any purpose and without fee is hereby granted, provided
* fee is hereby granted, provided that the above copyright * that the above copyright notice appear in all copies and that both that
* notice appear in all copies and that both that copyright * copyright notice and this permission notice appear in supporting
* notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising or
* documentation, and that the name of M.I.T. not be used in * publicity pertaining to distribution of the software without specific,
* advertising or publicity pertaining to distribution of the * written prior permission. M.I.T. makes no representations about the
* software without specific, written prior permission. * suitability of this software for any purpose. It is provided "as is"
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <stdlib.h> #include <stdlib.h>
#include "ares.h" #include "ares.h"
#include "ares_private.h" #include "ares_private.h"

View File

@@ -13,6 +13,7 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <stdlib.h> #include <stdlib.h>
#include "ares.h" #include "ares.h"
#include "ares_private.h" #include "ares_private.h"

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <netinet/in.h> #include <netinet/in.h>

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <netinet/in.h> #include <netinet/in.h>

View File

@@ -13,11 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #ifdef HAVE_SYS_TIME_H
#else
#include <sys/time.h> #include <sys/time.h>
#endif #endif
@@ -37,13 +36,13 @@ int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
for (i = 0; i < channel->nservers; i++) for (i = 0; i < channel->nservers; i++)
{ {
server = &channel->servers[i]; server = &channel->servers[i];
if (server->udp_socket != -1) if (server->udp_socket != ARES_SOCKET_BAD)
{ {
FD_SET(server->udp_socket, read_fds); FD_SET(server->udp_socket, read_fds);
if (server->udp_socket >= nfds) if (server->udp_socket >= nfds)
nfds = server->udp_socket + 1; nfds = server->udp_socket + 1;
} }
if (server->tcp_socket != -1) if (server->tcp_socket != ARES_SOCKET_BAD)
{ {
FD_SET(server->tcp_socket, read_fds); FD_SET(server->tcp_socket, read_fds);
if (server->qhead) if (server->qhead)

View File

@@ -13,11 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <stdlib.h> #include <stdlib.h>
#ifdef WIN32 #if !defined(WIN32) || defined(WATT32)
#else
#include <netdb.h> #include <netdb.h>
#endif #endif

View File

@@ -13,6 +13,7 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <stdlib.h> #include <stdlib.h>
#include "ares.h" #include "ares.h"

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <sys/socket.h> #include <sys/socket.h>
@@ -27,9 +28,14 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "ares.h" #include "ares.h"
#include "ares_private.h" #include "ares_private.h"
#ifdef WATT32
#undef WIN32
#endif
struct addr_query { struct addr_query {
/* Arguments passed to ares_gethostbyaddr() */ /* Arguments passed to ares_gethostbyaddr() */
ares_channel channel; ares_channel channel;
@@ -144,13 +150,30 @@ static int file_lookup(struct in_addr *addr, struct hostent **host)
char PATH_HOSTS[MAX_PATH]; char PATH_HOSTS[MAX_PATH];
if (IsNT) { if (IsNT) {
GetSystemDirectory(PATH_HOSTS, MAX_PATH); char tmp[MAX_PATH];
strcat(PATH_HOSTS, PATH_HOSTS_NT); HKEY hkeyHosts;
} else {
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, PATH_HOSTS_9X);
}
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
== ERROR_SUCCESS)
{
DWORD dwLength = MAX_PATH;
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, tmp,
&dwLength);
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
}
else
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
extern const char *_w32_GetHostsFile (void);
const char *PATH_HOSTS = _w32_GetHostsFile();
if (!PATH_HOSTS)
return ARES_ENOTFOUND;
#endif #endif
fp = fopen(PATH_HOSTS, "r"); fp = fopen(PATH_HOSTS, "r");

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <sys/socket.h> #include <sys/socket.h>
@@ -29,9 +30,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
#include "ares.h" #include "ares.h"
#include "ares_private.h" #include "ares_private.h"
#ifdef WATT32
#undef WIN32
#endif
struct host_query { struct host_query {
/* Arguments passed to ares_gethostbyname() */ /* Arguments passed to ares_gethostbyname() */
ares_channel channel; ares_channel channel;
@@ -214,16 +220,32 @@ static int file_lookup(const char *name, struct hostent **host)
int status; int status;
#ifdef WIN32 #ifdef WIN32
char PATH_HOSTS[MAX_PATH]; char PATH_HOSTS[MAX_PATH];
if (IsNT) { if (IsNT) {
GetSystemDirectory(PATH_HOSTS, MAX_PATH); char tmp[MAX_PATH];
strcat(PATH_HOSTS, PATH_HOSTS_NT); HKEY hkeyHosts;
} else {
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, PATH_HOSTS_9X);
}
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
== ERROR_SUCCESS)
{
DWORD dwLength = MAX_PATH;
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, tmp,
&dwLength);
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
}
else
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
extern const char *_w32_GetHostsFile (void);
const char *PATH_HOSTS = _w32_GetHostsFile();
if (!PATH_HOSTS)
return ARES_ENOTFOUND;
#endif #endif
fp = fopen(PATH_HOSTS, "r"); fp = fopen(PATH_HOSTS, "r");

View File

@@ -13,19 +13,28 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#include <iphlpapi.h>
#include <malloc.h>
#else #else
#include <sys/param.h> #include <sys/param.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h> #include <sys/time.h>
#endif
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netdb.h> #include <netdb.h>
#include <arpa/nameser.h> #include <arpa/nameser.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
#endif
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -36,13 +45,18 @@
#include "ares.h" #include "ares.h"
#include "ares_private.h" #include "ares_private.h"
#ifdef WATT32
#undef WIN32 /* Redefined in MingW/MSVC headers */
#endif
static int init_by_options(ares_channel channel, struct ares_options *options, static int init_by_options(ares_channel channel, struct ares_options *options,
int optmask); int optmask);
static int init_by_environment(ares_channel channel); static int init_by_environment(ares_channel channel);
static int init_by_resolv_conf(ares_channel channel); static int init_by_resolv_conf(ares_channel channel);
static int init_by_defaults(ares_channel channel); static int init_by_defaults(ares_channel channel);
static int config_domain(ares_channel channel, char *str); static int config_domain(ares_channel channel, char *str);
static int config_lookup(ares_channel channel, const char *str); static int config_lookup(ares_channel channel, const char *str,
const char *bindch, const char *filech);
static int config_nameserver(struct server_state **servers, int *nservers, static int config_nameserver(struct server_state **servers, int *nservers,
char *str); char *str);
static int config_sortlist(struct apattern **sortlist, int *nsort, static int config_sortlist(struct apattern **sortlist, int *nsort,
@@ -85,6 +99,8 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
channel->nsort = -1; channel->nsort = -1;
channel->lookups = NULL; channel->lookups = NULL;
channel->queries = NULL; channel->queries = NULL;
channel->domains = NULL;
channel->sortlist = NULL;
/* Initialize configuration by each of the four sources, from highest /* Initialize configuration by each of the four sources, from highest
* precedence to lowest. * precedence to lowest.
@@ -101,14 +117,15 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
/* Something failed; clean up memory we may have allocated. */ /* Something failed; clean up memory we may have allocated. */
if (channel->nservers != -1) if (channel->nservers != -1)
free(channel->servers); free(channel->servers);
if (channel->ndomains != -1) if (channel->domains)
{ {
for (i = 0; i < channel->ndomains; i++) for (i = 0; i < channel->ndomains; i++)
free(channel->domains[i]); free(channel->domains[i]);
free(channel->domains); free(channel->domains);
} }
if (channel->nsort != -1) if (channel->sortlist)
free(channel->sortlist); free(channel->sortlist);
if(channel->lookups)
free(channel->lookups); free(channel->lookups);
free(channel); free(channel);
return status; return status;
@@ -122,8 +139,8 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
for (i = 0; i < channel->nservers; i++) for (i = 0; i < channel->nservers; i++)
{ {
server = &channel->servers[i]; server = &channel->servers[i];
server->udp_socket = -1; server->udp_socket = ARES_SOCKET_BAD;
server->tcp_socket = -1; server->tcp_socket = ARES_SOCKET_BAD;
server->tcp_lenbuf_pos = 0; server->tcp_lenbuf_pos = 0;
server->tcp_buffer = NULL; server->tcp_buffer = NULL;
server->qhead = NULL; server->qhead = NULL;
@@ -228,24 +245,24 @@ static int init_by_environment(ares_channel channel)
return ARES_SUCCESS; return ARES_SUCCESS;
} }
#ifdef WIN32
static int get_res_size_nt(HKEY hKey, char *subkey, int *size)
{
return RegQueryValueEx(hKey, subkey, 0, NULL, NULL, size);
}
/* Warning: returns a dynamically allocated buffer, the user MUST #ifdef WIN32
/*
* Warning: returns a dynamically allocated buffer, the user MUST
* use free() if the function returns 1 * use free() if the function returns 1
*/ */
static int get_res_nt(HKEY hKey, char *subkey, char **obuf) static int get_res_nt(HKEY hKey, const char *subkey, char **obuf)
{ {
/* Test for the size we need */ /* Test for the size we need */
int size = 0; DWORD size = 0;
int result; int result;
result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size); result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size);
if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size) if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size)
return 0; return 0;
*obuf = malloc(size+1); *obuf = malloc(size+1);
if (!*obuf)
return 0;
if (RegQueryValueEx(hKey, subkey, 0, NULL, *obuf, &size) != ERROR_SUCCESS) if (RegQueryValueEx(hKey, subkey, 0, NULL, *obuf, &size) != ERROR_SUCCESS)
{ {
@@ -260,29 +277,99 @@ static int get_res_nt(HKEY hKey, char *subkey, char **obuf)
return 1; return 1;
} }
static int get_res_interfaces_nt(HKEY hKey, char *subkey, char **obuf) static int get_res_interfaces_nt(HKEY hKey, const char *subkey, char **obuf)
{ {
char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */ char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */
int enum_size = 39; DWORD enum_size = 39;
int idx = 0; int idx = 0;
HKEY hVal; HKEY hVal;
while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0, while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0,
NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS) NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS)
{ {
int rc;
enum_size = 39; enum_size = 39;
if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) != if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) !=
ERROR_SUCCESS) ERROR_SUCCESS)
continue; continue;
if (!get_res_nt(hVal, subkey, obuf)) rc = get_res_nt(hVal, subkey, obuf);
RegCloseKey(hVal);
else
{
RegCloseKey(hVal); RegCloseKey(hVal);
if (rc)
return 1; return 1;
} }
}
return 0; return 0;
} }
static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
{
FIXED_INFO *fi = alloca (sizeof(*fi));
DWORD size = sizeof (*fi);
DWORD (WINAPI *GetNetworkParams) (FIXED_INFO*, DWORD*); /* available only on Win-98/2000+ */
HMODULE handle;
IP_ADDR_STRING *ipAddr;
int i, count = 0;
int debug = 0;
size_t ip_size = sizeof("255.255.255.255,")-1;
size_t left = ret_size;
char *ret = ret_buf;
if (!fi)
return (0);
handle = LoadLibrary ("iphlpapi.dll");
if (!handle)
return (0);
(void*)GetNetworkParams = GetProcAddress (handle, "GetNetworkParams");
if (!GetNetworkParams)
goto quit;
if ((*GetNetworkParams) (fi, &size) != ERROR_BUFFER_OVERFLOW)
goto quit;
fi = alloca (size);
if (!fi || (*GetNetworkParams) (fi, &size) != ERROR_SUCCESS)
goto quit;
if (debug)
{
printf ("Host Name: %s\n", fi->HostName);
printf ("Domain Name: %s\n", fi->DomainName);
printf ("DNS Servers:\n"
" %s (primary)\n", fi->DnsServerList.IpAddress.String);
}
if (inet_addr(fi->DnsServerList.IpAddress.String) != INADDR_NONE &&
left > ip_size)
{
ret += sprintf (ret, "%s,", fi->DnsServerList.IpAddress.String);
left -= ret - ret_buf;
count++;
}
for (i = 0, ipAddr = fi->DnsServerList.Next; ipAddr && left > ip_size;
ipAddr = ipAddr->Next, i++)
{
if (inet_addr(ipAddr->IpAddress.String) != INADDR_NONE)
{
ret += sprintf (ret, "%s,", ipAddr->IpAddress.String);
left -= ret - ret_buf;
count++;
}
if (debug)
printf (" %s (secondary %d)\n", ipAddr->IpAddress.String, i+1);
}
quit:
if (handle)
FreeLibrary (handle);
if (debug && left <= ip_size)
printf ("Too many nameservers. Truncating to %d addressess", count);
if (ret > ret_buf)
ret[-1] = '\0';
return (count);
}
#endif #endif
static int init_by_resolv_conf(ares_channel channel) static int init_by_resolv_conf(ares_channel channel)
@@ -295,6 +382,11 @@ static int init_by_resolv_conf(ares_channel channel)
#ifdef WIN32 #ifdef WIN32
/* /*
NameServer info via IPHLPAPI (IP helper API):
GetNetworkParams() should be the trusted source for this.
Available in Win-98/2000 and later. If that fail, fall-back to
registry information.
NameServer Registry: NameServer Registry:
On Windows 9X, the DNS server can be found in: On Windows 9X, the DNS server can be found in:
@@ -317,9 +409,17 @@ DhcpNameServer
DWORD data_type; DWORD data_type;
DWORD bytes; DWORD bytes;
DWORD result; DWORD result;
DWORD keysize = MAX_PATH; char buf[256];
status = ARES_EFILE; if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */
return ARES_SUCCESS;
if (get_iphlpapi_dns_info(buf,sizeof(buf)) > 0)
{
status = config_nameserver(&servers, &nservers, buf);
if (status == ARES_SUCCESS)
goto okay;
}
if (IsNT) if (IsNT)
{ {
@@ -385,15 +485,8 @@ DhcpNameServer
RegCloseKey(mykey); RegCloseKey(mykey);
} }
if (status != ARES_EFILE) if (status == ARES_SUCCESS)
{
/*
if (!channel->lookups) {
status = config_lookup(channel, "file bind");
}
*/
status = ARES_EOF; status = ARES_EOF;
}
#elif defined(riscos) #elif defined(riscos)
@@ -401,7 +494,7 @@ DhcpNameServer
system variable Inet$Resolvers, space separated. */ system variable Inet$Resolvers, space separated. */
line = getenv("Inet$Resolvers"); line = getenv("Inet$Resolvers");
status = ARES_EFILE; status = ARES_EOF;
if (line) { if (line) {
char *resolvers = strdup(line), *pos, *space; char *resolvers = strdup(line), *pos, *space;
@@ -425,6 +518,24 @@ DhcpNameServer
free(resolvers); free(resolvers);
} }
#elif defined(WATT32)
int i;
sock_init();
for (i = 0; def_nameservers[i]; i++)
;
if (i == 0)
return ARES_SUCCESS; /* use localhost DNS server */
nservers = i;
servers = calloc(sizeof(*servers), i);
if (!servers)
return ARES_ENOMEM;
for (i = 0; def_nameservers[i]; i++)
servers[i].addr.s_addr = htonl(def_nameservers[i]);
status = ARES_EOF;
#else #else
{ {
char *p; char *p;
@@ -436,11 +547,11 @@ DhcpNameServer
return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE; return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
{ {
if ((p = try_config(line, "domain")) && channel->ndomains == -1) if ((p = try_config(line, "domain")))
status = config_domain(channel, p); status = config_domain(channel, p);
else if ((p = try_config(line, "lookup")) && !channel->lookups) else if ((p = try_config(line, "lookup")) && !channel->lookups)
status = config_lookup(channel, p); status = config_lookup(channel, p, "bind", "file");
else if ((p = try_config(line, "search")) && channel->ndomains == -1) else if ((p = try_config(line, "search")))
status = set_search(channel, p); status = set_search(channel, p);
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1) else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
status = config_nameserver(&servers, &nservers, p); status = config_nameserver(&servers, &nservers, p);
@@ -453,8 +564,49 @@ DhcpNameServer
if (status != ARES_SUCCESS) if (status != ARES_SUCCESS)
break; break;
} }
free(line);
fclose(fp); fclose(fp);
if (!channel->lookups) {
/* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */
fp = fopen("/etc/nsswitch.conf", "r");
if (fp) {
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
{
if ((p = try_config(line, "hosts:")) && !channel->lookups)
status = config_lookup(channel, p, "dns", "files");
}
fclose(fp);
}
}
if (!channel->lookups) {
/* Linux / GNU libc 2.x and possibly others have host.conf */
fp = fopen("/etc/host.conf", "r");
if (fp) {
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
{
if ((p = try_config(line, "order")) && !channel->lookups)
status = config_lookup(channel, p, "bind", "hosts");
}
fclose(fp);
}
}
if (!channel->lookups) {
/* Tru64 uses /etc/svc.conf */
fp = fopen("/etc/svc.conf", "r");
if (fp) {
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
{
if ((p = try_config(line, "hosts=")) && !channel->lookups)
status = config_lookup(channel, p, "bind", "local");
}
fclose(fp);
}
}
if(line)
free(line);
} }
#endif #endif
@@ -462,12 +614,17 @@ DhcpNameServer
/* Handle errors. */ /* Handle errors. */
if (status != ARES_EOF) if (status != ARES_EOF)
{ {
if (servers != NULL) free(servers); if (servers != NULL)
if (sortlist != NULL) free(sortlist); free(servers);
if (sortlist != NULL)
free(sortlist);
return status; return status;
} }
/* If we got any name server entries, fill them in. */ /* If we got any name server entries, fill them in. */
#ifdef WIN32
okay:
#endif
if (servers) if (servers)
{ {
channel->servers = servers; channel->servers = servers;
@@ -543,7 +700,7 @@ static int init_by_defaults(ares_channel channel)
if (!channel->lookups) if (!channel->lookups)
{ {
channel->lookups = strdup("bf"); channel->lookups = strdup("fb");
if (!channel->lookups) if (!channel->lookups)
return ARES_ENOMEM; return ARES_ENOMEM;
} }
@@ -563,7 +720,8 @@ static int config_domain(ares_channel channel, char *str)
return set_search(channel, str); return set_search(channel, str);
} }
static int config_lookup(ares_channel channel, const char *str) static int config_lookup(ares_channel channel, const char *str,
const char *bindch, const char *filech)
{ {
char lookups[3], *l; char lookups[3], *l;
const char *p; const char *p;
@@ -576,11 +734,13 @@ static int config_lookup(ares_channel channel, const char *str)
p = str; p = str;
while (*p) while (*p)
{ {
if ((*p == 'b' || *p == 'f') && l < lookups + 2) if ((*p == *bindch || *p == *filech) && l < lookups + 2) {
*l++ = *p; if (*p == *bindch) *l++ = 'b';
while (*p && !isspace((unsigned char)*p)) else *l++ = 'f';
}
while (*p && !isspace((unsigned char)*p) && (*p != ','))
p++; p++;
while (isspace((unsigned char)*p)) while (*p && (isspace((unsigned char)*p) || (*p == ',')))
p++; p++;
} }
*l = 0; *l = 0;
@@ -701,6 +861,14 @@ static int set_search(ares_channel channel, const char *str)
int n; int n;
const char *p, *q; const char *p, *q;
if(channel->ndomains != -1) {
/* if we already have some domains present, free them first */
for(n=0; n < channel->ndomains; n++)
free(channel->domains[n]);
free(channel->domains);
channel->ndomains = -1;
}
/* Count the domains given. */ /* Count the domains given. */
n = 0; n = 0;
p = str; p = str;

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <netinet/in.h> #include <netinet/in.h>

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <sys/socket.h> #include <sys/socket.h>

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <sys/socket.h> #include <sys/socket.h>

View File

@@ -18,30 +18,45 @@
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if !defined(WIN32) || defined(WATT32)
#else
#include <netinet/in.h> #include <netinet/in.h>
/* We define closesocket() here so that we can use this function all over /* We define closesocket() here so that we can use this function all over
the source code for closing sockets. */ the source code for closing sockets. */
#define closesocket(x) close(x) #define closesocket(x) close(x)
#endif #endif
#ifdef WATT32
#include <tcp.h>
#include <sys/ioctl.h>
#undef closesocket
#define closesocket(s) close_s(s)
#define writev(s,v,c) writev_s(s,v,c)
#endif
#define DEFAULT_TIMEOUT 5 #define DEFAULT_TIMEOUT 5
#define DEFAULT_TRIES 4 #define DEFAULT_TRIES 4
#ifndef INADDR_NONE #ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff #define INADDR_NONE 0xffffffff
#endif #endif
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#define IsNT ((int)GetVersion()>0) #define IsNT ((int)GetVersion()>0)
#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP" #define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters" #define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
#define NAMESERVER "NameServer" #define NAMESERVER "NameServer"
#define DHCPNAMESERVER "DhcpNameServer" #define DHCPNAMESERVER "DhcpNameServer"
#define PATH_HOSTS_NT "\\drivers\\etc\\hosts" #define DATABASEPATH "DatabasePath"
#define PATH_HOSTS_9X "\\hosts" #define WIN_PATH_HOSTS "\\hosts"
#elif defined(WATT32)
#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf"
#elif defined(NETWARE)
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
#define PATH_HOSTS "sys:/etc/hosts"
#else #else
@@ -65,8 +80,8 @@ struct send_request {
struct server_state { struct server_state {
struct in_addr addr; struct in_addr addr;
int udp_socket; ares_socket_t udp_socket;
int tcp_socket; ares_socket_t tcp_socket;
/* Mini-buffer for reading the length word */ /* Mini-buffer for reading the length word */
unsigned char tcp_lenbuf[2]; unsigned char tcp_lenbuf[2];

View File

@@ -13,28 +13,41 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <sys/socket.h> #include <sys/socket.h>
#ifdef HAVE_SYS_UIO_H
#include <sys/uio.h> #include <sys/uio.h>
#endif
#include <netinet/in.h> #include <netinet/in.h>
#include <netdb.h> #include <netdb.h>
#include <arpa/nameser.h> #include <arpa/nameser.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
#endif
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
#include <errno.h> #include <errno.h>
#include "ares.h" #include "ares.h"
#include "ares_dns.h" #include "ares_dns.h"
#include "ares_private.h" #include "ares_private.h"
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
#define GET_ERRNO() WSAGetLastError()
#else
#define GET_ERRNO() errno
#endif
static void write_tcp_data(ares_channel channel, fd_set *write_fds, static void write_tcp_data(ares_channel channel, fd_set *write_fds,
time_t now); time_t now);
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now); static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
@@ -44,12 +57,12 @@ static void process_timeouts(ares_channel channel, time_t now);
static void process_answer(ares_channel channel, unsigned char *abuf, static void process_answer(ares_channel channel, unsigned char *abuf,
int alen, int whichserver, int tcp, int now); int alen, int whichserver, int tcp, int now);
static void handle_error(ares_channel channel, int whichserver, time_t now); static void handle_error(ares_channel channel, int whichserver, time_t now);
static void next_server(ares_channel channel, struct query *query, time_t now); static struct query *next_server(ares_channel channel, struct query *query, time_t now);
static int open_tcp_socket(ares_channel channel, struct server_state *server); static int open_tcp_socket(ares_channel channel, struct server_state *server);
static int open_udp_socket(ares_channel channel, struct server_state *server); static int open_udp_socket(ares_channel channel, struct server_state *server);
static int same_questions(const unsigned char *qbuf, int qlen, static int same_questions(const unsigned char *qbuf, int qlen,
const unsigned char *abuf, int alen); const unsigned char *abuf, int alen);
static void end_query(ares_channel channel, struct query *query, int status, static struct query *end_query(ares_channel channel, struct query *query, int status,
unsigned char *abuf, int alen); unsigned char *abuf, int alen);
/* Something interesting happened on the wire, or there was a timeout. /* Something interesting happened on the wire, or there was a timeout.
@@ -74,13 +87,16 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
struct server_state *server; struct server_state *server;
struct send_request *sendreq; struct send_request *sendreq;
struct iovec *vec; struct iovec *vec;
int i, n, count; int i;
ssize_t scount;
int wcount;
size_t n;
for (i = 0; i < channel->nservers; i++) for (i = 0; i < channel->nservers; i++)
{ {
/* Make sure server has data to send and is selected in write_fds. */ /* Make sure server has data to send and is selected in write_fds. */
server = &channel->servers[i]; server = &channel->servers[i];
if (!server->qhead || server->tcp_socket == -1 if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD
|| !FD_ISSET(server->tcp_socket, write_fds)) || !FD_ISSET(server->tcp_socket, write_fds))
continue; continue;
@@ -89,16 +105,10 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
n++; n++;
#ifdef WIN32
vec = NULL;
#else
/* Allocate iovecs so we can send all our data at once. */ /* Allocate iovecs so we can send all our data at once. */
vec = malloc(n * sizeof(struct iovec)); vec = malloc(n * sizeof(struct iovec));
#endif
if (vec) if (vec)
{ {
#ifdef WIN32
#else
/* Fill in the iovecs and send. */ /* Fill in the iovecs and send. */
n = 0; n = 0;
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
@@ -107,21 +117,21 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
vec[n].iov_len = sendreq->len; vec[n].iov_len = sendreq->len;
n++; n++;
} }
count = writev(server->tcp_socket, vec, n); wcount = writev(server->tcp_socket, vec, n);
free(vec); free(vec);
if (count < 0) if (wcount < 0)
{ {
handle_error(channel, i, now); handle_error(channel, i, now);
continue; continue;
} }
/* Advance the send queue by as many bytes as we sent. */ /* Advance the send queue by as many bytes as we sent. */
while (count) while (wcount)
{ {
sendreq = server->qhead; sendreq = server->qhead;
if ((size_t)count >= sendreq->len) if ((size_t)wcount >= sendreq->len)
{ {
count -= sendreq->len; wcount -= sendreq->len;
server->qhead = sendreq->next; server->qhead = sendreq->next;
if (server->qhead == NULL) if (server->qhead == NULL)
server->qtail = NULL; server->qtail = NULL;
@@ -129,28 +139,27 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
} }
else else
{ {
sendreq->data += count; sendreq->data += wcount;
sendreq->len -= count; sendreq->len -= wcount;
break; break;
} }
} }
#endif
} }
else else
{ {
/* Can't allocate iovecs; just send the first request. */ /* Can't allocate iovecs; just send the first request. */
sendreq = server->qhead; sendreq = server->qhead;
count = send(server->tcp_socket, sendreq->data, sendreq->len, 0); scount = send(server->tcp_socket, sendreq->data, sendreq->len, 0);
if (count < 0) if (scount < 0)
{ {
handle_error(channel, i, now); handle_error(channel, i, now);
continue; continue;
} }
/* Advance the send queue by as many bytes as we sent. */ /* Advance the send queue by as many bytes as we sent. */
if ((size_t)count == sendreq->len) if ((size_t)scount == sendreq->len)
{ {
server->qhead = sendreq->next; server->qhead = sendreq->next;
if (server->qhead == NULL) if (server->qhead == NULL)
@@ -159,8 +168,8 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
} }
else else
{ {
sendreq->data += count; sendreq->data += scount;
sendreq->len -= count; sendreq->len -= scount;
} }
} }
} }
@@ -179,7 +188,8 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
{ {
/* Make sure the server has a socket and is selected in read_fds. */ /* Make sure the server has a socket and is selected in read_fds. */
server = &channel->servers[i]; server = &channel->servers[i];
if (server->tcp_socket == -1 || !FD_ISSET(server->tcp_socket, read_fds)) if (server->tcp_socket == ARES_SOCKET_BAD ||
!FD_ISSET(server->tcp_socket, read_fds))
continue; continue;
if (server->tcp_lenbuf_pos != 2) if (server->tcp_lenbuf_pos != 2)
@@ -230,6 +240,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
*/ */
process_answer(channel, server->tcp_buffer, server->tcp_length, process_answer(channel, server->tcp_buffer, server->tcp_length,
i, 1, now); i, 1, now);
if (server->tcp_buffer)
free(server->tcp_buffer); free(server->tcp_buffer);
server->tcp_buffer = NULL; server->tcp_buffer = NULL;
server->tcp_lenbuf_pos = 0; server->tcp_lenbuf_pos = 0;
@@ -251,7 +262,8 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
/* Make sure the server has a socket and is selected in read_fds. */ /* Make sure the server has a socket and is selected in read_fds. */
server = &channel->servers[i]; server = &channel->servers[i];
if (server->udp_socket == -1 || !FD_ISSET(server->udp_socket, read_fds)) if (server->udp_socket == ARES_SOCKET_BAD ||
!FD_ISSET(server->udp_socket, read_fds))
continue; continue;
count = recv(server->udp_socket, buf, sizeof(buf), 0); count = recv(server->udp_socket, buf, sizeof(buf), 0);
@@ -273,7 +285,7 @@ static void process_timeouts(ares_channel channel, time_t now)
if (query->timeout != 0 && now >= query->timeout) if (query->timeout != 0 && now >= query->timeout)
{ {
query->error_status = ARES_ETIMEOUT; query->error_status = ARES_ETIMEOUT;
next_server(channel, query, now); next = next_server(channel, query, now);
} }
} }
} }
@@ -349,7 +361,7 @@ static void process_answer(ares_channel channel, unsigned char *abuf,
static void handle_error(ares_channel channel, int whichserver, time_t now) static void handle_error(ares_channel channel, int whichserver, time_t now)
{ {
struct query *query; struct query *query, *next;
/* Reset communications with this server. */ /* Reset communications with this server. */
ares__close_sockets(&channel->servers[whichserver]); ares__close_sockets(&channel->servers[whichserver]);
@@ -357,17 +369,19 @@ static void handle_error(ares_channel channel, int whichserver, time_t now)
/* Tell all queries talking to this server to move on and not try /* Tell all queries talking to this server to move on and not try
* this server again. * this server again.
*/ */
for (query = channel->queries; query; query = query->next)
for (query = channel->queries; query; query = next)
{ {
next = query->next;
if (query->server == whichserver) if (query->server == whichserver)
{ {
query->skip_server[whichserver] = 1; query->skip_server[whichserver] = 1;
next_server(channel, query, now); next = next_server(channel, query, now);
} }
} }
} }
static void next_server(ares_channel channel, struct query *query, time_t now) static struct query *next_server(ares_channel channel, struct query *query, time_t now)
{ {
/* Advance to the next server or try. */ /* Advance to the next server or try. */
query->server++; query->server++;
@@ -378,7 +392,7 @@ static void next_server(ares_channel channel, struct query *query, time_t now)
if (!query->skip_server[query->server]) if (!query->skip_server[query->server])
{ {
ares__send_query(channel, query, now); ares__send_query(channel, query, now);
return; return (query->next);
} }
} }
query->server = 0; query->server = 0;
@@ -387,7 +401,7 @@ static void next_server(ares_channel channel, struct query *query, time_t now)
if (query->using_tcp) if (query->using_tcp)
break; break;
} }
end_query(channel, query, query->error_status, NULL, 0); return end_query(channel, query, query->error_status, NULL, 0);
} }
void ares__send_query(ares_channel channel, struct query *query, time_t now) void ares__send_query(ares_channel channel, struct query *query, time_t now)
@@ -401,7 +415,7 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
/* Make sure the TCP socket for this server is set up and queue /* Make sure the TCP socket for this server is set up and queue
* a send request. * a send request.
*/ */
if (server->tcp_socket == -1) if (server->tcp_socket == ARES_SOCKET_BAD)
{ {
if (open_tcp_socket(channel, server) == -1) if (open_tcp_socket(channel, server) == -1)
{ {
@@ -410,9 +424,12 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
return; return;
} }
} }
sendreq = malloc(sizeof(struct send_request)); sendreq = calloc(sizeof(struct send_request), 1);
if (!sendreq) if (!sendreq)
{
end_query(channel, query, ARES_ENOMEM, NULL, 0); end_query(channel, query, ARES_ENOMEM, NULL, 0);
return;
}
sendreq->data = query->tcpbuf; sendreq->data = query->tcpbuf;
sendreq->len = query->tcplen; sendreq->len = query->tcplen;
sendreq->next = NULL; sendreq->next = NULL;
@@ -425,7 +442,7 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
} }
else else
{ {
if (server->udp_socket == -1) if (server->udp_socket == ARES_SOCKET_BAD)
{ {
if (open_udp_socket(channel, server) == -1) if (open_udp_socket(channel, server) == -1)
{ {
@@ -448,17 +465,18 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
static int open_tcp_socket(ares_channel channel, struct server_state *server) static int open_tcp_socket(ares_channel channel, struct server_state *server)
{ {
int s, flags; ares_socket_t s;
int flags;
struct sockaddr_in sockin; struct sockaddr_in sockin;
/* Acquire a socket. */ /* Acquire a socket. */
s = socket(AF_INET, SOCK_STREAM, 0); s = socket(AF_INET, SOCK_STREAM, 0);
if (s == -1) if (s == ARES_SOCKET_BAD)
return -1; return -1;
/* Set the socket non-blocking. */ /* Set the socket non-blocking. */
#ifdef WIN32 #if defined(WIN32) || defined(WATT32)
flags = 1; flags = 1;
ioctlsocket(s, FIONBIO, &flags); ioctlsocket(s, FIONBIO, &flags);
#else #else
@@ -466,13 +484,13 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
if (flags == -1) if (flags == -1)
{ {
close(s); closesocket(s);
return -1; return -1;
} }
flags |= O_NONBLOCK; flags |= O_NONBLOCK;
if (fcntl(s, F_SETFL, flags) == -1) if (fcntl(s, F_SETFL, flags) == -1)
{ {
close(s); closesocket(s);
return -1; return -1;
} }
#endif #endif
@@ -482,25 +500,28 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
sockin.sin_family = AF_INET; sockin.sin_family = AF_INET;
sockin.sin_addr = server->addr; sockin.sin_addr = server->addr;
sockin.sin_port = channel->tcp_port; sockin.sin_port = channel->tcp_port;
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1 if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1) {
&& errno != EINPROGRESS) int err = GET_ERRNO();
{
if (err != EINPROGRESS && err != EWOULDBLOCK) {
closesocket(s); closesocket(s);
return -1; return -1;
} }
}
server->tcp_buffer_pos = 0;
server->tcp_socket = s; server->tcp_socket = s;
return 0; return 0;
} }
static int open_udp_socket(ares_channel channel, struct server_state *server) static int open_udp_socket(ares_channel channel, struct server_state *server)
{ {
int s; ares_socket_t s;
struct sockaddr_in sockin; struct sockaddr_in sockin;
/* Acquire a socket. */ /* Acquire a socket. */
s = socket(AF_INET, SOCK_DGRAM, 0); s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == -1) if (s == ARES_SOCKET_BAD)
return -1; return -1;
/* Connect to the server. */ /* Connect to the server. */
@@ -597,10 +618,10 @@ static int same_questions(const unsigned char *qbuf, int qlen,
return 1; return 1;
} }
static void end_query(ares_channel channel, struct query *query, int status, static struct query *end_query (ares_channel channel, struct query *query, int status,
unsigned char *abuf, int alen) unsigned char *abuf, int alen)
{ {
struct query **q; struct query **q, *next;
int i; int i;
query->callback(query->arg, status, abuf, alen); query->callback(query->arg, status, abuf, alen);
@@ -610,6 +631,10 @@ static void end_query(ares_channel channel, struct query *query, int status,
break; break;
} }
*q = query->next; *q = query->next;
if (*q)
next = (*q)->next;
else
next = NULL;
free(query->tcpbuf); free(query->tcpbuf);
free(query->skip_server); free(query->skip_server);
free(query); free(query);
@@ -622,4 +647,5 @@ static void end_query(ares_channel channel, struct query *query, int status,
for (i = 0; i < channel->nservers; i++) for (i = 0; i < channel->nservers; i++)
ares__close_sockets(&channel->servers[i]); ares__close_sockets(&channel->servers[i]);
} }
return (next);
} }

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <netinet/in.h> #include <netinet/in.h>

View File

@@ -13,12 +13,13 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#endif #endif
@@ -124,9 +125,14 @@ void ares_search(ares_channel channel, const char *name, int dnsclass,
free(s); free(s);
} }
else else
{
/* failed, free the malloc()ed memory */
free(squery->name);
free(squery);
callback(arg, status, NULL, 0); callback(arg, status, NULL, 0);
} }
} }
}
static void search_callback(void *arg, int status, unsigned char *abuf, static void search_callback(void *arg, int status, unsigned char *abuf,
int alen) int alen)

View File

@@ -13,9 +13,10 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #if defined(WIN32) && !defined(WATT32)
#include "nameser.h" #include "nameser.h"
#else #else
#include <netinet/in.h> #include <netinet/in.h>

View File

@@ -13,6 +13,7 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <assert.h> #include <assert.h>
#include "ares.h" #include "ares.h"

View File

@@ -13,15 +13,15 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#include "setup.h"
#include <sys/types.h> #include <sys/types.h>
#ifdef WIN32 #ifdef HAVE_SYS_TIME_H
#else
#include <sys/time.h> #include <sys/time.h>
#endif #endif
#include <time.h> #include <time.h>
#include "ares.h" #include "ares.h"
#include "ares_private.h" #include "ares_private.h"

View File

@@ -1,5 +1,6 @@
/* $Id$ */ /* $Id$ */
#include "setup.h"
#include "ares_version.h" #include "ares_version.h"
const char *ares_version(int *version) const char *ares_version(int *version)

View File

@@ -1,4 +1,7 @@
#!/bin/sh #!/bin/sh
libtoolize --copy --automake --force
aclocal aclocal
autoheader
autoconf autoconf
automake --add-missing

1388
ares/config.guess vendored

File diff suppressed because it is too large Load Diff

1489
ares/config.sub vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,22 @@
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
AC_INIT(ares_init.c) AC_INIT(ares_init.c)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
AM_INIT_AUTOMAKE(c-ares, CVS)
AC_PROG_CC AC_PROG_CC
AC_PROG_INSTALL AC_PROG_INSTALL
AC_PROG_RANLIB
AC_CANONICAL_HOST
case $host_os in case $host_os in
solaris*) solaris*)
AC_DEFINE(ETC_INET) AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])
;; ;;
esac esac
# check for ssize_t
AC_CHECK_TYPE(ssize_t, ,
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
AC_SEARCH_LIBS(gethostbyname, nsl) AC_SEARCH_LIBS(gethostbyname, nsl)
AC_SEARCH_LIBS(socket, socket) AC_SEARCH_LIBS(socket, socket)
@@ -30,6 +35,9 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
;; ;;
*) AC_MSG_RESULT(yes) *) AC_MSG_RESULT(yes)
dnl when doing the debug stuff, use static library only
AC_DISABLE_SHARED
dnl Checks for standard header files, to make memdebug.h inclusions bettter dnl Checks for standard header files, to make memdebug.h inclusions bettter
AC_HEADER_STDC AC_HEADER_STDC
@@ -45,12 +53,14 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
) )
AC_PROG_LIBTOOL
dnl check for a few basic system headers we need dnl check for a few basic system headers we need
dnl AC_CHECK_HEADERS( AC_CHECK_HEADERS(
dnl sys/types.h \ sys/types.h \
dnl sys/time.h \ sys/time.h \
dnl sys/select.h \ sys/select.h \
dnl sys/socket.h \ sys/socket.h \
dnl ) )
AC_OUTPUT(Makefile) AC_OUTPUT(Makefile)

View File

@@ -2,8 +2,6 @@
$version = $ARGV[0]; $version = $ARGV[0];
$name="c-ares";
if($version eq "") { if($version eq "") {
print "Enter version number!\n"; print "Enter version number!\n";
exit; exit;
@@ -15,86 +13,25 @@ if(!-f "ares.h") {
} }
if(!-f "configure") { if(!-f "configure") {
`autoconf`; print "running buildconf\n";
`./buildconf`;
} }
print "adding $version in the configure.ac file\n";
`sed -e 's/AM_INIT_AUTOMAKE(c-ares, CVS)/AM_INIT_AUTOMAKE(c-ares, $version)/' < configure.ac > configure.ac-rel`;
@files=`find . -name FILES`; # now make a new configure script with this
print "makes a new configure script\n";
`autoconf configure.ac-rel >configure`;
my @entries; # now run this new configure to get a fine makefile
print "running configure\n";
`./configure`;
sub dirpart { # now make the actual tarball
my ($file)=@_; print "running make dist\n";
my @p=split("/", $file); `make dist`;
$p[$#p]=""; # blank the last one
my $dir=join("/", @p);
$dir =~ s/^\.\///; # cut off ./ beginnings print "removing temporary configure.ac file\n";
`rm configure.ac-rel`;
$dir =~ s/\/$//; # off / trailers
if(!$dir) {
$dir = ".";
}
return $dir;
}
sub add {
my ($file)=@_;
my $dir=dirpart($file);
open(FILE, "<$file");
while(<FILE>) {
if($_ =~ /^ *\#/) {
next;
}
chomp;
push @entries, "$dir/$_";
}
close(FILE);
}
for(@files) {
chomp;
add($_);
}
sub mkalldir {
my ($dir) = @_;
my @parts = split("/", $dir);
#print "IN: $dir\n";
my $sub="";
for(@parts) {
#print "PART: $_\n";
$sub .= "$_";
if($_ eq "") {
next;
}
mkdir($sub, 0777);
#print "make $sub\n";
$sub .= "/";
}
}
for(@entries) {
my $dir = dirpart("$name-$version/$_");
# print "Create $dir\n";
mkalldir($dir);
# print "Copy $_ to $dir\n";
`cp -p $_ $dir`;
}
# make a tarball
`tar -cf $name-$version.tar $name-$version`;
# gzip the tarball
`gzip -9 $name-$version.tar`;
# remove the dir
`rm -rf $name-$version`;
print "NOTE: now cvs tag this release!\n"; print "NOTE: now cvs tag this release!\n";

View File

@@ -4,13 +4,18 @@
/* Windows-only header file provided by liren@vivisimo.com to make his Windows /* Windows-only header file provided by liren@vivisimo.com to make his Windows
port build */ port build */
#ifndef NETWARE
#include <windows.h> #include <windows.h>
#include <process.h> /* for the _getpid() proto */ #include <process.h> /* for the _getpid() proto */
#endif /* !NETWARE */
#include <sys/types.h> #include <sys/types.h>
#ifndef NETWARE
#define MAXHOSTNAMELEN 256 #define MAXHOSTNAMELEN 256
#define EINPROGRESS WSAEINPROGRESS #define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
/* Structure for scatter/gather I/O. */ /* Structure for scatter/gather I/O. */
struct iovec struct iovec
@@ -21,11 +26,16 @@ struct iovec
#define getpid() _getpid() #define getpid() _getpid()
int ares_writev (SOCKET s, const struct iovec *vector, size_t count);
#define writev(s,vect,count) ares_writev(s,vect,count)
struct timezone { int dummy; }; struct timezone { int dummy; };
int ares_gettimeofday(struct timeval *tv, struct timezone *tz); int ares_gettimeofday(struct timeval *tv, struct timezone *tz);
#define gettimeofday(tv,tz) ares_gettimeofday(tv,tz) #define gettimeofday(tv,tz) ares_gettimeofday(tv,tz)
#endif /* !NETWARE */
#define NS_CMPRSFLGS 0xc0 #define NS_CMPRSFLGS 0xc0
@@ -211,16 +221,4 @@ typedef enum __ns_rcode {
#define T_MAILA ns_t_maila #define T_MAILA ns_t_maila
#define T_ANY ns_t_any #define T_ANY ns_t_any
#ifndef __MINGW32__
/* protos for the functions we provide in windows_port.c */
int ares_strncasecmp(const char *s1, const char *s2, size_t n);
int ares_strcasecmp(const char *s1, const char *s2);
/* use this define magic to prevent us from adding symbol names to the library
that is a high-risk to collide with another libraries' attempts to do the
same */
#define strncasecmp(a,b,c) ares_strncasecmp(a,b,c)
#define strcasecmp(a,b) ares_strcasecmp(a,b)
#endif
#endif /* ARES_NAMESER_H */ #endif /* ARES_NAMESER_H */

72
ares/setup.h Normal file
View File

@@ -0,0 +1,72 @@
#ifndef ARES_SETUP_H
#define ARES_SETUP_H
/* Copyright (C) 2004 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#else
/* simple work-around for now, for systems without configure support */
#define ssize_t int
#endif
/* Recent autoconf versions define these symbols in config.h. We don't want
them (since they collide with the libcurl ones when we build
--enable-debug) so we undef them again here. */
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
#undef PACKAGE_BUGREPORT
#undef PACKAGE_NAME
#undef VERSION
#undef PACKAGE
/* now typedef our socket type */
#if defined(WIN32) && !defined(WATT32)
#include <winsock.h>
typedef SOCKET ares_socket_t;
#define ARES_SOCKET_BAD INVALID_SOCKET
#else
typedef int ares_socket_t;
#define ARES_SOCKET_BAD -1
#endif
/* Assume a few thing unless they're set by configure
*/
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER)
#define HAVE_SYS_TIME_H
#endif
#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER)
#define HAVE_UNISTD_H
#endif
#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS)
#define HAVE_SYS_UIO_H
#endif
#if (defined(WIN32) || defined(WATT32)) && \
!(defined(__MINGW32__) || defined(NETWARE))
/* protos for the functions we provide in windows_port.c */
int ares_strncasecmp(const char *s1, const char *s2, int n);
int ares_strcasecmp(const char *s1, const char *s2);
/* use this define magic to prevent us from adding symbol names to the library
that is a high-risk to collide with another libraries' attempts to do the
same */
#define strncasecmp(a,b,c) ares_strncasecmp(a,b,c)
#define strcasecmp(a,b) ares_strcasecmp(a,b)
#endif
#endif /* ARES_SETUP_H */

View File

@@ -109,10 +109,6 @@ SOURCE=..\..\ares_fds.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\ares_free_errmem.c
# End Source File
# Begin Source File
SOURCE=..\..\ares_free_hostent.c SOURCE=..\..\ares_free_hostent.c
# End Source File # End Source File
# Begin Source File # Begin Source File

View File

@@ -46,7 +46,6 @@ CLEAN :
-@erase "$(INTDIR)\ares_destroy.obj" -@erase "$(INTDIR)\ares_destroy.obj"
-@erase "$(INTDIR)\ares_expand_name.obj" -@erase "$(INTDIR)\ares_expand_name.obj"
-@erase "$(INTDIR)\ares_fds.obj" -@erase "$(INTDIR)\ares_fds.obj"
-@erase "$(INTDIR)\ares_free_errmem.obj"
-@erase "$(INTDIR)\ares_free_hostent.obj" -@erase "$(INTDIR)\ares_free_hostent.obj"
-@erase "$(INTDIR)\ares_free_string.obj" -@erase "$(INTDIR)\ares_free_string.obj"
-@erase "$(INTDIR)\ares_gethostbyaddr.obj" -@erase "$(INTDIR)\ares_gethostbyaddr.obj"
@@ -82,7 +81,6 @@ LIB32_OBJS= \
"$(INTDIR)\ares_destroy.obj" \ "$(INTDIR)\ares_destroy.obj" \
"$(INTDIR)\ares_expand_name.obj" \ "$(INTDIR)\ares_expand_name.obj" \
"$(INTDIR)\ares_fds.obj" \ "$(INTDIR)\ares_fds.obj" \
"$(INTDIR)\ares_free_errmem.obj" \
"$(INTDIR)\ares_free_hostent.obj" \ "$(INTDIR)\ares_free_hostent.obj" \
"$(INTDIR)\ares_free_string.obj" \ "$(INTDIR)\ares_free_string.obj" \
"$(INTDIR)\ares_gethostbyaddr.obj" \ "$(INTDIR)\ares_gethostbyaddr.obj" \
@@ -122,7 +120,6 @@ CLEAN :
-@erase "$(INTDIR)\ares_destroy.obj" -@erase "$(INTDIR)\ares_destroy.obj"
-@erase "$(INTDIR)\ares_expand_name.obj" -@erase "$(INTDIR)\ares_expand_name.obj"
-@erase "$(INTDIR)\ares_fds.obj" -@erase "$(INTDIR)\ares_fds.obj"
-@erase "$(INTDIR)\ares_free_errmem.obj"
-@erase "$(INTDIR)\ares_free_hostent.obj" -@erase "$(INTDIR)\ares_free_hostent.obj"
-@erase "$(INTDIR)\ares_free_string.obj" -@erase "$(INTDIR)\ares_free_string.obj"
-@erase "$(INTDIR)\ares_gethostbyaddr.obj" -@erase "$(INTDIR)\ares_gethostbyaddr.obj"
@@ -159,7 +156,6 @@ LIB32_OBJS= \
"$(INTDIR)\ares_destroy.obj" \ "$(INTDIR)\ares_destroy.obj" \
"$(INTDIR)\ares_expand_name.obj" \ "$(INTDIR)\ares_expand_name.obj" \
"$(INTDIR)\ares_fds.obj" \ "$(INTDIR)\ares_fds.obj" \
"$(INTDIR)\ares_free_errmem.obj" \
"$(INTDIR)\ares_free_hostent.obj" \ "$(INTDIR)\ares_free_hostent.obj" \
"$(INTDIR)\ares_free_string.obj" \ "$(INTDIR)\ares_free_string.obj" \
"$(INTDIR)\ares_gethostbyaddr.obj" \ "$(INTDIR)\ares_gethostbyaddr.obj" \
@@ -260,12 +256,6 @@ SOURCE=..\..\ares_fds.c
$(CPP) $(CPP_PROJ) $(SOURCE) $(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_free_errmem.c
"$(INTDIR)\ares_free_errmem.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_free_hostent.c SOURCE=..\..\ares_free_hostent.c
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"

View File

@@ -1,15 +1,28 @@
#include "setup.h"
/* only do the following on windows
*/
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h> #include <ctype.h>
#include <string.h> #include <string.h>
#include <errno.h>
#include <malloc.h>
#ifdef WATT32
#include <sys/socket.h>
#else
#include "nameser.h" #include "nameser.h"
#endif
#include "ares.h"
#include "ares_private.h"
#ifndef __MINGW32__ #ifndef __MINGW32__
int int
ares_strncasecmp(const char *a, const char *b, size_t n) ares_strncasecmp(const char *a, const char *b, int n)
{ {
size_t i; int i;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
int c1 = isupper(a[i]) ? tolower(a[i]) : a[i]; int c1 = isupper(a[i]) ? tolower(a[i]) : a[i];
@@ -40,24 +53,47 @@ ares_gettimeofday(struct timeval *tv, struct timezone *tz)
li.LowPart = ft.dwLowDateTime; li.LowPart = ft.dwLowDateTime;
li.HighPart = ft.dwHighDateTime; li.HighPart = ft.dwHighDateTime;
t = li.QuadPart; /* In 100-nanosecond intervals */ t = li.QuadPart; /* In 100-nanosecond intervals */
//t -= EPOCHFILETIME; /* Offset to the Epoch time */ #if 0
t -= EPOCHFILETIME; /* Offset to the Epoch time */
#endif
t /= 10; /* In microseconds */ t /= 10; /* In microseconds */
tv->tv_sec = (long)(t / 1000000); tv->tv_sec = (long)(t / 1000000);
tv->tv_usec = (long)(t % 1000000); tv->tv_usec = (long)(t % 1000000);
} }
#if 0
if (tz)
{
if (!tzflag)
{
_tzset();
tzflag++;
}
tz->tz_minuteswest = _timezone / 60;
tz->tz_dsttime = _daylight;
}
#endif
return 0; return 0;
} }
int
ares_writev (ares_socket_t s, const struct iovec *vector, size_t count)
{
char *buffer, *bp;
size_t i, bytes = 0;
/* Find the total number of bytes to write
*/
for (i = 0; i < count; i++)
bytes += vector[i].iov_len;
if (bytes == 0) /* not an error */
return (0);
/* Allocate a temporary buffer to hold the data
*/
buffer = bp = (char*) alloca (bytes);
if (!buffer)
{
errno = ENOMEM;
return (-1);
}
/* Copy the data into buffer.
*/
for (i = 0; i < count; ++i)
{
memcpy (bp, vector[i].iov_base, vector[i].iov_len);
bp += vector[i].iov_len;
}
return send (s, (const void*)buffer, bytes, 0);
}
#endif /* WIN32 builds only */

View File

@@ -101,6 +101,10 @@ libtool=`findtool glibtool 2>/dev/null`
if test ! -x "$libtool"; then if test ! -x "$libtool"; then
libtool=`findtool libtool` libtool=`findtool libtool`
fi fi
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
LIBTOOLIZE="${libtool}ize"
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'` lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
if test -z "$lt_pversion"; then if test -z "$lt_pversion"; then
echo "buildconf: libtool not found." echo "buildconf: libtool not found."
@@ -157,27 +161,27 @@ fi
# run the correct scripts now # run the correct scripts now
echo "buildconf: running libtoolize" echo "buildconf: running libtoolize"
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The command '${LIBTOOLIZE:-libtoolize} --copy --automake --force' failed" ${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed"
echo "buildconf: running aclocal" echo "buildconf: running aclocal"
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The command '${ACLOCAL:-aclocal}${ACLOCAL_FLAGS:+" $ACLOCAL_FLAGS"}' failed" ${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
echo "buildconf: running aclocal hack to convert all mv to mv -f" echo "buildconf: running aclocal hack to convert all mv to mv -f"
perl -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4 perl -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
echo "buildconf: running autoheader" echo "buildconf: running autoheader"
${AUTOHEADER:-autoheader} || die "The command '${AUTOHEADER:-autoheader}' failed" ${AUTOHEADER:-autoheader} || die "The autoheader command failed"
echo "buildconf: running autoconf" echo "buildconf: running autoconf"
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed" ${AUTOCONF:-autoconf} || die "The autoconf command failed"
if test -d ares; then if test -d ares; then
cd ares cd ares
echo "buildconf: running aclocal in the ares directory" echo "buildconf: running aclocal in the ares directory"
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The command '${ACLOCAL:-aclocal}${ACLOCAL_FLAGS:+" $ACLOCAL_FLAGS"}' failed" ${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The ares aclocal command failed"
echo "buildconf: running autoconf in the ares directory" echo "buildconf: running autoconf in the ares directory"
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed" ${AUTOCONF:-autoconf} || die "The ares autoconf command failed"
cd .. cd ..
fi fi
echo "buildconf: running automake" echo "buildconf: running automake"
${AUTOMAKE:-automake} -a || die "The command '${AUTOMAKE:-automake} -a' failed" ${AUTOMAKE:-automake} -a || die "The automake command failed"
echo "buildconf: OK" echo "buildconf: OK"
exit 0 exit 0

View File

@@ -7,9 +7,6 @@ REM create ca-bundle.h
echo /* This file is generated automatically */ >lib\ca-bundle.h echo /* This file is generated automatically */ >lib\ca-bundle.h
echo #define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE") >>lib\ca-bundle.h echo #define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE") >>lib\ca-bundle.h
REM create getdate.c
copy lib\getdate.c.cvs lib\getdate.c
REM create hugehelp.c REM create hugehelp.c
copy src\hugehelp.c.cvs src\hugehelp.c copy src\hugehelp.c.cvs src\hugehelp.c

View File

@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57) AC_PREREQ(2.57)
dnl We don't know the version number "staticly" so we use a dash here dnl We don't know the version number "staticly" so we use a dash here
AC_INIT(curl, [-], [curl-bug@haxx.se]) AC_INIT(curl, [-], [a suitable curl mailing list => http://curl.haxx.se/mail/])
dnl configure script copyright dnl configure script copyright
AC_COPYRIGHT([Copyright (c) 1998 - 2004 Daniel Stenberg, <daniel@haxx.se> AC_COPYRIGHT([Copyright (c) 1998 - 2004 Daniel Stenberg, <daniel@haxx.se>
@@ -16,12 +16,24 @@ AM_CONFIG_HEADER(lib/config.h src/config.h)
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
dnl SED is needed by some of the tools dnl SED is needed by some of the tools
AC_PATH_PROG( SED, sed, , $PATH:/usr/bin:/usr/local/bin) AC_PATH_PROG( SED, sed, sed-was-not-found-by-configure,
$PATH:/usr/bin:/usr/local/bin)
AC_SUBST(SED) AC_SUBST(SED)
if test "x$SED" = "xsed-was-not-found-by-configure"; then
AC_MSG_WARN([sed was not found, this may ruin your chances to build fine])
fi
dnl AR is used by libtool, and try the odd Solaris path too dnl AR is used by libtool, and try the odd Solaris path too
AC_PATH_PROG( AR, ar, , $PATH:/usr/bin:/usr/local/bin:/usr/ccs/bin) dnl we use AC_CHECK_TOOL since this should make a library for the target
dnl platform
AC_CHECK_TOOL(AR, ar,
ar-was-not-found-by-configure,
$PATH:/usr/bin:/usr/local/bin:/usr/ccs/bin)
AC_SUBST(AR) AC_SUBST(AR)
if test "x$AR" = "xar-was-not-found-by-configure"; then
AC_MSG_WARN([ar was not found, this may ruin your chances to build fine])
fi
dnl figure out the libcurl version dnl figure out the libcurl version
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curlver.h` VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curlver.h`
@@ -42,6 +54,17 @@ AC_SUBST(PKGADD_PKG)
AC_SUBST(PKGADD_NAME) AC_SUBST(PKGADD_NAME)
AC_SUBST(PKGADD_VENDOR) AC_SUBST(PKGADD_VENDOR)
dnl
dnl initialize all the info variables to 'no'
curl_ssl_msg="no (--with-ssl)"
curl_zlib_msg="no (--with-zlib)"
curl_krb4_msg="no (--with-krb4*)"
curl_gss_msg="no (--with-gssapi)"
curl_spnego_msg="no (--with-spnego)"
curl_ares_msg="no (--enable-ares)"
curl_ipv6_msg="no (--enable-ipv6)"
curl_idn_msg="no (--with-libidn)"
curl_manual_msg="no (--enable-manual)"
dnl dnl
dnl Detect the canonical host and target build environment dnl Detect the canonical host and target build environment
@@ -64,7 +87,7 @@ dnl check for cygwin stuff
AC_LIBTOOL_WIN32_DLL AC_LIBTOOL_WIN32_DLL
dnl libtool setup dnl libtool setup
AM_PROG_LIBTOOL AC_PROG_LIBTOOL
AC_MSG_CHECKING([if we need -no-undefined]) AC_MSG_CHECKING([if we need -no-undefined])
case $host in case $host in
@@ -79,6 +102,7 @@ AC_MSG_RESULT($need_no_undefined)
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes) AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
AC_MSG_CHECKING([if we need -mimpure-text]) AC_MSG_CHECKING([if we need -mimpure-text])
mimpure=no
case $host in case $host in
*-*-solaris2*) *-*-solaris2*)
if test "$GCC" = "yes"; then if test "$GCC" = "yes"; then
@@ -86,7 +110,6 @@ case $host in
fi fi
;; ;;
*) *)
mimpure=no
;; ;;
esac esac
AC_MSG_RESULT($mimpure) AC_MSG_RESULT($mimpure)
@@ -258,13 +281,13 @@ dnl At least one system has been identified to require BOTH nsl and socket
dnl libs at the same time to link properly. dnl libs at the same time to link properly.
if test "$HAVE_GETHOSTBYNAME" != "1" if test "$HAVE_GETHOSTBYNAME" != "1"
then then
AC_MSG_CHECKING([trying gethostbyname with both nsl and socket libs]) AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
my_ac_save_LIBS=$LIBS my_ac_save_LIBS=$LIBS
LIBS="-lnsl -lsocket $LIBS" LIBS="-lnsl -lsocket $LIBS"
AC_TRY_LINK( , AC_TRY_LINK( ,
[gethostbyname();], [gethostbyname();],
[ dnl found it! [ dnl found it!
HAVE_GETHOSTBYNAME="1", HAVE_GETHOSTBYNAME="1"
AC_MSG_RESULT([yes])], AC_MSG_RESULT([yes])],
[ dnl failed! [ dnl failed!
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
@@ -383,6 +406,8 @@ main()
)) ))
if test "$ipv6" = "yes"; then if test "$ipv6" = "yes"; then
curl_ipv6_msg="enabled"
CURL_CHECK_WORKING_GETADDRINFO CURL_CHECK_WORKING_GETADDRINFO
CURL_CHECK_NI_WITHSCOPEID CURL_CHECK_NI_WITHSCOPEID
@@ -535,7 +560,7 @@ then
AC_CHECK_HEADERS(krb.h) AC_CHECK_HEADERS(krb.h)
dnl we found the required libraries, add to LIBS dnl we found the required libraries, add to LIBS
LIBS="-lkrb -ldes $LIBS" LIBS="-lkrb -lcom_err -ldes $LIBS"
dnl Check for function krb_get_our_ip_for_realm dnl Check for function krb_get_our_ip_for_realm
dnl this is needed for NAT networks dnl this is needed for NAT networks
@@ -549,6 +574,8 @@ then
KRB4_ENABLED=1 KRB4_ENABLED=1
AC_SUBST(KRB4_ENABLED) AC_SUBST(KRB4_ENABLED)
curl_krb4_msg="enabled"
dnl the krb4 stuff needs a strlcpy() dnl the krb4 stuff needs a strlcpy()
AC_CHECK_FUNCS(strlcpy) AC_CHECK_FUNCS(strlcpy)
@@ -582,7 +609,9 @@ if test x"$want_spnego" = xyes; then
fi fi
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_SPNEGO, 1, [Define this if you have the SPNEGO library fbopenssl]) AC_DEFINE(HAVE_SPNEGO, 1,
[Define this if you have the SPNEGO library fbopenssl])
curl_spnego_msg="enabled"
fi fi
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -638,6 +667,8 @@ if test x"$want_gss" = xyes; then
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries]) AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
curl_gss_msg="enabled"
if test -n "$GSSAPI_INCS"; then if test -n "$GSSAPI_INCS"; then
# cut off the preceding -I from the include path # cut off the preceding -I from the include path
GSSAPI_INCS=`echo $GSSAPI_INCS | sed -e s/^-I//g` GSSAPI_INCS=`echo $GSSAPI_INCS | sed -e s/^-I//g`
@@ -653,33 +684,6 @@ else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
dnl Detect the pkg-config tool, as it may have extra info about the
dnl openssl installation we can use. I *believe* this is what we are
dnl expected to do on really recent Redhat Linux hosts.
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
if test "$PKGCONFIG" != "no" ; then
AC_MSG_CHECKING([for OpenSSL options using pkg-config])
$PKGCONFIG --exists openssl
SSL_EXISTS=$?
if test "$SSL_EXISTS" -eq "0"; then
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
LIBS="$LIBS $SSL_LIBS"
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
fi
dnl ********************************************************************** dnl **********************************************************************
dnl Check for the presence of SSL libraries and headers dnl Check for the presence of SSL libraries and headers
dnl ********************************************************************** dnl **********************************************************************
@@ -698,36 +702,68 @@ then
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more]) AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more])
else else
dnl Check for and handle argument to --with-ssl. dnl backup the pre-ssl variables
dnl save the pre-ssl check flags for a while
CLEANLDFLAGS="$LDFLAGS" CLEANLDFLAGS="$LDFLAGS"
CLEANCPPFLAGS="$CPPFLAGS" CLEANCPPFLAGS="$CPPFLAGS"
CLEANLIBS="$LIBS"
case "$OPT_SSL" in case "$OPT_SSL" in
yes) yes)
dnl --with-ssl (without path) used
PKGTEST="yes"
EXTRA_SSL=/usr/local/ssl ;; EXTRA_SSL=/usr/local/ssl ;;
off) off)
dnl no --with-ssl option given, just check default places
PKGTEST="yes"
EXTRA_SSL= ;; EXTRA_SSL= ;;
*) *)
dnl check the given spot right away! dnl check the given --with-ssl spot
PKGTEST="no"
EXTRA_SSL=$OPT_SSL EXTRA_SSL=$OPT_SSL
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib$libsuff" LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib$libsuff"
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include" CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
;; ;;
esac esac
if test "$PKGTEST" = "yes"; then
dnl Detect the pkg-config tool, as it may have extra info about the
dnl openssl installation we can use. I *believe* this is what we are
dnl expected to do on really recent Redhat Linux hosts.
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
if test "$PKGCONFIG" != "no" ; then
AC_MSG_CHECKING([OpenSSL options with pkg-config])
$PKGCONFIG --exists openssl
SSL_EXISTS=$?
if test "$SSL_EXISTS" -eq "0"; then
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
dnl use the values pkg-config reported
LIBS="$LIBS $SSL_LIBS"
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
AC_MSG_RESULT([found])
else
AC_MSG_RESULT([no])
fi
fi
fi
AC_CHECK_LIB(crypto, CRYPTO_lock,[ AC_CHECK_LIB(crypto, CRYPTO_lock,[
HAVECRYPTO="yes" HAVECRYPTO="yes"
],[ ],[
OLDLDFLAGS="$LDFLAGS"
OLDCPPFLAGS="$CPPFLAGS"
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib$libsuff" LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib$libsuff"
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include" CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[ AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
HAVECRYPTO="yes" ], [ HAVECRYPTO="yes" ], [
LDFLAGS="$OLDLDFLAGS" LDFLAGS="$CLEANLDFLAGS"
CPPFLAGS="$OLDCPPFLAGS" CPPFLAGS="$CLEANCPPFLAGS"
LIBS="$CLEANLIBS"
]) ])
]) ])
@@ -772,10 +808,12 @@ else
dnl Check for SSLeay headers dnl Check for SSLeay headers
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \ AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
openssl/pem.h openssl/ssl.h openssl/err.h, openssl/pem.h openssl/ssl.h openssl/err.h,
curl_ssl_msg="enabled"
OPENSSL_ENABLED=1) OPENSSL_ENABLED=1)
if test $ac_cv_header_openssl_x509_h = no; then if test $ac_cv_header_openssl_x509_h = no; then
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h, AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
curl_ssl_msg="enabled"
OPENSSL_ENABLED=1) OPENSSL_ENABLED=1)
fi fi
@@ -896,6 +934,7 @@ case "$OPT_ZLIB" in
dnl replace 'HAVE_LIBZ' in the automake makefile.ams dnl replace 'HAVE_LIBZ' in the automake makefile.ams
AMFIXLIB="1" AMFIXLIB="1"
AC_MSG_NOTICE([found both libz and libz.h header]) AC_MSG_NOTICE([found both libz and libz.h header])
curl_zlib_msg="enabled"
fi fi
;; ;;
esac esac
@@ -903,6 +942,48 @@ esac
dnl set variable for use in automakefile(s) dnl set variable for use in automakefile(s)
AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1) AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
AC_MSG_CHECKING([whether to build with libidn])
AC_ARG_WITH(libidn,
AC_HELP_STRING([--with-libidn=PATH],[Enable libidn usage])
AC_HELP_STRING([--without-libidn],[Disable libidn usage]),
[LIBIDN="$withval"])
case "$LIBIDN" in
no)
AC_MSG_RESULT(no)
;;
*) AC_MSG_RESULT(yes)
idn=""
dnl if there is a given path, check that FIRST
if test "x$LIBIDN" != "xyes"; then
oldLDFLAGS=$LDFLAGS
oldCPPFLAGS=$CPPFLAGS
LDFLAGS="$LDFLAGS -L$LIBIDN/lib"
CPPFLAGS="$CPPFLAGS -I$LIBIDN/include"
idn="yes"
AC_CHECK_LIB(idn, idna_to_ascii_4i, ,
idn=""
LDFLAGS=$oldLDFLAGS
CPPFLAGS=$oldCPPFLAGS)
fi
if test "x$idn" != "xyes"; then
dnl check with default paths
AC_CHECK_LIB(idn, idna_to_ascii_lz, ,
idn="")
fi
if test "x$idn" = "xyes"; then
curl_idn_msg="enabled"
dnl different versions of libidn have different setups of these:
AC_CHECK_FUNCS( idn_free idna_strerror tld_strerror)
AC_CHECK_HEADERS( idn-free.h )
fi
;;
esac
dnl Default is to try the thread-safe versions of a few functions dnl Default is to try the thread-safe versions of a few functions
OPT_THREAD=on OPT_THREAD=on
@@ -946,7 +1027,7 @@ else
CURL_CHECK_GETHOSTBYNAME_R() CURL_CHECK_GETHOSTBYNAME_R()
dnl dig around for gethostbyaddr_r() dnl dig around for gethostbyaddr_r()
CURL_CHECK_GETHOSTBYADDR_R() dnl CURL_CHECK_GETHOSTBYADDR_R()
fi fi
dnl poke around for inet_ntoa_r() dnl poke around for inet_ntoa_r()
@@ -970,6 +1051,24 @@ dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
dnl genprogc/thread_quick_ref.htm dnl genprogc/thread_quick_ref.htm
if test "x$RECENTAIX" = "xyes"; then if test "x$RECENTAIX" = "xyes"; then
AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
dnl check if this is the IMB xlc compiler
dnl Details thanks to => http://predef.sourceforge.net/
AC_MSG_CHECKING([if this is the xlc compiler])
AC_EGREP_CPP([^__xlC__], [__xlC__],
dnl action if the text is found, this it has not been replaced by the
dnl cpp
XLC="no"
AC_MSG_RESULT([no]),
dnl the text was not found, it was replaced by the cpp
XLC="yes"
AC_MSG_RESULT([yes])
CFLAGS="$CFLAGS -qthreaded"
)
dnl is there a localtime_r() dnl is there a localtime_r()
CURL_CHECK_LOCALTIME_R() CURL_CHECK_LOCALTIME_R()
@@ -1021,6 +1120,7 @@ AC_CHECK_HEADERS(
utime.h \ utime.h \
sys/utime.h \ sys/utime.h \
sys/poll.h \ sys/poll.h \
libgen.h \
setjmp.h, setjmp.h,
dnl to do if not found dnl to do if not found
[], [],
@@ -1055,9 +1155,23 @@ AC_CHECK_SIZEOF(curl_off_t, ,[
#include <stdio.h> #include <stdio.h>
#include "$srcdir/include/curl/curl.h" #include "$srcdir/include/curl/curl.h"
]) ])
AC_CHECK_SIZEOF(size_t)
AC_CHECK_SIZEOF(long)
AC_CHECK_TYPE(long long, AC_CHECK_TYPE(long long,
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports 'long long'])]) [AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
longlong="yes"
)
if test "xyes" = "x$longlong"; then
AC_MSG_CHECKING([if numberLL works])
AC_COMPILE_IFELSE([long long val = 1000LL;],
[AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])]
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no)
)
fi
# check for ssize_t # check for ssize_t
AC_CHECK_TYPE(ssize_t, , AC_CHECK_TYPE(ssize_t, ,
@@ -1102,6 +1216,7 @@ AC_CHECK_FUNCS( strtoll \
dlopen \ dlopen \
utime \ utime \
sigsetjmp \ sigsetjmp \
basename \
poll, poll,
dnl if found dnl if found
[], [],
@@ -1132,6 +1247,41 @@ if test "$ac_cv_func_sigsetjmp" != "yes"; then
) )
fi fi
AC_CHECK_DECL(basename, ,
AC_DEFINE(NEED_BASENAME_PROTO, 1, [If you lack a fine basename() prototype]),
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_LIBGEN_H
#include <libgen.h>
#endif
)
dnl poll() might be badly emulated, as in Mac OS X 10.3 (and other BSDs?) and
dnl to find out we make an extra check here!
if test "$ac_cv_func_poll" = "yes"; then
AC_MSG_CHECKING([if poll works with NULL inputs])
AC_RUN_IFELSE([
#ifdef HAVE_SYS_POLL_H
#include <sys/poll.h>
#endif
int main(void)
{
/* make this return 0 == timeout since there's nothing to read from */
return poll((void *)0, 0, 10 /*ms*/);
}
],
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_POLL_FINE, 1, [If you have a fine poll]),
AC_MSG_RESULT(no),
AC_MSG_RESULT(cross-compiling assumes yes)
AC_DEFINE(HAVE_POLL_FINE, 1, [If you have a fine poll])
) dnl end of AC_RUN_IFELSE
fi
AC_PATH_PROG( PERL, perl, , AC_PATH_PROG( PERL, perl, ,
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin ) $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
AC_SUBST(PERL) AC_SUBST(PERL)
@@ -1170,63 +1320,18 @@ then
USE_MANUAL="no"; USE_MANUAL="no";
fi fi
AC_PROG_YACC
if test -z "$YACC"
then
AC_MSG_CHECKING([if OK to build without bison/yacc])
dnl no yacc is a big deal if we have no pre-fixed getdate.y
if test -r "$srcdir/lib/getdate.c"
then
dnl all is well, we don't have to generate it!
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
AC_MSG_ERROR([no yacc or bison found, can't build libcurl!])
fi
fi
dnl ************************************************************************* dnl *************************************************************************
dnl If the manual variable still is set, then we go with providing a built-in dnl If the manual variable still is set, then we go with providing a built-in
dnl manual dnl manual
if test "$USE_MANUAL" = "1"; then if test "$USE_MANUAL" = "1"; then
AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual]) AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual])
curl_manual_msg="enabled"
fi fi
dnl set variable for use in automakefile(s) dnl set variable for use in automakefile(s)
AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1) AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1)
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
dnl $PATH:/usr/bin/:/usr/local/bin )
dnl AC_SUBST(RANLIB)
dnl ************************************************************
dnl lame option to switch on debug options
dnl
AC_MSG_CHECKING([whether to enable debug options])
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
AC_HELP_STRING([--disable-debug],[Disable debug options]),
[ case "$enableval" in
no)
AC_MSG_RESULT(no)
;;
*) AC_MSG_RESULT(yes)
CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
CFLAGS="$CFLAGS -g"
dnl set compiler "debug" options to become more picky, and remove
dnl optimize options from CFLAGS
CURL_CC_DEBUG_OPTS
;;
esac
],
AC_MSG_RESULT(no)
)
AC_MSG_CHECKING([whether to enable ares]) AC_MSG_CHECKING([whether to enable ares])
AC_ARG_ENABLE(ares, AC_ARG_ENABLE(ares,
AC_HELP_STRING([--enable-ares=PATH],[Enable ares for name lookups]) AC_HELP_STRING([--enable-ares=PATH],[Enable ares for name lookups])
@@ -1245,6 +1350,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
dnl substitute HAVE_ARES for curl-config and similar dnl substitute HAVE_ARES for curl-config and similar
HAVE_ARES="1" HAVE_ARES="1"
AC_SUBST(HAVE_ARES) AC_SUBST(HAVE_ARES)
curl_ares_msg="enabled"
LIBS="$LIBS -lcares" LIBS="$LIBS -lcares"
@@ -1299,6 +1405,33 @@ int main(void)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
) )
dnl ************************************************************
dnl lame option to switch on debug options
dnl
AC_MSG_CHECKING([whether to enable debug options])
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
AC_HELP_STRING([--disable-debug],[Disable debug options]),
[ case "$enableval" in
no)
AC_MSG_RESULT(no)
;;
*) AC_MSG_RESULT(yes)
CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
CFLAGS="$CFLAGS -g"
dnl set compiler "debug" options to become more picky, and remove
dnl optimize options from CFLAGS
CURL_CC_DEBUG_OPTS
;;
esac
],
AC_MSG_RESULT(no)
)
AM_CONDITIONAL(CROSSCOMPILING, test x$cross_compiling = xyes)
AC_CONFIG_FILES([Makefile \ AC_CONFIG_FILES([Makefile \
docs/Makefile \ docs/Makefile \
docs/examples/Makefile \ docs/examples/Makefile \
@@ -1326,3 +1459,21 @@ AC_CONFIG_FILES([Makefile \
curl-config curl-config
]) ])
AC_OUTPUT AC_OUTPUT
AC_MSG_NOTICE([Configured to build curl/libcurl:
curl version: ${VERSION}
Host setup: ${host}
Install prefix: ${prefix}
Compiler: ${CC}
SSL support: ${curl_ssl_msg}
zlib support: ${curl_zlib_msg}
krb4 support: ${curl_krb4_msg}
GSSAPI support: ${curl_gss_msg}
SNPEGO support: ${curl_spnego_msg}
c-ares support: ${curl_ares_msg}
ipv6 support: ${curl_ipv6_msg}
IDN support: ${curl_idn_msg}
Build libcurl: Shared=${enable_shared}, Static=${enable_static}
Built-in manual: ${curl_manual_msg}
])

View File

@@ -20,6 +20,13 @@
) )
"Curl C Programming Style") "Curl C Programming Style")
(defun curl-code-cleanup ()
"no docs"
(interactive)
(untabify (point-min) (point-max))
(delete-trailing-whitespace)
)
;; Customizations for all of c-mode, c++-mode, and objc-mode ;; Customizations for all of c-mode, c++-mode, and objc-mode
(defun curl-c-mode-common-hook () (defun curl-c-mode-common-hook ()
"Curl C mode hook" "Curl C mode hook"
@@ -28,12 +35,15 @@
(setq tab-width 8 (setq tab-width 8
indent-tabs-mode nil ; Use spaces. Not tabs. indent-tabs-mode nil ; Use spaces. Not tabs.
comment-column 40 comment-column 40
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t" "curl_off_t" "curl_socket_t" "in_addr_t" "CURLSHcode" "CURLMcode")) c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t" "curl_off_t" "curl_socket_t" "in_addr_t" "CURLSHcode" "CURLMcode" "Curl_addrinfo"))
) )
;; keybindings for C, C++, and Objective-C. We can put these in ;; keybindings for C, C++, and Objective-C. We can put these in
;; c-mode-base-map because of inheritance ... ;; c-mode-base-map because of inheritance ...
(define-key c-mode-base-map "\M-q" 'c-fill-paragraph) (define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
(define-key c-mode-base-map "\M-m" 'curl-code-cleanup)
(setq c-recognize-knr-p nil) (setq c-recognize-knr-p nil)
;;; (add-hook 'write-file-hooks 'delete-trailing-whitespace t)
(setq show-trailing-whitespace t)
) )
;; Set this is in your .emacs if you want to use the c-mode-hook as ;; Set this is in your .emacs if you want to use the c-mode-hook as

View File

@@ -17,22 +17,27 @@ archives, but must be downloaded and installed separately.
Ada95 Ada95
Writtten by Andreas Almroth. Writtten by Andreas Almroth
http://www.almroth.com/adacurl/index.html http://www.almroth.com/adacurl/index.html
Basic Basic
ScriptBasic bindings to libcurl. Writtten by Peter Verhas. ScriptBasic bindings to libcurl. Writtten by Peter Verhas
http://scriptbasic.com/ http://scriptbasic.com/
C++ C++
Written by Jean-Philippe Barrette-LaPierre. Written by Jean-Philippe Barrette-LaPierre
http://www.sourceforge.net/projects/curlpp http://www.sourceforge.net/projects/curlpp
Ch
Written by Stephen Nestinger and Jonathan Rogado
http://chcurl.sourceforge.net/
Cocoa Cocoa
Written by Dan Wood. Written by Dan Wood
http://curlhandle.sourceforge.net/ http://curlhandle.sourceforge.net/
D D
@@ -42,25 +47,33 @@ D
Dylan Dylan
Written by Chris Double. Written by Chris Double
http://dylanlibs.sourceforge.net/ http://dylanlibs.sourceforge.net/
Euphoria Euphoria
Written by Ray Smith. Written by Ray Smith
http://rays-web.com/eulibcurl.htm http://rays-web.com/eulibcurl.htm
Ferite Ferite
Written by Paul Querna
http://www.ferite.org/ http://www.ferite.org/
Gambas
http://gambas.sourceforge.net
glib/GTK+
Written by Richard Atterer
http://atterer.net/glibcurl/
Java Java
Written by Daniel Stenberg. Written by Daniel Stenberg
http://curl.haxx.se/libcurl/java/ http://curl.haxx.se/libcurl/java/
Lua Lua
Written by Steve Dekorte. Written by Steve Dekorte
http://curl.haxx.se/libcurl/lua/ http://curl.haxx.se/libcurl/lua/
Object-Pascal Object-Pascal
@@ -70,7 +83,7 @@ Object-Pascal
O'Caml O'Caml
Written by Lars Nilsson. Written by Lars Nilsson
http://sourceforge.net/projects/ocurl/ http://sourceforge.net/projects/ocurl/
Pascal Pascal
@@ -80,40 +93,49 @@ Pascal
Perl Perl
Maintained by Cris Bailiff. Maintained by Cris Bailiff
http://curl.haxx.se/libcurl/perl/ http://curl.haxx.se/libcurl/perl/
PHP PHP
Written by Sterling Hughes. Written by Sterling Hughes
http://curl.haxx.se/libcurl/php/ http://curl.haxx.se/libcurl/php/
PostgreSQL PostgreSQL
Written by Gian Paolo Ciceri. Written by Gian Paolo Ciceri
http://gborg.postgresql.org/project/pgcurl/projdisplay.php http://gborg.postgresql.org/project/pgcurl/projdisplay.php
Python Python
Written by Kjetil Jacobsen. Written by Kjetil Jacobsen
http://pycurl.sourceforge.net/ http://pycurl.sourceforge.net/
Rexx Rexx
Written Mark Hessling. Written Mark Hessling
http://rexxcurl.sourceforge.net/ http://rexxcurl.sourceforge.net/
Ruby Ruby
Written by Hirotaka Matsuyuki. Written by Hirotaka Matsuyuki
http://www.d1.dion.ne.jp/~matuyuki/ruby.html http://www.d1.dion.ne.jp/~matuyuki/ruby.html
Scheme Scheme
Bigloo binding written by Kirill Lisovsky. Bigloo binding written by Kirill Lisovsky
http://curl.haxx.se/libcurl/scheme/ http://curl.haxx.se/libcurl/scheme/
Tcl Tcl
Written by Andr<64>s Garc<72>a. Written by Andr<64>s Garc<72>a
http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html
Q
http://q-lang.sourceforge.net/
wxWidgets
Written by Casey O'Donnell
http://homepage.mac.com/codonnell/wxcurldav/

View File

@@ -138,15 +138,15 @@ How To Make a Patch
If you have modified a single file, try something like: If you have modified a single file, try something like:
diff -u undmodified-file.c my-changed-one.c > my-fixes.diff diff -u unmodified-file.c my-changed-one.c > my-fixes.diff
If you have modified several files, possibly in different directories, you If you have modified several files, possibly in different directories, you
can use diff recursively: can use diff recursively:
diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff diff -ur curl-original-dir curl-modified-sources-dir > my-fixes.diff
The GNU diff and GNU patch tools exist for virtually all platforms, including The GNU diff and GNU patch tools exist for virtually all platforms, including
all kinds of unixes and Windows: all kinds of Unixes and Windows:
For unix-like operating systems: For unix-like operating systems:

232
docs/FAQ
View File

@@ -1,4 +1,4 @@
Updated: March 16, 2004 (http://curl.haxx.se/docs/faq.html) Updated: August 18, 2004 (http://curl.haxx.se/docs/faq.html)
_ _ ____ _ _ _ ____ _
___| | | | _ \| | ___| | | | _ \| |
/ __| | | | |_) | | / __| | | | |_) | |
@@ -10,20 +10,20 @@ FAQ
1. Philosophy 1. Philosophy
1.1 What is cURL? 1.1 What is cURL?
1.2 What is libcurl? 1.2 What is libcurl?
1.3 What is cURL not? 1.3 What is curl not?
1.4 When will you make curl do XXXX ? 1.4 When will you make curl do XXXX ?
1.5 Who makes cURL? 1.5 Who makes curl?
1.6 What do you get for making cURL? 1.6 What do you get for making curl?
1.7 What about CURL from curl.com? 1.7 What about CURL from curl.com?
1.8 I have a problem who do I mail? 1.8 I have a problem who do I mail?
2. Install Related Problems 2. Install Related Problems
2.1 configure doesn't find OpenSSL even when it is installed 2.1 configure doesn't find OpenSSL even when it is installed
2.1.1. native linker doesn't find OpenSSL 2.1.1 native linker doesn't find OpenSSL
2.1.2. only the libssl lib is missing 2.1.2 only the libssl lib is missing
2.2 Does curl work/build with other SSL libraries? 2.2 Does curl work/build with other SSL libraries?
2.3 Where can I find a copy of LIBEAY32.DLL? 2.3 Where can I find a copy of LIBEAY32.DLL?
2.4 Does cURL support Socks (RFC 1928) ? 2.4 Does curl support Socks (RFC 1928) ?
3. Usage Problems 3. Usage Problems
3.1 curl: (1) SSL is disabled, https: not supported 3.1 curl: (1) SSL is disabled, https: not supported
@@ -41,6 +41,7 @@ FAQ
3.13 Why does my single/double quotes fail? 3.13 Why does my single/double quotes fail?
3.14 Does curl support javascript or pac (automated proxy config)? 3.14 Does curl support javascript or pac (automated proxy config)?
3.15 Can I do recursive fetches with curl? 3.15 Can I do recursive fetches with curl?
3.16 What certificates do I need when I use SSL?
4. Running Problems 4. Running Problems
4.1 Problems connecting to SSL servers. 4.1 Problems connecting to SSL servers.
@@ -70,6 +71,8 @@ FAQ
5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ? 5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ?
5.6 What about Keep-Alive or persistent connections? 5.6 What about Keep-Alive or persistent connections?
5.7 Link errors when building libcurl on Windows! 5.7 Link errors when building libcurl on Windows!
5.8 libcurl.so.3: open failed: No such file or directory
5.9 How does libcurl resolve host names?
6. License Issues 6. License Issues
6.1 I have a GPL program, can I use the libcurl library? 6.1 I have a GPL program, can I use the libcurl library?
@@ -79,24 +82,50 @@ FAQ
6.5 Can I modify curl/libcurl for my program and keep the changes secret? 6.5 Can I modify curl/libcurl for my program and keep the changes secret?
6.6 Can you please change the curl/libcurl license to XXXX? 6.6 Can you please change the curl/libcurl license to XXXX?
7. PHP/CURL Issues
7.1 What is PHP/CURL?
7.2 Who write PHP/CURL?
7.3 Can I perform multiple requests using the same handle?
============================================================================== ==============================================================================
1. Philosophy 1. Philosophy
1.1 What is cURL? 1.1 What is cURL?
cURL (or simply just 'curl') is a command line tool for getting or sending cURL is the name of the project. The name is a play on 'Client for URLs',
files using URL syntax. The name is a play on 'Client for URLs', originally originally with URL spelled in uppercase to make it obvious it deals with
with URL spelled in uppercase to make it obvious it deals with URLs. The URLs. The fact it can also be pronounced 'see URL' also helped, it works as
fact it can also be pronounced 'see URL' also helped, it works as an an abbrivation for "Client URL Request Library" or why not the recursive
abbrivation for "Client URL Request Library" or why not the recursive
version: "Curl URL Request Library". version: "Curl URL Request Library".
Curl supports a range of common Internet protocols, currently including The cURL project produces two products:
HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE.
We spell it cURL or just curl. We pronounce it with an initial k sound: libcurl
[kurl].
A free and easy-to-use client-side URL transfer library, supporting FTP,
FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports
HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP
form based upload, proxies, cookies, user+password authentication, file
transfer resume, http proxy tunneling and more!
libcurl is highly portable, it builds and works identically on numerous
platforms, including Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX,
IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac
OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS and more...
libcurl is free, thread-safe, IPv6 compatible, feature rich, well
supported and fast.
curl
A command line tool for getting or sending files using URL syntax.
Since curl uses libcurl, it supports a range of common Internet protocols,
currently including HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and
FILE.
We pronounce curl and cURL with an initial k sound: [kurl].
NOTE: there are numerous sub-projects and related projects that also use the NOTE: there are numerous sub-projects and related projects that also use the
word curl in the project names in various combinations, but you should take word curl in the project names in various combinations, but you should take
@@ -112,7 +141,7 @@ FAQ
You can use libcurl for free in your application, be it open source, You can use libcurl for free in your application, be it open source,
commercial or closed-source. commercial or closed-source.
1.3 What is cURL not? 1.3 What is curl not?
Curl is *not* a wget clone. That is a common misconception. Never, during Curl is *not* a wget clone. That is a common misconception. Never, during
curl's development, have we intended curl to replace wget or compete on its curl's development, have we intended curl to replace wget or compete on its
@@ -127,7 +156,7 @@ FAQ
script (or write a new program that interfaces libcurl) and do it. script (or write a new program that interfaces libcurl) and do it.
Curl is not a PHP tool, even though it works perfectly well when used from Curl is not a PHP tool, even though it works perfectly well when used from
or with PHP. or with PHP (when using the PHP/CURL module).
Curl is not a single-OS program. Curl exists, compiles, builds and runs Curl is not a single-OS program. Curl exists, compiles, builds and runs
under a wide range of operating systems, including all modern Unixes (and a under a wide range of operating systems, including all modern Unixes (and a
@@ -161,9 +190,9 @@ FAQ
* If you write the code, chances are bigger that it will get into curl * If you write the code, chances are bigger that it will get into curl
faster. faster.
1.5 Who makes cURL? 1.5 Who makes curl?
cURL and libcurl are not made by any single individual. Sure, Daniel curl and libcurl are not made by any single individual. Sure, Daniel
Stenberg writes the major parts, but other persons' submissions are Stenberg writes the major parts, but other persons' submissions are
important and crucial. Anyone can contribute and post their changes and important and crucial. Anyone can contribute and post their changes and
improvements and have them inserted in the main sources (of course on the improvements and have them inserted in the main sources (of course on the
@@ -175,14 +204,16 @@ FAQ
curl is developed by a community, with Daniel at the wheel. curl is developed by a community, with Daniel at the wheel.
1.6 What do you get for making cURL? 1.6 What do you get for making curl?
Project cURL is entirely free and open. No person gets paid for developing Project cURL is entirely free and open. No person gets paid for developing
curl. We do this voluntarily on our spare time. (lib)curl. We do this voluntarily on our spare time.
We get some help from companies. Contactor Data hosts the curl web site, We get some help from companies. Contactor Data hosts the curl web site,
Haxx owns the curl web site's domain and sourceforge.net hosts project Haxx owns the curl web site's domain and sourceforge.net hosts project
services we take advantage from, like the bug tracker. services we take advantage from, like the bug tracker. Also, some companies
have sponsored certain parts of the development in the past and I hope some
will continue to do so in the future.
If you want to support our project with a donation or similar, one way of If you want to support our project with a donation or similar, one way of
doing that would be to buy "gift certificates" at useful online shopping doing that would be to buy "gift certificates" at useful online shopping
@@ -223,11 +254,11 @@ FAQ
2. Install Related Problems 2. Install Related Problems
2.1. configure doesn't find OpenSSL even when it is installed 2.1 configure doesn't find OpenSSL even when it is installed
This may be because of several reasons. This may be because of several reasons.
2.1.1. native linker doesn't find openssl 2.1.1 native linker doesn't find openssl
Affected platforms: Affected platforms:
Solaris (native cc compiler) Solaris (native cc compiler)
@@ -249,7 +280,7 @@ FAQ
Solution submitted by: Bob Allison <allisonb@users.sourceforge.net> Solution submitted by: Bob Allison <allisonb@users.sourceforge.net>
2.1.2. only the libssl lib is missing 2.1.2 only the libssl lib is missing
If all include files and the libcrypto lib is present, with only the If all include files and the libcrypto lib is present, with only the
libssl being missing according to configure, this is mostly likely because libssl being missing according to configure, this is mostly likely because
@@ -262,14 +293,14 @@ FAQ
configure. Make sure that you remove the config.cache file before you configure. Make sure that you remove the config.cache file before you
rerun configure with the new flags. rerun configure with the new flags.
2.2. Does curl work/build with other SSL libraries? 2.2 Does curl work/build with other SSL libraries?
Curl has been written to use OpenSSL, although there should not be much Curl has been written to use OpenSSL, although there should not be much
problems using a different library. If anyone does "port" curl to use a problems using a different library. If anyone does "port" curl to use a
different SSL library, we are of course very interested in getting the different SSL library, we are of course very interested in getting the
patch! patch!
2.3. Where can I find a copy of LIBEAY32.DLL? 2.3 Where can I find a copy of LIBEAY32.DLL?
That is an OpenSSL binary built for Windows. That is an OpenSSL binary built for Windows.
@@ -278,14 +309,14 @@ FAQ
accurate and up-to-date pointers to recent OpenSSL DLLs and other binary accurate and up-to-date pointers to recent OpenSSL DLLs and other binary
packages. packages.
2.4. Does cURL support Socks (RFC 1928) ? 2.4 Does curl support Socks (RFC 1928) ?
Yes, SOCKS5 is supported when curl is built with IPv6 support disabled. Yes, SOCKS5 is supported.
3. Usage problems 3. Usage problems
3.1. curl: (1) SSL is disabled, https: not supported 3.1 curl: (1) SSL is disabled, https: not supported
If you get this output when trying to get anything from a https:// server, If you get this output when trying to get anything from a https:// server,
it means that the configure script couldn't find all libs and include files it means that the configure script couldn't find all libs and include files
@@ -300,13 +331,13 @@ FAQ
Also, check out the other paragraph in this FAQ labeled "configure doesn't Also, check out the other paragraph in this FAQ labeled "configure doesn't
find OpenSSL even when it is installed". find OpenSSL even when it is installed".
3.2. How do I tell curl to resume a transfer? 3.2 How do I tell curl to resume a transfer?
Curl supports resumed transfers both ways on both FTP and HTTP. Curl supports resumed transfers both ways on both FTP and HTTP.
Try the -C option. Try the -C option.
3.3. Why doesn't my posting using -F work? 3.3 Why doesn't my posting using -F work?
You can't simply use -F or -d at your choice. The web server that will You can't simply use -F or -d at your choice. The web server that will
receive your post assumes one of the formats. If the form you're trying to receive your post assumes one of the formats. If the form you're trying to
@@ -320,7 +351,7 @@ FAQ
through the mailing list archives for old postings and questions regarding through the mailing list archives for old postings and questions regarding
this. this.
3.4. How do I tell curl to run custom FTP commands? 3.4 How do I tell curl to run custom FTP commands?
You can tell curl to perform optional commands both before and/or after a You can tell curl to perform optional commands both before and/or after a
file transfer. Study the -Q/--quote option. file transfer. Study the -Q/--quote option.
@@ -329,13 +360,13 @@ FAQ
FTP commands without transferring anything. Therefore you must always specify FTP commands without transferring anything. Therefore you must always specify
a URL to transfer to/from even when doing custom FTP commands. a URL to transfer to/from even when doing custom FTP commands.
3.5. How can I disable the Pragma: nocache header? 3.5 How can I disable the Pragma: nocache header?
You can change all internally generated headers by adding a replacement with You can change all internally generated headers by adding a replacement with
the -H/--header option. By adding a header with empty contents you safely the -H/--header option. By adding a header with empty contents you safely
disable that one. Use -H "Pragma:" to disable that specific header. disable that one. Use -H "Pragma:" to disable that specific header.
3.6. Does curl support ASP, XML, XHTML or HTML version Y? 3.6 Does curl support ASP, XML, XHTML or HTML version Y?
To curl, all contents are alike. It doesn't matter how the page was To curl, all contents are alike. It doesn't matter how the page was
generated. It may be ASP, PHP, Perl, shell-script, SSI or plain generated. It may be ASP, PHP, Perl, shell-script, SSI or plain
@@ -344,7 +375,7 @@ FAQ
See also item 3.14 regarding javascript. See also item 3.14 regarding javascript.
3.7. Can I use curl to delete/rename a file through FTP? 3.7 Can I use curl to delete/rename a file through FTP?
Yes. You specify custom FTP commands with -Q/--quote. Yes. You specify custom FTP commands with -Q/--quote.
@@ -369,7 +400,6 @@ FAQ
Find out more about which languages that support curl directly, and how to Find out more about which languages that support curl directly, and how to
install and use them, in the libcurl section of the curl web site: install and use them, in the libcurl section of the curl web site:
http://curl.haxx.se/libcurl/ http://curl.haxx.se/libcurl/
In February 2003, there are interfaces available for the following In February 2003, there are interfaces available for the following
@@ -456,15 +486,44 @@ FAQ
3.15 Can I do recursive fetches with curl? 3.15 Can I do recursive fetches with curl?
No. curl itself has no code that performs recursive operations, such as No. curl itself has no code that performs recursive operations, such as
those performed by wget. those performed by wget and similar tools.
There exist wrapper scripts with that functionality (for example the There exist wrapper scripts with that functionality (for example the
curlmirror perl script), and you can write programs based on libcurl to do curlmirror perl script), and you can write programs based on libcurl to do
it, but the command line tool curl itself cannot. it, but the command line tool curl itself cannot.
3.16 What certificates do I need when I use SSL?
There are three different kinds of "certificates" to keep track of when we
talk about using SSL-based protocols (HTTPS or FTPS) using curl or libcurl.
- Client certificate. The server you communicate may require that you can
provide this in order to prove that you actually are who you claim to be.
If the server doesn't require this, you don't need a client certificate.
- Server certificate. The server you communicate with has a server
certificate. You can and should verify this certficate to make sure that
you are truly talking to the real server and not a server impersonating
it. The server certificate verifaction process is made by using a
Certificate Authority certificate ("CA cert") that was used to sign the
server certificate. Server certificate verification is enabled by default
in curl and libcurl and is often the reason for problems as explained in
FAQ entry 4.12 and the SSLCERTS document
(http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
"self-signed" or otherwise signed by a CA that you do not have a CA cert
for, cannot be verified. If the verification during a connect fails, you
are refused access. You then need to explicitly disable the verification
to connect to the server.
- Certificate Authority certificate ("CA cert"). You often have several CA
certs in a CA cert bundle that can be used to verify a server certificate
that was signed by one of the authorities in the bundle. curl comes with a
default CA cert bundle. You can override the default.
4. Running Problems 4. Running Problems
4.1. Problems connecting to SSL servers. 4.1 Problems connecting to SSL servers.
It took a very long time before we could sort out why curl had problems to It took a very long time before we could sort out why curl had problems to
connect to certain SSL servers when using SSLeay or OpenSSL v0.9+. The connect to certain SSL servers when using SSLeay or OpenSSL v0.9+. The
@@ -479,7 +538,7 @@ FAQ
There have also been examples where the remote server didn't like the SSLv2 There have also been examples where the remote server didn't like the SSLv2
request and instead you had to force curl to use SSLv3 with -3/--sslv3. request and instead you had to force curl to use SSLv3 with -3/--sslv3.
4.2. Why do I get problems when I use & or % in the URL? 4.2 Why do I get problems when I use & or % in the URL?
In general unix shells, the & letter is treated special and when used, it In general unix shells, the & letter is treated special and when used, it
runs the specified command in the background. To safely send the & as a part runs the specified command in the background. To safely send the & as a part
@@ -497,7 +556,7 @@ FAQ
pass in a POST using -d/--data you must encode it as '%25' (which then also pass in a POST using -d/--data you must encode it as '%25' (which then also
needs the %-letter doubled on Windows machines). needs the %-letter doubled on Windows machines).
4.3. How can I use {, }, [ or ] to specify multiple URLs? 4.3 How can I use {, }, [ or ] to specify multiple URLs?
Because those letters have a special meaning to the shell, and to be used in Because those letters have a special meaning to the shell, and to be used in
a URL specified to curl you must quote them. a URL specified to curl you must quote them.
@@ -511,7 +570,7 @@ FAQ
curl -g 'www.site.com/weirdname[].html' curl -g 'www.site.com/weirdname[].html'
4.4. Why do I get downloaded data even though the web page doesn't exist? 4.4 Why do I get downloaded data even though the web page doesn't exist?
Curl asks remote servers for the page you specify. If the page doesn't exist Curl asks remote servers for the page you specify. If the page doesn't exist
at the server, the HTTP protocol defines how the server should respond and at the server, the HTTP protocol defines how the server should respond and
@@ -562,14 +621,14 @@ FAQ
slash. Try the same operation again _with_ the trailing URL, or use the slash. Try the same operation again _with_ the trailing URL, or use the
-L/--location option to follow the redirection. -L/--location option to follow the redirection.
4.6. Can you tell me what error code 142 means? 4.6 Can you tell me what error code 142 means?
All error codes that are larger than the highest documented error code means All error codes that are larger than the highest documented error code means
that curl has exited due to a crash. This is a serious error, and we that curl has exited due to a crash. This is a serious error, and we
appreciate a detailed bug report from you that describes how we could go appreciate a detailed bug report from you that describes how we could go
ahead and repeat this! ahead and repeat this!
4.7. How do I keep user names and passwords secret in Curl command lines? 4.7 How do I keep user names and passwords secret in Curl command lines?
This problem has two sides: This problem has two sides:
@@ -603,7 +662,7 @@ FAQ
If there is a bug, read the BUGS document first. Then report it as described If there is a bug, read the BUGS document first. Then report it as described
in there. in there.
4.9. Curl can't authenticate to the server that requires NTLM? 4.9 Curl can't authenticate to the server that requires NTLM?
This is supported in curl 7.10.6 or later. No earlier curl version knows This is supported in curl 7.10.6 or later. No earlier curl version knows
of this magic. of this magic.
@@ -651,9 +710,10 @@ FAQ
Details are also in the SSLCERTS file in the release archives, found online Details are also in the SSLCERTS file in the release archives, found online
here: http://curl.haxx.se/docs/sslcerts.html here: http://curl.haxx.se/docs/sslcerts.html
5. libcurl Issues 5. libcurl Issues
5.1. Is libcurl thread-safe? 5.1 Is libcurl thread-safe?
Yes. Yes.
@@ -687,7 +747,7 @@ FAQ
size_t size_t
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
{ {
register int realsize = size * nmemb; size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)data; struct MemoryStruct *mem = (struct MemoryStruct *)data;
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1); mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
@@ -743,6 +803,47 @@ FAQ
(Provided by Andrew Francis) (Provided by Andrew Francis)
5.8 libcurl.so.3: open failed: No such file or directory
This is an error message you might get when you try to run a program linked
with a shared version of libcurl and your run-time linker (ld.so) couldn't
find the shared library named libcurl.so.3.
You need to make sure that ld.so finds libcurl.so.3. You can do that
multiple ways, and it differs somewhat between different operating systems,
but they are usually:
* Add an option to the linker command line that specify the hard-coded path
the run-time linker should check for the lib (usually -R)
* Set an environment variable (LD_LIBRARY_PATH for example) where ld.so
should check for libs
* Adjust the system's config to check for libs in the directory where you've
put the dir (like Linux's /etc/ld.so.conf)
'man ld.so' and 'man ld' will tell you more details
5.9 How does libcurl resolve host names?
libcurl includes a number of different name resolve functions:
- The non-ipv6 resolver that can use one out of four host name resolve calls
(depending on what your system supports):
A - gethostbyname()
B - gethostbyname_r() with 3 arguments
C - gethostbyname_r() with 5 arguments
D - gethostbyname_r() with 6 arguments
- The ipv6-resolver that uses getaddrinfo()
- The c-ares based name resolver that uses the c-ares library for resolves.
- The Windows threaded resolver. It use:
A - gethostbyname() on plain ipv4 windows hosts
B - getaddrinfo() on ipv6-enabled windows hosts
6. License Issues 6. License Issues
@@ -751,32 +852,32 @@ FAQ
is just a brief summary for the cases we get the most questions. (Parts of is just a brief summary for the cases we get the most questions. (Parts of
this section was much enhanced by Bjorn Reese.) this section was much enhanced by Bjorn Reese.)
6.1. I have a GPL program, can I use the libcurl library? 6.1 I have a GPL program, can I use the libcurl library?
Yes! Yes!
Since libcurl may be distributed under the MIT/X derivate license, it can be Since libcurl may be distributed under the MIT/X derivate license, it can be
used together with GPL in any software. used together with GPL in any software.
6.2. I have a closed-source program, can I use the libcurl library? 6.2 I have a closed-source program, can I use the libcurl library?
Yes! Yes!
libcurl does not put any restrictions on the program that uses the library. libcurl does not put any restrictions on the program that uses the library.
6.3. I have a BSD licensed program, can I use the libcurl library? 6.3 I have a BSD licensed program, can I use the libcurl library?
Yes! Yes!
libcurl does not put any restrictions on the program that uses the library. libcurl does not put any restrictions on the program that uses the library.
6.4. I have a program that uses LGPL libraries, can I use libcurl? 6.4 I have a program that uses LGPL libraries, can I use libcurl?
Yes! Yes!
The LGPL license doesn't clash with other licenses. The LGPL license doesn't clash with other licenses.
6.5. Can I modify curl/libcurl for my program and keep the changes secret? 6.5 Can I modify curl/libcurl for my program and keep the changes secret?
Yes! Yes!
@@ -784,7 +885,7 @@ FAQ
the sources, on the condition that the copyright texts in the sources are the sources, on the condition that the copyright texts in the sources are
left intact. left intact.
6.6. Can you please change the curl/libcurl license to XXXX? 6.6 Can you please change the curl/libcurl license to XXXX?
No. No.
@@ -794,3 +895,26 @@ FAQ
we want on curl/libcurl and it does not spread to other programs or we want on curl/libcurl and it does not spread to other programs or
libraries that use it. It should be possible for everyone to use libcurl or libraries that use it. It should be possible for everyone to use libcurl or
curl in their projects, no matter what license they already have in use. curl in their projects, no matter what license they already have in use.
7. PHP/CURL Issues
7.1 What is PHP/CURL?
The module for PHP that makes it possible for PHP programs to access curl-
functions from within PHP. We often call it PHP/CURL to differentiate from
curl the command line tool and libcurl the library.
7.2 Who write PHP/CURL?
PHP/CURL is a module that comes with the regular PHP package. It depends and
uses libcurl, so you need to have libcurl installed properly first before
PHP/CURL can be used. PHP/CURL is written by Sterling Hughes.
7.3 Can I perform multiple requests using the same handle?
Yes - at least in PHP version 4.3.8 and later (this has been known to not
work in earlier versions, but the exact version when it started to work is
unknown to me).
After a transfer, you just set new options in the handle and make another
transfer. This will make libcurl to re-use the same connection if it can.

View File

@@ -6,26 +6,33 @@
FEATURES FEATURES
Misc curl tool
- full URL syntax - config file support
- multiple URLs in a single command line
- range "globbing" support: [0-13], {one,two,three}
- multiple file upload on a single command line
- custom maximum transfer rate
- redirectable stderr
libcurl supports
- full URL syntax with no length limit
- custom maximum download time - custom maximum download time
- custom least download speed acceptable - custom least download speed acceptable
- custom output result after completion - custom output result after completion
- multiple URLs
- guesses protocol from host name unless specified - guesses protocol from host name unless specified
- uses .netrc - uses .netrc
- progress bar/time specs while downloading - progress bar/time specs while downloading
- "standard" proxy environment variables support - "standard" proxy environment variables support
- config file support
- compiles on win32 (reported builds on 40+ operating systems) - compiles on win32 (reported builds on 40+ operating systems)
- redirectable stderr
- selectable network interface for outgoing traffic - selectable network interface for outgoing traffic
- IPv6 support - IPv6 support on unix and Windows
- persistant connections - persistant connections
- socks5 support - socks5 support
- supports user name + password in proxy environment variables - supports user name + password in proxy environment variables
- operations through proxy "tunnel" (using CONNECT) - operations through proxy "tunnel" (using CONNECT)
- supports transfers of large files (>2GB and >4GB) - supports large files (>2GB and >4GB) both upload/download
- replacable memory functions (malloc, free, realloc, etc)
- asynchronous name resolving (*6)
HTTP HTTP
- HTTP/1.1 compliant (optionally uses 1.0) - HTTP/1.1 compliant (optionally uses 1.0)
@@ -35,7 +42,7 @@ HTTP
- POST - POST
- multipart formpost (RFC1867-style) - multipart formpost (RFC1867-style)
- authentication: Basic, Digest, NTLM(*1), GSS-Negotiate/Negotiate(*3) and - authentication: Basic, Digest, NTLM(*1), GSS-Negotiate/Negotiate(*3) and
SPNEGO (*4) SPNEGO (*4) to server and proxy
- resume (both GET and PUT) - resume (both GET and PUT)
- follow redirects - follow redirects
- maximum amount of redirects to follow - maximum amount of redirects to follow
@@ -80,6 +87,8 @@ FTP
- via http-proxy - via http-proxy
- all operations can be tunneled through a http-proxy - all operations can be tunneled through a http-proxy
- customizable to retrieve file modification date - customizable to retrieve file modification date
- third party transfers
- no dir depth limit
FTPS (*1) FTPS (*1)
- explicit ftps:// support that use SSL on both connections - explicit ftps:// support that use SSL on both connections
@@ -103,6 +112,8 @@ GOPHER
FILE FILE
- URL support - URL support
- "uploads"
- resume
FOOTNOTES FOOTNOTES
========= =========
@@ -112,3 +123,4 @@ FOOTNOTES
*3 = requires a GSSAPI-compliant library, such as Heimdal or similar. *3 = requires a GSSAPI-compliant library, such as Heimdal or similar.
*4 = requires FBopenssl *4 = requires FBopenssl
*5 = requires a krb4 library, such as the MIT one or similar. *5 = requires a krb4 library, such as the MIT one or similar.
*6 = requires c-ares

View File

@@ -126,3 +126,16 @@ visitors to the curl.haxx.se site. Five official web mirrors.
December 2003, full-fledged SSL for FTP is supported. December 2003, full-fledged SSL for FTP is supported.
January 2004: curl 7.11.0 introduced large file support. January 2004: curl 7.11.0 introduced large file support.
June 2004: curl 7.12.0 introduced IDN support. 10 official web mirrors.
August 2004:
Curl and libcurl 7.12.1
Public curl release number: 82
Releases counted from the very beginning: 109
Available command line options: 96
Available curl_easy_setopt() options: 120
Number of public functions in libcurl: 36
Amount of public web site mirrors: 12
Number of known libcurl bindings: 26

View File

@@ -1,25 +0,0 @@
Steps To Perform When Building a Public Release
* "make distcheck"
* ./maketgz
then upload the 3 curl packages maketgz created
* update these files:
www/_download.html
www/_changes.html
www/_newslog.html
www/Makefile
* commit the web changes
* 'cvs commit'
* 'cvs tag'
* write the release announcement, including:
- changes / bugfixes
- other curl-related news
- contributors
* mail release-announcement to curl-announce and curl-users

View File

@@ -158,17 +158,9 @@ Win32
Make the sources in the src/ drawer be a "win32 console application" Make the sources in the src/ drawer be a "win32 console application"
project. Name it curl. project. Name it curl.
With VC++, add 'ws2_32.lib' to the link libs when you build curl!
Borland seems to do that itself magically. Of course you have to make
sure it links with the libcurl too!
For VC++ 6, there's an included Makefile.vc6 that should be possible For VC++ 6, there's an included Makefile.vc6 that should be possible
to use out-of-the-box. to use out-of-the-box.
Microsoft note: add /Zm200 to the compiler options to increase the
compiler's memory allocation limit, as the hugehelp.c won't compile
due to "too long puts string".
With SSL: With SSL:
@@ -189,28 +181,33 @@ Win32
Microsoft command line style Microsoft command line style
---------------------------- ----------------------------
Run the 'vcvars32.bat' file to get a proper environment. The
vcvars32.bat file is part of the Microsoft development environment and
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
provided that you installed Visual C/C++ 6 in the default directory.
Then run 'nmake vc' in curl's root directory.
If you want to compile with zlib support, you will need to build
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
documentation on how to compile zlib. Define the ZLIB_PATH environment
variable to the location of zlib.h and zlib.lib, for example:
set ZLIB_PATH=c:\zlib-1.2.1
Then run 'nmake vc-zlib' in curl's root directory.
If you want to compile with SSL support you need the OpenSSL package.
Please read the OpenSSL documentation on how to compile and install Please read the OpenSSL documentation on how to compile and install
the OpenSSL libraries. The build process of OpenSSL generates the the OpenSSL libraries. The build process of OpenSSL generates the
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib, the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory. ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
Run the 'vcvars32.bat' file to get a proper environment. The
vcvars32.bat file is part of the Microsoft development environment and
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
provided that you installed Visual C/C++ 6 in the default directory.
Before running nmake define the OPENSSL_PATH environment variable with Before running nmake define the OPENSSL_PATH environment variable with
the root/base directory of OpenSSL, for example: the root/base directory of OpenSSL, for example:
set OPENSSL_PATH=c:\openssl-0.9.7a set OPENSSL_PATH=c:\openssl-0.9.7d
lib/Makefile.vc6 depends on zlib (http://www.gzip.org/zlib/) as well.
Please read the zlib documentation on how to compile zlib. Define the
ZLIB_PATH environment variable to the location of zlib.h and zlib.lib,
for example:
set ZLIB_PATH=c:\zlib-1.1.4
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
directory. 'nmake vc-ssl' will create a libcurl static and dynamic directory. 'nmake vc-ssl' will create a libcurl static and dynamic
@@ -223,6 +220,7 @@ Win32
links curl.exe against libcurl and OpenSSL dynamically. links curl.exe against libcurl and OpenSSL dynamically.
This executable requires libcurl.dll and the OpenSSL DLLs This executable requires libcurl.dll and the OpenSSL DLLs
at runtime. at runtime.
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
Microsoft / Borland style Microsoft / Borland style
------------------------- -------------------------
@@ -472,6 +470,39 @@ AmigaOS
you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/ you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
NetWare
=======
To compile curl.nlm / libcurl.nlm you need:
- either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
- gnu make and awk running on the platform you compile on;
native Win32 versions can be downloaded from:
http://www.gknw.com/development/prgtools/
- recent Novell LibC SDK availabable from:
http://developer.novell.com/ndk/libc.htm
- optional zlib sources (at the moment only dynamic linking with zlib.imp);
sources with NetWare Makefile can be optained from:
http://www.gknw.com/mirror/zlib/
Set a search path to your compiler, linker and tools; if you want to have
zlib support then set the environment var ZLIB_PATH pointing to your zlib
sources, on Linux make sure the var OSTYPE contains the string 'linux';
and finally type 'make netware' from the top source directory...
I found on some Linux systems (RH9) that OS detection didnt work although
a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...;
other options are currently not supported, although partly prepared.
The Ares lib builds arlready fine, and both test tools work fine at least
when build with CodeWarrior...; dont know yet why they fail when build with
gcc though; if you want to compile with Ares support then set an env var
WITH_ARES=1; I've not tested yet including libcares into curl.
Any help in testing appreciated!
Buils automatically created 4 times a day from current CVS are here:
http://www.gknw.com/mirror/curl/autobuilds/
the status of these buids can be viewed at the autobuild table:
http://curl.haxx.se/auto/
PORTS PORTS
===== =====
This is a probably incomplete list of known hardware and operating systems This is a probably incomplete list of known hardware and operating systems
@@ -527,25 +558,10 @@ PORTS
- s390 Linux - s390 Linux
- XScale/PXA250 Linux 2.4 - XScale/PXA250 Linux 2.4
OpenSSL Useful URLs
======= ===========
You'll find OpenSSL information at:
http://www.openssl.org
MingW32/Cygwin
==============
You'll find MingW32 and Cygwin information at:
http://www.mingw.org
OpenLDAP
========
You'll find OpenLDAP information at:
http://www.openldap.org
OpenSSL http://www.openssl.org
MingW http://www.mingw.org
OpenLDAP http://www.openldap.org
Zlib http://www.gzip.org/zlib/

View File

@@ -3,9 +3,28 @@ 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 changelog of the current development status, as one or more of these problems
may have been fixed since this was written! may have been fixed since this was written!
* curl version 7.12.2 fails on AIX if compiled with --enable-ares.
The workaround is to combine --enable-ares with --disable-shared
* When connecting to a SOCKS proxy, the (connect) timeout is not properly
acknowledged after the actual TCP connect (during the SOCKS "negotiate"
phase). Pointed out by Lucas. Fix: need to select() and timeout properly.
* Using configure --disable-[protocol] may cause 'make test' to fail for
tests using the disabled protocol(s).
* To get HTTP Negotiate authentication to work fine, you need to provide a
(fake) user name (this concerns both curl and the lib) because the code
wrongly only considers authentication if there's a user name provided.
Bug report #1004841. How? http://curl.haxx.se/mail/lib-2004-08/0182.html
* If you use a very large amount of file descriptors (more than FD_SETSIZE)
and then use libcurl, it might crash on its use of select() which then
stores data out of bounds. Bug report #948950.
* --limit-rate using -d or -F does not work. This is because the limit logic * --limit-rate using -d or -F does not work. This is because the limit logic
is provided by the curl app in its read/write callbacks, and when doing is provided by the curl app in its read/write callbacks, and when doing
-d/-F the callbacks aren't used! -d/-F the callbacks aren't used! Bug report #921395.
* Doing resumed upload over HTTP does not work with '-C -', because curl * Doing resumed upload over HTTP does not work with '-C -', because curl
doesn't do a HEAD first to get the initial size. This needs to be done doesn't do a HEAD first to get the initial size. This needs to be done
@@ -28,18 +47,11 @@ may have been fixed since this was written!
libcurl thinks of it as the *compressed* lenght. Some explanations are here: libcurl thinks of it as the *compressed* lenght. Some explanations are here:
http://curl.haxx.se/mail/lib-2003-06/0146.html http://curl.haxx.se/mail/lib-2003-06/0146.html
* Downloading 0 (zero) bytes files over FTP will not create a zero byte file
locally, which is because libcurl doesn't call the write callback with zero
bytes. Explained here: http://curl.haxx.se/mail/archive-2003-04/0143.html
* IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage * IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage
struct. It has been reported to work on AIX 5.1 though. struct. It has been reported to work on AIX 5.1 though.
* GOPHER transfers seem broken * GOPHER transfers seem broken
* configure --disable-http is not fully supported. All other protocols seem
to work to disable.
* If a HTTP server responds to a HEAD request and includes a body (thus * If a HTTP server responds to a HEAD request and includes a body (thus
violating the RFC2616), curl won't wait to read the response but just stop violating the RFC2616), curl won't wait to read the response but just stop
reading and return back. If a second request (let's assume a GET) is then reading and return back. If a second request (let's assume a GET) is then

86
docs/LICENSE-MIXING Normal file
View File

@@ -0,0 +1,86 @@
License Mixing with apps, libcurl and Third Party Libraries
===========================================================
libcurl can be built to use a fair amount of various third party libraries,
libraries that are written and provided by other parties that are distributed
using their own licenses. Even libcurl itself contains code that may cause
problems to some. This document attempts to describe what licenses libcurl and
the other libraries use and what possible dilemmas linking and mixing them all
can lead to for end users.
I am not a lawyer and this is not legal advice!
One common dilemma is that GPL[1]-licensed code is not allowed to be linked
with code licensed under the Original BSD license (with the announcement
clause, unless there's a specified exception in the GPL-licensed module). You
may still build your own copies that use them all, but distributing them as
binaries would be to violate the GPL license - unless you accompany your
license with an exception[2]. This particular problem was addressed when the
Modified BSD license was created, which does not have the annoncement clause
that collides with GPL.
libcurl http://curl.haxx.se/docs/copyright.html
Uses an MIT (or Modified BSD)-style license that is as liberal as
possible. Some of the source files that deal with KRB4 have Original
BSD-style announce-clause licenses. You may not distribute binaries
with krb4-enabled libcurl that also link with GPL-licensed code!
OpenSSL http://www.openssl.org/source/license.html
Uses an Original BSD-style license with an announement clause that
makes it "incompatible" with GPL. You are not allowed to ship binaries
that link with OpenSSL that includes GPL code (unless that specific
GPL code includes an exception for OpenSSL - a habit that is growing
more and more common).
c-ares http://daniel.haxx.se/projects/c-ares/license.html
Uses an MIT license that is very liberal and imposes no restrictions
on any other library or part you may link with.
zlib http://www.gzip.org/zlib/zlib_license.html
Uses an MIT-style license that shouldn't collide with any other
library.
krb4
While nothing in particular says that a Kerberos4 library must use any
particular license, the one I've tried and used successfully so far
(kth-krb4) is Original BSD-licensed with the announcement clause. Some
of the code in libcurl that is written to deal with Kerberos4 likewise
have such a license.
GSSAPI
While nothing in particular says that a GSS/Kerberos5 library must use
any particular license, the one I've used (Heimdal) is Original BSD-
licensed with the announcement clause.
fbopenssl
Unclear license. Based on its name, I assume that it uses the OpenSSL
license and thus shares the same issues as described for OpenSSL
above.
libidn http://www.gnu.org/licenses/lgpl.html
Uses the GNU Lesser General Public License. LGPL is a variation of GPL
with slightly less aggressive "copyleft". This license requires more
requirements to be met when distributing binaries, see the license for
details. Also note that if you distribute a binary that includes this
library, you must also include the full LGPL license text. Please
properly point out what parts of the distributed package that the
license addresses.
OpenLDAP http://www.openldap.org/software/release/license.html
Uses a Modified BSD-style license. Since libcurl uses OpenLDAP as a
shared library only, I have not heard of anyone that ships OpenLDAP
linked with libcurl in an app.
[1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html
[2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on
how to write such an exception to the GPL

View File

@@ -851,7 +851,7 @@ MAILING LISTS
For your convenience, we have several open mailing lists to discuss curl, For your convenience, we have several open mailing lists to discuss curl,
its development and things relevant to this. Get all info at its development and things relevant to this. Get all info at
http://curl.haxx.se/mail/. The lists available are: http://curl.haxx.se/mail/. Some of the lists available are:
curl-users curl-users
@@ -865,24 +865,18 @@ MAILING LISTS
curl-announce curl-announce
Low-traffic. Only announcements of new public versions. Low-traffic. Only receives announcements of new public versions. At worst,
that makes something like one or two mails per month, but usually only one
mail every second month.
curl-and-PHP curl-and-php
Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP
with a curl angle. with a curl angle.
curl-commits curl-and-python
Receives notifications on all CVS commits done to the curl source module. Python hackers using curl with or without the python binding pycurl.
This can become quite a large amount of mails during intense development,
be aware. This is for us who like email...
curl-www-commits
Receives notifications on all CVS commits done to the curl www module
(basicly the web site). This can become quite a large amount of mails
during intense changing, be aware. This is for us who like email...
Please direct curl questions, feature requests and trouble reports to one of Please direct curl questions, feature requests and trouble reports to one of
these mailing lists instead of mailing any individual. these mailing lists instead of mailing any individual.

View File

@@ -4,28 +4,20 @@
AUTOMAKE_OPTIONS = foreign no-dependencies AUTOMAKE_OPTIONS = foreign no-dependencies
man_MANS = \ man_MANS = curl.1 curl-config.1
curl.1 \ GENHTMLPAGES = curl.html curl-config.html
curl-config.1 PDFPAGES = curl.pdf curl-config.pdf
GENHTMLPAGES = \
curl.html \
curl-config.html
HTMLPAGES = $(GENHTMLPAGES) index.html HTMLPAGES = $(GENHTMLPAGES) index.html
PDFPAGES = \
curl.pdf \
curl-config.pdf
SUBDIRS = examples libcurl SUBDIRS = examples libcurl
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \ EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS \ README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
VERSIONS KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) \ KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
HISTORY INSTALL libcurl-the-guide $(PDFPAGES) $(PDFPAGES) LICENSE-MIXING README.netware
MAN2HTML= roffit < $< >$@ MAN2HTML= roffit < $< >$@

27
docs/README.netware Normal file
View File

@@ -0,0 +1,27 @@
_ _ ____ _
___| | | | _ \| |
/ __| | | | |_) | |
| (__| |_| | _ <| |___
\___|\___/|_| \_\_____|
README.netware
Read the README file first.
Curl has been successfully compiled with gcc / nlmconv on different flavours
of Linux as well as with the official Metrowerks CodeWarrior compiler.
While not being the main development target, a continously growing share of
curl users are NetWare-based, specially also consuming the lib from PHP.
The unix-style man pages are tricky to read on windows, so therefore are all
those pages converted to HTML as well as pdf, and included in the release
archives.
The main curl.1 man page is also "built-in" in the command line tool. Use a
command line similar to this in order to extract a separate text file:
curl -M >manual.txt
Read the INSTALL file for instructions how to compile curl self.

View File

@@ -1,32 +1,30 @@
Peer SSL Certificate Verification Peer SSL Certificate Verification
================================= =================================
Since version 7.10, libcurl performs peer SSL certificate verification by libcurl performs peer SSL certificate verification by default. This is done by
default. This is done by installing a default CA cert bundle on 'make install' installing a default CA cert bundle on 'make install' (or similar), that CA
(or similar), that CA bundle package is used by default on operations against bundle package is used by default on operations against SSL servers.
SSL servers.
Alas, if you communicate with HTTPS servers using certificates that are signed If you communicate with HTTPS or FTPS servers using certificates that are
by CAs present in the bundle, you will not notice any changed behavior and you signed by CAs present in the bundle, you can be sure that the remote server
will seamlessly get a higher security level on your SSL connections since you really is the one it claims to be.
can be sure that the remote server really is the one it claims to be.
If the remote server uses a self-signed certificate, if you don't install If the remote server uses a self-signed certificate, if you don't install
curl's CA cert bundle, if the server uses a certificate signed by a CA that curl's CA cert bundle, if the server uses a certificate signed by a CA that
isn't included in the bundle or if the remoste host is an imposter isn't included in the bundle or if the remote host is an impostor
impersonating your favourite site, and you want to transfer files from this impersonating your favorite site, and you want to transfer files from this
server, do one of the following: server, do one of the following:
1. Tell libcurl to *not* verify the peer. With libcurl you disable with with 1. Tell libcurl to *not* verify the peer. With libcurl you disable with with
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
With the curl command tool, you disable this with -k/--insecure. With the curl command line tool, you disable this with -k/--insecure.
2. Get a CA certificate that can verify the remote server and use the proper 2. Get a CA certificate that can verify the remote server and use the proper
option to point out this CA cert for verification when connecting. For option to point out this CA cert for verification when connecting. For
libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath); libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
With the curl command tool: --cacert [file] With the curl command line tool: --cacert [file]
3. Add the CA cert for your server to the existing default CA cert bundle. 3. Add the CA cert for your server to the existing default CA cert bundle.
The default path of the CA bundle installed with the curl package is: The default path of the CA bundle installed with the curl package is:
@@ -34,15 +32,61 @@ server, do one of the following:
configure with the --with-ca-bundle option pointing out the path of your configure with the --with-ca-bundle option pointing out the path of your
choice. choice.
Neglecting to use one of the above menthods when dealing with a server using a To do this, you need to get the CA cert for your server in PEM format and
certficate that isn't signed by one of the certficates in the installed CA then append that to your CA cert bundle.
If you use Internet Explorer, this is one way to get extract the CA cert
for a particular server:
o View the certificate by double-clicking the padlock
o Find out where the CA certificate is kept (Certificate>
Authority Information Access>URL)
o Get a copy of the crt file using curl
o Convert it from crt to PEM using the openssl tool:
openssl x509 -inform DES -in yourdownloaded.crt \
-out outcert.pem -text
o Append the 'outcert.pem' to the CA cert bundle or use it stand-alone
as described below.
(Thanks to Frankie V for this description)
If you use the 'openssl' tool, this is one way to get extract the CA cert
for a particular server:
o openssl s_client -connect xxxxx.com:443 |tee logfile
o type "QUIT", followed by the "ENTER" key
o The certificate will have "BEGIN CERTIFICATE" and "END CERTIFICATE"
markers.
o If you want to see the data in the certificate, you can do: "openssl
x509 -inform PEM -in certfile -text -out certdata" where certfile is
the cert you extracted from logfile. Look in certdata.
o If you want to trust the certificate, you can append it to your
cert_bundle or use it stand-alone as described. Just remember that the
security is no better than the way you obtained the certificate.
(Thanks to Doug Kaufman for this description)
4. If you're using the curl command line tool, you can specify your own CA
cert path by setting the environment variable CURL_CA_BUNDLE to the path
of your choice.
If you're using the curl command line tool on Windows, curl will search
for a CA cert file named "curl-ca-bundle.crt" in these directories and in
this order:
1. application's directory
2. current working directory
3. Windows System directory (e.g. C:\windows\system32)
4. Windows Directory (e.g. C:\windows)
5. all directories along %PATH%
5. Get a better/different/newer CA cert bundle! One option is to extract the
one a recent Mozilla browser uses, by following the instruction found
here:
http://curl.haxx.se/docs/caextract.html
Neglecting to use one of the above methods when dealing with a server using a
certificate that isn't signed by one of the certificates in the installed CA
cert bundle, will cause SSL to report an error ("certificate verify failed") cert bundle, will cause SSL to report an error ("certificate verify failed")
during the handshake and SSL will then refuse further communication with that during the handshake and SSL will then refuse further communication with that
server. server.
This procedure has been deemed The Right Thing even though it adds this extra
trouble for some users, since it adds security to a majority of the SSL
connections that previously weren't really secure. It turned out many people
were using previous versions of curl/libcurl without realizing the need for
the CA cert options to get truly secure SSL connections.

View File

@@ -33,8 +33,8 @@ TODO
return informational stuff as errors, consider a new info returned by return informational stuff as errors, consider a new info returned by
curl_easy_getinfo() #845941 curl_easy_getinfo() #845941
* Option to set the SO_KEEPALIVE socket option to make libcurl notice and * Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
disconnect very long time idle connections. SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
LIBCURL - multi interface LIBCURL - multi interface
@@ -57,6 +57,18 @@ TODO
FTP FTP
* "PASV IP override" - When an FTPS host is behind a NAT firewall, passive
mode fails. The PASV response from the host ["227 PASV Entering passive
mode (_ip_address_, _port_)."] contains the private network IP address of
the host, which since it is encrypted, cannot be modified by the firewall
to the public IP address. What is needed is a cURL option to override the
IP address passed by the host "227 PASV" response. Requested by Ed
Hingsbergen
* Support GSS/Kerberos 5 for ftp file transfer. This will allow user
authentication and file encryption. Possible libraries and example clients
are available from MIT or Heimdal. Requsted by Markus Moeller.
* Optimize the way libcurl uses CWD on each new request over a persistent * Optimize the way libcurl uses CWD on each new request over a persistent
connection (on FTP) even if it doesn't have to. connection (on FTP) even if it doesn't have to.
@@ -77,10 +89,13 @@ TODO
* Since USERPWD always override the user and password specified in URLs, we * Since USERPWD always override the user and password specified in URLs, we
might need another way to specify user+password for anonymous ftp logins. might need another way to specify user+password for anonymous ftp logins.
HTTP * The FTP code should get a way of returning errors that is known to still
have the control connection alive and sound. Currently, a returned error
from within ftp-functions does not tell if the control connection is still
OK to use or not. This causes libcurl to fail to re-use connections
slightly too often.
* Digest and GSS-Negotiate support for HTTP proxies. They only work on HTTP
direct-connections to the server.
* Pipelining. Sending multiple requests before the previous one(s) are done. * Pipelining. Sending multiple requests before the previous one(s) are done.
This could possibly be implemented using the multi interface to queue This could possibly be implemented using the multi interface to queue
@@ -104,24 +119,19 @@ TODO
* Evaluate/apply Gertjan van Wingerde's SSL patches: * Evaluate/apply Gertjan van Wingerde's SSL patches:
http://curl.haxx.se/mail/lib-2004-03/0087.html http://curl.haxx.se/mail/lib-2004-03/0087.html
* Peter Sylvester's "Most Significant Common Name" change. Feedback welcome. * "Look at SSL cafile - quick traces look to me like these are done on every
At least the UTF8 conversion and comparison should be done. Patch? request as well, when they should only be necessary once per ssl context
(or once per handle)". The major improvement we can rather easily do is to
* If you really want to improve the SSL situation, you should probably have a make sure we don't create and kill a new SSL "context" for every request,
look at SSL cafile loading as well - quick traces look to me like these are but instead make one for every connection and re-use that SSL context in
done on every request as well, when they should only be necessary once per the same style connections are re-used. It will make us use slightly more
ssl context (or once per handle). Even better would be to support the SSL memory but it will libcurl do less creations and deletions of SSL contexts.
CAdir option - instead of loading all of the root CA certs for every
request, this option allows you to only read the CA chain that is actually
required (into the cache)...
* Add an interface to libcurl that enables "session IDs" to get * Add an interface to libcurl that enables "session IDs" to get
exported/imported. Cris Bailiff said: "OpenSSL has functions which can exported/imported. Cris Bailiff said: "OpenSSL has functions which can
serialise the current SSL state to a buffer of your choice, and serialise the current SSL state to a buffer of your choice, and
recover/reset the state from such a buffer at a later date - this is used recover/reset the state from such a buffer at a later date - this is used
by mod_ssl for apache to implement and SSL session ID cache". This whole by mod_ssl for apache to implement and SSL session ID cache".
idea might become moot if we enable the 'data sharing' as mentioned in the
LIBCURL label above.
* OpenSSL supports a callback for customised verification of the peer * OpenSSL supports a callback for customised verification of the peer
certificate, but this doesn't seem to be exposed in the libcurl APIs. Could certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
@@ -130,8 +140,12 @@ TODO
* Make curl's SSL layer option capable of using other free SSL libraries. * Make curl's SSL layer option capable of using other free SSL libraries.
Such as the Mozilla Security Services Such as the Mozilla Security Services
(http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS (http://www.mozilla.org/projects/security/pki/nss/) and GnuTLS
(http://gnutls.hellug.gr/) (http://www.gnu.org/software/gnutls/) This subject has been brought up
again recently since GPL-licensed applications that link with libcurl MAY
NOT distribute binaries that use OpenSSL without adding an exception clause
to the GPL license. See the LICENSE-MIXING document and this:
http://www.gnome.org/~markmc/openssl-and-the-gpl.html
LDAP LDAP
@@ -141,6 +155,17 @@ TODO
CLIENT CLIENT
* "curl --sync http://example.com/feed[1-100].rss" or
"curl --sync http://example.net/{index,calendar,history}.html"
Downloads a range or set of URLs using the remote name, but only if the
remote file is newer than the local file. A Last-Modified HTTP date header
should also be used to set the mod date on the downloaded file.
(idea from "Brianiac")
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
Requested by Dane Jensen and others. This is easily scripted though.
* Add an option that prevents cURL from overwiting existing local files. When * Add an option that prevents cURL from overwiting existing local files. When
used, and there already is an existing file with the target file name 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 (either -O or -o), a number should be appended (and increased if already
@@ -174,6 +199,18 @@ TODO
* --data-encode that URL encodes the data before posting * --data-encode that URL encodes the data before posting
http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested) http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
* Provide a way to make options bound to a specific URL among several on the
command line. Possibly by letting ':' separate options between URLs,
similar to this:
curl --data foo --url url.com : \
--url url2.com : \
--url url3.com --data foo3
(More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
The example would do a POST-GET-POST combination on a single command line.
BUILD BUILD
* Consider extending 'roffit' to produce decent ASCII output, and use that * Consider extending 'roffit' to produce decent ASCII output, and use that
@@ -201,10 +238,10 @@ TODO
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a * curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
CURLMcode. These should be changed to be the same. CURLMcode. These should be changed to be the same.
* curl_formparse() should be removed
* remove obsolete defines from curl/curl.h * remove obsolete defines from curl/curl.h
* make several functions use size_t instead of int in their APIs
* remove the following functions from the public API: * remove the following functions from the public API:
curl_getenv curl_getenv
curl_mprintf (and variations) curl_mprintf (and variations)

View File

@@ -370,11 +370,11 @@ Version: 0.6
In the HTTPS world, you use certificates to validate that you are the one In the HTTPS world, you use certificates to validate that you are the one
you you claim to be, as an addition to normal passwords. Curl supports you you claim to be, as an addition to normal passwords. Curl supports
client-side certificates. All certificates are locked with a PIN-code, why client-side certificates. All certificates are locked with a pass phrase,
you need to enter the unlock-code before the certificate can be used by which you need to enter before the certificate can be used by curl. The pass
curl. The PIN-code can be specified on the command line or if not, entered phrase can be specified on the command line or if not, entered interactively
interactively when curl queries for it. Use a certificate with curl on a when curl queries for it. Use a certificate with curl on a HTTPS server
HTTPS server like: like:
curl -E mycert.pem https://that.secure.server.com curl -E mycert.pem https://that.secure.server.com

View File

@@ -1,8 +1,27 @@
.\" You can view this file with: .\" **************************************************************************
.\" nroff -man curl.1 .\" * _ _ ____ _
.\" Written by Daniel Stenberg .\" * Project ___| | | | _ \| |
.\" * / __| | | | |_) | |
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2004, 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 http://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.
.\" *
.\" * $Id$
.\" **************************************************************************
.\" .\"
.TH curl 1 "25 Mar 2004" "Curl 7.11.2" "Curl Manual" .TH curl 1 "3 May 2004" "Curl 7.12" "Curl Manual"
.SH NAME .SH NAME
curl \- transfer a URL curl \- transfer a URL
.SH SYNOPSIS .SH SYNOPSIS
@@ -37,9 +56,10 @@ or you can get sequences of alphanumeric series by using [] as in:
ftp://ftp.numericals.com/file[001-100].txt (with leading zeros) ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)
ftp://ftp.letters.com/file[a-z].txt ftp://ftp.letters.com/file[a-z].txt
No nesting of the sequences is supported at the moment: No nesting of the sequences is supported at the moment, but you can use
several ones next to each other:
http://www.any.org/archive[1996-1999]/volume[1-4]part{a,b,c,index}.html http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
You can specify any amount of URLs on the command line. They will be fetched You can specify any amount of URLs on the command line. They will be fetched
in a sequential manner in the specified order. in a sequential manner in the specified order.
@@ -123,7 +143,7 @@ If this option is used several times, each occurrence will toggle it on/off.
.IP "--connect-timeout <seconds>" .IP "--connect-timeout <seconds>"
Maximum time in seconds that you allow the connection to the server to take. Maximum time in seconds that you allow the connection to the server to take.
This only limits the connection phase, once curl has connected this option is This only limits the connection phase, once curl has connected this option is
of no more use. See also the \fI--max-time\fP option. of no more use. See also the \fI-m/--max-time\fP option.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "-c/--cookie-jar <file name>" .IP "-c/--cookie-jar <file name>"
@@ -154,7 +174,11 @@ transfer. It then uses the given output/input files to figure that out.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "--create-dirs" .IP "--create-dirs"
When used in conjunction with the -o option, curl will create the necessary When used in conjunction with the -o option, curl will create the necessary
local directory hierarchy as needed. local directory hierarchy as needed. This option creates the dirs mentioned
with the -o option, nothing else. If the -o file name uses no dir or if the
dirs it mentions already exist, no dir will be created.
To create remote directories when using FTP, try \fI--ftp-create-dirs\fP.
.IP "--crlf" .IP "--crlf"
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390). (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
@@ -311,10 +335,10 @@ If this option is used twice, the second will again disable silent failure.
.IP "--ftp-ssl" .IP "--ftp-ssl"
(FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0) (FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0)
If this option is used twice, the second will again disable silent failure. If this option is used twice, the second will again disable this.
.IP "-F/--form <name=content>" .IP "-F/--form <name=content>"
(HTTP) This lets curl emulate a filled in form in which a user has pressed the (HTTP) This lets curl emulate a filled in form in which a user has pressed the
submit button. This causes curl to POST data using the content-type submit button. This causes curl to POST data using the Content-Type
multipart/form-data according to RFC1867. This enables uploading of binary multipart/form-data according to RFC1867. This enables uploading of binary
files etc. To force the 'content' part to be be a file, prefix the file name files etc. To force the 'content' part to be be a file, prefix the file name
with an @ sign. To just get the content part from a file, prefix the file name with an @ sign. To just get the content part from a file, prefix the file name
@@ -331,11 +355,15 @@ input:
To read the file's content from stdin insted of a file, use - where the file To read the file's content from stdin insted of a file, use - where the file
name should've been. This goes for both @ and < constructs. name should've been. This goes for both @ and < constructs.
You can also tell curl what Content-Type to use for the file upload part, by You can also tell curl what Content-Type to use by using 'type=', in a manner
using 'type=', in a manner similar to: similar to:
\fBcurl\fP -F "web=@index.html;type=text/html" url.com \fBcurl\fP -F "web=@index.html;type=text/html" url.com
or
\fBcurl\fP -F "name=daniel;type=text/foo" url.com
See further examples and details in the MANUAL. See further examples and details in the MANUAL.
This option can be used multiple times. This option can be used multiple times.
@@ -589,11 +617,23 @@ You may use this option as many times as you have number of URLs.
(SSL) Pass phrase for the private key (SSL) Pass phrase for the private key
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "--proxy-basic"
Tells curl to use HTTP Basic authentication when communicating with the given
proxy. Use \fI--basic\fP for enabling HTTP Basic with a remote host. Basic is
the default authentication method curl uses with proxies.
If this option is used twice, the second will again disable proxy HTTP Basic
authentication.
.IP "--proxy-digest"
Tells curl to use HTTP Digest authentication when communicating with the given
proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host.
If this option is used twice, the second will again disable proxy HTTP Digest.
.IP "--proxy-ntlm" .IP "--proxy-ntlm"
Tells curl to use NTLM authentication when communicating with the given Tells curl to use HTTP NTLM authentication when communicating with the given
proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host. proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
If this option is used twice, the second will again disable proxy NTLM. If this option is used twice, the second will again disable proxy HTTP NTLM.
.IP "-p/--proxytunnel" .IP "-p/--proxytunnel"
When an HTTP proxy is used (\fI-x/--proxy\fP), this option will cause non-HTTP When an HTTP proxy is used (\fI-x/--proxy\fP), this option will cause non-HTTP
protocols to attempt to tunnel through the proxy instead of merely using it to protocols to attempt to tunnel through the proxy instead of merely using it to
@@ -626,13 +666,12 @@ instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.
If used as the first parameter on the command line, the \fI$HOME/.curlrc\fP If used as the first parameter on the command line, the \fI$HOME/.curlrc\fP
file will not be read and used as a config file. file will not be read and used as a config file.
.IP "-Q/--quote <comand>" .IP "-Q/--quote <comand>"
(FTP) Send an arbitrary command to the remote FTP server, by using the QUOTE (FTP) Send an arbitrary command to the remote FTP server. Quote commands are
command of the server. Not all servers support this command, and the set of sent BEFORE the transfer is taking place. To make commands take place after a
QUOTE commands are server specific! Quote commands are sent BEFORE the successful transfer, prefix them with a dash '-'. You may specify any amount
transfer is taking place. To make commands take place after a successful of commands to be run before and after the transfer. If the server returns
transfer, prefix them with a dash '-'. You may specify any amount of commands failure for one of the commands, the entire operation will be aborted. You
to be run before and after the transfer. If the server returns failure for one must send syntactically correct FTP commands as RFC959 defines.
of the commands, the entire operation will be aborted.
This option can be used multiple times. This option can be used multiple times.
.IP "--random-file <file>" .IP "--random-file <file>"
@@ -821,6 +860,8 @@ This curl uses asynchronous name resolves.
SPNEGO Negotiate authenticaion is supported. SPNEGO Negotiate authenticaion is supported.
.IP "Largefile" .IP "Largefile"
This curl supports transfers of large files, files larger than 2GB. This curl supports transfers of large files, files larger than 2GB.
.IP "IDN"
This curl supports IDN - international domain names.
.RE .RE
.IP "-w/--write-out <format>" .IP "-w/--write-out <format>"
Defines what to display after a completed and successful operation. The format Defines what to display after a completed and successful operation. The format
@@ -935,22 +976,18 @@ not set.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "-z/--time-cond <date expression>" .IP "-z/--time-cond <date expression>"
(HTTP) (HTTP) Request a file that has been modified later than the given time and
Request to get a file that has been modified later than the given time and
date, or one that has been modified before that time. The date expression can date, or one that has been modified before that time. The date expression can
be all sorts of date strings or if it doesn't match any internal ones, it be all sorts of date strings or if it doesn't match any internal ones, it
tries to get the time from a given file name instead! See the tries to get the time from a given file name instead! See the
.BR "GNU date(1)" \fIcurl_getdate(3)\fP man pages for date expression details.
or
.BR "curl_getdate(3)"
man pages for date expression details.
Start the date expression with a dash (-) to make it request for a document Start the date expression with a dash (-) to make it request for a document
that is older than the given date/time, default is a document that is newer that is older than the given date/time, default is a document that is newer
than the specified date/time. than the specified date/time.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "-Z/--max-redirs <num>" .IP "--max-redirs <num>"
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
is used, this option can be used to prevent curl from following redirections is used, this option can be used to prevent curl from following redirections
\&"in absurdum". \&"in absurdum".

View File

@@ -5,11 +5,11 @@
AUTOMAKE_OPTIONS = foreign no-dependencies AUTOMAKE_OPTIONS = foreign no-dependencies
EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \ EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
persistant.c ftpget.c Makefile.example \ persistant.c ftpget.c Makefile.example multithread.c getinmemory.c \
multithread.c getinmemory.c ftpupload.c httpput.c \ ftpupload.c httpput.c simplessl.c ftpgetresp.c http-post.c \
simplessl.c ftpgetresp.c http-post.c post-callback.c \ post-callback.c multi-app.c multi-double.c multi-single.c \
multi-app.c multi-double.c multi-single.c multi-post.c \ multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c \
fopen.c simplepost.c makefile.dj curlx.c multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c
all: all:
@echo "done" @echo "done"

128
docs/examples/debug.c Normal file
View File

@@ -0,0 +1,128 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*/
#include <stdio.h>
#include <curl/curl.h>
struct data {
char trace_ascii; /* 1 or 0 */
};
static
void dump(const char *text,
FILE *stream, unsigned char *ptr, size_t size,
char nohex)
{
size_t i;
size_t c;
unsigned int width=0x10;
if(nohex)
/* without the hex output, we can fit more on screen */
width = 0x40;
fprintf(stream, "%s, %zd bytes (0x%zx)\n", text, size, size);
for(i=0; i<size; i+= width) {
fprintf(stream, "%04zx: ", i);
if(!nohex) {
/* hex not disabled, show it */
for(c = 0; c < width; c++)
if(i+c < size)
fprintf(stream, "%02x ", ptr[i+c]);
else
fputs(" ", stream);
}
for(c = 0; (c < width) && (i+c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */
if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
i+=(c+2-width);
break;
}
fprintf(stream, "%c",
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
/* check again for 0D0A, to avoid an extra \n if it's at width */
if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
i+=(c+3-width);
break;
}
}
fputc('\n', stream); /* newline */
}
fflush(stream);
}
static
int my_trace(CURL *handle, curl_infotype type,
unsigned char *data, size_t size,
void *userp)
{
struct data *config = (struct data *)userp;
const char *text;
(void)handle; /* prevent compiler warning */
switch (type) {
case CURLINFO_TEXT:
fprintf(stderr, "== Info: %s", data);
default: /* in case a new one is introduced to shock us */
return 0;
case CURLINFO_HEADER_OUT:
text = "=> Send header";
break;
case CURLINFO_DATA_OUT:
text = "=> Send data";
break;
case CURLINFO_HEADER_IN:
text = "<= Recv header";
break;
case CURLINFO_DATA_IN:
text = "<= Recv data";
break;
case CURLINFO_SSL_DATA_IN:
text = "<= Recv SSL data";
break;
case CURLINFO_SSL_DATA_OUT:
text = "<= Send SSL data";
break;
}
dump(text, stderr, data, size, config->trace_ascii);
return 0;
}
int main(void)
{
CURL *curl;
CURLcode res;
struct data config;
config.trace_ascii = 1; /* enable ascii tracing */
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &config);
/* the DEBUGFUNCTION has no effect until we enable VERBOSE */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}

View File

@@ -0,0 +1,65 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*/
#include <stdio.h>
#include <curl/curl.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl_off_t size;
struct stat file_info;
double speed_upload, total_time;
FILE *fd;
fd = fopen("debugit", "rb"); /* open file to upload */
if(!fd) {
return 1; /* can't continue */
}
stat("debugit", &file_info); /* to get the file size */
curl = curl_easy_init();
if(curl) {
/* upload to this place */
curl_easy_setopt(curl, CURLOPT_URL,
"file:///home/dast/src/curl/debug/new");
/* tell it to "upload" to the URL */
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
/* set where to read from (on Windows you need to use READFUNCTION too) */
curl_easy_setopt(curl, CURLOPT_READDATA, fd);
/* and give the size of the upload (optional) */
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
(curl_off_t)file_info.st_size);
/* enable verbose for easier tracing */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
res = curl_easy_perform(curl);
/* now extract transfer info */
curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed_upload);
curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total_time);
fprintf(stderr, "Speed: %.3f bytes/sec during %.3f seconds\n",
speed_upload, total_time);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}

104
docs/examples/ftp3rdparty.c Normal file
View File

@@ -0,0 +1,104 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*/
#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
/*
* This is an example showing how to transfer a file between two remote hosts.
*/
int main(void)
{
CURL *curl;
CURLcode res;
char sourceFileName[] = "/tmp/file";
char targetFileName[] = "/tmp/curlTargetTest.dat";
char sourceHost[] = "source";
char targetHost[] = "target";
char sourceUserPass[] = "user:pass";
char targetUserPass[] = "user:pass";
char url[100];
struct curl_slist *source_pre_cmd = NULL;
struct curl_slist *target_pre_cmd = NULL;
struct curl_slist *source_post_cmd = NULL;
struct curl_slist *target_post_cmd = NULL;
char cmd[] = "PWD"; /* just to test */
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
sprintf(url, "ftp://%s@%s/%s", targetUserPass, targetHost, targetFileName);
printf("%s\n", url);
curl_easy_setopt(curl, CURLOPT_URL, url);
/* Set a proxy host */
curl_easy_setopt(curl, CURLOPT_SOURCE_HOST, sourceHost);
/* Set a proxy user and password */
curl_easy_setopt(curl, CURLOPT_SOURCE_USERPWD, sourceUserPass);
/* Set a proxy full file name */
curl_easy_setopt(curl, CURLOPT_SOURCE_PATH, sourceFileName);
/* Set a proxy passive host */
curl_easy_setopt(curl, CURLOPT_PASV_HOST, 0); /* optional */
/* build a list of commands to pass to libcurl */
source_pre_cmd = curl_slist_append(source_pre_cmd, cmd);
/* Set a proxy pre-quote command */
curl_easy_setopt(curl, CURLOPT_SOURCE_PREQUOTE, source_pre_cmd);
/* build a list of commands to pass to libcurl */
target_pre_cmd = curl_slist_append(target_pre_cmd, cmd);
/* Set a pre-quote command */
curl_easy_setopt(curl, CURLOPT_PREQUOTE, target_pre_cmd);
/* build a list of commands to pass to libcurl */
source_post_cmd = curl_slist_append(source_post_cmd, cmd);
/* Set a proxy post-quote command */
curl_easy_setopt(curl, CURLOPT_SOURCE_POSTQUOTE, source_post_cmd);
/* build a list of commands to pass to libcurl */
target_post_cmd = curl_slist_append(target_post_cmd, cmd);
/* Set a post-quote command */
curl_easy_setopt(curl, CURLOPT_POSTQUOTE, target_post_cmd);
/* Switch on full protocol/debug output */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
res = curl_easy_perform(curl);
/* clean up the FTP commands list */
curl_slist_free_all(source_pre_cmd);
curl_slist_free_all(target_pre_cmd);
curl_slist_free_all(source_post_cmd);
curl_slist_free_all(target_post_cmd);
/* always cleanup */
curl_easy_cleanup(curl);
if(CURLE_OK != res) {
/* we failed */
fprintf(stderr, "curl told us %d\n", res);
}
}
curl_global_cleanup();
return 0;
}

View File

@@ -52,7 +52,11 @@ int main(void)
curl = curl_easy_init(); curl = curl_easy_init();
if(curl) { if(curl) {
/* Get curl 7.9.2 from sunet.se's FTP site: */ /*
* Get curl 7.9.2 from sunet.se's FTP site. curl 7.9.2 is most likely not
* present there by the time you read this, so you'd better replace the
* URL with one that works!
*/
curl_easy_setopt(curl, CURLOPT_URL, curl_easy_setopt(curl, CURLOPT_URL,
"ftp://ftp.sunet.se/pub/www/utilities/curl/curl-7.9.2.tar.gz"); "ftp://ftp.sunet.se/pub/www/utilities/curl/curl-7.9.2.tar.gz");
/* Define our callback to get called when there's data to be written */ /* Define our callback to get called when there's data to be written */

37
docs/examples/getinfo.c Normal file
View File

@@ -0,0 +1,37 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*/
#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, "curl.haxx.se");
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
char *ct;
/* ask for the content-type */
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
if((CURLE_OK == res) && ct)
printf("We received Content-Type: %s\n", ct);
}
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}

View File

@@ -62,6 +62,10 @@ int main(int argc, char **argv)
/* we pass our 'chunk' struct to the callback function */ /* we pass our 'chunk' struct to the callback function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
/* some servers don't like requests that are made without a user-agent
field, so we provide one */
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
/* get it! */ /* get it! */
curl_easy_perform(curl_handle); curl_easy_perform(curl_handle);

53
docs/examples/https.c Normal file
View File

@@ -0,0 +1,53 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*/
#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://sourceforge.net/");
#ifdef SKIP_PEER_VERIFICATION
/*
* If you want to connect to a site who isn't using a certificate that is
* signed by one of the certs in the CA bundle you have, you can skip the
* verification of the server's certificate. This makes the connection
* A LOT LESS SECURE.
*
* If you have a CA cert for the server stored someplace else than in the
* default bundle, then the CURLOPT_CAPATH option might come handy for
* you.
*/
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
#endif
#ifdef SKIP_HOSTNAME_VERFICATION
/*
* If the site you're connecting to uses a different host name that what
* they have mentioned in their server certificate's commonName (or
* subjectAltName) fields, libcurl will refuse to connect. You can skip
* this check, but this will make the connection less secure.
*/
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
#endif
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}

View File

@@ -5,7 +5,7 @@
include ../../packages/DOS/common.dj include ../../packages/DOS/common.dj
CFLAGS += -I../../include CFLAGS += -I../../include -DFALSE=0 -DTRUE=1
LIBS = ../../lib/libcurl.a LIBS = ../../lib/libcurl.a
@@ -15,14 +15,16 @@ endif
LIBS += $(WATT32_ROOT)/lib/libwatt.a $(ZLIB_ROOT)/libz.a LIBS += $(WATT32_ROOT)/lib/libwatt.a $(ZLIB_ROOT)/libz.a
PROGRAMS = fopen.exe ftpget.exe ftpgetre.exe ftpuploa.exe getinmem.exe \ PROGRAMS = fopen.exe ftpget.exe ftpgetresp.exe ftpupload.exe \
http-pos.exe httpput.exe multi-ap.exe multi-do.exe \ getinmemory.exe http-post.exe httpput.exe multi-app.exe \
multi-po.exe multi-si.exe persista.exe post-cal.exe \ multi-double.exe multi-post.exe multi-single.exe \
postit2.exe sepheade.exe simple.exe simpless.exe persistant.exe post-callback.exe postit2.exe \
sepheaders.exe simple.exe simplessl.exe https.exe \
ftp3rdparty.exe getinfo.exe
all: $(PROGRAMS) all: $(PROGRAMS)
.c.exe: %.exe: %.c
$(CC) $(CFLAGS) -o $@ $^ $(LIBS) $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
@echo @echo

View File

@@ -98,8 +98,6 @@ int main(int argc, char **argv)
} }
} }
curl_multi_cleanup(multi_handle);
/* See how the transfers went */ /* See how the transfers went */
while ((msg = curl_multi_info_read(multi_handle, &msgs_left))) { while ((msg = curl_multi_info_read(multi_handle, &msgs_left))) {
if (msg->msg == CURLMSG_DONE) { if (msg->msg == CURLMSG_DONE) {
@@ -120,6 +118,8 @@ int main(int argc, char **argv)
} }
} }
curl_multi_cleanup(multi_handle);
/* Free the CURL handles */ /* Free the CURL handles */
for (i=0; i<HANDLECOUNT; i++) for (i=0; i<HANDLECOUNT; i++)
curl_easy_cleanup(handles[i]); curl_easy_cleanup(handles[i]);

View File

@@ -0,0 +1,178 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*
* This is a very simple example using the multi interface and the debug
* callback.
*/
#include <stdio.h>
#include <string.h>
/* somewhat unix-specific */
#include <sys/time.h>
#include <unistd.h>
/* curl stuff */
#include <curl/curl.h>
typedef char bool;
#define TRUE 1
static
void dump(const char *text,
FILE *stream, unsigned char *ptr, size_t size,
bool nohex)
{
size_t i;
size_t c;
unsigned int width=0x10;
if(nohex)
/* without the hex output, we can fit more on screen */
width = 0x40;
fprintf(stream, "%s, %zd bytes (0x%zx)\n", text, size, size);
for(i=0; i<size; i+= width) {
fprintf(stream, "%04zx: ", i);
if(!nohex) {
/* hex not disabled, show it */
for(c = 0; c < width; c++)
if(i+c < size)
fprintf(stream, "%02x ", ptr[i+c]);
else
fputs(" ", stream);
}
for(c = 0; (c < width) && (i+c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */
if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
i+=(c+2-width);
break;
}
fprintf(stream, "%c",
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
/* check again for 0D0A, to avoid an extra \n if it's at width */
if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
i+=(c+3-width);
break;
}
}
fputc('\n', stream); /* newline */
}
fflush(stream);
}
static
int my_trace(CURL *handle, curl_infotype type,
unsigned char *data, size_t size,
void *userp)
{
const char *text;
(void)handle; /* prevent compiler warning */
switch (type) {
case CURLINFO_TEXT:
fprintf(stderr, "== Info: %s", data);
default: /* in case a new one is introduced to shock us */
return 0;
case CURLINFO_HEADER_OUT:
text = "=> Send header";
break;
case CURLINFO_DATA_OUT:
text = "=> Send data";
break;
case CURLINFO_HEADER_IN:
text = "<= Recv header";
break;
case CURLINFO_DATA_IN:
text = "<= Recv data";
break;
}
dump(text, stderr, data, size, TRUE);
return 0;
}
/*
* Simply download a HTTP file.
*/
int main(int argc, char **argv)
{
CURL *http_handle;
CURLM *multi_handle;
int still_running; /* keep number of running handles */
http_handle = curl_easy_init();
/* set the options (I left out a few, you'll get the point anyway) */
curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.haxx.se/");
curl_easy_setopt(http_handle, CURLOPT_DEBUGFUNCTION, my_trace);
curl_easy_setopt(http_handle, CURLOPT_VERBOSE, TRUE);
/* init a multi stack */
multi_handle = curl_multi_init();
/* add the individual transfers */
curl_multi_add_handle(multi_handle, http_handle);
/* we start some action by calling perform right away */
while(CURLM_CALL_MULTI_PERFORM ==
curl_multi_perform(multi_handle, &still_running));
while(still_running) {
struct timeval timeout;
int rc; /* select() return code */
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
/* set a suitable timeout to play around with */
timeout.tv_sec = 1;
timeout.tv_usec = 0;
/* get file descriptors from the transfers */
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
switch(rc) {
case -1:
/* select error */
still_running = 0;
printf("select() returns error, this is badness\n");
break;
case 0:
default:
/* timeout or readable/writable sockets */
while(CURLM_CALL_MULTI_PERFORM ==
curl_multi_perform(multi_handle, &still_running));
break;
}
}
curl_multi_cleanup(multi_handle);
curl_easy_cleanup(http_handle);
return 0;
}

View File

@@ -57,9 +57,6 @@ int main(void)
/* Now specify we want to POST data */ /* Now specify we want to POST data */
curl_easy_setopt(curl, CURLOPT_POST, TRUE); curl_easy_setopt(curl, CURLOPT_POST, TRUE);
/* Set the expected POST size */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, pooh.sizeleft);
/* we want to use our own read function */ /* we want to use our own read function */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
@@ -69,6 +66,47 @@ int main(void)
/* get verbose debug output please */ /* get verbose debug output please */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
/*
If you use POST to a 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
CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must
specify the size in the request.
*/
#ifdef USE_CHUNKED
{
curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked");
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER);
/* use curl_slist_free_all() after the *perform() call to free this
list again */
}
#else
/* Set the expected POST size. If you want to POST large amounts of data,
consider CURLOPT_POSTFIELDSIZE_LARGE */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, pooh.sizeleft);
#endif
#ifdef DISABLE_EXPECT
/*
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue"
header. You can disable this header with CURLOPT_HTTPHEADER as usual.
NOTE: if you want chunked transfer too, you need to combine these two
since you can only set one list of headers with CURLOPT_HTTPHEADER. */
/* A less good option would be to enforce HTTP 1.0, but that might also
have other implications. */
{
curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Expect:");
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER);
/* use curl_slist_free_all() after the *perform() call to free this
list again */
}
#endif
/* Perform the request, res will get the return code */ /* Perform the request, res will get the return code */
res = curl_easy_perform(curl); res = curl_easy_perform(curl);

View File

@@ -89,19 +89,25 @@ int main(int argc, char **argv)
/* cert is stored PEM coded in file... */ /* cert is stored PEM coded in file... */
/* since PEM is default, we needn't set it for PEM */ /* since PEM is default, we needn't set it for PEM */
curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM"); curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
/* set the cert for client authentication */ /* set the cert for client authentication */
curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile); curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile);
/* sorry, for engine we must set the passphrase /* sorry, for engine we must set the passphrase
(if the key has one...) */ (if the key has one...) */
if (pPassphrase) if (pPassphrase)
curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,pPassphrase); curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,pPassphrase);
/* if we use a key stored in a crypto engine, /* if we use a key stored in a crypto engine,
we must set the key type to "ENG" */ we must set the key type to "ENG" */
curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType); curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType);
/* set the private key (file or ID in engine) */ /* set the private key (file or ID in engine) */
curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName); curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName);
/* set the file with the certs vaildating the server */ /* set the file with the certs vaildating the server */
curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile); curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile);
/* disconnect if we can't validate server's cert */ /* disconnect if we can't validate server's cert */
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1); curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1);

View File

@@ -1,13 +1,13 @@
<HTML> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HEAD> <html><head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Index to Curl documentation</TITLE> <title>Index to Curl documentation</title>
</HEAD> </head>
<BODY> <body>
<H1 ALIGN="CENTER">Index to Curl documentation</H1> <h1 align="center">Index to Curl documentation</h1>
<H2>Programs</H2> <h2>Programs</h2>
<a href="curl-config.html">curl-config</A> <a href="curl-config.html">curl-config</A>
<br><a href="curl.html">curl</A> <br><a href="curl.html">curl</A>
@@ -17,5 +17,4 @@
<h2>libcurl</h2> <h2>libcurl</h2>
See the <a href="libcurl/index.html">libcurl section</a> See the <a href="libcurl/index.html">libcurl section</a>
</BODY> </body></html>
</HTML>

File diff suppressed because it is too large Load Diff

View File

@@ -4,119 +4,51 @@
AUTOMAKE_OPTIONS = foreign no-dependencies AUTOMAKE_OPTIONS = foreign no-dependencies
man_MANS = \ man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \
curl_easy_cleanup.3 \ curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3 \
curl_easy_getinfo.3 \ curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.3 \
curl_easy_init.3 \ curl_slist_append.3 curl_slist_free_all.3 curl_version.3 \
curl_easy_perform.3 \ curl_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3 \
curl_easy_setopt.3 \ curl_strequal.3 curl_mprintf.3 curl_global_init.3 \
curl_easy_duphandle.3 \ curl_global_cleanup.3 curl_multi_add_handle.3 curl_multi_cleanup.3 \
curl_formparse.3 \ curl_multi_fdset.3 curl_multi_info_read.3 curl_multi_init.3 \
curl_formadd.3 \ curl_multi_perform.3 curl_multi_remove_handle.3 curl_share_cleanup.3 \
curl_formfree.3 \ curl_share_init.3 curl_share_setopt.3 libcurl.3 libcurl-easy.3 \
curl_getdate.3 \ libcurl-multi.3 libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \
curl_getenv.3 \ curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \
curl_slist_append.3 \ libcurl-tutorial.3 curl_easy_reset.3
curl_slist_free_all.3 \
curl_version.3 \
curl_version_info.3 \
curl_escape.3 \
curl_unescape.3 \
curl_free.3 \
curl_strequal.3 \
curl_strnequal.3 \
curl_mprintf.3 \
curl_global_init.3 \
curl_global_cleanup.3 \
curl_multi_add_handle.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_share_cleanup.3 curl_share_init.3 curl_share_setopt.3 \
libcurl.3 \
libcurl-easy.3 \
libcurl-multi.3 \
libcurl-share.3 \
libcurl-errors.3
HTMLPAGES = \ HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \
curl_easy_cleanup.html \ curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \
curl_easy_getinfo.html \ curl_easy_duphandle.html curl_formadd.html curl_formfree.html \
curl_easy_init.html \ curl_getdate.html curl_getenv.html curl_slist_append.html \
curl_easy_perform.html \ curl_slist_free_all.html curl_version.html curl_version_info.html \
curl_easy_setopt.html \ curl_escape.html curl_unescape.html curl_free.html curl_strequal.html \
curl_easy_duphandle.html \ curl_mprintf.html curl_global_init.html curl_global_cleanup.html \
curl_formadd.html \ curl_multi_add_handle.html curl_multi_cleanup.html \
curl_formparse.html \ curl_multi_fdset.html curl_multi_info_read.html curl_multi_init.html \
curl_formfree.html \ curl_multi_perform.html curl_multi_remove_handle.html \
curl_getdate.html \
curl_getenv.html \
curl_slist_append.html \
curl_slist_free_all.html \
curl_version.html \
curl_version_info.html \
curl_escape.html \
curl_unescape.html \
curl_free.html \
curl_strequal.html \
curl_strnequal.html \
curl_mprintf.html \
curl_global_init.html \
curl_global_cleanup.html \
curl_multi_add_handle.html \
curl_multi_cleanup.html \
curl_multi_fdset.html \
curl_multi_info_read.html \
curl_multi_init.html \
curl_multi_perform.html \
curl_multi_remove_handle.html \
curl_share_cleanup.html curl_share_init.html curl_share_setopt.html \ curl_share_cleanup.html curl_share_init.html curl_share_setopt.html \
libcurl.html \ libcurl.html libcurl-multi.html libcurl-easy.html libcurl-share.html \
libcurl-multi.html \ libcurl-errors.html curl_easy_strerror.html curl_multi_strerror.html \
libcurl-easy.html \ curl_share_strerror.html curl_global_init_mem.html \
libcurl-share.html \ libcurl-tutorial.html curl_easy_reset.html
libcurl-errors.html
PDFPAGES = \ PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf \
curl_easy_cleanup.pdf \ curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf \
curl_easy_getinfo.pdf \ curl_easy_duphandle.pdf curl_formadd.pdf curl_formfree.pdf \
curl_easy_init.pdf \ curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \
curl_easy_perform.pdf \ curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \
curl_easy_setopt.pdf \ curl_escape.pdf curl_unescape.pdf curl_free.pdf curl_strequal.pdf \
curl_easy_duphandle.pdf \ curl_mprintf.pdf curl_global_init.pdf curl_global_cleanup.pdf \
curl_formadd.pdf \ curl_multi_add_handle.pdf curl_multi_cleanup.pdf curl_multi_fdset.pdf \
curl_formparse.pdf \ curl_multi_info_read.pdf curl_multi_init.pdf curl_multi_perform.pdf \
curl_formfree.pdf \ curl_multi_remove_handle.pdf curl_share_cleanup.pdf \
curl_getdate.pdf \ curl_share_init.pdf curl_share_setopt.pdf libcurl.pdf \
curl_getenv.pdf \ libcurl-multi.pdf libcurl-easy.pdf libcurl-share.pdf \
curl_slist_append.pdf \ libcurl-errors.pdf curl_easy_strerror.pdf curl_multi_strerror.pdf \
curl_slist_free_all.pdf \ curl_share_strerror.pdf curl_global_init_mem.pdf libcurl-tutorial.pdf \
curl_version.pdf \ curl_easy_reset.pdf
curl_version_info.pdf \
curl_escape.pdf \
curl_unescape.pdf \
curl_free.pdf \
curl_strequal.pdf \
curl_strnequal.pdf \
curl_mprintf.pdf \
curl_global_init.pdf \
curl_global_cleanup.pdf \
curl_multi_add_handle.pdf \
curl_multi_cleanup.pdf \
curl_multi_fdset.pdf \
curl_multi_info_read.pdf \
curl_multi_init.pdf \
curl_multi_perform.pdf \
curl_multi_remove_handle.pdf \
curl_share_cleanup.pdf curl_share_init.pdf curl_share_setopt.pdf \
libcurl.pdf \
libcurl-multi.pdf \
libcurl-easy.pdf \
libcurl-share.pdf \
libcurl-errors.pdf
CLEANFILES = $(HTMLPAGES) $(PDFPAGES) CLEANFILES = $(HTMLPAGES) $(PDFPAGES)

View File

@@ -19,6 +19,9 @@ this documentation describes further down). The data pointed-to will be
filled in accordingly and can be relied upon only if the function returns filled in accordingly and can be relied upon only if the function returns
CURLE_OK. This function is intended to get used *AFTER* a performed transfer, CURLE_OK. This function is intended to get used *AFTER* a performed transfer,
all results from this function are undefined until the transfer is completed. all results from this function are undefined until the transfer is completed.
You should not free the memory returned by this function unless it is
explictly mentioned below.
.SH AVAILABLE INFORMATION .SH AVAILABLE INFORMATION
The following information can be extracted: The following information can be extracted:
.IP CURLINFO_EFFECTIVE_URL .IP CURLINFO_EFFECTIVE_URL
@@ -107,6 +110,9 @@ CURLOPT_HTTPAUTH option for \fIcurl_easy_setopt(3)\fP. (Added in 7.10.8)
.IP CURLINFO_PROXYAUTH_AVAIL .IP CURLINFO_PROXYAUTH_AVAIL
Pass a pointer to a long to receive a bitmask indicating the authentication Pass a pointer to a long to receive a bitmask indicating the authentication
method(s) available for your proxy authentication. (Added in 7.10.8) method(s) available for your proxy authentication. (Added in 7.10.8)
.IP CURLINFO_OS_ERRNO
Pass a pointer to a long to receive the errno variable from a connect failure.
(Added in 7.12.2)
.SH RETURN VALUE .SH RETURN VALUE
If the operation was successful, CURLE_OK is returned. Otherwise an If the operation was successful, CURLE_OK is returned. Otherwise an
appropriate error code will be returned. appropriate error code will be returned.

View File

@@ -1,5 +1,3 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_easy_init 3 "4 March 2002" "libcurl 7.8.1" "libcurl Manual" .TH curl_easy_init 3 "4 March 2002" "libcurl 7.8.1" "libcurl Manual"
@@ -20,4 +18,4 @@ initializes curl and this call \fBMUST\fP have a corresponding call to
If this function returns NULL, something went wrong and you cannot use the If this function returns NULL, something went wrong and you cannot use the
other curl functions. other curl functions.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_easy_cleanup "(3), " curl_global_init "(3) .BR curl_easy_cleanup "(3), " curl_global_init "(3), " curl_easy_reset "(3)"

View File

@@ -0,0 +1,24 @@
.\" $Id$
.\"
.TH curl_easy_reset 3 "31 July 2004" "libcurl 7.12.1" "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 ");"
.SH DESCRIPTION
Re-initializes all options previously set on a specified CURL handle to the
default values. This puts back the handle to the same state as it was in when
it was just created with \fIcurl_easy_init(3)\fP.
It does not change the following information kept in the handle: live
connections, the Session ID cache, the DNS cache, the cookies and shares.
This function was added in libcurl 7.12.1.
.SH RETURN VALUE
Nothing
.SH "SEE ALSO"
.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3)

View File

@@ -32,16 +32,17 @@ CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
curl_easy_setopt() is used to tell libcurl how to behave. By using the curl_easy_setopt() is used to tell libcurl how to behave. By using the
appropriate options to \fIcurl_easy_setopt\fP, you can change libcurl's appropriate options to \fIcurl_easy_setopt\fP, you can change libcurl's
behavior. All options are set with the \fIoption\fP followed by a behavior. All options are set with the \fIoption\fP followed by a
\fIparameter\fP. That parameter can be a long, a function pointer or an object \fIparameter\fP. That parameter can be a \fBlong\fP, a \fBfunction pointer\fP,
pointer, all depending on what the specific option expects. Read this manual an \fBobject pointer\fP or a \fBcurl_off_t\fP, depending on what the specific
carefully as bad input values may cause libcurl to behave badly! You can only option expects. Read this manual carefully as bad input values may cause
set one option in each function call. A typical application uses many libcurl to behave badly! You can only set one option in each function call. A
curl_easy_setopt() calls in the setup phase. typical application uses many curl_easy_setopt() calls in the setup phase.
Options set with this function call are valid for all forthcoming transfers Options set with this function call are valid for all forthcoming transfers
performed using this \fIhandle\fP. The options are not in any way reset performed using this \fIhandle\fP. The options are not in any way reset
between transfers, so if you want subsequent transfers with different options, between transfers, so if you want subsequent transfers with different options,
you must change them between the transfers. you must change them between the transfers. You can optionally reset all
options back to internal default with \fIcurl_easy_reset(3)\fP.
\fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be \fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be
copied by the library. Instead you should keep them available until libcurl no copied by the library. Instead you should keep them available until libcurl no
@@ -92,6 +93,9 @@ of bytes actually taken care of. If that amount differs from the amount passed
to your function, it'll signal an error to the library and it will abort the to your function, it'll signal an error to the library and it will abort the
transfer and return \fICURLE_WRITE_ERROR\fP. transfer and return \fICURLE_WRITE_ERROR\fP.
This function may be called with zero bytes data if the transfered file is
empty.
Set the \fIstream\fP argument with the \fICURLOPT_WRITEDATA\fP option. Set the \fIstream\fP argument with the \fICURLOPT_WRITEDATA\fP option.
\fBNOTE:\fP you will be passed as much data as possible in all invokes, but \fBNOTE:\fP you will be passed as much data as possible in all invokes, but
@@ -119,6 +123,15 @@ filled with at most \fIsize\fP multiplied with \fInmemb\fP number of
bytes. Your function must return the actual number of bytes that you stored in bytes. Your function must return the actual number of bytes that you stored in
that memory area. Returning 0 will signal end-of-file to the library and cause that memory area. Returning 0 will signal end-of-file to the library and cause
it to stop the current transfer. it to stop the current transfer.
If you stop the current transfer by returning 0 "pre-maturely" (i.e before the
server expected it, like when you've told you will upload N bytes and you
upload less than N bytes), you may experience that the server "hangs" waiting
for the rest of the data that won't come.
In libcurl 7.12.1 and later, the read callback may return
\fICURL_READFUNC_ABORT\fP to stop the current operation at once, with a
\fICURLE_ABORTED_BY_CALLBACK\fP error code from the transfer.
.IP CURLOPT_READDATA .IP CURLOPT_READDATA
Data pointer to pass to the file read function. Note that if you specify the Data pointer to pass to the file read function. Note that if you specify the
\fICURLOPT_READFUNCTION\fP, this is the pointer you'll get as input. If you \fICURLOPT_READFUNCTION\fP, this is the pointer you'll get as input. If you
@@ -456,23 +469,49 @@ redirections have been followed, the next redirect will cause an error
.IP CURLOPT_PUT .IP CURLOPT_PUT
A non-zero parameter tells the library to use HTTP PUT to transfer data. The A non-zero parameter tells the library to use HTTP PUT to transfer data. The
data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP. data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP.
This option is deprecated and starting with version 7.12.1 you should instead
use \fICURLOPT_UPLOAD\fP.
.IP CURLOPT_POST .IP CURLOPT_POST
A non-zero parameter tells the library to do a regular HTTP post. This is a A non-zero parameter tells the library to do a regular HTTP post. This will
normal application/x-www-form-urlencoded kind, which is the most commonly used also make the library use the a "Content-Type:
one by HTML forms. See the \fICURLOPT_POSTFIELDS\fP option for how to specify application/x-www-form-urlencoded" header. (This is by far the most commonly
the data to post and \fICURLOPT_POSTFIELDSIZE\fP in how to set the data used POST method).
size. Using the \fICURLOPT_POSTFIELDS\fP option implies this option.
Use the \fICURLOPT_POSTFIELDS\fP option to specify what data to post and
\fICURLOPT_POSTFIELDSIZE\fP to set the data size. Optionally, you can provide
data to POST using the \fICURLOPT_READFUNCTION\fP and \fICURLOPT_READDATA\fP
options.
You can override the default POST Content-Type: header by setting your own
with \fICURLOPT_HTTPHEADER\fP.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
If you use POST to a 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\fP. With HTTP 1.0 or without chunked transfer, you must
specify the size in the request.
NOTE: if you have issued a POST request and want to make a HEAD or GET
instead, you must explictly pick the new request type using
\fICURLOPT_NOBODY\fP or \fICURLOPT_HTTPGET\fP or similar.
.IP CURLOPT_POSTFIELDS .IP CURLOPT_POSTFIELDS
Pass a char * as parameter, which should be the full data to post in an HTTP Pass a char * as parameter, which should be the full data to post in an HTTP
post operation. You need to make sure that the data is formatted the way you POST operation. You must make sure that the data is formatted the way you want
want the server to receive it. libcurl will not convert or encode it for the server to receive it. libcurl will not convert or encode it for you. Most
you. Most web servers will assume this data to be url-encoded. Take note. web servers will assume this data to be url-encoded. Take note.
This POST is a normal application/x-www-form-urlencoded kind (and libcurl will This POST is a normal application/x-www-form-urlencoded kind (and libcurl will
set that Content-Type by default when this option is used), which is the most set that Content-Type by default when this option is used), which is the most
commonly used one by HTML forms. See also the \fICURLOPT_POST\fP. Using commonly used one by HTML forms. See also the \fICURLOPT_POST\fP. Using
\fICURLOPT_POSTFIELDS\fP implies \fICURLOPT_POST\fP. \fICURLOPT_POSTFIELDS\fP implies \fICURLOPT_POST\fP.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
\fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out \fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out
the \fICURLOPT_HTTPPOST\fP option. the \fICURLOPT_HTTPPOST\fP option.
.IP CURLOPT_POSTFIELDSIZE .IP CURLOPT_POSTFIELDSIZE
@@ -493,6 +532,9 @@ list of 'struct HttpPost' structs properly filled in. The best and most
elegant way to do this, is to use \fIcurl_formadd(3)\fP as documented. The elegant way to do this, is to use \fIcurl_formadd(3)\fP as documented. The
data in this list must remain intact until you close this curl handle again data in this list must remain intact until you close this curl handle again
with \fIcurl_easy_cleanup(3)\fP. with \fIcurl_easy_cleanup(3)\fP.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
.IP CURLOPT_REFERER .IP CURLOPT_REFERER
Pass a pointer to a zero terminated string as parameter. It will be used to Pass a pointer to a zero terminated string as parameter. It will be used to
set the Referer: header in the http request sent to the remote server. This set the Referer: header in the http request sent to the remote server. This
@@ -522,6 +564,8 @@ The first line in a request (usually containing a GET or POST) is not a header
and cannot be replaced using this option. Only the lines following the and cannot be replaced using this option. Only the lines following the
request-line are headers. request-line are headers.
Pass a NULL to this to reset back to no custom headers.
\fBNOTE:\fP The most commonly replaced headers have "shortcuts" in the options \fBNOTE:\fP The most commonly replaced headers have "shortcuts" in the options
\fICURLOPT_COOKIE\fP, \fICURLOPT_USERAGENT\fP and \fICURLOPT_REFERER\fP. \fICURLOPT_COOKIE\fP, \fICURLOPT_USERAGENT\fP and \fICURLOPT_REFERER\fP.
.IP CURLOPT_HTTP200ALIASES .IP CURLOPT_HTTP200ALIASES
@@ -583,7 +627,7 @@ cookies are cookies without expiry date and they are meant to be alive and
existing for this "session" only. existing for this "session" only.
.IP CURLOPT_HTTPGET .IP CURLOPT_HTTPGET
Pass a long. If the long is non-zero, this forces the HTTP request to get back Pass a long. If the long is non-zero, this forces the HTTP request to get back
to GET. Only really usable if POST, PUT or a custom request have been used to GET. usable if a POST, HEAD, PUT or a custom request have been used
previously using the same curl handle. previously using the same curl handle.
.IP CURLOPT_HTTP_VERSION .IP CURLOPT_HTTP_VERSION
Pass a long, set to one of the values described below. They force libcurl to Pass a long, set to one of the values described below. They force libcurl to
@@ -676,6 +720,18 @@ Require SSL for the control connection or fail with \fICURLE_FTP_SSL_FAILED\fP.
.IP CURLFTPSSL_ALL .IP CURLFTPSSL_ALL
Require SSL for all communication or fail with \fICURLE_FTP_SSL_FAILED\fP. Require SSL for all communication or fail with \fICURLE_FTP_SSL_FAILED\fP.
.RE .RE
.IP CURLOPT_FTPSSLAUTH
Pass a long using one of the values from below, to alter how libcurl issues
\&"AUTH TLS" or "AUTH SSL" when FTP over SSL is activated (see
\fICURLOPT_FTP_SSL\fP).
.RS
.IP CURLFTPAUTH_DEFAULT
Allow libcurl to decide
.IP CURLFTPAUTH_SSL
Try "AUTH SSL" first, and only if that fails try "AUTH TLS"
.IP CURLFTPAUTH_TLS
Try "AUTH TLS" first, and only if that fails try "AUTH SSL"
.RE
.SH PROTOCOL OPTIONS .SH PROTOCOL OPTIONS
.IP CURLOPT_TRANSFERTEXT .IP CURLOPT_TRANSFERTEXT
A non-zero parameter tells the library to use ASCII mode for ftp transfers, A non-zero parameter tells the library to use ASCII mode for ftp transfers,
@@ -692,13 +748,14 @@ want. It should be in the format "X-Y", where X or Y may be left out. HTTP
transfers also support several intervals, separated with commas as in transfers also support several intervals, separated with commas as in
\fI"X-Y,N-M"\fP. Using this kind of multiple intervals will cause the HTTP \fI"X-Y,N-M"\fP. Using this kind of multiple intervals will cause the HTTP
server to send the response document in pieces (using standard MIME separation server to send the response document in pieces (using standard MIME separation
techniques). techniques). Pass a NULL to this option to disable the use of ranges.
.IP CURLOPT_RESUME_FROM .IP CURLOPT_RESUME_FROM
Pass a long as parameter. It contains the offset in number of bytes that you Pass a long as parameter. It contains the offset in number of bytes that you
want the transfer to start from. want the transfer to start from. Set this option to 0 to make the transfer
start from the beginning (effectively disabling resume).
.IP CURLOPT_RESUME_FROM_LARGE .IP CURLOPT_RESUME_FROM_LARGE
Pass an curl_off_t as parameter. It contains the offset in number of bytes Pass a curl_off_t as parameter. It contains the offset in number of bytes that
that you want the transfer to start from. (Added in 7.11.0) you want the transfer to start from. (Added in 7.11.0)
.IP CURLOPT_CUSTOMREQUEST .IP CURLOPT_CUSTOMREQUEST
Pass a pointer to a zero terminated string as parameter. It will be user Pass a pointer to a zero terminated string as parameter. It will be user
instead of GET or HEAD when doing an HTTP request, or instead of LIST or NLST instead of GET or HEAD when doing an HTTP request, or instead of LIST or NLST
@@ -706,11 +763,13 @@ when doing an ftp directory listing. This is useful for doing DELETE or other
more or less obscure HTTP requests. Don't do this at will, make sure your more or less obscure HTTP requests. Don't do this at will, make sure your
server supports the command first. server supports the command first.
NOTE: many people have wrongly used this option to replace the entire request Restore to the internal default by setting this to NULL.
with their own, including multiple headers and POST contents. While that might
work in many cases, it will cause libcurl to send invalid requests and it \fBNOTE:\fP Many people have wrongly used this option to replace the entire
could possibly confuse the remote server badly. Use \fICURLOPT_POST\fP and request with their own, including multiple headers and POST contents. While
\fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to that might work in many cases, it will cause libcurl to send invalid requests
and it could possibly confuse the remote server badly. Use \fICURLOPT_POST\fP
and \fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to
replace or extend the set of headers sent by libcurl. Use replace or extend the set of headers sent by libcurl. Use
\fICURLOPT_HTTP_VERSION\fP to change HTTP version. \fICURLOPT_HTTP_VERSION\fP to change HTTP version.
.IP CURLOPT_FILETIME .IP CURLOPT_FILETIME
@@ -723,6 +782,10 @@ can be used after a transfer to extract the received time (if any).
A non-zero parameter tells the library to not include the body-part in the A non-zero parameter tells the library to not include the body-part in the
output. This is only relevant for protocols that have separate header and body output. This is only relevant for protocols that have separate header and body
parts. On HTTP(S) servers, this will make libcurl do a HEAD request. parts. On HTTP(S) servers, this will make libcurl do a HEAD request.
To change back to GET, you should use \fICURLOPT_HTTPGET\fP. To change back to
POST, you should use \fICURLOPT_POST\fP. Setting \fICURLOPT_NOBODY\fP to zero
has no effect.
.IP CURLOPT_INFILESIZE .IP CURLOPT_INFILESIZE
When uploading a file to a remote site, this option should be used to tell When uploading a file to a remote site, this option should be used to tell
libcurl what the expected size of the infile is. This value should be passed libcurl what the expected size of the infile is. This value should be passed
@@ -733,31 +796,42 @@ libcurl what the expected size of the infile is. This value should be passed
as a curl_off_t. (Added in 7.11.0) as a curl_off_t. (Added in 7.11.0)
.IP CURLOPT_UPLOAD .IP CURLOPT_UPLOAD
A non-zero parameter tells the library to prepare for an upload. The A non-zero parameter tells the library to prepare for an upload. The
\fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE_LARGE\fP are also interesting \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZEE\fP or
for uploads. \fICURLOPT_INFILESIZE_LARGE\fP are also interesting for uploads. If the
protocol is HTTP, uploading means using the PUT request unless you tell
libcurl otherwise.
Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
If you use PUT to a HTTP 1.1 server, you can upload data without knowing the
size before starting the transfer if you use chunked encoding. You enable this
by adding a header like "Transfer-Encoding: chunked" with
\fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must
specify the size.
.IP CURLOPT_MAXFILESIZE .IP CURLOPT_MAXFILESIZE
Pass a long as parameter. This allows you to specify the maximum size (in Pass a long as parameter. This allows you to specify the maximum size (in
bytes) of a file to download. If the file requested is larger than this value, bytes) of a file to download. If the file requested is larger than this value,
the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned. the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.
NOTE: The file size is not always known prior to download, and for such files \fBNOTE:\fP The file size is not always known prior to download, and for such
this option has no effect even if the file transfer ends up being larger than files this option has no effect even if the file transfer ends up being larger
this given limit. This concerns both FTP and HTTP transfers. than this given limit. This concerns both FTP and HTTP transfers.
.IP CURLOPT_MAXFILESIZE_LARGE .IP CURLOPT_MAXFILESIZE_LARGE
Pass a curl_off_t as parameter. This allows you to specify the maximum size Pass a curl_off_t as parameter. This allows you to specify the maximum size
(in bytes) of a file to download. If the file requested is larger than this (in bytes) of a file to download. If the file requested is larger than this
value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be
returned. (Added in 7.11.0) returned. (Added in 7.11.0)
NOTE: The file size is not always known prior to download, and for such files \fBNOTE:\fP The file size is not always known prior to download, and for such
this option has no effect even if the file transfer ends up being larger than files this option has no effect even if the file transfer ends up being larger
this given limit. This concerns both FTP and HTTP transfers. than this given limit. This concerns both FTP and HTTP transfers.
.IP CURLOPT_TIMECONDITION .IP CURLOPT_TIMECONDITION
Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time
value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP and FTP. or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP and FTP.
NOTE: The last modification time of a file is not always known and in such \fBNOTE:\fP The last modification time of a file is not always known and in such
instances this feature will have no effect even if the given time condition instances this feature will have no effect even if the given time condition
would have not been met. would have not been met.
.IP CURLOPT_TIMEVALUE .IP CURLOPT_TIMEVALUE
@@ -867,8 +941,9 @@ Pass a pointer to a zero terminated string as parameter. The string should be
the format of your private key. Supported formats are "PEM", "DER" and "ENG". the format of your private key. Supported formats are "PEM", "DER" and "ENG".
\fBNOTE:\fP The format "ENG" enables you to load the private key from a crypto \fBNOTE:\fP The format "ENG" enables you to load the private key from a crypto
engine. in this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to engine. In this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to
the engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP. the engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP.
\&"DER" format key file currently does not work because of a bug in OpenSSL.
.IP CURLOPT_SSLKEYPASSWD .IP CURLOPT_SSLKEYPASSWD
Pass a pointer to a zero terminated string as parameter. It will be used as Pass a pointer to a zero terminated string as parameter. It will be used as
the password required to use the \fICURLOPT_SSLKEY\fP private key. the password required to use the \fICURLOPT_SSLKEY\fP private key.
@@ -959,5 +1034,9 @@ standard for details.
CURLE_OK (zero) means that the option was set properly, non-zero means an CURLE_OK (zero) means that the option was set properly, non-zero means an
error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP
man page for the full list with descriptions. man page for the full list with descriptions.
If you try to set an option that libcurl doesn't know about, perhaps because
the library is too old to support it or the option was removed in a recent
version, this function will return \fICURLE_FAILED_INIT\fP.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_easy_init "(3), " curl_easy_cleanup "(3), " .BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), "

View File

@@ -0,0 +1,20 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" $Id$
.\"
.TH curl_easy_strerror 3 "26 Apr 2004" "libcurl 7.12" "libcurl Manual"
.SH NAME
curl_easy_strerror - return string describing error code
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>
.BI "const char *curl_easy_strerror(CURLcode " errornum ");"
.SH DESCRIPTION
The curl_easy_strerror() function returns a string describing the CURLcode
error code passed in the argument \fIerrornum\fP.
This function was added in libcurl 7.12.0
.SH RETURN VALUE
A pointer to a zero terminated string.
.SH "SEE ALSO"
.BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_share_strerror "(3)"

View File

@@ -26,6 +26,9 @@ NULL in the first call to this function. All list-data will be allocated by
the function itself. You must call \fIcurl_formfree\fP after the form post has the function itself. You must call \fIcurl_formfree\fP after the form post has
been done to free the resources again. been done to free the resources again.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
First, there are some basics you need to understand about multipart/formdata First, there are some basics you need to understand about multipart/formdata
posts. Each part consists of at least a NAME and a CONTENTS part. If the part posts. Each part consists of at least a NAME and a CONTENTS part. If the part
is made for file upload, there are also a stored CONTENT-TYPE and a is made for file upload, there are also a stored CONTENT-TYPE and a
@@ -126,8 +129,8 @@ defines.
.SH EXAMPLE .SH EXAMPLE
.nf .nf
struct HttpPost* post = NULL; struct curl_httppost* post = NULL;
struct HttpPost* last = NULL; struct curl_httppost* last = NULL;
char namebuffer[] = "name buffer"; char namebuffer[] = "name buffer";
long namelength = strlen(namebuffer); long namelength = strlen(namebuffer);
char buffer[] = "test buffer"; char buffer[] = "test buffer";
@@ -205,5 +208,4 @@ defines.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_easy_setopt "(3), " .BR curl_easy_setopt "(3), "
.BR curl_formparse "(3) [deprecated], "
.BR curl_formfree "(3)" .BR curl_formfree "(3)"

View File

@@ -1,18 +0,0 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" $Id$
.\"
.TH curl_formparse 3 "17 Dec 2001" "libcurl 7.9.2" "libcurl Manual"
.SH NAME
curl_formparse - add a section to a multipart/formdata HTTP POST:
deprecated (use curl_formadd instead)
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_formparse(char * " string, " struct HttpPost ** " firstitem,
.BI "struct HttpPost ** " lastitem ");"
.ad
.SH DESCRIPTION
This has been removed deliberately. The \fBcurl_formadd\fP has been introduced
to replace this function. Do not use this. Convert to the new function
now. curl_formparse() will be removed from a future version of libcurl.

View File

@@ -4,35 +4,36 @@
.\" .\"
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual" .TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
.SH NAME .SH NAME
curl_getdate - Convert an date in a ASCII string to number of seconds since curl_getdate - Convert an date string to number of seconds since January 1,
January 1, 1970 1970
.SH SYNOPSIS .SH SYNOPSIS
.B #include <curl/curl.h> .B #include <curl/curl.h>
.sp .sp
.BI "time_t curl_getdate(char *" datestring ", time_t *"now" ); .BI "time_t curl_getdate(char *" datestring ", time_t *"now" );"
.ad .ad
.SH DESCRIPTION .SH DESCRIPTION
This function returns the number of seconds since January 1st 1970, for the This function returns the number of seconds since January 1st 1970 in the UTC
date and time that the time zone, for the date and time that the \fIdatestring\fP parameter
.I datestring specifies. The \fInow\fP parameter is not used, pass a NULL there.
parameter specifies. The
.I now \fBNOTE:\fP This function was rewritten for the 7.12.2 release and this
parameter is there and should hold the current time to allow the datestring to documentation covers the functionality of the new one. The new one is not
specify relative dates/times. Read further in the date string parser section feature-complete with the old one, but most of the formats supported by the
below. new one was supported by the old too.
.SH PARSING DATES AND TIMES .SH PARSING DATES AND TIMES
A "date" is a string, possibly empty, containing many items separated by A "date" is a string containing several items separated by whitespace. The
whitespace. The whitespace may be omitted when no ambiguity arises. The order of the items is immaterial. A date string may contain many flavors of
empty string means the beginning of today (i.e., midnight). Order of the items:
items is immaterial. A date string may contain many flavors of items:
.TP 0.8i .TP 0.8i
.B calendar date items .B calendar date items
This can be specified in a number of different ways. Including 1970-09-17, 70-9-17, 70-09-17, 9/17/72, 24 September 1972, 24 Sept 72, 24 Sep 72, Sep 24, 1972, 24-sep-72, 24sep72. Can be specified several ways. Month names can only be three-letter
The year can also be omitted, for example: 9/17 or "sep 17". abbrivations, numbers can be zero-prefixed and the year may use 2 or 4 digits.
Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
.TP .TP
.B time of the day items .B time of the day items
This string specifies the time on a given day. Syntax supported includes: This string specifies the time on a given day. You must specify it with 6
18:19:0, 18:19, 6:19pm, 18:19-0500 (for specifying the time zone as well). digits with two colons: HH:MM:SS. To not include the time in a date string,
will make the function assume 00:00:00. Example: 18:19:21.
.TP .TP
.B time zone items .B time zone items
Specifies international time zone. There are a few acronyms supported, but in Specifies international time zone. There are a few acronyms supported, but in
@@ -40,41 +41,52 @@ general you should instead use the specific relative time compared to
UTC. Supported formats include: -1200, MST, +0100. UTC. Supported formats include: -1200, MST, +0100.
.TP .TP
.B day of the week items .B day of the week items
Specifies a day of the week. If this is mentioned alone it means that day of Specifies a day of the week. Days of the week may be spelled out in full:
the week in the future. `Sunday', `Monday', etc or they may be abbreviated to their first three
letters. This is usually not info that adds anything.
Days of the week may be spelled out in full: `Sunday', `Monday', etc or they
may be abbreviated to their first three letters, optionally followed by a
period. The special abbreviations `Tues' for `Tuesday', `Wednes' for
`Wednesday' and `Thur' or `Thurs' for `Thursday' are also allowed.
A number may precede a day of the week item to move forward supplementary
weeks. It is best used in expression like `third monday'. In this context,
`last DAY' or `next DAY' is also acceptable; they move one week before or
after the day that DAY by itself would represent.
.TP
.B relative items
A relative item adjusts a date (or the current date if none) forward or
backward. Example syntax includes: "1 year", "1 year ago", "2 days", "4
weeks".
The string `tomorrow' is worth one day in the future (equivalent to `day'),
the string `yesterday' is worth one day in the past (equivalent to `day ago').
.TP .TP
.B pure numbers .B pure numbers
If the decimal number is of the form YYYYMMDD and no other calendar date item If a decimal number of the form YYYYMMDD appears, then YYYY is read as the
appears before it in the date string, then YYYY is read as the year, MM as the year, MM as the month number and DD as the day of the month, for the specified
month number and DD as the day of the month, for the specified calendar date. calendar date.
.PP .PP
.SH EXAMPLES
.nf
Sun, 06 Nov 1994 08:49:37 GMT
Sunday, 06-Nov-94 08:49:37 GMT
Sun Nov 6 08:49:37 1994
06 Nov 1994 08:49:37 GMT
06-Nov-94 08:49:37 GMT
Nov 6 08:49:37 1994
06 Nov 1994 08:49:37
06-Nov-94 08:49:37
1994 Nov 6 08:49:37
GMT 08:49:37 06-Nov-94 Sunday
94 6 Nov 08:49:37
1994 Nov 6
06-Nov-94
Sun Nov 6 94
1994.Nov.6
Sun/Nov/6/94/GMT
Sun, 06 Nov 1994 08:49:37 CET
06 Nov 1994 08:49:37 EST
Sun, 12 Sep 2004 15:05:58 -0700
Sat, 11 Sep 2004 21:32:11 +0200
20040912 15:05:58 -0700
20040911 +0200
.fi
.SH STANDARDS
This parser was written to handle date formats specified in RFC 822 (including
the update in RFC 1123) using time zone name or time zone delta and RFC 850
(obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the
only ones RFC2616 says HTTP applications may use.
.SH RETURN VALUE .SH RETURN VALUE
This function returns zero when it fails to parse the date string. Otherwise This function returns -1 when it fails to parse the date string. Otherwise it
it returns the number of seconds as described. returns the number of seconds as described.
.SH AUTHORS .SH REWRITE
Originally written by Steven M. Bellovin <smb@research.att.com> while at the The former version of this function was built with yacc and was not only very
University of North Carolina at Chapel Hill. Later tweaked by a couple of large, it was also never quite understood and it wasn't possible to build with
people on Usenet. Completely overhauled by Rich $alz <rsalz@bbn.com> and Jim non-GNU tools since only Bison could make it thread-safe!
Berets <jberets@bbn.com> in August, 1990.
It has been modified extensively since imported to curl. The rewrite was done for 7.12.2. The new one is much smaller and use simpler
.SH "SEE ALSO" code.
.BR GNU date(1)

View File

@@ -1,8 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_getenv 3 "15 August 2001" "libcurl 7.8.1" "libcurl Manual" .TH curl_getenv 3 "30 April 2004" "libcurl 7.12" "libcurl Manual"
.SH NAME .SH NAME
curl_getenv - return value for environment name curl_getenv - return value for environment name
.SH SYNOPSIS .SH SYNOPSIS
@@ -14,6 +12,10 @@ curl_getenv - return value for environment name
curl_getenv() is a portable wrapper for the getenv() function, meant to curl_getenv() is a portable wrapper for the getenv() function, meant to
emulate its behaviour and provide an identical interface for all operating emulate its behaviour and provide an identical interface for all operating
systems libcurl builds on (including win32). systems libcurl builds on (including win32).
.SH AVAILABILITY
This function will be removed from the public libcurl API in a near future. It
will instead be made "available" by source code access only, and then as
curlx_getenv().
.SH RETURN VALUE .SH RETURN VALUE
If successful, curl_getenv() returns a pointer to the value of the specified If successful, curl_getenv() returns a pointer to the value of the specified
environment. The memory it refers to is malloc()ed why the application must environment. The memory it refers to is malloc()ed why the application must

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