Compare commits

...

65 Commits

Author SHA1 Message Date
Yang Tse
7e4193b538 Fix compiler warning 2006-09-07 01:18:46 +00:00
Daniel Stenberg
a932803eac Invoke memanalyze from the source path and hush up about killing the FTP
server as part of test cases
2006-09-06 10:03:34 +00:00
Daniel Stenberg
52560142bf added some fresh new blurb 2006-09-05 21:17:04 +00:00
Daniel Stenberg
874a4ef8c7 spell fix and added Jari 2006-09-04 22:21:32 +00:00
Daniel Stenberg
0bb3ac7c31 Jari Sundell's minor cleanup, added comments and some extra error-checkings
for easier future error-tracking.
2006-09-04 22:19:13 +00:00
Daniel Stenberg
1e9f5845ab I fell over a new libtool that starts with a newline so we need to fetch
the two first lines to get the version string. The good news is that older
libtools have an empty line after the first so I think this works fine all
over...
2006-09-04 08:53:28 +00:00
Daniel Stenberg
c41dfc2501 oops, we're on the .6 track now 2006-09-04 08:43:44 +00:00
Daniel Stenberg
30ac7eced1 proper credit 2006-09-04 06:17:55 +00:00
Daniel Stenberg
466d093a92 - "Dortik" (http://curl.haxx.se/bug/view.cgi?id=1551412) provided a patch that
while not fixing things very nicely, it does make the SOCKS5 proxy
  connection slightly better as it now acknowledges the timeout for connection
  and it no longer segfaults in the case when SOCKS requires authentication
  and you did not specify username:password.
2006-09-03 22:52:42 +00:00
Daniel Stenberg
1e9be353c2 Mohun Biswas' improvements and clarifications about the options and how to use
them.
2006-09-03 22:12:57 +00:00
Gisle Vanem
4f4277d9c7 Simplified #ifdef on WIN32; the statement
" !defined(__GNUC__) || defined(__MINGW32__)" implies
CygWin.
2006-09-03 13:52:07 +00:00
Gisle Vanem
6728bda5c5 Watcom lacks <sys/time.h>. 2006-09-03 13:45:42 +00:00
Daniel Stenberg
dc9f154823 added missing test 2006-08-31 22:18:08 +00:00
Daniel Stenberg
d7168a82e2 Dmitriy Sergeyev found and fixed a multi interface flaw when using asynch
name resolves. It could get stuck in the wrong state.
2006-08-31 12:53:39 +00:00
Gisle Vanem
c9c8ee3796 Added HAVE_SYS_TIME_H for djgpp and HighC. 2006-08-30 16:18:03 +00:00
Gisle Vanem
c7aae10300 Removed "#ifndef__WATCOMC__". Use "#ifdef HAVE_SYS_TIME_H" instead. 2006-08-30 16:17:06 +00:00
Gisle Vanem
909941405f Added support for more MS-DOS compilers. 2006-08-30 12:10:30 +00:00
Gisle Vanem
4031eb1d91 Avoid Metaware's High-C warning "'=' encountered where '==' may have been intended." 2006-08-29 21:11:55 +00:00
Gisle Vanem
59cf6fd4f0 Watcom lacks <sys/time.h>. 2006-08-29 18:45:55 +00:00
Gisle Vanem
6de9732a88 Added support for Watcom/DOS. 2006-08-29 18:40:36 +00:00
Gisle Vanem
1f7f500922 Updated dependency section. 2006-08-29 18:17:43 +00:00
Gisle Vanem
4b1462ec65 Don't include zlib headers in dependency output. 2006-08-29 18:13:54 +00:00
Gisle Vanem
6ed47f0aad Renamed config.dj -> config.dos. 2006-08-29 16:40:47 +00:00
Gisle Vanem
2d8c7ba9fc Use config.dos instead. Updated generated dependencies. 2006-08-29 16:35:11 +00:00
Gisle Vanem
3b342d18bc Removed. New file is config.dos. 2006-08-29 16:34:40 +00:00
Gisle Vanem
f24ad3800c Renamed config.dj -> config.dos. Added #ifdef-section for djgpp. 2006-08-29 16:33:41 +00:00
Gisle Vanem
e2ff369eba BUFSIZE defined in Metaware's <stdio.h>. Undefine to avoid warning. 2006-08-29 16:27:13 +00:00
Gisle Vanem
9691a78f6b Support other MS-DOS compilers (MSDOS is a djgpp built-in define). 2006-08-29 16:26:41 +00:00
Gisle Vanem
7ff6b6fafd Metaware's High-C has an ISO cpp. 2006-08-29 16:16:13 +00:00
Daniel Stenberg
7c621cfbdf Brad Spencer did
o made ares_version.h use extern "C" for c++ compilers
 o fixed compiler warnings in ares_getnameinfo.c
 o fixed a buffer position init for TCP reads
2006-08-29 15:17:47 +00:00
Daniel Stenberg
5acadc9cd7 David McCreedy added CURLOPT_SOCKOPTFUNCTION and CURLOPT_SOCKOPTDATA to
allow applications to set their own socket options.
2006-08-29 14:39:33 +00:00
Daniel Stenberg
2ff609dd43 Armel Asselin reported that the 'running_handles' counter wasn't updated
properly if you removed a "live" handle from a multi handle with
curl_multi_remove_handle().
2006-08-25 13:53:20 +00:00
Daniel Stenberg
da48a6ba87 clarify the string syntax support in the CURLOPT_PROXY section 2006-08-23 21:49:44 +00:00
Dan Fandrich
cd6c58216a Use /usr/bin/env to invoke perl like the other test scripts. 2006-08-23 21:20:00 +00:00
Daniel Stenberg
bdbd0cf27a David McCreedy fixed a remaining mistake from the August 19 TYPE change. 2006-08-22 21:23:25 +00:00
Daniel Stenberg
d792937686 Peter Sylvester pointed out a flaw in the AllowServerConnect() in the FTP
code when doing pure ipv6 EPRT connections.
2006-08-22 21:21:01 +00:00
Daniel Stenberg
bac66ec26b as Jeff Pohlmeyer pointed out, first get the multi handle _then_ use it 2006-08-22 06:29:21 +00:00
Dan Fandrich
77516822f6 Workaround for Cray UNICOS 9.0 to fix ftp. 2006-08-21 22:28:19 +00:00
Daniel Stenberg
37d8c67530 clarify for what protocols the changes are 2006-08-21 06:39:52 +00:00
Daniel Stenberg
cfdcae4bc7 Based on a patch by Armel Asselin, the FTP code no longer re-issues the TYPE
command on subsequent requests on a re-used connection unless it has to.
2006-08-19 21:18:36 +00:00
Daniel Stenberg
74a6921bc4 Armel Asselin fixed a crash in the FTP code when using SINGLECWD mode and
files in the root directory.
2006-08-18 23:17:33 +00:00
Daniel Stenberg
490cccba3c Andrew Biggs pointed out a "Expect: 100-continue" flaw where libcurl didn't
send the whole request at once, even though the Expect: header was disabled
by the application. An effect of this change is also that small (< 1024
bytes) POSTs are now always sent without Expect: header since we deem it
more costly to bother about that than the risk that we send the data in
vain.
2006-08-18 22:54:57 +00:00
Dan Fandrich
839441e236 Minor portability fixes to get things running on UNICOS 9.0 on a Cray Y-MP 2006-08-16 18:48:27 +00:00
Daniel Stenberg
ba9ea943e2 related info 2006-08-16 17:56:49 +00:00
Gisle Vanem
455087faae Use gnutls_strerror() for clearer error message. 2006-08-16 17:05:54 +00:00
Gisle Vanem
31def9e217 Use '_LIBICONV_VERSION' instead of variable '_libiconv_version'
to support older iconv versions.
2006-08-15 17:02:24 +00:00
Yang Tse
ee3514ccdc Replace exit() with return() in main() 2006-08-14 17:00:08 +00:00
Daniel Stenberg
cf606d7da0 add missing man page 2006-08-14 07:21:33 +00:00
Dan Fandrich
eb26a581f9 Use __minix to detect Minix, which works on both ACK and GCC. 2006-08-11 18:11:42 +00:00
Daniel Stenberg
b04cbebf86 option name spell fix 2006-08-09 20:54:17 +00:00
Dan Fandrich
4272af801f Only define the string prototypes in ANSI mode to reduce interference on
systems that prototype them slightly differently.
2006-08-09 16:36:17 +00:00
Dan Fandrich
0b633027cb Added eCos and Minix sections. 2006-08-09 16:10:20 +00:00
Gunter Knauf
93943ef949 added build info output. 2006-08-09 14:04:51 +00:00
Gunter Knauf
b184b87714 fixed some web links. 2006-08-09 13:59:39 +00:00
Gunter Knauf
a11473f85d fixed some web links. 2006-08-08 23:37:11 +00:00
Daniel Stenberg
1eedad27a2 Armel Asselin made the CURLOPT_PREQUOTE option work fine even when
CURLOPT_NOBODY is set true. PREQUOTE is then run roughly at the same place
in the command sequence as it would have run if there would've been a
transfer.
2006-08-08 22:56:46 +00:00
Gunter Knauf
ac02d379ba moved ugly NetWare hack to hostip.h so that hostip.c uses it too. 2006-08-08 22:37:53 +00:00
Daniel Stenberg
a4ebf5b507 Fixed a flaw in the "Expect: 100-continue" treatment. If you did two POSTs
on a persistent connection and allowed the first to use that header, you
could not disable it for the second request.
2006-08-08 21:12:49 +00:00
Daniel Stenberg
c410769588 make REALLY sure src/config.h.in is a copy of lib/config.h.in 2006-08-08 21:11:31 +00:00
Dan Fandrich
997a987943 Minix 3 doesn't have MSG_PEEK 2006-08-08 18:47:14 +00:00
Daniel Stenberg
6201dc083a better updating of the single timeout 2006-08-08 13:39:40 +00:00
Yang Tse
b33f47804d Allow again proper compilation outside of the source tree 2006-08-07 18:06:37 +00:00
Daniel Stenberg
7ba5e098a3 Jeff Pohlmeyer pointed out this stupid variable type error 2006-08-07 16:54:50 +00:00
Daniel Stenberg
824b78021c start working towards 7.15.6 2006-08-07 06:48:01 +00:00
Daniel Stenberg
31657c85e5 added contributors to 7.15.5 2006-08-07 06:46:05 +00:00
80 changed files with 1392 additions and 868 deletions

78
CHANGES
View File

@@ -6,6 +6,70 @@
Changelog
Daniel (4 September 2006)
- Dmitry Rechkin (http://curl.haxx.se/bug/view.cgi?id=1551412) provided a
patch that while not fixing things very nicely, it does make the SOCKS5
proxy connection slightly better as it now acknowledges the timeout for
connection and it no longer segfaults in the case when SOCKS requires
authentication and you did not specify username:password.
Daniel (31 August 2006)
- Dmitriy Sergeyev found and fixed a multi interface flaw when using asynch
name resolves. It could get stuck in the wrong state.
Gisle (29 August 2006)
- Added support for other MS-DOS compilers (desides djgpp). All MS-DOS
compiler now uses the same config.dos file (renamed to config.h by
make). libcurl now builds fine using Watcom and Metaware's High-C
using the Watt-32 tcp/ip-stack.
Daniel (29 August 2006)
- David McCreedy added CURLOPT_SOCKOPTFUNCTION and CURLOPT_SOCKOPTDATA to
allow applications to set their own socket options.
Daniel (25 August 2006)
- Armel Asselin reported that the 'running_handles' counter wasn't updated
properly if you removed a "live" handle from a multi handle with
curl_multi_remove_handle().
Daniel (22 August 2006)
- David McCreedy fixed a remaining mistake from the August 19 TYPE change.
- Peter Sylvester pointed out a flaw in the AllowServerConnect() in the FTP
code when doing pure ipv6 EPRT connections.
Daniel (19 August 2006)
- Based on a patch by Armel Asselin, the FTP code no longer re-issues the TYPE
command on subsequent requests on a re-used connection unless it has to.
- Armel Asselin fixed a crash in the FTP code when using SINGLECWD mode and
files in the root directory.
- Andrew Biggs pointed out a "Expect: 100-continue" flaw where libcurl didn't
send the whole request at once, even though the Expect: header was disabled
by the application. An effect of this change is also that small (< 1024
bytes) POSTs are now always sent without Expect: header since we deem it
more costly to bother about that than the risk that we send the data in
vain.
Daniel (9 August 2006)
- Armel Asselin made the CURLOPT_PREQUOTE option work fine even when
CURLOPT_NOBODY is set true. PREQUOTE is then run roughly at the same place
in the command sequence as it would have run if there would've been a
transfer.
Daniel (8 August 2006)
- Fixed a flaw in the "Expect: 100-continue" treatment. If you did two POSTs
on a persistent connection and allowed the first to use that header, you
could not disable it for the second request.
Daniel (7 August 2006)
- Domenico Andreolfound a quick build error which happened because
src/config.h.in was not a proper duplcate of lib/config.h.in which it
should've been and this was due to the maketgz script not doing the cp
properly.
Version 7.15.5 (7 August 2006)
Daniel (2 August 2006)
@@ -99,7 +163,7 @@ Daniel (8 July 2006)
Daniel (4 July 2006)
- Toshiyuki Maezawa fixed a problem where you couldn't override the
Proxy-Connection: header when using a proxy and not doing CONNECT.
Daniel (24 June 2006)
- Michael Wallner added curl_formget(), which allows an application to extract
(serialise) a previously built formpost (as with curl_formadd()).
@@ -270,11 +334,11 @@ Daniel (4 May 2006)
already did this.
Daniel (2 May 2006)
- Added a --checkfor option to curl-config to allow users to easier
write for example shell scripts that test for the presence of a
new-enough libcurl version. If --checkfor is given a version string
newer than what is currently installed, curl-config will return a
non-zero exit code and output a string about the unfulfilled
- Added a --checkfor option to curl-config to allow users to easier
write for example shell scripts that test for the presence of a
new-enough libcurl version. If --checkfor is given a version string
newer than what is currently installed, curl-config will return a
non-zero exit code and output a string about the unfulfilled
requirement.
Daniel (26 April 2006)
@@ -330,7 +394,7 @@ Daniel (7 April 2006)
CONV_FROM_NETWORK_FUNCTION
CONV_TO_NETWORK_FUNCTION
CONV_FROM_UTF8_FUNCTION
CONV_FROM_UTF8_FUNCTION
Daniel (5 April 2006)
- Michele Bini modified the NTLM code to work for his "weird IIS case"

View File

@@ -1,57 +1,48 @@
Curl and libcurl 7.15.5
Curl and libcurl 7.15.6
Public curl release number: 95
Releases counted from the very beginning: 122
Public curl release number: 96
Releases counted from the very beginning: 123
Available command line options: 114
Available curl_easy_setopt() options: 133
Available curl_easy_setopt() options: 135
Number of public functions in libcurl: 54
Amount of public web site mirrors: 33
Number of known libcurl bindings: 32
Number of contributors: 506
Number of contributors: 515
This release includes the following changes:
o added --ftp-ssl-reqd
o modified the prototype for the socket callback set with
CURLMOPT_SOCKETFUNCTION
o added curl_multi_assign()
o added CURLOPT_FTP_ALTERNATIVE_TO_USER and --ftp-alternative-to-user
o added a vcproj file for building libcurl
o added curl_formget()
o added CURLOPT_MAX_SEND_SPEED_LARGE and CURLOPT_MAX_RECV_SPEED_LARGE
o added configure --enable-hidden-symbols
o Made -K on a file that couldn't be read cause a warning to be displayed
o Added support for other MS-DOS compilers (besides djgpp)
o CURLOPT_SOCKOPTFUNCTION and CURLOPT_SOCKOPTDATA were added
o (FTP) libcurl avoids sending TYPE if the desired type was already set
o (FTP) CURLOPT_PREQUOTE works even when CURLOPT_NOBODY is set true
This release includes the following bugfixes:
o chunked encoding when custom header "Transfer-Encoding: chunked" is set
o Curl_strerror() crash on unknown errors
o changing Content-Type when doing formposts
o added CURL_EXTERN to a few recent multi functions that lacked them
o splay-tree related problems for internal expire time handling
o FTP ASCII CRLF counter reset
o cookie parser now compares paths case sensitive
o an easy handle with shared DNS cache added to a multi handle caused a crash
o couldn't override the Proxy-Connection: header for non-CONNECT requests
o curl_multi_fdset() could wrongly return -1 as max_fd value
o SOCKS5 proxy connects can now time-out
o SOCKS5 connects that require auth no longer segfaults when auth not given
o multi interface using asynch resolves could get stuck in wrong state
o the 'running_handles' counter wasn't always updated properly when
curl_multi_remove_handle() was used
o (FTP) EPRT transfers with IPv6 didn't work properly
o (FTP) SINGLECWD mode and using files in the root dir
o (HTTP) Expect: header disabling work better
o (HTTP) "Expect: 100-continue" disable on second POST on re-used connection
o src/config.h.in is fixed
Other curl-related news:
o yassl 1.3.7 can now be used with libcurl as an optional TLS library for
HTTPS/FTPS support: http://www.yassl.com/
o cURLpp 0.6.0 was released: http://rrette.com/curlpp.html
o pycurl-7.15.4 was released: http://pycurl.sf.net
o pycurl-7.15.5 was released: http://pycurl.sf.net
New curl mirrors:
o
o http://curl.geosdreams.info/ is a new Polish mirror
o http://curl.gfiles.org/ is a new Russian mirror
This release would not have looked like this without help, code, reports and
advice from friends like these:
Dan Fandrich, Peter Silva, Arve Knudsen, Michael Wallner, Toshiyuki Maezawa,
Ingmar Runge, Ates Goral, David McCreedy, Jari Sundell, Georg Horn,
Gisle Vanem, Yang Tse, Michael Jerris, Dan Nelson, Yves Lejeune,
Maciej Karpiuk, Mark Lentczner
Domenico Andreoli, Armel Asselin, Gisle Vanem, Yang Tse, Andrew Biggs,
Peter Sylvester, David McCreedy, Dmitriy Sergeyev, Dmitry Rechkin,
Jari Sundell
Thanks! (and sorry if I forgot to mention someone)

View File

@@ -1,5 +1,13 @@
Changelog for the c-ares project
* August 29 2006
- Brad Spencer did
o made ares_version.h use extern "C" for c++ compilers
o fixed compiler warnings in ares_getnameinfo.c
o fixed a buffer position init for TCP reads
* August 3 2006
- Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and

View File

@@ -16,4 +16,6 @@ MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3 \
ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3 \
ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3
ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3 \
ares_getsock.3

View File

@@ -81,8 +81,8 @@ 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 sockaddr_in *addr;
struct sockaddr_in6 *addr6;
struct nameinfo_query *niquery;
/* Verify the buffer size */

View File

@@ -297,6 +297,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
free(server->tcp_buffer);
server->tcp_buffer = NULL;
server->tcp_lenbuf_pos = 0;
server->tcp_buffer_pos = 0;
}
}
}

View File

