Compare commits

...

675 Commits

Author SHA1 Message Date
Daniel Stenberg
c7e9e60b05 fixed the AIX packages 2006-03-20 07:59:45 +00:00
Daniel Stenberg
47f2e1da73 missing in CVS 2006-03-20 07:37:10 +00:00
Daniel Stenberg
5975229919 fixed tftp packet overflow risk 2006-03-20 07:32:50 +00:00
Daniel Stenberg
38295e8a75 slight rewording based on debian bug report #357388 by Justin Pryzby 2006-03-17 08:22:50 +00:00
Daniel Stenberg
f9612b5eaf fixed in CVS 2006-03-16 22:31:04 +00:00
Daniel Stenberg
5cf2ef2ef7 AIX Toolbox RPM spec file by Tor Arntsen 2006-03-16 21:23:41 +00:00
Daniel Stenberg
938b5c886e slightly edited explanation for -f/--fail by the help of Kjell Ericson 2006-03-15 21:21:35 +00:00
Daniel Stenberg
0618e68200 use the new types accordingly 2006-03-14 00:07:21 +00:00
Daniel Stenberg
bac52f3969 --ftp-method and CURLOPT_FTP_FILEMETHOD are now documented and usable 2006-03-14 00:05:15 +00:00
Daniel Stenberg
d494d62953 David McCreedy found a use of the wrong variable when display the error
text from OpenSSL.
2006-03-13 23:34:25 +00:00
Daniel Stenberg
7206181385 David McCreedy found a missing return code assignment 2006-03-13 23:33:46 +00:00
Daniel Stenberg
3f22901a43 Scott Worley's typo fixes 2006-03-13 19:44:36 +00:00
Daniel Stenberg
f70f11fc70 Peter Heuchert's correction for the clear control connection case 2006-03-08 15:46:21 +00:00
Daniel Stenberg
cffebd7fd6 Markus Koetter filed debian bug report #355715 which identified a problem
with the multi interface and multi-part formposts. The fix from February
22nd could make the Curl_done() function get called twice on the same
connection and it was not designed for that and thus tried to call free() on
an already freed memory area!
2006-03-07 23:11:41 +00:00
Daniel Stenberg
b8c8e7349f Peter Heuchert made sure the CURLFTPSSL_CONTROL setting for CURLOPT_FTP_SSL
is used properly.
2006-03-07 22:28:08 +00:00
Daniel Stenberg
8bba99ae56 Lots of users on Windows have reported getting the "SSL: couldn't set
callback" error message so I've now made the setting of that callback not be
as critical as before. The function is only used for additional loggging/
trace anyway so a failure just means slightly less data. It should still be
able to proceed and connect fine to the server.
2006-03-06 22:35:51 +00:00
Daniel Stenberg
b5c5f57613 build fix for Interix 2006-03-04 22:39:31 +00:00
Daniel Stenberg
33df856925 If run on a curl built shared, detect this and invoke libtool for gdb
accordingly.
2006-03-03 14:37:44 +00:00
Daniel Stenberg
ce09cedd2e added test524 2006-03-03 13:12:39 +00:00
Daniel Stenberg
7d68101f83 Prevent uploading to a URL that has no file name part. 2006-03-03 13:09:30 +00:00
Daniel Stenberg
aa50a00898 point out that CAINFO points out a file name by default 2006-03-02 22:09:30 +00:00
Daniel Stenberg
26f112ba55 added large chunk of blurb about the progress meter 2006-03-02 22:04:39 +00:00
Daniel Stenberg
159b9162f8 I'm pretty sure #24 is fixed in 7.15.2 2006-03-02 13:35:54 +00:00
Daniel Stenberg
d7999f9fcb mention Dan F's out-of-file handles fix from the other day 2006-03-02 11:41:23 +00:00
Daniel Stenberg
f13eba4c78 check for and use getprotobyname 2006-03-02 11:37:05 +00:00
Dan Fandrich
050e82e088 Don't lock up at start when there aren't any free file descriptors. 2006-02-28 18:21:33 +00:00
Daniel Stenberg
88377e5b61 added missing files 2006-02-27 21:32:42 +00:00
Daniel Stenberg
241af465fd ack, removed duplicate 2006-02-27 18:17:50 +00:00
Daniel Stenberg
59510a554d 7.15.2 contributors added 2006-02-27 18:16:47 +00:00
Daniel Stenberg
b10aa95d28 start over on what might become 7.15.3 2006-02-27 18:14:14 +00:00
Daniel Stenberg
097bee681a hehe, wrong year but who reads these lines anyway? ;-) 2006-02-27 16:09:24 +00:00
Daniel Stenberg
8548c2fc61 7.15.2 2006-02-27 16:05:16 +00:00
Gisle Vanem
dc4fbd2e97 Small fix. 2006-02-26 18:20:43 +00:00
Gisle Vanem
60b029869f Use getprotobyname() to retrieve protocol number for TCP
(sorry, I don't know how to add this to the configure process).
2006-02-26 17:08:33 +00:00
Gisle Vanem
f592ea6c30 Fix typo. 2006-02-25 18:57:20 +00:00
Dan Fandrich
a39ac3d94a Added user ID support to SOCKS4. 2006-02-24 21:35:48 +00:00
Daniel Stenberg
4b23ddc002 Fixed typo, the option is called --write-out. Bob Bagwill pointed out. 2006-02-23 21:33:02 +00:00
Daniel Stenberg
4486d336a6 argh, forgot the check for a connection before we call Curl_done 2006-02-23 21:29:48 +00:00
Dan Fandrich
45e4b811b0 Fixed a few more comment typos. 2006-02-23 18:39:22 +00:00
Daniel Stenberg
0e6a1a4420 Peter Su's SOCKS4 fix 2006-02-23 14:42:47 +00:00
Daniel Stenberg
b8bf708db9 the last planned fix is done 2006-02-23 12:21:24 +00:00
Daniel Stenberg
6fdbb01194 Lots of work and analysis by "xbx___" in bug #1431750
(http://curl.haxx.se/bug/view.cgi?id=1431750) helped me identify and fix two
different but related bugs:

1) Removing an easy handle from a multi handle before the transfer is done
   could leave a connection in the connection cache for that handle that is
   in a state that isn't suitable for re-use. A subsequent re-use could then
   read from a NULL pointer and segfault.

2) When an easy handle was removed from the multi handle, there could be an
   outstanding c-ares DNS name resolve request. When the response arrived,
   it caused havoc since the connection struct it "belonged" to could've
   been freed already.

Now Curl_done() is called when an easy handle is removed from a multi handle
pre-maturely (that is, before the transfer was complteted). Curl_done() also
makes sure to cancel all (if any) outstanding c-ares requests.
2006-02-23 12:20:48 +00:00
Dan Fandrich
d29147565c Fixed test case 57 (KNOWN_BUG #18) 2006-02-22 23:55:28 +00:00
Dan Fandrich
75c9430559 Fixed some spelling errors in comments, and extraneous \n in failf logs. 2006-02-22 19:09:33 +00:00
Daniel Stenberg
9ac99a80c3 two typos in comments 2006-02-21 15:25:22 +00:00
Daniel Stenberg
a15d107dde Peter Su added support for SOCKS4 proxies. Enable this by setting the proxy
type to the already provided type CURLPROXY_SOCKS4.
I added a --socks4 option that works like the current --socks5 option but
instead use the socks4 protocol.
2006-02-21 07:46:41 +00:00
Daniel Stenberg
09897b8146 ftp upload with url ending with slash 2006-02-20 10:05:47 +00:00
Daniel Stenberg
29e446e508 Shmulik Regev fixed an issue with multi-pass authentication and compressed
content when libcurl didn't honor the internal ignorebody flag.
2006-02-19 23:16:48 +00:00
Daniel Stenberg
10beb36b1c Ulf Hrnhammar fixed a format string (printf style) problem in the Negotiate
code. It should however not be the cause of any troubles. He also fixed a
few similar problems in the HTTP test server code.
2006-02-18 22:27:01 +00:00
Yang Tse
a65a888866 Fix spacing. 2006-02-17 15:58:21 +00:00
Daniel Stenberg
98180b5cc7 fixed formatting 2006-02-17 13:31:49 +00:00
Daniel Stenberg
92009181af Shmulik Regev provided a fix for the DNS cache when using short life times,
as previously it could be holding on to old cached entries longer than
requested.
2006-02-16 23:42:32 +00:00
Dan Fandrich
831bdb9f63 Gopher is no longer supported. 2006-02-16 19:19:32 +00:00
Daniel Stenberg
50a4dbbb5e two items before release 2006-02-16 12:11:20 +00:00
Daniel Stenberg
ad6511c313 Added some clarifying comments 2006-02-16 10:02:11 +00:00
Daniel Stenberg
7a37fa4aef 32. (At least on Windows) If libcurl is built with c-ares and there's no DNS
server configured in the system, the ares_init() call fails and thus
  curl_easy_init() fails as well. This causes weird effects for people who use
  numerical IP addresses only.
2006-02-15 09:36:39 +00:00
Daniel Stenberg
dcee24191f mention the CURLOPT_CONNECT_ONLY connection 2006-02-11 22:36:29 +00:00
Daniel Stenberg
87bcb6f377 Karl M added the CURLOPT_CONNECT_ONLY and CURLINFO_LASTSOCKET options that
an app can use to let libcurl only connect to a remote host and then extract
the socket from libcurl. libcurl will then not attempt to do any transfer at
all after the connect is done.
2006-02-11 22:35:16 +00:00
Daniel Stenberg
b0bc2f00d2 Kent Boortz improved the configure check for GnuTLS to properly set LIBS
instead of LDFLAGS.
2006-02-11 12:56:52 +00:00
Daniel Stenberg
3b19c7d0d9 CURLOPT_NOSIGNAL might be a MUST to make threaded use work, like on AIX 5.2
due to the use of the static variable for sigsetjmp()
2006-02-09 22:25:41 +00:00
Daniel Stenberg
12f5c67bf5 Philippe Vaucher provided a brilliant piece of test code that show a problem
with re-used FTP connections. If the second request on the same connection was
set not to fetch a "body", libcurl could get confused and consider it an
attempt to use a dead connection and would go acting mighty strange.
2006-02-07 23:09:04 +00:00
Daniel Stenberg
d7a83d8995 avoid illegal memory access when doing "-T [URL] [URL]" 2006-02-07 18:56:41 +00:00
Daniel Stenberg
7725729d90 Rene Bernhardt found this typo 2006-02-07 14:03:17 +00:00
Daniel Stenberg
e96445bd02 how silly, the cookie expired! ;-) 2006-02-06 20:02:14 +00:00
Daniel Stenberg
da2c124675 Frank's synctime.c example and an updated list in README 2006-02-04 18:08:54 +00:00
Daniel Stenberg
8cb695a963 fixed --limit-rate 2006-02-01 23:28:22 +00:00
Daniel Stenberg
54cbd7e154 Make --limit-rate [num] mean bytes. Seems I broke it back in november 2005... 2006-02-01 23:26:14 +00:00
Gisle Vanem
5994b62930 Squelch the "warning: 'port' might be used uninitialized in this function".
(occurs w/o ENABLE_IPV6).
2006-01-30 18:57:02 +00:00
Daniel Stenberg
2fbf94b0f3 Added CURLOPT_LOCALPORT and CURLOPT_LOCALPORTRANGE to libcurl. Set with the
curl tool with --local-port. Plain and simply set the range of ports to bind
the local end of connections to. Implemented on to popular demand.

Not extensively tested. Please let me know how it works.
2006-01-30 08:24:07 +00:00
Daniel Stenberg
32bc30e210 Based on an error report by Philippe Vaucher, we no longer count a retried
connection setup as a follow-redirect. It turns out 1) this fails when a FTP
connection is re-setup and 2) it does make the max-redirs counter behave
wrong. This fix was not verified since the reporter vanished, but I believe
this is the right fix nonetheless.
2006-01-30 08:20:52 +00:00
Daniel Stenberg
f3bc8e6ce1 more mirrors 2006-01-29 13:13:45 +00:00
Daniel Stenberg
16f3a32bec we should fix the system includes in the public headers to be based on checks
of the system instead of depending on what particular systems we think need
various headers
2006-01-28 13:14:38 +00:00
Daniel Stenberg
c44d2498e3 include sys/select.h on NetBSD as well 2006-01-28 13:13:58 +00:00
Daniel Stenberg
2aed209efa typo pointed out by Mike Griffiths 2006-01-27 21:23:04 +00:00
Daniel Stenberg
b55b780d7b Cyrill Osterwalder pointed out that sending "" as data in a header is in
fact equal to a blank one according to the spec.
2006-01-27 15:01:10 +00:00
Daniel Stenberg
8d4eb2bc1f updated source header 2006-01-26 10:39:25 +00:00
Daniel Stenberg
67bf4f28ff Michal Marek provided a patch for FTP that makes libcurl continue to try PASV
even after EPSV returned a positive response code, if libcurl failed to
connect to the port number the EPSV response said. Obviously some people are
going through protocol-sensitive firewalls (or similar) that don't understand
EPSV and then they don't allow the second connection unless PASV was
used. This also called for a minor fix of test case 238.
2006-01-24 14:40:43 +00:00
Dan Fandrich
803582f8ac Fixed some statements about handling multiple occurrences of options.
Tried to make some of the wording a bit more consistent.
2006-01-20 18:56:27 +00:00
Daniel Stenberg
03603f392a the second -P fix 2006-01-20 17:50:12 +00:00
Daniel Stenberg
fcfd6d9504 Duane Cathey was one of our friends who reported that curl -P [IP]
(CURLOPT_FTPPORT) didn't work for ipv6-enabed curls if the IP wasn't a
"native" IP while it works fine for ipv6-disabled builds!

In the process of fixing this, I removed the support for LPRT since I can't
think of many reasons to keep doing it and asking on the mailing list didn't
reveal anyone else that could either. The code that sends EPRT and PORT is
now also a lot simpler than before (IMHO).
2006-01-19 23:52:03 +00:00
Daniel Stenberg
c31451cf13 Jon Turner pointed out that doing -P [hostname] with curl (built ipv4-only)
didn't work.
2006-01-19 22:02:46 +00:00
Daniel Stenberg
5deff1a179 clarify what "-P -" does 2006-01-19 20:40:08 +00:00
Daniel Stenberg
e236a1c99b corrected factual mistake about BSD license in the krb4.c code 2006-01-19 09:53:33 +00:00
Daniel Stenberg
a2f3094eb0 reality sync 2006-01-18 12:17:20 +00:00
Daniel Stenberg
65afc576ea configure no longer warns on "missing" if the current path contains a space 2006-01-18 10:00:36 +00:00
Daniel Stenberg
8971f656b4 David Shaw: Here is the latest libcurl.m4 autoconf tests. It is updated with
the latest features and protocols that libcurl supports and has a minor fix to
better deal with the obscure case where someone has more than one libcurl
installed at the same time.
2006-01-17 17:39:39 +00:00
Daniel Stenberg
394ce9ee39 happy new year! 2006-01-17 07:53:29 +00:00
Daniel Stenberg
67a83c1b34 David Shaw finally removed all traces of Gopher and we are now officially
not supporting it. It hasn't been functioning for years anyway, so this is
just finally stating what already was true. And a cleanup at the same time.
2006-01-16 22:14:37 +00:00
Daniel Stenberg
1e8d094274 improved the description of the -L/--location option 2006-01-16 00:00:28 +00:00
Daniel Stenberg
4c35a40858 Bryan Henderson turned the 'initialized' variable for curl_global_init()
into a counter, and thus you can now do multiple curl_global_init() and you
are then supposed to do the same amount of calls to curl_global_cleanup().
Bryan also updated the docs accordingly.
2006-01-15 23:55:53 +00:00
Daniel Stenberg
802b2aaf6a adjusted to use curl_multi_setopt() to set the callback 2006-01-15 23:17:46 +00:00
Daniel Stenberg
0e79a8944b adjusted to the new concept of the callback 2006-01-15 23:15:24 +00:00
Daniel Stenberg
bebf70667d Andrew Benham fixed a race condition in the test suite that could cause the
test script to kill all processes in the current process group!
2006-01-13 12:16:16 +00:00
Daniel Stenberg
d9bd5de0b1 Fixed FTP_SKIP_PASV_IP and FTP_USE_EPSV to "do right" when used on FTP thru
HTTP proxy.
2006-01-12 22:18:38 +00:00
Daniel Stenberg
31c7aa0ba4 Michael Jahn fixed ftp over CONNECT 2006-01-12 12:40:04 +00:00
Daniel Stenberg
fc2388189f mention the "secret" option as I've got no feedback and it is actually present
in 7.15.1
2006-01-10 23:08:38 +00:00
Daniel Stenberg
4431338691 When using a bad path over FTP, as in when libcurl couldn't CWD into all
given subdirs, libcurl would still "remember" the full path as if it is the
current directory libcurl is in so that the next curl_easy_perform() would
get really confused if it tried the same path again - as it would not issue
any CWD commands at all, assuming it is already in the "proper" dir.

Starting now, a failed CWD command sets a flag that prevents the path to be
"remembered" after returning.
2006-01-10 23:03:22 +00:00
Daniel Stenberg
bda1e9aeab Made the copyright year match the latest modification's year. 2006-01-09 13:17:14 +00:00
Daniel Stenberg
4969ca768d Alexander Lazic improved the getservbyport_r() configure check. 2006-01-09 08:31:48 +00:00
Daniel Stenberg
2acd1c1642 one more mirror, now fortunately in Japan 2006-01-08 23:28:33 +00:00
Daniel Stenberg
e1e753179a use the proper dash 2006-01-08 22:55:13 +00:00
Daniel Stenberg
f4cc8153ae Mike Jean fixed so that the second CONNECT when doing FTP over a HTTP proxy
actually used a new connection and not sent the second request on the first
socket!
2006-01-07 22:24:16 +00:00
Daniel Stenberg
e4d8cb4ee0 buildconf fixes 2006-01-06 22:59:34 +00:00
Daniel Stenberg
723a78ae3f As Alexander Lazic pointed out, run the buildconf from the ares dir if that
is present instead of trying to duplicate that stuff in this script.
2006-01-06 22:08:39 +00:00
Daniel Stenberg
cd9d0d7dec Use $ACLOCAL_FLAGS too, pointed out by Alexander Lazic 2006-01-06 22:07:51 +00:00
Daniel Stenberg
665d4f08c8 summary of what we have 2006-01-05 14:58:34 +00:00
Daniel Stenberg
00c7780fcb James Bursa fixes: find the hosts file on RISC OS, and made it build with
newer gcc versions that no longer defines "riscos".
2006-01-05 07:57:32 +00:00
Daniel Stenberg
15ab13dc42 Yang Tse has been helping out 2006-01-05 07:56:43 +00:00
Daniel Stenberg
8a0ca3066e modified output to prevent the autobuild system to trap on the 'FAILED' output
mistaking it for an actual failed test case
2006-01-04 23:02:40 +00:00
Gisle Vanem
ea01755bb4 Added ares_getsock.obj. 2006-01-04 14:21:57 +00:00
Daniel Stenberg
69c2084a18 updated test programs to use the API as it currently works 2006-01-04 14:11:35 +00:00
Daniel Stenberg
99c0a1a7d0 removed easy handle argument from proto 2006-01-04 14:09:57 +00:00
Daniel Stenberg
5acf997e69 upcoming new error code 2006-01-04 14:09:42 +00:00
Daniel Stenberg
dd87e4ed39 Andres Garcia made the TFTP test server build with mingw. 2006-01-04 10:07:36 +00:00
Daniel Stenberg
2f8c26ba8a not much recent stuff, but still I had this modified locally 2006-01-04 10:04:23 +00:00
Daniel Stenberg
81b9793807 Added remake of the arpa/tftp.h file to make the TFTP server build on systems
without the real header file.
2006-01-03 22:47:07 +00:00
Daniel Stenberg
7278f17e8f killed trailing whitespace 2006-01-03 22:44:58 +00:00
Daniel Stenberg
66c7427df0 Andres Garcia made the TFTP test server build with mingw ("I also had to copy
the 'tftp.h' file from a linux box, since it doesn't come with mingw.")
2006-01-03 22:19:15 +00:00
Daniel Stenberg
c1a06d858d CURLOPT_PROGRESSFUNCTION is really not a good idea when using the multi
interface
2006-01-03 15:53:29 +00:00
Daniel Stenberg
53b5fdbe9e fixed the prototype 2006-01-03 15:52:59 +00:00
Daniel Stenberg
687cf0235e modified to hush compiler warnings 2006-01-03 12:18:22 +00:00
Daniel Stenberg
b6e9229cf0 Removed inaccurate comment for upcoming curl_multi_socket() and family.
Modified the callback proto used for it.
2006-01-02 23:37:48 +00:00
Daniel Stenberg
089e4848d8 minor edits 2006-01-02 23:32:36 +00:00
Daniel Stenberg
58d2e7c6d1 Initial description of the upcoming curl_multi_timeout() function 2006-01-02 23:00:04 +00:00
Daniel Stenberg
fa18d6fb76 I removed the timeout argument from the socket callback and did some other
cleanups of this man page. The lengthy description has now also been removed
from curl/multi.h since it immediately got tedious to maintain the info on
two places when I did major updates...
2006-01-02 22:58:56 +00:00
Gisle Vanem
4dcb930247 Include <sys/ioctl.h> before redefining ioctl(). 2006-01-02 18:35:58 +00:00
Daniel Stenberg
74a299fd08 1. sws now supports two new "commands" and 2. if built with
CURL_SWS_FORK_ENABLED defined it forks for each new connection and thus can
support any amount of connection clients (used for hiper tests and not for the
standard plain curl test suite)
2006-01-02 12:19:12 +00:00
Daniel Stenberg
532a560d87 we're working on 1.3.1 (or more) 2006-01-02 09:13:56 +00:00
Marty Kuhrt
0040a60559 fix questionable compare 2005-12-30 00:35:21 +00:00
Marty Kuhrt
cc34342790 fix questionable compare compiler error (unsigned can't be < 0) 2005-12-30 00:20:46 +00:00
Marty Kuhrt
bdbf6e9d19 removed defunct email address 2005-12-30 00:07:25 +00:00
Marty Kuhrt
db86f765eb removed .h and .sdl 2005-12-30 00:07:25 +00:00
Marty Kuhrt
b11dec5dd5 putting back into dist 2005-12-30 00:07:25 +00:00
Marty Kuhrt
86becc7591 put back into dist to lessen build confusion for some 2005-12-30 00:07:25 +00:00
Marty Kuhrt
8922bc038b put back into dist since most people didn't want to use SDL 2005-12-30 00:07:25 +00:00
Marty Kuhrt
009f5790a4 changed HAVE_STRTOK to follow CRTL version 2005-12-30 00:07:25 +00:00
Marty Kuhrt
0536b6c459 added TFTP errors to match curl.h 2005-12-30 00:07:25 +00:00
Daniel Stenberg
0e3ebd9841 Kirill Vasiliev fixed the 'release-ssl-dll' target to properly build a
static libcurl using openssl as dll.
2005-12-23 23:40:40 +00:00
Daniel Stenberg
598965a606 clarified that curl_global_init() isn't thread-safe and that it might affect
curl_easy_init() if you don't call curl_global_init() explicitly in your app
2005-12-23 23:22:23 +00:00
Dan Fandrich
d7a2938849 Mention that PKG_CONFIG_PATH is preferred to --with-ssl 2005-12-23 22:33:06 +00:00
Daniel Stenberg
a683658675 This function was added in c-ares [version] 2005-12-22 15:31:32 +00:00
Daniel Stenberg
25169f68b7 added ares_getsock() 2005-12-22 15:29:12 +00:00
Daniel Stenberg
e5247ae65d Added ares_getsock() to extract sockets to wait for action on, without being
limited to select().
2005-12-22 15:27:41 +00:00
Daniel Stenberg
a718cb05ff The inital early embryos to describe the curl_multi_socket() API. Committed
now to enable them to get added as web pages easier, they are not ready
for anything "real" just yet.
2005-12-22 15:11:11 +00:00
Daniel Stenberg
b466ef2581 the curl_multi_socket() test application (still using select()) 2005-12-22 14:14:14 +00:00
Daniel Stenberg
c7a634641f #31 curl-config --libs" will include details set in LDFLAGS when configure is
run that might be needed only for building libcurl.
2005-12-22 08:33:02 +00:00
Yang Tse
e4388643f1 Checking for function getnameinfo and its arguments is finally
done in one single function CURL_CHECK_FUNC_GETNAMEINFO which
will only define HAVE_GETNAMEINFO if the function has been found
AND the type of its arguments has been properly been detected
2005-12-21 20:44:54 +00:00
Yang Tse
bc4208201c Undefine HAVE_GETNAMEINFO if unable to find
proper types to use for getnameinfo args
2005-12-21 17:51:08 +00:00
Yang Tse
a0d69d52a1 Undefine HAVE_GETNAMEINFO if unable to find
proper types to use for getnameinfo args
2005-12-21 17:20:22 +00:00
Yang Tse
c23a1be139 Make sure we're using 'c-ares' sources and not 'ares' ones. 2005-12-21 16:08:35 +00:00
Daniel Stenberg
9799f7afb0 added our regular source header 2005-12-21 09:15:54 +00:00
Daniel Stenberg
6358b24fac allow more evironment variables to control what tools to check for and use 2005-12-21 08:09:12 +00:00
Daniel Stenberg
b58634316f use ACLOCAL even when using 'find' to find the aclocal tool 2005-12-21 07:59:03 +00:00
Yang Tse
e3657644d6 In CURL_FUNC_GETNAMEINFO_ARGTYPES, when cross-compiling a windows
target use calling convention WSAAPI for getnameinfo() prototype.
Checking type DWORD as argument 4 and 6 of getnameinfo not needed.
2005-12-20 23:49:14 +00:00
Daniel Stenberg
7d1e3ebeed explain tld_check_name() 2005-12-20 22:46:12 +00:00
Gisle Vanem
9e61dfe85e Changes for PellesC compiler under Win32. 2005-12-20 22:20:42 +00:00
Gisle Vanem
7b51aafa86 Changes for PellesC compiler under Win32. A bit limited, but
we just love swedish products...
2005-12-20 22:20:04 +00:00
Gisle Vanem
5f487123df Fix PellesC warning. 2005-12-20 20:58:51 +00:00
Gisle Vanem
f1f32477e3 Changes for PellesC for Win32. It needs <unistd.h> for 'ssize_t'. Hence the
rearrangement in ares_process.c.
2005-12-20 20:48:38 +00:00
Yang Tse
df2b1251a0 fix ioctlsocket detection 2005-12-20 20:29:53 +00:00
Yang Tse
02c7cf6fa5 Fix, header checks must be done before using its results. 2005-12-20 18:50:37 +00:00
Daniel Stenberg
60006ff993 shiper is the new test tool for the new API 2005-12-20 09:19:30 +00:00
Daniel Stenberg
f3af5d7b8e show dl speed 2005-12-20 09:19:20 +00:00
Daniel Stenberg
d551412a32 added our standard source header 2005-12-20 09:02:36 +00:00
Daniel Stenberg
6de67a134e fix closing parentheses 2005-12-20 08:51:48 +00:00
Daniel Stenberg
8ec31398e0 use AC_PROG_LIBTOOL after AC_DISABLE_SHARED 2005-12-20 08:51:34 +00:00
Yang Tse
fd0d560b47 Fix quoting 2005-12-20 03:23:49 +00:00
Yang Tse
cc542269a1 Give third argument to AC_DEFINE_UNQUOTED 2005-12-20 02:48:48 +00:00
Yang Tse
7b488a3bef Use native type SOCKET instead of int when testing functionality of ioctlsocket on Windows 2005-12-20 00:27:59 +00:00
Yang Tse
f448168501 Ooops 2005-12-19 23:32:52 +00:00
Dan Fandrich
80a8fb98db Fixed compiler warning on libc5. 2005-12-19 22:36:44 +00:00
Yang Tse
898bb397b1 Add checking for type DWORD as argument 4 and 6 of getnameinfo 2005-12-19 21:45:43 +00:00
Yang Tse
74ed5b5ebd Adjust more windows header includes 2005-12-19 21:38:10 +00:00
Dan Fandrich
178afd81a9 Fixed lcc compiler warnings. 2005-12-19 19:47:14 +00:00
Yang Tse
d6eb1a7b98 Fix guard detection of _WIN32_WINNT for MingW in CURL_FUNC_GETNAMEINFO_ARGTYPES 2005-12-19 05:57:17 +00:00
Yang Tse
4ff56b15e9 Add check for 'unsigned int' as type of arguments 4 and 6 of getnameinfo 2005-12-19 05:32:33 +00:00
Yang Tse
e6b98d3152 Undo previous change. This header file belongs to the public
interface and the change could break the compilation of thrid
party apps which link against this library.
2005-12-19 00:15:04 +00:00
Yang Tse
5fd8dd2dce When checking the type of the first argument of getnameinfo do it in the
following order: 'struct sockaddr *' 'const struct sockaddr *' 'void *'.
2005-12-18 20:24:35 +00:00
Yang Tse
0ad3e046a4 Fix spacing. When defining, define to 1. 2005-12-18 16:50:33 +00:00
Yang Tse
d6c5d24af3 Cleanup windows header includes. Where aplicable, inclusion of
windows.h winsock.h winsock2.h ws2tcpip.h is done in setup.h
2005-12-18 15:36:14 +00:00
Yang Tse
8a3280a2de MingW guards getnameinfo, getaddrinfo and freeaddrinfo with _WIN32_WINNT >= 0x0501 2005-12-18 06:07:10 +00:00
Yang Tse
450a0a647a Fix Msys/Mingw not detecting getnameinfo() with AC_CHECK_FUNCS 2005-12-18 04:47:29 +00:00
Yang Tse
676c0cf123 Make it compatible with vc60 and vc71 2005-12-18 00:27:12 +00:00
Yang Tse
a731319321 Fix typo 2005-12-17 23:35:25 +00:00
Yang Tse
81b06a09b7 Fix compiler warning 2005-12-17 23:34:21 +00:00
Yang Tse
23b34744d9 Cleanup 2005-12-17 21:20:35 +00:00
Yang Tse
bc8590aa12 Windows related cleanup 2005-12-17 20:37:53 +00:00
Yang Tse
939d368d5f Check first arg of getnameinfo with and without const qualifier. 2005-12-17 17:33:14 +00:00
Yang Tse
336e3b8baf Change multiple header inclusion prevention definition to __LIB_CURL_SETUP_H 2005-12-17 06:04:35 +00:00
Yang Tse
47c06fa308 Avoid breaking configure due to CURL_FUNC_GETNAMEINFO_ARGTYPES failure, since at this point nothing depends on it. 2005-12-17 02:41:33 +00:00
Yang Tse
b7f447f8d8 const qualifier in getnameinfo check 2005-12-17 02:32:55 +00:00
Yang Tse
03af76b631 Since there is no proof of the existence of a platform which would
justify checking for socklen_t in more than one function, the code
used to find a valid socklen_t replacement is simplified back. The
only function that will be used to find a socklen_t replacement is
getpeername, as it has been since revision 1.4 of curl/acinclude.m4
2005-12-16 23:15:33 +00:00
Yang Tse
e105d5c28f 'Fix' windows builds 2005-12-16 20:55:07 +00:00
Yang Tse
d6ffb4c177 TYPE_SOCKLEN_T completely replaced by CURL_CHECK_TYPE_SOCKLEN_T.
CURL_FUNC_GETNAMEINFO_ARGTYPES now also checks first argument.
All related changes taken to cares configuration scripts.
2005-12-16 18:18:00 +00:00
Daniel Stenberg
6dbfce1031 Jean Jacques Drouin pointed out that you could only have a user name or
password of 127 bytes or less embedded in a URL, where actually the code
uses a 255 byte buffer for it! Modified now to use the full buffer size.
2005-12-16 14:52:16 +00:00
Yang Tse
fea5ddf585 More quotes 2005-12-16 07:28:56 +00:00
Yang Tse
b9f39c2711 Fix copy paste bug 2005-12-16 06:50:03 +00:00
Yang Tse
5acac0309a Test CURL_CHECK_TYPE_SOCKLEN_T 2005-12-16 05:05:55 +00:00
Yang Tse
78febad718 Oops. Wrong double quotes 2005-12-16 04:54:56 +00:00
Yang Tse
a6a5bba0a9 Experimental check for socklen_t CURL_CHECK_TYPE_SOCKLEN_T 2005-12-16 04:18:44 +00:00
Yang Tse
51581c034d Tests to check the availability of compilable and
valid windows.h winsock.h winsock2.h and ws2tcpip.h
header files:
CURL_CHECK_HEADER_WINDOWS
CURL_CHECK_HEADER_WINSOCK
CURL_CHECK_HEADER_WINSOCK2
CURL_CHECK_HEADER_WS2TCPIP
2005-12-15 19:39:44 +00:00
Daniel Stenberg
8f25a95b47 minor edit 2005-12-15 07:43:39 +00:00
Yang Tse
7f5d092223 Some preprocessors have problems if the # character isn't at position 1. 2005-12-14 21:09:30 +00:00
Yang Tse
2e5cccd1b6 Check getnameinfo() argument types only if we have getnameinfo(). 2005-12-14 20:58:13 +00:00
Yang Tse
2645782f89 Determine the correct type to be passed to four of the getnameinfo' function's arguments, and define those types in GETNAMEINFO_TYPE_ARG2', GETNAMEINFO_TYPE_ARG46', and GETNAMEINFO_TYPE_ARG7'. 2005-12-14 19:00:44 +00:00
Daniel Stenberg
9533092511 Rene Bernhardt's corrections 2005-12-14 13:10:14 +00:00
Dan Fandrich
6005a461bb Log CPPFLAGS environment variable along with the others. 2005-12-13 19:07:33 +00:00
Dan Fandrich
e2df946eee Fixed some compiler warnings on lcc. 2005-12-13 18:54:31 +00:00
Yang Tse
d14588120f Undo last 'fix', since it was not the proper one. 2005-12-13 13:50:22 +00:00
Daniel Stenberg
ab31cfa664 another SOCKS-related problem added 2005-12-12 23:05:12 +00:00
Daniel Stenberg
af1c397969 added #29 and #30 2005-12-12 22:50:24 +00:00
Yang Tse
947f9deed5 Fix compiler warning 2005-12-12 18:40:18 +00:00
Dan Fandrich
ce95eee903 lcc isn't Windows-only, so check for it in conjunction with WIN32 2005-12-12 17:11:23 +00:00
Yang Tse
b15f3bb969 Undo last changes 2005-12-11 23:37:58 +00:00
Daniel Stenberg
998e8cba19 Dov Murik made defining HTTP_ONLY also disable TFTP 2005-12-11 23:14:25 +00:00
Yang Tse
e3f523ab2a Avoid generation of additional warnings 2005-12-11 18:29:18 +00:00
Yang Tse
36485e56ed Fix compiler warning and compatibility issue with the type of the parameter used in getnameinfo() to receive the length of the sockaddr struct. 2005-12-11 12:03:01 +00:00
Daniel Stenberg
b4113360f6 use c-ares' IPv6 abilities
fix CONNECT to a proxy that disconnects during the auth phase
2005-12-10 22:14:17 +00:00
Daniel Stenberg
2d71e22f08 fix CURLOPT_FAILONERROR error, pointed out by Shailesh N. Humbad 2005-12-10 22:12:44 +00:00
Yang Tse
2ae67c431c Modified lookup_service() to avoid the risk of a potential buffer overflow 2005-12-10 19:21:59 +00:00
Yang Tse
4b1a91b64f Fix compiler warning 2005-12-09 22:23:50 +00:00
Yang Tse
4f69318e12 Fix compiler warning 2005-12-09 21:09:21 +00:00
Yang Tse
1cc98ab50f Unset HAVE_STRUCT_SOCKADDR_STORAGE when using msvc 6.0 with no PSDK 2005-12-09 15:19:07 +00:00
Daniel Stenberg
a6494602fd build ulimiter too 2005-12-09 10:41:27 +00:00
Daniel Stenberg
50ec78b488 Work around the 1024 connection limit in select(), or rather in the FD_*
macros.
2005-12-09 10:41:07 +00:00
Daniel Stenberg
7d044d14f9 Handy little tool that increases the amount of max open file descriptors
and then runs a given command line.
2005-12-09 10:40:19 +00:00
Dan Fandrich
df03d5a8b2 Replaced nonstandard u_char and u_int types 2005-12-08 22:59:58 +00:00
Yang Tse
6a0ed81e67 Fix compiler warning 2005-12-08 20:38:04 +00:00
Yang Tse
c94f3e8188 Fix compiler warning 2005-12-08 19:47:33 +00:00
Dan Fandrich
1e5f6cc1dc Fixed a lingering omission of gzip support. 2005-12-08 18:59:19 +00:00
Yang Tse
b1fece74e3 Fix compiler warning 2005-12-08 16:43:32 +00:00
Yang Tse
fdbe0df6e7 Fix a couple of compiler warnings 2005-12-08 14:01:04 +00:00
Yang Tse
93d59520e4 If unable to get curl's version, log all failure details. 2005-12-08 11:29:47 +00:00
Daniel Stenberg
b68d3a073b Lots of updates to detect what problems we got. They are related
to the 1024 file descriptor limit in the server...
2005-12-07 15:43:32 +00:00
Daniel Stenberg
2100311f41 New version for testing connections against a local server for easier setting
up N idle and Z active connections in a controlled manner. This requires a
a HTTP server that supports the server end. I have a modified sws for this
(from the curl test suite) and I may commit the changes required for that
soonish.
2005-12-07 10:07:57 +00:00
Daniel Stenberg
e1269e3156 start working on 7.15.2 2005-12-06 23:36:36 +00:00
Daniel Stenberg
c88d61b044 fresh contributors in the 7.15.1 release 2005-12-06 23:34:53 +00:00
Daniel Stenberg
f49df54a36 7.15.1 with the now to be announced security flaw fixed 2005-12-06 23:05:51 +00:00
Daniel Stenberg
952bbc4410 my first collect-random-urls script, just for reference 2005-12-06 13:56:56 +00:00
Daniel Stenberg
1eb4b85d72 ok, these are the test build I've used so far 2005-12-06 13:56:28 +00:00
Daniel Stenberg
59b6cb9e91 Yang Tse: fixed compiler warning 2005-12-06 07:47:37 +00:00
Daniel Stenberg
e06afaeb7a Yang Tse: With last change logging directory needs to be created sooner. 2005-12-06 07:44:18 +00:00
Dan Fandrich
8c6f654b26 Added a run-time check to warn if TFTP is going to fail due to portability
issues in the code.
2005-12-05 20:07:05 +00:00
Daniel Stenberg
1d8212e53a Yang Tse: make runtests.pl more talkative when unable to find out curl's
version.
2005-12-05 19:23:56 +00:00
Daniel Stenberg
083c5e17e1 Yang Tse fixed: Openssl 0.9.9 makes 'const' the SSL_METHOD parameter in
SSL_CTX_new and others, and also makes functions SSLv23_client_method,
TLSv1_client_method, etc return a 'const' SSL_METHOD pointer. Previous
versions do not use the 'const' qualifier.
2005-12-05 15:14:04 +00:00
Daniel Stenberg
272231fb09 Another Yang Tse warning cleanup raid! 2005-12-05 14:10:48 +00:00
Gisle Vanem
67b4d9b232 Recent OpenSSL returns a 'const' in '*_client_method()'. So avoid
'assignment discards qualifiers from pointer target type' warning.
2005-12-04 18:47:36 +00:00
Daniel Stenberg
21709e1557 Yang Tse adjusted the multiple header inclusion prevention definition
H_MPRINTF to our more used style __CURL_MPRINTF_H
2005-12-02 23:23:49 +00:00
Daniel Stenberg
9c312637d1 Yang Tse's fix to only provide the proto if there is such a function and
we didn't find any proto
2005-12-02 23:22:45 +00:00
Daniel Stenberg
feacad7f68 Yang Tse fixed the 4th argument in the sendto() calls 2005-12-02 23:22:00 +00:00
Daniel Stenberg
6513303498 Jamie Newton pointed out that libcurl's file:// code would close() a zero
file descriptor if given a non-existing file.
2005-12-01 23:42:03 +00:00
Daniel Stenberg
3e2a52b034 #27 is fixed 2005-11-30 22:09:24 +00:00
Daniel Stenberg
176d4e85e9 cast the va_arg() assignment to ftp_filemethod properly 2005-11-30 13:09:48 +00:00
Daniel Stenberg
84d30dffb6 Yang Tse's fix of the inet_pton check 2005-11-29 16:17:53 +00:00
Daniel Stenberg
0fd282b078 new experimental "ftp method" code 2005-11-28 23:06:00 +00:00
Daniel Stenberg
cdf4afbe50 Bryan Henderson 2005-11-28 23:05:29 +00:00
Daniel Stenberg
b222b2304e Yang Tse's changes to provide an inet_pton() proto for the platforms who
don't have one in order to fix a remaining warning on IRIX 6.2.
2005-11-28 20:21:35 +00:00
Daniel Stenberg
fdf9900114 added note about the inclusion of curl.h from within this file 2005-11-28 07:43:53 +00:00
Daniel Stenberg
5867eb2dd2 Bryan Henderson: added missing ignores 2005-11-25 22:45:50 +00:00
Daniel Stenberg
61f145e3de Yang Tse fixed compiler warnings 2005-11-25 22:45:06 +00:00
Daniel Stenberg
b97e7fc730 read_tcp_data() fix to get the proper buffer pointer and size 2005-11-25 22:23:28 +00:00
Daniel Stenberg
01cbf08064 Yang Tse: fixes the use of Curl_inet_ntop and Curl_inet_pton with no
prototypes on some platforms, ie IRIX 6.2 MIPS C 6.2
2005-11-25 22:20:02 +00:00
Daniel Stenberg
fec632e948 Yang Tse: fixed compiler warnings 2005-11-25 22:14:53 +00:00
Daniel Stenberg
6aab5b57e1 Change based on Yang Tse's excellent fix to reduce buffer overflow risk and
fixing a compiler warning in the append_scopeid() function.
2005-11-25 22:14:28 +00:00
Daniel Stenberg
d2a27e02ce Doug Kaufman corrected my attempt to a generic "skip extra test for function
F"
2005-11-25 09:52:19 +00:00
Daniel Stenberg
b55506a76d avoid doing #if an a predef symbol that might not be defined 2005-11-24 23:03:25 +00:00
Daniel Stenberg
afc2aa2b3f Yang Tse: use static on file-private functions 2005-11-24 20:39:00 +00:00
Daniel Stenberg
d055b269ed Yang Tse: fix compilation errors when SSL is not disabled and HTTP is
disabled
2005-11-24 20:38:20 +00:00
Daniel Stenberg
8a246a4a9f Yang Tse: removes GOPHER protocol when HTTP is disabled 2005-11-24 20:37:13 +00:00
Gisle Vanem
2f684351bf Changes for OpenWatcom 1.4. 2005-11-24 20:33:38 +00:00
Daniel Stenberg
74e5beab9d Doug Kaufman's set of patches to make curl build fine on DJGPP again using
configure.
2005-11-24 10:22:46 +00:00
Daniel Stenberg
b41765f441 mention the colon-only thing for -u and SSPI+NTLM 2005-11-24 07:20:13 +00:00
Daniel Stenberg
05a6013f42 Yang Tse's patch to silence MSVC warnings 2005-11-23 22:59:24 +00:00
Daniel Stenberg
cfff544d67 only enable NTLM if HTTP and NTLM is not disabled, and if NTLM is disabled
we define an empty macro for the ntlm cleanup function
2005-11-23 11:51:31 +00:00
Daniel Stenberg
599d9642ca Yang Tse fixed MSVC 6.0 warnings 2005-11-23 09:10:00 +00:00
Daniel Stenberg
0264faaa4e fix compiler warning 2005-11-18 07:23:50 +00:00
Daniel Stenberg
4022a60ea7 I extended a patch from David Shaw to make libcurl _always_ provide an error
string in the given error buffer to address the flaw mention on 21 sep 2005.
2005-11-17 14:29:54 +00:00
Daniel Stenberg
39e366fc11 TFTP 2005-11-17 14:28:58 +00:00
Daniel Stenberg
096675824f Applied Albert Chin's patch that makes the libcurl.pc pkgconfig file get
installed on 'make install' time.
2005-11-16 07:20:57 +00:00
Daniel Stenberg
80bfa76ac9 check for and use winsock2.h instead of winsock.h and I fixed a typo in the
ifdefs where . was used instead of _!
2005-11-16 07:12:37 +00:00
Daniel Stenberg
b2e553a82e include ws2tcpip.h in an attempt to detect some of the ipv6 structs better
in mingw builds
2005-11-15 14:39:52 +00:00
Daniel Stenberg
772b64d9d3 Detect big/little endian in the configure script and adjust the ares_dns.h
macros accordingly.
2005-11-14 23:14:54 +00:00
Daniel Stenberg
92c0de518e Quagmire reported that he needed to raise a NTLM buffer for SSPI to work
properly for a case, and so we did. We raised it even for non-SSPI builds
but it should not do any harm. http://curl.haxx.se/bug/view.cgi?id=1356715
2005-11-14 22:10:52 +00:00
Gisle Vanem
ff96456513 Added '-DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID'. 2005-11-14 13:40:16 +00:00
Gisle Vanem
e89adbef51 Added CVS id.
Avoid warning 'x might be used uninitialized in this function'.
2005-11-14 13:26:17 +00:00
Gisle Vanem
22a6a6cf81 We have HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID. 2005-11-14 12:32:56 +00:00
Daniel Stenberg
fd870e4e8a Yang Tse: msvc7+ has deprecated the 'DESCRIPTION' section in
module-definition files. this section is not mandatory for msvc60 so it
could be completely removed from libcurl.def.
2005-11-14 07:48:05 +00:00
Daniel Stenberg
d52ed3fff2 Jan Kunder's debian bug report
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=338680 identified a weird
error message for when you try to upload a file and the requested directory
doesn't exist on the target server.
2005-11-14 00:18:12 +00:00
Daniel Stenberg
bac17ab7d8 extended the description for exit code 9 2005-11-14 00:17:03 +00:00
Daniel Stenberg
9ace303528 Yang Tse fixed compiler warnings 2005-11-13 23:53:14 +00:00
Daniel Stenberg
7e81c35cdc to build with old gnutls verions, don't use the *_t types 2005-11-13 23:04:28 +00:00
Daniel Stenberg
0f125d9bcf prevent compiler warning 2005-11-13 22:54:00 +00:00
Gisle Vanem
d4714517c0 Add HAVE_STRUCT_SOCKADDR_STORAGE.
My mistake; WinCE has it's own config-file.
2005-11-13 13:32:19 +00:00
Gisle Vanem
280e4bf4c3 Fix for WIN32. WIN32 does have 'struct sockaddr_storage', but
that's in <winsock2.h>. Hence tftp.c wouldn't compile on WinCE.
2005-11-13 13:20:37 +00:00
Daniel Stenberg
adf462fe05 Debian bug report 338681 by Jan Kunder: make curl better detect and report bad
limit-rate units: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=338681 Now
curl will return error if a bad unit is used.
2005-11-13 11:06:48 +00:00
Daniel Stenberg
c2862742ab Thanks to this nice summary of poll() implementations:
http://www.greenend.org.uk/rjk/2001/06/poll.html and further tests by Eugene
Kotlyarov, we now know that cygwin's poll returns only POLLHUP on remote
connection closure so we check for that case (too) and re-enable poll for
cygwin builds.
2005-11-13 09:24:06 +00:00
Daniel Stenberg
8a712eb5af Eugene Kotlyarov found out that cygwin's poll() function isn't doing things
right: http://curl.haxx.se/mail/archive-2005-11/0045.html so we now disable
poll() and use select() on cygwin too (we already do the same choice on Mac OS
X)
2005-11-12 22:49:19 +00:00
Daniel Stenberg
d58790af17 oops * 2 2005-11-12 22:13:20 +00:00
Daniel Stenberg
9ef7a13403 oops 2005-11-12 22:12:42 +00:00
Daniel Stenberg
a5da1219bb Reversed the logic for sockaddr_storage and made our own Curl_sockaddr_storage
struct instead to use.
2005-11-12 22:10:42 +00:00
Daniel Stenberg
be524fed38 on windows (mingw32) the sockaddr_storage struct is in winsock2.h 2005-11-12 19:11:02 +00:00
Gisle Vanem
042016b85e Fixed typo. Detabified. 2005-11-12 18:33:32 +00:00
Gisle Vanem
f6da574324 Support big-endian machines. 2005-11-12 15:15:27 +00:00
Gisle Vanem
b09d5c3135 Added CVS id, Detabified, applied c-ares coding-style. 2005-11-12 14:59:33 +00:00
Gisle Vanem
ec65c3fd53 Added CVS id. Detabified. 2005-11-12 14:44:26 +00:00
Gisle Vanem
7ca2f31c8d Include <getopt.h>.
Use DNS__32BIT() and DNS__16BIT()  (How about BE machines?).
Display T_AAAA resource.
2005-11-12 14:41:12 +00:00
Daniel Stenberg
2275737a5d removed files no longer existing 2005-11-12 00:01:50 +00:00
Daniel Stenberg
5e3836055f Dima Barsky patched problem #1348930: the GnuTLS code completely ignored
client certificates! (http://curl.haxx.se/bug/view.cgi?id=1348930).
2005-11-11 23:20:07 +00:00
Daniel Stenberg
37a6a0bb3e Moved the sockaddr_storage definition to lib/sockaddr.h and only include that
in files that actually need the struct.
2005-11-11 22:04:11 +00:00
Gisle Vanem
6bcca3eca9 Squelch gcc 4.x warning. 2005-11-11 19:25:29 +00:00
Gisle Vanem
ce40b8d531 Detabified. Added CVS id. 2005-11-11 19:20:22 +00:00
Gisle Vanem
9f109b94b8 HAVE_xx defines moved to config-win32.h. 2005-11-11 19:14:51 +00:00
Daniel Stenberg
89024febde mention how to set domain when using NTLM 2005-11-11 08:52:29 +00:00
Gisle Vanem
b7a673c6e2 Update using ares_inet_pton() and ares_inet_ntop(). 2005-11-11 04:28:23 +00:00
Daniel Stenberg
7f68be770d one in, one out 2005-11-10 23:30:54 +00:00
Daniel Stenberg
4f173f35db Fun while it lasted. New mirror already out-of-date. 2005-11-10 23:24:09 +00:00
Daniel Stenberg
ae9fbe573e David Lang fixed IPv6 support for TFTP! 2005-11-10 22:25:07 +00:00
Daniel Stenberg
29676f473d David Lang: if there is no sockaddr_storage, make up our own and use that 2005-11-10 22:24:49 +00:00
Daniel Stenberg
a5fcb26ab1 modified to the new error text for range error 2005-11-10 22:22:38 +00:00
Daniel Stenberg
d68b1a1e8c just implemented 2005-11-10 22:11:27 +00:00
Daniel Stenberg
bd8baed138 Introducing range stepping to the curl globbing support. Now you can specify
step counter by adding :[num] within the brackets when specifying a range.
2005-11-10 22:11:01 +00:00
Gisle Vanem
00a7dda273 Use config-win32.h on Windows. Fixes for djgpp. 2005-11-10 16:55:59 +00:00
Gisle Vanem
4dba07c384 Defines moved to config-win32.h. 2005-11-10 16:52:43 +00:00
Gisle Vanem
4d39c6b7cc Easy configuration with this file. 2005-11-10 16:50:21 +00:00
Gisle Vanem
7d6f6158c9 Remove generated files areslib.plg areslib.mak from CVS. 2005-11-10 16:42:07 +00:00
Gisle Vanem
6863dbbc0c Remove generated files ahost.plg ahost.mak from CVS. 2005-11-10 16:40:08 +00:00
Gisle Vanem
28b96efd8b Remove generated files adig.plg adig.mak from CVS. 2005-11-10 16:38:17 +00:00
Daniel Stenberg
0f82af0f49 * Add step parameter to the globbing. Like [0-1000;10] that would walk the
range increasing the number with 10 for every step. Requested by Jose:
  http://curl.haxx.se/feedback/display.cgi?id=11315662266802
2005-11-09 23:15:04 +00:00
Gisle Vanem
f0d839436f Update with "new" HAVE_xx. 2005-11-09 22:52:45 +00:00
Gisle Vanem
f1aa4b4127 Replace <winsock.h> with <winsock2.h>
since IPv6 support is required.
2005-11-09 22:32:45 +00:00
Gisle Vanem
ccdb43f7f1 Add cvs id. 2005-11-09 22:18:13 +00:00
Gisle Vanem
72900f0f90 Added Makefile.vc6. 2005-11-09 22:17:13 +00:00
Gisle Vanem
3ad958ddb1 I hate MS-devstudio project files. 2005-11-09 22:16:58 +00:00
Gisle Vanem
2c77cc90f4 Updated for MingW. Added inet_ntop.o inet_net_pton.o bitncmp.o.
Added -D'efines'.
2005-11-09 21:51:44 +00:00
Gisle Vanem
db4c33b4fb MSVC fix for 'socklen_t'. Replace <winsock.h> with <winsock2.h> +
<ws2tcpip.h> since IPv6 is no longer optional (was it ever?)
2005-11-09 21:38:58 +00:00
Gisle Vanem
3fb04115fc Fixes for building with MSVC-6/7. Added inet*.c.
Replace <winsock.h> with <winsock2.h> + <ws2tcpip.h>
(ala libcurl since IPv6 is not optional now).
2005-11-09 21:32:47 +00:00
Gisle Vanem
4faaa32aef Fixes for building ahost with MSVC-6/7. Added inet*.c. 2005-11-09 21:29:34 +00:00
Daniel Stenberg
cab59b4c32 Removed the use of AI_CANONNAME in the IPv6-enabled resolver functions since
we really have no use for reverse lookups of the address.

I truly hope these are the last reverse lookups we had lingering in the
code!
2005-11-08 14:45:58 +00:00
Daniel Stenberg
931eff89f5 SSPI-fix and a new mirror 2005-11-08 14:37:15 +00:00
Daniel Stenberg
175335808b Dmitry Bartsevich discovered some issues in compatibilty of SSPI-enabled
version of libcurl with different Windows versions. Current version of
libcurl imports SSPI functions from secur32.dll. However, under Windows NT
4.0 these functions are located in security.dll, under Windows 9x - in
secur32.dll and Windows 2000 and XP contains both these DLLs (security.dll
just forwards calls to secur32.dll).

Dmitry's patch loads proper library dynamically depending on Windows
version. Function InitSecurityInterface() is used to obtain pointers to all
of SSPI function in one structure.
: ----------------------------------------------------------------------
2005-11-08 14:15:34 +00:00
Daniel Stenberg
e00216581e 27. "libcurl built with GNUTLS ignores the SSLCERT option" - Unlike
Curl_ossl_connect(), the Curl_gtls_connect() function does not send the user
  certificate to the peer. In fact, it ignores the conn->data->set.cert field
  completely, it always uses the anonymous credentials. See
  http://curl.haxx.se/bug/view.cgi?id=1348930
2005-11-07 13:54:14 +00:00
Daniel Stenberg
23951ec00c mention the need for a "fake" -u when --negotiate is used 2005-11-07 08:37:08 +00:00
Daniel Stenberg
a8fc5d0f9f CurlPas 2005-11-05 was released: http://curlpas.sf.net/ 2005-11-05 23:39:08 +00:00
Daniel Stenberg
f5e85bab1c oops 2005-11-02 09:38:58 +00:00
Daniel Stenberg
9a44fa83dc Added:
1.9 Where do I buy commercial support for curl?
 1.10 How many are using curl?
 6.7 What are my obligations when using libcurl in my commerical apps?

Edited a few other paragraphs slightly.
2005-11-02 09:34:53 +00:00
Gisle Vanem
6b1e54da62 Use an empty '*mod_name'. 2005-11-01 16:27:27 +00:00
Daniel Stenberg
b91421b107 Vilmos Nebehaj improved libcurl's LDAP abilities:
The LDAP code in libcurl can't handle LDAP servers of LDAPv3 nor binary
attributes in LDAP objects. So, I made a quick patch to address these
problems.

The solution is simple: if we connect to an LDAP server, first try LDAPv3
(which is the preferred protocol as of now) and then fall back to LDAPv2.
In case of binary attributes, we first convert them to base64, just like the
openldap client does. It uses ldap_get_values_len() instead of
ldap_get_values() to be able to retrieve binary attributes correctly. I
defined the necessary LDAP macros in lib/ldap.c to be able to compile
libcurl without the presence of libldap
2005-10-31 08:55:01 +00:00
Daniel Stenberg
43b3954fa5 kill trailing whitespace 2005-10-31 08:47:54 +00:00
Daniel Stenberg
80f2e3f263 test 275 makes a CONNECT through a proxy and then gets two pages from the
same server
2005-10-30 23:15:49 +00:00
Daniel Stenberg
9ea423b4c1 --max-redirs 0 2005-10-29 22:22:18 +00:00
Daniel Stenberg
b259c9c535 re-arranged the win32 section and added a pointer to the INSTALL.devcpp
document
2005-10-29 22:18:58 +00:00
Daniel Stenberg
80f481a5f7 Tom Kyer's DevCpp-Mingw Install & Compilation guide 2005-10-28 21:34:51 +00:00
Daniel Stenberg
115fe1b577 mention brokenness 2005-10-28 12:59:37 +00:00
Daniel Stenberg
06d6ea651e elaborated somewhat in the license chapter 2005-10-28 07:22:45 +00:00
Daniel Stenberg
966fa848a0 Nis Jorgensen filed bug report #1338648
(http://curl.haxx.se/bug/view.cgi?id=1338648) which really is more of a
feature request, but anyway. It pointed out that --max-redirs did not allow
it to be set to 0, which then would return an error code on the first
Location: found. Based on Nis' patch, now libcurl supports CURLOPT_MAXREDIRS
set to 0, or -1 for infinity. Added test case 274 to verify.
2005-10-27 22:05:38 +00:00
Daniel Stenberg
6f8fe67ace tommink[at]post.pl reported in bug report #1337723
(http://curl.haxx.se/bug/view.cgi?id=1337723) that curl could not upload
binary data from stdin on Windows if the data contained control-Z (hex 1a)
since that is treated as end-of-file when read in text mode. Gisle Vanem
pointed out the fix, and I made both -T and --data-binary take advantage of
it.
2005-10-27 21:02:01 +00:00
Daniel Stenberg
d49edc8e09 updates to reflect current status in Debian land, and added some known
differences between OpenSSL and GnuTLS (that is probably a suitable subject
for a separate document...)
2005-10-27 20:51:43 +00:00
Gisle Vanem
3b9c20fe31 Removed dependency on zlib.h. Added dependency for
..\lib\timeval.c.
2005-10-27 12:56:05 +00:00
Gisle Vanem
bd72c5eacf Added option '-zc' puts const data in code-segment.
Added CURL_DISABLE_TFTP; tftp.c doesn't compile as-is.
2005-10-27 12:45:31 +00:00
Daniel Stenberg
9d152a77fd Jaz Fresh pointed out that if you used "-r [number]" as was wrongly described
in the man page, curl would send an invalid HTTP Range: header. The correct
way would be to use "-r [number]-" or even "-r -[number]". Starting now,
curl will warn if this is discovered, and automatically append a dash to the
range before passing it to libcurl.
2005-10-27 12:05:36 +00:00
Daniel Stenberg
33dc28b905 multi IP socket description leak with multi interface 2005-10-25 14:05:21 +00:00
Daniel Stenberg
43ce64dcca added new dutch mirror and removed the "--" separators 2005-10-25 14:04:54 +00:00
Daniel Stenberg
9e0882ba98 close the existing socket when trying next IP, as otherwise we leak one!
bug #1326306
2005-10-25 13:15:11 +00:00
Daniel Stenberg
c890149c8c Dima Barsky reported a problem with GnuTLS-enabled libcurl in bug report
#1334338 (http://curl.haxx.se/bug/view.cgi?id=1334338). When reading an SSL
  stream from a server and the server requests a "rehandshake", the current
  code simply returns this as an error. I have no good way to test this, but
  I've added a crude attempt of dealing with this situation slightly better -
  it makes a blocking handshake if this happens. Done like this because fixing
  this the "proper" way (that would handshake asynchronously) will require
  quite some work and I really need a good way to test this to do such a
  change.
2005-10-22 21:05:07 +00:00
Daniel Stenberg
1a1ab2e2e8 "Ofer" reported a problem when libcurl re-used a connection and failed to do
it, it could then accidentally actually crash. Presumably, this concerns FTP
connections.  http://curl.haxx.se/bug/view.cgi?id=1330310
2005-10-21 21:00:44 +00:00
Daniel Stenberg
715b706caa Temprimus improved the MSVC makefile so that the static debug SSL libs are
linked to the executable and not to the libcurld.lib
http://curl.haxx.se/bug/view.cgi?id=1326676
2005-10-21 19:32:12 +00:00
Daniel Stenberg
bfa9c42c25 Bradford Bruce made the windows resolver code properly return
CURLE_COULDNT_RESOLVE_PROXY and CURLE_COULDNT_RESOLVE_HOST on resolving
errors (as documented).
2005-10-21 19:21:19 +00:00
Daniel Stenberg
9d98f97e1b shorted and unified language in the --help output 2005-10-20 21:19:19 +00:00
Daniel Stenberg
5eb5ce6ff3 2 gone, 2 added, 1 moved, 1 changed name 2005-10-20 21:01:51 +00:00
Daniel Stenberg
be9c873a6e Dave Dribin made libcurl understand and handle cases when the server
(wrongly) sends *two* WWW-Authenticate headers for Digest. While this should
never happen in a sane world, libcurl previously got into an infinite loop
when this occurred. Dave added test 273 to verify this.
2005-10-20 20:07:32 +00:00
Daniel Stenberg
034d80f6cd 2 mirrors, 1 binding release 2005-10-20 19:40:30 +00:00
Daniel Stenberg
021e786c71 Added a dump_addrinfo() function to ease debugging of resolved names. Define
DEBUG_ADDRINFO to enable.
2005-10-20 19:40:02 +00:00
Daniel Stenberg
0c6bb8cb66 Temprimus improved the MSVC makefile: "makes a build option available so if
you set rtlibcfg=static for the make, then it would build with /MT. The
default behaviour is /MD (the original)."
http://curl.haxx.se/bug/view.cgi?id=1326665
2005-10-20 19:07:33 +00:00
Dan Fandrich
4d7f08a99e Removed mention of TFTP now that it's implemented. 2005-10-18 18:15:01 +00:00
Daniel Stenberg
fdef584681 Mohun Biswas' suggested change to prevent GNU indent to warn on the =-1 line. 2005-10-18 07:26:43 +00:00
Daniel Stenberg
f335bac8a3 Reverted the LIBCURL_VERSION_NUM change from October 6. As Dave Dribin
reported, the define is used by the configure script and is assumed to use
the 0xYYXXZZ format. This made "curl-config --vernum" fail in the 7.15.0
release version.
2005-10-14 21:21:51 +00:00
Daniel Stenberg
51369753bb Reported by 'TemPRImus' in bug 1326665: use the "Multi-Threaded" options even
when building the static library. http://curl.haxx.se/bug/view.cgi?id=1326665
2005-10-14 13:22:49 +00:00
Daniel Stenberg
82a4c2bce3 Slight editing of wording in the CURLOPT_SSL_VERIFYHOST section. 2005-10-13 21:49:28 +00:00
Daniel Stenberg
e73c6e039e start working on 7.15.1 2005-10-13 09:23:51 +00:00
Daniel Stenberg
19bad0844f added names from the 7.15.0 release 2005-10-13 09:22:31 +00:00
Daniel Stenberg
96cec4dfd7 7.15.0 time 2005-10-13 08:19:09 +00:00
Daniel Stenberg
943aea6267 Make sure that the user and domain strings fit in the target buffer before we
copy them there.
2005-10-13 07:57:51 +00:00
Daniel Stenberg
b433e4a1e7 NTLM requires windows or OpenSSL. If you build with GnuTLS for example you
do not get NTLM support enabled.
2005-10-13 06:20:43 +00:00
Daniel Stenberg
20f1966c0e 7.15.0 in november? 2005-10-11 12:54:44 +00:00
Daniel Stenberg
ab1f5c3edd make it compile warning-free and free() the memory before exit 2005-10-10 20:58:18 +00:00
Daniel Stenberg
b2be6799f2 pass a NULL pointer in the service argument (the second) if the port number
was 0 as it seems at least some AIX versions don't like a "0" string there
2005-10-10 18:28:05 +00:00
Gisle Vanem
ea2618fc6f Added tftp.obj. 2005-10-06 18:47:05 +00:00
Daniel Stenberg
62fdf8eaed we all the next version 7.15.0 due to the new TFTP support 2005-10-06 12:56:13 +00:00
Daniel Stenberg
d3569a3572 remove getinfo-times from the dist archive since the info is now in the
curl_easy_getinfo man page
2005-10-06 09:05:08 +00:00
Daniel Stenberg
89df76e449 end the .nf section, mark the option names properly so that they end up
as links in the html version
2005-10-06 09:03:36 +00:00
Daniel Stenberg
e5b2f33b4f Added the info from getinfo-times as it really belongs in this man page. 2005-10-06 08:58:44 +00:00
Daniel Stenberg
934d312f50 mention the recent fixes 2005-10-05 09:15:20 +00:00
Daniel Stenberg
68917eb517 added test case 272 for -z download over FTP when the timestamp is identical
to the remote one
2005-10-05 06:23:45 +00:00
Daniel Stenberg
3beb2f6b5d CURL_TIMECOND_IFMODSINCE actually requires that the remote document has been
modded since the given time, so we should compare <= and not just <.
2005-10-05 06:09:20 +00:00
Daniel Stenberg
b29017f15b Domenico Andreoli's patch that removes a few 0xa0(!) bytes 2005-10-04 20:32:17 +00:00
Daniel Stenberg
db83a0ebbc Michael Wallner reported that the date parser had wrong offset stored for
the MEST and CEST time zones.
2005-10-04 18:15:33 +00:00
Daniel Stenberg
6d9fddb95d Domenico Andreoli's SEE ALSO patch 2005-10-04 10:58:14 +00:00
Daniel Stenberg
4284190cc4 Ok, based on the online docs for AIX'es getservbyport_r() I adjusted to code
to do (what I believe is) "right". See docs on:
http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.aix.doc/libs/commtrf2/getservbyport_r.htm
2005-10-03 10:12:06 +00:00
Daniel Stenberg
5e4cbd2d24 recent action 2005-10-03 08:38:07 +00:00
Gisle Vanem
06c3bec65d Avoid gcc warning "dereferencing type-punned pointer
will break strict-aliasing rules".
2005-10-02 18:22:45 +00:00
Gisle Vanem
e8c3bb45ba Fix for building with MS Visual-C and single-threaded
runtime libs.
2005-10-02 16:52:07 +00:00
Daniel Stenberg
4ec55a964d fixed the proper path to the tftpd server 2005-09-30 14:25:50 +00:00
Daniel Stenberg
b9420864c0 a new mirror, but we don't increase the amount since one of the former ones
are now officially no longer considered a mirror... ;-)
2005-09-30 08:59:33 +00:00
Daniel Stenberg
bf6588b6a7 Update in the "which license is best" section as it seems Debian people have
made up their mind. Spell-checked as well.
2005-09-30 08:34:51 +00:00
Daniel Stenberg
e43217e664 Starting now, the verbose text that goes like "About to connect() to" will
now contain the word "proxy" is the hostname is in fact a proxy. This will
help users detect situations when they mistakenly use a proxy.
2005-09-29 11:37:52 +00:00
Daniel Stenberg
e19ee2d102 David Yan brought the Content-Range report 2005-09-27 20:22:13 +00:00
Daniel Stenberg
b4c53e2cfd An anonymous submitter filed bug #1299181
(http://curl.haxx.se/bug/view.cgi?id=1299181) that identified a silly problem
with Content-Range: headers with the 'bytes' keyword written in a different
case than all lowercase! It would cause a segfault!
2005-09-27 09:13:39 +00:00
Daniel Stenberg
a2902de67c TJ Saunders of the proftpd project identified and pointed out problems with
the modified FTPS negotiation change of August 19 2005. Thus, we revert the
change back to pre-7.14.1 status.
2005-09-27 08:46:54 +00:00
Daniel Stenberg
da192f7955 clarify what the default read callback does and how it uses the READDATA
option
2005-09-22 10:15:10 +00:00
Daniel Stenberg
a2210d23c3 three debian bug reports addressed 2005-09-21 11:29:03 +00:00
Daniel Stenberg
bd5a622400 stricter type usage for time variables to avoid picky compiler warnings 2005-09-21 11:28:40 +00:00
Daniel Stenberg
b9494cb0d6 1 - attempted fix of uninitialized variable
2 - indented and edited to fit better within 80 columns
3 - fixed possible buffer overflow in the service name lookup function
2005-09-21 10:45:25 +00:00
Daniel Stenberg
0f73af4470 simplified the sin6_scope_id test and removed some left-overs from the previous
way of detecting it
2005-09-21 09:10:17 +00:00
Daniel Stenberg
45e26b5c02 fixed the check for the addrinfo struct 2005-09-21 09:01:44 +00:00
Daniel Stenberg
6af5ea38ce clarified ERRORBUFFER - some errors just don't write a string even though
they should. And I removed all uses 'Note' (as they are pretty useless) and
did some other language and phrasing cleanups.
2005-09-21 06:59:01 +00:00
Daniel Stenberg
b6f0aa4394 return an error string for the missing URL case 2005-09-21 06:38:33 +00:00
Daniel Stenberg
774dab58f6 mention what WRITEFUNCTION and WRITEDATA do by default 2005-09-21 06:12:41 +00:00
Daniel Stenberg
e3bdb98f7a oops, broken sentence fixed:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329305
2005-09-21 06:07:41 +00:00
Daniel Stenberg
58d628c9f8 Uses __stdcall instead of SEC_ENTRY since it seems (at least) mingw doesn't
define SEC_ENTRY and thus fails unless this is done!
2005-09-20 08:29:56 +00:00
Daniel Stenberg
1e69394545 Since newer ares versions should work with ipv6, I modified the error message
to a warning message as a first step. We should persue to make curl use
c-ares properly even when built with ipv6 support.
2005-09-20 07:53:44 +00:00
Daniel Stenberg
1cf798ad14 typecasts added in an attempt to please the picky compilers 2005-09-20 06:51:23 +00:00
Daniel Stenberg
da3992d2e9 added test 271 2005-09-19 22:04:14 +00:00
Daniel Stenberg
48908e4633 test 271, the first ever TFTP test 2005-09-19 22:04:06 +00:00
Daniel Stenberg
f5ae149338 seems to work for test 271 on Linux now! 2005-09-19 22:03:16 +00:00
Daniel Stenberg
3fe5311967 Dmitry Bartsevich made the SSPI support work on Windows 9x as well 2005-09-19 21:45:16 +00:00
Dominick Meglio
6a48639c68 Added constants that will be used by ares_getaddrinfo. Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it isavailable to ensure it works properly in a threaded environment 2005-09-18 16:44:49 +00:00
Daniel Stenberg
e7093b3ca8 keep 'socktype' in the connectdata struct and make sure we use that for all
protocol sockets even if the resolved address may say otherwise
2005-09-16 21:30:08 +00:00
Daniel Stenberg
d0a4104c0c recent changes 2005-09-16 21:03:26 +00:00
Daniel Stenberg
90559bed53 renamed sendfile() since some systems have a system call named like this -
now the functions are named sendtftp() and recvtftp() instead.
2005-09-16 10:52:38 +00:00
Daniel Stenberg
973a18cf03 In the Solaris 7 header files for tftp, the th_stuff struct member is an
unsigned short. Trying a typecast here to fix.
2005-09-16 10:50:43 +00:00
Daniel Stenberg
3c666ce57a prevent warnings on re-defining MIN 2005-09-16 07:19:54 +00:00
Daniel Stenberg
a1287ec64f added URLs to bug reports 2005-09-16 07:18:25 +00:00
Daniel Stenberg
5fbfa1bfa8 Added known bugs #26, started using my new "bounce URL" that jumps to the
correct (and overly complicated) sourceforge bug tracker URL given the bug
report ID number.
2005-09-16 07:09:07 +00:00
Daniel Stenberg
da3ecc91f8 use int "subscripts" to prevent warnings from picky compilers 2005-09-16 06:14:30 +00:00
Daniel Stenberg
09c8f558f7 use internal *printf() clones 2005-09-16 05:49:53 +00:00
Daniel Stenberg
528a149def ifdef for includes, added checking for two not previously checked files (one
being necessary for solaris builds)
2005-09-15 21:50:50 +00:00
Daniel Stenberg
29e36afb6b use make -k when running the tests 2005-09-15 21:49:26 +00:00
Daniel Stenberg
0e39543d35 ignore this too 2005-09-15 20:36:58 +00:00
Daniel Stenberg
0de20d8ee6 build tftpd too! 2005-09-15 20:36:28 +00:00
Daniel Stenberg
cd5de5c0e5 First version of the TFTP server. Basic functionality is there. 2005-09-15 20:32:59 +00:00
Daniel Stenberg
bd5afc26bd added TFTP and TFTP-ipv6 support 2005-09-15 20:25:02 +00:00
Daniel Stenberg
9542dfdcdc moved test2file() to util.c 2005-09-15 20:22:43 +00:00
Daniel Stenberg
97a6d7b1a8 minor changes, the biggest one being using Curl_select() 2005-09-15 20:21:27 +00:00
Daniel Stenberg
209b9d4374 mention the configure change 2005-09-15 19:23:31 +00:00
Daniel Stenberg
0b8ccd0ae7 oops, return error if an error did occur! 2005-09-14 15:04:01 +00:00
Daniel Stenberg
0b7f5ad508 CURLOPT_BUFFERSIZE clarification 2005-09-12 20:36:17 +00:00
Daniel Stenberg
8a38805e82 Use the AC_CHECK_MEMBER() function for check struct members instead of
inventing and providing our own. Hopefully this solves a HP-UX 11.00 problem.
2005-09-10 21:09:44 +00:00
Daniel Stenberg
836d88a4b8 --max-time should work just as good on win32 these days 2005-09-08 20:21:52 +00:00
Daniel Stenberg
d5268ed511 mention the protocol-guessing when no protocol part is given in the URL
added TFTP to the list of supported protocols
2005-09-08 06:16:46 +00:00
Daniel Stenberg
0e7d93858d added tftp.c 2005-09-07 14:42:15 +00:00
Daniel Stenberg
2164d760b7 Ben Madsen reported a problem that only seemed to occur with certain specific
glibc versions, and with this patch applied it no longer shows up to me. The
problem was indeed a flaw that made curl use a file handle already closed.
2005-09-07 11:05:34 +00:00
Daniel Stenberg
b9c8de598b Thanks to Scott Davis' detailed reports, I found this premature detection
of the end of a chunked-encoded POST request.
2005-09-07 10:51:37 +00:00
Gisle Vanem
9889a811db Fix warning about missing initializers. 2005-09-06 15:58:09 +00:00
Gisle Vanem
9e38d882b9 Fix for bind() on Winsock; AF_UNSPEC (0) is illegal.
Should we do this for all targets?
2005-09-06 15:43:14 +00:00
Daniel Stenberg
e8635044b5 Now curl warns if an unknown variable is used in the -w/--writeout argument. 2005-09-06 13:27:18 +00:00
Daniel Stenberg
56dea0ac9a binding updates 2005-09-06 11:53:24 +00:00
Daniel Stenberg
e8b77477c7 sockets are curl_socket_t to build cleaner 2005-09-06 10:39:01 +00:00
Daniel Stenberg
64298e528d Use SOCK_DGRAM for TFTP. Consider setting this up at one central place, we
have this check done on far too many places by now...
2005-09-06 10:37:57 +00:00
Gunter Knauf
4f1465e7c7 minor Makefile fixes. 2005-09-06 00:39:41 +00:00
Daniel Stenberg
6120041b69 Added the people from the 7.14.1 release announcement. 2005-09-05 14:22:01 +00:00
Daniel Stenberg
8c1213627d new release, work has been "initiated" 2005-09-05 06:03:06 +00:00
Daniel Stenberg
3e6ae6eeb8 mention the recent improvements 2005-09-04 22:10:03 +00:00
Daniel Stenberg
291e9aeabd don't start lines with apostrophes! 2005-09-04 21:53:10 +00:00
Daniel Stenberg
a3d776187a check that bind() returns success 2005-09-04 18:33:20 +00:00
Daniel Stenberg
e55f502e2f --protocols now supports TFTP 2005-09-04 18:15:24 +00:00
Daniel Stenberg
e369270f88 7.14.2 actually 2005-09-04 05:23:08 +00:00
Daniel Stenberg
7e845e7cfd Added FTP_SKIP_PASV_IP and --ftp-skip-pasv-ip 2005-09-04 05:16:06 +00:00
Daniel Stenberg
56d9624b56 John Kelly added TFTP support to libcurl. A bunch of new error codes was
added. TODO: add them to docs. add TFTP server to test suite. add TFTP to
list of protocols whereever those are mentioned.
2005-09-02 15:11:08 +00:00
Daniel Stenberg
911d135deb explain why the ABI depends on the SSL libs 2005-09-02 13:40:07 +00:00
Daniel Stenberg
8107b90678 use -c to automake to copy the new files 2005-09-01 21:41:35 +00:00
Daniel Stenberg
7722452b98 work on 7.14.2 starts now 2005-09-01 21:08:56 +00:00
Daniel Stenberg
6e1a986e0f 7.14.1 coming right up 2005-09-01 20:54:00 +00:00
Daniel Stenberg
e0785ade35 softened my opinions, added API benefit - Thanks to Eric Cooper 2005-09-01 15:03:45 +00:00
Daniel Stenberg
0177ed6f03 clarify that the ctxfunc is called on all new connects 2005-09-01 13:41:29 +00:00
Daniel Stenberg
c62635a3b5 added DISTRO-DILEMMA 2005-09-01 08:44:39 +00:00
Daniel Stenberg
0177476fd2 added the URL 2005-09-01 08:43:44 +00:00
Daniel Stenberg
76d7dface7 new 2005-09-01 08:35:59 +00:00
Daniel Stenberg
982ba21460 oops, the GNU GSS patch could clobber the CPPFLAGS variable and it thus
broke krb4 builds!
2005-08-31 21:23:47 +00:00
Daniel Stenberg
6081c60556 ocurl release 2005-08-31 20:51:41 +00:00
Daniel Stenberg
2fe3c22108 use it as 'struct addrinfo' so perhaps it builds on mingw again 2005-08-31 06:04:48 +00:00
Gunter Knauf
75dbb3189a quick hack to make it working again on Win32 - however we should consider to set some defaults depending on the compiler architecture we guess we are since it doesnt work well if we prefer building the msvc makefile with gmake instead of nmake because we found gmake first in path.... 2005-08-30 18:37:08 +00:00
Daniel Stenberg
32330300a9 Kevin Lussier pointed out a problem with curllib.dsp 2005-08-29 21:04:26 +00:00
Daniel Stenberg
64414df27e Use the more correct BUILDING_LIBCURL define instead of CURLLIB_EXPORTS.
Kevin Lussier pointed this out!
2005-08-29 20:56:20 +00:00
Daniel Stenberg
f98ec86798 spell-fix 2005-08-29 15:19:38 +00:00
Daniel Stenberg
87bbd13899 Igor Polyakov fixed a rather nasty problem with the threaded name resolver
for Windows, that could lead to an Access Violation when the multi interface
was used due to an issue with how the resolver thread was and was not
terminated.
2005-08-29 14:23:53 +00:00
Daniel Stenberg
51a4493add Added GNU GSS and separate sections for MIT GSS and Heimdal and added info
about what each single lib may be used for.
2005-08-29 13:58:25 +00:00
Daniel Stenberg
5effe8f336 Simon Josefson brought GNU GSS support 2005-08-29 08:42:45 +00:00
Daniel Stenberg
296eb2bd61 1.3.0 coming just up 2005-08-29 07:03:05 +00:00
Daniel Stenberg
9853acba66 Moved the GnuTLS related TODO items from lib/TODO.gnutls to the proper
docs/TODO
2005-08-29 06:59:44 +00:00
Daniel Stenberg
09cb9c782d 4.14 Redirects work in browser but not with curl! 2005-08-26 13:22:39 +00:00
Daniel Stenberg
575ce905b2 ok, the right term (using RFC2616 lingo) for the -X keyword is method and not
request
2005-08-25 12:19:22 +00:00
Daniel Stenberg
54887af471 "Added in 7.14.1" notes and some minor edits 2005-08-25 07:06:50 +00:00
Daniel Stenberg
573350637e CURLINFO_COOKIELIST is added in 7.14.1 2005-08-25 07:06:15 +00:00
Daniel Stenberg
49a16f7121 Theo Borm's example, as was posted here:
http://curl.haxx.se/mail/lib-2005-08/0163.html
2005-08-24 17:07:27 +00:00
Daniel Stenberg
a4773fcbbb Toby Peterson added CURLOPT_IGNORE_CONTENT_LENGTH to the library, accessible
from the command line tool with --ignore-content-length. This will make it
easier to download files from Apache 1.x (and similar) servers that are
still having problems serving files larger than 2 or 4 GB. When this option
is enabled, curl will simply have to wait for the server to close the
connection to signal end of transfer. I wrote test case 269 that runs a
simple test that this works.
2005-08-24 10:57:28 +00:00
Daniel Stenberg
1e038c4bc6 valgrind version 3 renames the --logfile command line option to --log-file... 2005-08-24 10:49:57 +00:00
Daniel Stenberg
6ba19692a3 fixed #26, GnuTLS CA cert verification 2005-08-24 07:45:14 +00:00
Daniel Stenberg
432dfe2b8f Fixed CA cert verification using GnuTLS with the default bundle, which
previously failed due to GnuTLS not allowing x509 v1 CA certs by default.
2005-08-24 07:40:13 +00:00
Daniel Stenberg
a142372750 known bug #26, pretty fatal for anyone who wants to use proper SSL and GnuTLS 2005-08-23 08:51:38 +00:00
Gunter Knauf
f14195f786 enabled statically linked builds. 2005-08-22 02:39:05 +00:00
Daniel Stenberg
9d54f9a6b7 well hit me, that wasn't possible, use 1:0:0 anyway... 2005-08-21 21:27:19 +00:00
Daniel Stenberg
ebb91191bf modified the version-info, we only added functions 2005-08-21 21:25:42 +00:00
Daniel Stenberg
8742e294d4 increase version info 2005-08-21 21:25:07 +00:00
Daniel Stenberg
8882d1fa1b avoid adding a blank dir to the LD_LIBRARY_PATH when OpenSSL is found in a
default dir
2005-08-21 21:15:07 +00:00
Daniel Stenberg
0c37ab5255 Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info()
when getting the DNS server etc.
2005-08-21 21:09:44 +00:00
Daniel Stenberg
747a05844d Using CURLOPT_COOKIEFILE serveral times add more files to read from. 2005-08-19 21:38:44 +00:00
Daniel Stenberg
c7b7bf32f8 removed the unreachable code warning from gcc debug builds, even the most
recent gcc versions give far too many false positives for this to be valuable
2005-08-19 15:07:50 +00:00
Daniel Stenberg
710ee3b0e0 Norbert Novotny had problems with FTPS and he helped me work out a patch
that made curl run fine in his end. The key was to make sure we do the
SSL/TLS negotiation immediately after the TCP connect is done and not after
a few other commands have been sent like we did previously. I don't consider
this change necessary to obey the standards, I think this server is pickier
than what the specs allow it to be, but I can't see how this modified
libcurl code can add any problems to those who are interpreting the
standards more liberally.
2005-08-19 14:41:09 +00:00
Daniel Stenberg
7a8993892d one german mirror has died while another one was added, and yet another Texas
one!
2005-08-19 07:33:34 +00:00
Daniel Stenberg
5e16a77fa9 Added new contributors from RELEASE-NOTES. The somewhat different sort order
is due to now using emacs to sort but I'm not in a mood to fix it better just
now.
2005-08-19 07:32:14 +00:00
Daniel Stenberg
ef35519696 removed some inaccurate comments about the TYPE_IN_ADDR_T check 2005-08-19 07:02:24 +00:00
Daniel Stenberg
d5baaf7756 The big POST to HTTPS is probably not a bug.
The CONNECT problem is now bug #25 planned to get fixed in next release.
2005-08-19 06:43:25 +00:00
Gunter Knauf
2a94387fc3 minor Makefile fixes. 2005-08-18 16:39:29 +00:00
Gunter Knauf
6a5c2b0fc3 updated NetWare section. 2005-08-18 16:33:45 +00:00
Daniel Stenberg
fc281d6440 detabified 2005-08-18 08:48:31 +00:00
Daniel Stenberg
e22ac39da4 detabify 2005-08-18 08:47:56 +00:00
Daniel Stenberg
34cadb1e54 Harshal Pradhan's use-after-free bug with ares is now known bug #24 to be
fixed after 7.14.1
2005-08-18 08:18:24 +00:00
Daniel Stenberg
94692b904e it isn't strictly necessary to use it after a perform 2005-08-18 06:14:17 +00:00
Daniel Stenberg
18f3087afd removed issue 20 that was about valgrind complaints on other libs/parts, as
we have a fancier valgrind error parser these days and it seems to work rather
well
2005-08-17 09:43:29 +00:00
Daniel Stenberg
15bc228ae9 the SOCKS situation 2005-08-17 09:41:54 +00:00
Daniel Stenberg
2b7a38d032 removed old info about curl_getdate() just simply isn't true and hasn't been
true since the getdate() parser code rewrite
2005-08-17 09:12:08 +00:00
Daniel Stenberg
90e1a6905a remove the typecast to long from time_t, since we now store it as curl_off_t 2005-08-17 09:11:27 +00:00
Daniel Stenberg
c36af24cbd handles expiry times in cookie files that go beyond 32 bits in size 2005-08-17 09:01:07 +00:00
Daniel Stenberg
a676c18502 - Jeff Pohlmeyer found out that if you ask libcurl to load a cookiefile (with
CURLOPT_COOKIEFILE), add a cookie (with CURLOPT_COOKIELIST), tell it to
  write the result to a given cookie jar and then never actually call
  curl_easy_perform() - the given file(s) to read was never read but the
  output file was written and thus it caused a "funny" result.

- While doing some tests for the bug above, I noticed that Firefox generates
  large numbers (for the expire time) in the cookies.txt file and libcurl
  didn't treat them properly. Now it does.
2005-08-17 08:55:43 +00:00
Gunter Knauf
362912ff83 added curl_mvsnprintf to the export list; I appened to the end cause of the numbering ... 2005-08-16 20:12:58 +00:00
Gunter Knauf
46ff13f243 added curl_mvsnprintf to the export list. 2005-08-16 20:11:25 +00:00
Daniel Stenberg
340a67a6f8 client side fixes 2005-08-16 11:40:43 +00:00
Daniel Stenberg
9294c1e76c typecase the isspace() argument to int 2005-08-16 07:32:50 +00:00
Daniel Stenberg
fd704f8de0 recent changes 2005-08-15 21:48:36 +00:00
Daniel Stenberg
d9ca9154d1 Added more verbose "warning" messages to the curl client for cases where it
fails to open/read files etc to help users diagnose why it doesn't do what
you'd expect it to. Converted lots of old messages to use the new generic
function I wrote for this purpose.
2005-08-15 21:48:28 +00:00
Daniel Stenberg
35110eca73 James Bursa identified a libcurl HTTP bug and a good way to repeat it. If a
site responds with bad HTTP response that doesn't contain any header at all,
only a response body, and the write callback returns 0 to abort the
transfer, it didn't have any real effect but the write callback would be
called once more anyway.
2005-08-13 21:28:46 +00:00
Daniel Stenberg
9ad92b3007 added test 268 that makes curl -d @nonexisting 2005-08-12 22:09:21 +00:00
Daniel Stenberg
2f78c96330 clarify 2005-08-12 21:47:05 +00:00
Daniel Stenberg
639857ceb2 o curl -d @filename when 'filename' was not possible to access no longer
converts the request to a GET, but now instead makes it a POST of no data
o The time condition illegal syntax warning is now inhibited if -s is used.
2005-08-12 21:25:44 +00:00
Daniel Stenberg
162f58c53c -H needs no CRLF or similar added 2005-08-12 20:56:12 +00:00
Daniel Stenberg
84c4d96e71 removed old debug left-over infof() call 2005-08-11 21:41:11 +00:00
Daniel Stenberg
c0d343d56d do a POST with NTLM and add two custom headers 2005-08-11 21:33:40 +00:00
Daniel Stenberg
6d14a80608 Added comment about strtoimax() 2005-08-11 20:42:02 +00:00
Gunter Knauf
f451bb7c49 fix for NetWare crossbuilds to display the right config.h when build on Win32. 2005-08-11 18:02:09 +00:00
Daniel Stenberg
20b17d6b04 the debug callback was called with CURLINFO_TEXT with the data size one
too big
2005-08-10 22:57:14 +00:00
Gunter Knauf
bb2317b63c minor Makefile fix. 2005-08-10 21:45:59 +00:00
Gunter Knauf
189461dc98 minor Makefile fix. 2005-08-10 20:45:49 +00:00
Gunter Knauf
69af552bc1 added some more NetWare targets. 2005-08-10 19:26:33 +00:00
Gunter Knauf
0ae6ff9f72 some minor Makefile fixes for SSL. 2005-08-10 19:19:25 +00:00
Gunter Knauf
8b571fbbb1 make ares compile again for NetWare. 2005-08-10 17:03:53 +00:00
Gunter Knauf
f3fcd409d5 make ares compile again for NetWare. 2005-08-10 16:55:06 +00:00
Gunter Knauf
a47532f88a fixed line endings so it works again with gnu make on Win32. 2005-08-10 16:54:00 +00:00
Daniel Stenberg
6c157a404b Christopher R. Palmer fixed the offsets used for date parsings when the time
zone name of a daylight savings time was used. For example, PDT vs PDS. This
flaw was introduced with the new date parser (11 sep 2004 - 7.12.2).
Fortunately, no web server or cookie string etc should be using such time
zone names thus limiting the effect of this bug.
2005-08-09 21:59:31 +00:00
Daniel Stenberg
4f8a49143d mention two other bugs we should fix before release 2005-08-08 23:09:24 +00:00
Daniel Stenberg
493d6033aa Jon Grubbs filed bug report #1249962 which identified a problem with NTLM on a
HTTP proxy if an FTP URL was given. libcurl now properly switches to pure HTTP
internally when an HTTP proxy is used, even for FTP URLs. The problem would
also occur with other multi-pass auth methods.
2005-08-07 22:59:06 +00:00
Daniel Stenberg
8f219af884 When curl is built with GnuTLS, curl-config didn't include "SSL" when
--features was used
2005-08-07 21:45:59 +00:00
Daniel Stenberg
aeb04136f7 Don't prevent FTPS:// through a http proxy, as we cannot know if it works or
not!
2005-08-07 21:39:44 +00:00
Daniel Stenberg
0b8f57bf06 mention our security related mail alias in the "who do I mail" section 2005-08-07 14:36:55 +00:00
Daniel Stenberg
6508d446e1 Support realloc() on a NULL pointer properly (printf(%p) on a NULL pointer
outputs (nil) and not a 0x0 or similar.
2005-08-04 23:05:36 +00:00
Daniel Stenberg
82cb462bb4 killed trailing whitespace, narrowed a few lines to 80 cols 2005-08-04 08:07:44 +00:00
Daniel Stenberg
9a264bf610 mention that the NOBODY reset thing is added in 7.14.1 2005-08-01 11:56:03 +00:00
Daniel Stenberg
57007e80a9 Moved items from TODO-RELEASE to TODO since they're not really bound to happen
in any specific release.
2005-07-30 23:48:07 +00:00
Daniel Stenberg
b6c876bdb6 clarified the PHP/CURL topic a bit more 2005-07-30 23:37:05 +00:00
Daniel Stenberg
57afae79eb correction and added new mirror 2005-07-30 23:19:42 +00:00
Daniel Stenberg
84c2184909 CURLOPT_COOKIELIST change since it no longer modifies the input string contents 2005-07-30 08:27:51 +00:00
Daniel Stenberg
e358a24a75 reset the numcookies counter too (I missed it in the previous commit) 2005-07-28 21:53:09 +00:00
Daniel Stenberg
9da9d00c62 fixed example since this is how the interface works now 2005-07-28 21:51:20 +00:00
Daniel Stenberg
ec3f269d1f now strdups the cookielist inpointer before passed on, as the cookie function
modifies it
2005-07-28 21:50:34 +00:00
Daniel Stenberg
1c388a52a5 curl standard indent/format 2005-07-28 21:49:58 +00:00
Gisle Vanem
34a827bbfe Needs 'struct_stat'. Increased verbosity. 2005-07-28 13:20:27 +00:00
Daniel Stenberg
726b9e2240 If any of the options CURLOPT_HTTPGET, CURLOPT_POST and CURLOPT_HTTPPOST is
set to 1, CURLOPT_NOBODY will now automatically be set to 0.
2005-07-27 22:29:50 +00:00
Daniel Stenberg
2236ba0d20 Peteris Krumins added CURLOPT_COOKIELIST and CURLINFO_COOKIELIST, which is a
simple interface to extracting and setting cookies in libcurl's internal
"cookie jar". See the new cookie_interface.c example code.
2005-07-27 22:17:14 +00:00
Daniel Stenberg
463c0f7096 disabling HTTP should also nullify this function call 2005-07-27 21:44:43 +00:00
Dan Fandrich
e49a7e361c Fixed --without-gnutls 2005-07-27 18:22:21 +00:00
Dan Fandrich
6e87cf5b30 Fixed some typos in output messages. 2005-07-21 22:18:35 +00:00
Dan Fandrich
5872e8dd7e Properly support the options --without-spnego --without-gssapi --without-krb4 2005-07-20 23:00:27 +00:00
Dan Fandrich
e81d4ac8c8 Add -Wdeclaration-after-statement to gcc to detect accidental C99-style
variable declarations.
2005-07-20 21:58:23 +00:00
Daniel Stenberg
4922904991 Simplified the code within curl_easy_perform() that calls Curl_perform().
Pointed out by Bjorn Reese.
2005-07-17 12:44:11 +00:00
Daniel Stenberg
decae2dcda cURLpp 0.5.1 2005-07-15 06:57:36 +00:00
Daniel Stenberg
16bbd13af7 Diego Casorran patches to make (lib)curl build fine on Amiga again 2005-07-13 18:06:40 +00:00
Daniel Stenberg
ee0666c8df better description for HEADERFUNCTION 2005-07-13 09:46:37 +00:00
Daniel Stenberg
a8a8ae2e92 elaborate a bit on how to deal with chunked-encoded trailers that now are
passed to the app using the header callback
2005-07-13 09:37:22 +00:00
Daniel Stenberg
fd1148a728 converted this back to one name per line to make it easier/better to diff
and merge when new names are added
2005-07-13 07:44:53 +00:00
Daniel Stenberg
74c7b41ee7 mention the Rexx/CURL release 2005-07-12 18:20:31 +00:00
Daniel Stenberg
465e19dbe9 Adrian Schuur added trailer support in the chunked encoding stream. The
trailer is then sent to the normal header callback/stream.
2005-07-12 18:15:34 +00:00
Daniel Stenberg
86660c73e5 mention an old idea 2005-07-08 13:28:16 +00:00
Daniel Stenberg
6d8a208df2 mention the exception only once ;-) 2005-07-07 05:43:04 +00:00
Daniel Stenberg
c3a826fdce correction for the 407 with response-body case 2005-07-05 22:07:34 +00:00
Gisle Vanem
c5d6a42abf Update copyright. 2005-07-05 18:07:55 +00:00
Daniel Stenberg
d49c144297 Gisle Vanem came up with a nice little work-around for bug #1230118. It
seems the Windows (MSVC) libc time functions may return data one hour off if
TZ is not set and automatic DST adjustment is enabled. This made
curl_getdate() return wrong value, and it also concerned internal cookie
expirations etc.
2005-07-05 14:57:41 +00:00
Daniel Stenberg
e7de7d5eb3 mention the strerror_r detection fix in configure 2005-07-04 21:53:02 +00:00
Daniel Stenberg
20005a83d2 Andrew Bushnell provided enough info for me to tell that we badly needed to
fix the CONNECT authentication code with multi-pass auth methods (such as
NTLM) as it didn't previously properly ignore response-bodies - in fact it
stopped reading after all response headers had been received. This could
lead to libcurl sending the next request and reading the body from the first
request as response to the second request. (I also renamed the function,
which wasn't strictly necessary but...)

The best fix would to once and for all make the CONNECT code use the
ordinary request sending/receiving code, treating it as any ordinary request
instead of the special-purpose function we have now. It should make it
better for multi-interface too. And possibly lead to less code...

Added test case 265 for this. It doesn't work as a _really_ good test case
since the test proxy is too stupid, but the test case helps when running the
debugger to verify.
2005-07-03 22:25:15 +00:00
Daniel Stenberg
27926030f9 add more info when this script gets confused, and added getaddrinfo and
freeaddrinfo to the trace output
2005-06-30 14:07:52 +00:00
Daniel Stenberg
701de67b79 use %p to printf pointers since %x doesn't work properly on tru64 for this
(and besides, we should be using the same %-code for all pointers)
2005-06-30 13:30:23 +00:00
Daniel Stenberg
883479f01e enable memory debugging on tru64 with ipv6 support by doing a little different
defining, since the system headers themselves redefine getaddrinfo
2005-06-30 13:28:58 +00:00
Dan Fandrich
b37a0b0512 Detect (or at least infer) glibc-style strerror_r even when cross-compiling. 2005-06-30 04:53:05 +00:00
Daniel Stenberg
5c5d5270d2 new Lua binding 2005-06-28 09:08:52 +00:00
Daniel Stenberg
36461fb2aa clarify that ftp ascii transfers don't do right in current libcurl 2005-06-26 10:08:08 +00:00
Daniel Stenberg
d8dcd5e472 added docs about the new proxy string support 2005-06-23 23:07:07 +00:00
Daniel Stenberg
c51b46c982 David Shaw fixes 2005-06-22 22:31:08 +00:00
Daniel Stenberg
b1b63c1dd1 mention more ARMs 2005-06-22 22:30:52 +00:00
Daniel Stenberg
30c93d66eb verify that the URL decoding is done properly too 2005-06-22 22:24:47 +00:00
Daniel Stenberg
3b60bb7259 David Shaw's fix that unifies proxy string treatment so that a proxy given
with CURLOPT_PROXY can use a http:// prefix and user + password. The user
and password fields are now also URL decoded properly.

Test case 264 added to verify.
2005-06-22 22:24:10 +00:00
Daniel Stenberg
c73f8e835f David Shaw's updated version:
It now properly handles code that uses curl_free() (since not all versions of
curl have it), and also fixes a few problems when detecting libcurl on MinGW,
and a linker problem on OSX Panther.
2005-06-22 06:58:11 +00:00
Daniel Stenberg
93558c4299 mistake 2005-06-20 22:32:45 +00:00
Daniel Stenberg
396cff5779 possible windows memory leak fixed by Gisle 2005-06-19 21:38:45 +00:00
Dominick Meglio
336154e729 Added some checks for the addrinfo structure. 2005-06-19 16:58:40 +00:00
Gisle Vanem
bb0aba34fa Ensure thread handle is closed too. 2005-06-14 14:47:21 +00:00
Daniel Stenberg
1dc0ce9562 4.13 Why is curl -R on Windows one hour off? 2005-06-13 18:33:40 +00:00
Daniel Stenberg
e4aee168b5 recent buildconf fiddling 2005-06-13 11:20:51 +00:00
Daniel Stenberg
2c10c895da run libtoolize in the ares dir as well, and modified the output slightly for
all tools run in the ares dir - now shown like "running ares/[tool]"
2005-06-13 10:49:14 +00:00
Daniel Stenberg
c04fae3096 CURLINFO_FILETIME returns the time for GMT 2005-06-11 22:04:41 +00:00
Daniel Stenberg
a214af0830 make sure the found tool is a regular file (and not a dir or something) 2005-06-09 22:43:13 +00:00
Daniel Stenberg
f21bc46e82 Modified to use 'head -n 1' instead of 'head -1' since some versions of head
complains and claims this is deprecated.
2005-06-09 06:45:54 +00:00
Daniel Stenberg
044327a488 Reverted Tupone Alfredo's patch, as it broke NUMEROUS autobuilds. Let's do the
changes in a slower and more controlled manner...
2005-06-07 23:00:06 +00:00
Daniel Stenberg
c4bbcc83b6 Tupone Alfredo's fixes:
1) findtool does look per tool in PATH and think ./perl is the perl
executable, while is just a local directory (I have . in the PATH)

2) I got several warning for head -1 deprecated in favour of head -n 1

3) ares directory is missing some file (missing is missing :-) ) because
automake and friends is not run.

(Let's hope number 2 doesn't break somewhere "out there", if so we can always
search/replace that back.)
2005-06-06 21:19:04 +00:00
Daniel Stenberg
eb162b73c2 first rough version 2005-06-03 21:38:40 +00:00
Daniel Stenberg
29aafb9cea Andres Garcia's text mode fix for the 'data' part 2005-06-03 14:06:03 +00:00
Daniel Stenberg
40eb7d0d48 FIONBIO is in sys/ioctl.h on AIX 2005-06-03 07:39:18 +00:00
Daniel Stenberg
1dcb2b7e65 sigh, define TRUE if not already 2005-06-02 21:10:21 +00:00
Daniel Stenberg
5470b9aa73 William Ahern:
Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a
  read event can come back from poll() on a valid SOCK_DGRAM socket but
  recv(2) will still block. This patch doesn't ignore EAGAIN in
  read_udp_packets(), though maybe it should. (This patch was edited by Daniel
  Stenberg and a new configure test was added (imported from curl's configure)
  to properly detect what non-blocking socket approach to use.)
2005-06-02 11:58:04 +00:00
Daniel Stenberg
050bd7dd0b William Ahern:
I'm not quite sure how this was happening, but I've been seeing PTR queries
  which seem to return empty responses. At least, they were empty when calling
  ares_expand_name() on the record. Here's a patch which guarantees to
  NUL-terminate the expanded name. The old behavior failed to NUL-terminate if
  len was 0, and this was causing strlen() to run past the end of the buffer
  after calling ares_expand_name() and getting ARES_SUCCESS as the return
  value. If q is not greater than *s then it's equal and *s is always
  allocated with at least one byte.
2005-06-02 11:09:10 +00:00
Daniel Stenberg
f75038634f specify the cares lib before the other libs, to make it build fine with mingw
- inspired by Tupone Alfredo's bug report (and patch) #1212940
2005-06-01 21:30:29 +00:00
Daniel Stenberg
300b4a9158 Todd Kulesza reported a flaw in the proxy option, since a numerical IPv6
address was not possible to use. It is now, but requires it written
RFC2732-style, within brackets - which incidently is how you enter numerical
IPv6 addresses in URLs. Test case 263 added to verify.
2005-05-31 13:03:26 +00:00
Daniel Stenberg
52071f3476 added keywords 2005-05-31 12:57:21 +00:00
Daniel Stenberg
42ddd745f8 recent changes 2005-05-29 22:38:34 +00:00
Daniel Stenberg
a7846189cd Eric Cooper reported about a problem with HTTP servers that responds with
binary zeroes within the headers. They confused libcurl to do wrong so the
downloaded headers become incomplete. The fix is now verified with test case
262.
2005-05-29 22:30:48 +00:00
Daniel Stenberg
4762995d1f avoid the sensitive word as it looks bad in some people's eyes 2005-05-27 11:39:07 +00:00
Daniel Stenberg
e3a530eb61 Andrs Garca fixed a warning appearing on windows 2005-05-27 11:01:41 +00:00
Daniel Stenberg
d1235ff058 provide the proper copyright texts for these 2005-05-26 20:56:25 +00:00
Daniel Stenberg
4370e92dbd set LD_LIBRARY_PATH properly even when the openssl lib dir is found using
pkg-config
2005-05-25 22:14:32 +00:00
Daniel Stenberg
50e9522a06 silense a warning 2005-05-25 22:12:57 +00:00
Daniel Stenberg
b5bb9aa8e3 minor rephrase 2005-05-25 13:07:06 +00:00
Daniel Stenberg
cf2e365f23 output the full usec when --trace-time is used 2005-05-25 12:29:09 +00:00
Daniel Stenberg
72e532cb67 no more time/re-start of sockfilt, no more redirect of stdin/stdout when
talking to sockfilt
2005-05-25 12:27:19 +00:00
Daniel Stenberg
ac5635f77d added function for individual ftp slave kills 2005-05-25 12:26:38 +00:00
Daniel Stenberg
640d67c119 modified output logging, fixed the ftpslave killing 2005-05-25 12:26:20 +00:00
Daniel Stenberg
3e79693e3b utilize the whole usec in the log and don't output to stderr if the logfile
can't be opened
2005-05-25 12:04:52 +00:00
Daniel Stenberg
d55d3c2fd0 nicer raw logging and put code into (nicer) functions 2005-05-25 12:04:24 +00:00
Daniel Stenberg
3aced17c75 don't restart sockfilt after only 5 seconds of inactivity 2005-05-24 21:09:49 +00:00
Daniel Stenberg
bac63914db recent action 2005-05-24 21:02:59 +00:00
Daniel Stenberg
6a63c51f7c Andres Garcia's mode=text patch to make these do fine on Windows 2005-05-24 10:03:13 +00:00
Daniel Stenberg
632cf13767 add test case 261, response code 226 to TYPE 2005-05-24 09:40:58 +00:00
Daniel Stenberg
e7012a515c Now allow TYPE responses to be any 2xx code, and log if it isn't 200. 2005-05-24 09:39:56 +00:00
Daniel Stenberg
6b638af92f removed leftover debug message ("moo moo") 2005-05-22 17:54:11 +00:00
Daniel Stenberg
c654b79c53 added keywords 2005-05-21 22:38:19 +00:00
Daniel Stenberg
bee7b874ea added -nobuildconf 2005-05-20 11:24:55 +00:00
Daniel Stenberg
9c3fc592f7 keywords added 2005-05-20 11:15:24 +00:00
Daniel Stenberg
4eab7a1ebc shorter name 2005-05-20 11:15:15 +00:00
Daniel Stenberg
3d985688e4 sum up 2005-05-20 11:14:44 +00:00
Daniel Stenberg
17ea2631cd Add support for text mode on stdout tests as well, and add the mode=text
to the docs.
2005-05-20 10:40:32 +00:00
Daniel Stenberg
b749910e6c include ctype.h for isdigit() 2005-05-19 09:55:53 +00:00
Daniel Stenberg
eff36caea8 additional fix for the malformed URL fix of yday 2005-05-19 07:21:18 +00:00
Daniel Stenberg
6ff092f140 removed duplicate 2005-05-19 07:12:16 +00:00
Daniel Stenberg
28bb36e53d three fixes since 7.14.0 2005-05-18 20:02:07 +00:00
Daniel Stenberg
4a091bbd8a Bug report #1204435 identified a problem with malformed URLs like
"http://somehost?data" as it added a slash too much in the request ("GET
/?data/"...). Added test case 260 to verify.
2005-05-18 20:01:01 +00:00
Daniel Stenberg
e99a6b813e update 2005-05-18 20:00:50 +00:00
Daniel Stenberg
b9e5302f27 adjusted the strerror_r test more, use _REENTRANT instead of _THREAD_SAFE
when looking for the prototype
2005-05-18 15:15:00 +00:00
Daniel Stenberg
dd7b6aef39 The configure check for strerror_r() failed to detect the proper API at
times, like on my HP-UX 10.20 tests. And then lib/strerror.c badly assumed
the glibc version if the posix define wasn't set (since it _had_ found a
strerror_r).
2005-05-18 13:24:23 +00:00
Daniel Stenberg
910b8b6a69 #15 is now fixed 2005-05-18 10:38:21 +00:00
Daniel Stenberg
c3207e215f clarified for GnuTLS 2005-05-18 10:14:25 +00:00
Daniel Stenberg
f83be11b85 several updates 2005-05-18 10:12:08 +00:00
Daniel Stenberg
45bce1062a ignore resolve too 2005-05-18 10:05:38 +00:00
Daniel Stenberg
8cb344bf3c use less code and prevent compiler warning 2005-05-18 10:01:46 +00:00
Daniel Stenberg
fcc4518cdc removed the separate table with download links, and extended the curl site
list with all current mirrors
2005-05-18 09:26:57 +00:00
Daniel Stenberg
c84839eb91 scan for gmake and make to prefer gmake on systems that have it 2005-05-17 12:07:08 +00:00
Daniel Stenberg
1f878aee69 Made test case 241 precheck that the given name resolves to an ipv6 address,
or the test is skipped. Ideally, we should let this test case go over a few
frequently used IPv6 localhost aliases...
2005-05-17 10:27:11 +00:00
Daniel Stenberg
84fd4686e2 Moved more generic functions to util.[ch]
Added resolve.c to simply resolve a given host name
2005-05-17 10:22:22 +00:00
Daniel Stenberg
ede9fb4fcc check if getsockname() returns failure before using the address it provides 2005-05-17 09:18:17 +00:00
Daniel Stenberg
723aef71e8 reduced typecasts, from two to one 2005-05-17 09:15:21 +00:00
Dominick Meglio
48964a911e More of the same 2005-05-17 04:20:58 +00:00
Dominick Meglio
6a35cb60fd More compiler warning cleanups 2005-05-17 04:18:41 +00:00
Daniel Stenberg
1e51c3a832 bad formatting 2005-05-16 22:30:00 +00:00
Dominick Meglio
205dda2b39 Made ares_free_hostent man page refer to ares_parse_aaaa_reply 2005-05-16 19:23:57 +00:00
Dominick Meglio
1c18d19da0 Cleaned up some compile warnings 2005-05-16 19:14:25 +00:00
Dominick Meglio
645729e943 Added ares_getnameinfo which mimics the getnameinfo API 2005-05-16 18:06:54 +00:00
Daniel Stenberg
f425a25c98 Modified the gmtime_r check to not check for it until the "check for a working
one" is made, and only if that test runs ok we define it as present. Unless
crosscompiling, since then we use the former AC_CHECK_FUNCS method.
2005-05-16 15:09:26 +00:00
Daniel Stenberg
aaace2e802 define GMTIME_R to 0 if not working 2005-05-16 14:53:48 +00:00
Daniel Stenberg
3f16d9fbc9 attempt to detect a bad (as in HPUX 10.20 bad) gmtime_r function 2005-05-16 14:40:10 +00:00
Daniel Stenberg
3afc57bab8 start working on 7.14.1 2005-05-16 13:27:41 +00:00
298 changed files with 16672 additions and 4688 deletions

View File

@@ -12,3 +12,4 @@ depcomp
config.guess config.guess
config.sub config.sub
ltmain.sh ltmain.sh
libcurl.pc

807
CHANGES
View File

@@ -6,6 +6,808 @@
Changelog Changelog
Daniel (16 March 2006)
- Tor Arntsen provided a RPM spec file for AIX Toolbox, that now is included
in the release archive.
Daniel (14 March 2006)
- David McCreedy fixed:
a bad SSL error message when OpenSSL certificates are verified fine.
a missing return code assignment in the FTP code
Daniel (7 March 2006)
- Markus Koetter filed debian bug report #355715 which identified a problem
with the multi interface and multi-part formposts. The fix from February
22nd could make the Curl_done() function get called twice on the same
connection and it was not designed for that and thus tried to call free() on
an already freed memory area!
- Peter Heuchert made sure the CURLFTPSSL_CONTROL setting for CURLOPT_FTP_SSL
is used properly.
Daniel (6 March 2006)
- Lots of users on Windows have reported getting the "SSL: couldn't set
callback" error message so I've now made the setting of that callback not be
as critical as before. The function is only used for additional loggging/
trace anyway so a failure just means slightly less data. It should still be
able to proceed and connect fine to the server.
Daniel (4 March 2006)
- Thomas Klausner provided a patch written by Todd Vierling in bug report
#1442471 that fixes a build problem on Interix.
Daniel (2 March 2006)
- FTP upload without a file name part in the URL now causes
curl_easy_perform() to return CURLE_URL_MALFORMAT. Previously it allowed the
upload but named the file "(nil)" (without the quotes). Test case 524
verifies.
- Added a check for getprotobyname in configure so that it'll be used, thanks
to Gisle Vanem's change the other day.
Daniel (28 February 2006)
- Dan Fandrich prevented curl from getting stuck in an endless loop in case we
are out of file handles very early in curl's code where it makes sure that
0, 1 and 2 aren't gonna be used by the lib for transfers.
Daniel (27 February 2006)
- Marty Kuhrt pointed out that there were two VMS-specific files missing in
the release archive.
Version 7.15.2 (27 February 2006)
Daniel (22 February 2006)
- Lots of work and analysis by "xbx___" in bug #1431750
(http://curl.haxx.se/bug/view.cgi?id=1431750) helped me identify and fix two
different but related bugs:
1) Removing an easy handle from a multi handle before the transfer is done
could leave a connection in the connection cache for that handle that is
in a state that isn't suitable for re-use. A subsequent re-use could then
read from a NULL pointer and segfault.
2) When an easy handle was removed from the multi handle, there could be an
outstanding c-ares DNS name resolve request. When the response arrived,
it caused havoc since the connection struct it "belonged" to could've
been freed already.
Now Curl_done() is called when an easy handle is removed from a multi handle
pre-maturely (that is, before the transfer was complteted). Curl_done() also
makes sure to cancel all (if any) outstanding c-ares requests.
Daniel (21 February 2006)
- Peter Su added support for SOCKS4 proxies. Enable this by setting the proxy
type to the already provided type CURLPROXY_SOCKS4.
I added a --socks4 option that works like the current --socks5 option but
instead use the socks4 protocol.
Daniel (20 February 2006)
- Shmulik Regev fixed an issue with multi-pass authentication and compressed
content when libcurl didn't honor the internal ignorebody flag.
Daniel (18 February 2006)
- Ulf H<>rnhammar fixed a format string (printf style) problem in the Negotiate
code. It should however not be the cause of any troubles. He also fixed a
few similar problems in the HTTP test server code.
Daniel (17 February 2006)
- Shmulik Regev provided a fix for the DNS cache when using short life times,
as previously it could be holding on to old cached entries longer than
requested.
Daniel (11 February 2006)
- Karl Moerder added the CURLOPT_CONNECT_ONLY and CURLINFO_LASTSOCKET options
that an app can use to let libcurl only connect to a remote host and then
extract the socket from libcurl. libcurl will then not attempt to do any
transfer at all after the connect is done.
- Kent Boortz improved the configure check for GnuTLS to properly set LIBS
instead of LDFLAGS.
Daniel (8 February 2006)
- Philippe Vaucher provided a brilliant piece of test code that show a problem
with re-used FTP connections. If the second request on the same connection
was set not to fetch a "body", libcurl could get confused and consider it an
attempt to use a dead connection and would go acting mighty strange.
Daniel (2 February 2006)
- Make --limit-rate [num] mean bytes. It used to be that but it broke in my
change done in November 2005.
Daniel (30 January 2006)
- Added CURLOPT_LOCALPORT and CURLOPT_LOCALPORTRANGE to libcurl. Set with the
curl tool with --local-port. Plain and simply set the range of ports to bind
the local end of connections to. Implemented on to popular demand.
- Based on an error report by Philippe Vaucher, we no longer count a retried
connection setup as a follow-redirect. It turns out 1) this fails when a FTP
connection is re-setup and 2) it does make the max-redirs counter behave
wrong.
Daniel (24 January 2006)
- Michal Marek provided a patch for FTP that makes libcurl continue to try
PASV even after EPSV returned a positive response code, if libcurl failed to
connect to the port number the EPSV response said. Obviously some people are
going through protocol-sensitive firewalls (or similar) that don't
understand EPSV and then they don't allow the second connection unless PASV
was used. This also called for a minor fix of test case 238.
Daniel (20 January 2006)
- Duane Cathey was one of our friends who reported that curl -P [IP]
(CURLOPT_FTPPORT) didn't work for ipv6-enabed curls if the IP wasn't a
"native" IP while it works fine for ipv6-disabled builds!
In the process of fixing this, I removed the support for LPRT since I can't
think of many reasons to keep doing it and asking on the mailing list didn't
reveal anyone else that could either. The code that sends EPRT and PORT is
now also a lot simpler than before (IMHO).
Daniel (19 January 2006)
- Jon Turner pointed out that doing -P [hostname] (CURLOPT_FTPPORT) with curl
(built ipv4-only) didn't work.
Daniel (18 January 2006)
- As reported in bug #1408742 (http://curl.haxx.se/bug/view.cgi?id=1408742),
the configure script complained about a missing "missing" script if you ran
configure within a path whose name included one or more spaces. This is due
to a flaw in automake (1.9.6 and earlier). I've now worked around it by
including an "overloaded" version of the AM_MISSING_HAS_RUN script that'll
be used instead of the one automake ships with. This kludge needs to be
removed once we get an automake version with this problem corrected.
Possibly we'll then need to convert this into a kludge depending on what
automake version that is used and that is gonna be painful and I don't even
want to think about that now...!
Daniel (17 January 2006)
- David Shaw: Here is the latest libcurl.m4 autoconf tests. It is updated with
the latest features and protocols that libcurl supports and has a minor fix
to better deal with the obscure case where someone has more than one libcurl
installed at the same time.
Daniel (16 January 2006)
- David Shaw finally removed all traces of Gopher and we are now officially
not supporting it. It hasn't been functioning for years anyway, so this is
just finally stating what already was true. And a cleanup at the same time.
- Bryan Henderson turned the 'initialized' variable for curl_global_init()
into a counter, and thus you can now do multiple curl_global_init() and you
are then supposed to do the same amount of calls to curl_global_cleanup().
Bryan has also updated the docs accordingly.
Daniel (13 January 2006)
- Andrew Benham fixed a race condition in the test suite that could cause the
test script to kill all processes in the current process group!
Daniel (12 January 2006)
- Michael Jahn:
Fixed FTP_SKIP_PASV_IP and FTP_USE_EPSV to "do right" when used on FTP thru
HTTP proxy.
Fixed PROXYTUNNEL to work fine when you do ftp through a proxy. It would
previously overwrite internal memory and cause unpredicted behaviour!
Daniel (11 January 2006)
- I decided to document the "secret option" here now, as I've received *NO*
feedback at all on my mailing list requests from November 2005:
I'm looking for feedback and comments. I added some experimental code the
other day, that allows a libcurl user to select what method libcurl should
use to reach a file on a FTP(S) server.
This functionality is available in CVS code and in recent daily snapshots.
Let me explain...
The current name for the option is CURLOPT_FTP_FILEMETHOD (--ftp-method for
the command line tool) and you set it to a long (there are currenly no
defines for the argument values, just plain numericals). You can set three
different "methods" that do this:
1 multicwd - like today, curl will do a single CWD operation for each path
part in the given URL. For deep hierarchies this means very many
commands. This is how RFC1738 says it should be done. This is the
default.
2 nocwd - no CWD at all is done, curl will do SIZE, RETR, STOR etc and give
a full path to the server.
3 singlecwd - make one CWD with the full target directory and then operate
on the file "normally".
(With the command line tool you do --ftp-method [METHOD], where [METHOD] is
one of "multicwd", "nocwd" or "singlecwd".)
What feedback I'm interested in:
1 - Do they work at all? Do you find servers where one of these don't work?
2 - What would proper names for the option and its arguments be, if we
consider this feature good enough to get included and documented in
upcoming releases?
3 - Should we make libcurl able to "walk through" these options in case of
(path related) failures, or should it fail and let the user redo any
possible retries?
(This option is not documented in any man page just yet since I'm not sure
these names will be used or if the functionality will end up exactly like
this. And for the same reasons we have no test cases for these yet.)
Daniel (10 January 2006)
- When using a bad path over FTP, as in when libcurl couldn't CWD into all
given subdirs, libcurl would still "remember" the full path as if it is the
current directory libcurl is in so that the next curl_easy_perform() would
get really confused if it tried the same path again - as it would not issue
any CWD commands at all, assuming it is already in the "proper" dir.
Starting now, a failed CWD command sets a flag that prevents the path to be
"remembered" after returning.
Daniel (7 January 2006)
- Michael Jahn fixed so that the second CONNECT when doing FTP over a HTTP
proxy actually used a new connection and not sent the second request on the
first socket!
Daniel (6 January 2006)
- Alexander Lazic made the buildconf run the buildconf in the ares dir if that
is present instead of trying to mimic that script in curl's buildconf
script.
Daniel (3 January 2006)
- Andres Garcia made the TFTP test server build with mingw.
Daniel (16 December 2005)
- Jean Jacques Drouin pointed out that you could only have a user name or
password of 127 bytes or less embedded in a URL, where actually the code
uses a 255 byte buffer for it! Modified now to use the full buffer size.
Daniel (12 December 2005)
- Dov Murik corrected the HTTP_ONLY define to disable the TFTP support properly
Version 7.15.1 (7 December 2005)
Daniel (6 December 2005)
- Full text here: http://curl.haxx.se/docs/adv_20051207.html Pointed out by
Stefan Esser.
VULNERABILITY
libcurl's URL parser function can overflow a malloced buffer in two ways, if
given a too long URL.
These overflows happen if you
1 - pass in a URL with no protocol (like "http://") prefix, using no slash
and the string is 256 bytes or longer. This leads to a single zero byte
overflow of the malloced buffer.
2 - pass in a URL with only a question mark as separator (no slash) between
the host and the query part of the URL. This leads to a single zero byte
overflow of the malloced buffer.
Both overflows can be made with the same input string, leading to two single
zero byte overwrites.
The affected flaw cannot be triggered by a redirect, but the long URL must
be passed in "directly" to libcurl. It makes this a "local" problem. Of
course, lots of programs may still pass in user-provided URLs to libcurl
without doing much syntax checking of their own, allowing a user to exploit
this vulnerability.
There is no known exploit at the time of this writing.
Daniel (2 December 2005)
- Jamie Newton pointed out that libcurl's file:// code would close() a zero
file descriptor if given a non-existing file.
Daniel (24 November 2005)
- Doug Kaufman provided a set of patches to make curl build fine on DJGPP
again using configure.
- Yang Tse provided a whole series of patches to clear up compiler warnings on
MSVC 6.
Daniel (17 November 2005)
- I extended a patch from David Shaw to make libcurl _always_ provide an error
string in the given error buffer to address the flaw mention on 21 sep 2005.
Daniel (16 November 2005)
- Applied Albert Chin's patch that makes the libcurl.pc pkgconfig file get
installed on 'make install' time.
Daniel (14 November 2005)
- Quagmire reported that he needed to raise a NTLM buffer for SSPI to work
properly for a case, and so we did. We raised it even for non-SSPI builds
but it should not do any harm. http://curl.haxx.se/bug/view.cgi?id=1356715
- Jan Kunder's debian bug report
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=338680 identified a weird
error message for when you try to upload a file and the requested directory
doesn't exist on the target server.
- Yang Tse fixed compiler warnings in lib/ssluse.c with OpenSSL 0.9.8 and in
lib/memdebug.h that showed up in his msvc builds.
Daniel (13 November 2005)
- Debian bug report 338681 by Jan Kunder: make curl better detect and report
bad limit-rate units:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=338681 Now curl will return
error if a bad unit is used.
- Thanks to this nice summary of poll() implementations:
http://www.greenend.org.uk/rjk/2001/06/poll.html and further tests by Eugene
Kotlyarov, we now know that cygwin's poll returns only POLLHUP on remote
connectin closure so we check for that case (too) and re-enable poll for
cygwin builds.
Daniel (12 November 2005)
- Eugene Kotlyarov found out that cygwin's poll() function isn't doing things
right: http://curl.haxx.se/mail/archive-2005-11/0045.html so we now disable
poll() and use select() on cygwin too (we already do the same choice on Mac
OS X)
- Dima Barsky patched problem #1348930: the GnuTLS code completely ignored
client certificates! (http://curl.haxx.se/bug/view.cgi?id=1348930).
Daniel (10 November 2005)
- David Lang fixed IPv6 support for TFTP!
- Introducing range stepping to the curl globbing support. Now you can specify
step counter by adding :[num] within the brackets when specifying a range:
[1-100:10]
[a-z:2]
If no step counter is set, it defaults to 1 as before:
[1-100]
[d-h]
Daniel (8 November 2005)
- Removed the use of AI_CANONNAME in the IPv6-enabled resolver functions since
we really have no use for reverse lookups of the address.
I truly hope these are the last reverse lookups we had lingering in the
code!
- Dmitry Bartsevich discovered some issues in compatibilty of SSPI-enabled
version of libcurl with different Windows versions. Current version of
libcurl imports SSPI functions from secur32.dll. However, under Windows NT
4.0 these functions are located in security.dll, under Windows 9x - in
secur32.dll and Windows 2000 and XP contains both these DLLs (security.dll
just forwards calls to secur32.dll).
Dmitry's patch loads proper library dynamically depending on Windows
version. Function InitSecurityInterface() is used to obtain pointers to all
of SSPI function in one structure.
Daniel (31 October 2005)
- Vilmos Nebehaj improved libcurl's LDAP abilities:
The LDAP code in libcurl can't handle LDAP servers of LDAPv3 nor binary
attributes in LDAP objects. So, I made a quick patch to address these
problems.
The solution is simple: if we connect to an LDAP server, first try LDAPv3
(which is the preferred protocol as of now) and then fall back to LDAPv2.
In case of binary attributes, we first convert them to base64, just like the
openldap client does. It uses ldap_get_values_len() instead of
ldap_get_values() to be able to retrieve binary attributes correctly. I
defined the necessary LDAP macros in lib/ldap.c to be able to compile
libcurl without the presence of libldap
Daniel (27 October 2005)
- Nis Jorgensen filed bug report #1338648
(http://curl.haxx.se/bug/view.cgi?id=1338648) which really is more of a
feature request, but anyway. It pointed out that --max-redirs did not allow
it to be set to 0, which then would return an error code on the first
Location: found. Based on Nis' patch, now libcurl supports CURLOPT_MAXREDIRS
set to 0, or -1 for infinity. Added test case 274 to verify.
- tommink[at]post.pl reported in bug report #1337723
(http://curl.haxx.se/bug/view.cgi?id=1337723) that curl could not upload
binary data from stdin on Windows if the data contained control-Z (hex 1a)
since that is treated as end-of-file when read in text mode. Gisle Vanem
pointed out the fix, and I made both -T and --data-binary take advantage of
it.
- Jaz Fresh pointed out that if you used "-r [number]" as was wrongly described
in the man page, curl would send an invalid HTTP Range: header. The correct
way would be to use "-r [number]-" or even "-r -[number]". Starting now,
curl will warn if this is discovered, and automatically append a dash to the
range before passing it to libcurl.
Daniel (25 October 2005)
- Amol Pattekar reported a bug with great detail and a fine example in bug
#1326306 (http://curl.haxx.se/bug/view.cgi?id=1326306). When using the multi
interface and connecting to a host with multiple IP addresses, and one of
the addresses fails to connect (the server must exist and respond, just not
accept connections) libcurl leaks a socket descriptor. Thanks to the fine
report, I could find and fix this.
Daniel (22 October 2005)
- Dima Barsky reported a problem with GnuTLS-enabled libcurl in bug report
#1334338 (http://curl.haxx.se/bug/view.cgi?id=1334338). When reading an SSL
stream from a server and the server requests a "rehandshake", the current
code simply returns this as an error. I have no good way to test this, but
I've added a crude attempt of dealing with this situation slightly better -
it makes a blocking handshake if this happens. Done like this because fixing
this the "proper" way (that would handshake asynchronously) will require
quite some work and I really need a good way to test this to do such a
change.
Daniel (21 October 2005)
- "Ofer" reported a problem when libcurl re-used a connection and failed to do
it, it could then accidentally actually crash. Presumably, this concerns FTP
connections. http://curl.haxx.se/bug/view.cgi?id=1330310
- Temprimus improved the MSVC makefile so that the static debug SSL libs are
linked to the executable and not to the libcurld.lib
http://curl.haxx.se/bug/view.cgi?id=1326676
- Bradford Bruce made the windows resolver code properly return
CURLE_COULDNT_RESOLVE_PROXY and CURLE_COULDNT_RESOLVE_HOST on resolving
errors (as documented).
Daniel (20 October 2005)
- Dave Dribin made libcurl understand and handle cases when the server
(wrongly) sends *two* WWW-Authenticate headers for Digest. While this should
never happen in a sane world, libcurl previously got into an infinite loop
when this occurred. Dave added test 273 to verify this.
- Temprimus improved the MSVC makefile: "makes a build option available so if
you set rtlibcfg=static for the make, then it would build with /MT. The
default behaviour is /MD (the original)."
http://curl.haxx.se/bug/view.cgi?id=1326665
Daniel (14 October 2005)
- Reverted the LIBCURL_VERSION_NUM change from October 6. As Dave Dribin
reported, the define is used by the configure script and is assumed to use
the 0xYYXXZZ format. This made "curl-config --vernum" fail in the 7.15.0
release version.
Version 7.15.0 (13 October 2005)
Daniel (12 October 2005)
- Michael Sutton of iDEFENSE reported and I fixed a securitfy flaw in the NTLM
code that would overflow a buffer if given a too long user name or domain
name. This would happen if you enable NTLM authentication and either
A - pass in a user name and domain name to libcurl that together are longer
than 192 bytes
B - allow (lib)curl to follow HTTP "redirects" (Location: and the
appropriate HTTP 30x response code) and the new URL contains a URL with
a user name and domain name that together are longer than 192 bytes
See http://curl.haxx.se/docs/security.html for further details and updates
Daniel (5 October 2005)
- Darryl House reported a problem with using -z to download files from FTP.
It turned out that if the given time stamp was exact the same as the remote
time stamp, the file would still wrongly be downloaded. Added test case 272
to verify.
Daniel (4 October 2005)
- Domenico Andreoli fixed a man page malformat and removed odd (0xa0) bytes
from the configure script.
- Michael Wallner reported that the date parser had wrong offset stored for
the MEST and CEST time zones.
Daniel (27 September 2005)
- David Yan filed bug #1299181 (http://curl.haxx.se/bug/view.cgi?id=1299181)
that identified a silly problem with Content-Range: headers with the 'bytes'
keyword written in a different case than all lowercase! It would cause a
segfault!
- TJ Saunders of the proftpd project identified and pointed out problems with
the modified FTPS negotiation change of August 19 2005. Thus, we revert the
change back to pre-7.14.1 status.
Daniel (21 September 2005)
- Fixed "cut off" sentence in the libcurl-tutorial man page:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329305
- Clarified in the curl_easy_setopt man page what the default
CURLOPT_WRITEFUNCTION and CURLOPT_WRITEDATA mean:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329311
- Clarified in the curl_easy_setopt man page that CURLOPT_ERRORBUFFER
sometimes doesn't fill in the buffer even though it is supposed to:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329313
- When CURLE_URL_MALFORMAT is returned due to a missing URL, it now has an
error string set.
Daniel (19 September 2005)
- Dmitry Bartsevich made the SSPI support work on Windows 9x as well.
Daniel (15 September 2005)
- Added a TFTP server to the test suite and made the test suite capable of
using it.
Daniel (7 September 2005)
- Ben Madsen's detailed reports that funnily enough only occurred with certain
glibc versions turned out to be curl using an already closed file handle
during certain conditions (like when saving FTP server "headers").
- Scott Davis helped me track down a problem in the test HTTP server that made
test case 56 wrongly fail at times. It turned out it was due to the server
finding the end of a chunked-encoded POST too early.
Daniel (6 September 2005)
- Now curl warns if an unknown variable is used in the -w/--writeout argument.
Daniel (4 September 2005)
- I applied Nicolas Fran<61>ois' man page patch he posted to the Debian bug
tracker. It corrected two lines that started with apostrophes, which isn't
legal nroff format. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=326511
- Added --ftp-skip-pasv-ip to the command line tool, that sets the new
CURLOPT_FTP_SKIP_PASV_IP option. It makes libcurl re-use the control
connection's IP address when setting up the data connection instead of
extractting the IP address from the PASV response. It has turned out this
feature is frequently needed by people to circumvent silly servers and silly
firewalls, especially when FTPS is used and the PASV command-response is
sent encrtyped.
Sponsored by CU*Answers
Daniel (1 September 2005)
- John Kelly added TFTP support to libcurl. A bunch of new error codes was
added. TODO: add them to docs. add TFTP server to test suite. add TFTP to
list of protocols whereever those are mentioned.
Version 7.14.1 (1 September 2005)
Daniel (29 August 2005)
- Kevin Lussier pointed out a problem with curllib.dsp and how to fix it.
- Igor Polyakov fixed a rather nasty problem with the threaded name resolver
for Windows, that could lead to an Access Violation when the multi interface
was used due to an issue with how the resolver thread was and was not
terminated.
- Simon Josefsson brought a patch that allows curl to get built to use GNU GSS
instead of MIT/Heimdal for GSS capabilities.
Daniel (24 August 2005)
- Toby Peterson added CURLOPT_IGNORE_CONTENT_LENGTH to the library, accessible
from the command line tool with --ignore-content-length. This will make it
easier to download files from Apache 1.x (and similar) servers that are
still having problems serving files larger than 2 or 4 GB. When this option
is enabled, curl will simply have to wait for the server to close the
connection to signal end of transfer. I wrote test case 269 that runs a
simple test to verify that this works.
- (Trying hard to exclude emotions now.) valgrind version 3 suddenly renamed
the --logfile command line option to --log-file, and thus the test script
valgrind autodetection now has yet another version check to do and then it
alters the valgrind command line accordingly.
- Fixed CA cert verification using GnuTLS with the default bundle, which
previously failed due to GnuTLS not allowing x509 v1 CA certs by default.
Ralph Mitchell reported.
Daniel (19 August 2005)
- Norbert Novotny had problems with FTPS and he helped me work out a patch
that made curl run fine in his end. The key was to make sure we do the
SSL/TLS negotiation immediately after the TCP connect is done and not after
a few other commands have been sent like we did previously. I don't consider
this change necessary to obey the standards, I think this server is pickier
than what the specs allow it to be, but I can't see how this modified
libcurl code can add any problems to those who are interpreting the
standards more liberally.
Daniel (17 August 2005)
- Jeff Pohlmeyer found out that if you ask libcurl to load a cookiefile (with
CURLOPT_COOKIEFILE), add a cookie (with CURLOPT_COOKIELIST), tell it to
write the result to a given cookie jar and then never actually call
curl_easy_perform() - the given file(s) to read was never read but the
output file was written and thus it caused a "funny" result.
- While doing some tests for the bug above, I noticed that Firefox generates
large numbers (for the expire time) in the cookies.txt file and libcurl
didn't treat them properly. Now it does.
Daniel (15 August 2005)
- Added more verbose "warning" messages to the curl client for cases where it
fails to open/read files etc to help users diagnose why it doesn't do what
you'd expect it to. Converted lots of old messages to use the new generic
function I wrote for this purpose.
Daniel (13 August 2005)
- James Bursa identified a libcurl HTTP bug and a good way to repeat it. If a
site responds with bad HTTP response that doesn't contain any header at all,
only a response body, and the write callback returns 0 to abort the
transfer, it didn't have any real effect but the write callback would be
called once more anyway.
Daniel (12 August 2005)
- Based on Richard Clayton's reports, I found out that using curl -d @filename
when 'filename' was not possible to access made curl use a GET request
instead.
- The time condition illegal syntax warning is now inhibited if -s is used.
Daniel (10 August 2005)
- Mario Schroeder found out that one of the debug callbacks calls that regards
SSL data with the CURLINFO_TEXT type claimed that the data was one byte
larger than it actually is, thus falsely telling the application that the
terminating zero was part of the data.
Daniel (9 August 2005)
- Christopher R. Palmer fixed the offsets used for date parsings when the time
zone name of a daylight savings time was used. For example, PDT vs PDS. This
flaw was introduced with the new date parser (11 sep 2004 - 7.12.2).
Fortunately, no web server or cookie string etc should be using such time
zone names thus limiting the effect of this bug.
Daniel (8 August 2005)
- Jon Grubbs filed bug report #1249962
(http://curl.haxx.se/bug/view.cgi?id=1249962) which identified a problem
with NTLM on a HTTP proxy if an FTP URL was given. libcurl now properly
switches to pure HTTP internally when an HTTP proxy is used, even for FTP
URLs. The problem would also occur with other multi-pass auth methods.
Daniel (7 August 2005)
- When curl is built with GnuTLS, curl-config didn't include "SSL" when
--features was used.
Daniel (28 July 2005)
- If any of the options CURLOPT_HTTPGET, CURLOPT_POST and CURLOPT_HTTPPOST is
set to 1, CURLOPT_NOBODY will now automatically be set to 0.
Daniel (27 July 2005)
- Dan Fandrich changes over the last week: fixed numerous minor configure
option parsing flaws: --without-gnutls, --without-spnego --without-gssapi
and --without-krb4. Spellfixed several error messages.
- Peteris Krumins added CURLOPT_COOKIELIST and CURLINFO_COOKIELIST, which is a
simple interface to extracting and setting cookies in libcurl's internal
"cookie jar". See the new cookie_interface.c example code.
Daniel (13 July 2005)
- Diego Casorran provided patches to make curl build fine on Amiga again.
Daniel (12 July 2005)
- Adrian Schuur added trailer support in the chunked encoding stream. The
trailer is then sent to the normal header callback/stream. I wrote up test
case 266 to verify the basic functionality. Do note that test case 34
contains a flawed chunked encoding stream that still works the same.
Daniel (5 July 2005)
- Gisle Vanem came up with a nice little work-around for bug #1230118
(http://curl.haxx.se/bug/view.cgi?id=1230118). It seems the Windows (MSVC)
libc time functions may return data one hour off if TZ is not set and
automatic DST adjustment is enabled. This made curl_getdate() return wrong
value, and it also concerned internal cookie expirations etc.
Daniel (4 July 2005)
- Andrew Bushnell provided enough info for me to tell that we badly needed to
fix the CONNECT authentication code with multi-pass auth methods (such as
NTLM) as it didn't previously properly ignore response-bodies - in fact it
stopped reading after all response headers had been received. This could
lead to libcurl sending the next request and reading the body from the first
request as response to the second request. (I also renamed the function,
which wasn't strictly necessary but...)
The best fix would to once and for all make the CONNECT code use the
ordinary request sending/receiving code, treating it as any ordinary request
instead of the special-purpose function we have now. It should make it
better for multi-interface too. And possibly lead to less code...
Added test case 265 for this. It doesn't work as a _really_ good test case
since the test proxy is too stupid, but the test case helps when running the
debugger to verify.
Daniel (30 June 2005)
- Dan Fandrich improved the configure script's ability to figure out what kind
of strerror_r() API that is used when cross-compiling. If __GLIB__ is
defined, it assumes the glibc API. If not, it issues a notice as before that
the user needs to manually edit lib/config.h for this.
Daniel (23 June 2005)
- David Shaw's fix that unifies proxy string treatment so that a proxy given
with CURLOPT_PROXY can use a http:// prefix and user + password. The user
and password fields are now also URL decoded properly. Test case 264 added
to verify.
Daniel (22 June 2005)
- David Shaw updated libcurl.m4
Daniel (14 June 2005)
- Gisle Vanem fixed a potential thread handle leak. Bug report #1216500
(http://curl.haxx.se/bug/view.cgi?id=1216500). Comment in
http://curl.haxx.se/mail/lib-2005-06/0059.html
Daniel (13 June 2005)
- Made buildconf run libtoolize in the ares dir too (inspired by Tupone's
reverted patch).
Daniel (9 June 2005)
- Incorporated Tupone's findtool fix in buildconf (slightly edited)
- Incorporated Tupone's head -n fix in buildconf.
Daniel (8 June 2005)
- Reverted Tupone's patch again, it broke numerous autobuilds. Let's apply it
in pieces, one by one and see what we need to adjust to work all over.
Daniel (6 June 2005)
- Tupone Alfredo fixed three problems in buildconf:
1) findtool does look per tool in PATH and think ./perl is the perl
executable, while is just a local directory (I have . in the PATH)
2) I got several warning for head -1 deprecated in favour of head -n 1
3) ares directory is missing some file (missing is missing :-) ) because
automake and friends is not run.
Daniel (3 June 2005)
- Added docs/libcurl/getinfo-times, based on feedback from 'Edi':
http://curl.haxx.se/feedback/display.cgi?id=11178325798299&support=yes
- Andres Garcia provided yet another text mode patch for several test cases so
that they do text comparisions better on Windows (newline-wise).
Daniel (1 June 2005)
- The configure check for c-ares now adds the cares lib before the other libs,
to make it build fine with mingw. Inspired by Tupone Alfredo's bug report
and patch: http://curl.haxx.se/bug/view.cgi?id=1212940
Daniel (31 May 2005)
- Todd Kulesza reported a flaw in the proxy option, since a numerical IPv6
address was not possible to use. It is now, but requires it written
RFC2732-style, within brackets - which incidently is how you enter numerical
IPv6 addresses in URLs. Test case 263 added to verify.
Daniel (30 May 2005)
- Eric Cooper reported about a problem with HTTP servers that responds with
binary zeroes within the headers. They confused libcurl to do wrong so the
downloaded headers become incomplete. The fix is now verified with test case
262. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=310948
Daniel (25 May 2005)
- Fixed problems with the test suite, and in particular the FTP test cases
since it previously was failing every now and then in a nonsense manner.
- --trace-time now outputs the full microsecond, all 6 digits.
Daniel (24 May 2005)
- Andres Garcia provided a text mode patch for several test cases so that they
do text comparisions better on Windows (newline-wise).
- Any 2xx response (and not just 200) is now considered a fine response to
TYPE, as some servers obviously sends a 226 there. Added test case 261 to
verify. Based on a question/report by Georg Wicherski.
Daniel (20 May 2005)
- Improved runtests.pl to allow stdout tests to be mode=text as well, just
as file comparisons already supports. Added this info to the FILEFORMAT
docs.
Daniel (18 May 2005)
- John McGowan identified a problem in bug report #1204435
(http://curl.haxx.se/bug/view.cgi?id=1204435) with malformed URLs like
"http://somehost?data" as it added a slash too much in the request ("GET
/?data/"...). Added test case 260 to verify.
- The configure check for strerror_r() failed to detect the proper API at
times, like on HP-UX 10.20. Then lib/strerror.c badly assumed the glibc
version if the posix define wasn't set (since it _had_ found a strerror_r).
Daniel (16 May 2005)
- The gmtime_r() function in HP-UX 10.20 is broken. About 13 test cases fail
due to this. There's now a configure check that attempts to detect the bad
function and not use it on such systems.
Version 7.14.0 (16 May 2005) Version 7.14.0 (16 May 2005)
@@ -19,8 +821,9 @@ Daniel (12 May 2005)
- When doing a second request (after a disconnect) using the same easy handle, - When doing a second request (after a disconnect) using the same easy handle,
over a proxy that uses NTLM authentication, libcurl failed to use NTLM again over a proxy that uses NTLM authentication, libcurl failed to use NTLM again
properly (the auth method was accidentally reset to the same as had been set properly (the auth method was accidentally reset to the same as had been set
for host auth, which defaults to Basic). Bug report #1200661 identified the for host auth, which defaults to Basic). Bug report #1200661
the problem and the fix. (http://curl.haxx.se/bug/view.cgi?id=1200661) identified the the problem and
the fix.
- If -z/--time-cond is used with an invalid date syntax, this is no longer - If -z/--time-cond is used with an invalid date syntax, this is no longer
silently discarded. Instead a proper warning message is diplayed that silently discarded. Instead a proper warning message is diplayed that

View File

@@ -1,6 +1,6 @@
COPYRIGHT AND PERMISSION NOTICE COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1996 - 2005, Daniel Stenberg, <daniel@haxx.se>. Copyright (c) 1996 - 2006, Daniel Stenberg, <daniel@haxx.se>.
All rights reserved. All rights reserved.

View File

@@ -31,6 +31,9 @@ bin_SCRIPTS = curl-config
SUBDIRS = lib src SUBDIRS = lib src
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libcurl.pc
dist-hook: dist-hook:
rm -rf $(top_builddir)/tests/log rm -rf $(top_builddir)/tests/log
find $(distdir) -name "*.dist" -exec rm {} \; find $(distdir) -name "*.dist" -exec rm {} \;

View File

@@ -200,9 +200,21 @@ netware:
$(MAKE) -C lib -f Makefile.netware $(MAKE) -C lib -f Makefile.netware
$(MAKE) -C src -f Makefile.netware $(MAKE) -C src -f Makefile.netware
netware-ares:
$(MAKE) -C lib -f Makefile.netware WITH_ARES=1
$(MAKE) -C src -f Makefile.netware WITH_ARES=1
netware-ssl: netware-ssl:
$(MAKE) -C lib -f Makefile.netware SSL=1 $(MAKE) -C lib -f Makefile.netware WITH_SSL=1
$(MAKE) -C src -f Makefile.netware SSL=1 $(MAKE) -C src -f Makefile.netware WITH_SSL=1
netware-ssl-zlib:
$(MAKE) -C lib -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
$(MAKE) -C src -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
netware-zlib:
$(MAKE) -C lib -f Makefile.netware WITH_ZLIB=1
$(MAKE) -C src -f Makefile.netware WITH_ZLIB=1
netware-clean: netware-clean:
$(MAKE) -C lib -f Makefile.netware clean $(MAKE) -C lib -f Makefile.netware clean

71
README
View File

@@ -26,50 +26,41 @@ CONTACT
If you have problems, questions, ideas or suggestions, please contact us If you have problems, questions, ideas or suggestions, please contact us
by posting to a suitable mailing list. See http://curl.haxx.se/mail/ by posting to a suitable mailing list. See http://curl.haxx.se/mail/
Many major contributors to the project are listed in the THANKS document. All contributors to the project are listed in the THANKS document.
WEB SITE WEB SITE
Visit the curl web site or mirrors for the latest news: Visit the curl web site or mirrors for the latest news and downloads:
Sweden -- http://curl.haxx.se/ Sweden http://curl.haxx.se/
Australia -- http://curl.planetmirror.com/ Australia http://curl.planetmirror.com/
Austria -- http://curl.gds.tuwien.ac.at/ Austria http://curl.gds.tuwien.ac.at/
Denmark -- http://curl.cofman.dk/ Denmark http://curl.cofman.dk/
Estonia -- http://curl.wildyou.net/ France http://curl.fastmirror.net/
France -- http://curl.mirror.internet.tp/ Germany http://curl.freemirror.de/
Germany -- http://curl.kgt.org/ Germany http://curl.mirror-server.net/
Germany -- http://curl.mirror.at.stealer.net/ Germany http://curl.mirror.at.stealer.net/
Germany -- http://curl.netmirror.org/ Germany http://curl.mirroring.de/
Russia -- http://curl.tsuren.net/ Germany http://curl.miscellaneousmirror.org/
Taiwan -- http://curl.cs.pu.edu.tw/ Germany http://curl.mons-new-media.de/
Thailand -- http://curl.siamu.ac.th/ Germany http://curl.storemypix.com/
US (CA) -- http://curl.mirror.redwire.net/ Germany http://curl.triplemind.com/
US (CA) -- http://curl.mirrormonster.com/ Hong Kong http://curl.hkmirror.org/
US (CA) -- http://curl.signal42.com/ Japan http://curl.s-lines.net/
US (TX) -- http://curl.109k.com/ Netherlands http://curl.nedmirror.nl/
Russia http://curl.tsuren.net/
DOWNLOAD Taiwan http://curl.cs.pu.edu.tw/
Thailand http://curl.siamu.ac.th/
The official download mirror sites are: US (AZ) http://curl.islandofpoker.com/
US (CA) http://curl.meulie.net/
Australia -- http://curl.planetmirror.com/download.html US (CA) http://curl.mirror.redwire.net/
Austria -- http://curl.gds.tuwien.ac.at/download.html US (CA) http://curl.mirrormonster.com/
Estonia -- http://curl.wildyou.net/download.html US (CA) http://curl.signal42.com/
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/ US (FL) http://curl.hoxt.com/
Germany -- http://curl.mirror.at.stealer.net/download.html US (TX) http://curl.109k.com/
Germany -- http://curl.netmirror.org/download.html US (TX) http://curl.hostingzero.com/
Germany -- http://www.mirrorspace.org/curl/ US (TX) http://curl.mirrors.cyberservers.net/
Hongkong -- http://www.execve.net/curl/ US (TX) http://curl.seekmeup.com/
Russia -- http://curl.tsuren.net/download.html
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
Sweden -- http://cool.haxx.se/curl/
Taiwan -- http://curl.cs.pu.edu.tw/download.html
Thailand -- http://curl.siamu.ac.th/download.html
US (CA) -- http://curl.mirror.redwire.net/download.html
US (CA) -- http://curl.mirrormonster.com/download.html
US (CA) -- http://curl.signal42.com/download.html
US (TX) -- http://curl.109k.com/download.html
CVS CVS

View File

@@ -1,58 +1,40 @@
Curl and libcurl 7.14.0 Curl and libcurl 7.15.3
Public curl release number: 88 Public curl release number: 93
Releases counted from the very beginning: 115 Releases counted from the very beginning: 120
Available command line options: 107 Available command line options: 112
Available curl_easy_setopt() options: 122 Available curl_easy_setopt() options: 129
Number of public functions in libcurl: 46 Number of public functions in libcurl: 46
Amount of public web site mirrors: 23 Amount of public web site mirrors: 31
Number of known libcurl bindings: 31 Number of known libcurl bindings: 32
Number of contributors: 437 Number of contributors: 487
This release includes the following changes: This release includes the following changes:
o modified default HTTP request headers o added docs for --ftp-method and CURLOPT_FTP_FILEMETHOD
o curl --trace-time added for time stamping trace logs
o curl now respects the SSL_CERT_DIR and SSL_CERT_PATH environment variables
o more search paths for curl's default .curlrc config file check
o GnuTLS support, use configure --with-gnutls. Work on this was sponsored
by The Written Word.
This release includes the following bugfixes: This release includes the following bugfixes:
o uses select() instead of poll() even on Mac OS X 10.4 o TFTP Packet Buffer Overflow Vulnerability:
o reconnected proxy use with NTLM auth on the same handle http://curl.haxx.se/docs/adv_20060320.html
o warns about bad -z date syntax o properly detecting problems with sending the FTP command USER
o docs/THANKS now contains all known contributors o wrong error message shown when certificate verification failed
o builds out-of-the-box on (presumably ipv6-enabled) AIX 4.3 hosts o multi-part formpost with multi interface crash
o curl --head could wrongly complain on bad chunked-encoding o the CURLFTPSSL_CONTROL setting for CURLOPT_FTP_SSL is acknowledged
o --interface SIGSEGVed on a bad address o "SSL: couldn't set callback" is now treated as a less serious problem
o kill the HTTPS server better when stopping the test suite o Interix build fix
o builds fine with VS2005 on x64 o fixed curl "hang" when out of file handles at start
o auth fix for HTTP redirects and .netrc usage o prevent FTP uploads to URLs with trailing slash
o FTP uploads show the progress meter easier
o MSVC makefile fixes for static libcurl builds
o configure fix for static libcurl build on Windows
o --retry-delay
o POST with read callback now uses Expect: 100-continue
o CURLOPT_PORT didn't actually use the set port number
o HTTP 304 response with Content-Length: header
o time-conditioned FTP uploads
Other curl-related news since the previous public release: Other curl-related news since the previous public release:
o http://curl.mirroring.de/ is a new german curl mirror o pycurl-7.15.2 has been released: http://pycurl.sf.net
o pycurl 7.13.2: http://pycurl.sf.net/ o http://curl.download.nextag.com/ is a new US curl web mirror!
o TclCurl 0.13.2: http://personal1.iddeo.es/andresgarci/tclcurl/english/
o http://curl.webhosting76.com/ is a new US curl mirror
o http://curl.meulie.net/ is a new Canadian curl mirror
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:
Christophe Legry, Cory Nelson, Gisle Vanem, Dan Fandrich, Toshiyuki Maezawa, Gisle Vanem, Dan Fandrich, Thomas Klausner, Todd Vierling, Peter Heuchert,
Olivier, Andres Garcia, Dave Dribin, Alex Suykov, Cory Nelson, Fred New, Markus Koetter, David McCreedy, Tor Arntsen
Paul Moore, Alexander Zhuravlev, Bryan Henderson, Jeremy Brown, Allan,
Grigory Entin
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@@ -1,40 +1,4 @@
Issues not sorted in any particular order. To get fixed in 7.15.2 (planned release: Febrary 2006)
To get fixed in 7.14.0 (planned release: May/June 2005)
====================== ======================
- Make the tests run better on more platforms. 65 -
To get fixed in 7.14.1 (planned release: June 2005)
======================
58 - Fix KNOWN_BUGS #19: "FTP 3rd party transfers with the multi interface
doesn't work"
47 - Peter Sylvester's patch for SRP on the TLS layer
Awaits OpenSSL support for this, no need to support this in libcurl before
there's an OpenSSL release that does it.
To get fixed in 7.15.0
======================
55 - Add a function to the multi interface that gets file descriptors, as an
alternative to the curl_multi_fdset(). This is necessary to allow apps to
properly avoid the FD_SETSIZE problem.
56 - Make curl_easy_perform() a wrapper-function that simply creates a multi
handle, adds the easy handle to it, runs curl_multi_perform() until the
transfer is done, then detach the easy handle, destroy the multi handle
and return the easy handle's return code. This will thus make everything
internally use and assume the multi interface. The select()-loop should
use the new function from (55).
To get fixed in 7.16.0
======================
57 - Add an interface to libcurl for getting and setting cookies from an easy
handle. One idea: http://curl.haxx.se/mail/lib-2004-12/0195.html the
older idea: http://curl.haxx.se/dev/COOKIES. We need to settle on some
middle ground I guess.
60 -

View File

@@ -1,3 +1,393 @@
#***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |
# / __| | | | |_) | |
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2005, 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$
###########################################################################
dnl CURL_CHECK_HEADER_WINDOWS
dnl -------------------------------------------------
dnl Check for compilable and valid windows.h header
AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
],[
int dummy=2*WINVER;
])
],[
ac_cv_header_windows_h="yes"
],[
ac_cv_header_windows_h="no"
])
])
if test "x$ac_cv_header_windows_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
[Define to 1 if you have the windows.h header file.])
AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
[Define to avoid automatic inclusion of winsock.h])
fi
])
dnl CURL_CHECK_HEADER_WINSOCK
dnl -------------------------------------------------
dnl Check for compilable and valid winsock.h header
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock.h>
],[
int dummy=WSACleanup();
])
],[
ac_cv_header_winsock_h="yes"
],[
ac_cv_header_winsock_h="no"
])
])
if test "x$ac_cv_header_winsock_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
[Define to 1 if you have the winsock.h header file.])
fi
])
dnl CURL_CHECK_HEADER_WINSOCK2
dnl -------------------------------------------------
dnl Check for compilable and valid winsock2.h header
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
],[
int dummy=2*IPPROTO_ESP;
])
],[
ac_cv_header_winsock2_h="yes"
],[
ac_cv_header_winsock2_h="no"
])
])
if test "x$ac_cv_header_winsock2_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
[Define to 1 if you have the winsock2.h header file.])
fi
])
dnl CURL_CHECK_HEADER_WS2TCPIP
dnl -------------------------------------------------
dnl Check for compilable and valid ws2tcpip.h header
AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
],[
int dummy=2*IP_PKTINFO;
])
],[
ac_cv_header_ws2tcpip_h="yes"
],[
ac_cv_header_ws2tcpip_h="no"
])
])
if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
[Define to 1 if you have the ws2tcpip.h header file.])
fi
])
dnl CURL_CHECK_TYPE_SOCKLEN_T
dnl -------------------------------------------------
dnl Check for existing socklen_t type, and provide
dnl an equivalent type if socklen_t not available
AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
AC_CHECK_TYPE([socklen_t], ,[
AC_CACHE_CHECK([for socklen_t equivalent],
[curl_cv_socklen_t_equiv], [
curl_cv_socklen_t_equiv="unknown"
for arg2 in "struct sockaddr" void; do
for t in int size_t unsigned long "unsigned long"; do
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#endif
int getpeername (int, $arg2 *, $t *);
],[
$t len=0;
getpeername(0,0,&len);
])
],[
curl_cv_socklen_t_equiv="$t"
break 2
])
done
done
])
if test "$curl_cv_socklen_t_equiv" = "unknown"; then
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
else
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
[type to use in place of socklen_t if not defined])
fi
],[
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#endif
])
])
dnl CURL_CHECK_FUNC_GETNAMEINFO
dnl -------------------------------------------------
dnl Test if the getnameinfo function is available,
dnl and check the types of five of its arguments.
dnl If the function succeeds HAVE_GETNAMEINFO will be
dnl defined, defining the types of the arguments in
dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7.
dnl This function is experimental and its results shall
dnl not be trusted while this notice is in place ------
AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
#
AC_MSG_CHECKING([for getnameinfo])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([getnameinfo])
],[
AC_MSG_RESULT([yes])
curl_cv_getnameinfo="yes"
],[
AC_MSG_RESULT([no])
curl_cv_getnameinfo="no"
])
#
if test "$curl_cv_getnameinfo" != "yes"; then
AC_MSG_CHECKING([deeper for getnameinfo])
AC_TRY_LINK([
],[
getnameinfo();
],[
AC_MSG_RESULT([yes])
curl_cv_getnameinfo="yes"
],[
AC_MSG_RESULT([but still no])
curl_cv_getnameinfo="no"
])
fi
#
if test "$curl_cv_getnameinfo" != "yes"; then
AC_MSG_CHECKING([deeper and deeper for getnameinfo])
AC_TRY_LINK([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#endif
],[
getnameinfo(0, 0, 0, 0, 0, 0, 0);
],[
AC_MSG_RESULT([yes])
curl_cv_getnameinfo="yes"
],[
AC_MSG_RESULT([but still no])
curl_cv_getnameinfo="no"
])
fi
#
if test "$curl_cv_getnameinfo" = "yes"; then
AC_CACHE_CHECK([types of arguments for getnameinfo],
[curl_cv_func_getnameinfo_args], [
curl_cv_func_getnameinfo_args="unknown"
for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
for gni_arg7 in 'int' 'unsigned int'; do
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#define GNICALLCONV WSAAPI
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#define GNICALLCONV
#endif
extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
char *, $gni_arg46,
char *, $gni_arg46,
$gni_arg7);
],[
$gni_arg2 salen=0;
$gni_arg46 hostlen=0;
$gni_arg46 servlen=0;
$gni_arg7 flags=0;
int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
])
],[
curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
break 4
])
done
done
done
done
]) # AC_CACHE_CHECK
if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
else
gni_prev_IFS=$IFS; IFS=','
set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
IFS=$gni_prev_IFS
shift
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1],
[Define to the type of arg 1 for getnameinfo.])
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
[Define to the type of arg 2 for getnameinfo.])
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
[Define to the type of args 4 and 6 for getnameinfo.])
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
[Define to the type of arg 7 for getnameinfo.])
AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
[Define to 1 if you have the getnameinfo function.])
ac_cv_func_getnameinfo="yes"
fi
fi
]) # AC_DEFUN
dnl CURL_CHECK_NONBLOCKING_SOCKET
dnl -------------------------------------------------
dnl Check for how to set a socket to non-blocking state. There seems to exist dnl Check for how to set a socket to non-blocking state. There seems to exist
dnl four known different ways, with the one used almost everywhere being POSIX dnl four known different ways, with the one used almost everywhere being POSIX
dnl and XPG3, while the other different ways for different systems (old BSD, dnl and XPG3, while the other different ways for different systems (old BSD,
@@ -59,12 +449,27 @@ dnl FIONBIO test was also bad
dnl the code was bad, try a different program now, test 3 dnl the code was bad, try a different program now, test 3
AC_TRY_COMPILE([ AC_TRY_COMPILE([
/* headers for ioctlsocket test (cygwin?) */ /* headers for ioctlsocket test (Windows) */
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h> #include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#endif
],[ ],[
/* ioctlsocket source code */ /* ioctlsocket source code */
int socket; SOCKET sd;
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags); unsigned long flags = 0;
sd = socket(0, 0, 0);
ioctlsocket(sd, FIONBIO, &flags);
],[ ],[
dnl ioctlsocket test was good dnl ioctlsocket test was good
nonblock="ioctlsocket" nonblock="ioctlsocket"
@@ -122,6 +527,9 @@ dnl end of non-blocking try-compile test
fi fi
]) ])
dnl TYPE_SOCKADDR_STORAGE
dnl -------------------------------------------------
dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
dnl AIX 4.3 is one known exception. dnl AIX 4.3 is one known exception.
AC_DEFUN([TYPE_SOCKADDR_STORAGE], AC_DEFUN([TYPE_SOCKADDR_STORAGE],
@@ -130,6 +538,16 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE],
AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
[if struct sockaddr_storage is defined]), , [if struct sockaddr_storage is defined]), ,
[ [
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#else
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
@@ -142,58 +560,15 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE],
#ifdef HAVE_ARPA_INET_H #ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h> #include <arpa/inet.h>
#endif #endif
])
])
dnl Check for socklen_t: historically on BSD it is an int, and in
dnl POSIX 1g it is a type of its own, but some platforms use different
dnl types for the argument to getsockopt, getpeername, etc. So we
dnl have to test to find something that will work.
AC_DEFUN([TYPE_SOCKLEN_T],
[
AC_CHECK_TYPE([socklen_t], ,[
AC_MSG_CHECKING([for socklen_t equivalent])
AC_CACHE_VAL([curl_cv_socklen_t_equiv],
[
# Systems have either "struct sockaddr *" or
# "void *" as the second argument to getpeername
curl_cv_socklen_t_equiv=
for arg2 in "struct sockaddr" void; do
for t in int size_t unsigned long "unsigned long"; do
AC_TRY_COMPILE([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
int getpeername (int, $arg2 *, $t *);
],[
$t len;
getpeername(0,0,&len);
],[
curl_cv_socklen_t_equiv="$t"
break
]) ])
done
done
if test "x$curl_cv_socklen_t_equiv" = x; then
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
fi
])
AC_MSG_RESULT($curl_cv_socklen_t_equiv)
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
[type to use in place of socklen_t if not defined])],
[#include <sys/types.h>
#include <sys/socket.h>])
]) ])
dnl TYPE_IN_ADDR_T
dnl -------------------------------------------------
dnl Check for in_addr_t: it is used to receive the return code of inet_addr() dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
dnl and a few other things. If not found, we set it to unsigned int, as even dnl and a few other things.
dnl 64-bit implementations use to set it to a 32-bit type.
AC_DEFUN([TYPE_IN_ADDR_T], AC_DEFUN([TYPE_IN_ADDR_T],
[ [
AC_CHECK_TYPE([in_addr_t], ,[ AC_CHECK_TYPE([in_addr_t], ,[
@@ -203,14 +578,32 @@ AC_DEFUN([TYPE_IN_ADDR_T],
curl_cv_in_addr_t_equiv= curl_cv_in_addr_t_equiv=
for t in "unsigned long" int size_t unsigned long; do for t in "unsigned long" int size_t unsigned long; do
AC_TRY_COMPILE([ AC_TRY_COMPILE([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H #ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h> #include <arpa/inet.h>
#endif
#endif #endif
],[ ],[
$t data = inet_addr ("1.2.3.4"); $t data = inet_addr ("1.2.3.4");
@@ -227,10 +620,36 @@ AC_DEFUN([TYPE_IN_ADDR_T],
AC_MSG_RESULT($curl_cv_in_addr_t_equiv) AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
[type to use in place of in_addr_t if not defined])], [type to use in place of in_addr_t if not defined])],
[#include <sys/types.h> [
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#include <arpa/inet.h>]) #endif
]) #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#endif
]) dnl AC_CHECK_TYPE
]) dnl AC_DEFUN
dnl ************************************************************ dnl ************************************************************
dnl check for "localhost", if it doesn't exist, we can't do the dnl check for "localhost", if it doesn't exist, we can't do the
@@ -417,34 +836,25 @@ dnl int strerror_r(int errnum, char *buf, size_t n);
dnl dnl
AC_DEFUN([CURL_CHECK_STRERROR_R], AC_DEFUN([CURL_CHECK_STRERROR_R],
[ [
dnl determine of strerror_r is present AC_CHECK_FUNCS(strerror_r)
AC_CHECK_FUNCS(strerror_r,[
if test "x$ac_cv_func_strerror_r" = "xyes"; then
AC_MSG_CHECKING(whether strerror_r is declared) AC_MSG_CHECKING(whether strerror_r is declared)
AC_EGREP_CPP(strerror_r,[ AC_EGREP_CPP(strerror_r,[
#include <string.h>],[ #include <string.h>],[
strerror_r="yes"
AC_MSG_RESULT(yes)],[ AC_MSG_RESULT(yes)],[
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
AC_MSG_CHECKING(whether strerror_r with -D_THREAD_SAFE is declared) AC_MSG_CHECKING(whether strerror_r with -D_REENTRANT is declared)
AC_EGREP_CPP(strerror_r,[ AC_EGREP_CPP(strerror_r,[
#define _THREAD_SAFE #define _REENTRANT
#include <string.h>],[ #include <string.h>],[
strerror_r="yes" CPPFLAGS="-D_REENTRANT $CPPFLAGS"
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
AC_MSG_RESULT(yes)], AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))])]) AC_MSG_RESULT(no)
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]) AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
, ) dnl with _THREAD_SAFE
[#include <stdlib.h> ]) dnl plain cpp for it
#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])
@@ -466,8 +876,20 @@ main () {
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!
dnl Use an inferior method of strerror_r detection while cross-compiling
AC_EGREP_CPP(yes, [
#include <features.h>
#ifdef __GLIBC__
yes
#endif
],
dnl looks like glibc, so assume a glibc-style strerror_r()
GLIBC_STRERROR_R="1"
AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
AC_MSG_RESULT([yes]),
AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!]) AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
) dnl while cross-compiling
) )
if test -z "$GLIBC_STRERROR_R"; then if test -z "$GLIBC_STRERROR_R"; then
@@ -682,6 +1104,7 @@ if test "$ac_cv_func_gethostbyname_r" = "yes"; then
fi fi
]) ])
dnl We create a function for detecting which compiler we use and then set as dnl We create a function for detecting which compiler we use and then set as
dnl pendantic compiler options as possible for that particular compiler. The dnl pendantic compiler options as possible for that particular compiler. The
dnl options are only used for debug-builds. dnl options are only used for debug-builds.
@@ -756,15 +1179,18 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
fi fi
dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
dnl on i686-Linux as it gives us heaps with false positives dnl on i686-Linux as it gives us heaps with false positives.
dnl Also, on gcc 4.0.X it is totally unbearable and complains all
dnl over making it unusable for generic purposes. Let's not use it.
if test "$gccnum" -ge "303"; then if test "$gccnum" -ge "303"; then
dnl gcc 3.3 and later dnl gcc 3.3 and later
WARN="$WARN -Wendif-labels -Wstrict-prototypes" WARN="$WARN -Wendif-labels -Wstrict-prototypes"
fi fi
if test "$gccnum" -ge "304"; then if test "$gccnum" -ge "304"; then
# try -Wunreachable-code on gcc 3.4 # try these on gcc 3.4
WARN="$WARN -Wunreachable-code" WARN="$WARN -Wdeclaration-after-statement"
fi fi
for flag in $CPPFLAGS; do for flag in $CPPFLAGS; do
@@ -876,3 +1302,19 @@ else
AC_MSG_RESULT($DLFOUNDFILE) AC_MSG_RESULT($DLFOUNDFILE)
fi fi
]) ])
# This is only a temporary fix. This macro is here to replace the broken one
# delivered by the automake project (including the 1.9.6 release). As soon as
# they ship a working version we SHOULD remove this work-around.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
AC_MSG_WARN([`missing' script is too old or missing])
fi
])

View File

@@ -11,3 +11,4 @@ Dan Fandrich
Gisle Vanem Gisle Vanem
Gunter Knauf Gunter Knauf
Henrik Stoerner Henrik Stoerner
Yang Tse

View File

@@ -1,5 +1,77 @@
Changelog for the c-ares project Changelog for the c-ares project
* January 9, 2006
- Alexander Lazic improved the getservbyport_r() configure check.
* January 6, 2006
- Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS
variable for easier controlling what it does and how it runs.
* January 5, 2006
- James Bursa fixed c-ares to find the hosts file on RISC OS, and made it
build with newer gcc versions that no longer defines "riscos".
* December 22
- Daniel Stenberg added ares_getsock() that extracts the set of sockets to
wait for action on. Similar to ares_fds() but not restricted to using
select() for the waiting.
* November 25
- Yang Tse fixed some send() / recv() compiler warnings
* September 18
- Added constants that will be used by ares_getaddrinfo
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it is
available to ensure it works properly in a threaded environment.
* September 10
- configure fix for detecting a member in the sockaddr_in6 struct which failed
on ipv6-enabled HP-UX 11.00
Version 1.3.0 (August 29, 2004)
* August 21
- Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info()
when getting the DNS server etc.
* June 19
- Added some checks for the addrinfo structure.
* June 2
- William Ahern:
Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a
read event can come back from poll() on a valid SOCK_DGRAM socket but
recv(2) will still block. This patch doesn't ignore EAGAIN in
read_udp_packets(), though maybe it should. (This patch was edited by Daniel
Stenberg and a new configure test was added (imported from curl's configure)
to properly detect what non-blocking socket approach to use.)
I'm not quite sure how this was happening, but I've been seeing PTR queries
which seem to return empty responses. At least, they were empty when calling
ares_expand_name() on the record. Here's a patch which guarantees to
NUL-terminate the expanded name. The old behavior failed to NUL-terminate if
len was 0, and this was causing strlen() to run past the end of the buffer
after calling ares_expand_name() and getting ARES_SUCCESS as the return
value. If q is not greater than *s then it's equal and *s is always
allocated with at least one byte.
* May 16
- Added ares_getnameinfo which mimics the getnameinfo API (another feature
that could use testing).
* May 14 * May 14
- Added an inet_ntop function from BIND for systems that do not have it. - Added an inet_ntop function from BIND for systems that do not have it.

View File

@@ -13,6 +13,7 @@ Makefile.in
Makefile.dj Makefile.dj
Makefile.m32 Makefile.m32
Makefile.netware Makefile.netware
Makefile.vc6
install-sh install-sh
mkinstalldirs mkinstalldirs
configure configure

View File

@@ -4,10 +4,9 @@ lib_LTLIBRARIES = libcares.la
man_MANS = $(MANPAGES) man_MANS = $(MANPAGES)
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/adig/adig.mak \ MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \
vc/adig/adig.plg vc/vc.dsw vc/ahost/ahost.dep vc/ahost/ahost.dsp \ vc/ahost/ahost.dsp vc/areslib/areslib.dep vc/areslib/areslib.dsp \
vc/ahost/ahost.mak vc/ahost/ahost.plg vc/areslib/areslib.dep \ vc/areslib/areslib.dsw
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 # adig and ahost are just sample programs and thus not mentioned with the
# regular sources and headers # regular sources and headers
@@ -15,7 +14,7 @@ EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
$(MSVCFILES) AUTHORS $(MSVCFILES) AUTHORS
VER=-version-info 0:0:0 VER=-version-info 1:0:0
# This flag accepts an argument of the form current[:revision[:age]]. So, # 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 # passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
# 1. # 1.

View File

@@ -9,7 +9,12 @@ include Makefile.inc
WATT32_ROOT = $(subst \,/,$(WATT_ROOT)) WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
CC = gcc CC = gcc
CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -I$(WATT32_ROOT)/inc CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -DHAVE_AF_INET6 \
-DHAVE_PF_INET6 -DHAVE_IOCTLSOCKET -DHAVE_STRUCT_IN6_ADDR \
-DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
-DHAVE_ARPA_NAMESER_H -DNS_INADDRSZ=4 \
-DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -I$(WATT32_ROOT)/inc
LDFLAGS = -s LDFLAGS = -s
EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a

View File

@@ -1,17 +1,18 @@
CSOURCES = ares_fds.c ares_process.c ares_free_hostent.c ares_query.c \ CSOURCES = ares_fds.c ares_getsock.c ares_process.c ares_free_hostent.c \
ares__close_sockets.c ares_free_string.c ares_search.c ares__get_hostent.c \ ares_query.c ares__close_sockets.c ares_free_string.c ares_search.c \
ares_gethostbyaddr.c ares_send.c ares__read_line.c ares_gethostbyname.c \ ares__get_hostent.c ares_gethostbyaddr.c ares_send.c ares__read_line.c \
ares_strerror.c ares_cancel.c ares_init.c ares_timeout.c ares_destroy.c \ ares_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.c \
ares_mkquery.c ares_version.c ares_expand_name.c ares_parse_a_reply.c \ ares_timeout.c ares_destroy.c ares_mkquery.c ares_version.c \
windows_port.c ares_expand_string.c ares_parse_ptr_reply.c \ ares_expand_name.c ares_parse_a_reply.c windows_port.c \
ares_parse_aaaa_reply.c inet_net_pton.c bitncmp.c inet_ntop.c ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c \
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h nameser.h \ HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h \
inet_net_pton.h ares_ipv6.h bitncmp.h nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \ 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_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.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_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_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3

View File

@@ -7,29 +7,21 @@
## Quick hack by Guenter; comments to: /dev/nul ## Quick hack by Guenter; comments to: /dev/nul
CC = gcc CC = gcc
AR = ar
RANLIB = ranlib RANLIB = ranlib
STRIP = strip -g
#RM = rm -f
######################################################## ########################################################
## Nothing more to do below this line! ## Nothing more to do below this line!
LIB=libcares.a LIB=libcares.a
CC=gcc CC=gcc
#CPPFLAGS=@CPPFLAGS@ CFLAGS=-O2 -Wall
WARN_FLAGS=-Wall
CFLAGS=-O2
CFLAGS+=${WARN_CFLAGS} ${ERROR_CFLAGS}
DEFS=-DMINGW32
LDFLAGS=-s LDFLAGS=-s
LIBS=-lwsock32 LIBS=-lwsock32
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3)) MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c)) OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
OBJS += windows_port.o OBJS += windows_port.o inet_ntop.o inet_net_pton.o bitncmp.o
$(LIB): ${OBJS} $(LIB): ${OBJS}
ar cru $@ ${OBJS} ar cru $@ ${OBJS}
@@ -51,7 +43,7 @@ ahost.exe: ahost.o $(LIB)
${OBJS}: ares.h ares_dns.h ares_private.h ${OBJS}: ares.h ares_dns.h ares_private.h
.c.o: .c.o:
${CC} -c ${ALL_CFLAGS} $< ${CC} -c ${CFLAGS} $<
check: check:
@@ -73,3 +65,4 @@ clean:
distclean: clean distclean: clean
rm -f config.cache config.log config.status Makefile rm -f config.cache config.log config.status Makefile

View File

@@ -89,7 +89,7 @@ LDFLAGS = -T
AR = ar AR = ar
ARFLAGS = -cq ARFLAGS = -cq
CFLAGS += -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing CFLAGS += -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing
CFLAGS += -Wall -Wno-format # -pedantic CFLAGS += -Wall -Wno-format -Wno-uninitialized # -pedantic
ifeq ($(LIBARCH),LIBC) ifeq ($(LIBARCH),LIBC)
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
else else
@@ -104,7 +104,7 @@ SDK_LIBC = $(NDK_ROOT)/libc
ifeq ($(LIBARCH),LIBC) ifeq ($(LIBARCH),LIBC)
INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks
INCLUDES += -I$(SDK_LIBC)/include/winsock # INCLUDES += -I$(SDK_LIBC)/include/winsock
CFLAGS += -D_POSIX_SOURCE CFLAGS += -D_POSIX_SOURCE
# CFLAGS += -D__ANSIC__ # CFLAGS += -D__ANSIC__
else else
@@ -304,6 +304,8 @@ config.h: Makefile.netware
@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@ @echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
@echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@ @echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
@echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@ @echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@
@echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@
@echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@
@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@ @echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@ @echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
ifdef NW_WINSOCK ifdef NW_WINSOCK

190
ares/Makefile.vc6 Normal file
View File

@@ -0,0 +1,190 @@
# $Id$
#
# C-ares makefile for MSVC6+
# G. Vanem <giva@bgnett.no>.
#
CFG_MODEL = MD
DEBUG_MODEL = d
USE_WATT32 = 0
#
# Configurations:
# -MD - msvcrt.dll, threads, release (normal)
# -MDd - msvcrtd.dll, threads, debug
# -ML - libc, no threads, release
# -MLd - libc, no threads, debug
# -MT - libc, threads, release
# -MTd - libc, threads, debug
CC = cl
CFLAGS = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W3 -Yd -Zi
LDFLAGS = -machine:i386 -map
OBJ_DIR = VC6_obj
DEF_FILE = cares.def
!if "$(USE_WATT32)" == "1"
CFLAGS = $(CFLAGS) -UWIN32 -DWATT32 -I$(WATT_ROOT)\inc
EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib
!else
CFLAGS = $(CFLAGS) -DWIN32 -DWIN32_LEAN_AND_MEAN
EX_LIBS = advapi32.lib ws2_32.lib
!endif
!if "$(DEBUG_MODEL)" == "d"
CFLAGS = $(CFLAGS) -D_DEBUG -GZ
LDFLAGS = $(LDFLAGS) -debug -fixed:no
!else
CFLAGS = $(CFLAGS) -O2 -Og
LDFLAGS = $(LDFLAGS) -release
!endif
OBJECTS = $(OBJ_DIR)\ares_fds.obj \
$(OBJ_DIR)\ares_process.obj \
$(OBJ_DIR)\ares_free_hostent.obj \
$(OBJ_DIR)\ares_query.obj \
$(OBJ_DIR)\ares__close_sockets.obj \
$(OBJ_DIR)\ares_free_string.obj \
$(OBJ_DIR)\ares_search.obj \
$(OBJ_DIR)\ares__get_hostent.obj \
$(OBJ_DIR)\ares_gethostbyaddr.obj \
$(OBJ_DIR)\ares_getsock.obj \
$(OBJ_DIR)\ares_send.obj \
$(OBJ_DIR)\ares__read_line.obj \
$(OBJ_DIR)\ares_gethostbyname.obj \
$(OBJ_DIR)\ares_getnameinfo.obj \
$(OBJ_DIR)\ares_strerror.obj \
$(OBJ_DIR)\ares_cancel.obj \
$(OBJ_DIR)\ares_init.obj \
$(OBJ_DIR)\ares_timeout.obj \
$(OBJ_DIR)\ares_destroy.obj \
$(OBJ_DIR)\ares_mkquery.obj \
$(OBJ_DIR)\ares_version.obj \
$(OBJ_DIR)\ares_expand_name.obj \
$(OBJ_DIR)\ares_parse_a_reply.obj \
$(OBJ_DIR)\ares_parse_aaaa_reply.obj \
$(OBJ_DIR)\windows_port.obj \
$(OBJ_DIR)\ares_expand_string.obj \
$(OBJ_DIR)\ares_parse_ptr_reply.obj \
$(OBJ_DIR)\bitncmp.obj \
$(OBJ_DIR)\inet_net_pton.obj \
$(OBJ_DIR)\inet_ntop.obj
all: $(OBJ_DIR) cares.lib cares.dll cares_imp.lib ahost.exe adig.exe
$(OBJ_DIR):
mkdir $(OBJ_DIR)
cares.lib: $(OBJ_DIR) $(OBJECTS)
lib -nologo -out:$@ $(OBJECTS)
cares_imp.lib cares.dll: $(OBJ_DIR) $(DEF_FILE) $(OBJECTS)
link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \
-def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS)
$(DEF_FILE): $(OBJECTS) Makefile.VC6
@echo ; Generated. DO NOT EDIT > $@
@echo LIBRARY cares.dll >> $@
@echo EXPORTS >> $@
@echo ares_cancel >> $@
@echo ares_destroy >> $@
@echo ares_expand_name >> $@
@echo ares_expand_string >> $@
@echo ares_fds >> $@
@echo ares_free_hostent >> $@
@echo ares_free_string >> $@
@echo ares_gethostbyaddr >> $@
@echo ares_gethostbyname >> $@
@echo ares_getsock >> $@
@echo ares_init >> $@
@echo ares_init_options >> $@
@echo ares_mkquery >> $@
@echo ares_parse_a_reply >> $@
@echo ares_parse_ptr_reply >> $@
@echo ares_process >> $@
@echo ares_query >> $@
@echo ares_search >> $@
@echo ares_strerror >> $@
@echo ares_strncasecmp >> $@
@echo ares_strcasecmp >> $@
@echo ares_timeout >> $@
@echo ares_version >> $@
@echo ares_inet_net_pton >> $@
@echo ares_inet_ntop >> $@
@echo ares_inet_pton >> $@
@echo ares_writev >> $@
@echo ares_getnameinfo >> $@
@echo ares_gettimeofday >> $@
@echo ares_parse_aaaa_reply >> $@
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj cares_imp.lib
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj cares_imp.lib $(EX_LIBS)
adig.exe: $(OBJ_DIR) $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib $(EX_LIBS)
clean:
- del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map
vclean realclean: clean
- del $(DEF_FILE) cares.lib cares_imp.* cares.dll ahost.exe adig.exe
- rd $(OBJ_DIR)
.c{$(OBJ_DIR)}.obj:
$(CC) $(CFLAGS) -Fo$*.obj -c $<
#
# Copyright "gcc -MM .."
#
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h ares.h ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h nameser.h ares.h ares_dns.h \
ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h ares.h ares_private.h \
ares_ipv6.h
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h nameser.h ares.h ares_dns.h \
ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h ares.h \
ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h ares.h
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h nameser.h ares.h ares_private.h \
ares_ipv6.h
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h ares.h ares_private.h \
ares_ipv6.h inet_net_pton.h
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h nameser.h ares.h \
ares_private.h ares_ipv6.h inet_net_pton.h
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.h nameser.h ares.h ares_dns.h \
ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h ares.h ares_private.h \
ares_ipv6.h
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h nameser.h ares.h \
ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h ares.h
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h ares.h ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h nameser.h ares.h ares_private.h \
ares_ipv6.h inet_net_pton.h
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h ares.h ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h ares.h ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h nameser.h ares.h ares_dns.h
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h ares_version.h
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h nameser.h ares.h \
ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h nameser.h ares.h \
ares_dns.h ares_private.h ares_ipv6.h
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h nameser.h ares.h ares_private.h \
ares_ipv6.h
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h nameser.h ares.h \
ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.h nameser.h ares.h \
ares_dns.h ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.h nameser.h ares.h \
ares_dns.h inet_net_pton.h ares_private.h ares_ipv6.h
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h nameser.h ares.h \
ares_private.h ares_ipv6.h inet_ntop.h
$(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h nameser.h ares_ipv6.h \
inet_net_pton.h
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h nameser.h ares_ipv6.h inet_ntop.h

View File

@@ -1,4 +1,637 @@
dnl CURL_CHECK_HEADER_WINDOWS
dnl -------------------------------------------------
dnl Check for compilable and valid windows.h header
AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
],[
int dummy=2*WINVER;
])
],[
ac_cv_header_windows_h="yes"
],[
ac_cv_header_windows_h="no"
])
])
if test "x$ac_cv_header_windows_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
[Define to 1 if you have the windows.h header file.])
AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
[Define to avoid automatic inclusion of winsock.h])
fi
])
dnl CURL_CHECK_HEADER_WINSOCK
dnl -------------------------------------------------
dnl Check for compilable and valid winsock.h header
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock.h>
],[
int dummy=WSACleanup();
])
],[
ac_cv_header_winsock_h="yes"
],[
ac_cv_header_winsock_h="no"
])
])
if test "x$ac_cv_header_winsock_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
[Define to 1 if you have the winsock.h header file.])
fi
])
dnl CURL_CHECK_HEADER_WINSOCK2
dnl -------------------------------------------------
dnl Check for compilable and valid winsock2.h header
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
],[
int dummy=2*IPPROTO_ESP;
])
],[
ac_cv_header_winsock2_h="yes"
],[
ac_cv_header_winsock2_h="no"
])
])
if test "x$ac_cv_header_winsock2_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
[Define to 1 if you have the winsock2.h header file.])
fi
])
dnl CURL_CHECK_HEADER_WS2TCPIP
dnl -------------------------------------------------
dnl Check for compilable and valid ws2tcpip.h header
AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
],[
int dummy=2*IP_PKTINFO;
])
],[
ac_cv_header_ws2tcpip_h="yes"
],[
ac_cv_header_ws2tcpip_h="no"
])
])
if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then
AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
[Define to 1 if you have the ws2tcpip.h header file.])
fi
])
dnl CURL_CHECK_TYPE_SOCKLEN_T
dnl -------------------------------------------------
dnl Check for existing socklen_t type, and provide
dnl an equivalent type if socklen_t not available
AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
AC_CHECK_TYPE([socklen_t], ,[
AC_CACHE_CHECK([for socklen_t equivalent],
[curl_cv_socklen_t_equiv], [
curl_cv_socklen_t_equiv="unknown"
for arg2 in "struct sockaddr" void; do
for t in int size_t unsigned long "unsigned long"; do
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#endif
int getpeername (int, $arg2 *, $t *);
],[
$t len=0;
getpeername(0,0,&len);
])
],[
curl_cv_socklen_t_equiv="$t"
break 2
])
done
done
])
if test "$curl_cv_socklen_t_equiv" = "unknown"; then
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
else
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
[type to use in place of socklen_t if not defined])
fi
],[
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#endif
])
])
dnl CURL_CHECK_FUNC_GETNAMEINFO
dnl -------------------------------------------------
dnl Test if the getnameinfo function is available,
dnl and check the types of five of its arguments.
dnl If the function succeeds HAVE_GETNAMEINFO will be
dnl defined, defining the types of the arguments in
dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7.
dnl This function is experimental and its results shall
dnl not be trusted while this notice is in place ------
AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
#
AC_MSG_CHECKING([for getnameinfo])
AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([getnameinfo])
],[
AC_MSG_RESULT([yes])
curl_cv_getnameinfo="yes"
],[
AC_MSG_RESULT([no])
curl_cv_getnameinfo="no"
])
#
if test "$curl_cv_getnameinfo" != "yes"; then
AC_MSG_CHECKING([deeper for getnameinfo])
AC_TRY_LINK([
],[
getnameinfo();
],[
AC_MSG_RESULT([yes])
curl_cv_getnameinfo="yes"
],[
AC_MSG_RESULT([but still no])
curl_cv_getnameinfo="no"
])
fi
#
if test "$curl_cv_getnameinfo" != "yes"; then
AC_MSG_CHECKING([deeper and deeper for getnameinfo])
AC_TRY_LINK([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#endif
],[
getnameinfo(0, 0, 0, 0, 0, 0, 0);
],[
AC_MSG_RESULT([yes])
curl_cv_getnameinfo="yes"
],[
AC_MSG_RESULT([but still no])
curl_cv_getnameinfo="no"
])
fi
#
if test "$curl_cv_getnameinfo" = "yes"; then
AC_CACHE_CHECK([types of arguments for getnameinfo],
[curl_cv_func_getnameinfo_args], [
curl_cv_func_getnameinfo_args="unknown"
for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
for gni_arg7 in 'int' 'unsigned int'; do
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#define GNICALLCONV WSAAPI
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#define GNICALLCONV
#endif
extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
char *, $gni_arg46,
char *, $gni_arg46,
$gni_arg7);
],[
$gni_arg2 salen=0;
$gni_arg46 hostlen=0;
$gni_arg46 servlen=0;
$gni_arg7 flags=0;
int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
])
],[
curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
break 4
])
done
done
done
done
]) # AC_CACHE_CHECK
if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
else
gni_prev_IFS=$IFS; IFS=','
set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
IFS=$gni_prev_IFS
shift
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1],
[Define to the type of arg 1 for getnameinfo.])
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
[Define to the type of arg 2 for getnameinfo.])
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
[Define to the type of args 4 and 6 for getnameinfo.])
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
[Define to the type of arg 7 for getnameinfo.])
AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
[Define to 1 if you have the getnameinfo function.])
ac_cv_func_getnameinfo="yes"
fi
fi
]) # AC_DEFUN
dnl CURL_CHECK_NONBLOCKING_SOCKET
dnl -------------------------------------------------
dnl Check for how to set a socket to non-blocking state. There seems to exist
dnl four known different ways, with the one used almost everywhere being POSIX
dnl and XPG3, while the other different ways for different systems (old BSD,
dnl Windows and Amiga).
dnl
dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
dnl O_NONBLOCK define is found but does not work. This condition is attempted
dnl to get caught in this script by using an excessive number of #ifdefs...
dnl
AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET],
[
AC_MSG_CHECKING([non-blocking sockets style])
AC_TRY_COMPILE([
/* headers for O_NONBLOCK test */
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
],[
/* try to compile O_NONBLOCK */
#if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
# if defined(__SVR4) || defined(__srv4__)
# define PLATFORM_SOLARIS
# else
# define PLATFORM_SUNOS4
# endif
#endif
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX4)
# define PLATFORM_AIX_V3
#endif
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
#error "O_NONBLOCK does not work on this platform"
#endif
int socket;
int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
],[
dnl the O_NONBLOCK test was fine
nonblock="O_NONBLOCK"
AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
],[
dnl the code was bad, try a different program now, test 2
AC_TRY_COMPILE([
/* headers for FIONBIO test */
#include <unistd.h>
#include <stropts.h>
],[
/* FIONBIO source test (old-style unix) */
int socket;
int flags = ioctl(socket, FIONBIO, &flags);
],[
dnl FIONBIO test was good
nonblock="FIONBIO"
AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
],[
dnl FIONBIO test was also bad
dnl the code was bad, try a different program now, test 3
AC_TRY_COMPILE([
/* headers for ioctlsocket test (Windows) */
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#endif
],[
/* ioctlsocket source code */
SOCKET sd;
unsigned long flags = 0;
sd = socket(0, 0, 0);
ioctlsocket(sd, FIONBIO, &flags);
],[
dnl ioctlsocket test was good
nonblock="ioctlsocket"
AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
],[
dnl ioctlsocket didnt compile!, go to test 4
AC_TRY_LINK([
/* headers for IoctlSocket test (Amiga?) */
#include <sys/ioctl.h>
],[
/* IoctlSocket source code */
int socket;
int flags = IoctlSocket(socket, FIONBIO, (long)1);
],[
dnl ioctlsocket test was good
nonblock="IoctlSocket"
AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
],[
dnl Ioctlsocket didnt compile, do test 5!
AC_TRY_COMPILE([
/* headers for SO_NONBLOCK test (BeOS) */
#include <socket.h>
],[
/* SO_NONBLOCK source code */
long b = 1;
int socket;
int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
],[
dnl the SO_NONBLOCK test was good
nonblock="SO_NONBLOCK"
AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets])
],[
dnl test 5 didnt compile!
nonblock="nada"
AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
])
dnl end of fifth test
])
dnl end of forth test
])
dnl end of third test
])
dnl end of second test
])
dnl end of non-blocking try-compile test
AC_MSG_RESULT($nonblock)
if test "$nonblock" = "nada"; then
AC_MSG_WARN([non-block sockets disabled])
fi
])
dnl TYPE_SOCKADDR_STORAGE
dnl -------------------------------------------------
dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
dnl AIX 4.3 is one known exception.
AC_DEFUN([TYPE_SOCKADDR_STORAGE],
[
AC_CHECK_TYPE([struct sockaddr_storage],
AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
[if struct sockaddr_storage is defined]), ,
[
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#endif
])
])
dnl TYPE_IN_ADDR_T
dnl -------------------------------------------------
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
dnl and a few other things.
AC_DEFUN([TYPE_IN_ADDR_T],
[
AC_CHECK_TYPE([in_addr_t], ,[
AC_MSG_CHECKING([for in_addr_t equivalent])
AC_CACHE_VAL([curl_cv_in_addr_t_equiv],
[
curl_cv_in_addr_t_equiv=
for t in "unsigned long" int size_t unsigned long; do
AC_TRY_COMPILE([
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#endif
],[
$t data = inet_addr ("1.2.3.4");
],[
curl_cv_in_addr_t_equiv="$t"
break
])
done
if test "x$curl_cv_in_addr_t_equiv" = x; then
AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
fi
])
AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
[type to use in place of in_addr_t if not defined])],
[
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#endif
]) dnl AC_CHECK_TYPE
]) dnl AC_DEFUN
dnl We create a function for detecting which compiler we use and then set as dnl We create a function for detecting which compiler we use and then set as
dnl pendantic compiler options as possible for that particular compiler. The dnl pendantic compiler options as possible for that particular compiler. The
dnl options are only used for debug-builds. dnl options are only used for debug-builds.
@@ -146,3 +779,50 @@ AC_DEFUN([CARES_CHECK_CONSTANT], [
]) ])
dnl This macro determines how many parameters getservbyport_r takes
AC_DEFUN([CARES_CHECK_GETSERVBYPORT_R], [
AC_MSG_CHECKING([how many arguments getservbyport_r takes])
AC_TRY_LINK(
[#include <netdb.h>],
[
int p1, p5;
char *p2, p4[4096];
struct servent *p3, *p6;
getservbyport_r(p1, p2, p3, p4, p5, &p6);
], ac_func_getservbyport_r=6,
[AC_TRY_LINK(
[#include <netdb.h>],
[
int p1, p5;
char *p2, p4[4096];
struct servent *p3;
getservbyport_r(p1, p2, p3, p4, p5);
], ac_func_getservbyport_r=5,
[AC_TRY_LINK(
[#include <netdb.h>],
[
int p1;
char *p2;
struct servent *p3;
struct servent_data p4;
getservbyport_r(p1, p2, p3, &p4);
], ac_func_getservbyport_r=4, ac_func_getservbyport_r=0
)]
)]
)
if test $ac_func_getservbyport_r != "0" ; then
AC_MSG_RESULT($ac_func_getservbyport_r)
AC_DEFINE(HAVE_GETSERVBYPORT_R, 1, [Specifies whether getservbyport_r is present])
AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $ac_func_getservbyport_r, [Specifies the number of arguments to
getservbyport_r])
if test $ac_func_getservbyport_r = "4" ; then
AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data), [Specifies the size of the buffer to pass to
getservbyport_r])
else
AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096, [Specifies the size of the buffer to pass to getservbyport_r])
fi
else
AC_MSG_RESULT([not found])
fi
])

View File

@@ -27,14 +27,23 @@
#include <unistd.h> #include <unistd.h>
#include <netdb.h> #include <netdb.h>
#endif #endif
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#endif
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include "ares.h" #include "ares.h"
#include "ares_dns.h" #include "ares_dns.h"
#include "inet_ntop.h"
#ifdef WATT32
#undef WIN32 /* Redefined in MingW headers */
#endif
#ifndef INADDR_NONE #ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff #define INADDR_NONE 0xffffffff
@@ -45,8 +54,10 @@
#define T_SRV 33 /* server selection */ #define T_SRV 33 /* server selection */
#endif #endif
#ifndef optind
extern int optind; extern int optind;
extern char *optarg; extern char *optarg;
#endif
struct nv { struct nv {
const char *name; const char *name;
@@ -216,7 +227,7 @@ int main(int argc, char **argv)
/* Set the TCP port number. */ /* Set the TCP port number. */
if (!isdigit((unsigned char)*optarg)) if (!isdigit((unsigned char)*optarg))
usage(); usage();
options.tcp_port = strtol(optarg, NULL, 0); options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
optmask |= ARES_OPT_TCP_PORT; optmask |= ARES_OPT_TCP_PORT;
break; break;
@@ -224,7 +235,7 @@ int main(int argc, char **argv)
/* Set the UDP port number. */ /* Set the UDP port number. */
if (!isdigit((unsigned char)*optarg)) if (!isdigit((unsigned char)*optarg))
usage(); usage();
options.udp_port = strtol(optarg, NULL, 0); options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
optmask |= ARES_OPT_UDP_PORT; optmask |= ARES_OPT_UDP_PORT;
break; break;
} }
@@ -412,7 +423,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
char *name; char *name;
int type, dnsclass, ttl, dlen, status; int type, dnsclass, ttl, dlen, status;
long len; long len;
struct in_addr addr; char addr[46];
/* Parse the RR name. */ /* Parse the RR name. */
status = ares_expand_name(aptr, abuf, alen, &name, &len); status = ares_expand_name(aptr, abuf, alen, &name, &len);
@@ -474,12 +485,12 @@ static const unsigned char *display_rr(const unsigned char *aptr,
len = *p; len = *p;
if (p + len + 1 > aptr + dlen) if (p + len + 1 > aptr + dlen)
return NULL; return NULL;
printf("\t%.*s", len, p + 1); printf("\t%.*s", (int)len, p + 1);
p += len + 1; p += len + 1;
len = *p; len = *p;
if (p + len + 1 > aptr + dlen) if (p + len + 1 > aptr + dlen)
return NULL; return NULL;
printf("\t%.*s", len, p + 1); printf("\t%.*s", (int)len, p + 1);
break; break;
case T_MINFO: case T_MINFO:
@@ -504,7 +515,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
*/ */
if (dlen < 2) if (dlen < 2)
return NULL; return NULL;
printf("\t%d", (aptr[0] << 8) | aptr[1]); printf("\t%d", DNS__16BIT(aptr));
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len); status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
if (status != ARES_SUCCESS) if (status != ARES_SUCCESS)
return NULL; return NULL;
@@ -531,12 +542,9 @@ static const unsigned char *display_rr(const unsigned char *aptr,
p += len; p += len;
if (p + 20 > aptr + dlen) if (p + 20 > aptr + dlen)
return NULL; return NULL;
printf("\t\t\t\t\t\t( %d %d %d %d %d )", printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )",
(p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3], DNS__32BIT(p), DNS__32BIT(p+4), DNS__32BIT(p+8),
(p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7], DNS__32BIT(p+12), DNS__32BIT(p+16));
(p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11],
(p[12] << 24) | (p[13] << 16) | (p[14] << 8) | p[15],
(p[16] << 24) | (p[17] << 16) | (p[18] << 8) | p[19]);
break; break;
case T_TXT: case T_TXT:
@@ -548,7 +556,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
len = *p; len = *p;
if (p + len + 1 > aptr + dlen) if (p + len + 1 > aptr + dlen)
return NULL; return NULL;
printf("\t%.*s", len, p + 1); printf("\t%.*s", (int)len, p + 1);
p += len + 1; p += len + 1;
} }
break; break;
@@ -557,8 +565,14 @@ static const unsigned char *display_rr(const unsigned char *aptr,
/* The RR data is a four-byte Internet address. */ /* The RR data is a four-byte Internet address. */
if (dlen != 4) if (dlen != 4)
return NULL; return NULL;
memcpy(&addr, aptr, sizeof(struct in_addr)); printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr)));
printf("\t%s", inet_ntoa(addr)); break;
case T_AAAA:
/* The RR data is a 16-byte IPv6 address. */
if (dlen != 16)
return NULL;
printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr)));
break; break;
case T_WKS: case T_WKS:
@@ -583,6 +597,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
default: default:
printf("\t[Unknown RR; cannot parse]"); printf("\t[Unknown RR; cannot parse]");
break;
} }
printf("\n"); printf("\n");

View File

@@ -29,13 +29,23 @@
#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_dns.h" #include "ares_dns.h"
#include "inet_ntop.h"
#include "inet_net_pton.h"
#ifndef INADDR_NONE #ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff #define INADDR_NONE 0xffffffff
#endif #endif
#ifndef HAVE_STRUCT_IN6_ADDR
struct in6_addr
{
unsigned char s6_addr[16];
};
#endif
static void callback(void *arg, int status, struct hostent *host); static void callback(void *arg, int status, struct hostent *host);
static void usage(void); static void usage(void);
@@ -45,7 +55,8 @@ int main(int argc, char **argv)
int status, nfds; int status, nfds;
fd_set read_fds, write_fds; fd_set read_fds, write_fds;
struct timeval *tvp, tv; struct timeval *tvp, tv;
struct in_addr addr; struct in_addr addr4;
struct in6_addr addr6;
#ifdef WIN32 #ifdef WIN32
WORD wVersionRequested = MAKEWORD(1,1); WORD wVersionRequested = MAKEWORD(1,1);
@@ -66,13 +77,20 @@ int main(int argc, char **argv)
/* Initiate the queries, one per command-line argument. */ /* Initiate the queries, one per command-line argument. */
for (argv++; *argv; argv++) for (argv++; *argv; argv++)
{ {
addr.s_addr = inet_addr(*argv); if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
if (addr.s_addr == INADDR_NONE) {
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv); ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback,
*argv);
}
else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1)
{
ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback,
*argv);
}
else else
{ {
ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, callback, /* assume user wants A-records */
*argv); ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
} }
} }
@@ -95,7 +113,6 @@ int main(int argc, char **argv)
static void callback(void *arg, int status, struct hostent *host) static void callback(void *arg, int status, struct hostent *host)
{ {
struct in_addr addr;
char **p; char **p;
if (status != ARES_SUCCESS) if (status != ARES_SUCCESS)
@@ -106,8 +123,21 @@ static void callback(void *arg, int status, struct hostent *host)
for (p = host->h_addr_list; *p; p++) for (p = host->h_addr_list; *p; p++)
{ {
memcpy(&addr, *p, sizeof(struct in_addr)); char addr_buf[46] = "??";
printf("%-32s\t%s\n", host->h_name, inet_ntoa(addr));
ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf));
printf("%-32s\t%s", host->h_name, addr_buf);
#if 0
if (host->h_aliases[0])
{
int i;
printf (", Aliases: ");
for (i = 0; host->h_aliases[i]; i++)
printf("%s ", host->h_aliases[i]);
}
#endif
puts("");
} }
} }

View File

@@ -29,12 +29,14 @@
#if defined(WATT32) #if defined(WATT32)
#include <netinet/in.h> #include <netinet/in.h>
#include <sys/socket.h>
#include <tcp.h> #include <tcp.h>
#elif defined(WIN32) #elif defined(WIN32)
#include <winsock.h> #include <winsock2.h>
#include <windows.h> #include <windows.h>
#else #else
#include <netinet/in.h> #include <netinet/in.h>
#include <sys/socket.h>
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
@@ -64,6 +66,13 @@ extern "C" {
#define ARES_EDESTRUCTION 16 #define ARES_EDESTRUCTION 16
#define ARES_EBADSTR 17 #define ARES_EBADSTR 17
/* ares_getnameinfo error codes */
#define ARES_EBADFLAGS 18
/* ares_getaddrinfo error codes */
#define ARES_ENONAME 19
#define ARES_EBADHINTS 20
/* Flag values */ /* Flag values */
#define ARES_FLAG_USEVC (1 << 0) #define ARES_FLAG_USEVC (1 << 0)
#define ARES_FLAG_PRIMARY (1 << 1) #define ARES_FLAG_PRIMARY (1 << 1)
@@ -85,6 +94,47 @@ extern "C" {
#define ARES_OPT_DOMAINS (1 << 7) #define ARES_OPT_DOMAINS (1 << 7)
#define ARES_OPT_LOOKUPS (1 << 8) #define ARES_OPT_LOOKUPS (1 << 8)
/* Nameinfo flag values */
#define ARES_NI_NOFQDN (1 << 0)
#define ARES_NI_NUMERICHOST (1 << 1)
#define ARES_NI_NAMEREQD (1 << 2)
#define ARES_NI_NUMERICSERV (1 << 3)
#define ARES_NI_DGRAM (1 << 4)
#define ARES_NI_TCP 0
#define ARES_NI_UDP ARES_NI_DGRAM
#define ARES_NI_SCTP (1 << 5)
#define ARES_NI_DCCP (1 << 6)
#define ARES_NI_NUMERICSCOPE (1 << 7)
#define ARES_NI_LOOKUPHOST (1 << 8)
#define ARES_NI_LOOKUPSERVICE (1 << 9)
/* Reserved for future use */
#define ARES_NI_IDN (1 << 10)
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
/* Addrinfo flag values */
#define ARES_AI_CANONNAME (1 << 0)
#define ARES_AI_NUMERICHOST (1 << 1)
#define ARES_AI_PASSIVE (1 << 2)
#define ARES_AI_NUMERICSERV (1 << 3)
#define ARES_AI_V4MAPPED (1 << 4)
#define ARES_AI_ALL (1 << 5)
#define ARES_AI_ADDRCONFIG (1 << 6)
/* Reserved for future use */
#define ARES_AI_IDN (1 << 10)
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
#define ARES_AI_CANONIDN (1 << 13)
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
ARES_AI_ADDRCONFIG)
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
many sockets */
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
ARES_GETSOCK_MAXNUM)))
struct ares_options { struct ares_options {
int flags; int flags;
int timeout; int timeout;
@@ -101,12 +151,15 @@ struct ares_options {
struct hostent; struct hostent;
struct timeval; struct timeval;
struct sockaddr;
struct ares_channeldata; struct ares_channeldata;
typedef struct ares_channeldata *ares_channel; typedef struct ares_channeldata *ares_channel;
typedef void (*ares_callback)(void *arg, int status, unsigned char *abuf, typedef void (*ares_callback)(void *arg, int status, unsigned char *abuf,
int alen); int alen);
typedef void (*ares_host_callback)(void *arg, int status, typedef void (*ares_host_callback)(void *arg, int status,
struct hostent *hostent); struct hostent *hostent);
typedef void (*ares_nameinfo_callback)(void *arg, int status,
char *node, char *service);
int ares_init(ares_channel *channelptr); int ares_init(ares_channel *channelptr);
int ares_init_options(ares_channel *channelptr, struct ares_options *options, int ares_init_options(ares_channel *channelptr, struct ares_options *options,
@@ -123,8 +176,12 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family,
ares_host_callback callback, void *arg); ares_host_callback callback, void *arg);
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen, void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
int family, ares_host_callback callback, void *arg); int family, ares_host_callback callback, void *arg);
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
socklen_t salen, int flags,
ares_nameinfo_callback callback,
void *arg);
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds); int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
int ares_getsock(ares_channel channel, int *socks, int numsocks);
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv, struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
struct timeval *tv); struct timeval *tv);
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds); void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);

View File

@@ -50,7 +50,7 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
if ((*buf)[len - 1] == '\n') if ((*buf)[len - 1] == '\n')
{ {
(*buf)[len - 1] = 0; (*buf)[len - 1] = 0;
return ARES_SUCCESS; break;
} }
offset = len; offset = len;
@@ -61,4 +61,5 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
*buf = newbuf; *buf = newbuf;
*bufsize *= 2; *bufsize *= 2;
} }
return ARES_SUCCESS;
} }

View File

@@ -34,6 +34,6 @@ might have been stored in their arguments.
.BR ares_init (3) .BR ares_init (3)
.BR ares_destroy (3) .BR ares_destroy (3)
.SH NOTES .SH NOTES
This function is not compatible with ares. This function was added in c-ares 1.2.0
.SH AUTHOR .SH AUTHOR
Dirk Manske Dirk Manske

View File

@@ -18,6 +18,18 @@
#ifndef ARES__DNS_H #ifndef ARES__DNS_H
#define ARES__DNS_H #define ARES__DNS_H
#ifdef ARES_BIG_ENDIAN
/* big-endian aware versions */
#define DNS__16BIT(p) (((p)[1] << 8) | (p)[0])
#define DNS__32BIT(p) (((p)[3] << 24) | ((p)[2] << 16) | \
((p)[1] << 8) | (p)[0])
#define DNS__SET16BIT(p, v) (((p)[1] = ((v) >> 8) & 0xff), \
((p)[0] = (v) & 0xff))
#define DNS__SET32BIT(p, v) (((p)[3] = ((v) >> 24) & 0xff), \
((p)[2] = ((v) >> 16) & 0xff), \
((p)[1] = ((v) >> 8) & 0xff), \
((p)[0] = (v) & 0xff))
#else
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1]) #define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \ #define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
((p)[2] << 8) | (p)[3]) ((p)[2] << 8) | (p)[3])
@@ -27,6 +39,16 @@
((p)[1] = ((v) >> 16) & 0xff), \ ((p)[1] = ((v) >> 16) & 0xff), \
((p)[2] = ((v) >> 8) & 0xff), \ ((p)[2] = ((v) >> 8) & 0xff), \
((p)[3] = (v) & 0xff)) ((p)[3] = (v) & 0xff))
#endif
#if 0
/* we cannot use this approach on systems where we can't access 16/32 bit
data on un-aligned addresses */
#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
#endif
/* Macros for parsing a DNS header */ /* Macros for parsing a DNS header */
#define DNS_HEADER_QID(h) DNS__16BIT(h) #define DNS_HEADER_QID(h) DNS__16BIT(h)

View File

@@ -106,6 +106,8 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
/* Nuke the trailing period if we wrote one. */ /* Nuke the trailing period if we wrote one. */
if (q > *s) if (q > *s)
*(q - 1) = 0; *(q - 1) = 0;
else
*q = 0; /* zero terminate */
return ARES_SUCCESS; return ARES_SUCCESS;
} }

View File

@@ -1,3 +1,5 @@
/* $Id$ */
/* Copyright 1998 by the Massachusetts Institute of Technology. /* Copyright 1998 by the Massachusetts Institute of Technology.
* *
* Permission to use, copy, modify, and distribute this * Permission to use, copy, modify, and distribute this

View File

@@ -28,8 +28,8 @@ The
.I ares_free_hostent .I ares_free_hostent
function frees a function frees a
.B struct hostent .B struct hostent
allocated by one of the functions \fIares_parse_a_reply(3)\fP or allocated by one of the functions \fIares_parse_a_reply(3)\fP,
\fIares_parse_ptr_reply(3)\fP. \fIares_parse_aaaa_reply(3)\fP, or \fIares_parse_ptr_reply(3)\fP.
.SH NOTES .SH NOTES
It is not necessary (and is not correct) to free the host structure passed to It is not necessary (and is not correct) to free the host structure passed to
the callback functions for \fIares_gethostbyname(3)\fP or the callback functions for \fIares_gethostbyname(3)\fP or
@@ -37,6 +37,7 @@ the callback functions for \fIares_gethostbyname(3)\fP or
host structures when the callback returns. host structures when the callback returns.
.SH SEE ALSO .SH SEE ALSO
.BR ares_parse_a_reply (3), .BR ares_parse_a_reply (3),
.BR ares_parse_aaaa_reply (3),
.BR ares_parse_ptr_reply (3) .BR ares_parse_ptr_reply (3)
.SH AUTHOR .SH AUTHOR
Greg Hudson, MIT Information Systems Greg Hudson, MIT Information Systems

View File

@@ -1,3 +1,5 @@
/* $Id$ */
/* Copyright 1998 by the Massachusetts Institute of Technology. /* Copyright 1998 by the Massachusetts Institute of Technology.
* *
* Permission to use, copy, modify, and distribute this * Permission to use, copy, modify, and distribute this

145
ares/ares_getnameinfo.3 Normal file
View File

@@ -0,0 +1,145 @@
.\" $Id$
.\"
.\" Copyright 2005 by Dominick Meglio.
.\"
.\" 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.
.\"
.TH ARES_GETNAMEINFO 3 "16 May 2005"
.SH NAME
ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner
.SH SYNOPSIS
.nf
.B #include <ares.h>
.PP
.B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
.B char *\fInode\fP, char *\fIservice\fP)
.PP
.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP,
.B socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP,
.B void *\fIarg\fP)
.fi
.SH DESCRIPTION
The
.B ares_getnameinfo
function is defined for protocol-independent address translation. The function
is a combination of \fIares_gethostbyaddr(3)\fP and \fIgetservbyport(3)\fP. The function will
translate the address either by executing a host query on the name service channel
identified by
.IR channel
or it will attempt to resolve it locally if possible.
The parameters
.I sa
and
.I len
give the address as a sockaddr structure, and
.I flags
gives the options that the function will use. Valid flags are listed below:
.TP 19
.B ARES_NI_NOFQDN
Only the nodename portion of the FQDN is returned for local hosts.
.TP 19
.B ARES_NI_NUMERICHOST
The numeric form of the hostname is returned rather than the name.
.TP 19
.B ARES_NI_NAMEREQD
An error is returned if the hostname cannot be found in the DNS.
.TP 19
.B ARES_NI_NUMERICSERV
The numeric form of the service is returned rather than the name.
.TP 19
.B ARES_NI_TCP
The service name is to be looked up for the TCP protocol.
.TP 19
.B ARES_NI_UDP
The service name is to be looked up for the UDP protocol.
.TP 19
.B ARES_NI_SCTP
The service name is to be looked up for the SCTP protocol.
.TP 19
.B ARES_NI_DCCP
The service name is to be looked up for the DCCP protocol.
.TP 19
.B ARES_NI_NUMERICSCOPE
The numeric form of the scope ID is returned rather than the name.
.TP 19
.B ARES_NI_LOOKUPHOST
A hostname lookup is being requested.
.TP 19
.B ARES_NI_LOOKUPSERVICE
A service name lookup is being requested.
.PP
When the query
is complete or has
failed, the ares library will invoke \fIcallback\fP. Completion or failure of
the query may happen immediately, or may happen during a later call to
\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP.
.PP
The callback argument
.I arg
is copied from the
.B ares_getnameinfo
argument
.IR arg .
The callback argument
.I status
indicates whether the query succeeded and, if not, how it failed. It
may have any of the following values:
.TP 19
.B ARES_SUCCESS
The host lookup completed successfully.
.TP 19
.B ARES_ENOTIMP
The ares library does not know how to look up addresses of type
.IR family .
.TP 19
.B ARES_ENOTFOUND
The address
.I addr
was not found.
.TP 19
.B ARES_ENOMEM
Memory was exhausted.
.TP 19
.B ARES_EDESTRUCTION
The name service channel
.I channel
is being destroyed; the query will not be completed.
.TP 19
.B ARES_EBADFLAGS
The
.I flags
parameter contains an illegal value.
.PP
On successful completion of the query, the callback argument
.I node
contains a string representing the hostname (assuming
.B ARES_NI_LOOKUPHOST
was specified). Additionally,
.I service
contains a string representing the service name (assuming
.B ARES_NI_LOOKUPSERVICE
was specified).
If the query did not complete successfully, or one of the values
was not requested,
.I node
or
.I service
will be
.BR NULL .
.SH SEE ALSO
.BR ares_process (3),
.BR ares_getaddrinfo (3)
.SH AUTHOR
Dominick Meglio
.br
Copyright 2005 by Dominick Meglio.

382
ares/ares_getnameinfo.c Normal file
View File

@@ -0,0 +1,382 @@
/* $Id$ */
/* Copyright 2005 by Dominick Meglio
*
* 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.
*/
#include "setup.h"
#include <sys/types.h>
#include <ctype.h>
#if defined(WIN32) && !defined(WATT32)
#include "nameser.h"
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <arpa/nameser.h>
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
#include <arpa/nameser_compat.h>
#endif
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_private.h"
#include "ares_ipv6.h"
#include "inet_ntop.h"
#ifdef WATT32
#undef WIN32
#endif
struct nameinfo_query {
ares_nameinfo_callback callback;
void *arg;
union {
struct sockaddr_in addr4;
struct sockaddr_in6 addr6;
} addr;
int family;
int flags;
};
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
#define IPBUFSIZ 40+IF_NAMESIZE
#else
#define IPBUFSIZ 40
#endif
static void nameinfo_callback(void *arg, int status, struct hostent *host);
static char *lookup_service(unsigned short port, int flags,
char *buf, size_t buflen);
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
char *buf, size_t buflen);
#endif
static char *ares_striendstr(const char *s1, const char *s2);
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen,
int flags, ares_nameinfo_callback callback, void *arg)
{
struct sockaddr_in *addr = NULL;
struct sockaddr_in6 *addr6 = NULL;
struct nameinfo_query *niquery;
/* Verify the buffer size */
if (salen == sizeof(struct sockaddr_in))
addr = (struct sockaddr_in *)sa;
else if (salen == sizeof(struct sockaddr_in6))
addr6 = (struct sockaddr_in6 *)sa;
else
{
callback(arg, ARES_ENOTIMP, NULL, NULL);
return;
}
/* If neither, assume they want a host */
if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
flags |= ARES_NI_LOOKUPHOST;
/* All they want is a service, no need for DNS */
if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
{
char buf[33], *service;
unsigned int port = 0;
if (salen == sizeof(struct sockaddr_in))
port = addr->sin_port;
else
port = addr6->sin6_port;
service = lookup_service(port, flags, buf, sizeof(buf));
callback(arg, ARES_SUCCESS, NULL, service);
return;
}
/* They want a host lookup */
if ((flags & ARES_NI_LOOKUPHOST))
{
/* A numeric host can be handled without DNS */
if ((flags & ARES_NI_NUMERICHOST))
{
unsigned int port = 0;
char ipbuf[IPBUFSIZ];
char srvbuf[33];
char *service = NULL;
ipbuf[0] = 0;
/* Specifying not to lookup a host, but then saying a host
* is required has to be illegal.
*/
if (flags & ARES_NI_NAMEREQD)
{
callback(arg, ARES_EBADFLAGS, NULL, NULL);
return;
}
if (salen == sizeof(struct sockaddr_in6))
{
ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
port = addr6->sin6_port;
/* If the system supports scope IDs, use it */
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
#endif
}
else
{
ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
port = addr->sin_port;
}
/* They also want a service */
if (flags & ARES_NI_LOOKUPSERVICE)
service = lookup_service(port, flags, srvbuf, sizeof(srvbuf));
callback(arg, ARES_SUCCESS, ipbuf, service);
return;
}
/* This is where a DNS lookup becomes necessary */
else
{
niquery = malloc(sizeof(struct nameinfo_query));
if (!niquery)
{
callback(arg, ARES_ENOMEM, NULL, NULL);
return;
}
niquery->callback = callback;
niquery->arg = arg;
niquery->flags = flags;
if (sa->sa_family == AF_INET)
{
niquery->family = AF_INET;
memcpy(&niquery->addr.addr4, addr, sizeof(addr));
ares_gethostbyaddr(channel, &addr->sin_addr, sizeof(struct in_addr), AF_INET,
nameinfo_callback, niquery);
}
else
{
niquery->family = AF_INET6;
memcpy(&niquery->addr.addr6, addr6, sizeof(addr6));
ares_gethostbyaddr(channel, &addr6->sin6_addr, sizeof(struct in6_addr), AF_INET6,
nameinfo_callback, niquery);
}
}
}
}
static void nameinfo_callback(void *arg, int status, struct hostent *host)
{
struct nameinfo_query *niquery = (struct nameinfo_query *) arg;
char srvbuf[33];
char *service = NULL;
if (status == ARES_SUCCESS)
{
/* They want a service too */
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
{
if (niquery->family == AF_INET)
service = lookup_service(niquery->addr.addr4.sin_port,
niquery->flags, srvbuf, sizeof(srvbuf));
else
service = lookup_service(niquery->addr.addr6.sin6_port,
niquery->flags, srvbuf, sizeof(srvbuf));
}
/* NOFQDN means we have to strip off the domain name portion.
We do this by determining our own domain name, then searching the string
for this domain name and removing it.
*/
if (niquery->flags & ARES_NI_NOFQDN)
{
char buf[255];
char *domain;
gethostname(buf, 255);
if ((domain = strchr(buf, '.')))
{
char *end = ares_striendstr(host->h_name, domain);
if (end)
*end = 0;
}
}
niquery->callback(niquery->arg, ARES_SUCCESS, host->h_name, service);
return;
}
/* We couldn't find the host, but it's OK, we can use the IP */
else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD))
{
char ipbuf[IPBUFSIZ];
if (niquery->family == AF_INET)
ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, IPBUFSIZ);
else
{
ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, sizeof(ipbuf));
#endif
}
/* They want a service too */
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
{
if (niquery->family == AF_INET)
service = lookup_service(niquery->addr.addr4.sin_port,
niquery->flags, srvbuf, sizeof(srvbuf));
else
service = lookup_service(niquery->addr.addr6.sin6_port,
niquery->flags, srvbuf, sizeof(srvbuf));
}
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
return;
}
niquery->callback(niquery->arg, status, NULL, NULL);
free(niquery);
}
static char *lookup_service(unsigned short port, int flags,
char *buf, size_t buflen)
{
const char *proto;
struct servent *sep;
#ifdef HAVE_GETSERVBYPORT_R
struct servent se;
#endif
char tmpbuf[4096];
if (port)
{
if (flags & ARES_NI_NUMERICSERV)
sep = NULL;
else
{
if (flags & ARES_NI_UDP)
proto = "udp";
else if (flags & ARES_NI_SCTP)
proto = "sctp";
else if (flags & ARES_NI_DCCP)
proto = "dccp";
else
proto = "tcp";
#ifdef HAVE_GETSERVBYPORT_R
sep = &se;
memset(tmpbuf, 0, sizeof(tmpbuf));
#if GETSERVBYPORT_R_ARGS == 6
if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), &sep) != 0)
sep = NULL;
#elif GETSERVBYPORT_R_ARGS == 5
sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
#elif GETSERVBYPORT_R_ARGS == 4
if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
sep = NULL;
#else
/* Lets just hope the OS uses TLS! */
sep = getservbyport(port, proto);
#endif
#else
/* Lets just hope the OS uses TLS! */
sep = getservbyport(port, proto);
#endif
}
if (sep && sep->s_name)
/* get service name */
strcpy(tmpbuf, sep->s_name);
else
/* get port as a string */
sprintf(tmpbuf, "%u", ntohs(port));
if (strlen(tmpbuf) < buflen)
/* return it if buffer big enough */
strcpy(buf, tmpbuf);
else
/* avoid reusing previous one */
buf[0] = '\0';
return buf;
}
buf[0] = '\0';
return NULL;
}
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
char *buf, size_t buflen)
{
char fmt_u[] = "%u";
char fmt_lu[] = "%lu";
char tmpbuf[IF_NAMESIZE + 2];
size_t bufl;
char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?fmt_lu:fmt_u;
tmpbuf[0] = '%';
#ifdef HAVE_IF_INDEXTONAME
if ((flags & ARES_NI_NUMERICSCOPE) ||
(!IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)
&& !IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr)))
{
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
}
else
{
if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
}
#else
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
(void) flags;
#endif
tmpbuf[IF_NAMESIZE + 1] = '\0';
bufl = strlen(buf);
if(bufl + strlen(tmpbuf) < buflen)
/* only append the scopeid string if it fits in the target buffer */
strcpy(&buf[bufl], tmpbuf);
}
#endif
/* Determines if s1 ends with the string in s2 (case-insensitive) */
static char *ares_striendstr(const char *s1, const char *s2)
{
const char *c1, *c2, *c1_begin;
size_t s1_len = strlen(s1), s2_len = strlen(s2);
/* If the substr is longer than the full str, it can't match */
if (s2_len > s1_len)
return NULL;
/* Jump to the end of s1 minus the length of s2 */
c1_begin = s1+s1_len-s2_len;
c1 = (const char *)c1_begin;
c2 = s2;
while (c2 < s2+s2_len)
{
if (tolower(*c1) != tolower(*c2))
return NULL;
else
{
c1++;
c2++;
}
}
if (c2 == c1 && c2 == NULL)
return (char *)c1_begin;
return NULL;
}

58
ares/ares_getsock.3 Normal file
View File

@@ -0,0 +1,58 @@
.\" $Id$
.\"
.\" Copyright 1998 by Daniel Stenberg
.\"
.\" 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.
.\"
.TH ARES_GETSOCK 3 "22 December 2005"
.SH NAME
ares_getsock \- get file descriptors to wait on
.SH SYNOPSIS
.nf
.B #include <ares.h>
.PP
.B int ares_getsock(ares_channel \fIchannel\fP, int *\fIsocks\fP,
.B int \fInumsocks\fP);
.fi
.SH DESCRIPTION
The
.B ares_getsock
function retrieves the set of file descriptors which the calling
application should wait on for reading and/or writing for the
processing of name service queries pending on the name service channel
identified by
.IR channel .
File descriptors will be set in the integer array pointed to by
\fIsocks\fP.
\fInumsocks\fP is the size of the given array in number of ints.
This function can only return information about up to 16 sockets. If more are
in use (however unlikely that is), they are simply not reported back.
.SH RETURN VALUES
\fBares_getsock\fP returns a bitmask for what actions to wait for on the
different sockets. The ares.h header file provides these convenience macros to
extract the information appropriately:
.nf
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about
this many sockets */
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
ARES_GETSOCK_MAXNUM)))
.fi
.SH NOTES
This function was added in c-ares 1.3.1
.SH SEE ALSO
.BR ares_timeout (3),
.BR ares_fds (3),
.BR ares_process (3)

71
ares/ares_getsock.c Normal file
View File

@@ -0,0 +1,71 @@
/* $Id$ */
/* Copyright 2005 by Daniel Stenberg.
*
* 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.
*/
#include "setup.h"
#include <sys/types.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include "ares.h"
#include "ares_private.h"
int ares_getsock(ares_channel channel,
int *s,
int numsocks) /* size of the 'socks' array */
{
struct server_state *server;
ares_socket_t nfds;
int i;
int sockindex=0;
int bitmap = 0;
unsigned int setbits = 0xffffffff;
ares_socket_t *socks = (ares_socket_t *)s;
/* No queries, no file descriptors. */
if (!channel->queries)
return 0;
nfds = 0;
for (i = 0; i < channel->nservers; i++)
{
server = &channel->servers[i];
if (server->udp_socket != ARES_SOCKET_BAD)
{
if(sockindex >= numsocks)
break;
socks[sockindex] = server->udp_socket;
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
sockindex++;
}
if (server->tcp_socket != ARES_SOCKET_BAD)
{
if(sockindex >= numsocks)
break;
socks[sockindex] = server->tcp_socket;
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
sockindex++;
if (server->qhead) {
/* then the tcp socket is also writable! */
bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex-1);
}
}
}
return (int)nfds;
}

View File

@@ -327,6 +327,7 @@ static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
size_t ip_size = sizeof("255.255.255.255,")-1; size_t ip_size = sizeof("255.255.255.255,")-1;
size_t left = ret_size; size_t left = ret_size;
char *ret = ret_buf; char *ret = ret_buf;
HRESULT res;
if (!fi) if (!fi)
return (0); return (0);
@@ -339,7 +340,8 @@ static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
if (!GetNetworkParams) if (!GetNetworkParams)
goto quit; goto quit;
if ((*GetNetworkParams) (fi, &size) != ERROR_BUFFER_OVERFLOW) res = (*GetNetworkParams) (fi, &size);
if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS))
goto quit; goto quit;
fi = alloca (size); fi = alloca (size);
@@ -502,7 +504,7 @@ DhcpNameServer
if (status == ARES_SUCCESS) if (status == ARES_SUCCESS)
status = ARES_EOF; status = ARES_EOF;
#elif defined(riscos) #elif defined(__riscos__)
/* Under RISC OS, name servers are listed in the /* Under RISC OS, name servers are listed in the
system variable Inet$Resolvers, space separated. */ system variable Inet$Resolvers, space separated. */
@@ -858,7 +860,8 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
ipbufpfx[0] = 0; ipbufpfx[0] = 0;
/* Lets see if it is CIDR */ /* Lets see if it is CIDR */
/* First we'll try IPv6 */ /* First we'll try IPv6 */
if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx ? ipbufpfx : ipbuf, &pat.addr.addr6, if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx ? ipbufpfx : ipbuf,
&pat.addr.addr6,
sizeof(pat.addr.addr6))) > 0) sizeof(pat.addr.addr6))) > 0)
{ {
pat.type = PATTERN_CIDR; pat.type = PATTERN_CIDR;
@@ -1011,7 +1014,8 @@ static const char *try_option(const char *p, const char *q, const char *opt)
} }
#ifndef WIN32 #ifndef WIN32
static int sortlist_alloc(struct apattern **sortlist, int *nsort, struct apattern *pat) static int sortlist_alloc(struct apattern **sortlist, int *nsort,
struct apattern *pat)
{ {
struct apattern *newsort; struct apattern *newsort;
newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern)); newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern));

View File

@@ -28,6 +28,31 @@ struct in6_addr
}; };
#endif #endif
#ifndef HAVE_STRUCT_SOCKADDR_IN6
struct sockaddr_in6
{
unsigned short sin6_family;
unsigned short sin6_port;
unsigned long sin6_flowinfo;
struct in6_addr sin6_addr;
unsigned int sin6_scope_id;
};
#endif
#ifndef HAVE_STRUCT_ADDRINFO
struct addrinfo
{
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
size_t ai_addrlen;
char *ai_cannonname;
struct sockaddr *ai_addr;
struct addrinfo *ai_next;
};
#endif
#ifndef NS_IN6ADDRSZ #ifndef NS_IN6ADDRSZ
#if SIZEOF_STRUCT_IN6_ADDR == 0 #if SIZEOF_STRUCT_IN6_ADDR == 0
/* We cannot have it set to zero, so we pick a fixed value here */ /* We cannot have it set to zero, so we pick a fixed value here */
@@ -45,4 +70,12 @@ struct in6_addr
#define NS_INT16SZ 2 #define NS_INT16SZ 2
#endif #endif
#ifndef IF_NAMESIZE
#ifdef IFNAMSIZ
#define IF_NAMESIZE IFNAMSIZ
#else
#define IF_NAMESIZE 256
#endif
#endif
#endif /* ARES_IPV6_H */ #endif /* ARES_IPV6_H */

View File

@@ -33,6 +33,10 @@
#define writev(s,v,c) writev_s(s,v,c) #define writev(s,v,c) writev_s(s,v,c)
#endif #endif
#ifdef NETWARE
#include <time.h>
#endif
#define DEFAULT_TIMEOUT 5 #define DEFAULT_TIMEOUT 5
#define DEFAULT_TRIES 4 #define DEFAULT_TRIES 4
#ifndef INADDR_NONE #ifndef INADDR_NONE
@@ -58,6 +62,10 @@
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg" #define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
#define PATH_HOSTS "sys:/etc/hosts" #define PATH_HOSTS "sys:/etc/hosts"
#elif defined(__riscos__)
#define PATH_HOSTS "InetDBase:Hosts"
#else #else
#define PATH_RESOLV_CONF "/etc/resolv.conf" #define PATH_RESOLV_CONF "/etc/resolv.conf"

View File

@@ -30,9 +30,16 @@
#ifdef HAVE_ARPA_NAMESER_COMPAT_H #ifdef HAVE_ARPA_NAMESER_COMPAT_H
#include <arpa/nameser_compat.h> #include <arpa/nameser_compat.h>
#endif #endif
#endif /* WIN32 && !WATT32 */
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
#ifdef NETWARE
#include <sys/filio.h>
#endif #endif
#include <string.h> #include <string.h>
@@ -45,6 +52,11 @@
#include "ares_dns.h" #include "ares_dns.h"
#include "ares_private.h" #include "ares_private.h"
#ifndef TRUE
/* at least Solaris 7 does not have TRUE at this point */
#define TRUE 1
#endif
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS) #if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
#define GET_ERRNO() WSAGetLastError() #define GET_ERRNO() WSAGetLastError()
#else #else
@@ -92,7 +104,7 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
struct iovec *vec; struct iovec *vec;
int i; int i;
ssize_t scount; ssize_t scount;
int wcount; ssize_t wcount;
size_t n; size_t n;
for (i = 0; i < channel->nservers; i++) for (i = 0; i < channel->nservers; i++)
@@ -153,7 +165,8 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
/* Can't allocate iovecs; just send the first request. */ /* Can't allocate iovecs; just send the first request. */
sendreq = server->qhead; sendreq = server->qhead;
scount = send(server->tcp_socket, sendreq->data, sendreq->len, 0); scount = send(server->tcp_socket, (void *)sendreq->data,
sendreq->len, 0);
if (scount < 0) if (scount < 0)
{ {
@@ -201,8 +214,8 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
* what's left to read of it). * what's left to read of it).
*/ */
count = recv(server->tcp_socket, count = recv(server->tcp_socket,
server->tcp_lenbuf + server->tcp_buffer_pos, (void *)(server->tcp_lenbuf + server->tcp_lenbuf_pos),
2 - server->tcp_buffer_pos, 0); 2 - server->tcp_lenbuf_pos, 0);
if (count <= 0) if (count <= 0)
{ {
handle_error(channel, i, now); handle_error(channel, i, now);
@@ -227,7 +240,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
{ {
/* Read data into the allocated buffer. */ /* Read data into the allocated buffer. */
count = recv(server->tcp_socket, count = recv(server->tcp_socket,
server->tcp_buffer + server->tcp_buffer_pos, (void *)(server->tcp_buffer + server->tcp_buffer_pos),
server->tcp_length - server->tcp_buffer_pos, 0); server->tcp_length - server->tcp_buffer_pos, 0);
if (count <= 0) if (count <= 0)
{ {
@@ -269,7 +282,7 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
!FD_ISSET(server->udp_socket, read_fds)) !FD_ISSET(server->udp_socket, read_fds))
continue; continue;
count = recv(server->udp_socket, buf, sizeof(buf), 0); count = recv(server->udp_socket, (void *)buf, sizeof(buf), 0);
if (count <= 0) if (count <= 0)
handle_error(channel, i, now); handle_error(channel, i, now);
@@ -454,7 +467,8 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
return; return;
} }
} }
if (send(server->udp_socket, query->qbuf, query->qlen, 0) == -1) if (send(server->udp_socket, (void *)query->qbuf,
query->qlen, 0) == -1)
{ {
query->skip_server[query->server] = 1; query->skip_server[query->server] = 1;
next_server(channel, query, now); next_server(channel, query, now);
@@ -466,13 +480,76 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
} }
} }
/*
* nonblock() set the given socket to either blocking or non-blocking mode
* based on the 'nonblock' boolean argument. This function is highly portable.
*/
static int nonblock(ares_socket_t sockfd, /* operate on this */
int nonblock /* TRUE or FALSE */)
{
#undef SETBLOCK
#define SETBLOCK 0
#ifdef HAVE_O_NONBLOCK
/* most recent unix versions */
int flags;
flags = fcntl(sockfd, F_GETFL, 0);
if (TRUE == nonblock)
return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
else
return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK));
#undef SETBLOCK
#define SETBLOCK 1
#endif
#if defined(HAVE_FIONBIO) && (SETBLOCK == 0)
/* older unix versions */
int flags;
flags = nonblock;
return ioctl(sockfd, FIONBIO, &flags);
#undef SETBLOCK
#define SETBLOCK 2
#endif
#if defined(HAVE_IOCTLSOCKET) && (SETBLOCK == 0)
/* Windows? */
unsigned long flags;
flags = nonblock;
return ioctlsocket(sockfd, FIONBIO, &flags);
#undef SETBLOCK
#define SETBLOCK 3
#endif
#if defined(HAVE_IOCTLSOCKET_CASE) && (SETBLOCK == 0)
/* presumably for Amiga */
return IoctlSocket(sockfd, FIONBIO, (long)nonblock);
#undef SETBLOCK
#define SETBLOCK 4
#endif
#if defined(HAVE_SO_NONBLOCK) && (SETBLOCK == 0)
/* BeOS */
long b = nonblock ? 1 : 0;
return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
#undef SETBLOCK
#define SETBLOCK 5
#endif
#ifdef HAVE_DISABLED_NONBLOCKING
return 0; /* returns success */
#undef SETBLOCK
#define SETBLOCK 6
#endif
#if (SETBLOCK == 0)
#error "no non-blocking method was found/used/set"
#endif
}
static int open_tcp_socket(ares_channel channel, struct server_state *server) static int open_tcp_socket(ares_channel channel, struct server_state *server)
{ {
#if defined(WIN32)
u_long flags;
#else
int flags;
#endif
ares_socket_t s; ares_socket_t s;
struct sockaddr_in sockin; struct sockaddr_in sockin;
@@ -482,25 +559,7 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
return -1; return -1;
/* Set the socket non-blocking. */ /* Set the socket non-blocking. */
nonblock(s, TRUE);
#if defined(WIN32) || defined(WATT32)
flags = 1;
ioctlsocket(s, FIONBIO, &flags);
#else
flags = fcntl(s, F_GETFL, 0);
if (flags == -1)
{
closesocket(s);
return -1;
}
flags |= O_NONBLOCK;
if (fcntl(s, F_SETFL, flags) == -1)
{
closesocket(s);
return -1;
}
#endif
/* Connect to the server. */ /* Connect to the server. */
memset(&sockin, 0, sizeof(sockin)); memset(&sockin, 0, sizeof(sockin));
@@ -531,6 +590,9 @@ static int open_udp_socket(ares_channel channel, struct server_state *server)
if (s == ARES_SOCKET_BAD) if (s == ARES_SOCKET_BAD)
return -1; return -1;
/* Set the socket non-blocking. */
nonblock(s, TRUE);
/* Connect to the server. */ /* Connect to the server. */
memset(&sockin, 0, sizeof(sockin)); memset(&sockin, 0, sizeof(sockin));
sockin.sin_family = AF_INET; sockin.sin_family = AF_INET;

View File

@@ -38,7 +38,8 @@ const char *ares_strerror(int code)
"Error reading file", "Error reading file",
"Out of memory", "Out of memory",
"Channel is being destroyed", "Channel is being destroyed",
"Misformatted string" "Misformatted string",
"Illegal flags specified"
}; };
assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext))); assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));

View File

@@ -5,11 +5,11 @@
#define ARES_VERSION_MAJOR 1 #define ARES_VERSION_MAJOR 1
#define ARES_VERSION_MINOR 3 #define ARES_VERSION_MINOR 3
#define ARES_VERSION_PATCH 0 #define ARES_VERSION_PATCH 1
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\ #define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
(ARES_VERSION_MINOR<<8)|\ (ARES_VERSION_MINOR<<8)|\
(ARES_VERSION_PATCH)) (ARES_VERSION_PATCH))
#define ARES_VERSION_STR "1.3.0" #define ARES_VERSION_STR "1.3.1"
const char *ares_version(int *version); const char *ares_version(int *version);

View File

@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
${LIBTOOLIZE:-libtoolize} --copy --automake --force ${LIBTOOLIZE:-libtoolize} --copy --automake --force
${ACLOCAL:-aclocal} ${ACLOCAL:-aclocal} $ACLOCAL_FLAGS
${AUTOHEADER:-autoheader} ${AUTOHEADER:-autoheader}
${AUTOCONF:-autoconf} ${AUTOCONF:-autoconf}
${AUTOMAKE:-automake} --add-missing ${AUTOMAKE:-automake} --add-missing

87
ares/config-win32.h Normal file
View File

@@ -0,0 +1,87 @@
#ifndef __ARES_CONFIG_WIN32_H
#define __ARES_CONFIG_WIN32_H
/* $Id$ */
/* Copyright (C) 2004 - 2005 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.
*/
/* ================================================================ */
/* ares/config-win32.h - Hand crafted config file for windows */
/* ================================================================ */
/* ---------------------------------------------------------------- */
/* HEADER FILES */
/* ---------------------------------------------------------------- */
/* Define if you have the <getopt.h> header file. */
#if defined(__MINGW32__)
#define HAVE_GETOPT_H 1
#endif
/* Define if you have the <unistd.h> header file. */
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
defined(__POCC__)
#define HAVE_UNISTD_H 1
#endif
/* Define if you have the <windows.h> header file. */
#define HAVE_WINDOWS_H 1
/* Define if you have the <winsock.h> header file. */
#define HAVE_WINSOCK_H 1
/* Define if you have the <winsock2.h> header file. */
#define HAVE_WINSOCK2_H 1
/* Define if you have the <ws2tcpip.h> header file. */
#define HAVE_WS2TCPIP_H 1
/* ---------------------------------------------------------------- */
/* FUNCTIONS */
/* ---------------------------------------------------------------- */
/* Define if you have the ioctlsocket function. */
#define HAVE_IOCTLSOCKET 1
/* ---------------------------------------------------------------- */
/* STRUCT RELATED */
/* ---------------------------------------------------------------- */
/* Define this if you have struct addrinfo */
#define HAVE_STRUCT_ADDRINFO 1
/* Define this if you have struct sockaddr_storage */
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
/* ---------------------------------------------------------------- */
/* IPV6 COMPATIBILITY */
/* ---------------------------------------------------------------- */
/* Define this if you have address family AF_INET6 */
#define HAVE_AF_INET6 1
/* Define this if you have protocol family PF_INET6 */
#define HAVE_PF_INET6 1
/* Define this if you have struct in6_addr */
#define HAVE_STRUCT_IN6_ADDR 1
/* Define this if you have struct sockaddr_in6 */
#define HAVE_STRUCT_SOCKADDR_IN6 1
/* Define this if you have sockaddr_in6 with scopeid */
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
#endif /* __ARES_CONFIG_WIN32_H */

View File

@@ -1,5 +1,8 @@
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
AC_INIT(ares_init.c) AC_INIT(ares_init.c)
AC_CONFIG_SRCDIR([ares_ipv6.h])
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
AM_INIT_AUTOMAKE(c-ares, CVS) AM_INIT_AUTOMAKE(c-ares, CVS)
@@ -13,13 +16,12 @@ solaris*)
;; ;;
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)
dnl check for cygwin stuff
AC_LIBTOOL_WIN32_DLL
dnl ************************************************************ dnl ************************************************************
dnl Option to switch on debug options. This makes an assumption that dnl Option to switch on debug options. This makes an assumption that
dnl this is built as an 'ares' subdir in the curl source tree. Subject for dnl this is built as an 'ares' subdir in the curl source tree. Subject for
@@ -38,9 +40,6 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
dnl when doing the debug stuff, use static library only dnl when doing the debug stuff, use static library only
AC_DISABLE_SHARED AC_DISABLE_SHARED
dnl Checks for standard header files, to make memdebug.h inclusions bettter
AC_HEADER_STDC
dnl the entire --enable-debug is a hack that lives and runs on top of dnl the entire --enable-debug is a hack that lives and runs on top of
dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl]) AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
@@ -57,45 +56,126 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
) )
dnl libtool setup
AC_PROG_LIBTOOL AC_PROG_LIBTOOL
dnl Checks for header files.
AC_HEADER_STDC
dnl **********************************************************************
dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
dnl and ws2tcpip.h take precedence over any other further checks which
dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
dnl this specific header files. And do them before its results are used.
dnl **********************************************************************
CURL_CHECK_HEADER_WINDOWS
CURL_CHECK_HEADER_WINSOCK
CURL_CHECK_HEADER_WINSOCK2
CURL_CHECK_HEADER_WS2TCPIP
dnl check for a few basic system headers we need dnl check for a few basic system headers we need
AC_CHECK_HEADERS( AC_CHECK_HEADERS(
sys/types.h \ sys/types.h \
sys/time.h \ sys/time.h \
sys/select.h \ sys/select.h \
sys/socket.h \ sys/socket.h \
winsock.h \ sys/ioctl.h \
netdb.h \
netinet/in.h \ netinet/in.h \
net/if.h \
arpa/nameser.h \ arpa/nameser.h \
arpa/nameser_compat.h \ arpa/nameser_compat.h \
arpa/inet.h, , , arpa/inet.h,
dnl to do if not found
[],
dnl to do if found
[],
dnl default includes
[ [
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
dnl We do this default-include simply to make sure that the nameser_compat.h dnl We do this default-include simply to make sure that the nameser_compat.h
dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1 dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
dnl (and others?) is not designed to allow this. dnl (and others?) is not designed to allow this.
#ifdef HAVE_ARPA_NAMESER_H #ifdef HAVE_ARPA_NAMESER_H
#include <arpa/nameser.h> #include <arpa/nameser.h>
#endif #endif
dnl *Sigh* these are needed in order for net/if.h to get properly detected.
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
] ]
) )
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_CHECK_SIZEOF(curl_off_t, ,[
#include <stdio.h>
#include "$srcdir/include/curl/curl.h"
])
AC_CHECK_SIZEOF(size_t)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(time_t)
AC_CHECK_TYPE(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
AC_CHECK_TYPE(ssize_t, ,
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
# Check for socklen_t or equivalent
CURL_CHECK_TYPE_SOCKLEN_T
TYPE_IN_ADDR_T
TYPE_SOCKADDR_STORAGE
dnl check for AF_INET6 dnl check for AF_INET6
CARES_CHECK_CONSTANT( CARES_CHECK_CONSTANT(
[ [
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#else
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif #endif
], [PF_INET6], ], [PF_INET6],
AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.]) AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
) )
@@ -103,16 +183,23 @@ CARES_CHECK_CONSTANT(
dnl check for PF_INET6 dnl check for PF_INET6
CARES_CHECK_CONSTANT( CARES_CHECK_CONSTANT(
[ [
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#else
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif #endif
], [AF_INET6], ], [AF_INET6],
AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.]) AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
) )
@@ -121,19 +208,138 @@ CARES_CHECK_CONSTANT(
dnl check for the in6_addr structure dnl check for the in6_addr structure
CARES_CHECK_STRUCT( CARES_CHECK_STRUCT(
[ [
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif
#endif #endif
], [in6_addr], ], [in6_addr],
AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.]) AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
) )
dnl check for the sockaddr_in6 structure
CARES_CHECK_STRUCT(
[
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#endif
], [sockaddr_in6],
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
[Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
)
AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
, ,
[
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#endif
])
dnl check for the addrinfo structure
AC_CHECK_MEMBER(struct addrinfo.ai_flags,
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
[Define to 1 if you have struct addrinfo.]),,
[
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#endif
]
)
AC_CHECK_FUNCS( bitncmp \
if_indextoname,
dnl if found
[],
dnl if not found, $ac_func is the name we check for
func="$ac_func"
AC_MSG_CHECKING([deeper for $func])
AC_TRY_LINK( [],
[ $func ();],
AC_MSG_RESULT(yes!)
eval "ac_cv_func_$func=yes"
def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
AC_MSG_RESULT(but still no)
)
)
dnl check for inet_pton dnl check for inet_pton
AC_CHECK_FUNCS(inet_pton) AC_CHECK_FUNCS(inet_pton)
dnl Some systems have it, but not IPv6 dnl Some systems have it, but not IPv6
@@ -147,9 +353,6 @@ AC_TRY_RUN(
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
@@ -179,9 +382,6 @@ AC_TRY_RUN(
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
@@ -213,9 +413,6 @@ AC_TRY_RUN(
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
@@ -237,38 +434,75 @@ fi
AC_CHECK_SIZEOF(struct in6_addr, , AC_CHECK_SIZEOF(struct in6_addr, ,
[ [
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
#endif
] ]
) )
AC_CHECK_SIZEOF(struct in_addr, , AC_CHECK_SIZEOF(struct in_addr, ,
[ [
#undef inline
#ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#endif
#else
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
#endif
] ]
) )
AC_CHECK_FUNCS(bitncmp)
dnl Check if the getnameinfo function is available
dnl and get the types of five of its arguments.
CURL_CHECK_FUNC_GETNAMEINFO
dnl God bless non-standardized functions! We need to see which getservbyport_r variant is available
CARES_CHECK_GETSERVBYPORT_R
CURL_CHECK_NONBLOCKING_SOCKET
AC_C_BIGENDIAN(
[AC_DEFINE(ARES_BIG_ENDIAN, 1, [define this if ares is built for a big endian system])],
,
[AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])]
)
AC_OUTPUT(Makefile) AC_OUTPUT(Makefile)

View File

@@ -1,3 +1,5 @@
/* $Id$ */
/* Copyright (c) 1996 by Internet Software Consortium. /* Copyright (c) 1996 by Internet Software Consortium.
* *
* Permission to use, copy, modify, and distribute this software for any * Permission to use, copy, modify, and distribute this software for any
@@ -72,8 +74,8 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
const char * const char *
ares_inet_ntop(int af, const void *src, char *dst, size_t size) ares_inet_ntop(int af, const void *src, char *dst, size_t size)
{ {
switch (af)
switch (af) { {
case AF_INET: case AF_INET:
return (inet_ntop4(src, dst, size)); return (inet_ntop4(src, dst, size));
case AF_INET6: case AF_INET6:
@@ -102,7 +104,8 @@ inet_ntop4(const unsigned char *src, char *dst, size_t size)
static const char fmt[] = "%u.%u.%u.%u"; static const char fmt[] = "%u.%u.%u.%u";
char tmp[sizeof "255.255.255.255"]; char tmp[sizeof "255.255.255.255"];
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) { if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size)
{
errno = ENOSPC; errno = ENOSPC;
return (NULL); return (NULL);
} }
@@ -127,7 +130,7 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
* to use pointer overlays. All the world's not a VAX. * to use pointer overlays. All the world's not a VAX.
*/ */
char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
struct { int base, len; } best, cur; struct { int base, len; } best = { 0,0 }, cur = { 0,0 };
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
int i; int i;
@@ -141,21 +144,27 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
best.base = -1; best.base = -1;
cur.base = -1; cur.base = -1;
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
if (words[i] == 0) { {
if (words[i] == 0)
{
if (cur.base == -1) if (cur.base == -1)
cur.base = i, cur.len = 1; cur.base = i, cur.len = 1;
else else
cur.len++; cur.len++;
} else { }
if (cur.base != -1) { else
{
if (cur.base != -1)
{
if (best.base == -1 || cur.len > best.len) if (best.base == -1 || cur.len > best.len)
best = cur; best = cur;
cur.base = -1; cur.base = -1;
} }
} }
} }
if (cur.base != -1) { if (cur.base != -1)
{
if (best.base == -1 || cur.len > best.len) if (best.base == -1 || cur.len > best.len)
best = cur; best = cur;
} }
@@ -166,10 +175,12 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
* Format the result. * Format the result.
*/ */
tp = tmp; tp = tmp;
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
{
/* Are we inside the best run of 0x00's? */ /* Are we inside the best run of 0x00's? */
if (best.base != -1 && i >= best.base && if (best.base != -1 && i >= best.base &&
i < (best.base + best.len)) { i < (best.base + best.len))
{
if (i == best.base) if (i == best.base)
*tp++ = ':'; *tp++ = ':';
continue; continue;
@@ -179,7 +190,8 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
*tp++ = ':'; *tp++ = ':';
/* Is this address an encapsulated IPv4? */ /* Is this address an encapsulated IPv4? */
if (i == 6 && best.base == 0 && if (i == 6 && best.base == 0 &&
(best.len == 6 || (best.len == 5 && words[5] == 0xffff))) { (best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
{
if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp))) if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
return (NULL); return (NULL);
tp += strlen(tp); tp += strlen(tp);
@@ -187,6 +199,7 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
} }
tp += SPRINTF((tp, "%x", words[i])); tp += SPRINTF((tp, "%x", words[i]));
} }
/* Was it a trailing run of 0x00's? */ /* Was it a trailing run of 0x00's? */
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
*tp++ = ':'; *tp++ = ':';
@@ -195,12 +208,13 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
/* /*
* Check for overflow, copy, and we're done. * Check for overflow, copy, and we're done.
*/ */
if ((size_t)(tp - tmp) > size) { if ((size_t)(tp - tmp) > size)
{
errno = ENOSPC; errno = ENOSPC;
return (NULL); return (NULL);
} }
strcpy(dst, tmp); strcpy(dst, tmp);
return (dst); return (dst);
} }
#endif #endif

View File

@@ -1,3 +1,5 @@
/* $Id$ */
#ifndef ARES_NAMESER_H #ifndef ARES_NAMESER_H
#define ARES_NAMESER_H #define ARES_NAMESER_H

View File

@@ -1,5 +1,5 @@
#ifndef ARES_SETUP_H #ifndef __ARES_SETUP_H
#define ARES_SETUP_H #define __ARES_SETUP_H
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al /* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
* *
@@ -14,16 +14,79 @@
* without express or implied warranty. * without express or implied warranty.
*/ */
#if !defined(WIN32) && defined(__WIN32__)
/* Borland fix */
#define WIN32
#endif
#if !defined(WIN32) && defined(_WIN32)
/* VS2005 on x64 fix */
#define WIN32
#endif
/*
* Include configuration script results or hand-crafted
* configuration file for platforms which lack config tool.
*/
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"
#else #else
/* simple work-around for now, for systems without configure support */
#ifdef WIN32
#include "config-win32.h"
#endif
#endif /* HAVE_CONFIG_H */
/*
* Include header files for windows builds before redefining anything.
* Use this preproessor block only to include or exclude windows.h,
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
* to any other further and independant block.
*/
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
/*
* Work-arounds for systems without configure support
*/
#ifndef HAVE_CONFIG_H
#if defined(__DJGPP__) || (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
defined(__POCC__)
#else
#define ssize_t int #define ssize_t int
#endif #endif
/* Recent autoconf versions define these symbols in config.h. We don't want #ifndef HAVE_WS2TCPIP_H
them (since they collide with the libcurl ones when we build #define socklen_t int
--enable-debug) so we undef them again here. */ #endif
#endif /* HAVE_CONFIG_H */
/*
* 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_STRING
#undef PACKAGE_TARNAME #undef PACKAGE_TARNAME
#undef PACKAGE_VERSION #undef PACKAGE_VERSION
@@ -32,9 +95,11 @@
#undef VERSION #undef VERSION
#undef PACKAGE #undef PACKAGE
/* now typedef our socket type */ /*
* Typedef our socket type
*/
#if defined(WIN32) && !defined(WATT32) #if defined(WIN32) && !defined(WATT32)
#include <winsock.h>
typedef SOCKET ares_socket_t; typedef SOCKET ares_socket_t;
#define ARES_SOCKET_BAD INVALID_SOCKET #define ARES_SOCKET_BAD INVALID_SOCKET
#else #else
@@ -42,8 +107,10 @@ typedef int ares_socket_t;
#define ARES_SOCKET_BAD -1 #define ARES_SOCKET_BAD -1
#endif #endif
/* Assume a few thing unless they're set by configure /*
* Assume a few thing unless they're set by configure
*/ */
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) #if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER)
#define HAVE_SYS_TIME_H #define HAVE_SYS_TIME_H
#endif #endif
@@ -57,7 +124,7 @@ typedef int ares_socket_t;
#endif #endif
#if (defined(WIN32) || defined(WATT32)) && \ #if (defined(WIN32) || defined(WATT32)) && \
!(defined(__MINGW32__) || defined(NETWARE)) !(defined(__MINGW32__) || defined(NETWARE) || defined(__DJGPP__))
/* protos for the functions we provide in windows_port.c */ /* protos for the functions we provide in windows_port.c */
int ares_strncasecmp(const char *s1, const char *s2, int n); int ares_strncasecmp(const char *s1, const char *s2, int n);
int ares_strcasecmp(const char *s1, const char *s2); int ares_strcasecmp(const char *s1, const char *s2);
@@ -78,4 +145,4 @@ int ares_strcasecmp(const char *s1, const char *s2);
#endif #endif
#endif #endif
#endif /* ARES_SETUP_H */ #endif /* __ARES_SETUP_H */

View File

@@ -1,213 +0,0 @@
# Microsoft Developer Studio Generated NMAKE File, Based on adig.dsp
!IF "$(CFG)" == ""
CFG=adig - Win32 Debug
!MESSAGE No configuration specified. Defaulting to adig - Win32 Debug.
!ENDIF
!IF "$(CFG)" != "adig - Win32 Release" && "$(CFG)" != "adig - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "adig.mak" CFG="adig - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "adig - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "adig - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "adig - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
!IF "$(RECURSE)" == "0"
ALL : "$(OUTDIR)\adig.exe"
!ELSE
ALL : "areslib - Win32 Release" "$(OUTDIR)\adig.exe"
!ENDIF
!IF "$(RECURSE)" == "1"
CLEAN :"areslib - Win32 ReleaseCLEAN"
!ELSE
CLEAN :
!ENDIF
-@erase "$(INTDIR)\adig.obj"
-@erase "$(INTDIR)\getopt.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(OUTDIR)\adig.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\adig.pdb" /machine:I386 /out:"$(OUTDIR)\adig.exe" /libpath:"..\areslib\Release"
LINK32_OBJS= \
"$(INTDIR)\adig.obj" \
"$(INTDIR)\getopt.obj" \
"..\areslib\Release\areslib.lib"
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
!IF "$(RECURSE)" == "0"
ALL : "$(OUTDIR)\adig.exe"
!ELSE
ALL : "areslib - Win32 Debug" "$(OUTDIR)\adig.exe"
!ENDIF
!IF "$(RECURSE)" == "1"
CLEAN :"areslib - Win32 DebugCLEAN"
!ELSE
CLEAN :
!ENDIF
-@erase "$(INTDIR)\adig.obj"
-@erase "$(INTDIR)\getopt.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(OUTDIR)\adig.exe"
-@erase "$(OUTDIR)\adig.ilk"
-@erase "$(OUTDIR)\adig.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\adig.pdb" /debug /machine:I386 /out:"$(OUTDIR)\adig.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
LINK32_OBJS= \
"$(INTDIR)\adig.obj" \
"$(INTDIR)\getopt.obj" \
"..\areslib\Debug\areslib.lib"
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("adig.dep")
!INCLUDE "adig.dep"
!ELSE
!MESSAGE Warning: cannot find "adig.dep"
!ENDIF
!ENDIF
!IF "$(CFG)" == "adig - Win32 Release" || "$(CFG)" == "adig - Win32 Debug"
SOURCE=..\..\adig.c
"$(INTDIR)\adig.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\getopt.c
"$(INTDIR)\getopt.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!IF "$(CFG)" == "adig - Win32 Release"
"areslib - Win32 Release" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
cd "..\adig"
"areslib - Win32 ReleaseCLEAN" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
cd "..\adig"
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
"areslib - Win32 Debug" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
cd "..\adig"
"areslib - Win32 DebugCLEAN" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
cd "..\adig"
!ENDIF
!ENDIF

View File

@@ -1,77 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: areslib - Win32 Release--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp" with contents
[
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
"Z:\ARES-1.1.1\ares_gethostbyname.c"
"Z:\ARES-1.1.1\ares_init.c"
]
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp"
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp" with contents
[
/nologo /out:"Release\areslib.lib"
".\Release\ares__close_sockets.obj"
".\Release\ares__get_hostent.obj"
".\Release\ares__read_line.obj"
".\Release\ares_destroy.obj"
".\Release\ares_expand_name.obj"
".\Release\ares_fds.obj"
".\Release\ares_free_errmem.obj"
".\Release\ares_free_hostent.obj"
".\Release\ares_free_string.obj"
".\Release\ares_gethostbyaddr.obj"
".\Release\ares_gethostbyname.obj"
".\Release\ares_init.obj"
".\Release\ares_mkquery.obj"
".\Release\ares_parse_a_reply.obj"
".\Release\ares_parse_ptr_reply.obj"
".\Release\ares_process.obj"
".\Release\ares_query.obj"
".\Release\ares_search.obj"
".\Release\ares_send.obj"
".\Release\ares_strerror.obj"
".\Release\ares_timeout.obj"
".\Release\windows_port.obj"
]
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp"
<h3>Output Window</h3>
Compiling...
ares_gethostbyname.c
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_init.c
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
Z:\ARES-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
Z:\ARES-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
Z:\ARES-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
Z:\ARES-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
Creating library...
<h3>
--------------------Configuration: adig - Win32 Release--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp" with contents
[
wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/adig.pdb" /machine:I386 /out:"Release/adig.exe" /libpath:"..\areslib\Release"
".\Release\adig.obj"
".\Release\getopt.obj"
"\ARES-1.1.1\vc\areslib\Release\areslib.lib"
]
Creating command line "link.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp"
<h3>Output Window</h3>
Linking...
<h3>Results</h3>
adig.exe - 0 error(s), 6 warning(s)
</pre>
</body>
</html>

View File

@@ -1,223 +0,0 @@
# Microsoft Developer Studio Generated NMAKE File, Based on ahost.dsp
!IF "$(CFG)" == ""
CFG=ahost - Win32 Debug
!MESSAGE No configuration specified. Defaulting to ahost - Win32 Debug.
!ENDIF
!IF "$(CFG)" != "ahost - Win32 Release" && "$(CFG)" != "ahost - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ahost - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
!IF "$(RECURSE)" == "0"
ALL : "$(OUTDIR)\ahost.exe"
!ELSE
ALL : "areslib - Win32 Release" "$(OUTDIR)\ahost.exe"
!ENDIF
!IF "$(RECURSE)" == "1"
CLEAN :"areslib - Win32 ReleaseCLEAN"
!ELSE
CLEAN :
!ENDIF
-@erase "$(INTDIR)\ahost.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(OUTDIR)\ahost.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\ahost.pdb" /machine:I386 /out:"$(OUTDIR)\ahost.exe" /libpath:"..\areslib\Release"
LINK32_OBJS= \
"$(INTDIR)\ahost.obj" \
"..\areslib\Release\areslib.lib"
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
!IF "$(RECURSE)" == "0"
ALL : "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
!ELSE
ALL : "areslib - Win32 Debug" "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
!ENDIF
!IF "$(RECURSE)" == "1"
CLEAN :"areslib - Win32 DebugCLEAN"
!ELSE
CLEAN :
!ENDIF
-@erase "$(INTDIR)\ahost.obj"
-@erase "$(INTDIR)\ahost.sbr"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(OUTDIR)\ahost.bsc"
-@erase "$(OUTDIR)\ahost.exe"
-@erase "$(OUTDIR)\ahost.ilk"
-@erase "$(OUTDIR)\ahost.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
BSC32_SBRS= \
"$(INTDIR)\ahost.sbr"
"$(OUTDIR)\ahost.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
$(BSC32) @<<
$(BSC32_FLAGS) $(BSC32_SBRS)
<<
LINK32=link.exe
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\ahost.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ahost.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
LINK32_OBJS= \
"$(INTDIR)\ahost.obj" \
"..\areslib\Debug\areslib.lib"
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("ahost.dep")
!INCLUDE "ahost.dep"
!ELSE
!MESSAGE Warning: cannot find "ahost.dep"
!ENDIF
!ENDIF
!IF "$(CFG)" == "ahost - Win32 Release" || "$(CFG)" == "ahost - Win32 Debug"
SOURCE=..\..\ahost.c
!IF "$(CFG)" == "ahost - Win32 Release"
"$(INTDIR)\ahost.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
"$(INTDIR)\ahost.obj" "$(INTDIR)\ahost.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
!IF "$(CFG)" == "ahost - Win32 Release"
"areslib - Win32 Release" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
cd "..\ahost"
"areslib - Win32 ReleaseCLEAN" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
cd "..\ahost"
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
"areslib - Win32 Debug" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
cd "..\ahost"
"areslib - Win32 DebugCLEAN" :
cd "..\areslib"
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
cd "..\ahost"
!ENDIF
!ENDIF

View File

@@ -1,16 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: ahost - Win32 Release--------------------
</h3>
<h3>Command Lines</h3>
<h3>Results</h3>
ahost.exe - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@@ -97,6 +97,10 @@ SOURCE=..\..\ares__read_line.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\ares_cancel.c
# End Source File
# Begin Source File
SOURCE=..\..\ares_destroy.c SOURCE=..\..\ares_destroy.c
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -137,6 +141,10 @@ SOURCE=..\..\ares_parse_a_reply.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\ares_parse_aaaa_reply.c
# End Source File
# Begin Source File
SOURCE=..\..\ares_parse_ptr_reply.c SOURCE=..\..\ares_parse_ptr_reply.c
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -153,14 +161,6 @@ SOURCE=..\..\ares_search.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\ares_cancel.c
# End Source File
# Begin Source File
SOURCE=..\..\ares_version.c
# End Source File
# Begin Source File
SOURCE=..\..\ares_send.c SOURCE=..\..\ares_send.c
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -173,6 +173,22 @@ SOURCE=..\..\ares_timeout.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\ares_version.c
# End Source File
# Begin Source File
SOURCE=..\..\bitncmp.c
# End Source File
# Begin Source File
SOURCE=..\..\inet_net_pton.c
# End Source File
# Begin Source File
SOURCE=..\..\inet_ntop.c
# End Source File
# Begin Source File
SOURCE=..\..\windows_port.c SOURCE=..\..\windows_port.c
# End Source File # End Source File
# End Group # End Group
@@ -189,7 +205,7 @@ SOURCE=..\..\ares_dns.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\ares_version.h SOURCE=..\..\ares_ipv6.h
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -197,6 +213,22 @@ SOURCE=..\..\ares_private.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\ares_version.h
# End Source File
# Begin Source File
SOURCE=..\..\bitncmp.h
# End Source File
# Begin Source File
SOURCE=..\..\inet_net_pton.h
# End Source File
# Begin Source File
SOURCE=..\..\inet_ntop.h
# End Source File
# Begin Source File
SOURCE=..\..\nameser.h SOURCE=..\..\nameser.h
# End Source File # End Source File
# End Group # End Group

View File

@@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "areslib"=.\areslib.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -1,367 +0,0 @@
# Microsoft Developer Studio Generated NMAKE File, Based on areslib.dsp
!IF "$(CFG)" == ""
CFG=areslib - Win32 Debug
!MESSAGE No configuration specified. Defaulting to areslib - Win32 Debug.
!ENDIF
!IF "$(CFG)" != "areslib - Win32 Release" && "$(CFG)" != "areslib - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "areslib.mak" CFG="areslib - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "areslib - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "areslib - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "areslib - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
ALL : "$(OUTDIR)\areslib.lib"
CLEAN :
-@erase "$(INTDIR)\ares__close_sockets.obj"
-@erase "$(INTDIR)\ares__get_hostent.obj"
-@erase "$(INTDIR)\ares__read_line.obj"
-@erase "$(INTDIR)\ares_destroy.obj"
-@erase "$(INTDIR)\ares_expand_name.obj"
-@erase "$(INTDIR)\ares_fds.obj"
-@erase "$(INTDIR)\ares_free_hostent.obj"
-@erase "$(INTDIR)\ares_free_string.obj"
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
-@erase "$(INTDIR)\ares_gethostbyname.obj"
-@erase "$(INTDIR)\ares_init.obj"
-@erase "$(INTDIR)\ares_mkquery.obj"
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
-@erase "$(INTDIR)\ares_process.obj"
-@erase "$(INTDIR)\ares_query.obj"
-@erase "$(INTDIR)\ares_search.obj"
-@erase "$(INTDIR)\ares_send.obj"
-@erase "$(INTDIR)\ares_strerror.obj"
-@erase "$(INTDIR)\ares_timeout.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\windows_port.obj"
-@erase "$(OUTDIR)\areslib.lib"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
BSC32_SBRS= \
LIB32=link.exe -lib
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
LIB32_OBJS= \
"$(INTDIR)\ares__close_sockets.obj" \
"$(INTDIR)\ares__get_hostent.obj" \
"$(INTDIR)\ares__read_line.obj" \
"$(INTDIR)\ares_destroy.obj" \
"$(INTDIR)\ares_expand_name.obj" \
"$(INTDIR)\ares_fds.obj" \
"$(INTDIR)\ares_free_hostent.obj" \
"$(INTDIR)\ares_free_string.obj" \
"$(INTDIR)\ares_gethostbyaddr.obj" \
"$(INTDIR)\ares_gethostbyname.obj" \
"$(INTDIR)\ares_init.obj" \
"$(INTDIR)\ares_mkquery.obj" \
"$(INTDIR)\ares_parse_a_reply.obj" \
"$(INTDIR)\ares_parse_ptr_reply.obj" \
"$(INTDIR)\ares_process.obj" \
"$(INTDIR)\ares_query.obj" \
"$(INTDIR)\ares_search.obj" \
"$(INTDIR)\ares_cancel.obj" \
"$(INTDIR)\ares_version.obj" \
"$(INTDIR)\ares_send.obj" \
"$(INTDIR)\ares_strerror.obj" \
"$(INTDIR)\ares_timeout.obj" \
"$(INTDIR)\windows_port.obj"
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
$(LIB32) @<<
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
<<
!ELSEIF "$(CFG)" == "areslib - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
ALL : "$(OUTDIR)\areslib.lib"
CLEAN :
-@erase "$(INTDIR)\ares__close_sockets.obj"
-@erase "$(INTDIR)\ares__get_hostent.obj"
-@erase "$(INTDIR)\ares__read_line.obj"
-@erase "$(INTDIR)\ares_destroy.obj"
-@erase "$(INTDIR)\ares_expand_name.obj"
-@erase "$(INTDIR)\ares_fds.obj"
-@erase "$(INTDIR)\ares_free_hostent.obj"
-@erase "$(INTDIR)\ares_free_string.obj"
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
-@erase "$(INTDIR)\ares_gethostbyname.obj"
-@erase "$(INTDIR)\ares_init.obj"
-@erase "$(INTDIR)\ares_mkquery.obj"
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
-@erase "$(INTDIR)\ares_process.obj"
-@erase "$(INTDIR)\ares_query.obj"
-@erase "$(INTDIR)\ares_search.obj"
-@erase "$(INTDIR)\ares_cancel.obj"
-@erase "$(INTDIR)\ares_version.obj"
-@erase "$(INTDIR)\ares_send.obj"
-@erase "$(INTDIR)\ares_strerror.obj"
-@erase "$(INTDIR)\ares_timeout.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(INTDIR)\windows_port.obj"
-@erase "$(OUTDIR)\areslib.lib"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
BSC32_SBRS= \
LIB32=link.exe -lib
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
LIB32_OBJS= \
"$(INTDIR)\ares__close_sockets.obj" \
"$(INTDIR)\ares__get_hostent.obj" \
"$(INTDIR)\ares__read_line.obj" \
"$(INTDIR)\ares_destroy.obj" \
"$(INTDIR)\ares_expand_name.obj" \
"$(INTDIR)\ares_fds.obj" \
"$(INTDIR)\ares_free_hostent.obj" \
"$(INTDIR)\ares_free_string.obj" \
"$(INTDIR)\ares_gethostbyaddr.obj" \
"$(INTDIR)\ares_gethostbyname.obj" \
"$(INTDIR)\ares_init.obj" \
"$(INTDIR)\ares_mkquery.obj" \
"$(INTDIR)\ares_parse_a_reply.obj" \
"$(INTDIR)\ares_parse_ptr_reply.obj" \
"$(INTDIR)\ares_process.obj" \
"$(INTDIR)\ares_query.obj" \
"$(INTDIR)\ares_search.obj" \
"$(INTDIR)\ares_send.obj" \
"$(INTDIR)\ares_strerror.obj" \
"$(INTDIR)\ares_timeout.obj" \
"$(INTDIR)\windows_port.obj"
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
$(LIB32) @<<
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
<<
!ENDIF
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("areslib.dep")
!INCLUDE "areslib.dep"
!ELSE
!MESSAGE Warning: cannot find "areslib.dep"
!ENDIF
!ENDIF
!IF "$(CFG)" == "areslib - Win32 Release" || "$(CFG)" == "areslib - Win32 Debug"
SOURCE=..\..\ares__close_sockets.c
"$(INTDIR)\ares__close_sockets.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares__get_hostent.c
"$(INTDIR)\ares__get_hostent.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares__read_line.c
"$(INTDIR)\ares__read_line.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_destroy.c
"$(INTDIR)\ares_destroy.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_expand_name.c
"$(INTDIR)\ares_expand_name.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_fds.c
"$(INTDIR)\ares_fds.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_free_hostent.c
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_free_string.c
"$(INTDIR)\ares_free_string.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_gethostbyaddr.c
"$(INTDIR)\ares_gethostbyaddr.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_gethostbyname.c
"$(INTDIR)\ares_gethostbyname.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_init.c
"$(INTDIR)\ares_init.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_mkquery.c
"$(INTDIR)\ares_mkquery.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_parse_a_reply.c
"$(INTDIR)\ares_parse_a_reply.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_parse_ptr_reply.c
"$(INTDIR)\ares_parse_ptr_reply.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_process.c
"$(INTDIR)\ares_process.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_query.c
"$(INTDIR)\ares_query.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_search.c
"$(INTDIR)\ares_search.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_version.c
"$(INTDIR)\ares_version.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_cancel.c
"$(INTDIR)\ares_cancel.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_send.c
"$(INTDIR)\ares_send.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_strerror.c
"$(INTDIR)\ares_strerror.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\ares_timeout.c
"$(INTDIR)\ares_timeout.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\windows_port.c
"$(INTDIR)\windows_port.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF

View File

@@ -1,125 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: areslib - Win32 Release--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp" with contents
[
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
"Z:\ares-1.1.1\ares__close_sockets.c"
"Z:\ares-1.1.1\ares__get_hostent.c"
"Z:\ares-1.1.1\ares__read_line.c"
"Z:\ares-1.1.1\ares_destroy.c"
"Z:\ares-1.1.1\ares_expand_name.c"
"Z:\ares-1.1.1\ares_fds.c"
"Z:\ares-1.1.1\ares_free_errmem.c"
"Z:\ares-1.1.1\ares_free_hostent.c"
"Z:\ares-1.1.1\ares_free_string.c"
"Z:\ares-1.1.1\ares_gethostbyaddr.c"
"Z:\ares-1.1.1\ares_gethostbyname.c"
"Z:\ares-1.1.1\ares_init.c"
"Z:\ares-1.1.1\ares_mkquery.c"
"Z:\ares-1.1.1\ares_parse_a_reply.c"
"Z:\ares-1.1.1\ares_parse_ptr_reply.c"
"Z:\ares-1.1.1\ares_process.c"
"Z:\ares-1.1.1\ares_query.c"
"Z:\ares-1.1.1\ares_search.c"
"Z:\ares-1.1.1\ares_send.c"
"Z:\ares-1.1.1\ares_strerror.c"
"Z:\ares-1.1.1\ares_timeout.c"
"Z:\ares-1.1.1\windows_port.c"
]
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp"
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp" with contents
[
/nologo /out:"Release\areslib.lib"
".\Release\ares__close_sockets.obj"
".\Release\ares__get_hostent.obj"
".\Release\ares__read_line.obj"
".\Release\ares_destroy.obj"
".\Release\ares_expand_name.obj"
".\Release\ares_fds.obj"
".\Release\ares_free_errmem.obj"
".\Release\ares_free_hostent.obj"
".\Release\ares_free_string.obj"
".\Release\ares_gethostbyaddr.obj"
".\Release\ares_gethostbyname.obj"
".\Release\ares_init.obj"
".\Release\ares_mkquery.obj"
".\Release\ares_parse_a_reply.obj"
".\Release\ares_parse_ptr_reply.obj"
".\Release\ares_process.obj"
".\Release\ares_query.obj"
".\Release\ares_search.obj"
".\Release\ares_send.obj"
".\Release\ares_strerror.obj"
".\Release\ares_timeout.obj"
".\Release\windows_port.obj"
]
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp"
<h3>Output Window</h3>
Compiling...
ares__close_sockets.c
Z:\ares-1.1.1\ares__close_sockets.c(46) : warning C4013: 'close' undefined; assuming extern returning int
ares__get_hostent.c
ares__read_line.c
ares_destroy.c
ares_expand_name.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_fds.c
ares_free_errmem.c
ares_free_hostent.c
ares_free_string.c
ares_gethostbyaddr.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_gethostbyname.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_init.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
Z:\ares-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
Z:\ares-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
Z:\ares-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
Z:\ares-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
ares_mkquery.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_parse_a_reply.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
Z:\ares-1.1.1\ares_parse_a_reply.c(90) : warning C4018: '<' : signed/unsigned mismatch
ares_parse_ptr_reply.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
Z:\ares-1.1.1\ares_parse_ptr_reply.c(71) : warning C4018: '<' : signed/unsigned mismatch
ares_process.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_query.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_search.c
Z:\ares-1.1.1\ares_search.c(229) : warning C4013: 'strncasecmp' undefined; assuming extern returning int
ares_send.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
ares_strerror.c
ares_timeout.c
windows_port.c
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
Creating library...
<h3>Results</h3>
areslib.lib - 0 error(s), 19 warning(s)
</pre>
</body>
</html>

View File

@@ -1,4 +1,26 @@
#!/bin/sh #!/bin/sh
#***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |
# / __| | | | |_) | |
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2005, 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$
###########################################################################
die(){ die(){
echo "$@" echo "$@"
@@ -13,7 +35,8 @@ findtool(){
IFS=":" IFS=":"
for path in $PATH for path in $PATH
do do
if test -r "$path/$file"; then # echo "checks for $file in $path" >&2
if test -f "$path/$file"; then
echo "$path/$file" echo "$path/$file"
return return
fi fi
@@ -24,7 +47,7 @@ findtool(){
# autoconf 2.57 or newer # autoconf 2.57 or newer
# #
need_autoconf="2.57" need_autoconf="2.57"
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
if test -z "$ac_version"; then if test -z "$ac_version"; then
echo "buildconf: autoconf not found." echo "buildconf: autoconf not found."
echo " You need autoconf version $need_autoconf or newer installed." echo " You need autoconf version $need_autoconf or newer installed."
@@ -45,7 +68,7 @@ echo "buildconf: autoconf version $ac_version (ok)"
#-------------------------------------------------------------------------- #--------------------------------------------------------------------------
# autoheader 2.50 or newer # autoheader 2.50 or newer
# #
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
if test -z "$ah_version"; then if test -z "$ah_version"; then
echo "buildconf: autoheader not found." echo "buildconf: autoheader not found."
echo " You need autoheader version 2.50 or newer installed." echo " You need autoheader version 2.50 or newer installed."
@@ -67,7 +90,7 @@ echo "buildconf: autoheader version $ah_version (ok)"
# automake 1.7 or newer # automake 1.7 or newer
# #
need_automake="1.7" need_automake="1.7"
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'` am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -n 1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
if test -z "$am_version"; then if test -z "$am_version"; then
echo "buildconf: automake not found." echo "buildconf: automake not found."
echo " You need automake version $need_automake or newer installed." echo " You need automake version $need_automake or newer installed."
@@ -85,8 +108,7 @@ fi
echo "buildconf: automake version $am_version (ok)" echo "buildconf: automake version $am_version (ok)"
ac=`findtool aclocal` ac=`findtool ${ACLOCAL:-aclocal}`
if test -z "$ac"; then if test -z "$ac"; then
echo "buildconf: aclocal not found. Weird automake installation!" echo "buildconf: aclocal not found. Weird automake installation!"
exit 1 exit 1
@@ -107,13 +129,18 @@ LIBTOOL_WANTED_VERSION=1.4.2
# glibtool, with 'libtool' being something completely different. # glibtool, with 'libtool' being something completely different.
libtool=`findtool glibtool 2>/dev/null` libtool=`findtool glibtool 2>/dev/null`
if test ! -x "$libtool"; then if test ! -x "$libtool"; then
libtool=`findtool libtool` libtool=`findtool ${LIBTOOL:-libtool}`
fi fi
if test -z "$LIBTOOLIZE"; then
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found # set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
LIBTOOLIZE="${libtool}ize" # $libtool is already the full path
libtoolize="${libtool}ize"
else
libtoolize=`findtool $LIBTOOLIZE`
fi
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 -n 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."
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed" echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
@@ -150,7 +177,7 @@ fi
echo "buildconf: libtool version $lt_version (ok)" echo "buildconf: libtool version $lt_version (ok)"
if test -f "$LIBTOOLIZE"; then if test -f "$libtoolize"; then
echo "buildconf: libtoolize found" echo "buildconf: libtoolize found"
else else
echo "buildconf: libtoolize not found. Weird libtool installation!" echo "buildconf: libtoolize not found. Weird libtool installation!"
@@ -160,7 +187,7 @@ fi
#-------------------------------------------------------------------------- #--------------------------------------------------------------------------
# m4 check # m4 check
# #
m4=`${M4:-m4} --version 2>/dev/null|head -1`; m4=`${M4:-m4} --version 2>/dev/null|head -n 1`;
m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'` m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then
@@ -173,14 +200,14 @@ fi
#-------------------------------------------------------------------------- #--------------------------------------------------------------------------
# perl check # perl check
# #
PERL=`findtool perl` PERL=`findtool ${PERL:-perl}`
# ------------------------------------------------------------ # ------------------------------------------------------------
# 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 libtool command failed" $libtoolize --copy --automake --force || die "The libtoolize command failed"
echo "buildconf: running aclocal" echo "buildconf: running aclocal"
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed" ${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
if test -n "$PERL"; then if test -n "$PERL"; then
@@ -199,15 +226,13 @@ ${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 in ares"
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The ares aclocal command failed" ./buildconf
echo "buildconf: running autoconf in the ares directory"
${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 automake command failed" ${AUTOMAKE:-automake} -a -c || die "The automake command failed"
echo "buildconf: OK" echo "buildconf: OK"
exit 0 exit 0

View File

@@ -1,4 +1,25 @@
dnl $Id$ #***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |
# / __| | | | |_) | |
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2006, 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$
###########################################################################
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57) AC_PREREQ(2.57)
@@ -122,13 +143,13 @@ case $host in
*-*-mingw*) *-*-mingw*)
AC_DEFINE(BUILDING_LIBCURL, 1, [when building libcurl itself]) AC_DEFINE(BUILDING_LIBCURL, 1, [when building libcurl itself])
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
<EFBFBD> <20>AC_MSG_CHECKING([if we need CURL_STATICLIB]) AC_MSG_CHECKING([if we need CURL_STATICLIB])
if test "X$enable_shared" = "Xno" if test "X$enable_shared" = "Xno"
then then
AC_DEFINE(CURL_STATICLIB, 1, [when not building a shared library]) AC_DEFINE(CURL_STATICLIB, 1, [when not building a shared library])
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
<EFBFBD> <20>else else
<EFBFBD> <20> <20>AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
;; ;;
*) *)
@@ -140,6 +161,19 @@ dnl The install stuff has already been taken care of by the automake stuff
dnl AC_PROG_INSTALL dnl AC_PROG_INSTALL
AC_PROG_MAKE_SET AC_PROG_MAKE_SET
dnl **********************************************************************
dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
dnl and ws2tcpip.h take precedence over any other further checks which
dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
dnl this specific header files. And do them before its results are used.
dnl **********************************************************************
CURL_CHECK_HEADER_WINDOWS
CURL_CHECK_HEADER_WINSOCK
CURL_CHECK_HEADER_WINSOCK2
CURL_CHECK_HEADER_WS2TCPIP
dnl ************************************************************ dnl ************************************************************
dnl switch off particular protocols dnl switch off particular protocols
dnl dnl
@@ -151,10 +185,8 @@ AC_HELP_STRING([--disable-http],[Disable HTTP support]),
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP]) AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
AC_MSG_WARN([disable HTTP disables FTP over proxy and GOPHER too]) AC_MSG_WARN([disable HTTP disables FTP over proxy])
AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER])
AC_SUBST(CURL_DISABLE_HTTP, [1]) AC_SUBST(CURL_DISABLE_HTTP, [1])
AC_SUBST(CURL_DISABLE_GOPHER, [1])
;; ;;
*) AC_MSG_RESULT(yes) *) AC_MSG_RESULT(yes)
;; ;;
@@ -176,21 +208,6 @@ AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
esac ], esac ],
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
) )
AC_MSG_CHECKING([whether to support gopher])
AC_ARG_ENABLE(gopher,
AC_HELP_STRING([--enable-gopher],[Enable GOPHER support])
AC_HELP_STRING([--disable-gopher],[Disable GOPHER support]),
[ case "$enableval" in
no)
AC_MSG_RESULT(no)
AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER])
AC_SUBST(CURL_DISABLE_GOPHER, [1])
;;
*) AC_MSG_RESULT(yes)
;;
esac ],
AC_MSG_RESULT(yes)
)
AC_MSG_CHECKING([whether to support file]) AC_MSG_CHECKING([whether to support file])
AC_ARG_ENABLE(file, AC_ARG_ENABLE(file,
AC_HELP_STRING([--enable-file],[Enable FILE support]) AC_HELP_STRING([--enable-file],[Enable FILE support])
@@ -251,6 +268,21 @@ AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
esac ], esac ],
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
) )
AC_MSG_CHECKING([whether to support tftp])
AC_ARG_ENABLE(tftp,
AC_HELP_STRING([--enable-tftp],[Enable TFTP support])
AC_HELP_STRING([--disable-tftp],[Disable TFTP support]),
[ case "$enableval" in
no)
AC_MSG_RESULT(no)
AC_DEFINE(CURL_DISABLE_TFTP, 1, [to disable TFTP])
AC_SUBST(CURL_DISABLE_TFTP, [1])
;;
*) AC_MSG_RESULT(yes)
;;
esac ],
AC_MSG_RESULT(yes)
)
dnl ********************************************************************** dnl **********************************************************************
dnl Check for built-in manual dnl Check for built-in manual
@@ -274,7 +306,6 @@ AC_HELP_STRING([--disable-manual],[Disable built-in manual]),
dnl The actual use of the USE_MANUAL variable is done much later in this dnl The actual use of the USE_MANUAL variable is done much later in this
dnl script to allow other actions to disable it as well. dnl script to allow other actions to disable it as well.
dnl ********************************************************************** dnl **********************************************************************
dnl Checks for libraries. dnl Checks for libraries.
dnl ********************************************************************** dnl **********************************************************************
@@ -567,14 +598,15 @@ OPT_KRB4=off
AC_ARG_WITH(krb4,dnl AC_ARG_WITH(krb4,dnl
AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[ AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[
OPT_KRB4="$withval" OPT_KRB4="$withval"
if test X"$OPT_KRB4" != Xyes if test X"$OPT_KRB4" != Xno; then
then want_krb4="yes"
if test X"$OPT_KRB4" != Xyes; then
LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib$libsuff" LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib$libsuff"
KRB4LIB="$OPT_KRB4/lib$libsuff" KRB4LIB="$OPT_KRB4/lib$libsuff"
CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include" CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
KRB4INC="$OPT_KRB4/include" KRB4INC="$OPT_KRB4/include"
fi fi
want_krb4="yes" fi
]) ])
AC_MSG_CHECKING([if Kerberos4 support is requested]) AC_MSG_CHECKING([if Kerberos4 support is requested])
@@ -643,10 +675,13 @@ dnl **********************************************************************
AC_ARG_WITH(spnego, AC_ARG_WITH(spnego,
AC_HELP_STRING([--with-spnego=DIR], AC_HELP_STRING([--with-spnego=DIR],
[Specify location of SPNEGO library fbopenssl]), [Specify location of SPNEGO library fbopenssl]), [
[ SPNEGO_ROOT="$withval" SPNEGO_ROOT="$withval"
want_spnego="yes" ] if test x"$SPNEGO_ROOT" != xno; then
) want_spnego="yes"
fi
])
AC_MSG_CHECKING([if SPNEGO support is requested]) AC_MSG_CHECKING([if SPNEGO support is requested])
if test x"$want_spnego" = xyes; then if test x"$want_spnego" = xyes; then
@@ -683,19 +718,24 @@ AC_ARG_WITH(gssapi-includes,
AC_ARG_WITH(gssapi-libs, AC_ARG_WITH(gssapi-libs,
AC_HELP_STRING([--with-gssapi-libs=DIR], AC_HELP_STRING([--with-gssapi-libs=DIR],
[Specify location of GSSAPI libs]), [Specify location of GSSAPI libs]),
[ GSSAPI_LIBS="-L$withval -lgssapi" [ GSSAPI_LIBS="-L$withval"
want_gss="yes" ] want_gss="yes" ]
) )
AC_ARG_WITH(gssapi, AC_ARG_WITH(gssapi,
AC_HELP_STRING([--with-gssapi=DIR], AC_HELP_STRING([--with-gssapi=DIR],
[Where to look for GSSAPI]), [Where to look for GSSAPI]), [
[ GSSAPI_ROOT="$withval" GSSAPI_ROOT="$withval"
want_gss="yes" ] if test x"$GSSAPI_ROOT" != xno; then
) want_gss="yes"
fi
])
save_CPPFLAGS="$CPPFLAGS"
AC_MSG_CHECKING([if GSSAPI support is requested]) AC_MSG_CHECKING([if GSSAPI support is requested])
if test x"$want_gss" = xyes; then if test x"$want_gss" = xyes; then
AC_MSG_RESULT(yes)
if test -z "$GSSAPI_INCS"; then if test -z "$GSSAPI_INCS"; then
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi` GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
@@ -705,7 +745,48 @@ if test x"$want_gss" = xyes; then
fi fi
CPPFLAGS="$CPPFLAGS $GSSAPI_INCS" CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
if test -z "$GSSAPI_LIB_DIR"; then AC_CHECK_HEADER(gss.h,
[
dnl found in the given dirs
AC_DEFINE(HAVE_GSSGNU, 1, [if you have the GNU gssapi libraries])
gnu_gss=yes
],
[
dnl not found, check Heimdal
AC_CHECK_HEADER(gssapi.h,
[
dnl found in the given dirs
AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have the Heimdal gssapi libraries])
],
[
dnl not found, check in gssapi/ subdir
AC_CHECK_HEADER(gssapi/gssapi.h,
[
dnl found
AC_DEFINE(HAVE_GSSMIT, 1, [if you have the MIT gssapi libraries])
],
[
dnl no header found, disabling GSS
want_gss=no
AC_MSG_WARN(disabling GSSAPI since no header files was found)
]
)
]
)
]
)
else
AC_MSG_RESULT(no)
fi
if test x"$want_gss" = xyes; then
AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
curl_gss_msg="enabled (MIT/Heimdal)"
if test -n "$gnu_gss"; then
curl_gss_msg="enabled (GNU GSS)"
LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR -lgss"
elif test -z "$GSSAPI_LIB_DIR"; then
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
gss_ldflags=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi` gss_ldflags=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
LDFLAGS="$LDFLAGS $gss_ldflags" LDFLAGS="$LDFLAGS $gss_ldflags"
@@ -715,31 +796,10 @@ if test x"$want_gss" = xyes; then
LDFLAGS="$LDFLAGS -lgssapi" LDFLAGS="$LDFLAGS -lgssapi"
fi fi
else else
LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR" LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR -lgssapi"
fi fi
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
curl_gss_msg="enabled"
AC_CHECK_HEADER(gssapi.h,
[
dnl found in the given dirs
AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have the Heimdal gssapi libraries])
],
[
dnl not found, check in gssapi/ subdir
AC_CHECK_HEADER(gssapi/gssapi.h,
dnl found
AC_DEFINE(HAVE_GSSMIT, 1, [if you have the MIT gssapi libraries])
)
]
)
else else
AC_MSG_RESULT(no) CPPFLAGS="$save_CPPFLAGS"
fi fi
dnl ********************************************************************** dnl **********************************************************************
@@ -751,7 +811,7 @@ OPT_SSL=off
dnl Default to no CA bundle dnl Default to no CA bundle
ca="no" ca="no"
AC_ARG_WITH(ssl,dnl AC_ARG_WITH(ssl,dnl
AC_HELP_STRING([--with-ssl=PATH],[where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)]) AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--without-ssl], [disable SSL]), AC_HELP_STRING([--without-ssl], [disable SSL]),
OPT_SSL=$withval) OPT_SSL=$withval)
@@ -768,20 +828,24 @@ if test X"$OPT_SSL" != Xno; then
dnl only do pkg-config magic when not cross-compiling dnl only do pkg-config magic when not cross-compiling
PKGTEST="yes" PKGTEST="yes"
fi fi
EXTRA_SSL=/usr/local/ssl ;; PREFIX_OPENSSL=/usr/local/ssl
LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
;;
off) off)
dnl no --with-ssl option given, just check default places dnl no --with-ssl option given, just check default places
if test x$cross_compiling != xyes; then if test x$cross_compiling != xyes; then
dnl only do pkg-config magic when not cross-compiling dnl only do pkg-config magic when not cross-compiling
PKGTEST="yes" PKGTEST="yes"
fi fi
EXTRA_SSL= ;; PREFIX_OPENSSL=
;;
*) *)
dnl check the given --with-ssl spot dnl check the given --with-ssl spot
PKGTEST="no" PKGTEST="no"
EXTRA_SSL=$OPT_SSL PREFIX_OPENSSL=$OPT_SSL
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib$libsuff" LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include" LDFLAGS="$LDFLAGS -L$LIB_OPENSSL"
CPPFLAGS="$CPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
;; ;;
esac esac
@@ -803,6 +867,8 @@ if test X"$OPT_SSL" != Xno; then
SSL_LDFLAGS=`$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` SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
LIB_OPENSSL=`echo $SSL_LDFLAGS | sed -e 's/-L//g'`
dnl use the values pkg-config reported dnl use the values pkg-config reported
LIBS="$LIBS $SSL_LIBS" LIBS="$LIBS $SSL_LIBS"
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS" CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
@@ -832,8 +898,8 @@ if test X"$OPT_SSL" != Xno; then
HAVECRYPTO="yes" HAVECRYPTO="yes"
LIBS="-lcrypto $LIBS" LIBS="-lcrypto $LIBS"
],[ ],[
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib$libsuff" LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include" CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[ AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
HAVECRYPTO="yes" HAVECRYPTO="yes"
LIBS="-lcrypto $LIBS"], [ LIBS="-lcrypto $LIBS"], [
@@ -918,11 +984,15 @@ if test X"$OPT_SSL" != Xno; then
fi fi
if test "$OPENSSL_ENABLED" = "1"; then if test "$OPENSSL_ENABLED" = "1"; then
dnl when the ssl shared libs were found in a path that the run-time linker if test -n "$LIB_OPENSSL"; then
dnl doesn't search through, we need to add it to LD_LIBRARY_PATH to dnl when the ssl shared libs were found in a path that the run-time
dnl prevent further configure tests to fail due to this dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$EXTRA_SSL/lib$libsuff" dnl to prevent further configure tests to fail due to this
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_OPENSSL"
export LD_LIBRARY_PATH export LD_LIBRARY_PATH
AC_MSG_NOTICE([Added $LIB_OPENSSL to LD_LIBRARY_PATH])
fi
fi fi
fi fi
@@ -964,7 +1034,7 @@ dnl FIX: only check for GnuTLS if OpenSSL is not enabled
dnl ---------------------------------------------------- dnl ----------------------------------------------------
dnl Default to compiler & linker defaults for GnuTLS files & libraries. dnl Default to compiler & linker defaults for GnuTLS files & libraries.
OPT_GNUTLS=off OPT_GNUTLS=no
AC_ARG_WITH(gnutls,dnl AC_ARG_WITH(gnutls,dnl
AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to the installation root (default: /usr/local/)]) AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to the installation root (default: /usr/local/)])
@@ -973,7 +1043,7 @@ AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]),
if test "$OPENSSL_ENABLED" != "1"; then if test "$OPENSSL_ENABLED" != "1"; then
if test X"$OPT_GNUTLS" != Xoff; then if test X"$OPT_GNUTLS" != Xno; then
if test "x$OPT_GNUTLS" = "xyes"; then if test "x$OPT_GNUTLS" = "xyes"; then
check=`libgnutls-config --version 2>/dev/null` check=`libgnutls-config --version 2>/dev/null`
if test -n "$check"; then if test -n "$check"; then
@@ -993,10 +1063,10 @@ if test "$OPENSSL_ENABLED" != "1"; then
fi fi
if test -n "$addlib"; then if test -n "$addlib"; then
CLEANLDFLAGS="$LDFLAGS" CLEANLIBS="$LIBS"
CLEANCPPFLAGS="$CPPFLAGS" CLEANCPPFLAGS="$CPPFLAGS"
LDFLAGS="$LDFLAGS $addlib" LIBS="$LIBS $addlib"
if test "$addcflags" != "-I/usr/include"; then if test "$addcflags" != "-I/usr/include"; then
CPPFLAGS="$CPPFLAGS $addcflags" CPPFLAGS="$CPPFLAGS $addcflags"
fi fi
@@ -1009,7 +1079,7 @@ if test "$OPENSSL_ENABLED" != "1"; then
curl_ssl_msg="enabled (GnuTLS)" curl_ssl_msg="enabled (GnuTLS)"
], ],
[ [
LDFLAGS="$CLEANLDFLAGS" LIBS="$CLEANLIBS"
CPPFLAGS="$CLEANCPPFLAGS" CPPFLAGS="$CLEANCPPFLAGS"
]) ])
@@ -1023,6 +1093,7 @@ if test "$OPENSSL_ENABLED" != "1"; then
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gtlsprefix/lib$libsuff" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gtlsprefix/lib$libsuff"
export LD_LIBRARY_PATH export LD_LIBRARY_PATH
AC_MSG_NOTICE([Added $gtlsprefix/lib$libsuff to LD_LIBRARY_PATH])
fi fi
fi fi
@@ -1168,7 +1239,6 @@ case "$LIBIDN" in
dnl if there is a given path, check that FIRST dnl if there is a given path, check that FIRST
if test -n "$LIBIDN"; then if test -n "$LIBIDN"; then
if test "x$LIBIDN" != "xyes"; then if test "x$LIBIDN" != "xyes"; then
AC_MSG_WARN([moo moo $LIBIDN])
oldLDFLAGS=$LDFLAGS oldLDFLAGS=$LDFLAGS
oldCPPFLAGS=$CPPFLAGS oldCPPFLAGS=$CPPFLAGS
LDFLAGS="$LDFLAGS -L$LIBIDN/lib" LDFLAGS="$LDFLAGS -L$LIBIDN/lib"
@@ -1234,8 +1304,8 @@ AC_HELP_STRING([--enable-thread],[look for thread-safe functions]),
if test X"$OPT_THREAD" = Xoff if test X"$OPT_THREAD" = Xoff
then then
AC_DEFINE(DISABLED_THREADSAFE, 1, \ AC_DEFINE(DISABLED_THREADSAFE, 1,
Set to explicitly specify we don't want to use thread-safe functions) [Set to explicitly specify we don't want to use thread-safe functions])
else else
if test "$ipv6" != "yes"; then if test "$ipv6" != "yes"; then
dnl dig around for gethostbyname_r() dnl dig around for gethostbyname_r()
@@ -1254,7 +1324,7 @@ else
dnl is there a strerror_r() dnl is there a strerror_r()
CURL_CHECK_STRERROR_R() CURL_CHECK_STRERROR_R()
AC_CHECK_FUNCS( gmtime_r ) checkfor_gmtime_r="yes"
fi fi
dnl for recent AIX versions, we skip all the thread-safe checks above since dnl for recent AIX versions, we skip all the thread-safe checks above since
@@ -1290,6 +1360,46 @@ if test "x$RECENTAIX" = "xyes"; then
dnl is there a strerror_r() dnl is there a strerror_r()
CURL_CHECK_STRERROR_R() CURL_CHECK_STRERROR_R()
checkfor_gmtime_r="yes"
fi
if test x$cross_compiling != xyes; then
if test x$checkfor_gmtime_r = xyes; then
dnl if gmtime_r was found, verify that it actuall works, as (at least) HPUX
dnl 10.20 is known to have a buggy one. If it doesn't work, disable use of
dnl it.
AC_MSG_CHECKING([if gmtime_r exists and works])
AC_RUN_IFELSE([[
#include <time.h>
int main(void)
{
time_t local = 1170352587;
struct tm *gmt;
struct tm keeper;
putenv("TZ=CST6CDT");
tzset();
gmt = gmtime_r(&local, &keeper);
if(gmt) {
return 0;
}
return 1; /* failure */
}
]],
dnl success, do nothing
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GMTIME_R, 1, [if you have (a working) gmtime_r])
,
dnl failure, now disable the function
AC_MSG_RESULT(no)
,
dnl not invoked when crosscompiling)
])
fi
else
dnl and for crosscompilings
AC_CHECK_FUNCS(gmtime_r) AC_CHECK_FUNCS(gmtime_r)
fi fi
@@ -1301,7 +1411,8 @@ dnl **********************************************************************
dnl Checks for header files. dnl Checks for header files.
AC_HEADER_STDC AC_HEADER_STDC
dnl First check for the very most basic headers. Then we can use these
dnl Now check for the very most basic headers. Then we can use these
dnl ones as default-headers when checking for the rest! dnl ones as default-headers when checking for the rest!
AC_CHECK_HEADERS( AC_CHECK_HEADERS(
sys/types.h \ sys/types.h \
@@ -1328,8 +1439,6 @@ AC_CHECK_HEADERS(
fcntl.h \ fcntl.h \
dlfcn.h \ dlfcn.h \
alloca.h \ alloca.h \
winsock.h \
winsock2.h \
time.h \ time.h \
io.h \ io.h \
pwd.h \ pwd.h \
@@ -1340,6 +1449,8 @@ AC_CHECK_HEADERS(
libgen.h \ libgen.h \
locale.h \ locale.h \
errno.h \ errno.h \
arpa/tftp.h \
sys/filio.h \
setjmp.h, setjmp.h,
dnl to do if not found dnl to do if not found
[], [],
@@ -1397,7 +1508,9 @@ fi
AC_CHECK_TYPE(ssize_t, , AC_CHECK_TYPE(ssize_t, ,
AC_DEFINE(ssize_t, int, [the signed version of size_t])) AC_DEFINE(ssize_t, int, [the signed version of size_t]))
TYPE_SOCKLEN_T # Check for socklen_t or equivalent
CURL_CHECK_TYPE_SOCKLEN_T
TYPE_IN_ADDR_T TYPE_IN_ADDR_T
TYPE_SOCKADDR_STORAGE TYPE_SOCKADDR_STORAGE
@@ -1408,6 +1521,13 @@ dnl Checks for library functions.
dnl AC_PROG_GCC_TRADITIONAL dnl AC_PROG_GCC_TRADITIONAL
AC_TYPE_SIGNAL AC_TYPE_SIGNAL
dnl AC_FUNC_VPRINTF dnl AC_FUNC_VPRINTF
case $host in
*msdosdjgpp)
ac_cv_func_pipe=no
skipcheck_pipe=yes
AC_MSG_NOTICE([skip check for pipe on msdosdjgpp])
;;
esac
AC_CHECK_FUNCS( strtoll \ AC_CHECK_FUNCS( strtoll \
socket \ socket \
select \ select \
@@ -1440,12 +1560,15 @@ AC_CHECK_FUNCS( strtoll \
ftruncate \ ftruncate \
pipe \ pipe \
poll \ poll \
getprotobyname \
getrlimit \ getrlimit \
setrlimit, setrlimit,
dnl if found dnl if found
[], [],
dnl if not found, $ac_func is the name we check for dnl if not found, $ac_func is the name we check for
func="$ac_func" func="$ac_func"
eval skipcheck=\$skipcheck_$func
if test "x$skipcheck" != "xyes"; then
AC_MSG_CHECKING([deeper for $func]) AC_MSG_CHECKING([deeper for $func])
AC_TRY_LINK( [], AC_TRY_LINK( [],
[ $func ();], [ $func ();],
@@ -1455,21 +1578,38 @@ dnl if not found, $ac_func is the name we check for
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]), AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
AC_MSG_RESULT(but still no) AC_MSG_RESULT(but still no)
) )
fi
) )
dnl For some reason, the check above doesn't properly detect select() with dnl For some reason, the check above doesn't properly detect select() with
dnl Msys/Mingw dnl Msys/Mingw
if test "$ac_cv_func_select" != "yes"; then if test "$ac_cv_func_select" = "no"; then
AC_MSG_CHECKING([for select in ws2_32]) AC_MSG_CHECKING([for select in ws2_32])
AC_TRY_LINK([#include <winsock2.h>], AC_TRY_LINK([
[select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);], #undef inline
[ dnl worked! #ifdef HAVE_WINDOWS_H
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#endif
],[
select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);
],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
HAVE_SELECT="1" HAVE_SELECT="1"
AC_DEFINE_UNQUOTED(HAVE_SELECT,1)], AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
[AC_MSG_ERROR(You can't compile without a select)] [Define to 1 if you have the select function.])
) ],[
AC_MSG_ERROR([You can't compile without a select])
])
fi fi
dnl sigsetjmp() might be a macro and no function so if it isn't found already dnl sigsetjmp() might be a macro and no function so if it isn't found already
@@ -1493,8 +1633,25 @@ AC_CHECK_DECL(basename, ,
#ifdef HAVE_LIBGEN_H #ifdef HAVE_LIBGEN_H
#include <libgen.h> #include <libgen.h>
#endif #endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
) )
AC_CHECK_DECL(inet_pton, ,
AC_DEFINE(HAVE_NO_INET_PTON_PROTO, 1,
[Defined if no inet_pton() prototype available]),
[
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
]
)
dnl Check if the getnameinfo function is available
dnl and get the types of five of its arguments.
CURL_CHECK_FUNC_GETNAMEINFO
AC_MSG_CHECKING([if we are Mac OS X (to disable poll)]) AC_MSG_CHECKING([if we are Mac OS X (to disable poll)])
disable_poll=no disable_poll=no
case $host in case $host in
@@ -1594,7 +1751,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
*) AC_MSG_RESULT(yes) *) AC_MSG_RESULT(yes)
if test "x$IPV6_ENABLED" = "x1"; then if test "x$IPV6_ENABLED" = "x1"; then
AC_MSG_ERROR([ares doesn't work with ipv6, disable ipv6 to use ares]) AC_MSG_NOTICE([ares may not work properly with ipv6])
fi fi
AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support]) AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support])
@@ -1603,7 +1760,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
AC_SUBST(HAVE_ARES) AC_SUBST(HAVE_ARES)
curl_ares_msg="enabled" curl_ares_msg="enabled"
LIBS="$LIBS -lcares" LIBS="-lcares $LIBS"
dnl For backwards compatibility default to includes/lib in srcdir/ares dnl For backwards compatibility default to includes/lib in srcdir/ares
dnl If a value is specified it is assumed that the libs are in $val/lib dnl If a value is specified it is assumed that the libs are in $val/lib
@@ -1688,7 +1845,6 @@ AC_HELP_STRING([--disable-sspi],[Disable SSPI]),
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support]) AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support])
AC_SUBST(USE_WINDOWS_SSPI) AC_SUBST(USE_WINDOWS_SSPI)
LIBS="$LIBS -lsecur32"
curl_sspi_msg="yes" curl_sspi_msg="yes"
;; ;;
*) *)
@@ -1798,6 +1954,8 @@ AC_CONFIG_FILES([Makefile \
packages/EPM/curl.list \ packages/EPM/curl.list \
packages/EPM/Makefile \ packages/EPM/Makefile \
packages/vms/Makefile \ packages/vms/Makefile \
packages/AIX/Makefile \
packages/AIX/RPM/Makefile \
curl-config \ curl-config \
libcurl.pc libcurl.pc
]) ])

View File

@@ -60,7 +60,9 @@ while test $# -gt 0; do
--feature|--features) --feature|--features)
if test "@USE_SSLEAY@" = "1"; then if test "@USE_SSLEAY@" = "1"; then
echo "SSL" echo "SSL"
NTLM=1 NTLM=1 # OpenSSL implies NTLM
elif test -n "@USE_GNUTLS@"; then
echo "SSL"
fi fi
if test "@KRB4_ENABLED@" = "1"; then if test "@KRB4_ENABLED@" = "1"; then
echo "KRB4" echo "KRB4"
@@ -99,9 +101,6 @@ while test $# -gt 0; do
echo "FTPS" echo "FTPS"
fi fi
fi fi
if test "@CURL_DISABLE_GOPHER@" != "1"; then
echo "GOPHER"
fi
if test "@CURL_DISABLE_FILE@" != "1"; then if test "@CURL_DISABLE_FILE@" != "1"; then
echo "FILE" echo "FILE"
fi fi
@@ -114,6 +113,9 @@ while test $# -gt 0; do
if test "@CURL_DISABLE_DICT@" != "1"; then if test "@CURL_DISABLE_DICT@" != "1"; then
echo "DICT" echo "DICT"
fi fi
if test "@CURL_DISABLE_TFTP@" != "1"; then
echo "TFTP"
fi
;; ;;
--version) --version)
echo libcurl @VERSION@ echo libcurl @VERSION@

View File

@@ -82,8 +82,8 @@ Lisp
Lua Lua
Written by Steve Dekorte LuaCURL Written by Alexander Marinov
http://curl.haxx.se/libcurl/lua/ http://luacurl.luaforge.net/
Mono Mono
@@ -150,6 +150,11 @@ 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/
S-Lang
S-Lang binding written by John E Davis
http://www.jedsoft.org/slang/modules/curl.html
Tcl Tcl
Tclcurl is written by Andr<64>s Garc<72>a Tclcurl is written by Andr<64>s Garc<72>a
@@ -161,7 +166,7 @@ Visual Basic
http://sourceforge.net/projects/libcurl-vb/ http://sourceforge.net/projects/libcurl-vb/
Q Q
The libcurl module is part of the default install
http://q-lang.sourceforge.net/ http://q-lang.sourceforge.net/
wxWidgets wxWidgets

View File

@@ -4,11 +4,11 @@
| (__| |_| | _ <| |___ | (__| |_| | _ <| |___
\___|\___/|_| \_\_____| \___|\___/|_| \_\_____|
To Think About When Contributing Source Code When Contributing Source Code
This document is intended to offer some simple guidelines that can be useful This document is intended to offer guidelines that can be useful to keep in
to keep in mind when you decide to contribute to the project. This concerns mind when you decide to contribute to the project. This concerns new features
new features as well as corrections to existing flaws or bugs. as well as corrections to existing flaws or bugs.
Join the Community Join the Community
@@ -20,13 +20,26 @@ Join the Community
The License Issue The License Issue
When contributing with code, you agree to put your changes and new code under When contributing with code, you agree to put your changes and new code under
the same license curl and libcurl is already using unless stated otherwise. the same license curl and libcurl is already using unless stated and agreed
otherwise.
If you add a larger piece of code, you can opt to make that file or set of If you add a larger piece of code, you can opt to make that file or set of
files to use a different license as long as they don't enforce any changes to files to use a different license as long as they don't enforce any changes to
the rest of the package and they make sense. Such "separate parts" can not be the rest of the package and they make sense. Such "separate parts" can not be
GPL (as we don't want the GPL virus to attack users of libcurl) but they must GPL licensed (as we don't want copyleft to affect users of libcurl) but they
use "GPL compatible" licenses. must use "GPL compatible" licenses (as we want to allow users to use libcurl
properly in GPL licensed environments).
When changing existing source code, you do not alter the copyright of the
original file(s). The copyright will still be owned by the original
creator(s) or those who have been assigned copyright by the original
author(s).
By submitting a patch to the curl project, you are assumed to have the right
to the code and to be allowed by your employer or whatever to hand over that
patch/code to us. We will credit you for your changes as far as possible, to
give credit but also to keep a trace back to who made what changes. Please
always provide us with your full real name when contributing!
What To Read What To Read

226
docs/DISTRO-DILEMMA Normal file
View File

@@ -0,0 +1,226 @@
Date: October 27, 2005
Author: Daniel Stenberg <daniel@haxx.se>
URL: http://curl.haxx.se/legal/distro-dilemma.html
Condition
This document is written to describe the situation as it is right
now. libcurl 7.15.0 is currently the latest version available. Things may (or
perhaps will) of course change in the future.
This document reflects my view and understanding of these things. Please tell
me where and how you think I'm wrong, and I'll try to correct my mistakes.
Background
The Free Software Foundation has deemed the Original BSD license[1] to be
"incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but
the point is the same: if you distribute a binary version of a GPL program,
it MUST NOT be linked with any Original BSD-licensed parts or
libraries. Doing so will violate the GPL license. For a long time, very many
GPL licensed programs have avoided this license mess by adding an
exception[8] to their license. And many others have just closed their eyes
for this problem.
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
our plates?
libcurl is only a little library. libcurl can be built to use OpenSSL for its
SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5].
If libcurl built to use OpenSSL is used by a GPL-licensed application and you
decide to distribute a binary version of it (Linux distros - for example -
tend to), you have a clash. GPL vs Original BSD.
This dilemma is not libcurl-specific nor is it specific to any particular
Linux distro. (This article mentions and refers to Debian several times, but
only because Debian seems to be the only Linux distro to have faced this
issue yet since no other distro is shipping libcurl built with two SSL
libraries.)
Part of the Operating System
This would not be a problem if the used lib would be considered part of the
underlying operating system, as then the GPL license has an exception
clause[6] that allows applications to use such libs without having to be
allowed to distribute it or its sources. Possibly some distros will claim
that OpenSSL is part of their operating system.
Debian does however not take this stance and has officially(?) claimed that
OpenSSL is not a required part of the Debian operating system
Debian-legal
In August 2004 I figured I should start pulling people's attention to this to
see if anyone has any bright ideas or if they would dismiss my worries based
on some elegant writing I had missed somewhere:
My post to debian-legal on August 12 2004:
http://lists.debian.org/debian-legal/2004/08/msg00279.html
Several people agreed then that this is a known and rather big problem, but
the following discussion didn't result in much.
GnuTLS
With the release of libcurl 7.14.0 (May 2005), it can now get built to use
GnuTLS instead of OpenSSL. GnuTLS is a LGPL[7] licensed library that offers a
matching set of features as OpenSSL does. Now, you can build and distribute
an SSL capable libcurl without including any Original BSD licensed code.
I believe Debian is the first distro to provide libcurl/GnutTLS packages.
GnuTLS vs OpenSSL
While these two libraries offer similar features, they are not equal. Both
libraries have features the other one lacks. libcurl does not (yet) offer a
standardized stable ABI if you decide to switch from using libcurl-openssl to
libcurl-gnutls or vice versa. The GnuTLS support is very recent in libcurl
and it has not been tested nor used very extensively, while the OpenSSL
equivalent code has been used and thus matured for more than seven (7) years.
In August 2005, the debian-devel mailing list discovered the license issue as
a GPL licensed application wanted SSL capabilities from libcurl and thus was
forced to use the GnuTLS powered libcurl. For a reason that is unknown to me,
the application authors didn't want to or was unable to add an exception to
their GPL license. Alas, the license problem hit the fan again.
GnuTLS
- LGPL licensened
- supports SRP
- lacks SSLv2 support
- lacks MD2 support (used by at least some CA certs)
OpenSSL
- Original BSD licensened
- lacks SRP
- supports SSLv2
- older and more widely used
The Better License, Original BSD or LGPL?
It isn't obvious or without debate to any objective interested party that
either of these licenses are the "better" or even the "preferred" one in a
generic situation.
Instead, I think we should accept the fact that the SSL/TLS libraries and
their different licenses will fit different applications and their authors
differently depending on the applications' licenses and their general usage
pattern (considering how LGPL libraries for example can be burdensome for
embedded systems usage).
In Debian land, there seems to be a common opinion that LGPL is "maximally
compatible" with apps while Original BSD is not. Like this:
http://lists.debian.org/debian-devel/2005/09/msg01417.html
More SSL Libraries
In libcurl, there's no stopping us here. There are at least a few more Open
Source/Free SSL/TLS libraries and we would very much like to support them as
well, to offer application authors an even wider scope of choice.
Application Angle of this Problem
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
default), and applications are built/linked to use that single lib. Replacing
one libcurl instance with another one that uses the other SSL/TLS library
might break one or more applications (due to ABI differences and/or different
feature set). You want your application to use the libcurl it was built for.
Project cURL Angle of this Problem
We distribute libcurl and everyone may build libcurl with either library. At
their choice. This problem is not directly a problem of ours. It merely
affects users - GPL application authors only - of our lib as it comes
included and delivered on some distros.
libcurl has different ABI when built with different SSL/TLS libraries due to
two reasons:
1. No one has worked on fixing this. The mutex/lock callbacks should be set
with a generic libcurl function that should use the proper underlying
functions.
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
but simply requires OpenSSL.
Distro Angle of this Problem
A distro can provide separate libcurls built with different SSL/TLS libraries
to work around this, but at least Debian seems to be very hostile against
such an approach, probably since it makes things like devel packages for the
different libs collide since they would provide the same include files and
man pages etc.
Fixing the Only Problem
The only problem is thus for distributions that want to offer libcurl
versions built with more than one SSL/TLS library.
Debian is now (since mid September 2005) providing two different devel
packages, one for libcurl built with OpenSSL and one built with GnuTLS. They
use different .so names and can this both be installed in a single system
simultaneously. This has previously been said as a transitional system not
desired to keep in the long run.
Since multiple libcurl binaries using different names are ruled out, we need
to come up with a way to have one single libcurl that someone uses different
underlying libraries. The best(?) approach currently suggested involves this:
A new intermediate library (named lib2 so far in the discussions) with the
single purpose of providing libcurl with SSL/TLS capabilities. It would have
a unified API and ABI no matter what underlying library it would use.
There would be one lib2 binary provided for each supported SSL/TLS library.
For example: lib2-openssl, lib2-gnutls, lib2-yassl, lib2-matrixssl and
lib2-nossl. Yes, take note of the last one that provides the lib2 ABI but
that lacks the actual powers.
When libcurl is built and linked, it will be linked against a lib2 with the
set ABI.
When you link an app against libcurl, it would also need to provide one of
the (many) lib2 libs to decide what approach that fits the app. An app that
doesn't want SSL at all would still need to link with the lib2-nossl lib.
GPL apps can pick the lib2-gnutls, others may pick the lib2-openssl.
This concept works equally well both for shared and static libraries.
A positive side effect of this approach could be a more generic "de facto"
standard API for SSL/TLS libraries.
When Will This Happen
Note again that this is not a problem in curl, it doesn't solve any actual
technical problems in our project. Don't hold your breath for this to happen
very soon (if at all) unless you step forward and contribute.
The suggestion that is outlined above is still only a suggestion. Feel free
to bring a better idea!
Also, to keep in mind: I don't want this new concept to have too much of an
impact on the existing code. Preferably it should be possible to build the
code like today (without the use of lib2), should you decide to ignore the
problems outlined in this document.
Update: Work on this has been initiated by Richard Atterer:
http://curl.haxx.se/mail/lib-2005-09/0066.html
Footnotes
[1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6
[2] = http://www.fsf.org/licensing/essays/bsd.html
[3] = http://www.fsf.org/licensing/licenses/gpl.html
[4] = http://curl.haxx.se/docs/copyright.html
[5] = http://www.openssl.org/source/license.html
[6] = http://www.fsf.org/licensing/licenses/gpl.html end of section 3
[7] = http://www.fsf.org/licensing/licenses/lgpl.html
[8] = http://en.wikipedia.org/wiki/OpenSSL_exception
Feedback/Updates provided by
Eric Cooper

188
docs/FAQ
View File

@@ -1,4 +1,4 @@
Updated: April 13, 2005 (http://curl.haxx.se/docs/faq.html) Updated: November 2, 2005 (http://curl.haxx.se/docs/faq.html)
_ _ ____ _ _ _ ____ _
___| | | | _ \| | ___| | | | _ \| |
/ __| | | | |_) | | / __| | | | |_) | |
@@ -16,6 +16,8 @@ FAQ
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?
1.9 Where do I buy commercial support for curl?
1.10 How many are using curl?
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
@@ -64,6 +66,8 @@ FAQ
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work! 4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
4.11 Why does my HTTP range requests return the full document? 4.11 Why does my HTTP range requests return the full document?
4.12 Why do I get "certificate verify failed" ? 4.12 Why do I get "certificate verify failed" ?
4.13 Why is curl -R on Windows one hour off?
4.14 Redirects work in browser but not with curl!
5. libcurl Issues 5. libcurl Issues
5.1 Is libcurl thread-safe? 5.1 Is libcurl thread-safe?
@@ -86,6 +90,7 @@ FAQ
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?
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?
6.7 What are my obligations when using libcurl in my commerical apps?
7. PHP/CURL Issues 7. PHP/CURL Issues
7.1 What is PHP/CURL? 7.1 What is PHP/CURL?
@@ -109,7 +114,7 @@ FAQ
libcurl libcurl
A free and easy-to-use client-side URL transfer library, supporting FTP, A free and easy-to-use client-side URL transfer library, supporting FTP,
FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports FTPS, HTTP, HTTPS, TELNET, DICT, FILE and LDAP. libcurl supports
HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP
form based upload, proxies, cookies, user+password authentication, file form based upload, proxies, cookies, user+password authentication, file
transfer resume, http proxy tunneling and more! transfer resume, http proxy tunneling and more!
@@ -127,16 +132,15 @@ FAQ
A command line tool for getting or sending files using URL syntax. A command line tool for getting or sending files using URL syntax.
Since curl uses libcurl, it supports a range of common Internet protocols, Since curl uses libcurl, it supports a range of common Internet protocols,
currently including HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and currently including HTTP, HTTPS, FTP, FTPS, LDAP, DICT, TELNET and FILE.
FILE.
We pronounce curl and cURL with an initial k sound: [kurl]. We pronounce curl and cURL with an initial k sound: [kurl].
NOTE: there are numerous sub-projects and related projects that also use the There are numerous sub-projects and related projects that also use the word
word curl in the project names in various combinations, but you should take curl in the project names in various combinations, but you should take
notice that this FAQ is directed at the command-line tool named curl (and notice that this FAQ is directed at the command-line tool named curl (and
libcurl the library), and may therefore not be valid for other curl-related libcurl the library), and may therefore not be valid for other curl-related
projects. projects. (There is however a small section for the PHP/CURL in this FAQ.)
1.2 What is libcurl? 1.2 What is libcurl?
@@ -146,6 +150,10 @@ 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.
libcurl is most probably the most portable, most powerful and most often
used C-based multi-platform file transfer library on this planet - be it
open source or commercial.
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
@@ -197,15 +205,14 @@ FAQ
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. Daniel Stenberg is
Stenberg writes the major parts, but other persons' submissions are project leader and main developer, 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
condition that developers agree on that the fixes are good). condition that developers agree on that the fixes are good).
The list of contributors in the docs/THANKS file is only a small part of all The full list of the more than 450 contributors is found in the docs/THANKS
the people that every day provide us with bug reports, suggestions, ideas file.
and source code.
curl is developed by a community, with Daniel at the wheel. curl is developed by a community, with Daniel at the wheel.
@@ -220,12 +227,8 @@ FAQ
have sponsored certain parts of the development in the past and I hope some have sponsored certain parts of the development in the past and I hope some
will continue to do so in the future. 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, consider a donation or a banner-program
doing that would be to buy "gift certificates" at useful online shopping or even better: by helping us coding, documenting, testing etc.
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
us through a banner-program or even better: by helping us coding,
documenting, testing etc. You're welcome to send us a buck using paypal, as
described here: http://curl.haxx.se/donation.html
1.7 What about CURL from curl.com? 1.7 What about CURL from curl.com?
@@ -256,6 +259,58 @@ FAQ
users thanks to the web based archives of the mailing lists), thus saving us users thanks to the web based archives of the mailing lists), thus saving us
from having to repeat ourselves even more. Thanks for respecting this. from having to repeat ourselves even more. Thanks for respecting this.
If you have found or simply suspect a security problem in curl or libcurl,
mail curl-security at haxx.se (closed list of receivers, mails are not
disclosed) and tell. Then we can produce a fix in a timely manner before the
flaw is announced to the world, thus lessen the impact the problem will have
on existing users.
1.9 Where do I buy commercial support for curl?
curl is fully open source. It means you can hire any skilled engineer to fix
your curl-related problems.
We list available alternatives on the curl web site:
http://curl.haxx.se/support.html
1.10 How many are using curl?
It is impossible to tell.
We don't know how many users that knowingly have installed and use curl.
We don't know how many users that use curl without knowing that they are in
fact using it.
We don't know how many users that downloaded or installed curl and then
never use it.
Some facts to use as input to the math:
curl packages have been downloaded from the curl.haxx.se site well over a
million times. curl is installed by default with most Linux
distributions. curl is installed by default with Mac OS X. curl and libcurl
as used by numerous applications that include libcurl binaries in their
distribution packages (like Adobe Acrobat Reader and Google Earth).
More than 40 known named companies use curl in commercial environments and
products. More than 100 known named open source projects depend on
(lib)curl.
In a poll on the curl web site mid-2005, more than 50% of the 300+ answers
estimated a user base of one million users or more.
In March 2005, the "Linux Counter project" estimated a total Linux user base
of some 29 millions, while Netcraft detected some 4 million "active" Linux
based web servers. A guess is that a fair amount of these Linux
installations have curl installed.
http://curl.haxx.se/docs/companies.html
http://curl.haxx.se/docs/programs.html
http://curl.haxx.se/libcurl/using/apps.html
http://counter.li.org/estimates.php
http://news.netcraft.com/archives/2005/03/14/fedora_makes_rapid_progress.html
2. Install Related Problems 2. Install Related Problems
@@ -396,6 +451,8 @@ FAQ
curl -L http://redirector.com curl -L http://redirector.com
Not all redirects are HTTP ones, see 4.14
3.9 How do I use curl in my favorite programming language? 3.9 How do I use curl in my favorite programming language?
There exist many language interfaces/bindings for curl that integrates it There exist many language interfaces/bindings for curl that integrates it
@@ -509,22 +566,24 @@ FAQ
- Server certificate. The server you communicate with has a server - Server certificate. The server you communicate with has a server
certificate. You can and should verify this certificate to make sure that certificate. You can and should verify this certificate to make sure that
you are truly talking to the real server and not a server impersonating you are truly talking to the real server and not a server impersonating
it. The server certificate verification process is made by using a it.
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 - 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 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 that was signed by one of the authorities in the bundle. curl comes with a
default CA cert bundle. You can override the default. default CA cert bundle. You can override the default.
The server certificate verification 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.
3.17 How do I list the root dir of an FTP server? 3.17 How do I list the root dir of an FTP server?
There are two ways. The way defined in the RFC is to use an encoded slash There are two ways. The way defined in the RFC is to use an encoded slash
@@ -541,6 +600,8 @@ FAQ
No. No.
But you could easily write your own program using libcurl to do such stunts.
4. Running Problems 4. Running Problems
@@ -734,6 +795,28 @@ 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
4.13 Why is curl -R on Windows one hour off?
During daylight savings time, when -R is used, curl will set a time that
appears one hour off. This happens due to a flaw in how Windows stores and
uses file modification times and it is not easily worked around. For details
on this problem, read this: http://www.codeproject.com/datetime/dstbugs.asp
4.14 Redirects work in browser but not with curl!
curl supports HTTP redirects fine (see item 3.8). Browsers generally support
at least two other ways to perform directs that curl does not:
- Meta tags. You can write a HTML tag that will cause the browser to
redirect to another given URL after a certain time.
- Javascript. You can write a javascript program embeded in a HTML page
that redirects the browser to another given URL.
There is no way to make curl follow these redirects. You must either
manually figure out what the page is set to do, or you write a script that
parses the results and fetches the new URL.
5. libcurl Issues 5. libcurl Issues
@@ -754,7 +837,7 @@ FAQ
need to provide locking function(s) for libgcrypt (which is used by GnuTLS need to provide locking function(s) for libgcrypt (which is used by GnuTLS
for the crypto functions). for the crypto functions).
[informative link missing] http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
5.2 How can I receive all data into a large memory chunk? 5.2 How can I receive all data into a large memory chunk?
@@ -766,8 +849,8 @@ FAQ
One solution to this problem could be to have a pointer to a struct that you One solution to this problem could be to have a pointer to a struct that you
pass to the callback function. You set the pointer using the pass to the callback function. You set the pointer using the
curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to CURLOPT_WRITEDATA option. Then that pointer will be passed to the callback
the callback instead of a FILE * to a file: instead of a FILE * to a file:
/* imaginary struct */ /* imaginary struct */
struct MemoryStruct { struct MemoryStruct {
@@ -874,7 +957,10 @@ FAQ
5.9 How does libcurl resolve host names? 5.9 How does libcurl resolve host names?
libcurl includes a number of different name resolve functions: libcurl supports a large a number of different name resolve functions. One
of them is picked at build-time and will be used unconditionally. Thus, if
you want to change name resolver function you must rebuild libcurl and tell
it to use a different function.
- The non-ipv6 resolver that can use one out of four host name resolve calls - The non-ipv6 resolver that can use one out of four host name resolve calls
(depending on what your system supports): (depending on what your system supports):
@@ -887,6 +973,8 @@ FAQ
- The ipv6-resolver that uses getaddrinfo() - The ipv6-resolver that uses getaddrinfo()
- The c-ares based name resolver that uses the c-ares library for resolves. - The c-ares based name resolver that uses the c-ares library for resolves.
Using this offers asynchronous name resolves but it currently has no IPv6
support.
- The Windows threaded resolver. It use: - The Windows threaded resolver. It use:
@@ -899,8 +987,8 @@ FAQ
5.10 How do I prevent libcurl from writing the response to stdout? 5.10 How do I prevent libcurl from writing the response to stdout?
libcurl provides a default built-in write function that writes received data libcurl provides a default built-in write function that writes received data
to stdout. Set a WRITEFUNCTION to receive the data, or possibly set to stdout. Set the CURLOPT_WRITEFUNCTION to receive the data, or possibly
WRITEDATA to a different FILE * handle. set CURLOPT_WRITEDATA to a different FILE * handle.
5.11 How do I make libcurl not receive the whole HTTP response? 5.11 How do I make libcurl not receive the whole HTTP response?
@@ -929,6 +1017,9 @@ 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.)
We are not lawyers and this is not legal advice. You should probably consult
one if you want true and accurate legal insights without our prejudice.
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!
@@ -973,13 +1064,38 @@ FAQ
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.
6.7 What are my obligations when using libcurl in my commerical apps?
Next to none. All you need to adhere to is the MIT-style license (stated in
the COPYING file) which basically says you have to include the copyright
notice in "all copies" and that you may not use the copyright holder's name
when promoting your software.
You do not have to release any of your source code.
You do not have to reveal or make public any changes to the libcurl source
code.
You do not have to reveal or make public that you are using libcurl within
your app.
As can be seen here: http://curl.haxx.se/docs/companies.html and
elsewhere, more and more companies are dicovering the power
of libcurl and take advantage of it even in commercial environments.
7. PHP/CURL Issues 7. PHP/CURL Issues
7.1 What is PHP/CURL? 7.1 What is PHP/CURL?
The module for PHP that makes it possible for PHP programs to access 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 functions from within PHP.
curl the command line tool and libcurl the library.
In the cURL project we call this module PHP/CURL to differentiate it from
curl the command line tool and libcurl the library. The PHP team however
does not refer to it like this (for unknown reasons). They call it plain
CURL (often using all caps) which causes much confusion to users which in
turn gives us a higher question load.
7.2 Who write PHP/CURL? 7.2 Who write PHP/CURL?

View File

@@ -62,11 +62,11 @@ HTTP
HTTPS (*1) HTTPS (*1)
- (all the HTTP features) - (all the HTTP features)
- using certificates - using client certificates
- verify server certificate - verify server certificate
- via http-proxy - via http-proxy
- select desired encryption - select desired encryption
- force usage of a specific SSL version (SSLv2, SSLv3 or TLSv1) - force usage of a specific SSL version (SSLv2(*7), SSLv3 or TLSv1)
FTP FTP
- download - download
@@ -95,6 +95,9 @@ FTPS (*1)
- implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp:// - implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
connection to use SSL for both or one of the connections connection to use SSL for both or one of the connections
TFTP
- download / upload
TELNET TELNET
- connection negotiation - connection negotiation
- custom telnet options - custom telnet options
@@ -106,10 +109,6 @@ LDAP (*2)
DICT DICT
- extended DICT URL support - extended DICT URL support
GOPHER
- GET
- via http-proxy
FILE FILE
- URL support - URL support
- "uploads" - "uploads"
@@ -118,9 +117,10 @@ FILE
FOOTNOTES FOOTNOTES
========= =========
*1 = requires OpenSSL *1 = requires OpenSSL or GnuTLS
*2 = requires OpenLDAP *2 = requires OpenLDAP
*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 *6 = requires c-ares
*7 = requires OpenSSL specificly, as GnuTLS only supports SSLv3 and TLSv1

View File

@@ -145,3 +145,9 @@ August 2004:
April 2005: April 2005:
GnuTLS can now optionally be used for the secure layer when curl is built. GnuTLS can now optionally be used for the secure layer when curl is built.
September 2005:
TFTP support was added.
More than 100,000 unique visitors of the curl web site. 25 mirrors.

View File

@@ -132,64 +132,33 @@ UNIX
Win32 Win32
===== =====
Without SSL: MingW32
-------
MingW32 (GCC-2.95) style Run the 'mingw32.bat' file to get the proper environment variables set,
------------------------ then run 'make mingw32' in the root dir. Use 'make mingw32-ssl' to build
Run the 'mingw32.bat' file to get the proper environment variables curl SSL enabled.
set, then run 'make mingw32' in the root dir.
If you have any problems linking libraries or finding header files, be If you have any problems linking libraries or finding header files, be sure
sure to verify that the provided "Makefile.m32" files use the proper to verify that the provided "Makefile.m32" files use the proper paths, and
paths, and adjust as necessary. adjust as necessary.
Cygwin style Cygwin
------------ ------
Almost identical to the unix installation. Run the configure script in
the curl root with 'sh configure'. Make sure you have the sh Almost identical to the unix installation. Run the configure script in the
executable in /bin/ or you'll see the configure fail towards the end. curl root with 'sh configure'. Make sure you have the sh executable in
/bin/ or you'll see the configure fail towards the end.
Run 'make' Run 'make'
Microsoft command line style Dev-Cpp
---------------------------- -------
Run the 'vcvars32.bat' file to get the proper environment variables
set, then run 'nmake vc' in the root dir.
The vcvars32.bat file is part of the Microsoft development See the separate INSTALL.devcpp file for details.
environment.
IDE-style MSVC from command line
------------------------- ----------------------
If you use VC++, Borland or similar compilers. Include all lib source
files in a static lib "project" (all .c and .h files that is).
(you should name it libcurl or similar)
Make the sources in the src/ drawer be a "win32 console application"
project. Name it curl.
For VC++ 6, there's an included Makefile.vc6 that should be possible
to use out-of-the-box.
With SSL:
MingW32 (GCC-2.95) style
------------------------
Run the 'mingw32.bat' file to get the proper environment variables
set, then run 'make mingw32-ssl' in the root dir.
If you have any problems linking libraries or finding header files, be
sure to look at the provided "Makefile.m32" files for the proper
paths, and adjust as necessary.
Cygwin style
------------
Haven't done, nor got any reports on how to do. It should although be
identical to the unix setup for the same purpose. See above.
Microsoft command line style
----------------------------
Run the 'vcvars32.bat' file to get a proper environment. The Run the 'vcvars32.bat' file to get a proper environment. The
vcvars32.bat file is part of the Microsoft development environment and vcvars32.bat file is part of the Microsoft development environment and
@@ -232,22 +201,14 @@ Win32
at runtime. at runtime.
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support. Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
Microsoft / Borland style Borland C++ compiler
------------------------- ---------------------
If you have OpenSSL, and want curl to take advantage of it, edit your
project properties to use the SSL include path, link with the SSL libs
and define the USE_SSLEAY symbol.
Using Borland C++ compiler version 5.5.1 (available as free download
from Borland's site)
---------------------------------------------------------------------
compile openssl compile openssl
Make sure you include the paths to curl/include and openssl/inc32 in Make sure you include the paths to curl/include and openssl/inc32 in
your bcc32.cnf file your bcc32.cnf file
eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32" eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
Check to make sure that all of the sources listed in lib/Makefile.b32 Check to make sure that all of the sources listed in lib/Makefile.b32
@@ -268,7 +229,23 @@ Win32
-L c:\openssl\out32\ssleay32.lib -L c:\openssl\out32\ssleay32.lib
simplessl.c simplessl.c
Disabling Specific Protocols:
MSVC IDE
--------
If you use VC++, Borland or similar compilers. Include all lib source
files in a static lib "project" (all .c and .h files that is).
(you should name it libcurl or similar)
Make the sources in the src/ drawer be a "win32 console application"
project. Name it curl.
For VC++ 6, there's an included Makefile.vc6 that should be possible
to use out-of-the-box.
Disabling Specific Protocols in Win32 builds
--------------------------------------------
The configure utility, unfortunately, is not available for the Windows The configure utility, unfortunately, is not available for the Windows
environment, therefore, you cannot use the various disable-protocol environment, therefore, you cannot use the various disable-protocol
@@ -283,7 +260,6 @@ Win32
CURL_DISABLE_TELNET disables TELNET CURL_DISABLE_TELNET disables TELNET
CURL_DISABLE_DICT disables DICT CURL_DISABLE_DICT disables DICT
CURL_DISABLE_FILE disables FILE CURL_DISABLE_FILE disables FILE
CURL_DISABLE_GOPHER disables GOPHER
If you want to set any of these defines you have the following If you want to set any of these defines you have the following
possibilities: possibilities:
@@ -294,10 +270,12 @@ Win32
in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project. in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project.
Important (with SSL or not): Important static libcurl usage note
When building an application that uses the static libcurl library, you -----------------------------------
must add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will
look for dynamic import symbols. When building an application that uses the static libcurl library, you must
add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
dynamic import symbols.
IBM OS/2 IBM OS/2
@@ -462,21 +440,19 @@ NetWare
- optional zlib sources (at the moment only dynamic linking with zlib.imp); - optional zlib sources (at the moment only dynamic linking with zlib.imp);
sources with NetWare Makefile can be obtained from: sources with NetWare Makefile can be obtained from:
http://www.gknw.com/mirror/zlib/ http://www.gknw.com/mirror/zlib/
- optional OpenSSL sources (version 0.9.8 or later which builds with BSD);
Set a search path to your compiler, linker and tools; if you want to have Set a search path to your compiler, linker and tools; on Linux make
zlib support then set the environment var ZLIB_PATH pointing to your zlib sure that the var OSTYPE contains the string 'linux'; and then type
sources, on Linux make sure the var OSTYPE contains the string 'linux'; 'make netware' from the top source directory; other tagets available
and finally type 'make netware' from the top source directory... are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares';
I found on some Linux systems (RH9) that OS detection didnlt work although if you need other combinations you can control the build with the
environment variables WITH_SSL, WITH_ZLIB, WITH_ARES and ENABLE_IPV6.
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 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...; 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...; don't 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 libares into curl.
Any help in testing appreciated! Any help in testing appreciated!
Builds automatically created 4 times a day from current CVS are here: Builds automatically created 8 times a day from current CVS are here:
http://www.gknw.com/mirror/curl/autobuilds/ http://www.gknw.com/mirror/curl/autobuilds/
the status of these builds can be viewed at the autobuild table: the status of these builds can be viewed at the autobuild table:
http://curl.haxx.se/auto/ http://curl.haxx.se/auto/
@@ -588,7 +564,7 @@ PORTS
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10 - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
- Sparc SunOS 4.1.X - Sparc SunOS 4.1.X
- StrongARM (and other ARM) RISC OS 3.1, 4.02 - StrongARM (and other ARM) RISC OS 3.1, 4.02
- StrongARM Linux 2.4 - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
- StrongARM NetBSD 1.4.1 - StrongARM NetBSD 1.4.1
- Ultrix 4.3a - Ultrix 4.3a
- i386 BeOS - i386 BeOS

302
docs/INSTALL.devcpp Normal file
View File

@@ -0,0 +1,302 @@
DevCpp-Mingw Install & Compilation Sept 2005
==================================
Reference Emails available at curl@haxx.se:
Libcurl Install and Use Issues
Awaiting an Answer for Win 32 Install
res = curl_easy_perform(curl); Error
Makefile Issues
Having previously done a thorough review of what was available that met my
requirements under GPL, I settled for Libcurl as the software of choice for
many reasons not the least of which was the support.
Background
----------
This quest started when I innocently tried to incorporate the libcurl library
into my simple source code. I figured that a few easy steps would accomplish
this without major headaches. I had no idea that I would be facing an almost
insurmountable challenge.
The main problem lies in two areas. First the bulk of support for libcurl
exists for a Unix/linux command line environments. This is of little help when
it comes to Windows O/S.
Secondly the help that does exist for the Windows O/S focused around mingw
thru a command line argument environment.
You may ask "Why is this a problem?"
I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with
DevCpp, it is a window shell GUI that replaces the command line environment
for gcc. A definite improvement that I am unwilling to give up. However using
DevCpp presented its own set of issues. Inadvertently I also made some
careless errors such as compiling the 7.14 version of Makefile with an older
version of source code. Thanks to Dan Fandrich for picking this up.
I did eventually with the help of Daniel, Phillipe and others manage to
implement successfully (the only mingw available version)
curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the
dynamic libcurl.dll libcurldll.a libraries worked. The static library which I
was interested in did not. Furthermore when I tried to implement one of the
examples included with the curl package (get info.c) it caused the executable
to crash. Tracing the bug I found it in the code and function res =
curl_easy_perform(curl);.
At this point I had to make a choice as to whether invest my limited
time-energy resource to fixing the bug or to compile the new version
available. After searching the archives I found a very similar or the same bug
reported from version 7.12x on. Daniel did inform me that he thought that this
bug had been fixed with the latest version. So I proceeded to compile the
latest SSL version where I faced other challenges.
In order to make this process unremarkable for others using the same
environment I decided to document the process so that others will find it
routine. It would be a shame if newbies could not implement this excellent
package for their use.
I would like to thank the many others in this forum and in the DevCpp forum
for their help. Without your help I may either have given up or it would have
taken me many times longer to achieve success.
The Cookbook Approach
---------------------
This discussion will be confined to a SSL static library compilation and
installation. Limited mention and comments will be inserted where appropriate
to help with non-SSL, dynamic libraries and executables.
Using Makefile from DevCpp to compile Libcurl libraries
Preamble
--------
Using the latest version release - curl-7.14.0.tar.gz. Curl source code is
platform independent. This simply means that the source code can be compiled
for any Operating System (Linux/Unix Windows etc. and variations of thereof).
The first thing to note is that inside curl-7.14.0 you will find two folders
lib and src. Both contain Makefile.m32 (required for win mingw library or exe
compilation) files which are different. The main difference between these two
folders and the makefiles is that the src folder contents are used to compile
an executable file(curl.exe) while the lib folder contents are used to compile
a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be
used to compile libcurl with your own source code so that one can use and
access all libcurl functions.
Before we start please make sure that DevCpp is installed properly. In
particular make sure you have no spaces in the name of any of the directories
and subdirectories where DevCpp is installed. Failure to comply with the
install instructions may produce erratic behaviour in DevCpp. For further info
check the following sites
http://aditsu.freeunixhost.com/dev-cpp-faq.html
http://sourceforge.net/forum/message.php?msg_id=3252213
As I have mentioned before I will confine this to the SSL Library compilations
but the process is very similar for compilation of the executable - curl.exe;
just substitute the src folder makefile in its stead.
First use a text processor Notepad, or your own favourite text processor. To
engage your favourite text processor, select Makefile.m32 click once with your
mouse on file icon; icon turns blue, press the shift key and right-click on
mouse, menu appears select "Open with", select your favourite text processor.
Next read the contents of Makefile.m32. It includes instructions on its use.
Method I - DOS Command Line
---------------------------
Note - The only reason I have included this method is that Method II which is
the preferred method for compiling does not allow for the setting of option
switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the
Dev-Cpp forum.
1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original"
place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example)
2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that
the make.exe file resides in this folder. Make.exe will use - Makefile.m32,
Makefile.inc, and the source code included in the lib folder to compile the
source code. There is a PATH issue with make.exe that remains unresolved at
least for me. Unless the entire source code to be compiled is placed entirely
within the directory of make.exe an error message will be generated - "file
xxxx.yyy not available".
3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window
quickly pop up and close very quickly. Not to worry! Please do not skip this
step.
4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up
Type the disk drive letter (e.g. E: ) engage the enter button. The path should
automatically take you to the directory of the make.exe file.
5- To compile the source code simply type at the DOS prompt make -f
Makefile.m32 as per instructions contained in the Makefile.m32 file (use any
text processor to read instructions). I don't believe that this makefile
allows for the option of non SSL. Ignore any warnings.
6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o
compilations you might need in another directory outside of the bin directory
as you will need this files shortly to set up libcurl for use with
Dev-cpp. For most apps *.o is not required. Later on we will show what to do
with these files.
7- You are finished but before closing we need to do cleanup - erase the bin
folder and rename the "bin Original" folder created in step 1 to bin.
Note to compile a curl executable the process is probably similar but instead
of using the LIB folder contents use the SRC folder contents and Makefiles in
curl-7.14.0.tar.gz. File directories relative placements must be respected for
compiling to take place successfully. This may not be possible with the PATH
problem that make.exe experiences. If anyone has solved this PATH issue and
please make sure it actually works on Win 9x/2000/XP before letting me
know. Then please let me or Daniel in on the solution so that it can be
included with these instructions. Thanks.
or
Method II - Dev-Cpp GUI
-----------------------
1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
version into any folder outside of (Dev-Cpp\bin).
2- Drop the File/New/click on Project.
3- New Project Dialogue box appears. Double click on the Static Library.
4- Create Project Dialogue box appears. Select the LIB folder location to
place and locate your Project File Name. Placing the Project File Name
elsewhere may cause problems (PATH issue problem again).
5- Drop down the Project/Project Options. Project Options Dialogue box
appears.
6- Select the Makefile tab in the Project Options Dialogue Box. Check Box -
Use Custom Makefile. Click on the Folder icon at the extreme right of the
Check Box. Select Makefile.m32 in the folder wherever you have placed the
contents of the LIB Folder. Press OK and close the Dialogue Box.
7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box
appears. The Dialogue Box should open in the folder wherever you have placed
the contents of the LIB Folder. If not go there.
8- Select Crtl-A to select all files in the LIB folder. Click on open to add
files and close box. Wait till all files are added. This may take 30 seconds
or longer.
9- Drop the Menu Execute/Click on Compile.
10- That's it.
The following steps must be completed if Curl is to work properly
=================================================================
LIB folder inclusions (*.a placement)
-------------------------------------
1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a
and install it in the directory C( or whichever drive Dev is installed)
:\Dev-Cpp\lib.
Include Folder
--------------
1- Create a new folder by the name of curl (do not change the name curl to
some other name as it will cause major issues) in the directory
C:\Dev-Cpp\include.
2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip
version into the newly created curl directory - C:\Dev-Cpp\include\curl.
Links To Include And Lib Folder
-------------------------------
1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure
that C( or whichever drive Dev is installed):\DEV-CPP\lib is included.
2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make
sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included.
3- Next select the Menu - Tools\Compiler Options\Directories\C++
Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are
included.
Linker Links
------------
1- Drop the Menu - Tools\Compiler Options\Directories\Compiler.
2- Make sure that the box "Add these commands to the linker command line" is
checked.
3- Include in the white space immediately below the box referred in 2 -lcurl
-lws2_32 -lwinmm.
SSL Files
---------
1- Get the latest openSSL (as of time of this writing)
openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e
binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1
development environment. The file may be downloaded at
http://curl.haxx.se/download/.
2- Open the above zip file. You will find two files - SDL.dll,
SDL_mixer.dll. Install them in the directory C:\WINDOWS\SYSTEM32 for Win 9x
users and c:\winnt\system32 for NT-family users.
Multithreading Files
--------------------
To be completed
#define
-------
1- Make sure that your program includes the following - #define CURL_STATICLIB
must be declared FIRST before any other define functions may be
added. Otherwise you may experience link errors.
2- Don't forget to include #include "curl/curl.h".
e.g.
#define CURL_STATICLIB
#include <windows.h>
#include "curl/curl.h"
#include <fstream>
#include <iostream>
#include <vector>
etc...
Static or Dynamic Library
-------------------------
The above steps apply for the use by a static library. Should you choose to
use a dynamic library you will be required to perform these additional steps.
1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the
directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for
NT-family users.
2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll.
Voila you're done.
The non-SSL static Library build may not be possible to use at least as of the
time of this writing - v7.14. Check reference emails - Phillipe and I found it
impossible to fully compile as certain files were missing for linking. No big
loss as SSL is a major plus.
Hope this Helps
Tom

View File

@@ -3,11 +3,52 @@ 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!
32. (At least on Windows) If libcurl is built with c-ares and there's no DNS
server configured in the system, the ares_init() call fails and thus
curl_easy_init() fails as well. This causes weird effects for people who use
numerical IP addresses only.
31. "curl-config --libs" will include details set in LDFLAGS when configure is
run that might be needed only for building libcurl. Similarly, it might
include options that perhaps aren't suitable both for static and dynamic
linking. Further, curl-config --cflags suffers from the same effects with
CFLAGS/CPPFLAGS.
30. You need to use -g to the command line tool in order to use RFC2732-style
IPv6 numerical addresses in URLs.
29. IPv6 URLs with zone ID is not supported.
http://www.ietf.org/internet-drafts/draft-fenner-literal-zone-02.txt
specifies the use of a plus sign instead of a percent when specifying zone
IDs in URLs to get around the problem of percent signs being
special. According to the reporter, Firefox deals with the URL _with_ a
percent letter (which seems like a blatant URL spec violation).
See http://curl.haxx.se/bug/view.cgi?id=1371118
28. The TFTP code is not portable and will fail on some architectures.
26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
"system context" will make it use wrong(?) user name - at least when compared
to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867
25. When doing a CONNECT request with curl it doesn't properly handle if the
proxy closes the connection within the authentication "negotiation phase".
Like if you do HTTPS or similar over a proxy and you use perhaps
--proxy-anyauth. There's work in progress on this problem, and a recent
patch was posted here: http://curl.haxx.se/mail/lib-2005-08/0074.html
23. We don't support SOCKS for IPv6. We don't support FTPS over a SOCKS proxy.
We don't have any test cases for SOCKS proxy. We probably have even more
bugs and lack of features when a SOCKS proxy is used. And there seem to be a
problem with SOCKS when doing FTP: See
http://curl.haxx.se/bug/view.cgi?id=1371540
22. Sending files to a FTP server using curl on VMS, might lead to curl 22. Sending files to a FTP server using curl on VMS, might lead to curl
complaining on "unaligned file size" on completion. The problem is related complaining on "unaligned file size" on completion. The problem is related
to VMS file structures and the perceived file sizes stat() returns. A to VMS file structures and the perceived file sizes stat() returns. A
possible fix would involve sending a "STRU VMS" command. possible fix would involve sending a "STRU VMS" command.
http://sourceforge.net/support/tracker.php?aid=1156287 http://curl.haxx.se/bug/view.cgi?id=1156287
21. FTP ASCII transfers do not follow RFC959. They don't convert the data 21. FTP ASCII transfers do not follow RFC959. They don't convert the data
accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1 accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
@@ -18,20 +59,9 @@ may have been fixed since this was written!
specification). The receiver will convert the data from the standard specification). The receiver will convert the data from the standard
form to his own internal form. form to his own internal form.
20. valgrind errors occur too often when 'make test' is used. It is because
too many third-party libs and tools have problems. When curl is built
without --disable-shared, the testing is done with a front-end script which
makes the valgrind testing include (ba)sh as well and that often causes
valgrind errors. Either we improve the valgrind error scanner a lot to
better identify (lib)curl errors only, or we disable valgrind checking by
default.
19. FTP 3rd party transfers with the multi interface doesn't work. Test: 19. FTP 3rd party transfers with the multi interface doesn't work. Test:
define CURL_MULTIEASY, rebuild curl, run test case 230 - 232. define CURL_MULTIEASY, rebuild curl, run test case 230 - 232.
18. test case 57 has </test> that should be </client> but when corrected, the
test case fails!
16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>, 16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
<password>, and <fpath> components, encoded as "%00". The problem is that <password>, and <fpath> components, encoded as "%00". The problem is that
curl_unescape does not detect this, but instead returns a shortened C curl_unescape does not detect this, but instead returns a shortened C
@@ -42,10 +72,6 @@ may have been fixed since this was written!
would not meaningfully support NUL characters within RFC 959 <string>, would not meaningfully support NUL characters within RFC 959 <string>,
anyway (e.g., UNIX pathnames may not contain NUL). anyway (e.g., UNIX pathnames may not contain NUL).
15. Test case 241 fails on all systems that support IPv6 but that don't have
the host name 'ip6-localhost' in /etc/hosts (or similar) since the test case
uses that host name to test the IPv6 name to address resolver.
14. Test case 165 might fail on system which has libidn present, but with an 14. Test case 165 might fail on system which has libidn present, but with an
old iconv version (2.1.3 is a known bad version), since it doesn't recognize old iconv version (2.1.3 is a known bad version), since it doesn't recognize
the charset when named ISO8859-1. Changing the name to ISO-8859-1 makes the the charset when named ISO8859-1. Changing the name to ISO-8859-1 makes the
@@ -65,11 +91,12 @@ may have been fixed since this was written!
10. To get HTTP Negotiate authentication to work fine, you need to provide a 10. 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 (fake) user name (this concerns both curl and the lib) because the code
wrongly only considers authentication if there's a user name provided. 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 http://curl.haxx.se/bug/view.cgi?id=1004841. How?
http://curl.haxx.se/mail/lib-2004-08/0182.html
9. --limit-rate using -d or -F does not work. This is because the limit logic 9. --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! Bug report #921395. -d/-F the callbacks aren't used! http://curl.haxx.se/bug/view.cgi?id=921395
8. Doing resumed upload over HTTP does not work with '-C -', because curl 8. 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
@@ -92,8 +119,6 @@ may have been fixed since this was written!
libcurl thinks of it as the *compressed* length. Some explanations are here: libcurl thinks of it as the *compressed* length. Some explanations are here:
http://curl.haxx.se/mail/lib-2003-06/0146.html http://curl.haxx.se/mail/lib-2003-06/0146.html
3. GOPHER transfers seem broken
2. If a HTTP server responds to a HEAD request and includes a body (thus 2. 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

View File

@@ -12,12 +12,11 @@ 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 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 with code licensed under the Original BSD license (with the announcement
clause, unless there's a specified exception in the GPL-licensed module). You clause). You may still build your own copies that use them all, but
may still build your own copies that use them all, but distributing them as distributing them as binaries would be to violate the GPL license - unless you
binaries would be to violate the GPL license - unless you accompany your accompany your license with an exception[2]. This particular problem was
license with an exception[2]. This particular problem was addressed when the addressed when the Modified BSD license was created, which does not have the
Modified BSD license was created, which does not have the annoncement clause annoncement clause that collides with GPL.
that collides with GPL.
libcurl http://curl.haxx.se/docs/copyright.html libcurl http://curl.haxx.se/docs/copyright.html
@@ -28,65 +27,76 @@ libcurl http://curl.haxx.se/docs/copyright.html
OpenSSL http://www.openssl.org/source/license.html OpenSSL http://www.openssl.org/source/license.html
Uses an Original BSD-style license with an announement clause that (May be used for SSL/TLS support) Uses an Original BSD-style license
makes it "incompatible" with GPL. You are not allowed to ship binaries with an announement clause that makes it "incompatible" with GPL. You
that link with OpenSSL that includes GPL code (unless that specific are not allowed to ship binaries that link with OpenSSL that includes
GPL code includes an exception for OpenSSL - a habit that is growing GPL code (unless that specific GPL code includes an exception for
more and more common). If OpenSSL's licensing is a problem for you, OpenSSL - a habit that is growing more and more common). If OpenSSL's
consider using GnuTLS instead. licensing is a problem for you, consider using GnuTLS instead.
GnuTLS http://www.gnutls.org/ GnuTLS http://www.gnutls.org/
Uses the LGPL[3] license. If this is a problem for you, consider using (May be used for SSL/TLS support) Uses the LGPL[3] license. If this is
OpenSSL instead. Also note that GnuTLS itself depends on and uses a problem for you, consider using OpenSSL instead. Also note that
other libs (libgcrypt and libgpg-error) and they too are LGPL- or GnuTLS itself depends on and uses other libs (libgcrypt and
GPL-licensed. libgpg-error) and they too are LGPL- or GPL-licensed.
c-ares http://daniel.haxx.se/projects/c-ares/license.html c-ares http://daniel.haxx.se/projects/c-ares/license.html
Uses an MIT license that is very liberal and imposes no restrictions (Used for asynchronous name resolves) Uses an MIT license that is very
on any other library or part you may link with. liberal and imposes no restrictions on any other library or part you
may link with.
zlib http://www.gzip.org/zlib/zlib_license.html zlib http://www.gzip.org/zlib/zlib_license.html
Uses an MIT-style license that shouldn't collide with any other (Used for compressed Transfer-Encoding support) Uses an MIT-style
library. license that shouldn't collide with any other library.
krb4 krb4
While nothing in particular says that a Kerberos4 library must use any While nothing in particular says that a Kerberos4 library must use any
particular license, the one I've tried and used successfully so far particular license, the one I've tried and used successfully so far
(kth-krb4) is Original BSD-licensed with the announcement clause. Some (kth-krb4) is partly Original BSD-licensed with the announcement
of the code in libcurl that is written to deal with Kerberos4 likewise clause. Some of the code in libcurl that is written to deal with
have such a license. Kerberos4 is Modified BSD-licensed.
GSSAPI MIT Kerberos http://web.mit.edu/kerberos/www/dist/
While nothing in particular says that a GSS/Kerberos5 library must use (May be used for GSS support) MIT licensed, that shouldn't collide
any particular license, the one I've used (Heimdal) is Original BSD- with any other parts.
licensed with the announcement clause.
Heimdal http://www.pdc.kth.se/heimdal/
(May be used for GSS support) Heimdal is Original BSD licensed with
the announcement clause.
GNU GSS http://www.gnu.org/software/gss/
(May be used for GSS support) GNU GSS is GPL licensed. Note that you
may not distribute binary curl packages that uses this if you build
curl to also link and use any Original BSD licensed libraries!
fbopenssl fbopenssl
Unclear license. Based on its name, I assume that it uses the OpenSSL (Used for SPNEGO support) Unclear license. Based on its name, I assume
license and thus shares the same issues as described for OpenSSL that it uses the OpenSSL license and thus shares the same issues as
above. described for OpenSSL above.
libidn http://www.gnu.org/licenses/lgpl.html libidn http://www.gnu.org/licenses/lgpl.html
Uses the GNU Lesser General Public License. LGPL is a variation of GPL (Used for IDNA support) Uses the GNU Lesser General Public
with slightly less aggressive "copyleft". This license requires more License. LGPL is a variation of GPL with slightly less aggressive
requirements to be met when distributing binaries, see the license for "copyleft". This license requires more requirements to be met when
details. Also note that if you distribute a binary that includes this distributing binaries, see the license for details. Also note that if
library, you must also include the full LGPL license text. Please you distribute a binary that includes this library, you must also
properly point out what parts of the distributed package that the include the full LGPL license text. Please properly point out what
license addresses. parts of the distributed package that the license addresses.
OpenLDAP http://www.openldap.org/software/release/license.html OpenLDAP http://www.openldap.org/software/release/license.html
Uses a Modified BSD-style license. Since libcurl uses OpenLDAP as a (Used for LDAP support) Uses a Modified BSD-style license. Since
shared library only, I have not heard of anyone that ships OpenLDAP libcurl uses OpenLDAP as a shared library only, I have not heard of
linked with libcurl in an app. anyone that ships OpenLDAP linked with libcurl in an app.
[1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html [1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html

View File

@@ -23,10 +23,6 @@ SIMPLE USAGE
curl ftp://cool.haxx.se/ curl ftp://cool.haxx.se/
Get a gopher document from funet's gopher server:
curl gopher://gopher.funet.fi
Get the definition of curl from a dictionary: Get the definition of curl from a dictionary:
curl dict://dict.org/m:curl curl dict://dict.org/m:curl
@@ -94,10 +90,6 @@ USING PASSWORDS
Probably most commonly used with private certificates, as explained below. Probably most commonly used with private certificates, as explained below.
GOPHER
Curl features no password support for gopher.
PROXY PROXY
Get an ftp file using a proxy named my-proxy that uses port 888: Get an ftp file using a proxy named my-proxy that uses port 888:
@@ -748,7 +740,7 @@ ENVIRONMENT VARIABLES
Curl reads and understands the following environment variables: Curl reads and understands the following environment variables:
http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY http_proxy, HTTPS_PROXY, FTP_PROXY
They should be set for protocol-specific proxies. General proxy should be They should be set for protocol-specific proxies. General proxy should be
set with set with

View File

@@ -17,7 +17,7 @@ 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 VERSIONS \ README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \ KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
$(PDFPAGES) LICENSE-MIXING README.netware $(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp
MAN2HTML= roffit < $< >$@ MAN2HTML= roffit < $< >$@

View File

@@ -4,91 +4,490 @@
If you have contributed but are missing here, please let us know! If you have contributed but are missing here, please let us know!
Alan Pinstein, Albert Chin-A-Young, Albert Choy, Aleksandar Milivojevic, Alex Adrian Schuur
aka WindEagle, Alex Neblett, Alex Suykov, Alexander Kourakos, Alexander Alan Pinstein
Krasnostavsky, Alexander Zhuravlev, Alexis Carvalho, Andi Jahja, Andreas Damm, Albert Chin-A-Young
Andreas Olsson, Andreas Rieke, Andrew Francis, Andrew Fuller, Andr<64>s Garc<72>a, Albert Choy
Andy Cedilnik, Andy Serpa, Angus Mackay, Antoine Calando, Anton Kalmykov, Aleksandar Milivojevic
Arkadiusz Miskiewicz, Augustus Saunders, Avery Fay, Ben Greear, Benjamin Alex Neblett
Gerard, Bertrand Demiddelaer, Bjorn Reese, Bj<42>rn Stenberg, Bob Schader, Brad Alex Suykov
Burdick, Brent Beardsley, Brian Akins, Brian R Duffy, Bruce Mitchener, Bryan Alex aka WindEagle
Henderson, Bryan Henderson , Bryan Kemp, Caolan McNamara, Casey O'Donnell, Alexander Kourakos
Chih-Chung Chang, Chris "Bob Bob", Chris Combes, Chris Gaukroger, Chris Alexander Krasnostavsky
Maltby, Christian Kurz, Christian Robottom Reis, Christophe Demory, Christophe Alexander Lazic
Legry, Christopher R. Palmer, Clarence Gardner, Clifford Wolf, Cody Jones, Alexander Zhuravlev
Colin Watson, Colm Buckley, Cory Nelson, Craig Davison, Craig Markwardt, Cris Alexis Carvalho
Bailiff, Cyrill Osterwalder, Damien Adant, Dan Becker, Dan C, Dan Fandrich, Amol Pattekar
Dan Torop, Dan Zitter, Daniel at touchtunes, Daniel Stenberg, Dave Dribin, Andi Jahja
Dave Halbakken, Dave Hamilton, Dave May, David Byron, David Cohen, David Andreas Damm
Eriksson, David Houlder, David Hull, David J Meyer, David James, David Kimdon, Andreas Olsson
David LeBlanc, David Odin, David Phillips, David Shaw, David Tarendash, David Andreas Rieke
Thiel, Detlef Schmier, Diego Casorran, Dimitris Sarris, Dinar, Dirk Andres Garcia
Eddelbuettel, Dirk Manske, Dolbneff A.V, Domenico Andreoli, Dominick Meglio, Andrew Benham
Doug Kaufman, Doug Porter, Douglas E. Wegscheid, Douglas R. Horner, Dustin Andrew Bushnell
Boswell, Dylan Ellicott, Dylan Salisbury, Early Ehlinger, Edin Kadribasic, Andrew Francis
Ellis Pritchard, Emiliano Ida, Enrico Scholz, Enrik Berkhan, Eric Lavigne, Andrew Fuller
Eric Melville, Eric Rautman, Eric Thelin, Eric Vergnaud, Eric Young, Erick Andr<EFBFBD>s Garc<72>a
Nuwendam, Erwan Legrand, Erwin Authried, Evan Jordan, Fabrizio Ammollo, Fedor Andy Cedilnik
Karpelevitch, Felix von Leitner, Florian Schoppmann, Forrest Cahoon, Frank Andy Serpa
Keeney, Frank Ticheler, Fred New, Fred Noz, Frederic Lepied, Gautam Mani, Gaz Angus Mackay
Iqbal, Georg Horn, Georg Huettenegger, Gerd v. Egidy, Gerhard Herre, Giaslas Antoine Calando
Georgios, Gilad, Gilbert Ramirez Jr., Gisle Vanem, Giuseppe Attardi, Giuseppe Anton Kalmykov
D'Ambrosio, Glen Nakamura, Glen Scott, Greg Hewgill, Greg Onufer, Grigory Arkadiusz Miskiewicz
Entin, Guenole Bescon, Guillaume Arluison, Gustaf Hui, Gwenole Beauchesne, Augustus Saunders
G<EFBFBD>tz Babin-Ebell, G<>nter Knauf, Hamish Mackenzie, Hanno Kranzhoff, Hans Avery Fay
Steegers, Hardeep Singh, Harshal Pradhan, Heikki Korpela, Henrik Storner, Ben Greear
Hzhijun, Ian Ford, Ian Gulliver, Ian Wilkes, Ignacio Vazquez-Abrams, Ilguiz Ben Madsen
Latypov, Ingo Ralf Blum, Ingo Wilken, Jacky Lam, Jacob Meuser, James Bursa, Benjamin Gerard
James Clancy, James Cone, James Gallagher, James Griffiths, James MacMillan, Bertrand Demiddelaer
Jamie Lokier, Jamie Wilkinson, Jason S. Priebe, Jean-Claude Chauve, Jean-Louis Bjorn Reese
Lemaire, Jean-Marc Ranger, Jean-Philippe Barrette-LaPierre, Jeff Lawson, Jeff Bj<EFBFBD>rn Stenberg
Phillips, Jeffrey Pohlmeyer, Jeremy Friesner, Jesper Jensen, Jesse Noller, Jim Bob Schader
Drash, Joe Halpin, Joel Chen, Johan Anderson, Johan Nilsson, John Crow, John Brad Burdick
Janssen, John Lask, John McGowan, Jon Travis, Jon Turner, Jonas Forsman, Bradford Bruce
Jonatan Lander, Jonathan Hseu, Jongki Suwandi, Josh Kapell, Juan F. Codagnone, Brent Beardsley
Juan Ignacio Herv<72>s, Juergen Wilke, Jukka Pihl, Julian Noble, Jun-ichiro Brian Akins
itojun Hagino, Jurij Smakov, J<>rg Mueller-Tolk, J<>rn Hartroth, Kai Sommerfeld, Brian R Duffy
Kai-Uwe Rommel, Kang-Jin Lee, Karol Pietrzak, Keith MacDonald, Keith McGuigan, Bruce Mitchener
Ken Hirsch, Ken Rastatter, Kevin Fisk, Kevin Roth, Kimmo Kinnunen, Kjell Bryan Henderson
Ericson, Kjetil Jacobsen, Klevtsov Vadim, Kris Kennaway, Krishnendu Majumdar, Bryan Kemp
Kristian K<>hntopp, Kyle Sallee, Lachlan O'Dea, Larry Campbell, Larry Fahnoe, Caolan McNamara
Lars Gustafsson, Lars J. Aas, Lars Nilsson, Lars Torben Wilson, Legoff Casey O'Donnell
Vincent, Lehel Bernadt, Len Krause, Linas Vepstas, Ling Thio, Linus Nielsen Chih-Chung Chang
Feltzing, Loic Dachary, Loren Kirkby, Luca Altea, Luca Alteas, Lucas Adamski, Chris "Bob Bob"
Lukasz Czekierda, Luke Call, Luong Dinh Dung, Maciej W. Rozycki, Marc Boucher, Chris Combes
Marcelo Juchem , Marcin Konicki, Marco G. Salvagno, Marcus Webster, Mark Chris Gaukroger
Butler, Markus Moeller, Markus Oberhumer, Martijn Koster, Martin C. Martin, Chris Maltby
Martin Hedenfalk, Marty Kuhrt, Maruko, Massimiliano Ziccardi, Mathias Christian Kurz
Axelsson, Mats Lidell, Matt Veenstra, Matthew Blain, Matthew Clarke, Maurice Christian Robottom Reis
Barnum, Mekonikum, Mettgut Jamalla, Michael Benedict, Michael Curtis, Michael Christophe Demory
Mealling, Michal Bonino, Mihai Ionescu, Mike Bytnar, Mike Dobbs, Miklos Christophe Legry
Nemeth, Mitz Wark, Mohamed Lrhazi, Mohun Biswas, Moonesamy, Nathan O'Sullivan, Christopher R. Palmer
Naveen Noel, Neil Dunbar, Neil Spring, Nic Roets, Nick Gimbrone, Nick Humfrey, Clarence Gardner
Nico Baggus, Nicolas Berloquin, Nicolas Croiset, Niels van Tongeren, Nikita Clifford Wolf
Schmidt, nk, Nodak Sodak, Oren Tirosh, P R Schaffner, Patrick Bihan-Faou, Cody Jones
Patrick Smith, Paul Harrington, Paul Marquis, Paul Moore, Paul Nolan, Pavel Colin Watson
Cenek, Pavel Orehov, Pawel A. Gajda, Pedro Neves, Pete Su, Peter Bray, Peter Colm Buckley
Forret, Peter Pentchev, Peter Sylvester, Peter Todd, Peter Verhas, Peter Cory Nelson
Wullinger, Phil Karn, Philip Gladstone, Philippe Hameau, Philippe Raoult, Craig Davison
Pierre, Puneet Pawaia, Rafael Sagula, Ralph Beckmann, Ralph Mitchell, Ramana Craig Markwardt
Mokkapati, Randy McMurchy, Reinout van Schouwen, Renaud Chaillat, Renaud Cris Bailiff
Duhaut, Rene Bernhardt, Rene Rebe, Ricardo Cadime, Rich Gray, Richard Archer, Cyrill Osterwalder
Richard Atterer, Richard Bramante, Richard Cooper, Richard Gorton, Richard Damien Adant
Prescott, Rick Jones, Rick Richardson, Rob Stanzel, Robert D. Young, Robert Dan Becker
Olson, Robert Weaver, Robin Kay, Rodney Simmons, Roland Krikava, Roland Dan C
Zimmermann, Roman Koifman, Ron Zapp, Rosimildo da Silva, Roy Shan, Rune Dan Fandrich
Kleveland, Ryan Nelson, S. Moonesamy, Salvador D<>vila, Salvatore Sorrentino, Dan Torop
Sampo Kellomaki, Samuel D<>az Garc<72>a, Samuel Listopad, Sander Gates, Saul good, Dan Zitter
Sebastien Willemijns, Sergio Ballestrero, Seshubabu Pasam, Shard, Shawn Daniel Stenberg
Poulson, Siddhartha Prakash Jain, Simon Dick, Simon Liu, Spiridonoff A.V, Daniel at touchtunes
Stadler Stephan, Stefan Ulrich, Stephan Bergmann, Stephen Kick, Stephen More, Darryl House
Sterling Hughes, Steve Green, Steve Lhomme, Steve Marx, Steve Oliphant, Steven Dave Dribin
Bazyl, Steven G. Johnson, Stoned Elipot, Sven Neuhaus, swalkaus at yahoo.com, Dave Halbakken
S<EFBFBD>bastien Willemijns, T. Bharath, T. Yamada, Thomas Schwinge, Thomas Tonino, Dave Hamilton
Tim Baker, Tim Bartley, Tim Costello, Tim Sneddon, Toby Peterson, Tom Benoist, Dave May
Tom Lee, Tom Mattison, Tom Moers, Tom Zerucha, Tomas Pospisek, Tomas Szepe, David Byron
Tomasz Lacki, Tommy Tam, Ton Voon, Tor Arntsen, Torsten Foertsch, Toshiyuki David Cohen
Maezawa, Traian Nicolescu, Troels Walsted Hansen, Troy Engel, Ulrich Zadow, David Eriksson
Vincent Bronner, Vincent Penquerc'h, Vincent Sanders, Vojtech Janota, Vojtech David Houlder
Minarik, Walter J. Mack, Wayne Haigh, Werner Koch, Wesley Laxton, Wez Furlong, David Hull
Wilfredo Sanchez, Wojciech Zwiefka, Yarram Sunil, Zvi Har'El David J Meyer
David James
David Kimdon
David Lang
David LeBlanc
David Odin
David Phillips
David Shaw
David Tarendash
David Thiel
David Yan
Detlef Schmier
Diego Casorran
Dima Barsky
Dimitris Sarris
Dinar
Dirk Eddelbuettel
Dirk Manske
Dmitry Bartsevich
Dolbneff A.V
Domenico Andreoli
Dominick Meglio
Doug Kaufman
Doug Porter
Douglas E. Wegscheid
Douglas R. Horner
Dov Murik
Duane Cathey
Dustin Boswell
Dylan Ellicott
Dylan Salisbury
Early Ehlinger
Edin Kadribasic
Ellis Pritchard
Emiliano Ida
Enrico Scholz
Enrik Berkhan
Eric Cooper
Eric Lavigne
Eric Melville
Eric Rautman
Eric Thelin
Eric Vergnaud
Eric Young
Erick Nuwendam
Erwan Legrand
Erwin Authried
Eugene Kotlyarov
Evan Jordan
Fabrizio Ammollo
Fedor Karpelevitch
Felix von Leitner
Florian Schoppmann
Forrest Cahoon
Frank Keeney
Frank Ticheler
Fred New
Fred Noz
Frederic Lepied
Gautam Mani
Gaz Iqbal
Georg Horn
Georg Huettenegger
Georg Wicherski
Gerd v. Egidy
Gerhard Herre
Giaslas Georgios
Gilad
Gilbert Ramirez Jr.
Gisle Vanem
Giuseppe Attardi
Giuseppe D'Ambrosio
Glen Nakamura
Glen Scott
Greg Hewgill
Greg Onufer
Grigory Entin
Guenole Bescon
Guillaume Arluison
Gustaf Hui
Gwenole Beauchesne
G<EFBFBD>tz Babin-Ebell
G<EFBFBD>nter Knauf
Hamish Mackenzie
Hanno Kranzhoff
Hans Steegers
Hardeep Singh
Harshal Pradhan
Heikki Korpela
Henrik Storner
Hzhijun
Ian Ford
Ian Gulliver
Ian Wilkes
Ignacio Vazquez-Abrams
Igor Polyakov
Ilguiz Latypov
Ingo Ralf Blum
Ingo Wilken
Jacky Lam
Jacob Meuser
James Bursa
James Clancy
James Cone
James Gallagher
James Griffiths
James MacMillan
Jamie Lokier
Jamie Newton
Jamie Wilkinson
Jan Kunder
Jason S. Priebe
Jaz Fresh
Jean Jacques Drouin
Jean-Claude Chauve
Jean-Louis Lemaire
Jean-Marc Ranger
Jean-Philippe Barrette-LaPierre
Jeff Lawson
Jeff Phillips
Jeff Pohlmeyer
Jeffrey Pohlmeyer
Jeremy Friesner
Jesper Jensen
Jesse Noller
Jim Drash
Joe Halpin
Joel Chen
Johan Anderson
Johan Nilsson
John Crow
John Janssen
John Kelly
John Lask
John McGowan
Jon Grubbs
Jon Travis
Jon Turner
Jonas Forsman
Jonatan Lander
Jonathan Hseu
Jongki Suwandi
Josh Kapell
Juan F. Codagnone
Juan Ignacio Herv<72>s
Juergen Wilke
Jukka Pihl
Julian Noble
Jun-ichiro itojun Hagino
Jurij Smakov
J<EFBFBD>rg Mueller-Tolk
J<EFBFBD>rn Hartroth
Kai Sommerfeld
Kai-Uwe Rommel
Kang-Jin Lee
Karl Moerder
Karol Pietrzak
Keith MacDonald
Keith McGuigan
Ken Hirsch
Ken Rastatter
Kent Boortz
Kevin Fisk
Kevin Lussier
Kevin Roth
Kimmo Kinnunen
Kjell Ericson
Kjetil Jacobsen
Klevtsov Vadim
Kris Kennaway
Krishnendu Majumdar
Kristian K<>hntopp
Kyle Sallee
Lachlan O'Dea
Larry Campbell
Larry Fahnoe
Lars Gustafsson
Lars J. Aas
Lars Nilsson
Lars Torben Wilson
Legoff Vincent
Lehel Bernadt
Len Krause
Linas Vepstas
Ling Thio
Linus Nielsen Feltzing
Loic Dachary
Loren Kirkby
Luca Altea
Luca Alteas
Lucas Adamski
Lukasz Czekierda
Luke Call
Luong Dinh Dung
Maciej W. Rozycki
Marc Boucher
Marcelo Juchem
Marcin Konicki
Marco G. Salvagno
Marcus Webster
Mario Schroeder
Mark Butler
Markus Moeller
Markus Oberhumer
Martijn Koster
Martin C. Martin
Martin Hedenfalk
Marty Kuhrt
Maruko
Massimiliano Ziccardi
Mathias Axelsson
Mats Lidell
Matt Veenstra
Matthew Blain
Matthew Clarke
Maurice Barnum
Mekonikum
Mettgut Jamalla
Michael Benedict
Michael Curtis
Michael Jahn
Michael Mealling
Michael Wallner
Michal Bonino
Michal Marek
Mihai Ionescu
Mike Bytnar
Mike Dobbs
Miklos Nemeth
Mitz Wark
Mohamed Lrhazi
Mohun Biswas
Moonesamy
Nathan O'Sullivan
Naveen Noel
Neil Dunbar
Neil Spring
Nic Roets
Nick Gimbrone
Nick Humfrey
Nico Baggus
Nicolas Berloquin
Nicolas Croiset
Nicolas Fran<61>ois
Niels van Tongeren
Nikita Schmidt
Nis Jorgensen
Nodak Sodak
Norbert Novotny
Ofer
Oren Tirosh
P R Schaffner
Patrick Bihan-Faou
Patrick Smith
Paul Harrington
Paul Marquis
Paul Moore
Paul Nolan
Pavel Cenek
Pavel Orehov
Pawel A. Gajda
Pedro Neves
Pete Su
Peter Bray
Peter Forret
Peter Pentchev
Peter Su
Peter Sylvester
Peter Todd
Peter Verhas
Peter Wullinger
Peteris Krumins
Phil Karn
Philip Gladstone
Philippe Hameau
Philippe Raoult
Philippe Vaucher
Pierre
Puneet Pawaia
Quagmire
Rafael Sagula
Ralph Beckmann
Ralph Mitchell
Ramana Mokkapati
Randy McMurchy
Reinout van Schouwen
Renaud Chaillat
Renaud Duhaut
Rene Bernhardt
Rene Rebe
Ricardo Cadime
Rich Gray
Richard Archer
Richard Atterer
Richard Bramante
Richard Clayton
Richard Cooper
Richard Gorton
Richard Prescott
Rick Jones
Rick Richardson
Rob Stanzel
Robert D. Young
Robert Olson
Robert Weaver
Robin Kay
Rodney Simmons
Roland Krikava
Roland Zimmermann
Roman Koifman
Ron Zapp
Rosimildo da Silva
Roy Shan
Rune Kleveland
Ryan Nelson
S. Moonesamy
Salvador D<>vila
Salvatore Sorrentino
Sampo Kellomaki
Samuel D<>az Garc<72>a
Samuel Listopad
Sander Gates
Saul good
Scott Davis
Sebastien Willemijns
Sergio Ballestrero
Seshubabu Pasam
Shard
Shawn Poulson
Shmulik Regev
Siddhartha Prakash Jain
Simon Dick
Simon Josefsson
Simon Liu
Spiridonoff A.V
Stadler Stephan
Stefan Esser
Stefan Ulrich
Stephan Bergmann
Stephen Kick
Stephen More
Sterling Hughes
Steve Green
Steve Lhomme
Steve Marx
Steve Oliphant
Steven Bazyl
Steven G. Johnson
Stoned Elipot
Sven Neuhaus
S<EFBFBD>bastien Willemijns
T. Bharath
T. Yamada
Temprimus
Thomas Schwinge
Thomas Tonino
Tim Baker
Tim Bartley
Tim Costello
Tim Sneddon
Toby Peterson
Todd Kulesza
Tom Benoist
Tom Lee
Tom Mattison
Tom Moers
Tom Zerucha
Tomas Pospisek
Tomas Szepe
Tomasz Lacki
Tommy Tam
Ton Voon
Tor Arntsen
Torsten Foertsch
Toshiyuki Maezawa
Traian Nicolescu
Troels Walsted Hansen
Troy Engel
Tupone Alfredo
Ulf H<>rnhammar
Ulrich Zadow
Vilmos Nebehaj
Vincent Bronner
Vincent Penquerc'h
Vincent Sanders
Vojtech Janota
Vojtech Minarik
Walter J. Mack
Wayne Haigh
Werner Koch
Wesley Laxton
Wez Furlong
Wilfredo Sanchez
Wojciech Zwiefka
Yang Tse
Yarram Sunil
Zvi Har'El
nk
swalkaus at yahoo.com
tommink[at]post.pl

View File

@@ -31,7 +31,7 @@ TODO
* Introduce a new error code indicating authentication problems (for proxy * Introduce a new error code indicating authentication problems (for proxy
CONNECT error 407 for example). This cannot be an error code, we must not CONNECT error 407 for example). This cannot be an error code, we must not
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() http://curl.haxx.se/bug/view.cgi?id=845941
* Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and * Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
@@ -40,6 +40,28 @@ TODO
* Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and * Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan. GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan.
* Add option that changes the interval in which the progress callback is
called at most.
* Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
present when we first added c-ares support but they have been added since!
When this is done and works, we can actually start considering making c-ares
powered libcurl the default build (which of course would require that we'd
bundle the c-ares source code in the libcurl source code releases).
* Support CONNECT 407 responses that kill the connection and expect the
client to reconnect to complete the authentication. Currently libcurl
assumes that a proxy connection will be kept alive.
* Make the curl/*.h headers include the proper system includes based on what
was present at the time when configure was run. Currently, the sys/select.h
header is for example included by curl/multi.h only on specific platforms
we know MUST have it. This is error-prone. We therefore want the header
files to adapt to configure results. Those results must be stored in a new
header and they must use a curl name space, i.e not be HAVE_* prefix (as
that would risk collide with other apps that use libcurl and that runs
configure).
LIBCURL - multi interface LIBCURL - multi interface
* Add a curl_multi_fdset() alternative. this allows apps to avoid the * Add a curl_multi_fdset() alternative. this allows apps to avoid the
@@ -58,6 +80,17 @@ TODO
ready to accept read data. Today libcurl feeds the data as soon as it is ready to accept read data. Today libcurl feeds the data as soon as it is
available for reading, no matter what. available for reading, no matter what.
* Add curl_multi_socket() and family to the multi interface that gets file
descriptors, as an alternative to the curl_multi_fdset(). This is necessary
to allow apps to properly avoid the FD_SETSIZE problem.
* Make curl_easy_perform() a wrapper-function that simply creates a multi
handle, adds the easy handle to it, runs curl_multi_perform() until the
transfer is done, then detach the easy handle, destroy the multi handle and
return the easy handle's return code. This will thus make everything
internally use and assume the multi interface. The select()-loop should use
curl_multi_socket().
DOCUMENTATION DOCUMENTATION
* More and better * More and better
@@ -69,7 +102,7 @@ TODO
* Support GSS/Kerberos 5 for ftp file transfer. This will allow user * Support GSS/Kerberos 5 for ftp file transfer. This will allow user
authentication and file encryption. Possible libraries and example clients authentication and file encryption. Possible libraries and example clients
are available from MIT or Heimdal. Requsted by Markus Moeller. are available from MIT or Heimdal. Requested by Markus Moeller.
* REST fix for servers not behaving well on >2GB requests. This should fail * REST fix for servers not behaving well on >2GB requests. This should fail
if the server doesn't set the pointer to the requested index. The tricky if the server doesn't set the pointer to the requested index. The tricky
@@ -149,6 +182,25 @@ TODO
latter two could be alternatives for those looking to reduce the footprint latter two could be alternatives for those looking to reduce the footprint
of libcurl built with OpenSSL or GnuTLS. of libcurl built with OpenSSL or GnuTLS.
* Peter Sylvester's patch for SRP on the TLS layer.
Awaits OpenSSL support for this, no need to support this in libcurl before
there's an OpenSSL release that does it.
* make the configure --with-ssl option first check for OpenSSL and then for
GnuTLS if OpenSSL wasn't detected.
GnuTLS
* Get NTLM working using the functions provided by libgcrypt, since GnuTLS
already depends on that to function. Not strictly SSL/TLS related, but
hey... Another option is to get available DES and MD4 source code from the
cryptopp library. They are fine license-wise, but are C++.
* SSL engine stuff?
* Work out a common method with Peter Sylvester's OpenSSL-patch for SRP
on the TLS to provide name and password
LDAP LDAP
* Look over the implementation. The looping will have to "go away" from the * Look over the implementation. The looping will have to "go away" from the
@@ -157,12 +209,6 @@ TODO
NEW PROTOCOLS NEW PROTOCOLS
* TFTP - RFC1350 (protocol) and RFC3617 (URI format)
Dan Fandrich: I wrote a tftp protocol module as part of the I-Boot
bootloader under a BSD-style license with attribution clause
http://download.intrinsyc.com/supported/tools/i-boot-lite/i-boot-lite-1.8/src/libs/net/tftp.c
* RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description) * RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
* SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation * SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation
@@ -184,7 +230,7 @@ TODO
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. * 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. 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 overwriting 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
existing). So that index.html becomes first index.html.1 and then existing). So that index.html becomes first index.html.1 and then

View File

@@ -53,10 +53,10 @@ in $prefix/lib and its header files are installed in $prefix/include and so
on. The prefix is set with "configure --prefix". on. The prefix is set with "configure --prefix".
.IP "--protocols" .IP "--protocols"
Lists what particular protocols the installed libcurl was built to support. At Lists what particular protocols the installed libcurl was built to support. At
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, GOPHER, the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols TELNET, LDAP, DICT. Do not assume any particular order. The protocols will
will be listed using uppercase and are separated by newlines. There may be be listed using uppercase and are separated by newlines. There may be none,
none, one or several protocols in the list. (Added in 7.13.0) one or several protocols in the list. (Added in 7.13.0)
.IP "--version" .IP "--version"
Outputs version information about the installed libcurl. Outputs version information about the installed libcurl.
.IP "--vernum" .IP "--vernum"
@@ -64,7 +64,7 @@ Outputs version information about the installed libcurl, in numerical mode.
This outputs the version number, in hexadecimal, with 8 bits for each part; This outputs the version number, in hexadecimal, with 8 bits for each part;
major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl
12.13.14 would appear as 0c0d0e... Note that the initial zero might be 12.13.14 would appear as 0c0d0e... Note that the initial zero might be
omitted. omitted. (This option was broken in the 7.15.0 release.)
.SH "EXAMPLES" .SH "EXAMPLES"
What linker options do I need when I link with libcurl? What linker options do I need when I link with libcurl?

View File

@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___ .\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____| .\" * \___|\___/|_| \_\_____|
.\" * .\" *
.\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * .\" *
.\" * This software is licensed as described in the file COPYING, which .\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms .\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * $Id$ .\" * $Id$
.\" ************************************************************************** .\" **************************************************************************
.\" .\"
.TH curl 1 "28 Apr 2005" "Curl 7.14.0" "Curl Manual" .TH curl 1 "21 Feb 2006" "Curl 7.15.2" "Curl Manual"
.SH NAME .SH NAME
curl \- transfer a URL curl \- transfer a URL
.SH SYNOPSIS .SH SYNOPSIS
@@ -30,8 +30,8 @@ curl \- transfer a URL
.SH DESCRIPTION .SH DESCRIPTION
.B curl .B curl
is a tool to transfer data from or to a server, using one of the supported is a tool to transfer data from or to a server, using one of the supported
protocols (HTTP, HTTPS, FTP, FTPS, GOPHER, DICT, TELNET, LDAP or FILE). The protocols (HTTP, HTTPS, FTP, FTPS, TFTP, DICT, TELNET, LDAP or FILE).
command is designed to work without user interaction. The command is designed to work without user interaction.
curl offers a busload of useful tricks like proxy support, user curl offers a busload of useful tricks like proxy support, user
authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file
@@ -64,11 +64,40 @@ several ones next to each other:
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.
Since curl 7.15.1 you can also specify step counter for the ranges, so that
you can get every Nth number or letter:
http://www.numericals.com/file[1-100:10].txt
http://www.letters.com/file[a-z:2].txt
If you specify URL without protocol:// prefix, curl will attempt to guess what
protocol you might want. It will then default to HTTP but try other protocols
based on often-used host name prefixes. For example, for host names starting
with "ftp." curl will assume you want to speak FTP.
Curl will attempt to re-use connections for multiple file transfers, so that Curl will attempt to re-use connections for multiple file transfers, so that
getting many files from the same server will not do multiple connects / getting many files from the same server will not do multiple connects /
handshakes. This improves speed. Of course this is only done on files handshakes. This improves speed. Of course this is only done on files
specified on a single command line and cannot be used between separate curl specified on a single command line and cannot be used between separate curl
invokes. invokes.
.SH "PROGRESS METER"
curl normally displays a progress meter during operations, indicating amount
of transfered data, transfer speeds and estimated time left etc.
However, since curl displays data to the terminal by default, if you invoke
curl to do an operation and it is about to write data to the terminal, it
\fIdisables\fP the progress meter as otherwise it would mess up the output
mixing progress meter and response data.
If you want a progress meter for HTTP POST or PUT requests, you need to
redirect the response output to a file, using shell redirect (>), -o [file] or
similar.
It is not the same case for FTP upload as that operation is not spitting out
any response data to the terminal.
If you prefer a progress "bar" instead of the regular meter, \fI-#\fP is your
friend.
.SH OPTIONS .SH OPTIONS
.IP "-a/--append" .IP "-a/--append"
(FTP) When used in an FTP upload, this will tell curl to append to the target (FTP) When used in an FTP upload, this will tell curl to append to the target
@@ -89,7 +118,7 @@ most secure one the remote site claims it supports. This is done by first
doing a request and checking the response-headers, thus inducing an extra doing a request and checking the response-headers, thus inducing an extra
network round-trip. This is used instead of setting a specific authentication network round-trip. This is used instead of setting a specific authentication
method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and
\fI--negotiate\fP. (Added in 7.10.6) \fI--negotiate\fP.
Note that using --anyauth is not recommended if you do uploads from stdin, Note that using --anyauth is not recommended if you do uploads from stdin,
since it may require data to be sent twice and then the client must be able to since it may require data to be sent twice and then the client must be able to
@@ -129,7 +158,7 @@ If this option is used twice, the second one will disable ASCII usage.
(HTTP) Tells curl to use HTTP Basic authentication. This is the default and (HTTP) Tells curl to use HTTP Basic authentication. This is the default and
this option is usually pointless, unless you use it to override a previously this option is usually pointless, unless you use it to override a previously
set option that sets a different authentication method (such as \fI--ntlm\fP, set option that sets a different authentication method (such as \fI--ntlm\fP,
\fI--digest\fP and \fI--negotiate\fP). (Added in 7.10.6) \fI--digest\fP and \fI--negotiate\fP).
If this option is used several times, the following occurrences make no If this option is used several times, the following occurrences make no
difference. difference.
@@ -187,7 +216,8 @@ 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).
If this option is used twice, the second will again disable crlf converting. If this option is used several times, the following occurrences make no
difference.
.IP "-d/--data <data>" .IP "-d/--data <data>"
(HTTP) Sends the specified data in a POST request to the HTTP server, in a way (HTTP) Sends the specified data in a POST request to the HTTP server, in a way
that can emulate as if a user has filled in a HTML form and pressed the submit that can emulate as if a user has filled in a HTML form and pressed the submit
@@ -231,7 +261,7 @@ append data.
prevents the password from being sent over the wire in clear text. Use this in prevents the password from being sent over the wire in clear text. Use this in
combination with the normal \fI-u/--user\fP option to set user name and combination with the normal \fI-u/--user\fP option to set user name and
password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for
related options. (Added in curl 7.10.6) related options.
If this option is used several times, the following occurrences make no If this option is used several times, the following occurrences make no
difference. difference.
@@ -241,7 +271,7 @@ active FTP transfers. Curl will normally always first attempt to use EPRT,
then LPRT before using PORT, but with this option, it will use PORT right then LPRT before using PORT, but with this option, it will use PORT right
away. EPRT and LPRT are extensions to the original FTP protocol, may not work away. EPRT and LPRT are extensions to the original FTP protocol, may not work
on all servers but enable more functionality in a better way than the on all servers but enable more functionality in a better way than the
traditional PORT command. (Added in 7.10.5) traditional PORT command.
If this option is used several times, each occurrence will toggle this on/off. If this option is used several times, each occurrence will toggle this on/off.
.IP "--disable-epsv" .IP "--disable-epsv"
@@ -265,9 +295,9 @@ If this option is used several times, the last one will be used.
.IP "-e/--referer <URL>" .IP "-e/--referer <URL>"
(HTTP) Sends the "Referer Page" information to the HTTP server. This can also (HTTP) Sends the "Referer Page" information to the HTTP server. This can also
be set with the \fI-H/--header\fP flag of course. When used with be set with the \fI-H/--header\fP flag of course. When used with
\fI-L/--location\fP you can append ";auto" to the referer URL to make curl \fI-L/--location\fP you can append ";auto" to the --referer URL to make curl
automatically set the previous URL when it follows a Location: header. The automatically set the previous URL when it follows a Location: header. The
\&";auto" string can be used alone, even if you don't set an initial referer. \&";auto" string can be used alone, even if you don't set an initial --referer.
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 "--engine <name>" .IP "--engine <name>"
@@ -325,9 +355,9 @@ If this option is used several times, the last one will be used.
.IP "-f/--fail" .IP "-f/--fail"
(HTTP) Fail silently (no output at all) on server errors. This is mostly done (HTTP) Fail silently (no output at all) on server errors. This is mostly done
like this to better enable scripts etc to better deal with failed attempts. In like this to better enable scripts etc to better deal with failed attempts. In
normal cases when a HTTP server fails to deliver a document, it returns a HTML normal cases when a HTTP server fails to deliver a document, it returns an
document stating so (which often also describes why and more). This flag will HTML document stating so (which often also describes why and more). This flag
prevent curl from outputting that and fail silently instead. will prevent curl from outputting that and return error 22.
If this option is used twice, the second will again disable silent failure. If this option is used twice, the second will again disable silent failure.
.IP "--ftp-account [data]" .IP "--ftp-account [data]"
@@ -339,15 +369,43 @@ If this option is used twice, the second will override the previous use.
.IP "--ftp-create-dirs" .IP "--ftp-create-dirs"
(FTP) When an FTP URL/operation uses a path that doesn't currently exist on (FTP) When an FTP URL/operation uses a path that doesn't currently exist on
the server, the standard behavior of curl is to fail. Using this option, curl the server, the standard behavior of curl is to fail. Using this option, curl
will instead attempt to create missing directories. (Added in 7.10.7) will instead attempt to create missing directories.
If this option is used twice, the second will again disable silent failure. If this option is used twice, the second will again disable directory creation.
.IP "--ftp-method [method]"
(FTP) Control what method curl should use to reach a file on a FTP(S)
server. The method argument should be one of the following alternatives:
.RS
.IP multicwd
curl does a single CWD operation for each path part in the given URL. For deep
hierarchies this means very many commands. This is how RFC1738 says it should
be done. This is the default but the slowest behavior.
.IP nocwd
curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full
path to the server for all these commands. This is the fastest behavior.
.IP singlecwd
curl does one CWD with the full target directory and then operates on the file
\&"normally" (like in the multicwd case). This is somewhat more standards
compliant than 'nocwd' but without the full penalty of 'multicwd'.
.RE
.IP "--ftp-pasv" .IP "--ftp-pasv"
(FTP) Use PASV when transferring. PASV is the internal default behavior, but (FTP) Use PASV when transferring. PASV is the internal default behavior, but
using this option can be used to override a previous --ftp-port option. (Added using this option can be used to override a previous --ftp-port option. (Added
in 7.11.0) in 7.11.0)
If this option is used twice, the second will again disable silent failure. If this option is used several times, the following occurrences make no
difference.
.IP "--ftp-skip-pasv-ip"
(FTP) Tell curl to not use the IP address the server suggests in its response
to curl's PASV command when curl connects the data connection. Instead curl
will re-use the same IP address it already uses for the control
connection. (Added in 7.14.2)
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
If this option is used twice, the second will again use the server's suggested
address.
.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)
@@ -408,7 +466,8 @@ with a '?' separator.
If used in combination with -I, the POST data will instead be appended to the If used in combination with -I, the POST data will instead be appended to the
URL with a HEAD request. URL with a HEAD request.
If used multiple times, nothing special happens. If this option is used several times, the following occurrences make no
difference.
.IP "-h/--help" .IP "-h/--help"
Usage help. Usage help.
.IP "-H/--header <header>" .IP "-H/--header <header>"
@@ -421,9 +480,19 @@ set headers without knowing perfectly well what you're doing. Replacing an
internal header with one without content on the right side of the colon will internal header with one without content on the right side of the colon will
prevent that header from appearing. prevent that header from appearing.
curl will make sure that each header you add/replace get sent with the proper
end of line marker, you should thus \fBnot\fP add that as a part of the header
content: do not add newlines or carriage returns they will only mess things up
for you.
See also the \fI-A/--user-agent\fP and \fI-e/--referer\fP options. See also the \fI-A/--user-agent\fP and \fI-e/--referer\fP options.
This option can be used multiple times to add/replace/remove multiple headers. This option can be used multiple times to add/replace/remove multiple headers.
.IP "--ignore-content-length"
(HTTP)
Ignore the Content-Length header. This is particularly useful for servers
running Apache 1.x, which will report incorrect Content-Length for files
larger than 2 gigabytes.
.IP "-i/--include" .IP "-i/--include"
(HTTP) (HTTP)
Include the HTTP-header in the output. The HTTP-header includes things Include the HTTP-header in the output. The HTTP-header includes things
@@ -449,15 +518,14 @@ If this option is used twice, the second will again disable header only.
(HTTP) When curl is told to read cookies from a given file, this option will (HTTP) When curl is told to read cookies from a given file, this option will
make it discard all "session cookies". This will basically have the same effect make it discard all "session cookies". This will basically have the same effect
as if a new session is started. Typical browsers always discard session as if a new session is started. Typical browsers always discard session
cookies when they're closed down. (Added in 7.9.7) cookies when they're closed down.
If this option is used several times, each occurrence will toggle this on/off. If this option is used several times, each occurrence will toggle this on/off.
.IP "-k/--insecure" .IP "-k/--insecure"
(SSL) This option explicitly allows curl to perform "insecure" SSL connections (SSL) This option explicitly allows curl to perform "insecure" SSL connections
and transfers. Starting with curl 7.10, all SSL connections will be attempted and transfers. All SSL connections are attempted to be made secure by using
to be made secure by using the CA certificate bundle installed by the CA certificate bundle installed by default. This makes all connections
default. This makes all connections considered "insecure" to fail unless considered "insecure" to fail unless \fI-k/--insecure\fP is used.
\fI-k/--insecure\fP is used.
If this option is used twice, the second time will again disable it. If this option is used twice, the second time will again disable it.
.IP "--key <key>" .IP "--key <key>"
@@ -484,7 +552,7 @@ Specify which config file to read curl arguments from. The config file is a
text file in which command line arguments can be written which then will be text file in which command line arguments can be written which then will be
used as if they were written on the actual command line. Options and their used as if they were written on the actual command line. Options and their
parameters must be specified on the same config file line. If the parameter is parameters must be specified on the same config file line. If the parameter is
to contain white spaces, the parameter must be inclosed within quotes. If the to contain white spaces, the parameter must be enclosed within quotes. If the
first column of a config line is a '#' character, the rest of the line will be first column of a config line is a '#' character, the rest of the line will be
treated as a comment. treated as a comment.
@@ -524,8 +592,6 @@ If you are also using the \fI-Y/--speed-limit\fP option, that option will take
precedence and might cripple the rate-limiting slightly, to help keeping the precedence and might cripple the rate-limiting slightly, to help keeping the
speed-limit logic working. speed-limit logic working.
This option was introduced in curl 7.10.
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 "-l/--list-only" .IP "-l/--list-only"
(FTP) (FTP)
@@ -539,15 +605,21 @@ list only files in their response to NLST; they do not include
subdirectories and symbolic links. subdirectories and symbolic links.
If this option is used twice, the second will again disable list only. If this option is used twice, the second will again disable list only.
.IP "--local-port <num>[-num]"
Set a prefered number or range of local port numbers to use for the
connection(s). Note that port numbers by nature is a scarce resource that
will be busy at times so setting this range to something too narrow might
cause unnecessary connection setup failures. (Added in 7.15.2)
.IP "-L/--location" .IP "-L/--location"
(HTTP/HTTPS) If the server reports that the requested page has a different (HTTP/HTTPS) If the server reports that the requested page has moved to a
location (indicated with the header line Location:) this flag will let curl different location (indicated with a Location: header and a 3XX response code)
attempt to reattempt the get on the new place. If used together with this option will make curl redo the request on the new place. If used together
\fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages will with \fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages
be shown. If authentication is used, curl will only send its credentials to will be shown. When authentication is used, curl only sends its credentials to
the initial host, so if a redirect takes curl to a different host, it won't the initial host. If a redirect takes curl to a different host, it won't be
intercept the user+password. See also \fI--location-trusted\fP on how to able to intercept the user+password. See also \fI--location-trusted\fP on how
change this. to change this. You can limit the amount of redirects to follow by using the
\fI--max-redirs\fP option.
If this option is used twice, the second will again disable location following. If this option is used twice, the second will again disable location following.
.IP "--location-trusted" .IP "--location-trusted"
@@ -569,8 +641,7 @@ this given limit. This concerns both FTP and HTTP transfers.
.IP "-m/--max-time <seconds>" .IP "-m/--max-time <seconds>"
Maximum time in seconds that you allow the whole operation to take. This is Maximum time in seconds that you allow the whole operation to take. This is
useful for preventing your batch jobs from hanging for hours due to slow useful for preventing your batch jobs from hanging for hours due to slow
networks or links going down. This doesn't work fully in win32 systems. See networks or links going down. See also the \fI--connect-timeout\fP option.
also the \fI--connect-timeout\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 "-M/--manual" .IP "-M/--manual"
@@ -589,7 +660,7 @@ directory.
A quick and very simple example of how to setup a \fI.netrc\fP to allow curl A quick and very simple example of how to setup a \fI.netrc\fP to allow curl
to ftp to the machine host.domain.com with user name \&'myself' and password to ftp to the machine host.domain.com with user name \&'myself' and password
'secret' should look similar to: \&'secret' should look similar to:
.B "machine host.domain.com login myself password secret" .B "machine host.domain.com login myself password secret"
@@ -602,12 +673,16 @@ Very similar to \fI--netrc\fP, but this option makes the .netrc usage
designed by Microsoft and is used in their web applications. It is primarily designed by Microsoft and is used in their web applications. It is primarily
meant as a support for Kerberos5 authentication but may be also used along meant as a support for Kerberos5 authentication but may be also used along
with another authentication methods. For more information see IETF draft with another authentication methods. For more information see IETF draft
draft-brezak-spnego-http-04.txt. (Added in 7.10.6) draft-brezak-spnego-http-04.txt.
This option requires that the library was built with GSSAPI support. This is This option requires that the library was built with GSSAPI support. This is
not very common. Use \fI-V/--version\fP to see if your version supports not very common. Use \fI-V/--version\fP to see if your version supports
GSS-Negotiate. GSS-Negotiate.
When using this option, you must also provide a fake -u/--user option to
activate the authentication code properly. Sending a '-u :' is enough as the
user name and password from the -u option aren't actually used.
If this option is used several times, the following occurrences make no If this option is used several times, the following occurrences make no
difference. difference.
.IP "-N/--no-buffer" .IP "-N/--no-buffer"
@@ -623,7 +698,7 @@ designed by Microsoft and is used by IIS web servers. It is a proprietary
protocol, reversed engineered by clever people and implemented in curl based protocol, reversed engineered by clever people and implemented in curl based
on their efforts. This kind of behavior should not be endorsed, you should on their efforts. This kind of behavior should not be endorsed, you should
encourage everyone who uses NTLM to switch to a public and documented encourage everyone who uses NTLM to switch to a public and documented
authentication method instead. Such as Digest. (Added in 7.10.6) authentication method instead. Such as Digest.
If you want to enable NTLM for your proxy authentication, then use If you want to enable NTLM for your proxy authentication, then use
\fI--proxy-ntlm\fP. \fI--proxy-ntlm\fP.
@@ -653,8 +728,8 @@ dynamically.
Write output to a local file named like the remote file we get. (Only the file Write output to a local file named like the remote file we get. (Only the file
part of the remote file is used, the path is cut off.) part of the remote file is used, the path is cut off.)
The remote file name to use for saving is extracted from the given URL. The remote file name to use for saving is extracted from the given URL,
Nothing else nothing else.
You may use this option as many times as you have number of URLs. You may use this option as many times as you have number of URLs.
.IP "--pass <phrase>" .IP "--pass <phrase>"
@@ -663,8 +738,8 @@ You may use this option as many times as you have number of URLs.
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-anyauth" .IP "--proxy-anyauth"
Tells curl to pick a suitable authentication method when communicating with Tells curl to pick a suitable authentication method when communicating with
the given proxy. This will cause an extra request/response round-trip. Added the given proxy. This will cause an extra request/response round-trip. (Added
in curl 7.13.2. in 7.13.2)
If this option is used twice, the second will again disable the proxy use-any If this option is used twice, the second will again disable the proxy use-any
authentication. authentication.
@@ -707,7 +782,8 @@ i.e "192.168.10.1" to specify exact IP number
.IP "host name" .IP "host name"
i.e "my.host.domain" to specify machine i.e "my.host.domain" to specify machine
.IP "-" .IP "-"
(any single-letter string) to make it pick the machine's default make curl pick the same IP address that is already used for the control
connection
.RE .RE
If this option is used several times, the last one will be used. Disable the If this option is used several times, the last one will be used. Disable the
@@ -747,7 +823,7 @@ specifies the second 500 bytes
.B -500 .B -500
specifies the last 500 bytes specifies the last 500 bytes
.TP .TP
.B 9500 .B 9500-
specifies the bytes from offset 9500 and forward specifies the bytes from offset 9500 and forward
.TP .TP
.B 0-0,-1 .B 0-0,-1
@@ -788,7 +864,7 @@ for all forthcoming retries it will double the waiting time until it reaches
10 minutes which then will be the delay between the rest of the retries. By 10 minutes which then will be the delay between the rest of the retries. By
using \fI--retry-delay\fP you disable this exponential backoff algorithm. See using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
also \fI--retry-max-time\fP to limit the total time allowed for also \fI--retry-max-time\fP to limit the total time allowed for
retries. (Option added in 7.12.3) retries. (Added in 7.12.3)
If this option is used multiple times, the last occurrence decide the amount. If this option is used multiple times, the last occurrence decide the amount.
.IP "--retry-delay <seconds>" .IP "--retry-delay <seconds>"
@@ -796,7 +872,7 @@ Make curl sleep this amount of time between each retry when a transfer has
failed with a transient error (it changes the default backoff time algorithm failed with a transient error (it changes the default backoff time algorithm
between retries). This option is only interesting if \fI--retry\fP is also between retries). This option is only interesting if \fI--retry\fP is also
used. Setting this delay to zero will make curl use the default backoff time. used. Setting this delay to zero will make curl use the default backoff time.
(Option added in 7.12.3) (Added in 7.12.3)
If this option is used multiple times, the last occurrence decide the amount. If this option is used multiple times, the last occurrence decide the amount.
.IP "--retry-max-time <seconds>" .IP "--retry-max-time <seconds>"
@@ -805,26 +881,36 @@ done as usual (see \fI--retry\fP) as long as the timer hasn't reached this
given limit. Notice that if the timer hasn't reached the limit, the request given limit. Notice that if the timer hasn't reached the limit, the request
will be made and while performing, it may take longer than this given time will be made and while performing, it may take longer than this given time
period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP. period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP.
Set this option to zero to not timeout retries. (Option added in 7.12.3) Set this option to zero to not timeout retries. (Added in 7.12.3)
If this option is used multiple times, the last occurrence decide the amount. If this option is used multiple times, the last occurrence decide the amount.
.IP "-s/--silent" .IP "-s/--silent"
Silent mode. Don't show progress meter or error messages. Makes Silent mode. Don't show progress meter or error messages. Makes
Curl mute. Curl mute.
If this option is used twice, the second will again disable mute. If this option is used twice, the second will again disable silent mode.
.IP "-S/--show-error" .IP "-S/--show-error"
When used with -s it makes curl show error message if it fails. When used with -s it makes curl show error message if it fails.
If this option is used twice, the second will again disable show error. If this option is used twice, the second will again disable show error.
.IP "--socks <host[:port]>" .IP "--socks4 <host[:port]>"
Use the specified SOCKS5 proxy. If the port number is not specified, it is Use the specified SOCKS4 proxy. If the port number is not specified, it is
assumed at port 1080. (Option added in 7.11.1) assumed at port 1080. (Added in 7.15.2)
This option overrides any previous use of \fI-x/--proxy\fP, as they are This option overrides any previous use of \fI-x/--proxy\fP, as they are
mutually exclusive. mutually exclusive.
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 "--socks5 <host[:port]>"
Use the specified SOCKS5 proxy. If the port number is not specified, it is
assumed at port 1080. (Added in 7.11.1)
This option overrides any previous use of \fI-x/--proxy\fP, as they are
mutually exclusive.
If this option is used several times, the last one will be used. (This option
was previously wrongly documented and used as --socks without the number
appended.)
.IP "--stderr <file>" .IP "--stderr <file>"
Redirect all writes to stderr to the specified file instead. If the file name Redirect all writes to stderr to the specified file instead. If the file name
is a plain '-', it is instead written to stdout. This option has no point when is a plain '-', it is instead written to stdout. This option has no point when
@@ -854,13 +940,10 @@ this is used on a http(s) server, the PUT command will be used.
Use the file name "-" (a single dash) to use stdin instead of a given file. Use the file name "-" (a single dash) to use stdin instead of a given file.
Before 7.10.8, when this option was used several times, the last one was used. You can specify one -T for each URL on the command line. Each -T + URL pair
specifies what to upload and to where. curl also supports "globbing" of the -T
In curl 7.10.8 and later, you can specify one -T for each URL on the command argument, meaning that you can upload multiple files to a single URL by using
line. Each -T + URL pair specifies what to upload and to where. curl also the same URL globbing style supported in the URL, like this:
supports "globbing" of the -T argument, meaning that you can upload multiple
files to a single URL by using the same URL globbing style supported in the
URL, like this:
curl -T "{file1,file2}" http://www.uploadtothissite.com curl -T "{file1,file2}" http://www.uploadtothissite.com
@@ -872,8 +955,7 @@ Enables a full trace dump of all incoming and outgoing data, including
descriptive information, to the given output file. Use "-" as filename to have descriptive information, to the given output file. Use "-" as filename to have
the output sent to stdout. the output sent to stdout.
If this option is used several times, the last one will be used. (Added in If this option is used several times, the last one will be used.
7.9.7)
.IP "--trace-ascii <file>" .IP "--trace-ascii <file>"
Enables a full trace dump of all incoming and outgoing data, including Enables a full trace dump of all incoming and outgoing data, including
descriptive information, to the given output file. Use "-" as filename to have descriptive information, to the given output file. Use "-" as filename to have
@@ -883,21 +965,28 @@ This is very similar to \fI--trace\fP, but leaves out the hex part and only
shows the ASCII part of the dump. It makes smaller output that might be easier shows the ASCII part of the dump. It makes smaller output that might be easier
to read for untrained humans. to read for untrained humans.
If this option is used several times, the last one will be used. (Added in If this option is used several times, the last one will be used.
7.9.7)
.IP "--trace-time" .IP "--trace-time"
Prepends a time stamp to each trace or verbose line that curl displays. Prepends a time stamp to each trace or verbose line that curl displays.
(Added in 7.14.0)
If this option is used several times, each occurrence will toggle it on/off. If this option is used several times, each occurrence will toggle it on/off.
(Added in 7.14.0 )
.IP "-u/--user <user:password>" .IP "-u/--user <user:password>"
Specify user and password to use for server authentication. Overrides Specify user and password to use for server authentication. Overrides
\fI-n/--netrc\fP and \fI--netrc-optional\fP. \fI-n/--netrc\fP and \fI--netrc-optional\fP.
If you use an SSPI-enabled curl binary and do NTLM autentication, you can
force curl to pick up the user name and password from your environment by
simply specifying a single colon with this option: "-u :".
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 "-U/--proxy-user <user:password>" .IP "-U/--proxy-user <user:password>"
Specify user and password to use for proxy authentication. Specify user and password to use for proxy authentication.
If you use an SSPI-enabled curl binary and do NTLM autentication, you can
force curl to pick up the user name and password from your environment by
simply specifying a single colon with this option: "-U :".
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 "--url <URL>" .IP "--url <URL>"
Specify a URL to fetch. This option is mostly handy when you want to specify Specify a URL to fetch. This option is mostly handy when you want to specify
@@ -958,11 +1047,11 @@ SSPI is supported. If you use NTLM and set a blank user name, curl will
authenticate with your current user and password. authenticate with your current user and password.
.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 on stdout after a completed and successful
is a string that may contain plain text mixed with any number of variables. The operation. The format is a string that may contain plain text mixed with any
string can be specified as "string", to get read from a particular file you number of variables. The string can be specified as "string", to get read from
specify it "@filename" and to tell curl to read the format from stdin you a particular file you specify it "@filename" and to tell curl to read the
write "@-". format from stdin you write "@-".
The variables present in the output format will be substituted by the value or The variables present in the output format will be substituted by the value or
text that curl thinks fit, as described below. All variables are specified text that curl thinks fit, as described below. All variables are specified
@@ -1035,7 +1124,7 @@ The average download speed that curl measured for the complete download.
The average upload speed that curl measured for the complete upload. The average upload speed that curl measured for the complete upload.
.TP .TP
.B content_type .B content_type
The Content-Type of the requested document, if there was any. (Added in 7.9.5) The Content-Type of the requested document, if there was any.
.TP .TP
.B num_connects .B num_connects
Number of new connects made in the recent transfer. (Added in 7.12.3) Number of new connects made in the recent transfer. (Added in 7.12.3)
@@ -1058,12 +1147,16 @@ transparently be converted to HTTP. It means that certain protocol specific
operations might not be available. This is not the case if you can tunnel operations might not be available. This is not the case if you can tunnel
through the proxy, as done with the \fI-p/--proxytunnel\fP option. through the proxy, as done with the \fI-p/--proxytunnel\fP option.
Starting with 7.14.1, the proxy host can be specified the exact same way as
the proxy environment variables, include protocol prefix (http://) and
embedded user + password.
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 "-X/--request <command>" .IP "-X/--request <command>"
(HTTP) (HTTP) Specifies a custom request method to use when communicating with the
Specifies a custom request to use when communicating with the HTTP server. HTTP server. The specified request will be used instead of the method
The specified request will be used instead of the standard GET. Read the otherwise used (which defaults to GET). Read the HTTP 1.1 specification for
HTTP 1.1 specification for details and explanations. details and explanations.
(FTP) (FTP)
Specifies a custom FTP command to use instead of LIST when doing file lists Specifies a custom FTP command to use instead of LIST when doing file lists
@@ -1100,7 +1193,8 @@ If this option is used several times, the last one will be used.
.IP "--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". By default, the limit is set to 50 redirections. Set this
option to -1 to make it limitless.
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 "-0/--http1.0" .IP "-0/--http1.0"
@@ -1129,11 +1223,11 @@ Note that not all FTP server allow 3rd party transfers. (Added in 7.13.0)
.IP "-4/--ipv4" .IP "-4/--ipv4"
If libcurl is capable of resolving an address to multiple IP versions (which If libcurl is capable of resolving an address to multiple IP versions (which
it is if it is ipv6-capable), this option tells libcurl to resolve names to it is if it is ipv6-capable), this option tells libcurl to resolve names to
IPv4 addresses only. (Added in 7.10.8) IPv4 addresses only.
.IP "-6/--ipv6" .IP "-6/--ipv6"
If libcurl is capable of resolving an address to multiple IP versions (which If libcurl is capable of resolving an address to multiple IP versions (which
it is if it is ipv6-capable), this option tells libcurl to resolve names to it is if it is ipv6-capable), this option tells libcurl to resolve names to
IPv6 addresses only. (Added in 7.10.8) IPv6 addresses only.
.IP "-#/--progress-bar" .IP "-#/--progress-bar"
Make curl display progress information as a progress bar instead of the Make curl display progress information as a progress bar instead of the
default statistics. default statistics.
@@ -1151,13 +1245,11 @@ Sets proxy server to use for HTTP.
Sets proxy server to use for HTTPS. Sets proxy server to use for HTTPS.
.IP "FTP_PROXY [protocol://]<host>[:port]" .IP "FTP_PROXY [protocol://]<host>[:port]"
Sets proxy server to use for FTP. Sets proxy server to use for FTP.
.IP "GOPHER_PROXY [protocol://]<host>[:port]"
Sets proxy server to use for GOPHER.
.IP "ALL_PROXY [protocol://]<host>[:port]" .IP "ALL_PROXY [protocol://]<host>[:port]"
Sets proxy server to use if no protocol-specific proxy is set. Sets proxy server to use if no protocol-specific proxy is set.
.IP "NO_PROXY <comma-separated list of hosts>" .IP "NO_PROXY <comma-separated list of hosts>"
list of host names that shouldn't go through any proxy. If set to a asterisk list of host names that shouldn't go through any proxy. If set to a asterisk
'*' only, it matches all hosts. \&'*' only, it matches all hosts.
.SH EXIT CODES .SH EXIT CODES
There exists a bunch of different error codes and their corresponding error There exists a bunch of different error codes and their corresponding error
messages that may appear during bad conditions. At the time of this writing, messages that may appear during bad conditions. At the time of this writing,
@@ -1179,7 +1271,9 @@ Failed to connect to host.
.IP 8 .IP 8
FTP weird server reply. The server sent data curl couldn't parse. FTP weird server reply. The server sent data curl couldn't parse.
.IP 9 .IP 9
FTP access denied. The server denied login. FTP access denied. The server denied login or denied access to the particular
resource or directory you wanted to reach. Most often you tried to change to a
directory that doesn't exist on the server.
.IP 10 .IP 10
FTP user/password incorrect. Either one or both were not accepted by the FTP user/password incorrect. Either one or both were not accepted by the
server. server.

View File

@@ -10,7 +10,8 @@ EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
post-callback.c multi-app.c multi-double.c multi-single.c \ post-callback.c multi-app.c multi-double.c multi-single.c \
multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c \ multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c \
multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c \ multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c \
anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c \
cookie_interface.c cacertinmem.c synctime.c
all: all:
@echo "done" @echo "done"

View File

@@ -33,6 +33,8 @@ we expect you to actually torture our web site with your tests! Thanks.
EXAMPLES EXAMPLES
anyauthput.c - HTTP PUT using "any" authentication method anyauthput.c - HTTP PUT using "any" authentication method
cacertinmem.c - Use a built-in PEM certificate to retrieve a https page
cookie_interface.c - shows usage of simple cookie interface
curlgtk.c - download using a GTK progress bar curlgtk.c - download using a GTK progress bar
curlx.c - getting file info from the remote cert data curlx.c - getting file info from the remote cert data
debug.c - showing how to use the debug callback debug.c - showing how to use the debug callback
@@ -55,6 +57,7 @@ multi-double.c - a multi-interface app doing two simultaneous transfers
multi-post.c - a multi-interface app doing a multipart formpost multi-post.c - a multi-interface app doing a multipart formpost
multi-single.c - a multi-interface app getting a single file multi-single.c - a multi-interface app getting a single file
multithread.c - an example using multi-treading transfering multiple files multithread.c - an example using multi-treading transfering multiple files
opensslthreadlock.c - show how to do locking when using OpenSSL multi-threaded
persistant.c - request two URLs with a persistant connection persistant.c - request two URLs with a persistant connection
post-callback.c - send a HTTP POST using a callback post-callback.c - send a HTTP POST using a callback
postit2.c - send a HTTP multipart formpost postit2.c - send a HTTP multipart formpost
@@ -62,3 +65,4 @@ sepheaders.c - download headers to a separate file
simple.c - the most simple download a URL source simple.c - the most simple download a URL source
simplepost.c - HTTP POST simplepost.c - HTTP POST
simplessl.c - HTTPS example with certificates many options set simplessl.c - HTTPS example with certificates many options set
synctime.c - Sync local time by extracing date from remote HTTP servers

138
docs/examples/cacertinmem.c Normal file
View File

@@ -0,0 +1,138 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*
* Example using a "in core" PEM certificate to retrieve a https page.
* Written by Theo Borm
*/
/* on a netBSD system with OPENSSL& LIBCURL installed from
* pkgsrc (using default paths) this program can be compiled using:
* gcc -I/usr/pkg/include -L/usr/pkg/lib -lcurl -Wl,-R/usr/pkg/lib -lssl
* -lcrypto -lz -o curlcacerttest curlcacerttest.c
* on other operating systems you may want to change paths to headers
* and libraries
*/
#include <openssl/ssl.h>
#include <curl/curl.h>
#include <stdio.h>
size_t writefunction( void *ptr, size_t size, size_t nmemb, void *stream)
{
fwrite(ptr,size,nmemb,stream);
return(nmemb*size);
}
static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm)
{
X509_STORE * store;
X509 * cert=NULL;
BIO * bio;
char * mypem = /* www.cacert.org */
"-----BEGIN CERTIFICATE-----\n"\
"MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290\n"\
"IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB\n"\
"IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA\n"\
"Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO\n"\
"BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi\n"\
"MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ\n"\
"ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC\n"\
"CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ\n"\
"8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6\n"\
"zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y\n"\
"fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7\n"\
"w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc\n"\
"G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k\n"\
"epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q\n"\
"laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ\n"\
"QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU\n"\
"fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826\n"\
"YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w\n"\
"ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY\n"\
"gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe\n"\
"MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0\n"\
"IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy\n"\
"dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw\n"\
"czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0\n"\
"dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl\n"\
"aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC\n"\
"AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg\n"\
"b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB\n"\
"ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc\n"\
"nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg\n"\
"18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c\n"\
"gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl\n"\
"Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY\n"\
"sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T\n"\
"SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF\n"\
"CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum\n"\
"GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk\n"\
"zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW\n"\
"omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD\n"\
"-----END CERTIFICATE-----\n";
/* get a BIO */
bio=BIO_new_mem_buf(mypem, -1);
/* use it to read the PEM formatted certificate from memory into an X509
* structure that SSL can use
*/
PEM_read_bio_X509(bio, &cert, 0, NULL);
if (cert == NULL)
printf("PEM_read_bio_X509 failed...\n");
/* get a pointer to the X509 certificate store (which may be empty!) */
store=SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
/* add our certificate to this store */
if (X509_STORE_add_cert(store, cert)==0)
printf("error adding certificate\n");
/* all set to go */
return CURLE_OK ;
}
int main(void)
{
CURL * ch;
CURLcode rv;
rv=curl_global_init(CURL_GLOBAL_ALL);
ch=curl_easy_init();
rv=curl_easy_setopt(ch,CURLOPT_VERBOSE, 0);
rv=curl_easy_setopt(ch,CURLOPT_HEADER, 0);
rv=curl_easy_setopt(ch,CURLOPT_NOPROGRESS, 1);
rv=curl_easy_setopt(ch,CURLOPT_NOSIGNAL, 1);
rv=curl_easy_setopt(ch,CURLOPT_WRITEFUNCTION, *writefunction);
rv=curl_easy_setopt(ch,CURLOPT_WRITEDATA, stdout);
rv=curl_easy_setopt(ch,CURLOPT_HEADERFUNCTION, *writefunction);
rv=curl_easy_setopt(ch,CURLOPT_WRITEHEADER, stderr);
rv=curl_easy_setopt(ch,CURLOPT_SSLCERTTYPE,"PEM");
rv=curl_easy_setopt(ch,CURLOPT_SSL_VERIFYPEER,1);
rv=curl_easy_setopt(ch, CURLOPT_URL, "https://www.cacert.org/");
/* first try: retrieve page without cacerts' certificate -> will fail
*/
rv=curl_easy_perform(ch);
if (rv==CURLE_OK)
printf("*** transfer succeeded ***\n");
else
printf("*** transfer failed ***\n");
/* second try: retrieve page using cacerts' certificate -> will succeed
* load the certificate by installing a function doing the nescessary
* "modifications" to the SSL CONTEXT just before link init
*/
rv=curl_easy_setopt(ch,CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
rv=curl_easy_perform(ch);
if (rv==CURLE_OK)
printf("*** transfer succeeded ***\n");
else
printf("*** transfer failed ***\n");
curl_easy_cleanup(ch);
curl_global_cleanup();
}

View File

@@ -0,0 +1,110 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* This example shows usage of simple cookie interface.
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <curl/curl.h>
static void
print_cookies(CURL *curl)
{
CURLcode res;
struct curl_slist *cookies;
struct curl_slist *nc;
int i;
printf("Cookies, curl knows:\n");
res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
if (res != CURLE_OK) {
fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n", curl_easy_strerror(res));
exit(1);
}
nc = cookies, i = 1;
while (nc) {
printf("[%d]: %s\n", i, nc->data);
nc = nc->next;
i++;
}
if (i == 1) {
printf("(none)\n");
}
curl_slist_free_all(cookies);
}
int
main(void)
{
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
char nline[256];
curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/"); /* google.com sets "PREF" cookie */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); /* just to start the cookie engine */
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
return 1;
}
print_cookies(curl);
printf("Erasing curl's knowledge of cookies!\n");
curl_easy_setopt(curl, CURLOPT_COOKIELIST, "ALL");
print_cookies(curl);
printf("-----------------------------------------------\n"
"Setting a cookie \"PREF\" via cookie interface:\n");
#ifdef WIN32
#define snprintf _snprintf
#endif
/* Netscape format cookie */
snprintf(nline, 256, "%s\t%s\t%s\t%s\t%u\t%s\t%s",
".google.com", "TRUE", "/", "FALSE", time(NULL) + 31337, "PREF", "hello google, i like you very much!");
res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
if (res != CURLE_OK) {
fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res));
return 1;
}
/* HTTP-header style cookie */
snprintf(nline, 256,
"Set-Cookie: OLD_PREF=3d141414bf4209321; "
"expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com");
res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
if (res != CURLE_OK) {
fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res));
return 1;
}
print_cookies(curl);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
return 1;
}
}
else {
fprintf(stderr, "Curl init failed!\n");
return 1;
}
curl_global_cleanup();
return 0;
}

View File

@@ -14,6 +14,8 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h> #include <curl/curl.h>
#include <curl/types.h> #include <curl/types.h>
@@ -93,5 +95,8 @@ int main(int argc, char **argv)
* you're done with it, you should free() it as a nice application. * you're done with it, you should free() it as a nice application.
*/ */
if(chunk.memory)
free(chunk.memory);
return 0; return 0;
} }

View File

@@ -20,7 +20,8 @@ PROGRAMS = fopen.exe ftpget.exe ftpgetresp.exe ftpupload.exe \
multi-double.exe multi-post.exe multi-single.exe \ multi-double.exe multi-post.exe multi-single.exe \
persistant.exe post-callback.exe postit2.exe \ persistant.exe post-callback.exe postit2.exe \
sepheaders.exe simple.exe simplessl.exe https.exe \ sepheaders.exe simple.exe simplessl.exe https.exe \
ftp3rdparty.exe getinfo.exe anyauthput.exe ftp3rdparty.exe getinfo.exe anyauthput.exe \
cookie_interface.exe
all: $(PROGRAMS) all: $(PROGRAMS)

View File

@@ -78,7 +78,7 @@ int main(void)
curl_slist *chunk = NULL; curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked"); chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked");
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER); res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
/* use curl_slist_free_all() after the *perform() call to free this /* use curl_slist_free_all() after the *perform() call to free this
list again */ list again */
} }
@@ -101,7 +101,7 @@ int main(void)
curl_slist *chunk = NULL; curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Expect:"); chunk = curl_slist_append(chunk, "Expect:");
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER); res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
/* use curl_slist_free_all() after the *perform() call to free this /* use curl_slist_free_all() after the *perform() call to free this
list again */ list again */
} }

339
docs/examples/synctime.c Normal file
View File

@@ -0,0 +1,339 @@
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id$
*
* This example code only builds as-is on Windows.
*
* Synchronising your computer clock via Internet time server usually relies
* on DAYTIME, TIME, or NTP protocols. These protocols provide good accurate
* time synchronisation but it does not work very well through a
* firewall/proxy. Some adjustment has to be made to the firewall/proxy for
* these protocols to work properly.
*
* There is an indirect method. Since most webserver provide server time in
* their HTTP header, therefore you could synchronise your computer clock
* using HTTP protocol which has no problem with firewall/proxy.
*
* For this software to work, you should take note of these items.
* 1. Your firewall/proxy must allow your computer to surf internet.
* 2. Webserver system time must in sync with the NTP time server,
* or at least provide an accurate time keeping.
* 3. Webserver HTTP header does not provide the milliseconds units,
* so there is no way to get very accurate time.
* 4. This software could only provide an accuracy of +- a few seconds,
* as Round-Trip delay time is not taken into consideration.
* Compensation of network, firewall/proxy delay cannot be simply divide
* the Round-Trip delay time by half.
* 5. Win32 SetSystemTime() API will set your computer clock according to
* GMT/UTC time. Therefore your computer timezone must be properly set.
* 6. Webserver data should not be cached by the proxy server. Some
* webserver provide Cache-Control to prevent caching.
*
* References:
* http://tf.nist.gov/timefreq/service/its.htm
* http://tf.nist.gov/timefreq/service/firewall.htm
*
* Usage:
* This software will synchronise your computer clock only when you issue
* it with --synctime. By default, it only display the webserver's clock.
*
* Written by: Frank (contributed to libcurl)
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
* IN NO EVENT SHALL THE AUTHOR OF THIS SOFTWARE BE LIABLE FOR
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
*/
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <curl/curl.h>
#define MAX_STRING 256
#define MAX_STRING1 MAX_STRING+1
typedef struct
{
char http_proxy[MAX_STRING1];
char proxy_user[MAX_STRING1];
char timeserver[MAX_STRING1];
} conf_t;
char DefaultTimeServer[4][MAX_STRING1] =
{
"http://nist.time.gov/timezone.cgi?UTC/s/0",
"http://www.google.com/",
"http://www.worldtimeserver.com/current_time_in_UTC.aspx",
"http://www.worldtime.com/cgi-bin/wt.cgi"
};
char *DayStr[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
char *MthStr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
int ShowAllHeader;
int AutoSyncTime;
SYSTEMTIME SYSTime;
SYSTEMTIME LOCALTime;
#define HTTP_COMMAND_HEAD 0
#define HTTP_COMMAND_GET 1
size_t SyncTime_CURL_WriteOutput(void *ptr, size_t size, size_t nmemb,
void *stream)
{
fwrite(ptr, size, nmemb, stream);
return(nmemb*size);
}
size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
void *stream)
{
int i, RetVal;
char TmpStr1[26], TmpStr2[26];
if (ShowAllHeader == 1)
fprintf(stderr, "%s", (char *)(ptr));
if (strncmp((char *)(ptr), "Date:", 5) == 0) {
if (ShowAllHeader == 0)
fprintf(stderr, "HTTP Server. %s", (char *)(ptr));
if (AutoSyncTime == 1) {
*TmpStr1 = 0;
*TmpStr2 = 0;
if (strlen((char *)(ptr)) > 50) /* Can prevent buffer overflow to
TmpStr1 & 2? */
AutoSyncTime = 0;
else {
RetVal = sscanf ((char *)(ptr), "Date: %s %d %s %d %d:%d:%d",
TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear,
&SYSTime.wHour, &SYSTime.wMinute, &SYSTime.wSecond);
if (RetVal == 7) {
SYSTime.wMilliseconds = 500; /* adjust to midpoint, 0.5 sec */
for (i=0; i<12; i++) {
if (strcmp(MthStr[i], TmpStr2) == 0) {
SYSTime.wMonth = i+1;
break;
}
}
AutoSyncTime = 3; /* Computer clock will be adjusted */
}
else {
AutoSyncTime = 0; /* Error in sscanf() fields conversion */
}
}
}
}
if (strncmp((char *)(ptr), "X-Cache: HIT", 12) == 0) {
fprintf(stderr, "ERROR: HTTP Server data is cached."
" Server Date is no longer valid.\n");
AutoSyncTime = 0;
}
return(nmemb*size);
}
void SyncTime_CURL_Init(CURL *curl, char *proxy_port,
char *proxy_user_password)
{
if (strlen(proxy_port) > 0)
curl_easy_setopt(curl, CURLOPT_PROXY, proxy_port);
if (strlen(proxy_user_password) > 0)
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_password);
/* Trick Webserver by claiming that you are using Microsoft WinXP SP2, IE6 */
curl_easy_setopt(curl, CURLOPT_USERAGENT,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, *SyncTime_CURL_WriteOutput);
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, *SyncTime_CURL_WriteHeader);
}
int SyncTime_CURL_Fetch(CURL *curl, char *URL_Str, char *OutFileName,
int HttpGetBody)
{
FILE *outfile;
CURLcode res;
outfile = NULL;
if (HttpGetBody == HTTP_COMMAND_HEAD)
curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
else {
outfile = fopen(OutFileName, "wb");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
}
curl_easy_setopt(curl, CURLOPT_URL, URL_Str);
res = curl_easy_perform(curl);
if (outfile != NULL)
fclose(outfile);
return res; /* (CURLE_OK) */
}
void showUsage(void)
{
fprintf(stderr, "SYNCTIME: Synchronising computer clock with time server"
" using HTTP protocol.\n");
fprintf(stderr, "Usage : SYNCTIME [Option]\n");
fprintf(stderr, "Options :\n");
fprintf(stderr, " --server=WEBSERVER Use this time server instead"
" of default.\n");
fprintf(stderr, " --showall Show all HTTP header.\n");
fprintf(stderr, " --synctime Synchronising computer clock"
" with time server.\n");
fprintf(stderr, " --proxy-user=USER[:PASS] Set proxy username and"
" password.\n");
fprintf(stderr, " --proxy=HOST[:PORT] Use HTTP proxy on given"
" port.\n");
fprintf(stderr, " --help Print this help.\n");
fprintf(stderr, "\n");
return;
}
int conf_init(conf_t *conf)
{
int i;
*conf->http_proxy = 0;
for (i=0; i<MAX_STRING1; i++)
conf->proxy_user[i] = 0; /* Clean up password from memory */
*conf->timeserver = 0;
return 1;
}
int main(int argc, char *argv[])
{
CURL *curl;
conf_t conf[1];
int OptionIndex;
struct tm *lt;
struct tm *gmt;
time_t tt;
time_t tt_local;
time_t tt_gmt;
double tzonediffFloat;
int tzonediffWord;
char timeBuf[61];
char tzoneBuf[16];
int RetValue;
OptionIndex = 0;
ShowAllHeader = 0; /* Do not show HTTP Header */
AutoSyncTime = 0; /* Do not synchronise computer clock */
RetValue = 0; /* Successful Exit */
conf_init(conf);
if (argc > 1) {
while (OptionIndex < argc) {
if (strncmp(argv[OptionIndex], "--server=", 9) == 0)
snprintf(conf->timeserver, MAX_STRING, "%s", &argv[OptionIndex][9]);
if (strcmp(argv[OptionIndex], "--showall") == 0)
ShowAllHeader = 1;
if (strcmp(argv[OptionIndex], "--synctime") == 0)
AutoSyncTime = 1;
if (strncmp(argv[OptionIndex], "--proxy-user=", 13) == 0)
snprintf(conf->proxy_user, MAX_STRING, "%s", &argv[OptionIndex][13]);
if (strncmp(argv[OptionIndex], "--proxy=", 8) == 0)
snprintf(conf->http_proxy, MAX_STRING, "%s", &argv[OptionIndex][8]);
if ((strcmp(argv[OptionIndex], "--help") == 0) ||
(strcmp(argv[OptionIndex], "/?") == 0)) {
showUsage();
return 0;
}
OptionIndex++;
}
}
if (*conf->timeserver == 0) /* Use default server for time information */
snprintf(conf->timeserver, MAX_STRING, "%s", DefaultTimeServer[0]);
/* Init CURL before usage */
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
SyncTime_CURL_Init(curl, conf->http_proxy, conf->proxy_user);
/* Calculating time diff between GMT and localtime */
tt = time(0);
lt = localtime(&tt);
tt_local = mktime(lt);
gmt = gmtime(&tt);
tt_gmt = mktime(gmt);
tzonediffFloat = difftime(tt_local, tt_gmt);
tzonediffWord = (int)(tzonediffFloat/3600.0);
if ((double)(tzonediffWord * 3600) == tzonediffFloat)
snprintf(tzoneBuf, 15, "%+03d'00'", tzonediffWord);
else
snprintf(tzoneBuf, 15, "%+03d'30'", tzonediffWord);
/* Get current system time and local time */
GetSystemTime(&SYSTime);
GetLocalTime(&LOCALTime);
snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
LOCALTime.wMilliseconds);
fprintf(stderr, "\nBefore HTTP. Date: %s%s\n\n", timeBuf, tzoneBuf);
/* HTTP HEAD command to the Webserver */
fprintf(stderr, "Fetch: %s\n", conf->timeserver);
SyncTime_CURL_Fetch(curl, conf->timeserver, "index.htm",
HTTP_COMMAND_HEAD);
GetLocalTime(&LOCALTime);
snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
LOCALTime.wMilliseconds);
fprintf(stderr, "\nAfter HTTP. Date: %s%s\n", timeBuf, tzoneBuf);
if (AutoSyncTime == 3) {
/* Synchronising computer clock */
if (!SetSystemTime(&SYSTime)) { /* Set system time */
fprintf(stderr, "ERROR: Unable to set system time.\n");
RetValue = 1;
}
else {
/* Successfully re-adjusted computer clock */
GetLocalTime(&LOCALTime);
snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
LOCALTime.wMilliseconds);
fprintf(stderr, "\nNew System's Date: %s%s\n", timeBuf, tzoneBuf);
}
}
/* Cleanup before exit */
conf_init(conf);
curl_easy_cleanup(curl);
}
return RetValue;
}

View File

@@ -2,7 +2,7 @@
.\" nroff -man [file] .\" nroff -man [file]
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_easy_getinfo 3 "22 Dec 2004" "libcurl 7.12.3" "libcurl Manual" .TH curl_easy_getinfo 3 "6 Oct 2005" "libcurl 7.12.3" "libcurl Manual"
.SH NAME .SH NAME
curl_easy_getinfo - extract information from a curl handle curl_easy_getinfo - extract information from a curl handle
.SH SYNOPSIS .SH SYNOPSIS
@@ -15,9 +15,9 @@ Request internal information from the curl session with this function. The
third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a
pointer to a struct curl_slist * or a pointer to a double (as this pointer to a struct curl_slist * or a pointer to a double (as this
documentation describes further down). The data pointed-to will be filled in documentation describes further down). The data pointed-to will be filled in
accordingly and can be relied upon only if the function returns CURLE_OK. accordingly and can be relied upon only if the function returns CURLE_OK. Use
This function is intended to get used AFTER a performed transfer, all results this function AFTER a performed transfer if you want to get transfer- oriented
from this function are undefined until the transfer is completed. data.
You should not free the memory returned by this function unless it is You should not free the memory returned by this function unless it is
explictly mentioned below. explictly mentioned below.
@@ -35,12 +35,14 @@ this.
Pass a pointer to a long to receive the last received proxy response code to a Pass a pointer to a long to receive the last received proxy response code to a
CONNECT request. CONNECT request.
.IP CURLINFO_FILETIME .IP CURLINFO_FILETIME
Pass a pointer to a long to receive the remote time of the retrieved Pass a pointer to a long to receive the remote time of the retrieved document
document. If you get -1, it can be because of many reasons (unknown, the (in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get
server hides it or the server doesn't support the command that tells document -1, it can be because of many reasons (unknown, the server hides it or the
time etc) and the time of the document is unknown. Note that you must tell the server doesn't support the command that tells document time etc) and the time
server to collect this information before the transfer is made, by using the of the document is unknown. Note that you must tell the server to collect this
CURLOPT_FILETIME option to \fIcurl_easy_setopt(3)\fP. (Added in 7.5) information before the transfer is made, by using the CURLOPT_FILETIME option
to \fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back. (Added
in 7.5)
.IP CURLINFO_TOTAL_TIME .IP CURLINFO_TOTAL_TIME
Pass a pointer to a double to receive the total transaction time in seconds Pass a pointer to a double to receive the total transaction time in seconds
for the previous transfer. This time does not include the connect time, so if for the previous transfer. This time does not include the connect time, so if
@@ -132,6 +134,54 @@ counted). Combined with \fICURLINFO_REDIRECT_COUNT\fP you are able to know
how many times libcurl successfully reused existing connection(s) or not. See how many times libcurl successfully reused existing connection(s) or not. See
the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries
to make persistent connections to save time. (Added in 7.12.3) to make persistent connections to save time. (Added in 7.12.3)
.IP CURLINFO_COOKIELIST
Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all
cookies cURL knows (expired ones, too). Don't forget to
\fIcurl_slist_free_all(3)\fP the list after it has been used. If there are no
cookies (cookies for the handle have not been enabled or simply none have been
received) 'struct curl_slist *' will be set to point to NULL. (Added in
7.14.1)
.IP CURLINFO_LASTSOCKET
Pass a pointer to a long to receive the last socket used by this curl
session. If the socket is no longer valid, -1 is returned. When you finish
working with the socket, you must call curl_easy_cleanup() as usual and let
libcurl close the socket and cleanup other resources associated with the
handle. This is typically used in combination with \fICURLOPT_CONNECT_ONLY\fP.
(Added in 7.15.2)
.SH TIMES
.NF
An overview of the six time values available from curl_easy_getinfo()
curl_easy_perform()
|
|--NT
|--|--CT
|--|--|--PT
|--|--|--|--ST
|--|--|--TT
|--|--|--|--|--RT
.FI
.IP NT
\fICURLINFO_NAMELOOKUP_TIME\fP. The time it took from the start until the name
resolving was completed.
.IP CT
\fICURLINFO_CONNECT_TIME\fP. The time it took from the start until the connect
to the remote host (or proxy) was completed.
.IP PT
\fICURLINFO_PRETRANSFER_TIME\fP. The time it took from the start until the
file transfer is just about to begin. This includes all pre-transfer commands
and negotiations that are specific to the particular protocol(s) involved.
.IP ST
\fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the
first byte is just about to be transferred.
.IP TT
\fICURLINFO_TOTAL_TIME\fP. Time of the previous transfer. This time does not
include the connect time (CT), so if you want the complete operation time, you
should add that.
.IP RT
\fICURLINFO_REDIRECT_TIME\fP. The time it took for all redirection steps
include name lookup, connect, pretransfer and transfer before final
transaction was started. So, this is zero if no redirection took place.
.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

@@ -14,6 +14,17 @@ handle that you must use as input to other easy-functions. curl_easy_init
initializes curl and this call \fBMUST\fP have a corresponding call to initializes curl and this call \fBMUST\fP have a corresponding call to
\fIcurl_easy_cleanup(3)\fP when the operation is complete. \fIcurl_easy_cleanup(3)\fP when the operation is complete.
If you did not already call \fIcurl_global_init(3)\fP,
\fIcurl_easy_init(3)\fP does it automatically.
This may be lethal in multi-threaded cases, since \fIcurl_global_init(3)\fP is
not thread-safe, and it may result in resource problems because there is
no corresponding cleanup.
You are strongly advised to not allow this automatic behaviour, by
calling \fIcurl_global_init(3)\fP yourself properly.
See the description in \fBlibcurl\fP(3) of global environment
requirements for details of how to use this function.
.SH RETURN VALUE .SH RETURN VALUE
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.

View File

@@ -15,8 +15,8 @@ it was just created with \fIcurl_easy_init(3)\fP.
It does not change the following information kept in the handle: live It does not change the following information kept in the handle: live
connections, the Session ID cache, the DNS cache, the cookies and shares. connections, the Session ID cache, the DNS cache, the cookies and shares.
.SH AVAILABILITY
This function was added in libcurl 7.12.1. This function was added in libcurl 7.12.1
.SH RETURN VALUE .SH RETURN VALUE
Nothing Nothing
.SH "SEE ALSO" .SH "SEE ALSO"

View File

@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___ .\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____| .\" * \___|\___/|_| \_\_____|
.\" * .\" *
.\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * .\" *
.\" * This software is licensed as described in the file COPYING, which .\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms .\" * you should have received as part of this distribution. The terms
@@ -21,9 +21,9 @@
.\" * $Id$ .\" * $Id$
.\" ************************************************************************** .\" **************************************************************************
.\" .\"
.TH curl_easy_setopt 3 "12 May 2005" "libcurl 7.14.0" "libcurl Manual" .TH curl_easy_setopt 3 "21 Feb 2006" "libcurl 7.15.2" "libcurl Manual"
.SH NAME .SH NAME
curl_easy_setopt - set options for a curl easy handle curl_easy_setopt \- set options for a curl easy handle
.SH SYNOPSIS .SH SYNOPSIS
#include <curl/curl.h> #include <curl/curl.h>
@@ -44,11 +44,11 @@ between transfers, so if you want subsequent transfers with different options,
you must change them between the transfers. You can optionally reset all you must change them between the transfers. You can optionally reset all
options back to internal default with \fIcurl_easy_reset(3)\fP. options back to internal default with \fIcurl_easy_reset(3)\fP.
\fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be Strings passed to libcurl as 'char *' arguments, will not be copied by the
copied by the library. Instead you should keep them available until libcurl no library. Instead you should keep them available until libcurl no longer needs
longer needs them. Failing to do so will cause very odd behavior or even them. Failing to do so will cause very odd behavior or even crashes. libcurl
crashes. libcurl will need them until you call \fIcurl_easy_cleanup(3)\fP or will need them until you call \fIcurl_easy_cleanup(3)\fP or you set the same
you set the same option again to use a different pointer. option again to use a different pointer.
The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
\fIcurl_easy_duphandle(3)\fP call. \fIcurl_easy_duphandle(3)\fP call.
@@ -70,8 +70,8 @@ preceding the data (like HTTP).
A non-zero parameter tells the library to shut off the built-in progress meter A non-zero parameter tells the library to shut off the built-in progress meter
completely. completely.
\fBNOTE:\fP future versions of libcurl is likely to not have any built-in Future versions of libcurl is likely to not have any built-in progress meter
progress meter at all. at all.
.IP CURLOPT_NOSIGNAL .IP CURLOPT_NOSIGNAL
Pass a long. If it is non-zero, libcurl will not use any functions that Pass a long. If it is non-zero, libcurl will not use any functions that
install signal handlers or any functions that cause signals to be sent to the install signal handlers or any functions that cause signals to be sent to the
@@ -96,19 +96,26 @@ transfer and return \fICURLE_WRITE_ERROR\fP.
This function may be called with zero bytes data if the transfered file is This function may be called with zero bytes data if the transfered file is
empty. empty.
Set this option to NULL to get the internal default function. The internal
default function will write the data to the FILE * given with
\fICURLOPT_WRITEDATA\fP.
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 The callback function will be passed as much data as possible in all invokes,
you cannot possibly make any assumptions. It may be one byte, it may be but you cannot possibly make any assumptions. It may be one byte, it may be
thousands. The maximum amount of data that can be passed to the write callback thousands. The maximum amount of data that can be passed to the write callback
is defined in the curl.h header file: CURL_MAX_WRITE_SIZE. is defined in the curl.h header file: CURL_MAX_WRITE_SIZE.
.IP CURLOPT_WRITEDATA .IP CURLOPT_WRITEDATA
Data pointer to pass to the file write function. Note that if you specify the Data pointer to pass to the file write function. If you use the
\fICURLOPT_WRITEFUNCTION\fP, this is the pointer you'll get as input. If you \fICURLOPT_WRITEFUNCTION\fP option, this is the pointer you'll get as
don't use a callback, you must pass a 'FILE *' as libcurl will pass this to input. If you don't use a callback, you must pass a 'FILE *' as libcurl will
fwrite() when writing data. pass this to fwrite() when writing data.
\fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use the The internal \fICURLOPT_WRITEFUNCTION\fP will write the data to the FILE *
given with this option, or to stdout if this option hasn't been set.
If you're using libcurl as a win32 DLL, you \fBMUST\fP use the
\fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience \fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience
crashes. crashes.
@@ -129,15 +136,20 @@ 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 upload less than N bytes), you may experience that the server "hangs" waiting
for the rest of the data that won't come. for the rest of the data that won't come.
In libcurl 7.12.1 and later, the read callback may return The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current
\fICURL_READFUNC_ABORT\fP to stop the current operation at once, with a operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error
\fICURLE_ABORTED_BY_CALLBACK\fP error code from the transfer. code from the transfer (Added in 7.12.1)
.IP CURLOPT_READDATA
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
don't specify a read callback, this must be a valid FILE *.
\fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use a If you set the callback pointer to NULL, or doesn't set it at all, the default
internal read function will be used. It is simply doing an fread() on the FILE
* stream set with \fICURLOPT_READDATA\fP.
.IP CURLOPT_READDATA
Data pointer to pass to the file read function. If you use the
\fICURLOPT_READFUNCTION\fP option, this is the pointer you'll get as input. If
you don't specify a read callback but instead rely on the default internal
read function, this data must be a valid readable FILE *.
If you're using libcurl as a win32 DLL, you MUST use a
\fICURLOPT_READFUNCTION\fP if you set this option. \fICURLOPT_READFUNCTION\fP if you set this option.
This option is also known with the older name \fICURLOPT_INFILE\fP, the name This option is also known with the older name \fICURLOPT_INFILE\fP, the name
@@ -157,34 +169,49 @@ added in 7.12.3)
.IP CURLOPT_PROGRESSFUNCTION .IP CURLOPT_PROGRESSFUNCTION
Function pointer that should match the \fIcurl_progress_callback\fP prototype Function pointer that should match the \fIcurl_progress_callback\fP prototype
found in \fI<curl/curl.h>\fP. This function gets called by libcurl instead of found in \fI<curl/curl.h>\fP. This function gets called by libcurl instead of
its internal equivalent with a frequent interval during data transfer. its internal equivalent with a frequent interval during data transfer (roughly
Unknown/unused argument values will be set to zero (like if you only download once per second). Unknown/unused argument values pass to the callback will be
data, the upload size will remain 0). Returning a non-zero value from this set to zero (like if you only download data, the upload size will remain
callback will cause libcurl to abort the transfer and return 0). Returning a non-zero value from this callback will cause libcurl to abort
\fICURLE_ABORTED_BY_CALLBACK\fP. the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
Also note that \fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this If you transfer data with the multi interface, this function will not be
function actually get called. called during periods of idleness unless you call the appropriate libcurl
function that performs transfers. Usage of the \fBCURLOPT_PROGRESSFUNCTION\fP
callback is not recommended when using the multi interface.
\fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this function actually
get called.
.IP CURLOPT_PROGRESSDATA .IP CURLOPT_PROGRESSDATA
Pass a pointer that will be untouched by libcurl and passed as the first Pass a pointer that will be untouched by libcurl and passed as the first
argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP. argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP.
.IP CURLOPT_HEADERFUNCTION .IP CURLOPT_HEADERFUNCTION
Function pointer that should match the following prototype: \fIsize_t Function pointer that should match the following prototype: \fIsize_t
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP. This function( void *ptr, size_t size, size_t nmemb, void *stream);\fP. This
function gets called by libcurl as soon as there is received header data that function gets called by libcurl as soon as it has received header data. The
needs to be written down. The headers are guaranteed to be written one-by-one header callback will be called once for each header and only complete header
and only complete lines are written. Parsing headers should be easy enough lines are passed on to the callback. Parsing headers should be easy enough
using this. The size of the data pointed to by \fIptr\fP is \fIsize\fP using this. The size of the data pointed to by \fIptr\fP is \fIsize\fP
multiplied with \fInmemb\fP. The pointer named \fIstream\fP will be the one multiplied with \fInmemb\fP. Do not assume that the header line is zero
you passed to libcurl with the \fICURLOPT_WRITEHEADER\fP option. Return the terminated! The pointer named \fIstream\fP is the one you set with the
number of bytes actually written or return -1 to signal error to the library \fICURLOPT_WRITEHEADER\fP option. The callback function must return the number
of bytes actually taken care of, or return -1 to signal error to the library
(it will cause it to abort the transfer with a \fICURLE_WRITE_ERROR\fP return (it will cause it to abort the transfer with a \fICURLE_WRITE_ERROR\fP return
code). code).
Since 7.14.1: When a server sends a chunked encoded transfer, it may contain a
trailer. That trailer is identical to a HTTP header and if such a trailer is
received it is passed to the application using this callback as well. There
are several ways to detect it being a trailer and not an ordinary header: 1)
it comes after the response-body. 2) it comes after the final header line (CR
LF) 3) a Trailer: header among the response-headers mention what header to
expect in the trailer.
.IP CURLOPT_WRITEHEADER .IP CURLOPT_WRITEHEADER
Pass a pointer to be used to write the header part of the received data to. If (This option is also known as \fBCURLOPT_HEADERDATA\fP) Pass a pointer to be
you don't use your own callback to take care of the writing, this must be a used to write the header part of the received data to. If you don't use your
valid FILE *. See also the \fICURLOPT_HEADERFUNCTION\fP option above on how to own callback to take care of the writing, this must be a valid FILE *. See
set a custom get-all-headers callback. also the \fICURLOPT_HEADERFUNCTION\fP option above on how to set a custom
get-all-headers callback.
.IP CURLOPT_DEBUGFUNCTION .IP CURLOPT_DEBUGFUNCTION
Function pointer that should match the following prototype: \fIint Function pointer that should match the following prototype: \fIint
curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP
@@ -223,10 +250,13 @@ perform operation will return the error code from this callback function. Set
the \fIparm\fP argument with the \fICURLOPT_SSL_CTX_DATA\fP option. This the \fIparm\fP argument with the \fICURLOPT_SSL_CTX_DATA\fP option. This
option was introduced in 7.11.0. option was introduced in 7.11.0.
\fBNOTE:\fP To use this properly, a non-trivial amount of knowledge of the This function will get called on all new connections made to a server, during
openssl libraries is necessary. Using this function allows for example to use the SSL negotiation. The SSL_CTX pointer will be a new one every time.
openssl callbacks to add additional validation code for certificates, and even
to change the actual URI of an HTTPS request (example used in the lib509 test To use this properly, a non-trivial amount of knowledge of the openssl
libraries is necessary. Using this function allows for example to use openssl
callbacks to add additional validation code for certificates, and even to
change the actual URI of an HTTPS request (example used in the lib509 test
case). See also the example section for a replacement of the key, certificate case). See also the example section for a replacement of the key, certificate
and trust file settings. and trust file settings.
.IP CURLOPT_SSL_CTX_DATA .IP CURLOPT_SSL_CTX_DATA
@@ -236,20 +266,21 @@ parameter, otherwise \fBNULL\fP. (Added in 7.11.0)
.SH ERROR OPTIONS .SH ERROR OPTIONS
.IP CURLOPT_ERRORBUFFER .IP CURLOPT_ERRORBUFFER
Pass a char * to a buffer that the libcurl may store human readable error Pass a char * to a buffer that the libcurl may store human readable error
messages in. This may be more helpful than just the return code from the messages in. This may be more helpful than just the return code from
library. The buffer must be at least CURL_ERROR_SIZE big. \fIcurl_easy_perform\fP. The buffer must be at least CURL_ERROR_SIZE big.
Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better
debug/trace why errors happen. debug/trace why errors happen.
\fBNote:\fP if the library does not return an error, the buffer may not have If the library does not return an error, the buffer may not have been
been touched. Do not rely on the contents in those cases. touched. Do not rely on the contents in those cases.
.IP CURLOPT_STDERR .IP CURLOPT_STDERR
Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr
when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data. when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data.
.IP CURLOPT_FAILONERROR .IP CURLOPT_FAILONERROR
A non-zero parameter tells the library to fail silently if the HTTP code A non-zero parameter tells the library to fail silently if the HTTP code
returned is equal to or larger than 300. The default action would be to return returned is equal to or larger than 400. The default action would be to return
the page normally, ignoring that code. the page normally, ignoring that code.
.SH NETWORK OPTIONS .SH NETWORK OPTIONS
.IP CURLOPT_URL .IP CURLOPT_URL
@@ -264,7 +295,7 @@ given protocol of the set URL is not supported, libcurl will return on error
\fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info \fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info
on which protocols that are supported. on which protocols that are supported.
\fBNOTE:\fP \fICURLOPT_URL\fP is the only option that must be set before \fICURLOPT_URL\fP is the only option that must be set before
\fIcurl_easy_perform(3)\fP is called. \fIcurl_easy_perform(3)\fP is called.
.IP CURLOPT_PROXY .IP CURLOPT_PROXY
Set HTTP proxy to use. The parameter should be a char * to a zero terminated Set HTTP proxy to use. The parameter should be a char * to a zero terminated
@@ -274,31 +305,49 @@ be prefixed with [protocol]:// since any such prefix will be ignored. The
proxy's port number may optionally be specified with the separate option proxy's port number may optionally be specified with the separate option
\fICURLOPT_PROXYPORT\fP. \fICURLOPT_PROXYPORT\fP.
\fBNOTE:\fP when you tell the library to use an HTTP proxy, libcurl will When you tell the library to use an HTTP proxy, libcurl will transparently
transparently convert operations to HTTP even if you specify an FTP URL convert operations to HTTP even if you specify an FTP URL etc. This may have
etc. This may have an impact on what other features of the library you can an impact on what other features of the library you can use, such as
use, such as \fICURLOPT_QUOTE\fP and similar FTP specifics that don't work \fICURLOPT_QUOTE\fP and similar FTP specifics that don't work unless you
unless you tunnel through the HTTP proxy. Such tunneling is activated with tunnel through the HTTP proxy. Such tunneling is activated with
\fICURLOPT_HTTPPROXYTUNNEL\fP. \fICURLOPT_HTTPPROXYTUNNEL\fP.
\fBNOTE2:\fP libcurl respects the environment variables \fBhttp_proxy\fP, libcurl respects the environment variables \fBhttp_proxy\fP, \fBftp_proxy\fP,
\fBftp_proxy\fP, \fBall_proxy\fP etc, if any of those is set. \fBall_proxy\fP etc, if any of those is set. The \fICURLOPT_PROXY\fP option
does however override any possibly set environment variables.
Starting with 7.14.1, the proxy host string can be specified the exact same
way as the proxy environment variables, include protocol prefix (http://) and
embedded user + password.
.IP CURLOPT_PROXYPORT .IP CURLOPT_PROXYPORT
Pass a long with this option to set the proxy port to connect to unless it is Pass a long with this option to set the proxy port to connect to unless it is
specified in the proxy string \fICURLOPT_PROXY\fP. specified in the proxy string \fICURLOPT_PROXY\fP.
.IP CURLOPT_PROXYTYPE .IP CURLOPT_PROXYTYPE
Pass a long with this option to set type of the proxy. Available options for Pass a long with this option to set type of the proxy. Available options for
this are \fICURLPROXY_HTTP\fP and \fICURLPROXY_SOCKS5\fP, with the HTTP one this are \fICURLPROXY_HTTP\fP, \fICURLPROXY_SOCKS4\fP (added in 7.15.2)
being default. (Added in 7.10) \fICURLPROXY_SOCKS5\fP. The HTTP type is default. (Added in 7.10)
.IP CURLOPT_HTTPPROXYTUNNEL .IP CURLOPT_HTTPPROXYTUNNEL
Set the parameter to non-zero to get the library to tunnel all operations Set the parameter to non-zero to get the library to tunnel all operations
through a given HTTP proxy. Note that there is a big difference between using through a given HTTP proxy. There is a big difference between using a proxy
a proxy and to tunnel through it. If you don't know what this means, you and to tunnel through it. If you don't know what this means, you probably
probably don't want this tunneling option. don't want this tunneling option.
.IP CURLOPT_INTERFACE .IP CURLOPT_INTERFACE
Pass a char * as parameter. This set the interface name to use as outgoing Pass a char * as parameter. This set the interface name to use as outgoing
network interface. The name can be an interface name, an IP address or a host network interface. The name can be an interface name, an IP address or a host
name. name.
.IP CURLOPT_LOCALPORT
Pass a long. This sets the local port number of the socket used for
connection. This can be used in combination with \fICURLOPT_INTERFACE\fP and
you are recommended to use \fICURLOPT_LOCALPORTRANGE\fP as well when this is
set. Note that port numbers are only valid 1 - 65535. (Added in 7.15.2)
.IP CURLOPT_LOCALPORTRANGE
Pass a long. This is the number of attempts libcurl should do to find a
working local port number. It starts with the given \fICURLOPT_LOCALPORT\fP
and adds one to the number for each retry. Setting this value to 1 or below
will make libcurl do only one try for exact port number. Note that port
numbers by nature is a scarce resource that will be busy at times so setting
this value to something too low might cause unnecessary connection setup
failures. (Added in 7.15.2)
.IP CURLOPT_DNS_CACHE_TIMEOUT .IP CURLOPT_DNS_CACHE_TIMEOUT
Pass a long, this sets the timeout in seconds. Name resolves will be kept in Pass a long, this sets the timeout in seconds. Name resolves will be kept in
memory for this number of seconds. Set to zero (0) to completely disable memory for this number of seconds. Set to zero (0) to completely disable
@@ -313,10 +362,14 @@ thread-safe and this will use a global variable.
to using the share interface instead! See \fICURLOPT_SHARE\fP and to using the share interface instead! See \fICURLOPT_SHARE\fP and
\fIcurl_share_init(3)\fP. \fIcurl_share_init(3)\fP.
.IP CURLOPT_BUFFERSIZE .IP CURLOPT_BUFFERSIZE
Pass a long specifying your preferred size for the receive buffer in libcurl. Pass a long specifying your preferred size (in bytes) for the receive buffer
The main point of this would be that the write callback gets called more often in libcurl. The main point of this would be that the write callback gets
and with smaller chunks. This is just treated as a request, not an order. You called more often and with smaller chunks. This is just treated as a request,
cannot be guaranteed to actually get the given size. (Added in 7.10) not an order. You cannot be guaranteed to actually get the given size. (Added
in 7.10)
This size is by default set as big as possible (CURL_MAX_WRITE_SIZE), so it
only makse sense to use this option if you want it smaller.
.IP CURLOPT_PORT .IP CURLOPT_PORT
Pass a long specifying what remote port number to connect to, instead of the Pass a long specifying what remote port number to connect to, instead of the
one specified in the URL or the default port for the used protocol. one specified in the URL or the default port for the used protocol.
@@ -342,9 +395,9 @@ This parameter controls the preference of libcurl between using user names and
passwords from your \fI~/.netrc\fP file, relative to user names and passwords passwords from your \fI~/.netrc\fP file, relative to user names and passwords
in the URL supplied with \fICURLOPT_URL\fP. in the URL supplied with \fICURLOPT_URL\fP.
\fBNote:\fP libcurl uses a user name (and supplied or prompted password) libcurl uses a user name (and supplied or prompted password) supplied with
supplied with \fICURLOPT_USERPWD\fP in preference to any of the options \fICURLOPT_USERPWD\fP in preference to any of the options controlled by this
controlled by this parameter. parameter.
Pass a long, set to one of the values described below. Pass a long, set to one of the values described below.
.RS .RS
@@ -368,9 +421,8 @@ and to search the file with the host only.
Only machine name, user name and password are taken into account Only machine name, user name and password are taken into account
(init macros and similar things aren't supported). (init macros and similar things aren't supported).
\fBNote:\fP libcurl does not verify that the file has the correct properties libcurl does not verify that the file has the correct properties set (as the
set (as the standard Unix ftp client does). It should only be readable by standard Unix ftp client does). It should only be readable by user.
user.
.IP CURLOPT_NETRC_FILE .IP CURLOPT_NETRC_FILE
Pass a char * as parameter, pointing to a zero terminated string containing Pass a char * as parameter, pointing to a zero terminated string containing
the full path name to the file you want libcurl to use as .netrc file. If this the full path name to the file you want libcurl to use as .netrc file. If this
@@ -380,6 +432,11 @@ find the a .netrc file in the current user's home directory. (Added in 7.10.9)
Pass a char * as parameter, which should be [user name]:[password] to use for Pass a char * as parameter, which should be [user name]:[password] to use for
the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method. the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method.
When using NTLM, you can set domain by prepending it to the user name and
separating the domain and name with a forward (/) or backward slash (\\). Like
this: "domain/user:password" or "domain\\user:password". Some HTTP servers (on
Windows) support this style even for Basic authentication.
When using HTTP and \fICURLOPT_FOLLOWLOCATION\fP, libcurl might perform When using HTTP and \fICURLOPT_FOLLOWLOCATION\fP, libcurl might perform
several requests to possibly different hosts. libcurl will only send this user several requests to possibly different hosts. libcurl will only send this user
and password information to hosts using the initial host name (unless and password information to hosts using the initial host name (unless
@@ -395,9 +452,9 @@ Pass a long as parameter, which is set to a bitmask, to tell libcurl what
authentication method(s) you want it to use. The available bits are listed authentication method(s) you want it to use. The available bits are listed
below. If more than one bit is set, libcurl will first query the site to see below. If more than one bit is set, libcurl will first query the site to see
what authentication methods it supports and then pick the best one you allow what authentication methods it supports and then pick the best one you allow
it to use. Note that for some methods, this will induce an extra network it to use. For some methods, this will induce an extra network round-trip. Set
round-trip. Set the actual name and password with the \fICURLOPT_USERPWD\fP the actual name and password with the \fICURLOPT_USERPWD\fP option. (Added in
option. (Added in 7.10.6) 7.10.6)
.RS .RS
.IP CURLAUTH_BASIC .IP CURLAUTH_BASIC
HTTP Basic authentication. This is the default choice, and the only method HTTP Basic authentication. This is the default choice, and the only method
@@ -415,15 +472,14 @@ applications. It is primarily meant as a support for Kerberos5 authentication
but may be also used along with another authentication methods. For more but may be also used along with another authentication methods. For more
information see IETF draft draft-brezak-spnego-http-04.txt. information see IETF draft draft-brezak-spnego-http-04.txt.
\fBNOTE\fP that you need to build libcurl with a suitable GSS-API library for You need to build libcurl with a suitable GSS-API library for this to work.
this to work.
.IP CURLAUTH_NTLM .IP CURLAUTH_NTLM
HTTP NTLM authentication. A proprietary protocol invented and used by HTTP NTLM authentication. A proprietary protocol invented and used by
Microsoft. It uses a challenge-response and hash concept similar to Digest, to Microsoft. It uses a challenge-response and hash concept similar to Digest, to
prevent the password from being eavesdropped. prevent the password from being eavesdropped.
\fBNOTE\fP that you need to build libcurl with SSL support for this option to You need to build libcurl with OpenSSL support for this option to work, or
work. build libcurl on Windows.
.IP CURLAUTH_ANY .IP CURLAUTH_ANY
This is a convenience macro that sets all bits and thus makes libcurl pick any This is a convenience macro that sets all bits and thus makes libcurl pick any
it finds suitable. libcurl will automatically select the one it finds most it finds suitable. libcurl will automatically select the one it finds most
@@ -438,11 +494,11 @@ Pass a long as parameter, which is set to a bitmask, to tell libcurl what
authentication method(s) you want it to use for your proxy authentication. If authentication method(s) you want it to use for your proxy authentication. If
more than one bit is set, libcurl will first query the site to see what more than one bit is set, libcurl will first query the site to see what
authentication methods it supports and then pick the best one you allow it to authentication methods it supports and then pick the best one you allow it to
use. Note that for some methods, this will induce an extra network use. For some methods, this will induce an extra network round-trip. Set the
round-trip. Set the actual name and password with the actual name and password with the \fICURLOPT_PROXYUSERPWD\fP option. The
\fICURLOPT_PROXYUSERPWD\fP option. The bitmask can be constructed by or'ing bitmask can be constructed by or'ing together the bits listed above for the
together the bits listed above for the \fICURLOPT_HTTPAUTH\fP option. As of \fICURLOPT_HTTPAUTH\fP option. As of this writing, only Basic, Digest and NTLM
this writing, only Basic, Digest and NTLM work. (Added in 7.10.7) work. (Added in 7.10.7)
.SH HTTP OPTIONS .SH HTTP OPTIONS
.IP CURLOPT_AUTOREFERER .IP CURLOPT_AUTOREFERER
Pass a non-zero parameter to enable this. When enabled, libcurl will Pass a non-zero parameter to enable this. When enabled, libcurl will
@@ -465,19 +521,21 @@ lib/README.encoding for details.
A non-zero parameter tells the library to follow any Location: header that the A non-zero parameter tells the library to follow any Location: header that the
server sends as part of an HTTP header. server sends as part of an HTTP header.
\fBNOTE:\fP this means that the library will re-send the same request on the This means that the library will re-send the same request on the new location
new location and follow new Location: headers all the way until no more such and follow new Location: headers all the way until no more such headers are
headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number of redirects
of redirects libcurl will follow. libcurl will follow.
.IP CURLOPT_UNRESTRICTED_AUTH .IP CURLOPT_UNRESTRICTED_AUTH
A non-zero parameter tells the library it can continue to send authentication A non-zero parameter tells the library it can continue to send authentication
(user+password) when following locations, even when hostname changed. Note (user+password) when following locations, even when hostname changed. This
that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP. option is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
.IP CURLOPT_MAXREDIRS .IP CURLOPT_MAXREDIRS
Pass a long. The set number will be the redirection limit. If that many Pass a long. The set number will be the redirection limit. If that many
redirections have been followed, the next redirect will cause an error redirections have been followed, the next redirect will cause an error
(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the (\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
\fICURLOPT_FOLLOWLOCATION\fP is used at the same time. \fICURLOPT_FOLLOWLOCATION\fP is used at the same time. Added in 7.15.1:
Setting the limit to 0 will make libcurl refuse any redirect. Set it to -1 for
an infinite number of redirects (which is the default)
.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.
@@ -511,8 +569,11 @@ adding a header like "Transfer-Encoding: chunked" with
\fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must \fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must
specify the size in the request. specify the size in the request.
NOTE: if you have issued a POST request and want to make a HEAD or GET When setting \fICURLOPT_POST\fP to a non-zero value, it will automatically set
instead, you must explictly pick the new request type using \fICURLOPT_NOBODY\fP to 0 (since 7.14.1).
If you issue a POST request and then want to make a HEAD or GET using the same
re-used handle, you must explictly set the new request type using
\fICURLOPT_NOBODY\fP or \fICURLOPT_HTTPGET\fP or similar. \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
@@ -528,8 +589,8 @@ commonly used one by HTML forms. See also the \fICURLOPT_POST\fP. Using
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. 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. You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
\fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out To make multipart/formdata posts (aka rfc1867-posts), check out the
the \fICURLOPT_HTTPPOST\fP option. \fICURLOPT_HTTPPOST\fP option.
.IP CURLOPT_POSTFIELDSIZE .IP CURLOPT_POSTFIELDSIZE
If you want to post data to the server without letting libcurl do a strlen() If you want to post data to the server without letting libcurl do a strlen()
to measure the data size, this option must be used. When this option is used to measure the data size, this option must be used. When this option is used
@@ -550,6 +611,9 @@ must remain intact until you close this curl handle again with
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. 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. You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
When setting \fICURLOPT_HTTPPOST\fP, it will automatically set
\fICURLOPT_NOBODY\fP to 0 (since 7.14.1).
.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
@@ -569,19 +633,21 @@ list. If you add a header that is otherwise generated and used by libcurl
internally, your added one will be used instead. If you add a header with no internally, your added one will be used instead. If you add a header with no
contents as in 'Accept:' (no data on the right side of the colon), the contents as in 'Accept:' (no data on the right side of the colon), the
internally used header will get disabled. Thus, using this option you can add internally used header will get disabled. Thus, using this option you can add
new headers, replace internal headers and remove internal headers. The new headers, replace internal headers and remove internal headers. To add a
headers included in the linked list must not be CRLF-terminated, because header with no contents, make the contents be two quotes: \&"". The headers
curl adds CRLF after each header item. Failure to comply with this will included in the linked list must not be CRLF-terminated, because curl adds
result in strange bugs because the server will most likely ignore part CRLF after each header item. Failure to comply with this will result in
of the headers you specified. strange bugs because the server will most likely ignore part of the headers
you specified.
The first line in a request (usually containing a GET or POST) is not a header The first line in a request (containing the method, usually a GET or POST) is
and cannot be replaced using this option. Only the lines following the not a header and cannot be replaced using this option. Only the lines
request-line are headers. following the request-line are headers. Adding this method line in this list
of headers will only cause your request to send an invalid header.
Pass a NULL to this to reset back to no custom 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 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
Pass a pointer to a linked list of aliases to be treated as valid HTTP 200 Pass a pointer to a linked list of aliases to be treated as valid HTTP 200
@@ -594,9 +660,9 @@ The linked list should be a fully valid list of struct curl_slist structs, and
be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and
\fIcurl_slist_free_all(3)\fP to clean up an entire list. \fIcurl_slist_free_all(3)\fP to clean up an entire list.
\fBNOTE:\fP The alias itself is not parsed for any version strings. So if your The alias itself is not parsed for any version strings. So if your alias is
alias is "MYHTTP/9.9", Libcurl will not treat the server as responding with \&"MYHTTP/9.9", Libcurl will not treat the server as responding with HTTP
HTTP version 9.9. Instead Libcurl will use the value set by option version 9.9. Instead Libcurl will use the value set by option
\fICURLOPT_HTTP_VERSION\fP. \fICURLOPT_HTTP_VERSION\fP.
.IP CURLOPT_COOKIE .IP CURLOPT_COOKIE
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
@@ -620,6 +686,9 @@ dumped to a file.
Given an empty or non-existing file or by passing the empty string (""), this Given an empty or non-existing file or by passing the empty string (""), this
option will enable cookies for this curl handle, making it understand and option will enable cookies for this curl handle, making it understand and
parse received cookies and then use matching cookies in future request. parse received cookies and then use matching cookies in future request.
If you use this option multiple times, you just add more files to read.
Subsequent files will add more cookies.
.IP CURLOPT_COOKIEJAR .IP CURLOPT_COOKIEJAR
Pass a file name as char *, zero terminated. This will make libcurl write all Pass a file name as char *, zero terminated. This will make libcurl write all
internally known cookies to the specified file when \fIcurl_easy_cleanup(3)\fP internally known cookies to the specified file when \fIcurl_easy_cleanup(3)\fP
@@ -628,7 +697,7 @@ instead have the cookies written to stdout. Using this option also enables
cookies for this session, so if you for example follow a location it will make cookies for this session, so if you for example follow a location it will make
matching cookies get sent accordingly. matching cookies get sent accordingly.
\fBNOTE:\fP If the cookie jar file can't be created or written to (when the If the cookie jar file can't be created or written to (when the
\fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an \fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an
error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP
will get a warning to display, but that is the only visible feedback you get will get a warning to display, but that is the only visible feedback you get
@@ -640,10 +709,18 @@ cookies" from the previous session. By default, libcurl always stores and
loads all cookies, independent if they are session cookies are not. Session loads all cookies, independent if they are session cookies are not. Session
cookies are cookies without expiry date and they are meant to be alive and 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_COOKIELIST
Pass a char * to a cookie string. Cookie can be either in Netscape / Mozilla
format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL
cookie engine was not enabled it will enable its cookie engine. Passing a
magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1)
.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. usable if a POST, HEAD, 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.
When setting \fICURLOPT_HTTPGET\fP to a non-zero value, it will automatically
set \fICURLOPT_NOBODY\fP to 0 (since 7.14.1).
.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
use the specific HTTP versions. This is not sensible to do unless you have a use the specific HTTP versions. This is not sensible to do unless you have a
@@ -656,6 +733,12 @@ it thinks fit.
Enforce HTTP 1.0 requests. Enforce HTTP 1.0 requests.
.IP CURL_HTTP_VERSION_1_1 .IP CURL_HTTP_VERSION_1_1
Enforce HTTP 1.1 requests. Enforce HTTP 1.1 requests.
.IP CURLOPT_IGNORE_CONTENT_LENGTH
Ignore the Content-Length header. This is useful for Apache 1.x (and similar
servers) which will report incorrect content length for files over 2
gigabytes. If this option is used, curl will not be able to accurately report
progress, and will simply stop the download when the server ends the
connection. (added in 7.14.1)
.RE .RE
.SH FTP OPTIONS .SH FTP OPTIONS
.IP CURLOPT_FTPPORT .IP CURLOPT_FTPPORT
@@ -721,11 +804,19 @@ directory. (Added in 7.10.7)
.IP CURLOPT_FTP_RESPONSE_TIMEOUT .IP CURLOPT_FTP_RESPONSE_TIMEOUT
Pass a long. Causes curl to set a timeout period (in seconds) on the amount Pass a long. Causes curl to set a timeout period (in seconds) on the amount
of time that the server is allowed to take in order to generate a response of time that the server is allowed to take in order to generate a response
message for a command before the session is considered hung. Note that while message for a command before the session is considered hung. While curl is
curl is waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It is
is recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set
\fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than \fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than
\fICURLOPT_TIMEOUT\fP. (Added in 7.10.8) \fICURLOPT_TIMEOUT\fP. (Added in 7.10.8)
.IP CURLOPT_FTP_SKIP_PASV_IP
Pass a long. If set to a non-zero value, it instructs libcurl to not use the
IP address the server suggests in its 227-response to libcurl's PASV command
when libcurl connects the data connection. Instead libcurl will re-use the
same IP address it already uses for the control connection. But it will use
the port number from the 227-response. (Added in 7.14.2)
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
.IP CURLOPT_FTP_SSL .IP CURLOPT_FTP_SSL
Pass a long using one of the values from below, to make libcurl use your Pass a long using one of the values from below, to make libcurl use your
desired level of SSL for the ftp transfer. (Added in 7.11.0) desired level of SSL for the ftp transfer. (Added in 7.11.0)
@@ -767,14 +858,34 @@ Exactly like \fICURLOPT_POSTQUOTE\fP, but for the source host.
Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP
server asks for "account data" after user name and password has been provided, server asks for "account data" after user name and password has been provided,
this data is sent off using the ACCT command. (Added in 7.13.0) this data is sent off using the ACCT command. (Added in 7.13.0)
.IP CURLOPT_FTP_FILEMETHOD
Pass a long that should have one of the following values. This option controls
what method libcurl should use to reach a file on a FTP(S) server. The
argument should be one of the following alternatives:
.RS
.IP CURLFTPMETHOD_MULTICWD
libcurl does a single CWD operation for each path part in the given URL. For
deep hierarchies this means very many commands. This is how RFC1738 says it
should be done. This is the default but the slowest behavior.
.IP CURLFTPMETHOD_NOCWD
libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a
full path to the server for all these commands. This is the fastest behavior.
.IP CURLFTPMETHOD_SINGLECWD
libcurl does one CWD with the full target directory and then operates on the
file \&"normally" (like in the multicwd case). This is somewhat more standards
compliant than 'nocwd' but without the full penalty of 'multicwd'.
.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,
instead of the default binary transfer. For LDAP transfers it gets the data in instead of the default binary transfer. For win32 systems it does not set the
plain text instead of HTML and for win32 systems it does not set the stdout to stdout to binary mode. This option can be usable when transferring text data
binary mode. This option can be usable when transferring text data between between systems with different views on certain characters, such as newlines
systems with different views on certain characters, such as newlines or or similar.
similar.
libcurl does not do a complete ASCII conversion when doing ASCII transfers
over FTP. This is a known limitation/flaw that nobody has rectified. libcurl
simply sets the mode to ascii and performs a standard transfer.
.IP CURLOPT_CRLF .IP CURLOPT_CRLF
Convert Unix newlines to CRLF newlines on transfers. Convert Unix newlines to CRLF newlines on transfers.
.IP CURLOPT_RANGE .IP CURLOPT_RANGE
@@ -800,11 +911,11 @@ server supports the command first.
Restore to the internal default by setting this to NULL. Restore to the internal default by setting this to NULL.
\fBNOTE:\fP Many people have wrongly used this option to replace the entire Many people have wrongly used this option to replace the entire request with
request with their own, including multiple headers and POST contents. While their own, including multiple headers and POST contents. While that might work
that might work in many cases, it will cause libcurl to send invalid requests in many cases, it will cause libcurl to send invalid requests and it could
and it could possibly confuse the remote server badly. Use \fICURLOPT_POST\fP possibly confuse the remote server badly. Use \fICURLOPT_POST\fP and
and \fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to \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
@@ -818,9 +929,8 @@ 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 To change request to GET, you should use \fICURLOPT_HTTPGET\fP. Change request
POST, you should use \fICURLOPT_POST\fP. Setting \fICURLOPT_NOBODY\fP to zero to POST with \fICURLOPT_POST\fP etc.
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
@@ -849,26 +959,26 @@ 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.
\fBNOTE:\fP The file size is not always known prior to download, and for such The file size is not always known prior to download, and for such files this
files this option has no effect even if the file transfer ends up being larger option has no effect even if the file transfer ends up being larger than this
than this given limit. This concerns both FTP and HTTP transfers. 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)
\fBNOTE:\fP The file size is not always known prior to download, and for such The file size is not always known prior to download, and for such files this
files this option has no effect even if the file transfer ends up being larger option has no effect even if the file transfer ends up being larger than this
than this given limit. This concerns both FTP and HTTP transfers. 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.
\fBNOTE:\fP The last modification time of a file is not always known and in such The last modification time of a file is not always known and in such instances
instances this feature will have no effect even if the given time condition this feature will have no effect even if the given time condition would have
would have not been met. not been met.
.IP CURLOPT_TIMEVALUE .IP CURLOPT_TIMEVALUE
Pass a long as parameter. This should be the time in seconds since 1 jan 1970, Pass a long as parameter. This should be the time in seconds since 1 jan 1970,
and the time will be used in a condition as specified with and the time will be used in a condition as specified with
@@ -881,8 +991,8 @@ considerable time and limiting operations to less than a few minutes risk
aborting perfectly normal operations. This option will cause curl to use the aborting perfectly normal operations. This option will cause curl to use the
SIGALRM to enable time-outing system calls. SIGALRM to enable time-outing system calls.
\fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as In unix-like systems, this might cause signals to be used unless
it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set. \fICURLOPT_NOSIGNAL\fP is set.
.IP CURLOPT_LOW_SPEED_LIMIT .IP CURLOPT_LOW_SPEED_LIMIT
Pass a long as parameter. It contains the transfer speed in bytes per second Pass a long as parameter. It contains the transfer speed in bytes per second
that the transfer should be below during \fICURLOPT_LOW_SPEED_TIME\fP seconds that the transfer should be below during \fICURLOPT_LOW_SPEED_TIME\fP seconds
@@ -903,9 +1013,9 @@ When reaching the maximum limit, curl uses the \fICURLOPT_CLOSEPOLICY\fP to
figure out which of the existing connections to close to prevent the number of figure out which of the existing connections to close to prevent the number of
open connections to increase. open connections to increase.
\fBNOTE:\fP if you already have performed transfers with this curl handle, If you already have performed transfers with this curl handle, setting a
setting a smaller MAXCONNECTS than before may cause open connections to get smaller MAXCONNECTS than before may cause open connections to get closed
closed unnecessarily. unnecessarily.
.IP CURLOPT_CLOSEPOLICY .IP CURLOPT_CLOSEPOLICY
Pass a long. This option sets what policy libcurl should use when the Pass a long. This option sets what policy libcurl should use when the
connection cache is filled and one of the open connections has to be closed to connection cache is filled and one of the open connections has to be closed to
@@ -937,8 +1047,8 @@ it has connected, this option is of no more use. Set to zero to disable
connection timeout (it will then only timeout on the system's internal connection timeout (it will then only timeout on the system's internal
timeouts). See also the \fICURLOPT_TIMEOUT\fP option. timeouts). See also the \fICURLOPT_TIMEOUT\fP option.
\fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as In unix-like systems, this might cause signals to be used unless
it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set. \fICURLOPT_NOSIGNAL\fP is set.
.IP CURLOPT_IPRESOLVE .IP CURLOPT_IPRESOLVE
Allows an application to select what kind of IP addresses to use when Allows an application to select what kind of IP addresses to use when
resolving host names. This is only interesting when using host names that resolving host names. This is only interesting when using host names that
@@ -951,6 +1061,14 @@ Resolve to ipv4 addresses.
.IP CURL_IPRESOLVE_V6 .IP CURL_IPRESOLVE_V6
Resolve to ipv6 addresses. Resolve to ipv6 addresses.
.RE .RE
.SH CURLOPT_CONNECT_ONLY
Pass a long. A non-zero parameter tells the library to perform any required
proxy authentication and connection setup, but no data transfer.
This option is useful with the \fICURLINFO_LASTSOCKET\fP option to
\fIcurl_easy_getinfo(3)\fP. The library can set up the connection and then the
application can obtain the most recently used socket for special data
transfers. (Added in 7.15.2)
.SH SSL and SECURITY OPTIONS .SH SSL and SECURITY OPTIONS
.IP CURLOPT_SSLCERT .IP CURLOPT_SSLCERT
Pass a pointer to a zero terminated string as parameter. The string should be Pass a pointer to a zero terminated string as parameter. The string should be
@@ -975,9 +1093,9 @@ changed with \fICURLOPT_SSLKEYTYPE\fP.
Pass a pointer to a zero terminated string as parameter. The string should be 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 The format "ENG" enables you to load the private key from a crypto engine. In
engine. In this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to the
the engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP. 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. \&"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
@@ -987,14 +1105,14 @@ Pass a pointer to a zero terminated string as parameter. It will be used as
the identifier for the crypto engine you want to use for your private the identifier for the crypto engine you want to use for your private
key. key.
\fBNOTE:\fP If the crypto device cannot be loaded, If the crypto device cannot be loaded, \fICURLE_SSL_ENGINE_NOTFOUND\fP is
\fICURLE_SSL_ENGINE_NOTFOUND\fP is returned. returned.
.IP CURLOPT_SSLENGINE_DEFAULT .IP CURLOPT_SSLENGINE_DEFAULT
Sets the actual crypto engine as the default for (asymmetric) crypto Sets the actual crypto engine as the default for (asymmetric) crypto
operations. operations.
\fBNOTE:\fP If the crypto device cannot be set, If the crypto device cannot be set, \fICURLE_SSL_ENGINE_SETFAILED\fP is
\fICURLE_SSL_ENGINE_SETFAILED\fP is returned. returned.
.IP CURLOPT_SSLVERSION .IP CURLOPT_SSLVERSION
Pass a long as parameter to control what version of SSL/TLS to attempt to use. Pass a long as parameter to control what version of SSL/TLS to attempt to use.
The available options are: The available options are:
@@ -1041,6 +1159,9 @@ certificates to verify the peer with. This makes sense only when used in
combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If
\fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAINFO\fP need not \fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAINFO\fP need not
even indicate an accessible file. even indicate an accessible file.
Note that option is by default set to the system path where libcurl's cacert
bundle is assumed to be stored, as established at build time.
.IP CURLOPT_CAPATH .IP CURLOPT_CAPATH
Pass a char * to a zero terminated string naming a directory holding Pass a char * to a zero terminated string naming a directory holding
multiple CA certificates to verify the peer with. The certificate multiple CA certificates to verify the peer with. The certificate
@@ -1060,26 +1181,25 @@ socket. It will be used to seed the random engine for SSL.
.IP CURLOPT_SSL_VERIFYHOST .IP CURLOPT_SSL_VERIFYHOST
Pass a long as parameter. Pass a long as parameter.
This option determines whether curl verifies that the server claims to be This option determines whether libcurl verifies that the server cert is for
who you want it to be. the server it is known as.
When negotiating an SSL connection, the server sends a certificate When negotiating an SSL connection, the server sends a certificate indicating
indicating its identity. its identity.
When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate that
that the server is the server to which you meant to connect, or the the server is the server to which you meant to connect, or the connection
connection fails. fails.
Curl considers the server the intended one when the Common Name field Curl considers the server the intended one when the Common Name field or a
or a Subject Alternate Name field in the certificate matches the host Subject Alternate Name field in the certificate matches the host name in the
name in the URL to which you told Curl to connect. URL to which you told Curl to connect.
When the value is 1, the certificate must contain a Common Name field, When the value is 1, the certificate must contain a Common Name field, but it
but it doesn't matter what name it says. (This is not ordinarily a doesn't matter what name it says. (This is not ordinarily a useful setting).
useful setting).
When the value is 0, the connection succeeds regardless of the names in When the value is 0, the connection succeeds regardless of the names in the
the certificate. certificate.
The default, since 7.10, is 2. The default, since 7.10, is 2.

View File

@@ -12,7 +12,7 @@ curl_easy_strerror - return string describing error code
.SH DESCRIPTION .SH DESCRIPTION
The curl_easy_strerror() function returns a string describing the CURLcode The curl_easy_strerror() function returns a string describing the CURLcode
error code passed in the argument \fIerrornum\fP. error code passed in the argument \fIerrornum\fP.
.SH AVAILABILITY
This function was added in libcurl 7.12.0 This function was added in libcurl 7.12.0
.SH RETURN VALUE .SH RETURN VALUE
A pointer to a zero terminated string. A pointer to a zero terminated string.

View File

@@ -23,4 +23,4 @@ You must curl_free() the returned string when you're done with it.
.SH RETURN VALUE .SH RETURN VALUE
A pointer to a zero terminated string or NULL if it failed. A pointer to a zero terminated string or NULL if it failed.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_unescape(3), curl_free(3), RFC 2396 .BR curl_unescape "(3), " curl_free "(3), " RFC 2396

View File

@@ -90,7 +90,7 @@ followed by a pointer to a string to a name, will make libcurl use the given
name in the file upload part, instead of the actual file name given to name in the file upload part, instead of the actual file name given to
\fICURLFORM_FILE\fP. \fICURLFORM_FILE\fP.
.IP BCURLFORM_BUFFER .IP CURLFORM_BUFFER
followed by a string, tells libcurl that a buffer is to be used to upload data followed by a string, tells libcurl that a buffer is to be used to upload data
instead of using a file. The given string is used as the value of the file instead of using a file. The given string is used as the value of the file
name field in the content header. name field in the content header.

View File

@@ -2,7 +2,7 @@
.\" nroff -man [file] .\" nroff -man [file]
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual" .TH curl_getdate 3 "12 Aug 2005" "libcurl 7.0" "libcurl Manual"
.SH NAME .SH NAME
curl_getdate - Convert an date string to number of seconds since January 1, curl_getdate - Convert an date string to number of seconds since January 1,
1970 1970
@@ -26,7 +26,7 @@ order of the items is immaterial. A date string may contain many flavors of
items: items:
.TP 0.8i .TP 0.8i
.B calendar date items .B calendar date items
Can be specified several ways. Month names can only be three-letter Can be specified several ways. Month names can only be three-letter english
abbrivations, numbers can be zero-prefixed and the year may use 2 or 4 digits. 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. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
.TP .TP
@@ -94,7 +94,7 @@ crippled mktime(), \fIcurl_getdate\fP will return -1 in this case.
.SH REWRITE .SH REWRITE
The former version of this function was built with yacc and was not only very The former version of this function was built with yacc and was not only very
large, it was also never quite understood and it wasn't possible to build with large, it was also never quite understood and it wasn't possible to build with
non-GNU tools since only Bison could make it thread-safe! non-GNU tools since only GNU Bison could make it thread-safe!
The rewrite was done for 7.12.2. The new one is much smaller and use simpler The rewrite was done for 7.12.2. The new one is much smaller and use simpler
code. code.

View File

@@ -18,10 +18,9 @@ will instead be made "available" by source code access only, and then as
curlx_getenv(). 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 so the application must
free() this when the data has completed to serve its purpose. When free() this when the data is no longer needed. When \fIcurl_getenv(3)\fP fails
.I curl_getenv(3) to find the specified name, it returns a null pointer.
fails to find the specified name, it returns a null pointer.
.SH NOTE .SH NOTE
Under unix operating systems, there isn't any point in returning an allocated Under unix operating systems, there isn't any point in returning an allocated
memory, although other systems won't work properly if this isn't done. The memory, although other systems won't work properly if this isn't done. The

View File

@@ -2,7 +2,7 @@
.\" nroff -man [file] .\" nroff -man [file]
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual" .TH curl_global_cleanup 3 "17 Feb 2006" "libcurl 7.8" "libcurl Manual"
.SH NAME .SH NAME
curl_global_cleanup - global libcurl cleanup curl_global_cleanup - global libcurl cleanup
.SH SYNOPSIS .SH SYNOPSIS
@@ -11,13 +11,22 @@ curl_global_cleanup - global libcurl cleanup
.BI "void curl_global_cleanup(void);" .BI "void curl_global_cleanup(void);"
.ad .ad
.SH DESCRIPTION .SH DESCRIPTION
curl_global_cleanup must be called once (no matter how many threads or libcurl This function releases resources acquired by \fBcurl_global_init(3)\fP.
sessions that'll be used) by every application that uses libcurl, after all
uses of libcurl is complete.
This is the opposite of \fIcurl_global_init(3)\fP. You should call \fIcurl_global_cleanup(3)\fP once for each call you make to
\fIcurl_global_init(3)\fP, after you are done using libcurl.
\fBThis function is not thread safe.\fP You must not call it when any other
thread in the program (i.e. a thread sharing the same memory) is running.
This doesn't just mean no other thread that is using libcurl. Because
\fBcurl_global_cleanup(3)\fP calls functions of other libraries that are
similarly thread unsafe, it could conflict with any other thread that uses
these other libraries.
See the description in \fBlibcurl(3)\fP of global environment requirements for
details of how to use this function.
Not calling this function may result in memory leaks.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_global_init "(3), " .BR curl_global_init "(3), "
.BR libcurl "(3), "

View File

@@ -11,19 +11,30 @@ curl_global_init - Global libcurl initialisation
.BI "CURLcode curl_global_init(long " flags ");" .BI "CURLcode curl_global_init(long " flags ");"
.ad .ad
.SH DESCRIPTION .SH DESCRIPTION
This function should only be called once (no matter how many threads or This function sets up the program environment that libcurl needs. Think
libcurl sessions that'll be used) by every application that uses libcurl. of it as an extension of the library loader.
If this function hasn't been invoked when \fIcurl_easy_init(3)\fP is called, This function must be called at least once within a program (a program is
it will be done automatically by libcurl. all the code that shares a memory space) before the program calls any other
function in libcurl. The environment it sets up is constant for the life
of the program and is the same for every program, so multiple calls have
the same effect as one call.
The flags option is a bit pattern that tells libcurl exact what features to The flags option is a bit pattern that tells libcurl exactly what features to
init, as described below. Set the desired bits by ORing the values together. init, as described below. Set the desired bits by ORing the values together.
In normal operation, you must specify CURL_GLOBAL_ALL. Don't use any other
value unless you are familiar with and mean to control internal operations
of libcurl.
You must however \fBalways\fP use the \fIcurl_global_cleanup(3)\fP function, \fBThis function is not thread safe.\fP You must not call it when any
as that cannot be called automatically for you by libcurl. other thread in the program (i.e. a thread sharing the same memory) is
running. This doesn't just mean no other thread that is using
libcurl. Because \fIcurl_global_init()\fP calls functions of other
libraries that are similarly thread unsafe, it could conflict with any
other thread that uses these other libraries.
Calling this function more than once will cause unpredictable results. See the description in \fBlibcurl\fP(3) of global environment
requirements for details of how to use this function.
.SH FLAGS .SH FLAGS
.TP 5 .TP 5
@@ -44,3 +55,5 @@ other curl functions.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_global_init_mem "(3), " .BR curl_global_init_mem "(3), "
.BR curl_global_cleanup "(3), " .BR curl_global_cleanup "(3), "
.BR curl_easy_init "(3) "
.BR libcurl "(3) "

View File

@@ -1,6 +1,6 @@
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_multi_fdset 3 "25 Apr 2005" "libcurl 7.9.5" "libcurl Manual" .TH curl_multi_fdset 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
.SH NAME .SH NAME
curl_multi_fdset - extracts file descriptor information from a multi handle curl_multi_fdset - extracts file descriptor information from a multi handle
.SH SYNOPSIS .SH SYNOPSIS
@@ -30,8 +30,12 @@ rather small (single-digit number of seconds) timeout and call
\fIcurl_multi_perform\fP regularly - even if no activity has been seen on the \fIcurl_multi_perform\fP regularly - even if no activity has been seen on the
fd_sets - as otherwise libcurl-internal retries and timeouts may not work as fd_sets - as otherwise libcurl-internal retries and timeouts may not work as
you'd think and want. you'd think and want.
Starting with libcurl 7.16.0, you should use \fBcurl_multi_timeout\fP to
figure out how long to wait for action.
.SH RETURN VALUE .SH RETURN VALUE
CURLMcode type, general libcurl multi interface error code. See CURLMcode type, general libcurl multi interface error code. See
\fIlibcurl-errors(3)\fP \fIlibcurl-errors(3)\fP
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)" .BR curl_multi_cleanup "(3)," curl_multi_init "(3), "
.BR curl_multi_timeout "(3) "

View File

@@ -36,9 +36,9 @@ NOTE that this only returns errors etc regarding the whole multi stack. There
might still have occurred problems on individual transfers even when this might still have occurred problems on individual transfers even when this
function returns OK. function returns OK.
.SH "TYPICAL USAGE" .SH "TYPICAL USAGE"
Most application will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's Most applications will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's
file descriptors, then it'll wait for action on them using select() and as file descriptors, then it'll wait for action on them using \fBselect(3)\fP and
soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets as soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets
called. called.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), " .BR curl_multi_cleanup "(3), " curl_multi_init "(3), "

View File

@@ -0,0 +1,42 @@
.\" $Id$
.\"
.TH curl_multi_setopt 3 "8 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
.SH NAME
curl_multi_setopt \- set options for a curl multi handle
.SH SYNOPSIS
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param);
.SH DESCRIPTION
curl_multi_setopt() is used to tell a libcurl multi handle how to behave. By
using the appropriate options to \fIcurl_multi_setopt\fP, you can change
libcurl's behaviour when using that multi handle. All options are set with
the \fIoption\fP followed by the parameter \fIparam\fP. That parameter can be
a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject pointer\fP or a
\fBcurl_off_t\fP type, depending on what the specific option expects. Read
this manual carefully as bad input values may cause libcurl to behave badly!
You can only set one option in each function call.
.SH OPTIONS
.IP CURLMOPT_SOCKETFUNCTION
Pass a pointer to a function matching the curl_socket_callback prototype. The
\fIcurl_multi_socket(3)\fP functions inform the application about updates in
the socket (file descriptor) status by doing none, one or multiple calls to
the curl_socket_callback given in the \fBparam\fP argument. They update the
status with changes since the previous time a \fIcurl_multi_socket(3)\fP
function was called. If the given callback pointer is NULL, no callback will
be called. Set the callback's fourth argument with \fICURLMOPT_SOCKETDATA\fP.
See \fIcurl_multi_socket(3)\fP for more callback details.
.IP CURLMOPT_SOCKETDATA
Pass a pointer to whatever you want passed to the curl_socket_callback's forth
argument, the userp pointer. This is not used by libcurl but only passed-thru
as-is. Set the callback pointer with \fICURLMOPT_SOCKETFUNCTION\fP.
.SH RETURNS
The standard CURLMcode for multi interface error codes. Note that it returns a
CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl
doesn't know of.
.SH AVAILABILITY
This function was added in libcurl 7.16.0
.SH "SEE ALSO"
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
.BR curl_multi_socket "(3), " curl_multi_info_read "(3)"

View File

@@ -0,0 +1,96 @@
.\" $Id$
.\"
.TH curl_multi_socket 3 "21 Dec 2005" "libcurl 7.16.0" "libcurl Manual"
.SH NAME
curl_multi_socket \- reads/writes available data
.SH SYNOPSIS
#include <curl/curl.h>
CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd);
CURLMcode curl_multi_socket_all(CURLM *multi_handle);
.SH DESCRIPTION
Alternative versions of \fIcurl_multi_perform()\fP that allows the application
to pass in one of the file descriptors/sockets that have been detected to have
\&"action" on them and let libcurl perform. This allows libcurl to not have to
scan through all possible file descriptors to check for action. When the
application has detected action on a socket handled by libcurl, it should call
\fIcurl_multi_perform()\fP with the \fBsockfd\fP argument set to the socket
with the action.
These functions inform the application about updates in the socket (file
descriptor) status by doing none, one or multiple calls to the
curl_socket_callback given with the CURLMOPT_SOCKETFUNCTION option to
\fIcurl_multi_setopt(3)\fP. They update the status with changes since the
previous time this function was called.
If you want to force libcurl to (re-)check all its internal sockets and
transfers instead of just a single one, you call
\fBcurl_multi_socket_all(3)\fP instead.
An application should call \fBcurl_multi_timeout(3)\fP to figure out how long
it should wait for socket actions \- at most \- before doing the timeout
action: call the \fBcurl_multi_socket(3)\fP function with the \fBsockfd\fP
argument set to CURL_SOCKET_TIMEOUT.
The socket \fBcallback\fP function uses a prototype like this
.nf
int curl_socket_callback(CURL *easy, /* easy handle */
curl_socket_t s, /* socket */
int action, /* see values below */
void *userp); /* "private" pointer */
.fi
The callback MUST return 0.
The \fIaction\fP (third) argument to the callback has one of five values:
.RS
.IP "CURL_POLL_NONE (0)"
register, not interested in readiness (yet)
.IP "CURL_POLL_IN (1)"
register, interested in read readiness
.IP "CURL_POLL_OUT (2)"
register, interested in write readiness
.IP "CURL_POLL_INOUT (3)"
register, interested in both read and write readiness
.IP "CURL_POLL_REMOVE (4)"
deregister
.RE
.SH "RETURN VALUE"
CURLMcode type, general libcurl multi interface error code.
If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means that you
should call \fIcurl_multi_perform\fP again, before you wait for more actions
on libcurl's sockets. You don't have to do it immediately, but the return code
means that libcurl may have more data available to return or that there may be
more data to send off before it is "satisfied".
NOTE that this only returns errors etc regarding the whole multi stack. There
might still have occurred problems on individual transfers even when this
function returns OK.
.SH "TYPICAL USAGE"
1. Create a multi handle
2. Set the socket callback with CURLMOPT_SOCKETFUNCTION
3. Add easy handles
4. Call curl_multi_socket_all() first once
5. Setup a "collection" of sockets to supervise when your socket
callback is called.
6. Use curl_multi_timeout() to figure out how long to wait for action
7. Wait for action on any of libcurl's sockets
8, When action happens, call curl_multi_socket() for the socket(s) that got
action.
9. Go back to step 6.
.SH AVAILABILITY
This function was added in libcurl 7.16.0
.SH "SEE ALSO"
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
.BR curl_multi_fdset "(3), " curl_multi_info_read "(3)"

View File

@@ -0,0 +1 @@
.so man3/curl_multi_socket.3

View File

@@ -12,7 +12,7 @@ curl_multi_strerror - return string describing error code
.SH DESCRIPTION .SH DESCRIPTION
The curl_multi_strerror() function returns a string describing the CURLMcode The curl_multi_strerror() function returns a string describing the CURLMcode
error code passed in the argument \fIerrornum\fP. error code passed in the argument \fIerrornum\fP.
.SH AVAILABILITY
This function was added in libcurl 7.12.0 This function was added in libcurl 7.12.0
.SH RETURN VALUE .SH RETURN VALUE
A pointer to a zero terminated string. A pointer to a zero terminated string.

View File

@@ -0,0 +1,38 @@
.\" $Id$
.\"
.TH curl_multi_timeout 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
.SH NAME
curl_multi_timeout \- how long to wait for action before proceeding
.SH SYNOPSIS
#include <curl/curl.h>
CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout);
.SH DESCRIPTION
An application using the libcurl multi interface should call
\fBcurl_multi_timeout(3)\fP to figure out how long it should wait for socket
actions \- at most \- before proceeding.
Proceeding means either doing the socket-style timeout action: call the
\fBcurl_multi_socket(3)\fP function with the \fBsockfd\fP argument set to
CURL_SOCKET_TIMEOUT and the \fBeasy\fP argument set to CURL_EASY_TIMEOUT, or
simply calling \fBcurl_multi_perform(3)\fP if you're using the simpler and
older multi interface approach.
The timeout value returned in the long \fBtimeout\fP points to, is in number
of milliseconds at this very moment. If 0, it means you should proceed
immediately without waiting for anything. If it returns -1, there's no timeout
at all set.
.SH "RETURN VALUE"
The standard CURLMcode for multi interface error codes.
.SH "TYPICAL USAGE"
Call \fBcurl_multi_timeout(3)\fP, then wait for action on the sockets. You
figure out which sockets to wait for by calling \fBcurl_multi_fdset(3)\fP or
by a previous call to \fBcurl_multi_socket(3)\fP.
.SH AVAILABILITY
This function was added in libcurl 7.16.0
.SH "SEE ALSO"
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
.BR curl_multi_socket "(3) "

View File

@@ -12,7 +12,7 @@ curl_share_strerror - return string describing error code
.SH DESCRIPTION .SH DESCRIPTION
The curl_share_strerror() function returns a string describing the CURLSHcode The curl_share_strerror() function returns a string describing the CURLSHcode
error code passed in the argument \fIerrornum\fP. error code passed in the argument \fIerrornum\fP.
.SH AVAILABILITY
This function was added in libcurl 7.12.0 This function was added in libcurl 7.12.0
.SH RETURN VALUE .SH RETURN VALUE
A pointer to a zero terminated string. A pointer to a zero terminated string.

View File

@@ -0,0 +1,27 @@
An overview of the six time values available from curl_easy_getinfo()
curk_easy_perform()
|
|--NT
|--|--CT
|--|--|--PT
|--|--|--|--ST
|--|--|--TT
|--|--|--|--|--RT
NT = CURLINFO_NAMELOOKUP_TIME. The time it took from the start until the name
resolving was completed.
CT = CURLINFO_CONNECT_TIME. The time it took from the start until the connect
to the remote host (or proxy) was completed.
PT = CURLINFO_PRETRANSFER_TIME. The time it took from the start until the file
transfer is just about to begin. This includes all pre-transfer commands
and negotiations that are specific to the particular protocol(s)
involved.
ST = CURLINFO_STARTTRANSFER_TIME. The time it took from the start until the
first byte is just about to be transferred.
TT = CURLINFO_TOTAL_TIME. Time of the previous transfer. This time does not
include the connect time (CT), so if you want the complete operation
time, you should add that.
RT = CURLINFO_REDIRECT_TIME. The time it took for all redirection steps
include name lookup, connect, pretransfer and transfer before final
transaction was started. So, this is zero if no redirection took place.

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