@@ -11,7 +11,15 @@
(ARES_VERSION_PATCH))
#define ARES_VERSION_STR "1.3.1"
#ifdef __cplusplus
extern "C" {
#endif
const char *ares_version(int *version);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -140,7 +140,7 @@ else
libtoolize=`findtool $LIBTOOLIZE`
fi
lt_pversion=`$libtool --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
lt_pversion=`$libtool --version 2>/dev/null|head -n 2|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
if test -z "$lt_pversion"; then
echo "buildconf: libtool not found."
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"

View File

@@ -16,7 +16,6 @@ Installing Binary Packages
UNIX
====
A normal unix installation is made in three or four steps (after you've
unpacked the source archive):
@@ -141,6 +140,7 @@ UNIX
yassl with its OpenSSL emulation enabled and point to that directory root
with configure --with-ssl.
Win32
=====
@@ -292,7 +292,6 @@ Win32
IBM OS/2
========
Building under OS/2 is not much different from building under unix.
You need:
@@ -320,6 +319,7 @@ IBM OS/2
If you're getting huge binaries, probably your makefiles have the -g in
CFLAGS.
VMS
===
(The VMS section is in whole contributed by the friendly Nico Baggus)
@@ -390,6 +390,7 @@ VMS
13-jul-2001
N. Baggus
QNX
===
(This section was graciously brought to us by David Bentham)
@@ -441,17 +442,16 @@ AmigaOS
NetWare
=======
To compile curl.nlm / libcurl.nlm you need:
- either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
- gnu make and awk running on the platform you compile on;
native Win32 versions can be downloaded from:
http://www.gknw.com/development/prgtools/
http://www.gknw.net/development/prgtools/
- recent Novell LibC SDK available from:
http://developer.novell.com/ndk/libc.htm
- optional zlib sources (at the moment only dynamic linking with zlib.imp);
sources with NetWare Makefile can be obtained from:
http://www.gknw.com/mirror/zlib/
http://www.gknw.net/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; on Linux make
@@ -465,14 +465,101 @@ NetWare
with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
Any help in testing appreciated!
Builds automatically created 8 times a day from current CVS are here:
http://www.gknw.com/mirror/curl/autobuilds/
http://www.gknw.net/mirror/curl/autobuilds/
the status of these builds can be viewed at the autobuild table:
http://curl.haxx.se/auto/
eCos
====
curl does not use the eCos build system, so you must first build eCos
separately, then link curl to the resulting eCos library. Here's a sample
configure line to do so on an x86 Linux box targeting x86:
GCCLIB=`gcc -print-libgcc-file-name` && \
CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \
-I`dirname $GCCLIB`/include" \
LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \
-L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \
./configure --host=i386 --disable-shared \
--without-ssl --without-zlib --disable-manual --disable-ldap
In most cases, eCos users will be using libcurl from within a custom
embedded application. Using the standard 'curl' executable from
within eCos means facing the limitation of the standard eCos C
startup code which does not allow passing arguments in main(). To
run 'curl' from eCos and have it do something useful, you will need
to either modify the eCos startup code to pass in some arguments, or
modify the curl application itself to retrieve its arguments from
some location set by the bootloader or hard-code them.
Something like the following patch could be used to hard-code some
arguments. The MTAB_ENTRY line mounts a RAM disk as the root filesystem
(without mounting some kind of filesystem, eCos errors out all file
operations which curl does not take to well). The next section synthesizes
some command-line arguments for curl to use, in this case to direct curl
to read further arguments from a file. It then creates that file on the
RAM disk and places within it a URL to download: a file: URL that
just happens to point to the configuration file itself. The results
of running curl in this way is the contents of the configuration file
printed to the console.
--- src/main.c 19 Jul 2006 19:09:56 -0000 1.363
+++ src/main.c 24 Jul 2006 21:37:23 -0000
@@ -4286,11 +4286,31 @@
}
+#ifdef __ECOS
+#include <cyg/fileio/fileio.h>
+MTAB_ENTRY( testfs_mte1,
+ "/",
+ "ramfs",
+ "",
+ 0);
+#endif
int main(int argc, char *argv[])
{
int res;
struct Configurable config;
+#ifdef __ECOS
+ char *args[] = {"ecos-curl", "-K", "curlconf.txt"};
+ FILE *f;
+ argc = sizeof(args)/sizeof(args[0]);
+ argv = args;
+
+ f = fopen("curlconf.txt", "w");
+ if (f) {
+ fprintf(f, "--url file:curlconf.txt");
+ fclose(f);
+ }
+#endif
memset(&config, 0, sizeof(struct Configurable));
config.errors = stderr; /* default errors to stderr */
Minix
=====
curl can be compiled on Minix 3 using gcc (ACK has a few problems due
to mismatched headers and libraries as of ver. 3.1.2). The gcc and bash
packages must be installed first. The default heap size allocated to
bash is inadequate for running configure and will result in out of memory
errors. Increase it with the command:
chmem =2048000 /usr/local/bin/bash
Make sure gcc and bash are in the PATH then configure curl with a
command like this:
./configure GREP=/usr/bin/grep AR=/usr/gnu/bin/gar --disable-ldap
Then simply run 'make'.
CROSS COMPILE
=============
(This section was graciously brought to us by Jim Duey, with additions by
Dan Fandrich)
@@ -518,9 +605,9 @@ CROSS COMPILE
./configure --host=ARCH-OS
REDUCING SIZE
=============
There are a number of configure options that can be used to reduce the
size of libcurl for embedded applications where binary size is an
important factor. First, be sure to set the CFLAGS variable when
@@ -542,7 +629,7 @@ REDUCING SIZE
--disable-crypto-auth (disables HTTP cryptographic authentication)
--disable-ipv6 (disables support for IPv6)
--disable-verbose (eliminates debugging strings and error code strings)
--enable-hidden-symbols (eliminates unneeded symbols in library)
--enable-hidden-symbols (eliminates unneeded symbols in the shared library)
--without-libidn (disables support for the libidn DNS library)
--without-ssl (disables support for SSL/TLS)
--without-zlib (disables support for on-the-fly decompression)
@@ -553,7 +640,7 @@ REDUCING SIZE
Be sure also to strip debugging symbols from your binaries after
compiling using 'strip' (or the appropriate variant if cross-compiling).
If space is really tight, you may be able to remove some unneeded
sections of the library using the -R option to objcopy (e.g. the
sections of the shared library using the -R option to objcopy (e.g. the
.comment section).
Using these techniques it is possible to create an HTTP-only shared
@@ -597,12 +684,15 @@ PORTS
- StrongARM/ARM7/ARM9 Linux 2.4, 2.6
- StrongARM NetBSD 1.4.1
- Ultrix 4.3a
- UNICOS 9.0
- i386 BeOS
- i386 DOS
- i386 eCos 1.3.1
- i386 Esix 4.1
- i386 FreeBSD
- i386 HURD
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
- i386 MINIX 3.1.2
- i386 NetBSD
- i386 Novell NetWare
- i386 OS/2

View File

@@ -3,7 +3,11 @@ join in and help us correct one or more of these! Also be sure to check the
changelog of the current development status, as one or more of these problems
may have been fixed since this was written!
34. The SOCKS connection codes don't properly acknowledge (connect) timeouts.
35. Both SOCKS5 and SOCKS4 proxy connections are done blocking, which is very
bad when used with the multi interface.
34. The SOCKS4 connection codes don't properly acknowledge (connect) timeouts.
Also see #12.
33. Doing multi-pass HTTP authentication on a non-default port does not work.
This happens because the multi-pass code abuses the redirect following code
@@ -92,7 +96,7 @@ may have been fixed since this was written!
12. When connecting to a SOCKS proxy, the (connect) timeout is not properly
acknowledged after the actual TCP connect (during the SOCKS "negotiate"
phase). Pointed out by Lucas. Fix: need to select() and timeout properly.
phase).
11. Using configure --disable-[protocol] may cause 'make test' to fail for
tests using the disabled protocol(s).

View File

@@ -31,6 +31,15 @@ SIMPLE USAGE
curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/
Get a file off an FTPS server:
curl ftps://files.are.secure.com/secrets.txt
or use the more appropriate FTPS way to get the same file:
curl --ftp-ssl ftp://files.are.secure.com/secrets.txt
DOWNLOAD TO A FILE
Get a web page and store in a local file:
@@ -64,6 +73,10 @@ USING PASSWORDS
It is just like for FTP, but you may also want to specify and use
SSL-specific options for certificates etc.
Note that using FTPS:// as prefix is the "implicit" way as described in the
standards while the recommended "explicit" way is done by using FTP:// and
the --ftp-ssl option.
HTTP
The HTTP URL doesn't support user and password in the URL string. Curl
@@ -105,6 +118,8 @@ PROXY
curl -U user:passwd -x my-proxy:888 http://www.get.this/
curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.
See also the environment variables Curl support that offer further proxy
control.
@@ -846,6 +861,22 @@ PERSISTENT CONNECTIONS
transfers faster. If you use a http proxy for file transfers, practically
all transfers will be persistent.
MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE
As is mentioned above, you can download multiple files with one command line
by simply adding more URLs. If you want those to get saved to a local file
instead of just printed to stdout, you need to add one save option for each
URL you specify. Note that this also goes for the -O option.
For example: get two files and use -O for the first and a custom file
name for the second:
curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg
You can also upload multiple files in a similar fashion:
curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt
MAILING LISTS
For your convenience, we have several open mailing lists to discuss curl,

View File

@@ -36,6 +36,7 @@ Angus Mackay
Antoine Calando
Anton Kalmykov
Arkadiusz Miskiewicz
Arve Knudsen
Ates Goral
Augustus Saunders
Avery Fay
@@ -81,6 +82,7 @@ Damien Adant
Dan Becker
Dan C
Dan Fandrich
Dan Nelson
Dan Torop
Dan Zitter
Daniel Stenberg
@@ -194,6 +196,7 @@ Ignacio Vazquez-Abrams
Igor Polyakov
Ilguiz Latypov
Ilja van Sprundel
Ingmar Runge
Ingo Ralf Blum
Ingo Wilken
Jacky Lam
@@ -208,6 +211,7 @@ Jamie Lokier
Jamie Newton
Jamie Wilkinson
Jan Kunder
Jari Sundell
Jason S. Priebe
Jaz Fresh
Jean Jacques Drouin
@@ -292,6 +296,7 @@ Lucas Adamski
Lukasz Czekierda
Luke Call
Luong Dinh Dung
Maciej Karpiuk
Maciej W. Rozycki
Marc Boucher
Marcelo Juchem
@@ -301,6 +306,7 @@ Marcus Webster
Mario Schroeder
Mark Butler
Mark Eichin
Mark Lentczner
Markus Koetter
Markus Moeller
Markus Oberhumer
@@ -321,6 +327,7 @@ Mettgut Jamalla
Michael Benedict
Michael Curtis
Michael Jahn
Michael Jerris
Michael Mealling
Michael Wallner
Michal Bonino
@@ -371,6 +378,7 @@ Peter Bray
Peter Forret
Peter Heuchert
Peter Pentchev
Peter Silva
Peter Su
Peter Sylvester
Peter Todd
@@ -506,6 +514,7 @@ Wojciech Zwiefka
Xavier Bouchoux
Yang Tse
Yarram Sunil
Yves Lejeune
Zvi Har'El
nk
swalkaus at yahoo.com

View File

@@ -160,12 +160,28 @@ found in \fI<curl/curl.h>\fP. This function gets called by libcurl when
something special I/O-related needs to be done that the library can't do by
itself. For now, rewinding the read data stream is the only action it can
request. The rewinding of the read data stream may be necessary when doing a
HTTP PUT or POST with a multi-pass authentication method. (Opion added in
HTTP PUT or POST with a multi-pass authentication method. (Option added in
7.12.3)
.IP CURLOPT_IOCTLDATA
Pass a pointer that will be untouched by libcurl and passed as the 3rd
argument in the ioctl callback set with \fICURLOPT_IOCTLFUNCTION\fP. (Option
added in 7.12.3)
.IP CURLOPT_SOCKOPTFUNCTION
Function pointer that should match the \fIcurl_sockopt_callback\fP prototype
found in \fI<curl/curl.h>\fP. This function gets called by libcurl after the
socket() call but before the connect() call. The callback's \fIpurpose\fP
argument identifies the exact purpose for this particular socket, and
currently only one value is supported: \fICURLSOCKTYPE_IPCXN\fP for the
primary connection (meaning the control connection in the FTP case). Future
versions of libcurl may support more purposes. It passes the newly created
socket descriptor so additional setsockopt() calls can be done at the user's
discretion. A non-zero return code from the callback function will signal an
unrecoverable error to the library and it will close the socket and return
\fICURLE_COULDNT_CONNECT\fP. (Option added in 7.15.6.)
.IP CURLOPT_SOCKOPTDATA
Pass a pointer that will be untouched by libcurl and passed as the first
argument in the sockopt callback set with \fICURLOPT_SOCKOPTFUNCTION\fP.
(Option added in 7.15.6.)
.IP CURLOPT_PROGRESSFUNCTION
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
@@ -365,9 +381,10 @@ libcurl respects the environment variables \fBhttp_proxy\fP, \fBftp_proxy\fP,
\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.
Starting with 7.14.1, the proxy host string given in environment variables can
be specified the exact same way as the proxy can be set with
\fICURLOPT_PROXY\fP, include protocol prefix (http://) and embedded user +
password.
.IP CURLOPT_PROXYPORT
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.
@@ -821,7 +838,8 @@ Pass a pointer to a linked list of FTP commands to pass to the server after
the transfer type is set. The linked list should be a fully valid list of
struct curl_slist structs properly filled in as described for
\fICURLOPT_QUOTE\fP. Disable this operation again by setting a NULL to this
option.
option. Before version 7.15.6, if you also set \fICURLOPT_NOBODY\fP non-zero,
this option didn't work.
.IP CURLOPT_FTPLISTONLY
A non-zero parameter tells the library to just list the names of an ftp
directory, instead of doing a full directory listing that would include file
@@ -998,9 +1016,9 @@ libcurl what the expected size of the infile is. This value should be passed
as a curl_off_t. (Added in 7.11.0)
.IP CURLOPT_UPLOAD
A non-zero parameter tells the library to prepare for an upload. The
\fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZEE\fP or
\fICURLOPT_INFILESIZE_LARGE\fP are also interesting for uploads. If the
protocol is HTTP, uploading means using the PUT request unless you tell
\fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP or
\fICURLOPT_INFILESIZE_LARGE\fP options are also interesting for uploads. If
the protocol is HTTP, uploading means using the PUT request unless you tell
libcurl otherwise.
Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header.

View File

@@ -23,88 +23,96 @@ After the \fIlastitem\fP pointer follow the real arguments.
The pointers \fI*firstitem\fP and \fI*lastitem\fP should both be pointing to
NULL in the first call to this function. All list-data will be allocated by
the function itself. You must call \fIcurl_formfree\fP after the form post has
been done to free the resources again.
the function itself. You must call \fIcurl_formfree(3)\fP after the form post
has been done to free the resources.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
First, there are some basics you need to understand about multipart/formdata
posts. Each part consists of at least a NAME and a CONTENTS part. If the part
is made for file upload, there are also a stored CONTENT-TYPE and a
FILENAME. Below here, we'll discuss on what options you use to set these
properties in the parts you want to add to your post.
is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME.
Below, we'll discuss what options you use to set these properties in the
parts you want to add to your post.
The options listed first are for making normal parts. The options from
\fICURLFORM_FILE\fP through \fICURLFORM_BUFFERLENGTH\fP are for file upload
parts.
.SH OPTIONS
.IP CURLFORM_COPYNAME
followed by string is used to set the name of this part. libcurl copies the
given data, so your application doesn't need to keep it around after this
function call. If the name isn't zero terminated properly, or if you'd like it
to contain zero bytes, you need to set the length of the name with
\fBCURLFORM_NAMELENGTH\fP.
followed by a string which provides the \fIname\fP of this part. libcurl
copies the string so your application doesn't need to keep it around after
this function call. If the name isn't null terminated, or if you'd
like it to contain zero bytes, you must set its length with
\fBCURLFORM_NAMELENGTH\fP. The copied data will be freed by
\fIcurl_formfree(3)\fP.
.IP CURLFORM_PTRNAME
followed by a string is used for the name of this part. libcurl will use the
pointer and refer to the data in your application, you must make sure it
remains until curl no longer needs it. If the name isn't zero terminated
properly, or if you'd like it to contain zero bytes, you need to set the
length of the name with \fBCURLFORM_NAMELENGTH\fP.
followed by a string which provides the \fIname\fP of this part. libcurl
will use the pointer and refer to the data in your application, so you
must make sure it remains until curl no longer needs it. If the name
isn't null terminated, or if you'd like it to contain zero
bytes, you must set its length with \fBCURLFORM_NAMELENGTH\fP.
.IP CURLFORM_COPYCONTENTS
followed by a string is used for the contents of this part, the actual data to
send away. libcurl copies the given data, so your application doesn't need to
keep it around after this function call. If the data isn't zero terminated
properly, or if you'd like it to contain zero bytes, you need to set the
length of the name with \fBCURLFORM_CONTENTSLENGTH\fP.
followed by a pointer to the contents of this part, the actual data
to send away. libcurl copies the provided data, so your application doesn't
need to keep it around after this function call. If the data isn't null
terminated, or if you'd like it to contain zero bytes, you must
set the length of the name with \fBCURLFORM_CONTENTSLENGTH\fP. The copied
data will be freed by \fIcurl_formfree(3)\fP.
.IP CURLFORM_PTRCONTENTS
followed by a string is used for the contents of this part, the actual data to
send away. libcurl will use the pointer and refer to the data in your
application, you must make sure it remains until curl no longer needs it. If
the data isn't zero terminated properly, or if you'd like it to contain zero
bytes, you need to set the length of the name with
\fBCURLFORM_CONTENTSLENGTH\fP.
followed by a pointer to the contents of this part, the actual data
to send away. libcurl will use the pointer and refer to the data in your
application, so you must make sure it remains until curl no longer needs it.
If the data isn't null terminated, or if you'd like it to contain zero bytes,
you must set its length with \fBCURLFORM_CONTENTSLENGTH\fP.
.IP CURLFORM_CONTENTSLENGTH
followed by a long setting the length of the contents.
followed by a long giving the length of the contents.
.IP CURLFORM_FILECONTENT
followed by a file name, makes that file read and the contents will be used in
as data in this part.
followed by a filename, causes that file to be read and its contents used
as data in this part. This part does \fInot\fP automatically become a file
upload part simply because its data was read from a file.
.IP CURLFORM_FILE
followed by a file name, makes this part a file upload part. It sets the file
name field to the actual file name used here, it gets the contents of the file
and passes as data and sets the content-type if the given file match one of
the new internally known file extension. For \fBCURLFORM_FILE\fP the user may
send one or more files in one part by providing multiple \fBCURLFORM_FILE\fP
arguments each followed by the filename (and each CURLFORM_FILE is allowed to
have a CURLFORM_CONTENTTYPE).
followed by a filename, makes this part a file upload part. It sets the
\fIfilename\fP field to the basename of the provided filename, it reads the
contents of the file and passes them as data and sets the content-type if the
given file match one of the internally known file extensions. For
\fBCURLFORM_FILE\fP the user may send one or more files in one part by
providing multiple \fBCURLFORM_FILE\fP arguments each followed by the
filename (and each CURLFORM_FILE is allowed to have a CURLFORM_CONTENTTYPE).
.IP CURLFORM_CONTENTTYPE
followed by a pointer to a string with a content-type will make curl use this
given content-type for this file upload part, possibly instead of an
is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a
string which provides the content-type for this part, possibly instead of an
internally chosen one.
.IP CURLFORM_FILENAME
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
\fICURLFORM_FILE\fP.
is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a
string, it tells libcurl to use the given string as the \fIfilename\fP in the
file upload part instead of the actual file name.
.IP CURLFORM_BUFFER
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
name field in the content header.
is used for custom file upload parts without use of \fICURLFORM_FILE\fP. It
tells libcurl that the file contents are already present in a buffer. The
parameter is a string which provides the \fIfilename\fP field in the content
header.
.IP CURLFORM_BUFFERPTR
followed by a pointer to a data area, tells libcurl the address of the buffer
containing data to upload (as indicated with \fICURLFORM_BUFFER\fP). The
buffer containing this data must not be freed until after
is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a pointer
to the buffer to be uploaded. This buffer must not be freed until after
\fIcurl_easy_cleanup(3)\fP is called. You must also use
\fICURLFORM_BUFFERLENGTH\fP to set the length of the given buffer area.
\fICURLFORM_BUFFERLENGTH\fP to set the number of bytes in the buffer.
.IP CURLFORM_BUFFERLENGTH
followed by a long with the size of the \fICURLFORM_BUFFERPTR\fP data area,
tells libcurl the length of the buffer to upload.
is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a
long which gives the length of the buffer.
.IP CURLFORM_ARRAY
Another possibility to send options to curl_formadd() is the

View File

@@ -74,7 +74,7 @@ struct fdinfo {
long timeout; /* as set by libcurl */
struct event ev; /* */
int evset; /* true if the 'ev' struct has been used in a event_set() call */
CURLMcode *multi; /* pointer to the multi handle */
CURLM *multi; /* pointer to the multi handle */
int *running_handles; /* pointer to the running_handles counter */
};
@@ -86,6 +86,8 @@ static int running_handles;
done, we can remove the timerevent as well */
static struct event timerevent;
static void update_timeout(CURLM *multi_handle);
/* called from libevent on action on a particular socket ("event") */
static void eventcallback(int fd, short type, void *userp)
{
@@ -110,6 +112,8 @@ static void eventcallback(int fd, short type, void *userp)
if(evtimer_pending(&timerevent, NULL))
evtimer_del(&timerevent);
}
else
update_timeout(fdp->multi);
}
/* called from libevent when our timer event expires */
@@ -118,8 +122,6 @@ static void timercallback(int fd, short type, void *userp)
(void)fd; /* not used for this */
(void)type; /* ignored in here */
CURLM *multi_handle = (CURLM *)userp;
long timeout_ms;
struct timeval timeout;
int running_handles;
CURLMcode rc;
@@ -131,15 +133,9 @@ static void timercallback(int fd, short type, void *userp)
&running_handles);
} while (rc == CURLM_CALL_MULTI_PERFORM);
if(running_handles) {
if(running_handles)
/* Get the current timeout value from libcurl and set a new timeout */
curl_multi_timeout(multi_handle, &timeout_ms);
/* convert ms to timeval */
timeout.tv_sec = timeout_ms/1000;
timeout.tv_usec = (timeout_ms%1000)*1000;
evtimer_add(&timerevent, &timeout);
}
update_timeout(multi_handle);
}
static void remsock(struct fdinfo *f)
@@ -266,6 +262,7 @@ writecallback(void *ptr, size_t size, size_t nmemb, void *data)
{
size_t realsize = size * nmemb;
struct connection *c = (struct connection *)data;
(void)ptr;
c->dlcounter += realsize;
c->global->dlcounter += realsize;
@@ -283,19 +280,28 @@ int num_total;
int num_idle;
int num_active;
static void update_timeout(CURLM *multi_handle)
{
long timeout_ms;
struct timeval timeout;
/* Since we need a global timeout to occur after a given time of inactivity,
we use a single timeout-event. Get the timeout value from libcurl, and
update it after every call to libcurl. */
curl_multi_timeout(multi_handle, &timeout_ms);
/* convert ms to timeval */
timeout.tv_sec = timeout_ms/1000;
timeout.tv_usec = (timeout_ms%1000)*1000;
evtimer_add(&timerevent, &timeout);
}
int main(int argc, char **argv)
{
CURLM *multi_handle;
CURLMsg *msg;
CURLcode code = CURLE_OK;
CURLMcode mcode = CURLM_OK;
int rc;
int i;
int selectmaxamount;
struct fdinfo *fdp;
char act;
long timeout_ms;
struct timeval timeout;
memset(&info, 0, sizeof(struct globalinfo));
@@ -327,9 +333,11 @@ int main(int argc, char **argv)
/* init the multi stack */
multi_handle = curl_multi_init();
/* initialize the timeout event */
evtimer_set(&timerevent, timercallback, multi_handle);
for(i=0; i< num_total; i++) {
CURL *e;
char *nl;
memset(&conns[i], 0, sizeof(struct connection));
@@ -370,14 +378,8 @@ int main(int argc, char **argv)
while(CURLM_CALL_MULTI_PERFORM == curl_multi_socket_all(multi_handle,
&running_handles));
/* Since we need a global timeout to occur after a given time of inactivity,
we add a single timeout-event. Get the timeout value from libcurl */
curl_multi_timeout(multi_handle, &timeout_ms);
/* convert ms to timeval */
timeout.tv_sec = timeout_ms/1000;
timeout.tv_usec = (timeout_ms%1000)*1000;
evtimer_set(&timerevent, timercallback, multi_handle);
evtimer_add(&timerevent, &timeout);
/* update timeout */
update_timeout(multi_handle);
/* event_dispatch() runs the event main loop. It ends when no events are
left to wait for. */

View File

@@ -133,6 +133,49 @@ extern "C" {
#undef FILESIZEBITS
#endif
#if defined(_WIN32) && !defined(WIN32)
/* Chris Lewis mentioned that he doesn't get WIN32 defined, only _WIN32 so we
make this adjustment to catch this. */
#define WIN32 1
#endif
#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \
!defined(__CYGWIN__) || defined(__MINGW32__)
#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))
/* The check above prevents the winsock2 inclusion if winsock.h already was
included, since they can't co-exist without problems */
#include <winsock2.h>
#endif
#else
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
libc5-based Linux systems. Only include it on system that are known to
require it! */
#if defined(_AIX) || defined(NETWARE) || defined(__NetBSD__) || defined(__minix)
#include <sys/select.h>
#endif
#ifndef _WIN32_WCE
#include <sys/socket.h>
#endif
#ifndef __WATCOMC__
#include <sys/time.h>
#endif
#include <sys/types.h>
#endif
#ifndef curl_socket_typedef
/* socket typedef */
#ifdef WIN32
typedef SOCKET curl_socket_t;
#define CURL_SOCKET_BAD INVALID_SOCKET
#else
typedef int curl_socket_t;
#define CURL_SOCKET_BAD -1
#endif
#define curl_socket_typedef
#endif /* curl_socket_typedef */
struct curl_httppost {
struct curl_httppost *next; /* next entry in the list */
char *name; /* pointer to allocated name */
@@ -184,6 +227,14 @@ typedef size_t (*curl_read_callback)(char *buffer,
size_t nitems,
void *instream);
typedef enum {
CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */
CURLSOCKTYPE_LAST /* never use */
} curlsocktype;
typedef int (*curl_sockopt_callback)(void *clientp,
curl_socket_t curlfd,
curlsocktype purpose);
#ifndef CURL_NO_OLDIES
/* not used since 7.10.8, will be removed in a future release */
@@ -436,7 +487,7 @@ typedef enum {
*/
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
defined(__POCC__) || defined(__SALFORDC__)
defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__)
/* This compiler is believed to have an ISO compatible preprocessor */
#define CURL_ISOCPP
#else
@@ -982,6 +1033,10 @@ typedef enum {
/* Pointer to command string to send if USER/PASS fails. */
CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
/* callback function for setting socket options */
CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
CINIT(SOCKOPTDATA, OBJECTPOINT, 149),
CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

View File

@@ -28,13 +28,13 @@
/* This is the version number of the libcurl package from which this header
file origins: */
#define LIBCURL_VERSION "7.15.5-CVS"
#define LIBCURL_VERSION "7.15.6-CVS"
/* The numeric version number is also available "in parts" by using these
defines: */
#define LIBCURL_VERSION_MAJOR 7
#define LIBCURL_VERSION_MINOR 15
#define LIBCURL_VERSION_PATCH 5
#define LIBCURL_VERSION_PATCH 6
/* This is the numeric version of the libcurl version number, meant for easier
parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
@@ -51,6 +51,6 @@
and it is always a greater number in a more recent release. It makes
comparisons with greater than and less than work.
*/
#define LIBCURL_VERSION_NUM 0x070f05
#define LIBCURL_VERSION_NUM 0x070f06
#endif /* __CURL_CURLVER_H */

View File

@@ -37,34 +37,6 @@
file descriptors simultaneous easily.
*/
#if defined(_WIN32) && !defined(WIN32)
/* Chris Lewis mentioned that he doesn't get WIN32 defined, only _WIN32 so we
make this adjustment to catch this. */
#define WIN32 1
#endif
#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \
!defined(__CYGWIN__) || defined(__MINGW32__)
#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))
/* The check above prevents the winsock2 inclusion if winsock.h already was
included, since they can't co-exist without problems */
#include <winsock2.h>
#endif
#else
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
libc5-based Linux systems. Only include it on system that are known to
require it! */
#if defined(_AIX) || defined(NETWARE) || defined(__NetBSD__) || defined(_MINIX)
#include <sys/select.h>
#endif
#ifndef _WIN32_WCE
#include <sys/socket.h>
#endif
#include <sys/time.h>
#include <sys/types.h>
#endif
/*
* This header file should not really need to include "curl.h" since curl.h
@@ -83,18 +55,6 @@ extern "C" {
typedef void CURLM;
#ifndef curl_socket_typedef
/* Public socket typedef */
#ifdef WIN32
typedef SOCKET curl_socket_t;
#define CURL_SOCKET_BAD INVALID_SOCKET
#else
typedef int curl_socket_t;
#define CURL_SOCKET_BAD -1
#endif
#define curl_socket_typedef
#endif /* curl_socket_typedef */
typedef enum {
CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
curl_multi_socket*() soon */

View File

@@ -93,282 +93,257 @@ $(LINK_ARG): $(__MAKEFILES__)
#
# Dependencies based on "gcc -MM .."
#
$(OBJ_DIR)\file.obj: file.c setup.h config-win32.h urldata.h cookie.h &
$(OBJ_DIR)\file.obj: file.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h progress.h sendf.h escape.h file.h &
speedcheck.h getinfo.h transfer.h url.h memory.h ..\include\curl\mprintf.h &
memdebug.h
$(OBJ_DIR)\timeval.obj: timeval.c timeval.h setup.h config-win32.h
$(OBJ_DIR)\base64.obj: base64.c setup.h config-win32.h ..\include\curl\mprintf.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
http_chunks.h hostip.h hash.h llist.h splay.h progress.h sendf.h &
escape.h file.h speedcheck.h getinfo.h transfer.h url.h memory.h &
parsedate.h ..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\timeval.obj: timeval.c timeval.h setup.h config-win32.h setup_once.h
$(OBJ_DIR)\base64.obj: base64.c setup.h config-win32.h setup_once.h &
..\include\curl\mprintf.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h base64.h memory.h ..\include\curl\curl.h &
memdebug.h
$(OBJ_DIR)\hostip.obj: hostip.c setup.h config-win32.h urldata.h cookie.h &
memdebug.h .\memory.h
$(OBJ_DIR)\hostip.obj: hostip.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h &
inet_ntop.h ..\include\curl\mprintf.h memory.h memdebug.h
$(OBJ_DIR)\progress.obj: progress.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h &
..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h http_chunks.h &
hostip.h hash.h llist.h sendf.h progress.h ..\include\curl\mprintf.h
$(OBJ_DIR)\formdata.obj: formdata.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h &
strerror.h url.h inet_ntop.h ..\include\curl\mprintf.h memory.h &
memdebug.h .\memory.h
$(OBJ_DIR)\progress.obj: progress.c setup.h config-win32.h setup_once.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
sendf.h progress.h ..\include\curl\mprintf.h
$(OBJ_DIR)\formdata.obj: formdata.c setup.h config-win32.h setup_once.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h strequal.h &
memory.h ..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\cookie.obj: cookie.c setup.h config-win32.h urldata.h cookie.h &
memory.h ..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\cookie.obj: cookie.c setup.h config-win32.h setup_once.h &
..\include\curl\mprintf.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h urldata.h cookie.h ..\include\curl\curl.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
strequal.h strtok.h sendf.h memory.h share.h strtoofft.h memdebug.h &
.\memory.h
$(OBJ_DIR)\http.obj: http.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h strequal.h strtok.h sendf.h &
memory.h memdebug.h
$(OBJ_DIR)\http.obj: http.c setup.h config-win32.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h &
base64.h strequal.h ssluse.h http_digest.h http_ntlm.h http_negotiate.h &
url.h share.h http.h memory.h select.h ..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\sendf.obj: sendf.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h &
..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h connect.h &
..\include\curl\mprintf.h memory.h strerror.h memdebug.h
$(OBJ_DIR)\ftp.obj: ftp.c setup.h config-win32.h ..\include\curl\curl.h &
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h &
progress.h base64.h strequal.h sslgen.h http_digest.h http_ntlm.h &
http_negotiate.h url.h share.h http.h memory.h select.h parsedate.h &
strtoofft.h multiif.h ..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\sendf.obj: sendf.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h &
if2ip.h progress.h transfer.h escape.h http.h ftp.h strtoofft.h &
strequal.h ssluse.h connect.h strerror.h memory.h inet_ntop.h select.h &
..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\url.obj: url.c setup.h config-win32.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
sendf.h connect.h sslgen.h ..\include\curl\mprintf.h memory.h &
strerror.h easyif.h memdebug.h .\memory.h
$(OBJ_DIR)\ftp.obj: ftp.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
sendf.h easyif.h if2ip.h progress.h transfer.h escape.h http.h ftp.h &
strtoofft.h strequal.h sslgen.h connect.h strerror.h memory.h &
inet_ntop.h select.h parsedate.h sockaddr.h multiif.h &
..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\url.obj: url.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h netrc.h base64.h ssluse.h if2ip.h &
http_chunks.h hostip.h hash.h llist.h splay.h netrc.h base64.h sslgen.h &
transfer.h sendf.h progress.h strequal.h strerror.h escape.h strtok.h &
share.h content_encoding.h http_digest.h http_negotiate.h select.h multiif.h &
ftp.h dict.h telnet.h http.h file.h ldap.h url.h connect.h inet_ntop.h &
./ca-bundle.h ..\include\curl\mprintf.h memory.h memdebug.h
$(OBJ_DIR)\dict.obj: dict.c setup.h config-win32.h urldata.h cookie.h &
share.h content_encoding.h http_digest.h http_negotiate.h select.h &
multiif.h ftp.h dict.h telnet.h tftp.h http.h file.h ldap.h url.h &
connect.h inet_ntop.h http_ntlm.h .\ca-bundle.h &
..\include\curl\mprintf.h memory.h memdebug.h .\memory.h
$(OBJ_DIR)\dict.obj: dict.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h &
strequal.h dict.h ..\include\curl\mprintf.h
$(OBJ_DIR)\if2ip.obj: if2ip.c setup.h config-win32.h
$(OBJ_DIR)\speedcheck.obj: speedcheck.c setup.h config-win32.h &
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h &
progress.h strequal.h dict.h ..\include\curl\mprintf.h memdebug.h &
.\memory.h
$(OBJ_DIR)\if2ip.obj: if2ip.c setup.h config-win32.h setup_once.h if2ip.h inet_ntop.h &
memory.h ..\include\curl\curl.h ..\include\curl\curlver.h &
..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
memdebug.h .\memory.h
$(OBJ_DIR)\speedcheck.obj: speedcheck.c setup.h config-win32.h setup_once.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h &
speedcheck.h
$(OBJ_DIR)\ldap.obj: ldap.c setup.h config-win32.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
sendf.h multiif.h speedcheck.h
$(OBJ_DIR)\ldap.obj: ldap.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\ssluse.obj: ssluse.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h escape.h transfer.h &
strequal.h strtok.h ldap.h memory.h ..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\ssluse.obj: ssluse.c setup.h config-win32.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h url.h inet_pton.h &
ssluse.h connect.h strequal.h select.h ..\include\curl\mprintf.h
$(OBJ_DIR)\version.obj: version.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h &
..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h ..\include\curl\mprintf.h
$(OBJ_DIR)\getenv.obj: getenv.c setup.h config-win32.h ..\include\curl\curl.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h url.h inet_pton.h &
ssluse.h connect.h strequal.h select.h sslgen.h &
..\include\curl\mprintf.h
$(OBJ_DIR)\version.obj: version.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h memory.h memdebug.h
$(OBJ_DIR)\escape.obj: escape.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
sslgen.h ..\include\curl\mprintf.h
$(OBJ_DIR)\getenv.obj: getenv.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h memory.h &
..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\mprintf.obj: mprintf.c setup.h config-win32.h ..\include\curl\mprintf.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h memory.h ..\include\curl\curl.h memdebug.h
$(OBJ_DIR)\telnet.obj: telnet.c setup.h config-win32.h urldata.h cookie.h &
..\include\curl\multi.h ..\include\curl\curl.h memory.h memdebug.h &
.\memory.h
$(OBJ_DIR)\escape.obj: escape.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h memory.h urldata.h &
cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h &
splay.h easyif.h ..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\mprintf.obj: mprintf.c setup.h config-win32.h setup_once.h &
..\include\curl\mprintf.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h memory.h ..\include\curl\curl.h memdebug.h &
.\memory.h
$(OBJ_DIR)\telnet.obj: telnet.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h telnet.h &
..\include\curl\mprintf.h arpa_telnet.h memory.h select.h memdebug.h
$(OBJ_DIR)\netrc.obj: netrc.c setup.h config-win32.h ..\include\curl\curl.h &
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h &
telnet.h connect.h ..\include\curl\mprintf.h arpa_telnet.h memory.h &
select.h memdebug.h .\memory.h
$(OBJ_DIR)\netrc.obj: netrc.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h netrc.h strequal.h &
strtok.h memory.h ..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\getinfo.obj: getinfo.c setup.h config-win32.h ..\include\curl\curl.h &
strtok.h memory.h ..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\getinfo.obj: getinfo.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h &
getinfo.h memory.h ssluse.h memdebug.h
$(OBJ_DIR)\transfer.obj: transfer.c setup.h config-win32.h strtoofft.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
getinfo.h memory.h sslgen.h memdebug.h .\memory.h
$(OBJ_DIR)\transfer.obj: transfer.c setup.h config-win32.h setup_once.h strtoofft.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h strequal.h urldata.h &
cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h &
netrc.h content_encoding.h transfer.h sendf.h speedcheck.h progress.h &
http.h url.h getinfo.h ssluse.h http_digest.h http_ntlm.h &
http_negotiate.h share.h memory.h select.h ..\include\curl\mprintf.h &
memdebug.h
$(OBJ_DIR)\strequal.obj: strequal.c setup.h config-win32.h strequal.h &
splay.h netrc.h content_encoding.h transfer.h sendf.h speedcheck.h &
progress.h http.h url.h getinfo.h sslgen.h http_digest.h http_ntlm.h &
http_negotiate.h share.h memory.h select.h multiif.h easyif.h &
..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\strequal.obj: strequal.c setup.h config-win32.h setup_once.h strequal.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h
$(OBJ_DIR)\easy.obj: easy.c setup.h config-win32.h strequal.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
$(OBJ_DIR)\easy.obj: easy.c setup.h config-win32.h setup_once.h strequal.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h &
transfer.h ssluse.h url.h getinfo.h share.h memory.h progress.h &
easyif.h ..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\security.obj: security.c setup.h config-win32.h
$(OBJ_DIR)\krb4.obj: krb4.c setup.h config-win32.h
$(OBJ_DIR)\memdebug.obj: memdebug.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h &
..\include\curl\curl.h ..\include\curl\mprintf.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h memory.h memdebug.h
$(OBJ_DIR)\http_chunks.obj: http_chunks.c setup.h config-win32.h urldata.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
transfer.h sslgen.h url.h getinfo.h share.h strdup.h memory.h &
progress.h easyif.h sendf.h ..\include\curl\mprintf.h memdebug.h &
.\memory.h
$(OBJ_DIR)\security.obj: security.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\krb4.obj: krb4.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\memdebug.obj: memdebug.c setup.h config-win32.h setup_once.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h &
..\include\curl\mprintf.h urldata.h cookie.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h splay.h memory.h memdebug.h &
.\memory.h
$(OBJ_DIR)\http_chunks.obj: http_chunks.c setup.h config-win32.h setup_once.h urldata.h &
cookie.h ..\include\curl\curl.h ..\include\curl\curlver.h &
..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h &
content_encoding.h http.h memory.h ..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\strtok.obj: strtok.c setup.h config-win32.h strtok.h
$(OBJ_DIR)\connect.obj: connect.c setup.h config-win32.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
sendf.h content_encoding.h http.h memory.h ..\include\curl\mprintf.h &
memdebug.h .\memory.h
$(OBJ_DIR)\strtok.obj: strtok.c setup.h config-win32.h setup_once.h strtok.h
$(OBJ_DIR)\connect.obj: connect.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h if2ip.h strerror.h connect.h &
memory.h select.h memdebug.h
$(OBJ_DIR)\llist.obj: llist.c setup.h config-win32.h llist.h memory.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h if2ip.h &
strerror.h connect.h memory.h select.h url.h multiif.h sockaddr.h &
inet_ntop.h memdebug.h .\memory.h
$(OBJ_DIR)\llist.obj: llist.c setup.h config-win32.h setup_once.h llist.h memory.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h memdebug.h
$(OBJ_DIR)\hash.obj: hash.c setup.h config-win32.h hash.h llist.h memory.h &
..\include\curl\multi.h ..\include\curl\curl.h memdebug.h .\memory.h
$(OBJ_DIR)\hash.obj: hash.c setup.h config-win32.h setup_once.h hash.h llist.h memory.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h memdebug.h
$(OBJ_DIR)\multi.obj: multi.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\multi.h ..\include\curl\curl.h memdebug.h .\memory.h
$(OBJ_DIR)\multi.obj: multi.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
transfer.h url.h connect.h progress.h memory.h easyif.h multiif.h &
memdebug.h
$(OBJ_DIR)\content_encoding.obj: content_encoding.c setup.h config-win32.h urldata.h &
sendf.h memdebug.h .\memory.h
$(OBJ_DIR)\content_encoding.obj: content_encoding.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\share.obj: share.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
share.h memory.h memdebug.h .\memory.h
$(OBJ_DIR)\http_digest.obj: http_digest.c setup.h config-win32.h setup_once.h urldata.h &
cookie.h ..\include\curl\curl.h ..\include\curl\curlver.h &
..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h &
content_encoding.h memory.h memdebug.h
$(OBJ_DIR)\share.obj: share.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h &
..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h share.h memory.h memdebug.h
$(OBJ_DIR)\http_digest.obj: http_digest.c setup.h config-win32.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h strequal.h base64.h md5.h &
http_digest.h strtok.h url.h memory.h ..\include\curl\mprintf.h memdebug.h
$(OBJ_DIR)\md5.obj: md5.c setup.h config-win32.h md5.h
$(OBJ_DIR)\http_negotiate.obj: http_negotiate.c setup.h config-win32.h
$(OBJ_DIR)\http_ntlm.obj: http_ntlm.c setup.h config-win32.h
$(OBJ_DIR)\inet_pton.obj: inet_pton.c setup.h config-win32.h inet_pton.h
$(OBJ_DIR)\strtoofft.obj: strtoofft.c setup.h config-win32.h strtoofft.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
sendf.h strequal.h base64.h md5.h http_digest.h strtok.h url.h memory.h &
..\include\curl\mprintf.h memdebug.h .\memory.h
$(OBJ_DIR)\md5.obj: md5.c setup.h config-win32.h setup_once.h md5.h
$(OBJ_DIR)\http_negotiate.obj: http_negotiate.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\http_ntlm.obj: http_ntlm.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\inet_pton.obj: inet_pton.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\strtoofft.obj: strtoofft.c setup.h config-win32.h setup_once.h strtoofft.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h
$(OBJ_DIR)\strerror.obj: strerror.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
$(OBJ_DIR)\strerror.obj: strerror.c setup.h config-win32.h setup_once.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h strerror.h urldata.h &
cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h &
..\include\curl\mprintf.h
$(OBJ_DIR)\hostares.obj: hostares.c setup.h config-win32.h urldata.h cookie.h &
splay.h ..\include\curl\mprintf.h
$(OBJ_DIR)\hostares.obj: hostares.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h &
..\include\curl\mprintf.h memory.h memdebug.h
$(OBJ_DIR)\hostasyn.obj: hostasyn.c setup.h config-win32.h urldata.h cookie.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h &
strerror.h url.h connect.h ..\include\curl\mprintf.h memory.h &
memdebug.h .\memory.h
$(OBJ_DIR)\hostasyn.obj: hostasyn.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h &
..\include\curl\mprintf.h memory.h memdebug.h
$(OBJ_DIR)\hostip4.obj: hostip4.c setup.h config-win32.h urldata.h cookie.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h &
strerror.h url.h ..\include\curl\mprintf.h memory.h memdebug.h &
.\memory.h
$(OBJ_DIR)\hostip4.obj: hostip4.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h &
..\include\curl\mprintf.h memory.h memdebug.h
$(OBJ_DIR)\hostip6.obj: hostip6.c setup.h config-win32.h urldata.h cookie.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h &
strerror.h url.h inet_pton.h ..\include\curl\mprintf.h memory.h &
memdebug.h .\memory.h
$(OBJ_DIR)\hostip6.obj: hostip6.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h &
..\include\curl\mprintf.h memory.h memdebug.h
$(OBJ_DIR)\hostsyn.obj: hostsyn.c setup.h config-win32.h urldata.h cookie.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h &
strerror.h url.h inet_pton.h connect.h ..\include\curl\mprintf.h &
memory.h memdebug.h .\memory.h
$(OBJ_DIR)\hostsyn.obj: hostsyn.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h &
..\include\curl\mprintf.h memory.h memdebug.h
$(OBJ_DIR)\hostthre.obj: hostthre.c setup.h config-win32.h urldata.h cookie.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h &
strerror.h url.h ..\include\curl\mprintf.h memory.h memdebug.h &
.\memory.h
$(OBJ_DIR)\hostthre.obj: hostthre.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h &
..\include\curl\mprintf.h inet_ntop.h memory.h memdebug.h
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h config-win32.h ..\include\curl\mprintf.h &
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h &
strerror.h url.h multiif.h ..\include\curl\mprintf.h inet_ntop.h &
memory.h memdebug.h .\memory.h
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\parsedate.obj: parsedate.c setup.h config-win32.h setup_once.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h inet_ntop.h
$(OBJ_DIR)\parsedate.obj: parsedate.c setup.h config-win32.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h
$(OBJ_DIR)\select.obj: select.c setup.h config-win32.h select.h
$(OBJ_DIR)\gtls.obj: gtls.c setup.h config-win32.h
$(OBJ_DIR)\sslgen.obj: sslgen.c setup.h config-win32.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sslgen.h &
ssluse.h gtls.h sendf.h strequal.h url.h memory.h memdebug.h
$(OBJ_DIR)\tftp.obj: tftp.c setup.h config-win32.h urldata.h cookie.h &
$(OBJ_DIR)\select.obj: select.c setup.h config-win32.h setup_once.h ..\include\curl\curl.h &
..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h &
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h &
connect.h select.h
$(OBJ_DIR)\gtls.obj: gtls.c setup.h config-win32.h setup_once.h
$(OBJ_DIR)\sslgen.obj: sslgen.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h formdata.h http_chunks.h hostip.h hash.h llist.h &
transfer.h sendf.h tftp.h progress.h ..\include\curl\mprintf.h memory.h &
select.h memdebug.h
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h splay.h sslgen.h ssluse.h gtls.h &
sendf.h strequal.h url.h memory.h memdebug.h .\memory.h
$(OBJ_DIR)\tftp.obj: tftp.c setup.h config-win32.h setup_once.h urldata.h cookie.h &
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h &
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h tftp.h &
progress.h connect.h strerror.h sockaddr.h ..\include\curl\mprintf.h &
memory.h select.h memdebug.h .\memory.h
$(OBJ_DIR)\splay.obj: splay.c splay.h
$(OBJ_DIR)\strdup.obj: strdup.c setup.h config-win32.h setup_once.h strdup.h

View File

@@ -30,7 +30,7 @@ DOCS = README.encoding README.memoryleak README.ares README.curlx \
EXTRA_DIST = Makefile.b32 Makefile.m32 Makefile.vc6 Makefile.riscos \
$(DSP) curllib.dsw config-win32.h config-win32ce.h config-riscos.h \
config-mac.h config.h.in ca-bundle.crt makefile.dj config.dj \
config-mac.h config.h.in ca-bundle.crt makefile.dj config.dos \
libcurl.framework.make libcurl.plist libcurl.rc config-amigaos.h \
amigaos.c amigaos.h makefile.amiga Makefile.netware nwlib.c \
libcurl.imp msvcproj.head msvcproj.foot config-win32ce.h \
@@ -43,7 +43,10 @@ lib_LTLIBRARIES = libcurl.la
# we use srcdir/include for the static global include files
# we use builddir/lib for the generated lib/config.h file to get found
# we use srcdir/lib for the lib-private header files
INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/lib -I$(top_srcdir)/lib
INCLUDES = -I$(top_srcdir)/include \
-I$(top_builddir)/lib \
-I$(top_srcdir)/lib
VERSION=-version-info 3:0:0

View File

@@ -3,7 +3,7 @@
## Makefile for building libcurl.nlm (NetWare version - gnu make)
## Use: make -f Makefile.netware
##
## Comments to: Guenter Knauf <eflash@gmx.net>
## Comments to: Guenter Knauf http://www.gknw.de/phpbb
#
#################################################################
@@ -19,7 +19,7 @@ endif
# Edit the path below to point to the base of your OpenSSL package.
ifndef OPENSSL_PATH
OPENSSL_PATH = ../../openssl-0.9.8a
OPENSSL_PATH = ../../openssl-0.9.8b
endif
ifndef INSTDIR
@@ -68,7 +68,7 @@ CP = cp -afv
# RM = rm -f
# if you want to mark the target as MTSAFE you will need a tool for
# generating the xdc data for the linker; here's a minimal tool:
# http://www.gknw.com/development/prgtools/mkxdc.zip
# http://www.gknw.net/development/prgtools/mkxdc.zip
MPKXDC = mkxdc
# Global flags for all compilers
@@ -414,6 +414,31 @@ ca-bundle.h: Makefile.netware
url.c: ca-bundle.h
info: $(OBJDIR)/version.inc
@echo Configured to build $(TARGET) with these options:
@echo curl version: $(LIBCURL_VERSION_STR)
@echo compiler/linker: $(CC) / $(LD)
ifdef WITH_SSL
@echo SSL support: enabled (OpenSSL)
else
@echo SSL support: no
endif
ifdef WITH_ZLIB
@echo zlib support: enabled
else
@echo zlib support: no
endif
ifdef WITH_ARES
@echo c-ares support: enabled
else
@echo c-ares support: no
endif
ifdef ENABLE_IPV6
@echo ipv6 support: enabled
else
@echo ipv6 support: no
endif
$(LIBCARES):
$(MAKE) -C ../ares -f Makefile.netware lib

View File

@@ -1,22 +1,24 @@
#ifndef _CURL_CONFIG_DJGPP_H
#define _CURL_CONFIG_DJGPP_H
#ifndef _CURL_CONFIG_DOS_H
#define _CURL_CONFIG_DOS_H
/* lib/config.dj - Hand crafted config file for DJGPP.
/* lib/config.dos - Hand crafted config file for MSDOS.
*
* $Id$
*/
#define OS "MSDOS/djgpp"
#define PACKAGE "curl"
#define CURL_CA_BUNDLE "/dev/env/CURL_CA_BUNDLE"
#if (DJGPP_MINOR >= 4)
/* #define HAVE_DLOPEN 1 maybe not (DXE3) */
#if defined(DJGPP)
#define OS "MSDOS/djgpp"
#elif defined(__HIGHC__)
#define OS "MSDOS/HighC"
#elif defined(__WATCOMC__)
#define OS "MSDOS/Watcom"
#else
#define OS "MSDOS/?"
#endif
#define PACKAGE "curl"
#define HAVE_ASSERT_T 1
#define HAVE_ARPA_INET_H 1
#define HAVE_BASENAME 1
#define HAVE_CLOSESOCKET 1
#define HAVE_FCNTL_H 1
#define HAVE_FIONBIO 1
@@ -47,11 +49,8 @@
#define HAVE_SETLOCALE 1
#define HAVE_SETVBUF 1
#define HAVE_SIGNAL 1
#define HAVE_SIGACTION 1
#define HAVE_SIGSETJMP 1
#define HAVE_SOCKET 1
#define HAVE_SPNEGO 1
#define HAVE_STRCASECMP 1
#define HAVE_STRDUP 1
#define HAVE_STRFTIME 1
#define HAVE_STRICMP 1
@@ -69,10 +68,6 @@
#define NEED_MALLOC_H 1
#if (DJGPP_MINOR >= 4)
#define HAVE_STRLCAT 1
#endif
#define RETSIGTYPE void
#define SIZEOF_LONG_DOUBLE 16
#define SIZEOF_CURL_OFF_T 4 /* no huge file support */
@@ -105,19 +100,44 @@
/* to disable LDAP */
#define CURL_DISABLE_LDAP 1
/* Because djgpp <= 2.03 doesn't have snprintf() etc.
*/
#if (DJGPP_MINOR < 4)
#define _MPRINTF_REPLACE
#endif
#define in_addr_t u_long
#define socklen_t int
#if __GNUC__ < 4 /* gcc 4.x built-in ? */
#if defined(__HIGHC__) || \
(defined(__GNUC__) && __GNUC__ < 4) /* gcc 4.x built-in ? */
#define ssize_t int
#endif
/* Target HAVE_x section
*/
#if defined(DJGPP)
#define CURL_CA_BUNDLE "/dev/env/CURL_CA_BUNDLE"
#define HAVE_BASENAME 1
#define HAVE_STRCASECMP 1
#define HAVE_SIGACTION 1
#define HAVE_SIGSETJMP 1
#define HAVE_SYS_TIME_H 1
#if (DJGPP_MINOR >= 4)
#define HAVE_STRLCAT 1
#endif
/* Because djgpp <= 2.03 doesn't have snprintf() etc. */
#if (DJGPP_MINOR < 4)
#define _MPRINTF_REPLACE
#endif
#else
#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")
#endif
#if defined(__WATCOMC__)
#define HAVE_STRCASECMP 1
#endif
#if defined(__HIGHC__)
#define HAVE_SYS_TIME_H 1
#endif
#include <stdlib.h>
#include <string.h>
#include <tcp.h> /* Watt-32 API */
@@ -125,5 +145,5 @@
#undef word
#undef byte
#endif /* _CURL_CONFIG_DJGPP_H */
#endif /* _CURL_CONFIG_DOS_H */

View File

@@ -25,7 +25,9 @@
#ifndef WIN32
/* headers for non-win32 */
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
@@ -702,6 +704,17 @@ singleipconnect(struct connectdata *conn,
nosigpipe(conn, sockfd);
if(data->set.fsockopt) {
/* activate callback for setting socket options */
error = data->set.fsockopt(data->set.sockopt_client,
sockfd,
CURLSOCKTYPE_IPCXN);
if (error) {
sclose(sockfd); /* close the socket and bail out */
return CURL_SOCKET_BAD;
}
}
/* possibly bind the local end to an IP, interface or port */
res = bindlocal(conn, sockfd);
if(res) {

View File

@@ -62,9 +62,9 @@ enum zlibState {
};
static CURLcode
process_zlib_error(struct SessionHandle *data,
z_stream *z)
process_zlib_error(struct connectdata *conn, z_stream *z)
{
struct SessionHandle *data = conn->data;
if (z->msg)
failf (data, "Error while processing content unencoding: %s",
z->msg);
@@ -84,7 +84,7 @@ exit_zlib(z_stream *z, bool *zlib_init, CURLcode result)
}
static CURLcode
inflate_stream(struct SessionHandle *data,
inflate_stream(struct connectdata *conn,
struct Curl_transfer_keeper *k)
{
int allow_restart = 1;
@@ -113,7 +113,7 @@ inflate_stream(struct SessionHandle *data,
if (status == Z_OK || status == Z_STREAM_END) {
allow_restart = 0;
if(DSIZ - z->avail_out) {
result = Curl_client_write(data, CLIENTWRITE_BODY, decomp,
result = Curl_client_write(conn, CLIENTWRITE_BODY, decomp,
DSIZ - z->avail_out);
/* if !CURLE_OK, clean up, return */
if (result) {
@@ -128,7 +128,7 @@ inflate_stream(struct SessionHandle *data,
if (inflateEnd(z) == Z_OK)
return exit_zlib(z, &k->zlib_init, result);
else
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
}
/* Done with these bytes, exit */
@@ -143,7 +143,7 @@ inflate_stream(struct SessionHandle *data,
inflateReset(z);
if (inflateInit2(z, -MAX_WBITS) != Z_OK) {
return process_zlib_error(data, z);
return process_zlib_error(conn, z);
}
z->next_in = orig_in;
z->avail_in = nread;
@@ -152,14 +152,14 @@ inflate_stream(struct SessionHandle *data,
}
else { /* Error; exit loop, handle below */
free(decomp);
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
}
}
/* Will never get here */
}
CURLcode
Curl_unencode_deflate_write(struct SessionHandle *data,
Curl_unencode_deflate_write(struct connectdata *conn,
struct Curl_transfer_keeper *k,
ssize_t nread)
{
@@ -173,7 +173,7 @@ Curl_unencode_deflate_write(struct SessionHandle *data,
z->next_in = NULL;
z->avail_in = 0;
if (inflateInit(z) != Z_OK)
return process_zlib_error(data, z);
return process_zlib_error(conn, z);
k->zlib_init = ZLIB_INIT;
}
@@ -182,7 +182,7 @@ Curl_unencode_deflate_write(struct SessionHandle *data,
z->avail_in = (uInt)nread;
/* Now uncompress the data */
return inflate_stream(data, k);
return inflate_stream(conn, k);
}
#ifdef OLD_ZLIB_SUPPORT
@@ -272,7 +272,7 @@ static enum {
#endif
CURLcode
Curl_unencode_gzip_write(struct SessionHandle *data,
Curl_unencode_gzip_write(struct connectdata *conn,
struct Curl_transfer_keeper *k,
ssize_t nread)
{
@@ -289,14 +289,14 @@ Curl_unencode_gzip_write(struct SessionHandle *data,
if (strcmp(zlibVersion(), "1.2.0.4") >= 0) {
/* zlib ver. >= 1.2.0.4 supports transparent gzip decompressing */
if (inflateInit2(z, MAX_WBITS+32) != Z_OK) {
return process_zlib_error(data, z);
return process_zlib_error(conn, z);
}
k->zlib_init = ZLIB_INIT_GZIP; /* Transparent gzip decompress state */
} else {
/* we must parse the gzip header ourselves */
if (inflateInit2(z, -MAX_WBITS) != Z_OK) {
return process_zlib_error(data, z);
return process_zlib_error(conn, z);
}
k->zlib_init = ZLIB_INIT; /* Initial call state */
}
@@ -307,7 +307,7 @@ Curl_unencode_gzip_write(struct SessionHandle *data,
z->next_in = (Bytef *)k->str;
z->avail_in = (uInt)nread;
/* Now uncompress the data */
return inflate_stream(data, k);
return inflate_stream(conn, k);
}
#ifndef OLD_ZLIB_SUPPORT
@@ -360,7 +360,7 @@ Curl_unencode_gzip_write(struct SessionHandle *data,
case GZIP_BAD:
default:
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
}
}
@@ -398,7 +398,7 @@ Curl_unencode_gzip_write(struct SessionHandle *data,
case GZIP_BAD:
default:
free(z->next_in);
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
}
}
@@ -418,7 +418,7 @@ Curl_unencode_gzip_write(struct SessionHandle *data,
}
/* We've parsed the header, now uncompress the data */
return inflate_stream(data, k);
return inflate_stream(conn, k);
#endif
}
#endif /* HAVE_LIBZ */

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2004, 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
* you should have received as part of this distribution. The terms
@@ -31,11 +31,11 @@
#define ALL_CONTENT_ENCODINGS "identity"
#endif
CURLcode Curl_unencode_deflate_write(struct SessionHandle *data,
CURLcode Curl_unencode_deflate_write(struct connectdata *conn,
struct Curl_transfer_keeper *k,
ssize_t nread);
CURLcode
Curl_unencode_gzip_write(struct SessionHandle *data,
Curl_unencode_gzip_write(struct connectdata *conn,
struct Curl_transfer_keeper *k,
ssize_t nread);

View File

@@ -24,11 +24,13 @@
***************************************************************************/
#include <stdio.h>
#ifdef WIN32
#if defined(WIN32)
#include <time.h>
#else
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#endif
#include <curl/curl.h>

View File

@@ -38,7 +38,7 @@
#include <sys/stat.h>
#endif
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#include <time.h>
#include <io.h>
#else
@@ -46,7 +46,9 @@
#include <sys/socket.h>
#endif
#include <netinet/in.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -104,7 +106,7 @@ static char *unescape_word(struct SessionHandle *data, char *inp)
/* According to RFC2229 section 2.2, these letters need to be escaped with
\[letter] */
for(ptr = newp;
(byte = (unsigned char)*ptr);
(byte = (unsigned char)*ptr) != 0;
ptr++) {
if ((byte <= 32) || (byte == 127) ||
(byte == '\'') || (byte == '\"') || (byte == '\\')) {

View File

@@ -40,7 +40,7 @@
#include "strequal.h"
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#include <time.h>
#include <io.h>
#else
@@ -48,7 +48,9 @@
#include <sys/socket.h>
#endif
#include <netinet/in.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

View File

@@ -37,7 +37,7 @@
#include <sys/stat.h>
#endif
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#include <time.h>
#include <io.h>
#include <fcntl.h>
@@ -48,7 +48,9 @@
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -311,11 +313,11 @@ CURLcode Curl_file(struct connectdata *conn, bool *done)
CURLcode result;
snprintf(buf, sizeof(data->state.buffer),
"Content-Length: %" FORMAT_OFF_T "\r\n", expected_size);
result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0);
result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
if(result)
return result;
result = Curl_client_write(data, CLIENTWRITE_BOTH,
result = Curl_client_write(conn, CLIENTWRITE_BOTH,
(char *)"Accept-ranges: bytes\r\n", 0);
if(result)
return result;
@@ -339,7 +341,7 @@ CURLcode Curl_file(struct connectdata *conn, bool *done)
tm->tm_hour,
tm->tm_min,
tm->tm_sec);
result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0);
result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
}
return result;
}
@@ -377,7 +379,7 @@ CURLcode Curl_file(struct connectdata *conn, bool *done)
bytecount += nread;
res = Curl_client_write(data, CLIENTWRITE_BODY, buf, nread);
res = Curl_client_write(conn, CLIENTWRITE_BODY, buf, nread);
if(res)
return res;

View File

@@ -528,8 +528,8 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
if (current_form->value) {
if (current_form->flags & HTTPPOST_FILENAME) {
if (filename) {
if (!(current_form = AddFormInfo(strdup(filename),
NULL, current_form)))
if ((current_form = AddFormInfo(strdup(filename),
NULL, current_form)) == NULL)
return_value = CURL_FORMADD_MEMORY;
}
else
@@ -562,8 +562,8 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
if (current_form->value) {
if (current_form->flags & HTTPPOST_BUFFER) {
if (filename) {
if (!(current_form = AddFormInfo(strdup(filename),
NULL, current_form)))
if ((current_form = AddFormInfo(strdup(filename),
NULL, current_form)) == NULL)
return_value = CURL_FORMADD_MEMORY;
}
else
@@ -614,9 +614,9 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
if (current_form->contenttype) {
if (current_form->flags & HTTPPOST_FILENAME) {
if (contenttype) {
if (!(current_form = AddFormInfo(NULL,
strdup(contenttype),
current_form)))
if ((current_form = AddFormInfo(NULL,
strdup(contenttype),
current_form)) == NULL)
return_value = CURL_FORMADD_MEMORY;
}
else
@@ -884,7 +884,7 @@ void Curl_formclean(struct FormData *form)
free(form->line); /* free the line */
free(form); /* free the struct */
} while((form=next)); /* continue */
} while ((form = next) != NULL); /* continue */
}
/*
@@ -961,7 +961,7 @@ void curl_formfree(struct curl_httppost *form)
free(form->showfilename); /* free the faked file name */
free(form); /* free the struct */
} while((form=next)); /* continue */
} while ((form = next) != NULL); /* continue */
}
#ifndef HAVE_BASENAME
@@ -1231,7 +1231,7 @@ CURLcode Curl_getFormData(struct FormData **finalform,
*/
size_t nread;
char buffer[512];
while((nread = fread(buffer, 1, sizeof(buffer), fileread))) {
while ((nread = fread(buffer, 1, sizeof(buffer), fileread)) != 0) {
result = AddFormData(&form, FORM_DATA, buffer, nread, &size);
if (result)
break;
@@ -1268,7 +1268,7 @@ CURLcode Curl_getFormData(struct FormData **finalform,
if (result)
break;
}
} while((file = file->more)); /* for each specified file for this field */
} while ((file = file->more) != NULL); /* for each specified file for this field */
if (result) {
Curl_formclean(firstform);
free(boundary);
@@ -1286,7 +1286,7 @@ CURLcode Curl_getFormData(struct FormData **finalform,
break;
}
} while((post=post->next)); /* for each field */
} while ((post = post->next) != NULL); /* for each field */
if (result) {
Curl_formclean(firstform);
free(boundary);

138
lib/ftp.c
View File

@@ -34,7 +34,7 @@
#include <unistd.h>
#endif
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#else /* probably some kind of unix */
#ifdef HAVE_SYS_SOCKET_H
@@ -132,10 +132,16 @@ static CURLcode ftp_state_post_rest(struct connectdata *conn);
static CURLcode ftp_state_post_cwd(struct connectdata *conn);
static CURLcode ftp_state_quote(struct connectdata *conn,
bool init, ftpstate instate);
static CURLcode ftp_nb_type(struct connectdata *conn,
bool ascii, ftpstate state);
static int ftp_need_type(struct connectdata *conn,
bool ascii);
/* easy-to-use macro: */
#define FTPSENDF(x,y,z) if((result = Curl_ftpsendf(x,y,z))) return result
#define NBFTPSENDF(x,y,z) if((result = Curl_nbftpsendf(x,y,z))) return result
#define FTPSENDF(x,y,z) if ((result = Curl_ftpsendf(x,y,z)) != CURLE_OK) \
return result
#define NBFTPSENDF(x,y,z) if ((result = Curl_nbftpsendf(x,y,z)) != CURLE_OK) \
return result
static void freedirs(struct FTP *ftp)
{
@@ -211,8 +217,12 @@ static CURLcode AllowServerConnect(struct connectdata *conn)
/* we have received data here */
{
curl_socket_t s = CURL_SOCKET_BAD;
socklen_t size = (socklen_t) sizeof(struct sockaddr_in);
#ifdef ENABLE_IPV6
struct Curl_sockaddr_storage add;
#else
struct sockaddr_in add;
#endif
socklen_t size = (socklen_t) sizeof(add);
if(0 == getsockname(sock, (struct sockaddr *) &add, &size))
s=accept(sock, (struct sockaddr *) &add, &size);
@@ -339,7 +349,7 @@ static CURLcode ftp_readresp(curl_socket_t sockfd,
* for "headers". The response lines can be seen as a kind of
* headers.
*/
result = Curl_client_write(data, CLIENTWRITE_HEADER,
result = Curl_client_write(conn, CLIENTWRITE_HEADER,
ftp->linestart_resp, perline);
if(result)
return result;
@@ -570,7 +580,7 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
* for "headers". The response lines can be seen as a kind of
* headers.
*/
result = Curl_client_write(data, CLIENTWRITE_HEADER,
result = Curl_client_write(conn, CLIENTWRITE_HEADER,
line_start, perline);
if(result)
return result;
@@ -1206,11 +1216,12 @@ static CURLcode ftp_state_post_rest(struct connectdata *conn)
struct SessionHandle *data = conn->data;
if(ftp->no_transfer || conn->bits.no_body) {
/* then we're done with a "head"-like request, goto STOP */
state(conn, FTP_STOP);
/* doesn't transfer any data */
ftp->no_transfer = TRUE;
/* still possibly do PRE QUOTE jobs */
state(conn, FTP_RETR_PREQUOTE);
result = ftp_state_quote(conn, TRUE, FTP_RETR_PREQUOTE);
}
else if(data->set.ftp_use_port) {
/* We have chosen to use the PORT (or similar) command */
@@ -1312,7 +1323,8 @@ static CURLcode ftp_state_post_mdtm(struct connectdata *conn)
/* If we have selected NOBODY and HEADER, it means that we only want file
information. Which in FTP can't be much more than the file size and
date. */
if(conn->bits.no_body && data->set.include_header && ftp->file) {
if(conn->bits.no_body && data->set.include_header && ftp->file &&
ftp_need_type(conn, data->set.prefer_ascii)) {
/* The SIZE command is _not_ RFC 959 specified, and therefor many servers
may not support it! It is however the only way we have to get a file's
size! */
@@ -1321,11 +1333,9 @@ static CURLcode ftp_state_post_mdtm(struct connectdata *conn)
/* Some servers return different sizes for different modes, and thus we
must set the proper type before we check the size */
NBFTPSENDF(conn, "TYPE %c",
data->set.ftp_ascii?'A':'I');
state(conn, FTP_TYPE);
/* keep track of our current transfer type */
data->ftp_in_ascii_mode = data->set.ftp_ascii;
result = ftp_nb_type(conn, data->set.prefer_ascii, FTP_TYPE);
if (result)
return result;
}
else
result = ftp_state_post_type(conn);
@@ -1497,8 +1507,12 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
result = ftp_state_cwd(conn);
break;
case FTP_RETR_PREQUOTE:
NBFTPSENDF(conn, "SIZE %s", ftp->file);
state(conn, FTP_RETR_SIZE);
if (ftp->no_transfer)
state(conn, FTP_STOP);
else {
NBFTPSENDF(conn, "SIZE %s", ftp->file);
state(conn, FTP_RETR_SIZE);
}
break;
case FTP_STOR_PREQUOTE:
result = ftp_state_ul_setup(conn, FALSE);
@@ -1823,7 +1837,7 @@ static CURLcode ftp_state_mdtm_resp(struct connectdata *conn,
tm->tm_hour,
tm->tm_min,
tm->tm_sec);
result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0);
result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
if(result)
return result;
} /* end of a ridiculous amount of conditionals */
@@ -1998,7 +2012,7 @@ static CURLcode ftp_state_size_resp(struct connectdata *conn,
if(-1 != filesize) {
snprintf(buf, sizeof(data->state.buffer),
"Content-Length: %" FORMAT_OFF_T "\r\n", filesize);
result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0);
result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
if(result)
return result;
}
@@ -2025,7 +2039,7 @@ static CURLcode ftp_state_rest_resp(struct connectdata *conn,
case FTP_REST:
default:
if (ftpcode == 350) {
result = Curl_client_write(conn->data, CLIENTWRITE_BOTH,
result = Curl_client_write(conn, CLIENTWRITE_BOTH,
(char *)"Accept-ranges: bytes\r\n", 0);
if(result)
return result;
@@ -2136,7 +2150,7 @@ static CURLcode ftp_state_get_resp(struct connectdata *conn,
*/
if((instate != FTP_LIST) &&
!data->set.ftp_ascii &&
!data->set.prefer_ascii &&
(ftp->downloadsize < 1)) {
/*
* It seems directory listings either don't show the size or very
@@ -3090,7 +3104,7 @@ static CURLcode ftp_transfertype(struct connectdata *conn,
ssize_t nread;
CURLcode result;
FTPSENDF(conn, "TYPE %s", ascii?"A":"I");
FTPSENDF(conn, "TYPE %c", ascii?'A':'I');
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
if(result)
@@ -3102,11 +3116,52 @@ static CURLcode ftp_transfertype(struct connectdata *conn,
return ascii? CURLE_FTP_COULDNT_SET_ASCII:CURLE_FTP_COULDNT_SET_BINARY;
}
/* keep track of our current transfer type */
data->ftp_in_ascii_mode = ascii;
conn->proto.ftp->transfertype = ascii?'A':'I';
return CURLE_OK;
}
/***********************************************************************
*
* ftp_need_type()
*
* Returns TRUE if we in the current situation should send TYPE
*/
static int ftp_need_type(struct connectdata *conn,
bool ascii_wanted)
{
return conn->proto.ftp->transfertype != (ascii_wanted?'A':'I');
}
/***********************************************************************
*
* ftp_nb_type()
*
* Set TYPE. We only deal with ASCII or BINARY so this function
* sets one of them.
* If the transfer type is not sent, simulate on OK response in newstate
*/
static CURLcode ftp_nb_type(struct connectdata *conn,
bool ascii, ftpstate newstate)
{
struct FTP *ftp = conn->proto.ftp;
CURLcode result;
int want = ascii?'A':'I';
if (ftp->transfertype == want) {
state(conn, newstate);
return ftp_state_type_resp(conn, 200, newstate);
}
NBFTPSENDF(conn, "TYPE %c", want);
state(conn, newstate);
/* keep track of our current transfer type */
ftp->transfertype = want;
return CURLE_OK;
}
/***************************************************************************
*
* ftp_pasv_verbose()
@@ -3202,10 +3257,10 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
/* a transfer is about to take place */
if(data->set.upload) {
NBFTPSENDF(conn, "TYPE %c", data->set.ftp_ascii?'A':'I');
state(conn, FTP_STOR_TYPE);
/* keep track of our current transfer type */
data->ftp_in_ascii_mode = data->set.ftp_ascii;
result = ftp_nb_type(conn, data->set.prefer_ascii,
FTP_STOR_TYPE);
if (result)
return result;
}
else {
/* download */
@@ -3218,16 +3273,14 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
/* The specified path ends with a slash, and therefore we think this
is a directory that is requested, use LIST. But before that we
need to set ASCII transfer mode. */
NBFTPSENDF(conn, "TYPE A", NULL);
state(conn, FTP_LIST_TYPE);
/* keep track of our current transfer type */
data->ftp_in_ascii_mode = 1;
result = ftp_nb_type(conn, 1, FTP_LIST_TYPE);
if (result)
return result;
}
else {
NBFTPSENDF(conn, "TYPE %c", data->set.ftp_ascii?'A':'I');
state(conn, FTP_RETR_TYPE);
/* keep track of our current transfer type */
data->ftp_in_ascii_mode = data->set.ftp_ascii;
result = ftp_nb_type(conn, data->set.prefer_ascii, FTP_RETR_TYPE);
if (result)
return result;
}
}
result = ftp_easy_statemach(conn);
@@ -3616,11 +3669,11 @@ static CURLcode ftp_3rdparty_pretransfer(struct connectdata *conn)
sec_conn->xfertype = SOURCE3RD;
/* sets transfer type */
result = ftp_transfertype(conn, data->set.ftp_ascii);
result = ftp_transfertype(conn, data->set.prefer_ascii);
if (result)
return result;
result = ftp_transfertype(sec_conn, data->set.ftp_ascii);
result = ftp_transfertype(sec_conn, data->set.prefer_ascii);
if (result)
return result;
@@ -3799,19 +3852,20 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
case FTPFILE_SINGLECWD:
/* get the last slash */
slash_pos=strrchr(cur_pos, '/');
if(slash_pos) {
if(slash_pos || !cur_pos || !*cur_pos) {
ftp->dirdepth = 1; /* we consider it to be a single dir */
ftp->dirs = (char **)calloc(1, sizeof(ftp->dirs[0]));
if(!ftp->dirs)
return CURLE_OUT_OF_MEMORY;
ftp->dirs[0] = curl_easy_unescape(conn->data, cur_pos,
(int)(slash_pos-cur_pos), NULL);
ftp->dirs[0] = curl_easy_unescape(conn->data, slash_pos ? cur_pos : "/",
slash_pos?(int)(slash_pos-cur_pos):1,
NULL);
if(!ftp->dirs[0]) {
free(ftp->dirs);
return CURLE_OUT_OF_MEMORY;
}
ftp->file = slash_pos+1; /* the rest is the file name */
ftp->file = slash_pos ? slash_pos+1 : cur_pos; /* rest is file name */
}
else
ftp->file = cur_pos; /* this is a file name only */
@@ -3826,7 +3880,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
return CURLE_OUT_OF_MEMORY;
/* parse the URL path into separate path components */
while((slash_pos=strchr(cur_pos, '/'))) {
while ((slash_pos = strchr(cur_pos, '/')) != NULL) {
/* 1 or 0 to indicate absolute directory */
bool absolute_dir = (cur_pos - conn->path > 0) && (ftp->dirdepth == 0);

View File

@@ -209,12 +209,15 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
if (!Curl_ssl_check_cxn(data->state.connects[data->state.lastconnect]))
*param_longp = -1; /* FIN received */
}
/* Minix 3.1 doesn't support any flags on recv; just assume socket is OK */
#ifdef MSG_PEEK
else {
/* use the socket */
if(recv((int)data->state.connects[data->state.lastconnect]->
sock[FIRSTSOCKET], (void*)&buf, 1, MSG_PEEK) == 0)
*param_longp = -1; /* FIN received */
}
#endif
}
else
*param_longp = -1;

View File

@@ -168,8 +168,7 @@ static CURLcode handshake(struct connectdata *conn,
} while(1);
if (rc < 0) {
failf(data, "gnutls_handshake() failed: %d", rc);
/* gnutls_perror(ret); */
failf(data, "gnutls_handshake() failed: %s", gnutls_strerror(rc));
return CURLE_SSL_CONNECT_ERROR;
}

View File

@@ -409,10 +409,12 @@ int Curl_resolv(struct connectdata *conn,
#ifdef HAVE_SIGSETJMP
/* this allows us to time-out from the name resolver, as the timeout
will generate a signal and we will siglongjmp() from that here */
if(!data->set.no_signal && sigsetjmp(curl_jmpenv, 1)) {
/* this is coming from a siglongjmp() */
failf(data, "name lookup timed out");
return CURLRESOLV_ERROR;
if(!data->set.no_signal) {
if (sigsetjmp(curl_jmpenv, 1)) {
/* this is coming from a siglongjmp() */
failf(data, "name lookup timed out");
return CURLRESOLV_ERROR;
}
}
#endif
@@ -607,7 +609,14 @@ Curl_addrinfo *Curl_ip2addr(in_addr_t num, const char *hostname, int port)
h = &buf->hostentry;
h->h_addr_list = &buf->h_addr_list[0];
addrentry = &buf->addrentry;
#ifdef _CRAYC
/* On UNICOS, s_addr is a bit field and for some reason assigning to it
* doesn't work. There must be a better fix than this ugly hack.
*/
memcpy(addrentry, &num, SIZEOF_in_addr);
#else
addrentry->s_addr = num;
#endif
h->h_addr_list[0] = (char*)addrentry;
h->h_addr_list[1] = NULL;
h->h_addrtype = AF_INET;

View File

@@ -26,6 +26,11 @@
#include "setup.h"
#include "hash.h"
#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
#undef in_addr_t
#define in_addr_t uint32_t
#endif
/*
* Setup comfortable CURLRES_* defines to use in the host*.c sources.
*/

View File

@@ -64,11 +64,6 @@
#include <process.h>
#endif
#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
#undef in_addr_t
#define in_addr_t unsigned long
#endif
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
@@ -353,7 +348,7 @@ Curl_addrinfo *Curl_he2ai(const struct hostent *he, int port)
/* no input == no output! */
return NULL;
for(i=0; (curr = (struct in_addr *)he->h_addr_list[i]); i++) {
for(i=0; (curr = (struct in_addr *)he->h_addr_list[i]) != NULL; i++) {
ai = calloc(1, sizeof(Curl_addrinfo) + sizeof(struct sockaddr_in));

View File

@@ -37,7 +37,7 @@
#include <sys/stat.h>
#endif
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#include <time.h>
#include <io.h>
#else
@@ -47,7 +47,9 @@
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_TIME_H
#ifdef TIME_WITH_SYS_TIME
@@ -1251,7 +1253,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
if(data->set.include_header)
writetype |= CLIENTWRITE_BODY;
result = Curl_client_write(data, writetype, line_start, perline);
result = Curl_client_write(conn, writetype, line_start, perline);
if(result)
return result;
@@ -1516,6 +1518,8 @@ static CURLcode expect100(struct SessionHandle *data,
send_buffer *req_buffer)
{
CURLcode result = CURLE_OK;
data->state.expect100header = FALSE; /* default to false unless it is set
to TRUE below */
if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
!checkheaders(data, "Expect:")) {
/* if not doing HTTP 1.0 or disabled explicitly, we add a Expect:
@@ -1525,7 +1529,7 @@ static CURLcode expect100(struct SessionHandle *data,
result = add_bufferf(req_buffer,
"Expect: 100-continue\r\n");
if(result == CURLE_OK)
data->set.expect100header = TRUE;
data->state.expect100header = TRUE;
}
return result;
}
@@ -2247,16 +2251,24 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
if(data->set.postfields) {
if((data->state.authhost.done || data->state.authproxy.done )
&& (postsize < MAX_INITIAL_POST_SIZE)) {
/* If we're not done with the authentication phase, we don't expect
to actually send off any data yet. Hence, we delay the sending of
the body until we receive that friendly 100-continue response */
/* for really small posts we don't use Expect: headers at all, and for
the somewhat bigger ones we allow the app to disable it */
if(postsize > TINY_INITIAL_POST_SIZE) {
result = expect100(data, req_buffer);
if(result)
return result;
}
else
data->state.expect100header = FALSE;
/* The post data is less than MAX_INITIAL_PORT_SIZE, then append it
to the header. This limit is no magic limit but only set to
prevent really huge POSTs to get the data duplicated with
malloc() and family. */
if(!data->state.expect100header &&
(postsize < MAX_INITIAL_POST_SIZE)) {
/* if we don't use expect:-100 AND
postsize is less than MAX_INITIAL_POST_SIZE
then append the post data to the HTTP request header. This limit
is no magic limit but only set to prevent really huge POSTs to
get the data duplicated with malloc() and family. */
result = add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
if(result)
@@ -2295,18 +2307,10 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* set the upload size to the progress meter */
Curl_pgrsSetUploadSize(data, http->postsize);
result = expect100(data, req_buffer);
if(result)
return result;
add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
}
}
else {
result = expect100(data, req_buffer);
if(result)
return result;
add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
if(data->set.postfieldsize) {

View File

@@ -74,7 +74,11 @@ int Curl_http_should_fail(struct connectdata *conn);
It must not be greater than 64K to work on VMS.
*/
#ifndef MAX_INITIAL_POST_SIZE
#define MAX_INITIAL_POST_SIZE 1024
#define MAX_INITIAL_POST_SIZE (64*1024)
#endif
#ifndef TINY_INITIAL_POST_SIZE
#define TINY_INITIAL_POST_SIZE 1024
#endif
#endif

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
* you should have received as part of this distribution. The terms
@@ -190,7 +190,7 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
case IDENTITY:
#endif
if(!k->ignorebody)
result = Curl_client_write(conn->data, CLIENTWRITE_BODY, datap,
result = Curl_client_write(conn, CLIENTWRITE_BODY, datap,
piece);
#ifdef HAVE_LIBZ
break;
@@ -198,14 +198,14 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
case DEFLATE:
/* update conn->keep.str to point to the chunk data. */
conn->keep.str = datap;
result = Curl_unencode_deflate_write(conn->data, &conn->keep,
result = Curl_unencode_deflate_write(conn, &conn->keep,
(ssize_t)piece);
break;
case GZIP:
/* update conn->keep.str to point to the chunk data. */
conn->keep.str = datap;
result = Curl_unencode_gzip_write(conn->data, &conn->keep,
result = Curl_unencode_gzip_write(conn, &conn->keep,
(ssize_t)piece);
break;
@@ -303,7 +303,7 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
return CHUNKE_STOP;
}
else {
Curl_client_write(conn->data, CLIENTWRITE_HEADER,
Curl_client_write(conn, CLIENTWRITE_HEADER,
conn->trailer, conn->trlPos);
}
ch->state = CHUNK_TRAILER;

View File

@@ -39,7 +39,7 @@
*/
#if !defined(WIN32) && !defined(__BEOS__) && !defined(__CYGWIN__) && \
!defined(__riscos__) && !defined(__INTERIX) && !defined(NETWARE) && \
!defined(_AMIGASF) && !defined(_MINIX)
!defined(_AMIGASF) && !defined(__minix)
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
@@ -114,7 +114,7 @@ char *Curl_if2ip(const char *interface, char *buf, int buf_size)
struct in_addr in;
struct sockaddr_in *s = (struct sockaddr_in *)&req.ifr_dstaddr;
memcpy(&in, &(s->sin_addr.s_addr), sizeof(in));
memcpy(&in, &s->sin_addr, sizeof(in));
ip = (char *) Curl_inet_ntop(s->sin_family, &in, buf, buf_size);
}
sclose(dummy);

View File

@@ -372,9 +372,9 @@ CURLcode Curl_ldap(struct connectdata *conn, bool *done)
char *dn = (*ldap_get_dn)(server, entryIterator);
int i;
Curl_client_write(data, CLIENTWRITE_BODY, (char *)"DN: ", 4);
Curl_client_write(data, CLIENTWRITE_BODY, (char *)dn, 0);
Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 1);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)dn, 0);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
for (attribute = (*ldap_first_attribute)(server, entryIterator, &ber);
attribute;
@@ -387,9 +387,9 @@ CURLcode Curl_ldap(struct connectdata *conn, bool *done)
{
for (i = 0; (vals[i] != NULL); i++)
{
Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\t", 1);
Curl_client_write(data, CLIENTWRITE_BODY, (char *) attribute, 0);
Curl_client_write(data, CLIENTWRITE_BODY, (char *)": ", 2);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *) attribute, 0);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2);
if ((strlen(attribute) > 7) &&
(strcmp(";binary",
(char *)attribute +
@@ -398,19 +398,19 @@ CURLcode Curl_ldap(struct connectdata *conn, bool *done)
val_b64_sz = Curl_base64_encode(vals[i]->bv_val, vals[i]->bv_len,
&val_b64);
if (val_b64_sz > 0) {
Curl_client_write(data, CLIENTWRITE_BODY, val_b64, val_b64_sz);
Curl_client_write(conn, CLIENTWRITE_BODY, val_b64, val_b64_sz);
free(val_b64);
}
} else
Curl_client_write(data, CLIENTWRITE_BODY, vals[i]->bv_val,
Curl_client_write(conn, CLIENTWRITE_BODY, vals[i]->bv_val,
vals[i]->bv_len);
Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 0);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
}
/* Free memory used to store values */
(*ldap_value_free_len)((void **)vals);
}
Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 1);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
(*ldap_memfree)(attribute);
}

View File

@@ -2,6 +2,7 @@
# Adapted for djgpp2 / Watt-32 / DOS by
# Gisle Vanem <giva@bgnett.no>
#
# $Id$
DEPEND_PREREQ = config.h
@@ -19,7 +20,7 @@ all: $(OBJ_DIR) config.h $(CURL_LIB)
$(CURL_LIB): $(OBJECTS)
ar rs $@ $?
config.h: config.dj
config.h: config.dos
cp $^ $@
clean:
@@ -30,266 +31,257 @@ realclean vclean: clean
# DO NOT DELETE THIS LINE
$(OBJ_DIR)/file.o: file.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h progress.h sendf.h escape.h \
file.h speedcheck.h getinfo.h transfer.h url.h memory.h parsedate.h \
../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/timeval.o: timeval.c timeval.h setup.h config.h
$(OBJ_DIR)/base64.o: base64.c setup.h config.h ../include/curl/mprintf.h \
$(OBJ_DIR)/file.o: file.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
http_chunks.h hostip.h hash.h llist.h splay.h progress.h sendf.h \
escape.h file.h speedcheck.h getinfo.h transfer.h url.h memory.h \
parsedate.h ../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/timeval.o: timeval.c timeval.h setup.h config.h setup_once.h
$(OBJ_DIR)/base64.o: base64.c setup.h config.h setup_once.h \
../include/curl/mprintf.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h base64.h memory.h ../include/curl/curl.h \
memdebug.h memory.h
$(OBJ_DIR)/hostip.o: hostip.c setup.h config.h urldata.h cookie.h \
memdebug.h ./memory.h
$(OBJ_DIR)/hostip.o: hostip.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \
inet_ntop.h ../include/curl/mprintf.h memory.h memdebug.h memory.h
$(OBJ_DIR)/progress.o: progress.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h \
strerror.h url.h inet_ntop.h ../include/curl/mprintf.h memory.h \
memdebug.h ./memory.h
$(OBJ_DIR)/progress.o: progress.c setup.h config.h setup_once.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
sendf.h progress.h ../include/curl/mprintf.h
$(OBJ_DIR)/formdata.o: formdata.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
$(OBJ_DIR)/formdata.o: formdata.c setup.h config.h setup_once.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h strequal.h \
memory.h ../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/cookie.o: cookie.c setup.h config.h urldata.h cookie.h \
memory.h ../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/cookie.o: cookie.c setup.h config.h setup_once.h \
../include/curl/mprintf.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h urldata.h cookie.h ../include/curl/curl.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
strequal.h strtok.h sendf.h memory.h share.h strtoofft.h memdebug.h \
./memory.h
$(OBJ_DIR)/http.o: http.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h strequal.h strtok.h sendf.h \
memory.h memdebug.h memory.h
$(OBJ_DIR)/http.o: http.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h \
base64.h strequal.h sslgen.h http_digest.h http_ntlm.h http_negotiate.h \
url.h share.h http.h memory.h select.h parsedate.h \
../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/sendf.o: sendf.c setup.h config.h ../include/curl/curl.h \
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h \
progress.h base64.h strequal.h sslgen.h http_digest.h http_ntlm.h \
http_negotiate.h url.h share.h http.h memory.h select.h parsedate.h \
strtoofft.h multiif.h ../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/sendf.o: sendf.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
sendf.h connect.h sslgen.h ../include/curl/mprintf.h memory.h \
strerror.h memdebug.h memory.h
$(OBJ_DIR)/ftp.o: ftp.c setup.h config.h ../include/curl/curl.h \
strerror.h easyif.h memdebug.h ./memory.h
$(OBJ_DIR)/ftp.o: ftp.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
sendf.h if2ip.h progress.h transfer.h escape.h http.h ftp.h strtoofft.h \
strequal.h sslgen.h connect.h strerror.h memory.h inet_ntop.h select.h \
parsedate.h ../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/url.o: url.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
sendf.h easyif.h if2ip.h progress.h transfer.h escape.h http.h ftp.h \
strtoofft.h strequal.h sslgen.h connect.h strerror.h memory.h \
inet_ntop.h select.h parsedate.h sockaddr.h multiif.h \
../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/url.o: url.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h netrc.h base64.h sslgen.h \
http_chunks.h hostip.h hash.h llist.h splay.h netrc.h base64.h sslgen.h \
transfer.h sendf.h progress.h strequal.h strerror.h escape.h strtok.h \
share.h content_encoding.h http_digest.h http_negotiate.h select.h \
multiif.h ftp.h dict.h telnet.h http.h file.h ldap.h url.h connect.h \
inet_ntop.h http_ntlm.h ca-bundle.h ../include/curl/mprintf.h memory.h \
memdebug.h memory.h
$(OBJ_DIR)/dict.o: dict.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h \
strequal.h dict.h ../include/curl/mprintf.h
$(OBJ_DIR)/if2ip.o: if2ip.c setup.h config.h if2ip.h inet_ntop.h memory.h \
multiif.h ftp.h dict.h telnet.h tftp.h http.h file.h ldap.h url.h \
connect.h inet_ntop.h http_ntlm.h ./ca-bundle.h \
../include/curl/mprintf.h memory.h memdebug.h ./memory.h
$(OBJ_DIR)/dict.o: dict.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h \
progress.h strequal.h dict.h ../include/curl/mprintf.h memdebug.h \
./memory.h
$(OBJ_DIR)/if2ip.o: if2ip.c setup.h config.h setup_once.h if2ip.h inet_ntop.h \
memory.h ../include/curl/curl.h ../include/curl/curlver.h \
../include/curl/easy.h ../include/curl/multi.h ../include/curl/curl.h \
memdebug.h ./memory.h
$(OBJ_DIR)/speedcheck.o: speedcheck.c setup.h config.h setup_once.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memdebug.h memory.h
$(OBJ_DIR)/speedcheck.o: speedcheck.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
sendf.h speedcheck.h
$(OBJ_DIR)/ldap.o: ldap.c setup.h config.h
$(OBJ_DIR)/ssluse.o: ssluse.c setup.h config.h urldata.h cookie.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
sendf.h multiif.h speedcheck.h
$(OBJ_DIR)/ldap.o: ldap.c setup.h config.h setup_once.h
$(OBJ_DIR)/ssluse.o: ssluse.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h url.h inet_pton.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h url.h inet_pton.h \
ssluse.h connect.h strequal.h select.h sslgen.h \
../include/curl/mprintf.h
$(OBJ_DIR)/version.o: version.c setup.h config.h ../include/curl/curl.h \
$(OBJ_DIR)/version.o: version.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
sslgen.h ../include/curl/mprintf.h
$(OBJ_DIR)/getenv.o: getenv.c setup.h config.h ../include/curl/curl.h \
$(OBJ_DIR)/getenv.o: getenv.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memory.h memdebug.h \
memory.h
$(OBJ_DIR)/escape.o: escape.c setup.h config.h ../include/curl/curl.h \
./memory.h
$(OBJ_DIR)/escape.o: escape.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memory.h urldata.h \
cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h \
splay.h easyif.h ../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/mprintf.o: mprintf.c setup.h config.h setup_once.h \
../include/curl/mprintf.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memory.h \
../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/mprintf.o: mprintf.c setup.h config.h ../include/curl/mprintf.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h memory.h ../include/curl/curl.h memdebug.h \
memory.h
$(OBJ_DIR)/telnet.o: telnet.c setup.h config.h urldata.h cookie.h \
./memory.h
$(OBJ_DIR)/telnet.o: telnet.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h telnet.h \
../include/curl/mprintf.h arpa_telnet.h memory.h select.h memdebug.h \
memory.h
$(OBJ_DIR)/netrc.o: netrc.c setup.h config.h ../include/curl/curl.h \
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h \
telnet.h connect.h ../include/curl/mprintf.h arpa_telnet.h memory.h \
select.h memdebug.h ./memory.h
$(OBJ_DIR)/netrc.o: netrc.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h netrc.h strequal.h \
strtok.h memory.h ../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/getinfo.o: getinfo.c setup.h config.h ../include/curl/curl.h \
strtok.h memory.h ../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/getinfo.o: getinfo.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
getinfo.h memory.h sslgen.h memdebug.h memory.h
$(OBJ_DIR)/transfer.o: transfer.c setup.h config.h strtoofft.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
getinfo.h memory.h sslgen.h memdebug.h ./memory.h
$(OBJ_DIR)/transfer.o: transfer.c setup.h config.h setup_once.h strtoofft.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h strequal.h urldata.h \
cookie.h formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
netrc.h content_encoding.h transfer.h sendf.h speedcheck.h progress.h \
http.h url.h getinfo.h sslgen.h http_digest.h http_ntlm.h \
http_negotiate.h share.h memory.h select.h ../include/curl/mprintf.h \
memdebug.h memory.h
$(OBJ_DIR)/strequal.o: strequal.c setup.h config.h strequal.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h \
splay.h netrc.h content_encoding.h transfer.h sendf.h speedcheck.h \
progress.h http.h url.h getinfo.h sslgen.h http_digest.h http_ntlm.h \
http_negotiate.h share.h memory.h select.h multiif.h easyif.h \
../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/strequal.o: strequal.c setup.h config.h setup_once.h strequal.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h
$(OBJ_DIR)/easy.o: easy.c setup.h config.h strequal.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
$(OBJ_DIR)/easy.o: easy.c setup.h config.h setup_once.h strequal.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
transfer.h sslgen.h url.h getinfo.h share.h memory.h progress.h \
easyif.h ../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/security.o: security.c setup.h config.h
$(OBJ_DIR)/krb4.o: krb4.c setup.h config.h
$(OBJ_DIR)/memdebug.o: memdebug.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
transfer.h sslgen.h url.h getinfo.h share.h strdup.h memory.h \
progress.h easyif.h sendf.h ../include/curl/mprintf.h memdebug.h \
./memory.h
$(OBJ_DIR)/security.o: security.c setup.h config.h setup_once.h
$(OBJ_DIR)/krb4.o: krb4.c setup.h config.h setup_once.h
$(OBJ_DIR)/memdebug.o: memdebug.c setup.h config.h setup_once.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h \
../include/curl/mprintf.h urldata.h cookie.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h memory.h memdebug.h memory.h
$(OBJ_DIR)/http_chunks.o: http_chunks.c setup.h config.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h content_encoding.h http.h \
memory.h ../include/curl/mprintf.h memdebug.h memory.h
$(OBJ_DIR)/strtok.o: strtok.c setup.h config.h strtok.h
$(OBJ_DIR)/connect.o: connect.c setup.h config.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h if2ip.h strerror.h \
connect.h memory.h select.h url.h memdebug.h memory.h
$(OBJ_DIR)/llist.o: llist.c setup.h config.h llist.h memory.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memdebug.h memory.h
$(OBJ_DIR)/hash.o: hash.c setup.h config.h hash.h llist.h memory.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memdebug.h memory.h
$(OBJ_DIR)/multi.o: multi.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
transfer.h url.h connect.h progress.h memory.h easyif.h multiif.h \
sendf.h memdebug.h memory.h
$(OBJ_DIR)/content_encoding.o: content_encoding.c setup.h config.h urldata.h \
http_chunks.h hostip.h hash.h llist.h splay.h memory.h memdebug.h \
./memory.h
$(OBJ_DIR)/http_chunks.o: http_chunks.c setup.h config.h setup_once.h urldata.h \
cookie.h ../include/curl/curl.h ../include/curl/curlver.h \
../include/curl/easy.h ../include/curl/multi.h ../include/curl/curl.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
sendf.h content_encoding.h memory.h memdebug.h memory.h
$(OBJ_DIR)/share.o: share.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
share.h memory.h memdebug.h memory.h
$(OBJ_DIR)/http_digest.o: http_digest.c setup.h config.h urldata.h cookie.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
sendf.h content_encoding.h http.h memory.h ../include/curl/mprintf.h \
memdebug.h ./memory.h
$(OBJ_DIR)/strtok.o: strtok.c setup.h config.h setup_once.h strtok.h
$(OBJ_DIR)/connect.o: connect.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h strequal.h base64.h md5.h \
http_digest.h strtok.h url.h memory.h ../include/curl/mprintf.h \
memdebug.h memory.h
$(OBJ_DIR)/md5.o: md5.c setup.h config.h md5.h
$(OBJ_DIR)/http_negotiate.o: http_negotiate.c setup.h config.h
$(OBJ_DIR)/http_ntlm.o: http_ntlm.c setup.h config.h
$(OBJ_DIR)/inet_pton.o: inet_pton.c setup.h config.h
$(OBJ_DIR)/strtoofft.o: strtoofft.c setup.h config.h strtoofft.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h if2ip.h \
strerror.h connect.h memory.h select.h url.h multiif.h sockaddr.h \
inet_ntop.h memdebug.h ./memory.h
$(OBJ_DIR)/llist.o: llist.c setup.h config.h setup_once.h llist.h memory.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memdebug.h ./memory.h
$(OBJ_DIR)/hash.o: hash.c setup.h config.h setup_once.h hash.h llist.h memory.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h memdebug.h ./memory.h
$(OBJ_DIR)/multi.o: multi.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
transfer.h url.h connect.h progress.h memory.h easyif.h multiif.h \
sendf.h memdebug.h ./memory.h
$(OBJ_DIR)/content_encoding.o: content_encoding.c setup.h config.h setup_once.h
$(OBJ_DIR)/share.o: share.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
share.h memory.h memdebug.h ./memory.h
$(OBJ_DIR)/http_digest.o: http_digest.c setup.h config.h setup_once.h urldata.h \
cookie.h ../include/curl/curl.h ../include/curl/curlver.h \
../include/curl/easy.h ../include/curl/multi.h ../include/curl/curl.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
sendf.h strequal.h base64.h md5.h http_digest.h strtok.h url.h memory.h \
../include/curl/mprintf.h memdebug.h ./memory.h
$(OBJ_DIR)/md5.o: md5.c setup.h config.h setup_once.h md5.h
$(OBJ_DIR)/http_negotiate.o: http_negotiate.c setup.h config.h setup_once.h
$(OBJ_DIR)/http_ntlm.o: http_ntlm.c setup.h config.h setup_once.h
$(OBJ_DIR)/inet_pton.o: inet_pton.c setup.h config.h setup_once.h
$(OBJ_DIR)/strtoofft.o: strtoofft.c setup.h config.h setup_once.h strtoofft.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h
$(OBJ_DIR)/strerror.o: strerror.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
$(OBJ_DIR)/strerror.o: strerror.c setup.h config.h setup_once.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h strerror.h urldata.h \
cookie.h formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
../include/curl/mprintf.h
$(OBJ_DIR)/hostares.o: hostares.c setup.h config.h urldata.h cookie.h \
cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h \
splay.h ../include/curl/mprintf.h
$(OBJ_DIR)/hostares.o: hostares.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \
../include/curl/mprintf.h memory.h memdebug.h memory.h
$(OBJ_DIR)/hostasyn.o: hostasyn.c setup.h config.h urldata.h cookie.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h \
strerror.h url.h connect.h ../include/curl/mprintf.h memory.h \
memdebug.h ./memory.h
$(OBJ_DIR)/hostasyn.o: hostasyn.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \
../include/curl/mprintf.h memory.h memdebug.h memory.h
$(OBJ_DIR)/hostip4.o: hostip4.c setup.h config.h urldata.h cookie.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h \
strerror.h url.h ../include/curl/mprintf.h memory.h memdebug.h \
./memory.h
$(OBJ_DIR)/hostip4.o: hostip4.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \
inet_pton.h ../include/curl/mprintf.h memory.h memdebug.h memory.h
$(OBJ_DIR)/hostip6.o: hostip6.c setup.h config.h urldata.h cookie.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h \
strerror.h url.h inet_pton.h ../include/curl/mprintf.h memory.h \
memdebug.h ./memory.h
$(OBJ_DIR)/hostip6.o: hostip6.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \
inet_pton.h ../include/curl/mprintf.h memory.h memdebug.h memory.h
$(OBJ_DIR)/hostsyn.o: hostsyn.c setup.h config.h urldata.h cookie.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h \
strerror.h url.h inet_pton.h connect.h ../include/curl/mprintf.h \
memory.h memdebug.h ./memory.h
$(OBJ_DIR)/hostsyn.o: hostsyn.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \
../include/curl/mprintf.h memory.h memdebug.h memory.h
$(OBJ_DIR)/hostthre.o: hostthre.c setup.h config.h urldata.h cookie.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h \
strerror.h url.h ../include/curl/mprintf.h memory.h memdebug.h \
./memory.h
$(OBJ_DIR)/hostthre.o: hostthre.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \
../include/curl/mprintf.h inet_ntop.h memory.h memdebug.h memory.h
$(OBJ_DIR)/inet_ntop.o: inet_ntop.c setup.h config.h
$(OBJ_DIR)/parsedate.o: parsedate.c setup.h config.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
http_chunks.h hostip.h hash.h llist.h splay.h sendf.h share.h \
strerror.h url.h multiif.h ../include/curl/mprintf.h inet_ntop.h \
memory.h memdebug.h ./memory.h
$(OBJ_DIR)/inet_ntop.o: inet_ntop.c setup.h config.h setup_once.h
$(OBJ_DIR)/parsedate.o: parsedate.c setup.h config.h setup_once.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h
$(OBJ_DIR)/select.o: select.c setup.h config.h ../include/curl/curl.h \
$(OBJ_DIR)/select.o: select.c setup.h config.h setup_once.h ../include/curl/curl.h \
../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \
formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \
e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \
formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h splay.h \
connect.h select.h
$(OBJ_DIR)/gtls.o: gtls.c setup.h config.h
$(OBJ_DIR)/sslgen.o: sslgen.c setup.h config.h urldata.h cookie.h \
$(OBJ_DIR)/gtls.o: gtls.c setup.h config.h setup_once.h
$(OBJ_DIR)/sslgen.o: sslgen.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \
http_chunks.h hostip.h hash.h llist.h sslgen.h ssluse.h gtls.h sendf.h \
strequal.h url.h memory.h memdebug.h memory.h
http_chunks.h hostip.h hash.h llist.h splay.h sslgen.h ssluse.h gtls.h \
sendf.h strequal.h url.h memory.h memdebug.h ./memory.h
$(OBJ_DIR)/tftp.o: tftp.c setup.h config.h setup_once.h urldata.h cookie.h \
../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \
../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \
http_chunks.h hostip.h hash.h llist.h splay.h transfer.h sendf.h tftp.h \
progress.h connect.h strerror.h sockaddr.h ../include/curl/mprintf.h \
memory.h select.h memdebug.h ./memory.h
$(OBJ_DIR)/splay.o: splay.c splay.h
$(OBJ_DIR)/strdup.o: strdup.c setup.h config.h setup_once.h strdup.h

View File

@@ -386,6 +386,10 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
if(easy) {
/* If the 'state' is not INIT or COMPLETED, we might need to do something
nice to put the easy_handle in a good known state when this returns. */
if(easy->state != CURLM_STATE_COMPLETED)
/* this handle is "alive" so we need to count down the total number of
alive connections when this is removed */
multi->num_alive--;
/* The timer must be shut down before easy->multi is set to NULL,
else the timenode will remain in the splay tree after
@@ -635,8 +639,12 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
is already freed and gone */
easy->easy_conn = NULL; /* no more connection */
else {
/* FIX: what if protocol_connect is TRUE here?! */
multistate(easy, CURLM_STATE_WAITCONNECT);
/* call again please so that we get the next socket setup */
result = CURLM_CALL_MULTI_PERFORM;
if(protocol_connect)
multistate(easy, CURLM_STATE_DO);
else
multistate(easy, CURLM_STATE_WAITCONNECT);
}
}

View File

@@ -367,18 +367,19 @@ CURLcode Curl_write(struct connectdata *conn,
The bit pattern defines to what "streams" to write to. Body and/or header.
The defines are in sendf.h of course.
*/
CURLcode Curl_client_write(struct SessionHandle *data,
CURLcode Curl_client_write(struct connectdata *conn,
int type,
char *ptr,
size_t len)
{
struct SessionHandle *data = conn->data;
size_t wrote;
if(0 == len)
len = strlen(ptr);
if(type & CLIENTWRITE_BODY) {
if(data->ftp_in_ascii_mode) {
if((conn->protocol&PROT_FTP) && conn->proto.ftp->transfertype == 'A') {
#ifdef CURL_DOES_CONVERSIONS
/* convert from the network encoding */
size_t rc;

View File

@@ -47,7 +47,7 @@ void Curl_failf(struct SessionHandle *, const char *fmt, ...);
#define CLIENTWRITE_HEADER 2
#define CLIENTWRITE_BOTH (CLIENTWRITE_BODY|CLIENTWRITE_HEADER)
CURLcode Curl_client_write(struct SessionHandle *data, int type, char *ptr,
CURLcode Curl_client_write(struct connectdata *conn, int type, char *ptr,
size_t len);
/* internal read-function, does plain socket, SSL and krb4 */

View File

@@ -218,7 +218,7 @@ typedef unsigned char bool;
#ifdef WIN32
#if !defined(__GNUC__) || defined(__MINGW32__)
#if !defined(__CYGWIN__)
#define sclose(x) closesocket(x)
#undef HAVE_ALARM
@@ -233,7 +233,7 @@ typedef unsigned char bool;
#else /* WIN32 */
#ifdef DJGPP
#ifdef MSDOS /* Watt-32 */
#include <sys/ioctl.h>
#define sclose(x) close_s(x)
#define select(n,r,w,x,t) select_s(n,r,w,x,t)
@@ -244,7 +244,7 @@ typedef unsigned char bool;
#undef word
#endif
#else /* DJGPP */
#else /* MSDOS */
#ifdef __BEOS__
#define sclose(x) closesocket(x)
@@ -254,7 +254,7 @@ typedef unsigned char bool;
#define HAVE_ALARM
#endif /* DJGPP */
#endif /* MSDOS */
#ifdef _AMIGASF
#undef HAVE_ALARM
@@ -267,7 +267,7 @@ typedef unsigned char bool;
#define DOT_CHAR "."
#endif
#ifdef DJGPP
#ifdef MSDOS
#undef DOT_CHAR
#define DOT_CHAR "_"
#endif
@@ -278,19 +278,6 @@ int fileno( FILE *stream);
#endif /* WIN32 */
#ifndef curl_socket_typedef
/* now typedef our socket type */
#ifdef WIN32
typedef SOCKET curl_socket_t;
#define CURL_SOCKET_BAD INVALID_SOCKET
#else
typedef int curl_socket_t;
#define CURL_SOCKET_BAD -1
#endif
#define curl_socket_typedef
#endif /* curl_socket_typedef */
#if defined(WIN32) && !defined(__CYGWIN__) && !defined(USE_ARES) && \
!defined(__LCC__) /* lcc-win32 doesn't have _beginthreadex() */
#ifdef ENABLE_IPV6

View File

@@ -33,7 +33,7 @@
#define SEND_4TH_ARG MSG_NOSIGNAL
#else
#define SEND_4TH_ARG 0
#endif
#endif
/*
@@ -74,7 +74,7 @@
(RECV_TYPE_ARG4)(SEND_4TH_ARG))
#endif
#else /* HAVE_RECV */
#ifdef DJGPP
#ifdef MSDOS
#define sread(x,y,z) (ssize_t)read_s((int)(x), (char *)(y), (int)(z))
#endif
#ifndef sread
@@ -101,7 +101,7 @@
(SEND_TYPE_ARG4)(SEND_4TH_ARG))
#endif
#else /* HAVE_SEND */
#ifdef DJGPP
#ifdef MSDOS
#define swrite(x,y,z) (ssize_t)write_s((int)(x), (char *)(y), (int)(z))
#endif
#ifndef swrite

View File

@@ -80,7 +80,6 @@ struct Curl_tree *Curl_splay(int i, struct Curl_tree *t)
else
break;
}
l->larger = r->smaller = NULL;
l->larger = t->smaller; /* assemble */
r->smaller = t->larger;
@@ -114,6 +113,7 @@ struct Curl_tree *Curl_splayinsert(int i,
t->smaller = node; /* in the sub node for this same key, we use the
smaller pointer to point back to the master
node */
t->key = KEY_NOTUSED; /* and we set the key in the sub node to NOTUSED
to quickly identify this node as a subnode */
@@ -270,9 +270,16 @@ int Curl_splayremovebyaddr(struct Curl_tree *t,
/* Key set to NOTUSED means it is a subnode within a 'same' linked list
and thus we can unlink it easily. The 'smaller' link of a subnode
links to the parent node. */
if (remove->smaller == NULL)
return 3;
remove->smaller->same = remove->same;
if(remove->same)
remove->same->smaller = remove->smaller;
/* Ensures that double-remove gets caught. */
remove->smaller = NULL;
/* voila, we're done! */
*newroot = t; /* return the same root */
return 0;
@@ -280,10 +287,14 @@ int Curl_splayremovebyaddr(struct Curl_tree *t,
t = Curl_splay(remove->key, t);
/* First make sure that we got a root node witht he same key as the one we
want to remove, as otherwise we might be trying to remove a node that
isn't actually in the tree. */
if(t->key != remove->key)
/* First make sure that we got the same root node as the one we want
to remove, as otherwise we might be trying to remove a node that
isn't actually in the tree.
We cannot just compare the keys here as a double remove in quick
succession of a node with key != KEY_NOTUSED && same != NULL
could return the same key but a different node. */
if(t != remove)
return 2;
/* Check if there is a list with identical sizes, as then we're trying to

View File

@@ -28,7 +28,7 @@
#include "strequal.h"
#ifdef HAVE_STRCASECMP
#if defined(HAVE_STRCASECMP) && defined(__STRICT_ANSI__)
/* this is for "-ansi -Wall -pedantic" to stop complaining! */
extern int (strcasecmp)(const char *s1, const char *s2);
extern int (strncasecmp)(const char *s1, const char *s2, size_t n);

View File

@@ -45,7 +45,9 @@
#include <sys/socket.h>
#endif
#include <netinet/in.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -940,7 +942,7 @@ void telrcv(struct connectdata *conn,
break; /* Ignore \0 after CR */
}
Curl_client_write(data, CLIENTWRITE_BODY, (char *)&c, 1);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)&c, 1);
continue;
case CURL_TS_DATA:
@@ -954,7 +956,7 @@ void telrcv(struct connectdata *conn,
tn->telrcv_state = CURL_TS_CR;
}
Curl_client_write(data, CLIENTWRITE_BODY, (char *)&c, 1);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)&c, 1);
continue;
case CURL_TS_IAC:
@@ -978,7 +980,7 @@ void telrcv(struct connectdata *conn,
tn->telrcv_state = CURL_TS_SB;
continue;
case CURL_IAC:
Curl_client_write(data, CLIENTWRITE_BODY, (char *)&c, 1);
Curl_client_write(conn, CLIENTWRITE_BODY, (char *)&c, 1);
break;
case CURL_DM:
case CURL_NOP:

View File

@@ -45,7 +45,9 @@
#include <sys/socket.h>
#endif
#include <netinet/in.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -261,7 +263,7 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
CURLcode res = CURLE_OK;
/* Set ascii mode if -B flag was used */
if(data->set.ftp_ascii)
if(data->set.prefer_ascii)
mode = "netascii";
switch(event) {
@@ -699,7 +701,7 @@ CURLcode Curl_tftp(struct connectdata *conn, bool *done)
/* Don't pass to the client empty or retransmitted packets */
if (state->rbytes > 4 &&
((state->block+1) == getrpacketblock(&state->rpacket))) {
code = Curl_client_write(data, CLIENTWRITE_BODY,
code = Curl_client_write(conn, CLIENTWRITE_BODY,
(char *)&state->rpacket.data[4],
state->rbytes-4);
if(code)

View File

@@ -30,11 +30,13 @@
#include "setup.h"
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#include <time.h>
#else
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#endif
#ifndef HAVE_GETTIMEOFDAY
#if !defined(_WINSOCKAPI_) && !defined(__MINGW32__) && !defined(_AMIGASF) && \

View File

@@ -41,7 +41,7 @@
#include "strtoofft.h"
#include "strequal.h"
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#include <time.h>
#include <io.h>
#else
@@ -51,7 +51,9 @@
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -170,7 +172,7 @@ CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp)
*nreadp = nread;
#ifdef CURL_DOES_CONVERSIONS
if(data->ftp_in_ascii_mode) {
if(data->set.prefer_ascii) {
CURLcode res;
res = Curl_convert_to_network(data, conn->upload_fromhere, nread);
/* Curl_convert_to_network calls failf if unsuccessful */
@@ -531,7 +533,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
headerlen = k->p - data->state.headerbuff;
result = Curl_client_write(data, writetype,
result = Curl_client_write(conn, writetype,
data->state.headerbuff,
headerlen);
if(result)
@@ -990,7 +992,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
Curl_debug(data, CURLINFO_HEADER_IN,
k->p, k->hbuflen, conn);
result = Curl_client_write(data, writetype, k->p, k->hbuflen);
result = Curl_client_write(conn, writetype, k->p, k->hbuflen);
if(result)
return result;
@@ -1144,7 +1146,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
if(k->badheader && !k->ignorebody) {
/* we parsed a piece of data wrongly assuming it was a header
and now we output it as body instead */
result = Curl_client_write(data, CLIENTWRITE_BODY,
result = Curl_client_write(conn, CLIENTWRITE_BODY,
data->state.headerbuff,
k->hbuflen);
if(result)
@@ -1164,7 +1166,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
Content-Encoding header. See Curl_readwrite_init; the
memset() call initializes k->content_encoding to zero. */
if(!k->ignorebody)
result = Curl_client_write(data, CLIENTWRITE_BODY, k->str,
result = Curl_client_write(conn, CLIENTWRITE_BODY, k->str,
nread);
#ifdef HAVE_LIBZ
break;
@@ -1172,13 +1174,13 @@ CURLcode Curl_readwrite(struct connectdata *conn,
case DEFLATE:
/* Assume CLIENTWRITE_BODY; headers are not encoded. */
if(!k->ignorebody)
result = Curl_unencode_deflate_write(data, k, nread);
result = Curl_unencode_deflate_write(conn, k, nread);
break;
case GZIP:
/* Assume CLIENTWRITE_BODY; headers are not encoded. */
if(!k->ignorebody)
result = Curl_unencode_gzip_write(data, k, nread);
result = Curl_unencode_gzip_write(conn, k, nread);
break;
case COMPRESS:
@@ -1283,7 +1285,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
/* convert LF to CRLF if so asked */
#ifdef CURL_DO_LINEEND_CONV
/* always convert if we're FTPing in ASCII mode */
if ((data->set.crlf) || (data->ftp_in_ascii_mode)) {
if ((data->set.crlf) || (data->set.prefer_ascii)) {
#else
if (data->set.crlf) {
#endif /* CURL_DO_LINEEND_CONV */
@@ -1532,14 +1534,14 @@ CURLcode Curl_readwrite_init(struct connectdata *conn)
Thus, we must check if the request has been sent before we set the
state info where we wait for the 100-return code
*/
if (data->set.expect100header &&
if (data->state.expect100header &&
(conn->proto.http->sending == HTTPSEND_BODY)) {
/* wait with write until we either got 100-continue or a timeout */
k->write_after_100_header = TRUE;
k->start100 = k->start;
}
else {
if(data->set.expect100header)
if(data->state.expect100header)
/* when we've sent off the rest of the headers, we must await a
100-continue */
k->wait100_after_headers = TRUE;

106
lib/url.c
View File

@@ -38,7 +38,7 @@
#endif
#include <errno.h>
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#if defined(WIN32) && !defined(__CYGWIN__)
#include <time.h>
#include <io.h>
#else
@@ -46,7 +46,9 @@
#include <sys/socket.h>
#endif
#include <netinet/in.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -76,8 +78,8 @@
#ifndef HAVE_SOCKET
#error "We can't compile without socket() support!"
#endif
#endif
#ifdef USE_LIBIDN
#include <idna.h>
#include <tld.h>
@@ -93,7 +95,7 @@ void idn_free (void *ptr); /* prototype from idn-free.h, not provided by
instead */
#define idn_free(x) (free)(x)
#endif
#endif
#endif /* USE_LIBIDN */
#include "urldata.h"
#include "netrc.h"
@@ -612,7 +614,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
*
* Transfer using ASCII (instead of BINARY).
*/
data->set.ftp_ascii = va_arg(param, long)?TRUE:FALSE;
data->set.prefer_ascii = va_arg(param, long)?TRUE:FALSE;
break;
case CURLOPT_TIMECONDITION:
/*
@@ -1551,6 +1553,20 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
data->set.ftp_alternative_to_user = va_arg(param, char *);
break;
case CURLOPT_SOCKOPTFUNCTION:
/*
* socket callback function: called after socket() but before connect()
*/
data->set.fsockopt = va_arg(param, curl_sockopt_callback);
break;
case CURLOPT_SOCKOPTDATA:
/*
* socket callback data pointer. Might be NULL.
*/
data->set.sockopt_client = va_arg(param, void *);
break;
default:
/* unknown tag and its companion, just ignore: */
result = CURLE_FAILED_INIT; /* correct this */
@@ -2099,14 +2115,49 @@ static int handleSock5Proxy(const char *proxy_name,
int result;
CURLcode code;
curl_socket_t sock = conn->sock[FIRSTSOCKET];
struct SessionHandle *data = conn->data;
long timeout;
Curl_nonblock(sock, FALSE);
/* get timeout */
if(data->set.timeout && data->set.connecttimeout) {
if (data->set.timeout < data->set.connecttimeout)
timeout = data->set.timeout*1000;
else
timeout = data->set.connecttimeout*1000;
}
else if(data->set.timeout)
timeout = data->set.timeout*1000;
else if(data->set.connecttimeout)
timeout = data->set.connecttimeout*1000;
else
timeout = DEFAULT_CONNECT_TIMEOUT;
Curl_nonblock(sock, TRUE);
/* wait until socket gets connected */
result = Curl_select(CURL_SOCKET_BAD, sock, (int)timeout);
if(-1 == result) {
failf(conn->data, "SOCKS5: no connection here");
return 1;
}
else if(0 == result) {
failf(conn->data, "SOCKS5: connection timeout");
return 1;
}
if(result & CSELECT_ERR) {
failf(conn->data, "SOCKS5: error occured during connection");
return 1;
}
socksreq[0] = 5; /* version */
socksreq[1] = (char)(proxy_name ? 2 : 1); /* number of methods (below) */
socksreq[2] = 0; /* no authentication */
socksreq[3] = 2; /* username/password */
Curl_nonblock(sock, FALSE);
code = Curl_write(conn, sock, (char *)socksreq, (2 + (int)socksreq[1]),
&written);
if ((code != CURLE_OK) || (written != (2 + (int)socksreq[1]))) {
@@ -2114,6 +2165,26 @@ static int handleSock5Proxy(const char *proxy_name,
return 1;
}
Curl_nonblock(sock, TRUE);
result = Curl_select(sock, CURL_SOCKET_BAD, (int)timeout);
if(-1 == result) {
failf(conn->data, "SOCKS5 nothing to read");
return 1;
}
else if(0 == result) {
failf(conn->data, "SOCKS5 read timeout");
return 1;
}
if(result & CSELECT_ERR) {
failf(conn->data, "SOCKS5 read error occured");
return 1;
}
Curl_nonblock(sock, FALSE);
result=Curl_read(conn, sock, (char *)socksreq, 2, &actualread);
if ((result != CURLE_OK) || (actualread != 2)) {
failf(conn->data, "Unable to receive initial SOCKS5 response.");
@@ -2130,10 +2201,16 @@ static int handleSock5Proxy(const char *proxy_name,
}
else if (socksreq[1] == 2) {
/* Needs user name and password */
int userlen, pwlen, len;
userlen = (int)strlen(proxy_name);
pwlen = proxy_password?(int)strlen(proxy_password):0;
size_t userlen, pwlen;
int len;
if(proxy_name && proxy_password) {
userlen = strlen(proxy_name);
pwlen = proxy_password?strlen(proxy_password):0;
}
else {
userlen = 0;
pwlen = 0;
}
/* username/password request looks like
* +----+------+----------+------+----------+
@@ -3125,15 +3202,15 @@ static CURLcode CreateConnection(struct SessionHandle *data,
command = (char)toupper((int)type[6]);
switch(command) {
case 'A': /* ASCII mode */
data->set.ftp_ascii = 1;
data->set.prefer_ascii = TRUE;
break;
case 'D': /* directory mode */
data->set.ftp_list_only = 1;
data->set.ftp_list_only = TRUE;
break;
case 'I': /* binary mode */
default:
/* switch off ASCII */
data->set.ftp_ascii = 0;
data->set.prefer_ascii = FALSE;
break;
}
}
@@ -3228,13 +3305,13 @@ static CURLcode CreateConnection(struct SessionHandle *data,
switch(command) {
case 'A': /* ASCII mode */
case 'N': /* NETASCII mode */
data->set.ftp_ascii = 1;
data->set.prefer_ascii = TRUE;
break;
case 'O': /* octet mode */
case 'I': /* binary mode */
default:
/* switch off ASCII */
data->set.ftp_ascii = 0;
data->set.prefer_ascii = FALSE;
break;
}
}
@@ -4193,4 +4270,3 @@ CURLcode Curl_do_more(struct connectdata *conn)
return result;
}

View File

@@ -110,6 +110,7 @@
#endif
/* Download buffer size, keep it fairly big for speed reasons */
#undef BUFSIZE
#define BUFSIZE CURL_MAX_WRITE_SIZE
/* Initial size of the buffer to store headers in, it'll be enlarged in case
@@ -362,6 +363,8 @@ struct FTP {
bool cwdfail; /* set TRUE if a CWD command fails, as then we must prevent
caching the current directory */
char *prevpath; /* conn->path from the previous transfer */
char transfertype; /* set by ftp_transfertype for use by Curl_client_write()a
and others (A/I or zero) */
size_t nread_resp; /* number of bytes currently read of a server response */
char *linestart_resp; /* line start pointer for the FTP server response
@@ -940,6 +943,8 @@ struct UrlState {
/* set after initial USER failure, to prevent an authentication loop */
bool ftp_trying_alternative;
bool expect100header; /* TRUE if we added Expect: 100-continue */
#ifndef WIN32
/* do FTP line-end conversions on most platforms */
#define CURL_DO_LINEEND_CONV
@@ -1025,6 +1030,8 @@ struct UserDefined {
curl_progress_callback fprogress; /* function for progress information */
curl_debug_callback fdebug; /* function that write informational data */
curl_ioctl_callback ioctl; /* function for I/O control */
curl_sockopt_callback fsockopt; /* function for setting socket options */
void *sockopt_client; /* pointer to pass to the socket options callback */
/* the 3 curl_conv_callback functions below are used on non-ASCII hosts */
/* function to convert from the network encoding: */
@@ -1112,8 +1119,8 @@ struct UserDefined {
bool printhost; /* printing host name in debug info */
bool get_filetime;
bool tunnel_thru_httpproxy;
bool prefer_ascii; /* ASCII rather than binary */
bool ftp_append;
bool ftp_ascii;
bool ftp_list_only;
bool ftp_create_missing_dirs;
bool ftp_use_port;
@@ -1135,7 +1142,6 @@ struct UserDefined {
bool krb4; /* kerberos4 connection requested */
bool reuse_forbid; /* forbidden to be reused, close after use */
bool reuse_fresh; /* do not re-use an existing connection */
bool expect100header; /* TRUE if we added Expect: 100-continue */
bool ftp_use_epsv; /* if EPSV is to be attempted or not */
bool ftp_use_eprt; /* if EPRT is to be attempted or not */
curl_ftpssl ftp_ssl; /* if AUTH TLS is to be attempted etc */
@@ -1183,8 +1189,6 @@ struct SessionHandle {
struct UrlState state; /* struct for fields used for state info and
other dynamic purposes */
struct PureInfo info; /* stats, reports and info data */
/* set by ftp_transfertype for use by Curl_client_write and others */
bool ftp_in_ascii_mode;
#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
iconv_t outbound_cd; /* for translating to the network encoding */
iconv_t inbound_cd; /* for translating from the network encoding */

View File

@@ -78,8 +78,13 @@ char *curl_version(void)
}
#endif
#if defined(HAVE_ICONV) && defined(CURL_DOES_CONVERSIONS)
#ifdef _LIBICONV_VERSION
len = snprintf(ptr, left, " iconv/%d.%d",
_libiconv_version >> 8, _libiconv_version & 255);
_LIBICONV_VERSION >> 8, _LIBICONV_VERSION & 255);
#else
/* version unknown */
len = snprintf(ptr, left, " iconv");
#endif /* _LIBICONV_VERSION */
left -= len;
ptr += len;
#endif
@@ -204,7 +209,12 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
#endif
#if defined(HAVE_ICONV) && defined(CURL_DOES_CONVERSIONS)
version_info.iconv_ver_num = _libiconv_version;
#ifdef _LIBICONV_VERSION
version_info.iconv_ver_num = _LIBICONV_VERSION;
#else
/* version unknown */
version_info.iconv_ver_num = -1;
#endif /* _LIBICONV_VERSION */
#endif
(void)stamp; /* avoid compiler warnings, we don't use this */

View File

@@ -57,6 +57,9 @@ findprog()
return 0
}
echo "maketgz: cp lib/config.h.in src/config.h.in"
cp lib/config.h.in src/config.h.in
############################################################################
#
# Enforce a rerun of configure (updates the VERSION)

View File

@@ -26,8 +26,12 @@ AUTOMAKE_OPTIONS = foreign nostdinc
# we use srcdir/include for the static global include files
# we use builddir/src for the generated include files to get found
# we use srcdir/lib for the header files we "borrow" from the lib
INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/include -I$(top_builddir)/src \
-I$(top_srcdir)/lib
INCLUDES = -I$(top_srcdir)/include \
-I$(top_builddir)/lib \
-I$(top_builddir)/src \
-I$(top_srcdir)/lib \
-I$(top_srcdir)/src
bin_PROGRAMS = curl

View File

@@ -3,7 +3,7 @@
## Makefile for building curl.nlm (NetWare version - gnu make)
## Use: make -f Makefile.netware
##
## Comments to: Guenter Knauf <eflash@gmx.net>
## Comments to: Guenter Knauf http://www.gknw.de/phpbb
#
#################################################################
@@ -19,7 +19,7 @@ endif
# Edit the path below to point to the base of your OpenSSL package.
ifndef OPENSSL_PATH
OPENSSL_PATH = ../../openssl-0.9.8a
OPENSSL_PATH = ../../openssl-0.9.8b
endif
ifndef INSTDIR
@@ -67,7 +67,7 @@ CP = cp -afv
# RM = rm -f
# if you want to mark the target as MTSAFE you will need a tool for
# generating the xdc data for the linker; here's a minimal tool:
# http://www.gknw.com/development/prgtools/mkxdc.zip
# http://www.gknw.net/development/prgtools/mkxdc.zip
MPKXDC = mkxdc
# Global flags for all compilers

View File

@@ -1180,9 +1180,12 @@ static int str2offset(curl_off_t *val, char *str)
* definitions for LLONG_{MIN,MAX} or LONG_LONG_{MIN,MAX}.
*/
#ifndef LLONG_MAX
#ifdef _MSC_VER
#if defined(_MSC_VER)
#define LLONG_MAX (curl_off_t)0x7FFFFFFFFFFFFFFFi64
#define LLONG_MIN (curl_off_t)0x8000000000000000i64
#elif defined(_CRAYC)
#define LLONG_MAX (curl_off_t)0x7FFFFFFFFFFFFFFF
#define LLONG_MIN (curl_off_t)0x8000000000000000
#else
#define LLONG_MAX (curl_off_t)0x7FFFFFFFFFFFFFFFLL
#define LLONG_MIN (curl_off_t)0x8000000000000000LL

View File

@@ -34,5 +34,5 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test250 test251 test252 test253 test254 test255 test521 test522 test523 \
test256 test257 test258 test259 test260 test261 test262 test263 test264 \
test265 test266 test267 test268 test269 test270 test271 test272 test273 \
test274 test275 test524 test276 test277
test274 test275 test524 test525 test276 test277

View File

@@ -39,7 +39,6 @@ SIZE 146
RETR 146
CWD /nowhere/anywhere
EPSV
TYPE I
SIZE 146
RETR 146
QUIT

View File

@@ -37,7 +37,6 @@ STOR 148
CWD /nowhere/anywhere
CWD dir2
EPSV
TYPE I
STOR 148
QUIT
</protocol>

View File

@@ -37,7 +37,6 @@ TYPE I
SIZE 210
RETR 210
EPSV
TYPE I
SIZE 210
RETR 210
QUIT

View File

@@ -39,7 +39,6 @@ TYPE I
SIZE 211
RETR 211
PASV
TYPE I
SIZE 211
RETR 211
QUIT

View File

@@ -47,7 +47,6 @@ TYPE I
SIZE 212
RETR 212
PORT 127,0,0,1,
TYPE I
SIZE 212
RETR 212
QUIT

View File

@@ -44,7 +44,6 @@ EPSV
TYPE A
LIST
EPSV
TYPE A
LIST
QUIT
</protocol>

View File

@@ -31,7 +31,6 @@ EPSV
TYPE I
STOR upload.216
EPSV
TYPE I
STOR ..anotherup
QUIT
</protocol>

View File

@@ -39,7 +39,6 @@ Host: 127.0.0.1:%HTTPPORT
Accept: */*
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
this is what we post to the silly web server
</protocol>

View File

@@ -39,7 +39,6 @@ Host: 127.0.0.1:%HTTPPORT
Accept: */*
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
3
one

View File

@@ -30,7 +30,6 @@ Host: 127.0.0.1:%HTTPPORT
Accept: */*
Content-Length: 1
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
</protocol>
# 42 - aborted by callback

View File

@@ -40,7 +40,6 @@ Host: 127.0.0.1:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
</protocol>
</verify>

55
tests/data/test525 Normal file
View File

@@ -0,0 +1,55 @@
<info>
<keywords>
FTP
PORT
STOR
</keywords>
</info>
# Server-side
<reply>
<data>
</data>
</reply>
# Client-side
<client>
<server>
ftp
</server>
<tool>
lib525
</tool>
<name>
FTP PORT upload using multi interface
</name>
<command>
ftp://%HOSTIP:%FTPPORT/path/525 log/upload525
</command>
<file name="log/upload525">
Moooooooooooo
upload this
</file>
</client>
# Verify data after the test has been "shot"
<verify>
<strip>
^PORT .*
^EPRT .*
^LPRT .*
</strip>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
CWD path
PORT 127,0,0,1,5,109
TYPE I
STOR 525
QUIT
</protocol>
<upload>
Moooooooooooo
upload this
</upload>
</verify>

View File

@@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
#***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |

View File

@@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
#
# $Id$
# This is the HTTPS server designed for the curl test suite.

View File

@@ -28,9 +28,10 @@ AUTOMAKE_OPTIONS = foreign nostdinc
# -I$(top_srcdir)/lib is for the setup.h file, included by test.h
# -I$(top_builddir)/lib is for the config.h file, possibly included by the
# setup.h file
INCLUDES = -I$(top_srcdir)/include/curl \
-I$(top_srcdir)/lib \
-I$(top_builddir)/lib
-I$(top_builddir)/lib \
-I$(top_srcdir)/lib
LIBDIR = $(top_builddir)/lib

View File

@@ -92,7 +92,7 @@ my $libtool;
my $memdump="$LOGDIR/memdump";
# the path to the script that analyzes the memory debug output file:
my $memanalyze="./memanalyze.pl";
my $memanalyze="$perl $srcdir/memanalyze.pl";
my $stunnel = checkcmd("stunnel4") || checkcmd("stunnel");
my $valgrind = checkcmd("valgrind");
@@ -990,7 +990,7 @@ sub checksystem {
logmsg "$versnoexec \n";
}
elsif ($versretval & 127) {
logmsg sprintf("command died with signal %d, and %s coredump. \n",
logmsg sprintf("command died with signal %d, and %s coredump.\n",
($versretval & 127), ($versretval & 128)?"a":"no");
}
else {
@@ -1069,7 +1069,7 @@ sub checksystem {
if($tftp_ipv6) {
logmsg sprintf("* TFTP IPv6 port: %d\n", $TFTP6PORT);
}
if($ssl_version) {
logmsg sprintf("* SSL library: %s\n",
$has_gnutls?"GnuTLS":($has_openssl?"OpenSSL":"<unknown>"));
@@ -1620,7 +1620,7 @@ sub singletest {
# what parts to cut off from the file
my @stripfile = getpart("verify", "stripfile");
my $filemode=$hash{'mode'};
if(($filemode eq "text") && $has_textaware) {
# text mode when running on windows means adding an extra
@@ -1675,8 +1675,8 @@ sub singletest {
chomp $serv;
if($serv =~ /^ftp(\d*)(-ipv6|)/) {
my ($id, $ext) = ($1, $2);
print STDERR "SERV $serv $id $ext\n";
ftpkillslave($id, $ext, 1);
#print STDERR "SERV $serv $id $ext\n";
ftpkillslave($id, $ext, $verbose);
}
if($run{$serv}) {
stopserver($run{$serv}); # the pid file is in the hash table

View File

@@ -21,9 +21,13 @@
# $Id$
###########################################################################
AUTOMAKE_OPTIONS = foreign
INCLUDES = -I$(top_srcdir)/lib -I$(top_srcdir)/include
INCLUDES = -I$(top_srcdir)/include \
-I$(top_builddir)/lib \
-I$(top_srcdir)/lib
noinst_PROGRAMS = sws getpart sockfilt resolve tftpd

View File

@@ -760,7 +760,7 @@ int main(int argc, char *argv[])
if (CURL_SOCKET_BAD == sock) {
logmsg("Error opening socket: %d", errno);
exit(1);
return 1;
}
flag = 1;
@@ -768,7 +768,7 @@ int main(int argc, char *argv[])
(void *) &flag, sizeof(flag))) {
logmsg("setsockopt(SO_REUSEADDR) failed: %d", errno);
sclose(sock);
exit(1);
return 1;
}
#ifdef ENABLE_IPV6
@@ -792,7 +792,7 @@ int main(int argc, char *argv[])
if(0 != rc) {
logmsg("Error binding socket: %d", errno);
sclose(sock);
exit(1);
return 1;
}
pidfile = fopen(pidname, "w");
@@ -803,7 +803,7 @@ int main(int argc, char *argv[])
else {
fprintf(stderr, "Couldn't write pid file\n");
sclose(sock);
exit(1);
return 1;
}
logmsg("Running IPv%d version on port %d",
@@ -819,7 +819,7 @@ int main(int argc, char *argv[])
if(0 != rc) {
logmsg("listen() failed with error: %d", errno);
sclose(sock);
exit(1);
return 1;
}
while (1) {

View File

@@ -475,7 +475,7 @@ int main(int argc, char **argv)
if (sock < 0) {
perror("opening stream socket");
logmsg("Error opening socket");
exit(1);
return 1;
}
flag = 1;
@@ -505,7 +505,7 @@ int main(int argc, char **argv)
if(rc < 0) {
perror("binding stream socket");
logmsg("Error binding socket");
exit(1);
return 1;
}
pidfile = fopen(pidname, "w");