Compare commits

..

95 Commits

Author SHA1 Message Date
Daniel Stenberg
a6a3673804 7.8.1-pre3 commit 2001-08-06 08:43:37 +00:00
Daniel Stenberg
944f9a73f4 Jonathan Hseu noticed that you couldn't get a header callback unless you
set CURLOPT_WRITEHEADER to non-NULL, even if you didn't care about that
  data. This is now fixed.
2001-08-06 08:22:26 +00:00
Daniel Stenberg
5ab1a10e9c corrected the comment for CURLOPT_WRITEHEADER in setopt(), and made it
read a void * and not a FILE *, as that was how it used to work and not
anymore...
2001-08-06 08:18:15 +00:00
Daniel Stenberg
1813d2ddf7 many fixes mailed in during July 2001-08-05 13:00:40 +00:00
Daniel Stenberg
2827f5327a curl_escape() no longer attempts to detect already encoded stuff (in order
not to re-encode it).
2001-08-05 12:34:07 +00:00
Daniel Stenberg
47bb09e908 - Sergio Ballestrero provided a patch for reading responses from NCSA httpd
1.5.x servers, as they return really screwed up response headers when asked
  for with HTTP 1.1.
2001-08-05 12:30:57 +00:00
Daniel Stenberg
7f21669ef2 -G or similar to make -d data get into a GET 2001-08-04 14:42:41 +00:00
Daniel Stenberg
3a145180cc complete rewrite to avoid the BSD license in the previous version 2001-08-03 15:11:28 +00:00
Daniel Stenberg
f24d54a9c4 clarified '-d @filename' with a tiny example 2001-08-03 14:06:25 +00:00
Daniel Stenberg
9478d796a3 fixed the header that wrongly was the krb4-style one 2001-08-03 13:52:06 +00:00
Daniel Stenberg
00b00c6931 Andrew Francis base64 decode, my previous base64 encoder, new source header.
No BSD-style license.
2001-08-03 13:51:44 +00:00
Daniel Stenberg
e791f6ec58 added CURLOPT_HTTPGET 2001-08-03 11:53:16 +00:00
Daniel Stenberg
8987244758 httpreq cleanup fix 2001-08-03 11:52:53 +00:00
Daniel Stenberg
9b69f6faab httpsserver.pl added to release archive 2001-08-03 06:39:00 +00:00
Sterling Hughes
e7b966b9eb Funny, I skipped right over this before.
everyting -> everything
2001-08-02 17:29:08 +00:00
Daniel Stenberg
e7801afed1 manual fix, select() loop fix, progress callback fix 2001-08-02 17:25:33 +00:00
Daniel Stenberg
929366b5ae Frank Keeney pointed out a manual mistake for certificate convertions 2001-08-02 17:12:07 +00:00
Daniel Stenberg
e1d8c5daa7 "Add an interface that enables a user to select prefered SSL ciphers to use."
Rob Styles posted the question, as he could've used this...
2001-08-02 17:08:24 +00:00
Daniel Stenberg
2b44fdab2e don't do final newline output when using progress callback 2001-08-02 17:05:11 +00:00
Daniel Stenberg
3e0a95bb78 FD_ZERO() the keepfd variables properly when keepon is modified (Tomasz Lacki
reported 12 Jul 2001)
2001-08-02 16:52:12 +00:00
Sterling Hughes
f0efa89484 Leftover -- add a note about this in the examples file :) 2001-07-12 02:00:24 +00:00
Sterling Hughes
45037a39aa Add win32 initialization support to curl_global_init() and
curl_global_cleanup().  Update corresponding man pages...

Improve the logic in curl_global_cleanup() and curl_global_init() so that
they are not called twice if the application libraries have been
initialized and make sure to reset the init flags in curl_global_cleanup().
2001-07-12 01:57:28 +00:00
Daniel Stenberg
31336d63ae borland makefile fix 2001-07-02 09:23:50 +00:00
Daniel Stenberg
2c39a4381a added more ideas that've been floating around lately 2001-07-02 08:21:25 +00:00
Daniel Stenberg
532624bafe removed the "change test suite" item, as that is already made 2001-07-02 07:04:16 +00:00
Daniel Stenberg
8469918306 Added an item about the cookie jar stuff, contains a link to the dev file
about this subject
2001-07-02 07:02:47 +00:00
Daniel Stenberg
9646a8b346 removed static, removed curl special return type, added include windows.h 2001-06-29 11:33:00 +00:00
Daniel Stenberg
5e2a74fcc4 added strtok.c as a source file 2001-06-29 11:18:27 +00:00
Daniel Stenberg
813d7585c7 Nic Roets brought a fix for the certificate verification when using SSL. 2001-06-29 07:38:11 +00:00
Daniel Stenberg
ae55c1c144 added test 43 2001-06-28 13:25:28 +00:00
Daniel Stenberg
1a6143feba HTTP Location: following over HTTP proxy 2001-06-28 13:24:19 +00:00
Daniel Stenberg
b70a4227b3 now runs ok on IPv6 enabled hosts 2001-06-27 22:04:00 +00:00
Daniel Stenberg
7d82bc81a2 now does OK even on IPv6-enabled hosts 2001-06-27 22:01:37 +00:00
Daniel Stenberg
be449bdea1 better strip 2001-06-27 22:01:08 +00:00
Daniel Stenberg
798aaf0c0a multiple file transfers with resume fix 2001-06-25 12:58:19 +00:00
Daniel Stenberg
6f2fca53ad 'resume from'-fix. When using "-C -" and doing multiple file download, the
first resume was used on all files instead of being reset between each file.
As found by Bjrn Stenberg.
2001-06-25 12:56:06 +00:00
Daniel Stenberg
cd4aed6690 - Anton Kalmykov provided a fix that makes curl work with form field names
with spaces like when -F is used.
2001-06-25 09:49:14 +00:00
Daniel Stenberg
fa601af722 Anton Kalmykov's fix for dealing with form names with spaces! 2001-06-25 09:39:35 +00:00
Daniel Stenberg
303b3cf41c added return type void in SYNOPSIS 2001-06-21 09:39:19 +00:00
Daniel Stenberg
fc535aa086 libcurl.5 is renamed to libcurl.3 2001-06-21 09:34:37 +00:00
Daniel Stenberg
cd33795903 all changes from year 2000 was moved to CHANGES.2000 and that is now
only available in CVS
2001-06-20 07:50:49 +00:00
Daniel Stenberg
c9d233d34a the changelog from year 2000 2001-06-20 07:50:22 +00:00
Daniel Stenberg
bd192d5387 ftp cut off transfer fix, configure --with-ssl fix 2001-06-20 07:48:09 +00:00
Daniel Stenberg
4ac7a087c6 when --with-ssl is used with a specified path, we use that path immediately
to check libs and include files in, we don't check the default places first!
2001-06-20 07:43:36 +00:00
Daniel Stenberg
2d5039184e Added items we've discussed previously, and URLs to dev notes discussing
the matter
2001-06-19 09:12:27 +00:00
Daniel Stenberg
b1bbaebb17 better treatment of truly aborted transfers 2001-06-19 06:04:21 +00:00
Daniel Stenberg
8f6997cbde files to ignore by default in cvs operations 2001-06-18 14:37:23 +00:00
Daniel Stenberg
e18ecaf108 made stdin testing work, also made 'nocheck=true' work when set on the
reply data section
2001-06-14 12:16:07 +00:00
Daniel Stenberg
fe67ba6d2b three more HTTP tests added from the old test suite 2001-06-14 12:05:30 +00:00
Daniel Stenberg
e39e6c537e removed a failf() that would overwrite the previous error message 2001-06-12 18:22:52 +00:00
Daniel Stenberg
4e4a899306 better ssl error msg, libcurl.def fix, -version-info corrected, more test
cases and fixed FTP ranges
2001-06-12 09:23:13 +00:00
Daniel Stenberg
9a78db6e59 Salvador Dvila's ftp range download fix 2001-06-12 09:21:37 +00:00
Daniel Stenberg
6475600afa New test cases added 2001-06-12 09:12:59 +00:00
Daniel Stenberg
e450888b15 supports SIZE now 2001-06-12 08:38:11 +00:00
Daniel Stenberg
23522a66d1 corrected the -version-info 2001-06-11 12:31:51 +00:00
Daniel Stenberg
116462a512 Added a check that 'localhost' resolves before the gethostbyname_r() checks,
as they depend on the resolving of that name. It seems this mistake is
happening from time to time and people have a hard time finding out why
configure can't detect their gethostbyname_r()-setup.
2001-06-11 12:29:08 +00:00
Daniel Stenberg
217e033120 duplicate curl_unescape entry removed 2001-06-07 11:44:58 +00:00
Daniel Stenberg
259ac2dd77 7.8 commit 2001-06-07 09:39:29 +00:00
Daniel Stenberg
4ebf001d37 SM's suggested update of the Microsoft and SSL compiling section 2001-06-07 06:21:27 +00:00
Daniel Stenberg
5e326014cd SDavila posted a fix that sets conn->bits.use_range properly when doing
resumed downloads
2001-06-07 05:59:20 +00:00
Daniel Stenberg
0b0bbffa35 Jrn corrected the mingw32 makefile 2001-06-07 05:41:30 +00:00
Daniel Stenberg
2b35432fcc S. Moonesamy updates, strtok.[ch] issues 2001-06-06 14:26:50 +00:00
Daniel Stenberg
ef8a2bc4fc Added note about src/hughelp.c and the new *.cvs file that can be used if
you really can't generate that file.
2001-06-06 09:39:07 +00:00
Daniel Stenberg
96d235d9a3 For people using CVS but with no perl, like all those windows losers. They
can just rename this file and cut off the extension instead...
2001-06-06 09:37:15 +00:00
Daniel Stenberg
eaf51b62b9 corrected the CVS note about not creating a subdirectory... which it does now 2001-06-06 09:33:46 +00:00
Daniel Stenberg
80994a123e MUTE is gone, PHP examples, new CVS structure 2001-06-05 11:48:30 +00:00
Daniel Stenberg
b1cd033c27 made the test-program in the bottom compile/build, remember to link with
strequal.o as well!
2001-06-05 11:27:40 +00:00
Sterling Hughes
268867311e Add documentation for the --vernum attribute 2001-06-01 21:56:58 +00:00
Daniel Stenberg
6840f80d21 CURLOPT_CONNECTTIMEOUT works on win32 these days, S. Moonesamy pointed out 2001-06-01 07:33:38 +00:00
Sterling Hughes
cac6876734 Update the cvs instructions. 2001-06-01 04:46:15 +00:00
Sterling Hughes
753011c8db Test (and revert change from previous test). 2001-06-01 00:02:44 +00:00
Sterling Hughes
2774dc390a testing... testing... 1, 2, 3 2001-05-31 23:56:28 +00:00
Daniel Stenberg
eb4534f735 removed CURLOPT_MUTE, it is not used anymore 2001-05-31 13:55:13 +00:00
Daniel Stenberg
efb957039d MUTE is now considered obsolete 2001-05-31 13:52:59 +00:00
Daniel Stenberg
fe82ddda46 CURLOPT_MUTE and data->bits.mute are history, removed, gone! 2001-05-31 13:50:28 +00:00
Daniel Stenberg
94af496ac4 the global init stuff, strtok.h mess, _REENTRANT fixed 2001-05-31 13:32:55 +00:00
Sterling Hughes
6f17c2f140 add entry for getbinarypageinvar.php 2001-05-31 12:33:38 +00:00
Sterling Hughes
490c00fb30 Change to // comments and add <?php and ?> wrappers 2001-05-31 12:32:04 +00:00
Sterling Hughes
2d0dbd87c3 Update comments and wrap in <?php and ?> 2001-05-31 12:25:49 +00:00
Sterling Hughes
13a5e16f35 update the comment style from '#' to '//' which is the "un-official"
standard PHP comment.  Also wrap the code in <?php and ?> and finally
add getbinarypageinvar.php to Makefile.am and README
2001-05-31 12:14:12 +00:00
Sterling Hughes
3d54ba1b9e Add the getbinarypageinvar.php, which shows how to use the
CURLOPT_BINARYTRANSFER, added in PHP 4.0.6 along with the
CURLOPT_RETURNTRANSFER option.
2001-05-31 11:59:39 +00:00
Sterling Hughes
e051f904f2 Test and substance patch.
This is my first CVS commit :), what it does:

- Makes sure that parts of the cURL library don't get initialized twice
- Makes sure that we only free what we initialize
2001-05-31 11:30:34 +00:00
Daniel Stenberg
f8d94a3849 Added CVS $Id$ keyword for inline version tracking 2001-05-31 08:41:42 +00:00
Daniel Stenberg
ac691cae88 updated to again set the flags of what to init, and now also feature a
set of available flags
2001-05-31 08:35:26 +00:00
Daniel Stenberg
43d0d75688 fixed the dlopen check 2001-05-31 08:24:50 +00:00
Daniel Stenberg
77f34915ce removed _REENTRANT define 2001-05-31 07:03:04 +00:00
Daniel Stenberg
72b8993164 re-generated 2001-05-31 07:02:31 +00:00
Daniel Stenberg
6b9bd96c06 include setup.h _before_ system includes 2001-05-31 07:02:13 +00:00
Daniel Stenberg
6532f737eb if NEED_REENTRANT is set, define _REENTRANT already here since it has to
be defined as many include files as possible (Solaris req)
2001-05-31 07:01:08 +00:00
Daniel Stenberg
928ff54388 includes setup.h, and thus I could remove the _REENTRANT define 2001-05-31 07:00:21 +00:00
Daniel Stenberg
95c94bf658 the CURL_GLOBAL flags are now used to set what parts to init globally 2001-05-31 06:10:25 +00:00
Daniel Stenberg
7f295939d0 went back to the version where the flags argument to curl_global_init()
specify exactly what global parts to init. Thanks to Sterling Hughes really
for arguing wisely.
2001-05-31 06:06:37 +00:00
Daniel Stenberg
aa27db6986 removed the prototype and made it include string.h instead
If your system, such as Solaris 2.7, lacks the strtok_r() prototype in
   string.h, then you'll face a bunch of warnings on all instances
   where strtok_r() is used.

   There's not much we can do about it. Adding a prototype here screws
   everything up on other platforms! :-(
2001-05-31 06:05:32 +00:00
Daniel Stenberg
4ce5fa3ea9 Sterling Hughes suggested we set 'static' before size_t... 2001-05-31 05:55:42 +00:00
Daniel Stenberg
ffa7c13117 libcurl now has MUTE and NOPROGRESS set by default 2001-05-30 12:51:24 +00:00
84 changed files with 4946 additions and 2206 deletions

1506
CHANGES

File diff suppressed because it is too large Load Diff

1381
CHANGES.2000 Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -13,6 +13,9 @@ inner sanctum.
Use autoconf 2.50 and no earlier. Also, try having automake 1.4 and libtool
1.4 at least.
You will need perl to generate the src/hugehelp.c file. The file
src/hugehelp.c.cvs is a one-shot file that you can rename to src/hugehelp.c if
you really can't generate the true file yourself!
CHANGES.0 contains ancient changes.
@@ -25,7 +28,7 @@ Use autoconf 2.50 and no earlier. Also, try having automake 1.4 and libtool
perl/contrib/ is a subdirectory with various perl scripts
java is a subdirectory with the Java interface to libcurl
java/ is a subdirectory with the Java interface to libcurl
To build after having extracted everything from CVS, do this:

14
README
View File

@@ -30,19 +30,17 @@ README
To download the very latest source off the CVS server do this:
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
(just press enter when asked for password)
(just press enter when asked for password)
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co .
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co curl
(now, you'll get all the latest sources downloaded into your current
directory. Note that this does NOT create a directory named curl or
anything)
(you'll get a directory named curl created, filled with the source code)
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
(you're off the hook!)
(you're off the hook!)
Curl contains pieces of source code that is Copyright (c) 1998, 1999
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the

View File

@@ -64,8 +64,32 @@ AC_ARG_ENABLE(debug,
AC_MSG_RESULT(no)
)
dnl ************************************************************
dnl check for "localhost", if it doesn't exist, we can't do the
dnl gethostbyname_r tests!
dnl
dnl
AC_DEFUN(CURL_CHECK_WORKING_RESOLVER,[
AC_MSG_CHECKING([if "localhost" resolves])
AC_TRY_RUN([
#include <string.h>
#include <sys/types.h>
#include <netdb.h>
int
main () {
struct hostent *h;
h = gethostbyname("localhost");
exit (h == NULL ? 1 : 0); }],[
AC_MSG_RESULT(yes)],[
AC_MSG_RESULT(no)
AC_MSG_ERROR([can't figure out gethostbyname_r() since localhost doesn't resolve])
]
)
])
dnl ************************************************************
dnl check for working getaddrinfo()
dnl
AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
@@ -418,7 +442,7 @@ dnl ucb lib?
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
dnl dl lib?
AC_CHECK_FUNC(dlopen, , AC_CHECK_LIB(dl, dlopen))
AC_CHECK_FUNC(dlclose, , AC_CHECK_LIB(dl, dlopen))
dnl **********************************************************************
dnl Check for the random seed preferences
@@ -559,13 +583,20 @@ then
else
dnl Check for and handle argument to --with-ssl.
EXTRA_SSL=
dnl save the pre-ssl check flags for a while
CLEANLDFLAGS="$LDFLAGS"
CLEANCPPFLAGS="$CPPFLAGS"
case "$OPT_SSL" in
yes)
EXTRA_SSL=/usr/local/ssl ;;
*)
EXTRA_SSL=$OPT_SSL ;;
dnl check the given spot right away!
EXTRA_SSL=$OPT_SSL
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
;;
esac
AC_CHECK_LIB(crypto, CRYPTO_lock,[
@@ -573,8 +604,8 @@ else
],[
OLDLDFLAGS="$LDFLAGS"
OLDCPPFLAGS="$CPPFLAGS"
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib"
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
HAVECRYPTO="yes" ], [
LDFLAGS="$OLDLDFLAGS"
@@ -681,6 +712,9 @@ then
Set to explicitly specify we don't want to use thread-safe functions)
else
dnl check that 'localhost' resolves first
CURL_CHECK_WORKING_RESOLVER
dnl dig around for gethostbyname_r()
CURL_CHECK_GETHOSTBYNAME_R()
@@ -799,7 +833,8 @@ AC_CHECK_FUNCS( socket \
getpass_r \
strlcat \
getpwuid \
geteuid
geteuid \
dlopen
)
dnl removed 'getpass' check on October 26, 2000

View File

@@ -22,6 +22,7 @@ Available values for OPTION include:
--libs library linking information
--prefix curl install prefix
--version output version information
--vernum output the version information as a number (hexadecimal)
EOF
exit $1

View File

@@ -206,8 +206,14 @@ Win32
Microsoft command line style
----------------------------
Please read the OpenSSL documentation on how to compile and install
the OpenSSL library. This generates the libeay32.dll and ssleay32.dll
files.
Run the 'vcvars32.bat' file to get the proper environment variables
set, then run 'nmake vc-ssl' in the root dir.
set. Edit the makefile.vc6 in the lib directory and define
OPENSSL_PATH. Set the location of the OpenSSL library and run 'nmake
vc-ssl' in the root directory.
The vcvars32.bat file is part of the Microsoft development
environment.

View File

@@ -591,7 +591,7 @@ HTTPS
Run the 'openssl' application to convert the certificate. If you cd to the
openssl installation, you can do it like:
# ./apps/openssl pkcs12 -certfile [file you saved] -out [PEMfile]
# ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]
RESUMING FILE TRANSFERS

View File

@@ -26,7 +26,7 @@ man_MANS = \
curl_mprintf.3 \
curl_global_init.3 \
curl_global_cleanup.3 \
libcurl.5
libcurl.3
EXTRA_DIST = $(man_MANS) \
MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \

View File

@@ -7,22 +7,43 @@
TODO
Things to do in project cURL. Please tell me what you think, contribute and
send me patches that improve things!
send me patches that improve things! Also check the http://curl.haxx.se/dev
web section for various development notes.
To do in a future release (random order):
* It would be nice to be able to use "-d" (or something similar) to attach
parameters of EITHER the GET or POST type... It would either require
another curl argument to specify "GET" (obviously the default should remain
POST), or it would require a new curl argument (perhaps -G/--get-data).
I know we're running out of letters, but it somehow feels a little
"cleaner" to just tag on each of your HTTP "parameters" (data-items) one by
one and let curl put them together, rather than having to put them together
myself and include them in the URL.
* Add an interface that enables a user to select prefered SSL ciphers to use.
* Make curl deal with cookies better. libcurl should be able to maintain a
"cookie jar". Updating it with cookies that is received, and using it to
pass cookies to the servers that have matching cookies in the jar.
http://curl.haxx.se/dev/cookie-jar.txt
* Consider an interface to libcurl that allows applications to easier get to
know what cookies that are sent back in the response headers.
* Make SSL session ids get used if multiple HTTPS documents from the same
host is requested. Note: is this really prioritized now with the persistent
connections?
host is requested. http://curl.haxx.se/dev/SSL_session_id.txt
* HTTP PUT for files passed on stdin. Requires libcurl to send the file
with chunked content encoding. http://curl.haxx.se/dev/HTTP-PUT-stdin.txt
* Introduce another callback interface for upload/download that makes one
less copy of data and thus a faster operation.
http://curl.haxx.se/dev/no_copy_callbacks.txt
* Suggested on the mailing list: CURLOPT_FTP_MKDIR...!
* Rewrite parts of the test suite. Make a (XML?) format to store all
test-data in a single for a single test case. The current system makes far
too many separate files. We also need to have the test suite support
different behaviors, like when libcurl is compiled for IPv6 support and
thus performs a different set of FTP commands.
* Add configure options that disables certain protocols in libcurl to
decrease footprint. '--disable-[protocol]' where protocol is http, ftp,
telnet, ldap, dict or file.
@@ -30,6 +51,8 @@ To do in a future release (random order):
* Extend the test suite to include telnet. The telnet could just do ftp or
http operations (for which we have test servers).
* Make TELNET work on windows!
* Add a command line option that allows the output file to get the same time
stamp as the remote file. libcurl already is capable of fetching the remote
file's date.
@@ -40,7 +63,7 @@ To do in a future release (random order):
(http://gnutls.hellug.gr/)
* Add asynchronous name resolving, as this enables full timeout support for
fork() systems.
fork() systems. http://curl.haxx.se/dev/async-resolver.txt
* Move non-URL related functions that are used by both the lib and the curl
application to a separate "portability lib".

View File

@@ -2,7 +2,7 @@
.\" nroff -man curl.1
.\" Written by Daniel Stenberg
.\"
.TH curl 1 "8 May 2001" "Curl 7.7.3" "Curl Manual"
.TH curl 1 "3 Aug 2001" "Curl 7.8" "Curl Manual"
.SH NAME
curl \- get a URL with FTP, TELNET, LDAP, GOPHER, DICT, FILE, HTTP or
HTTPS syntax.
@@ -134,7 +134,8 @@ name=daniel -d skill=lousy' would generate a post chunk that looks like
If you start the data with the letter @, the rest should be a file name to
read the data from, or - if you want curl to read the data from stdin. The
contents of the file must already be url-encoded. Multiple files can also be
specified.
specified. Posting data from a file named 'foobar' would thus be done with
"--data @foobar".
To post data purely binary, you should instead use the --data-binary option.

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_easy_cleanup 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
.SH NAME
@@ -8,7 +8,7 @@ curl_easy_cleanup - End a libcurl session
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_easy_cleanup(CURL *" handle ");"
.BI "void curl_easy_cleanup(CURL *" handle ");"
.ad
.SH DESCRIPTION
This function must be the last function to call for a curl session. It is the

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.6.1" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual"
.SH NAME

View File

@@ -1,8 +1,8 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_easy_setopt 3 "29 May 2001" "libcurl 7.8" "libcurl Manual"
.TH curl_easy_setopt 3 "1 June 2001" "libcurl 7.8" "libcurl Manual"
.SH NAME
curl_easy_setopt - Set curl easy-session options
.SH SYNOPSIS
@@ -178,12 +178,6 @@ similar.
A non-zero parameter tells the library to use HTTP PUT a file. The file to put
must be set with CURLOPT_INFILE and CURLOPT_INFILESIZE.
.TP
.B CURLOPT_MUTE
A non-zero parameter tells the library to be completely quiet. This only
affects error messages that occurs when there's no CURLOPT_ERRORBUFFER
specified. If an error messaged is specifed, this option won't make any
difference.
.TP
.B CURLOPT_USERPWD
Pass a char * as parameter, which should be [username]:[password] to use for
the connection. If the password is left out, you will be prompted for it.
@@ -501,7 +495,7 @@ Pass a long. It should contain the maximum time in seconds that you allow the
connection to the server to take. This only limits the connection phase, once
it has connected, this option is of no more use. Set to zero to disable
connection timeout (it will then only timeout on the system's internal
timeouts). This option doesn't work in win32 systems. See also the
timeouts). See also the
.I CURLOPT_TIMEOUT
option.
.PP

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_escape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_formfree 3 "6 April 2001" "libcurl 7.7.1" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_formparse 3 "21 May 2001" "libcurl 7.7.4" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_getenv 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual"
.SH NAME

View File

@@ -1,8 +1,8 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_global_init 3 "29 May 2001" "libcurl 7.8" "libcurl Manual"
.TH curl_global_init 3 "31 May 2001" "libcurl 7.8" "libcurl Manual"
.SH NAME
curl_global_init - Global libcurl initialisation
.SH SYNOPSIS
@@ -17,13 +17,26 @@ sessions that'll be used) by every application that uses libcurl.
If this function hasn't been invoked when \fIcurl_easy_init\fP is called, it
will be done automatically by libcurl.
The flags option should be set to zero. It will be used to tell libcurl what
specific features it should \fBnot\fP init.
The flags option is a bit pattern that tells libcurl exact what features to
init, as described below. Set the desired bits by ORing the values together.
You must however \fBalways\fP use the \fIcurl_global_cleanup\fP function, as
that cannot be called automatically for you by libcurl.
This function was added in libcurl 7.8.
.SH FLAGS
.TP 5
.B CURL_GLOBAL_ALL
Initialize everything possible. This sets all known bits.
.TP
.B CURL_GLOBAL_SSL
Initialize SSL
.TP
.B CURL_GLOBAL_WIN32
Initialize the Win32 socket libraries.
.TP
.B CURL_GLOBAL_NOTHING
Initialise nothing extra. This sets no bit.
.SH RETURN VALUE
If this function returns non-zero, something went wrong and you cannot use the
other curl functions.

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_printf 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_slist_append 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_slist_free_all 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_strequal 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
.SH NAME
@@ -25,6 +25,6 @@ These functions are provided by libcurl to enable applications to compare
strings in a truly portable manner. There are no standard portable case
insensitive string comparison functions. These two works on all platforms.
.SH RETURN VALUE
A pointer to a zero terminated string.
Non-zero if the strings are identical. Zero if they're not.
.SH "SEE ALSO"
.BR strcmp "(3), " strcasecmp "(3)"

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_unescape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
.SH NAME

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by daniel@haxx.se
.\" $Id$
.\"
.TH curl_version 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
.SH NAME

View File

@@ -1,14 +1,23 @@
/*
* Note: This is only required if you use curl 7.8 or lower, later
* versions provide an option to curl_global_init() that does the
* win32 initialization for you.
*/
/*
* These are example functions doing socket init that Windows
* require. If you don't use windows, you can safely ignore this crap.
*/
static void win32_cleanup(void)
#include <windows.h>
void win32_cleanup(void)
{
WSACleanup();
}
static CURLcode win32_init(void)
int win32_init(void)
{
WORD wVersionRequested;
WSADATA wsaData;

View File

@@ -1,6 +1,6 @@
.\" You can view this file with:
.\" nroff -man [file]
.\" Written by Daniel Stenberg
.\" $Id$
.\"
.TH libcurl 5 "28 May 2001" "libcurl 7.8" "libcurl overview"
.SH NAME

View File

@@ -351,7 +351,8 @@ typedef enum {
CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
CINIT(PUT, LONG, 54), /* PUT the input file */
CINIT(MUTE, LONG, 55), /* force NOPROGRESS */
CINIT(MUTE, LONG, 55), /* OBSOLETE OPTION, removed in 7.8 */
/* Function that will be called instead of the internal progress display
* function. This function should be defined as the curl_progress_callback
@@ -442,6 +443,11 @@ typedef enum {
* parameters will use fwrite() syntax, make sure to follow them. */
CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
/* Set this to force the HTTP request to get back to GET. Only really usable
if POST, PUT or a custom request have been used first.
*/
CINIT(HTTPGET, LONG, 80),
CURLOPT_LASTENTRY /* the last unusued */
} CURLoption;
@@ -503,8 +509,8 @@ void curl_global_cleanup(void);
/* This is the version number */
#define LIBCURL_VERSION "7.8-pre2"
#define LIBCURL_VERSION_NUM 0x070800
#define LIBCURL_VERSION "7.8.1-pre3"
#define LIBCURL_VERSION_NUM 0x070801
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
struct curl_slist {
@@ -573,9 +579,11 @@ typedef enum {
CURLCLOSEPOLICY_LAST /* last, never use this */
} curl_closepolicy;
#define CURL_GLOBAL_NOT_SSL (1<<0)
#define CURL_GLOBAL_NOTHING CURL_GLOBAL_NOT_SSL
#define CURL_GLOBAL_DEFAULT 0
#define CURL_GLOBAL_SSL (1<<0)
#define CURL_GLOBAL_WIN32 (1<<1)
#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
#define CURL_GLOBAL_NOTHING 0
#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
#ifdef __cplusplus
}

6
lib/.cvsignore Normal file
View File

@@ -0,0 +1,6 @@
*.la
*.lo
Makefile
Makefile.in
.deps
.libs

View File

@@ -16,7 +16,7 @@ lib_LTLIBRARIES = libcurl.la
INCLUDES = -I$(top_srcdir)/include
libcurl_la_LDFLAGS = -version-info 2:0:1
libcurl_la_LDFLAGS = -version-info 2:1:0
# This flag accepts an argument of the form current[:revision[:age]]. So,
# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
# 1.

View File

@@ -55,7 +55,8 @@ SOURCES = \
getinfo.c \
version.c \
easy.c \
strequal.c
strequal.c \
strtok.c
OBJECTS = $(SOURCES:.c=.obj)

View File

@@ -33,13 +33,15 @@ libcurl_a_SOURCES = arpa_telnet.h file.c getpass.h netrc.h timeval.c base64.c \
urldata.h transfer.c getdate.h ldap.c ssluse.c version.c transfer.h getenv.c \
ldap.h ssluse.h escape.c getenv.h mprintf.c telnet.c escape.h getpass.c netrc.c \
telnet.h getinfo.c strequal.c strequal.h easy.c security.h \
security.c krb4.h krb4.c memdebug.h memdebug.c inet_ntoa_r.h http_chunks.h http_chunks.c
security.c krb4.h krb4.c memdebug.h memdebug.c inet_ntoa_r.h http_chunks.h http_chunks.c \
strtok.c
libcurl_a_OBJECTS = file.o timeval.o base64.o hostip.o progress.o \
formdata.o cookie.o http.o sendf.o ftp.o url.o dict.o if2ip.o \
speedcheck.o getdate.o transfer.o ldap.o ssluse.o version.o \
getenv.o escape.o mprintf.o telnet.o getpass.o netrc.o getinfo.o \
strequal.o easy.o security.o krb4.o memdebug.o http_chunks.o
strequal.o easy.o security.o krb4.o memdebug.o http_chunks.o \
strtok.o
LIBRARIES = $(libcurl_a_LIBRARIES)
SOURCES = $(libcurl_a_SOURCES)

View File

@@ -60,7 +60,8 @@ RELEASE_OBJS= \
getinfor.obj \
versionr.obj \
easyr.obj \
strequalr.obj
strequalr.obj \
strtokr.obj
DEBUG_OBJS= \
base64d.obj \
@@ -91,7 +92,8 @@ DEBUG_OBJS= \
getinfod.obj \
versiond.obj \
easyd.obj \
strequald.obj
strequald.obj \
strtokd.obj
RELEASE_SSL_OBJS= \
base64rs.obj \
@@ -122,7 +124,8 @@ RELEASE_SSL_OBJS= \
getinfors.obj \
versionrs.obj \
easyrs.obj \
strequalrs.obj
strequalrs.obj \
strtokd.obj
LINK_OBJS= \
base64.obj \
@@ -153,7 +156,8 @@ LINK_OBJS= \
getinfo.obj \
version.obj \
easy.obj \
strequal.obj
strequal.obj \
strtok.obj
all : release
@@ -225,6 +229,8 @@ easyr.obj: easy.c
$(CCR) $(CFLAGS) easy.c
strequalr.obj: strequal.c
$(CCR) $(CFLAGS) strequal.c
strtokr.obj:strtok.c
$(CCR) $(CFLAGS) strtok.c
## Debug
base64d.obj: base64.c
@@ -285,7 +291,8 @@ easyd.obj: easy.c
$(CCD) $(CFLAGS) easy.c
strequald.obj: strequal.c
$(CCD) $(CFLAGS) strequal.c
strtokd.obj:strtok.c
$(CCR) $(CFLAGS) strtok.c
## Release SSL
base64rs.obj: base64.c
@@ -346,6 +353,8 @@ easyrs.obj: easy.c
$(CCRS) $(CFLAGS) easy.c
strequalrs.obj: strequal.c
$(CCRS) $(CFLAGS) strequal.c
strtokrs.obj:strtok.c
$(CCR) $(CFLAGS) strtok.c
clean:

View File

@@ -1,321 +1,101 @@
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
#ifndef __ARPA_TELNET_H
#define __ARPA_TELNET_H
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* Copyright (C) 2001, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* In order to be useful for every potential user, curl and libcurl are
* dual-licensed under the MPL and the MIT/X-derivate licenses.
*
* @(#)telnet.h 8.2 (Berkeley) 12/15/93
*/
#ifndef _ARPA_TELNET_H
#define _ARPA_TELNET_H
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the MPL or the MIT/X-derivate
* licenses. You may pick one of these licenses.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* $Id$
*****************************************************************************/
/*
* Definitions for the TELNET protocol.
* Telnet option defines. Add more here if in need.
*/
#define IAC 255 /* interpret as command: */
#define DONT 254 /* you are not to use option */
#define DO 253 /* please, you use option */
#define WONT 252 /* I won't use option */
#define WILL 251 /* I will use option */
#define SB 250 /* interpret as subnegotiation */
#define GA 249 /* you may reverse the line */
#define EL 248 /* erase the current line */
#define EC 247 /* erase the current character */
#define AYT 246 /* are you there */
#define AO 245 /* abort output--but let prog finish */
#define IP 244 /* interrupt process--permanently */
#define BREAK 243 /* break */
#define DM 242 /* data mark--for connect. cleaning */
#define NOP 241 /* nop */
#define SE 240 /* end sub negotiation */
#define EOR 239 /* end of record (transparent mode) */
#define ABORT 238 /* Abort process */
#define SUSP 237 /* Suspend process */
#define xEOF 236 /* End of file: EOF is already used... */
#define TELOPT_BINARY 0 /* binary 8bit data */
#define TELOPT_SGA 3 /* Supress Go Ahead */
#define TELOPT_EXOPL 255 /* EXtended OPtions List */
#define TELOPT_TTYPE 24 /* Terminal TYPE */
#define TELOPT_XDISPLOC 35 /* X DISPlay LOCation */
#define SYNCH 242 /* for telfunc calls */
#define TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */
#define NEW_ENV_VAR 0
#define NEW_ENV_VALUE 1
#ifdef TELCMDS
static
char *telcmds[] = {
"EOF", "SUSP", "ABORT", "EOR",
"SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
"EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
/*
* The telnet options represented as strings
*/
static char *telnetoptions[]=
{
"BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD",
"NAME", "STATUS" "TIMING MARK", "RCTE",
"NAOL", "NAOP", "NAOCRD", "NAOHTS",
"NAOHTD", "NAOFFD", "NAOVTS", "NAOVTD",
"NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
"DE TERMINAL", "SUPDUP", "SUPDUP OUTPUT", "SEND LOCATION",
"TERM TYPE", "END OF RECORD", "TACACS UID", "OUTPUT MARKING",
"TTYLOC", "3270 REGIME", "X3 PAD", "NAWS",
"TERM SPEED", "LFLOW", "LINEMODE", "XDISPLOC",
"OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON"
};
#else
extern char *telcmds[];
#define TELOPT_MAXIMUM TELOPT_NEW_ENVIRON
#define TELOPT_OK(x) ((x) <= TELOPT_MAXIMUM)
#define TELOPT(x) telnetoptions[x]
#define NTELOPTS 40
/*
* First some defines
*/
#define xEOF 236 /* End Of File */
#define SE 240 /* Sub negotiation End */
#define NOP 241 /* No OPeration */
#define DM 242 /* Data Mark */
#define GA 249 /* Go Ahead, reverse the line */
#define SB 250 /* SuBnegotiation */
#define WILL 251 /* Our side WILL use this option */
#define WONT 252 /* Our side WON'T use this option */
#define DO 253 /* DO use this option! */
#define DONT 254 /* DON'T use this option! */
#define IAC 255 /* Interpret As Command */
/*
* Then those numbers represented as strings:
*/
static char *telnetcmds[]=
{
"EOF", "SUSP", "ABORT", "EOR", "SE",
"NOP", "DMARK", "BRK", "IP", "AO",
"AYT", "EC", "EL", "GA", "SB",
"WILL", "WONT", "DO", "DONT", "IAC"
};
#define TELCMD_MINIMUM xEOF /* the first one */
#define TELCMD_MAXIMUM IAC /* surprise, 255 is the last one! ;-) */
#define TELQUAL_IS 0
#define TELQUAL_SEND 1
#define TELQUAL_INFO 2
#define TELQUAL_NAME 3
#define TELCMD_OK(x) ( ((unsigned int)(x) >= TELCMD_MINIMUM) && \
((unsigned int)(x) <= TELCMD_MAXIMUM) )
#define TELCMD(x) telnetcmds[(x)-TELCMD_MINIMUM]
#endif
#define TELCMD_FIRST xEOF
#define TELCMD_LAST IAC
#define TELCMD_OK(x) ((unsigned int)(x) <= TELCMD_LAST && \
(unsigned int)(x) >= TELCMD_FIRST)
#define TELCMD(x) telcmds[(x)-TELCMD_FIRST]
/* telnet options */
#define TELOPT_BINARY 0 /* 8-bit data path */
#define TELOPT_ECHO 1 /* echo */
#define TELOPT_RCP 2 /* prepare to reconnect */
#define TELOPT_SGA 3 /* suppress go ahead */
#define TELOPT_NAMS 4 /* approximate message size */
#define TELOPT_STATUS 5 /* give status */
#define TELOPT_TM 6 /* timing mark */
#define TELOPT_RCTE 7 /* remote controlled transmission and echo */
#define TELOPT_NAOL 8 /* negotiate about output line width */
#define TELOPT_NAOP 9 /* negotiate about output page size */
#define TELOPT_NAOCRD 10 /* negotiate about CR disposition */
#define TELOPT_NAOHTS 11 /* negotiate about horizontal tabstops */
#define TELOPT_NAOHTD 12 /* negotiate about horizontal tab disposition */
#define TELOPT_NAOFFD 13 /* negotiate about formfeed disposition */
#define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */
#define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */
#define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */
#define TELOPT_XASCII 17 /* extended ascic character set */
#define TELOPT_LOGOUT 18 /* force logout */
#define TELOPT_BM 19 /* byte macro */
#define TELOPT_DET 20 /* data entry terminal */
#define TELOPT_SUPDUP 21 /* supdup protocol */
#define TELOPT_SUPDUPOUTPUT 22 /* supdup output */
#define TELOPT_SNDLOC 23 /* send location */
#define TELOPT_TTYPE 24 /* terminal type */
#define TELOPT_EOR 25 /* end or record */
#define TELOPT_TUID 26 /* TACACS user identification */
#define TELOPT_OUTMRK 27 /* output marking */
#define TELOPT_TTYLOC 28 /* terminal location number */
#define TELOPT_3270REGIME 29 /* 3270 regime */
#define TELOPT_X3PAD 30 /* X.3 PAD */
#define TELOPT_NAWS 31 /* window size */
#define TELOPT_TSPEED 32 /* terminal speed */
#define TELOPT_LFLOW 33 /* remote flow control */
#define TELOPT_LINEMODE 34 /* Linemode option */
#define TELOPT_XDISPLOC 35 /* X Display Location */
#define TELOPT_OLD_ENVIRON 36 /* Old - Environment variables */
#define TELOPT_AUTHENTICATION 37/* Authenticate */
#define TELOPT_ENCRYPT 38 /* Encryption option */
#define TELOPT_NEW_ENVIRON 39 /* New - Environment variables */
#define TELOPT_EXOPL 255 /* extended-options-list */
#define NTELOPTS (1+TELOPT_NEW_ENVIRON)
#ifdef TELOPTS
static
char *telopts[NTELOPTS+1] = {
"BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
"STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
"NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
"NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
"DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
"SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
"TACACS UID", "OUTPUT MARKING", "TTYLOC",
"3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
"LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
"ENCRYPT", "NEW-ENVIRON",
0,
};
#define TELOPT_FIRST TELOPT_BINARY
#define TELOPT_LAST TELOPT_NEW_ENVIRON
#define TELOPT_OK(x) ((unsigned int)(x) <= TELOPT_LAST)
#define TELOPT(x) telopts[(x)-TELOPT_FIRST]
#endif
/* sub-option qualifiers */
#define TELQUAL_IS 0 /* option is... */
#define TELQUAL_SEND 1 /* send option */
#define TELQUAL_INFO 2 /* ENVIRON: informational version of IS */
#define TELQUAL_REPLY 2 /* AUTHENTICATION: client version of IS */
#define TELQUAL_NAME 3 /* AUTHENTICATION: client version of IS */
#define LFLOW_OFF 0 /* Disable remote flow control */
#define LFLOW_ON 1 /* Enable remote flow control */
#define LFLOW_RESTART_ANY 2 /* Restart output on any char */
#define LFLOW_RESTART_XON 3 /* Restart output only on XON */
/*
* LINEMODE suboptions
*/
#define LM_MODE 1
#define LM_FORWARDMASK 2
#define LM_SLC 3
#define MODE_EDIT 0x01
#define MODE_TRAPSIG 0x02
#define MODE_ACK 0x04
#define MODE_SOFT_TAB 0x08
#define MODE_LIT_ECHO 0x10
#define MODE_MASK 0x1f
/* Not part of protocol, but needed to simplify things... */
#define MODE_FLOW 0x0100
#define MODE_ECHO 0x0200
#define MODE_INBIN 0x0400
#define MODE_OUTBIN 0x0800
#define MODE_FORCE 0x1000
#define SLC_SYNCH 1
#define SLC_BRK 2
#define SLC_IP 3
#define SLC_AO 4
#define SLC_AYT 5
#define SLC_EOR 6
#define SLC_ABORT 7
#define SLC_EOF 8
#define SLC_SUSP 9
#define SLC_EC 10
#define SLC_EL 11
#define SLC_EW 12
#define SLC_RP 13
#define SLC_LNEXT 14
#define SLC_XON 15
#define SLC_XOFF 16
#define SLC_FORW1 17
#define SLC_FORW2 18
#define NSLC 18
/*
* For backwards compatability, we define SLC_NAMES to be the
* list of names if SLC_NAMES is not defined.
*/
#define SLC_NAMELIST "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
"ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
"LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
#ifdef SLC_NAMES
char *slc_names[] = {
SLC_NAMELIST
};
#else
extern char *slc_names[];
#define SLC_NAMES SLC_NAMELIST
#endif
#define SLC_NAME_OK(x) ((unsigned int)(x) <= NSLC)
#define SLC_NAME(x) slc_names[x]
#define SLC_NOSUPPORT 0
#define SLC_CANTCHANGE 1
#define SLC_VARIABLE 2
#define SLC_DEFAULT 3
#define SLC_LEVELBITS 0x03
#define SLC_FUNC 0
#define SLC_FLAGS 1
#define SLC_VALUE 2
#define SLC_ACK 0x80
#define SLC_FLUSHIN 0x40
#define SLC_FLUSHOUT 0x20
#define OLD_ENV_VAR 1
#define OLD_ENV_VALUE 0
#define NEW_ENV_VAR 0
#define NEW_ENV_VALUE 1
#define ENV_ESC 2
#define ENV_USERVAR 3
/*
* AUTHENTICATION suboptions
*/
/*
* Who is authenticating who ...
*/
#define AUTH_WHO_CLIENT 0 /* Client authenticating server */
#define AUTH_WHO_SERVER 1 /* Server authenticating client */
#define AUTH_WHO_MASK 1
/*
* amount of authentication done
*/
#define AUTH_HOW_ONE_WAY 0
#define AUTH_HOW_MUTUAL 2
#define AUTH_HOW_MASK 2
#define AUTHTYPE_NULL 0
#define AUTHTYPE_KERBEROS_V4 1
#define AUTHTYPE_KERBEROS_V5 2
#define AUTHTYPE_SPX 3
#define AUTHTYPE_MINK 4
#define AUTHTYPE_CNT 5
#define AUTHTYPE_TEST 99
#ifdef AUTH_NAMES
char *authtype_names[] = {
"NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
};
#else
extern char *authtype_names[];
#endif
#define AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT)
#define AUTHTYPE_NAME(x) authtype_names[x]
/*
* ENCRYPTion suboptions
*/
#define ENCRYPT_IS 0 /* I pick encryption type ... */
#define ENCRYPT_SUPPORT 1 /* I support encryption types ... */
#define ENCRYPT_REPLY 2 /* Initial setup response */
#define ENCRYPT_START 3 /* Am starting to send encrypted */
#define ENCRYPT_END 4 /* Am ending encrypted */
#define ENCRYPT_REQSTART 5 /* Request you start encrypting */
#define ENCRYPT_REQEND 6 /* Request you send encrypting */
#define ENCRYPT_ENC_KEYID 7
#define ENCRYPT_DEC_KEYID 8
#define ENCRYPT_CNT 9
#define ENCTYPE_ANY 0
#define ENCTYPE_DES_CFB64 1
#define ENCTYPE_DES_OFB64 2
#define ENCTYPE_CNT 3
#ifdef ENCRYPT_NAMES
char *encrypt_names[] = {
"IS", "SUPPORT", "REPLY", "START", "END",
"REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
0,
};
char *enctype_names[] = {
"ANY", "DES_CFB64", "DES_OFB64", 0,
};
#else
extern char *encrypt_names[];
extern char *enctype_names[];
#endif
#define ENCRYPT_NAME_OK(x) ((unsigned int)(x) < ENCRYPT_CNT)
#define ENCRYPT_NAME(x) encrypt_names[x]
#define ENCTYPE_NAME_OK(x) ((unsigned int)(x) < ENCTYPE_CNT)
#define ENCTYPE_NAME(x) enctype_names[x]
#endif /* _ARPA_TELNET_H */

View File

@@ -1,34 +1,35 @@
/*
* Copyright (c) 1995 - 1999 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 2001, Andrew Francis and Daniel Stenberg
*
* In order to be useful for every potential user, curl and libcurl are
* dual-licensed under the MPL and the MIT/X-derivate licenses.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the MPL or the MIT/X-derivate
* licenses. You may pick one of these licenses.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* $Id$
*****************************************************************************/
/* Base64 encoding/decoding
*
* Test harnesses down the bottom - compile with -DTEST_ENCODE for
* a program that will read in raw data from stdin and write out
* a base64-encoded version to stdout, and the length returned by the
* encoding function to stderr. Compile with -DTEST_DECODE for a program that
* will go the other way.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* This code will break if int is smaller than 32 bits
*/
#ifdef HAVE_CONFIG_H
@@ -38,115 +39,221 @@
#include <string.h>
#include "base64.h"
/* The last #include file should be: */
#ifdef MALLOCDEBUG
#include "memdebug.h"
#endif
static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static int pos(char c)
static void decodeQuantum(unsigned char *dest, char *src)
{
char *p;
for(p = base64; *p; p++)
if(*p == c)
return p - base64;
return -1;
}
#if 1
int Curl_base64_encode(const void *data, int size, char **str)
{
char *s, *p;
unsigned int x = 0;
int i;
int c;
const unsigned char *q;
p = s = (char*)malloc(size*4/3+4);
if (p == NULL)
return -1;
q = (const unsigned char*)data;
i=0;
for(i = 0; i < size;){
c=q[i++];
c*=256;
if(i < size)
c+=q[i];
i++;
c*=256;
if(i < size)
c+=q[i];
i++;
p[0]=base64[(c&0x00fc0000) >> 18];
p[1]=base64[(c&0x0003f000) >> 12];
p[2]=base64[(c&0x00000fc0) >> 6];
p[3]=base64[(c&0x0000003f) >> 0];
if(i > size)
p[3]='=';
if(i > size+1)
p[2]='=';
p+=4;
for(i = 0; i < 4; i++) {
if(src[i] >= 'A' && src[i] <= 'Z')
x = (x << 6) + (unsigned int)(src[i] - 'A' + 0);
else if(src[i] >= 'a' && src[i] <= 'z')
x = (x << 6) + (unsigned int)(src[i] - 'a' + 26);
else if(src[i] >= '0' && src[i] <= '9')
x = (x << 6) + (unsigned int)(src[i] - '0' + 52);
else if(src[i] == '+')
x = (x << 6) + 62;
else if(src[i] == '/')
x = (x << 6) + 63;
}
*p=0;
*str = s;
return strlen(s);
dest[2] = (unsigned char)(x & 255); x >>= 8;
dest[1] = (unsigned char)(x & 255); x >>= 8;
dest[0] = (unsigned char)(x & 255); x >>= 8;
}
#endif
/* base64Decode
* Given a base64 string at src, decode it into the memory pointed
* to by dest. If rawLength points to a valid address (ie not NULL),
* store the length of the decoded data to it.
*/
static void base64Decode(unsigned char *dest, char *src, int *rawLength)
{
int length = 0;
int equalsTerm = 0;
int i;
unsigned char lastQuantum[3];
while((src[length] != '=') && src[length])
length++;
while(src[length+equalsTerm] == '=')
equalsTerm++;
if(rawLength)
*rawLength = (length * 3 / 4) - equalsTerm;
for(i = 0; i < length/4 - 1; i++) {
decodeQuantum(dest, src);
dest += 3; src += 4;
}
decodeQuantum(lastQuantum, src);
for(i = 0; i < 3 - equalsTerm; i++) dest[i] = lastQuantum[i];
}
/* ---- Base64 Encoding --- */
static char table64[]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/*
* Curl_base64_encode()
*
* Returns the length of the newly created base64 string. The third argument
* is a pointer to an allocated area holding the base64 data. If something
* went wrong, -1 is returned.
*
*/
int Curl_base64_encode(const void *inp, int insize, char **outptr)
{
unsigned char ibuf[3];
unsigned char obuf[4];
int i;
int inputparts;
char *output;
char *base64data;
char *indata = (char *)inp;
if(0 == insize)
insize = strlen(indata);
base64data = output = (char*)malloc(insize*4/3+4);
if(NULL == output)
return -1;
while(insize > 0) {
for (i = inputparts = 0; i < 3; i++) {
if(*indata) {
inputparts++;
ibuf[i] = *indata;
indata++;
insize--;
}
else
ibuf[i] = 0;
}
obuf [0] = (ibuf [0] & 0xFC) >> 2;
obuf [1] = ((ibuf [0] & 0x03) << 4) | ((ibuf [1] & 0xF0) >> 4);
obuf [2] = ((ibuf [1] & 0x0F) << 2) | ((ibuf [2] & 0xC0) >> 6);
obuf [3] = ibuf [2] & 0x3F;
switch(inputparts) {
case 1: /* only one byte read */
sprintf(output, "%c%c==",
table64[obuf[0]],
table64[obuf[1]]);
break;
case 2: /* two bytes read */
sprintf(output, "%c%c%c=",
table64[obuf[0]],
table64[obuf[1]],
table64[obuf[2]]);
break;
default:
sprintf(output, "%c%c%c%c",
table64[obuf[0]],
table64[obuf[1]],
table64[obuf[2]],
table64[obuf[3]] );
break;
}
output += 4;
}
*output=0;
*outptr = base64data; /* make it return the actual data memory */
return strlen(base64data); /* return the length of the new data */
}
/* ---- End of Base64 Encoding ---- */
int Curl_base64_decode(const char *str, void *data)
{
const char *p;
unsigned char *q;
int c;
int x;
int done = 0;
q=(unsigned char*)data;
for(p=str; *p && !done; p+=4){
x = pos(p[0]);
if(x >= 0)
c = x;
else{
done = 3;
break;
}
c*=64;
x = pos(p[1]);
if(x >= 0)
c += x;
else
return -1;
c*=64;
if(p[2] == '=')
done++;
else{
x = pos(p[2]);
if(x >= 0)
c += x;
else
return -1;
}
c*=64;
if(p[3] == '=')
done++;
else{
if(done)
return -1;
x = pos(p[3]);
if(x >= 0)
c += x;
else
return -1;
}
if(done < 3)
*q++=(c&0x00ff0000)>>16;
if(done < 2)
*q++=(c&0x0000ff00)>>8;
if(done < 1)
*q++=(c&0x000000ff)>>0;
}
return q - (unsigned char*)data;
int ret;
base64Decode((unsigned char *)data, (char *)str, &ret);
return ret;
}
/************* TEST HARNESS STUFF ****************/
#ifdef TEST_ENCODE
/* encoding test harness. Read in standard input and write out the length
* returned by Curl_base64_encode, followed by the base64'd data itself
*/
#include <stdio.h>
#define TEST_NEED_SUCK
void *suck(int *);
int main(int argc, char **argv, char **envp) {
char *base64;
int base64Len;
unsigned char *data;
int dataLen;
data = (unsigned char *)suck(&dataLen);
base64Len = Curl_base64_encode(data, dataLen, &base64);
fprintf(stderr, "%d\n", base64Len);
fprintf(stdout, "%s", base64);
free(base64); free(data);
return 0;
}
#endif
#ifdef TEST_DECODE
/* decoding test harness. Read in a base64 string from stdin and write out the
* length returned by Curl_base64_decode, followed by the decoded data itself
*/
#include <stdio.h>
#define TEST_NEED_SUCK
void *suck(int *);
int main(int argc, char **argv, char **envp) {
char *base64;
int base64Len;
unsigned char *data;
int dataLen;
base64 = (char *)suck(&base64Len);
data = (unsigned char *)malloc(base64Len * 3/4 + 8);
dataLen = Curl_base64_decode(base64, data);
fprintf(stderr, "%d\n", dataLen);
fwrite(data,1,dataLen,stdout);
free(base64); free(data);
return 0;
}
#endif
#ifdef TEST_NEED_SUCK
/* this function 'sucks' in as much as possible from stdin */
void *suck(int *lenptr) {
int cursize = 8192;
unsigned char *buf = NULL;
int lastread;
int len = 0;
do {
cursize *= 2;
buf = (unsigned char *)realloc(buf, cursize);
memset(buf + len, 0, cursize - len);
lastread = fread(buf + len, 1, cursize - len, stdin);
len += lastread;
} while(!feof(stdin));
lenptr[0] = len;
return (void *)buf;
}
#endif

View File

@@ -1,40 +1,27 @@
/*
* Copyright (c) 1995, 1996, 1997 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef __BASE64_H
#define __BASE64_H
/*****************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 2000, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* In order to be useful for every potential user, curl and libcurl are
* dual-licensed under the MPL and the MIT/X-derivate licenses.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the MPL or the MIT/X-derivate
* licenses. You may pick one of these licenses.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* $Id$
*****************************************************************************/
int Curl_base64_encode(const void *data, int size, char **str);
int Curl_base64_decode(const char *str, void *data);
#endif

View File

@@ -209,6 +209,10 @@ SOURCE=.\strequal.c
# End Source File
# Begin Source File
SOURCE=.\strtok.c
# End Source File
# Begin Source File
SOURCE=.\telnet.c
# End Source File
# Begin Source File
@@ -341,6 +345,10 @@ SOURCE=.\strequal.h
# End Source File
# Begin Source File
SOURCE=.\strtok.h
# End Source File
# Begin Source File
SOURCE=.\telnet.h
# End Source File
# Begin Source File

View File

@@ -78,17 +78,95 @@
#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>
/* Silly win32 socket initialization functions */
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
static void win32_cleanup(void)
{
WSACleanup();
}
static CURLcode win32_init(void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
/* Tell the user that we couldn't find a useable */
/* winsock.dll. */
return CURLE_FAILED_INIT;
/* Confirm that the Windows Sockets DLL supports 1.1.*/
/* Note that if the DLL supports versions greater */
/* than 1.1 in addition to 1.1, it will still return */
/* 1.1 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
/* Tell the user that we couldn't find a useable */
/* winsock.dll. */
WSACleanup();
return CURLE_FAILED_INIT;
}
return CURLE_OK;
}
/* The Windows Sockets DLL is acceptable. Proceed. */
#else
static CURLcode win32_init(void) { return CURLE_OK; }
#define win32_cleanup()
#endif
/* true globals -- for curl_global_init() and curl_global_cleanup() */
static unsigned int initialized = 0;
static long init_flags = 0;
/**
* Globally initializes cURL given a bitwise set of
* the different features to initialize.
*/
CURLcode curl_global_init(long flags)
{
if(!(flags & CURL_GLOBAL_NOT_SSL))
if (initialized)
return CURLE_OK;
if (flags & CURL_GLOBAL_SSL)
Curl_SSL_init();
if (flags & CURL_GLOBAL_WIN32)
if (win32_init() != CURLE_OK)
return CURLE_FAILED_INIT;
initialized = 1;
init_flags = flags;
return CURLE_OK;
}
/**
* Globally cleanup cURL, uses the value of "init_flags" to determine
* what needs to be cleaned up and what doesn't
*/
void curl_global_cleanup(void)
{
Curl_SSL_cleanup();
if (!initialized)
return;
if (init_flags & CURL_GLOBAL_SSL)
Curl_SSL_cleanup();
if (init_flags & CURL_GLOBAL_WIN32)
win32_cleanup();
initialized = 0;
init_flags = 0;
}
CURL *curl_easy_init(void)
@@ -97,7 +175,8 @@ CURL *curl_easy_init(void)
struct UrlData *data;
/* Make sure we inited the global SSL stuff */
Curl_SSL_init();
if (!initialized)
curl_global_init(CURL_GLOBAL_DEFAULT);
/* We use curl_open() with undefined URL so far */
res = Curl_open((CURL **)&data, NULL);

View File

@@ -54,28 +54,15 @@ char *curl_escape(char *string, int length)
!(in >= 'A' && in <= 'Z') &&
!(in >= '0' && in <= '9')) {
/* encode it */
if(('%' == in) &&
(length>=2) &&
isxdigit((int)string[1]) &&
isxdigit((int)string[2]) ) {
/*
* This is an already encoded letter, leave it!
*/
memcpy(&ns[index], string, 3);
string+=2;
newlen += 2; /* the size grows with two, since this'll become a %XX */
if(newlen > alloc) {
alloc *= 2;
ns = realloc(ns, alloc);
if(!ns)
return NULL;
}
else {
/* encode this now */
sprintf(&ns[index], "%%%02X", in);
newlen += 2; /* the size grows with two, since this'll become a %XX */
if(newlen > alloc) {
alloc *= 2;
ns = realloc(ns, alloc);
if(!ns)
return NULL;
}
sprintf(&ns[index], "%%%02X", in);
}
index+=3;
}
else {

View File

@@ -115,7 +115,7 @@ int FormParse(char *input,
struct HttpPost *subpost; /* a sub-node */
unsigned int i;
if(1 <= sscanf(input, "%255[^ =] = %4095[^\n]", name, contents)) {
if(1 <= sscanf(input, "%255[^=]=%4095[^\n]", name, contents)) {
/* the input was using the correct format */
contp = contents;
@@ -634,11 +634,16 @@ int main(int argc, char **argv)
form=Curl_getFormData(httppost, &size);
FormInit(&formread, form);
Curl_FormInit(&formread, form);
while(nread = FormReader(buffer, 1, sizeof(buffer), (FILE *)&formread)) {
do {
nread = Curl_FormReader(buffer, 1, sizeof(buffer),
(FILE *)&formread);
if(-1 == nread)
break;
fwrite(buffer, nread, 1, stderr);
}
} while(1);
fprintf(stderr, "size: %d\n", size);

View File

@@ -172,7 +172,7 @@ int Curl_GetFTPResponse(int sockfd,
fd_set readfd;
struct UrlData *data = conn->data;
char *line_start;
int code;
int code=0; /* default "error code" to return */
#define SELECT_OK 0
#define SELECT_ERROR 1
@@ -680,7 +680,7 @@ CURLcode Curl_ftp_done(struct connectdata *conn)
/* 226 Transfer complete, 250 Requested file action okay, completed. */
if((ftpcode != 226) && (ftpcode != 250)) {
failf(data, "%s", buf+4);
failf(data, "server did not report OK, got %d", ftpcode);
return CURLE_FTP_WRITE_ERROR;
}
}

View File

@@ -32,18 +32,14 @@
** This code is in the public domain and has no copyright.
*/
#include "setup.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# endif
# ifdef NEED_REENTRANT
# define _REENTRANT /* Necessary to use in Solaris, since the silly guys at
Sun made the localtime_r() prototype dependent on it
(or _POSIX_C_SOURCE or _POSIX_PTHREAD_SEMANTICS) */
# endif
# ifdef HAVE_TIME_H
# include <time.h>
# endif
@@ -227,7 +223,7 @@ static int yyRelSeconds;
static int yyRelYear;
#line 210 "getdate.y"
#line 206 "getdate.y"
typedef union {
int Number;
enum _MERIDIAN Meridian;
@@ -310,11 +306,11 @@ static const short yyrhs[] = { -1,
#if YYDEBUG != 0
static const short yyrline[] = { 0,
226, 227, 230, 233, 236, 239, 242, 245, 248, 254,
260, 269, 275, 287, 290, 293, 299, 303, 307, 313,
317, 335, 341, 347, 351, 356, 360, 367, 375, 378,
381, 384, 387, 390, 393, 396, 399, 402, 405, 408,
411, 414, 417, 420, 423, 426, 429, 434, 467, 471
222, 223, 226, 229, 232, 235, 238, 241, 244, 250,
256, 265, 271, 283, 286, 289, 295, 299, 303, 309,
313, 331, 337, 343, 347, 352, 356, 363, 371, 374,
377, 380, 383, 386, 389, 392, 395, 398, 401, 404,
407, 410, 413, 416, 419, 422, 425, 430, 463, 467
};
#endif
@@ -395,7 +391,7 @@ static const short yycheck[] = { 0,
56
};
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/usr/lib/bison.simple"
#line 3 "/usr/local/share/bison.simple"
/* This file comes from bison-1.28. */
/* Skeleton output parser for bison,
@@ -609,7 +605,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
#endif
#endif
#line 217 "/usr/lib/bison.simple"
#line 217 "/usr/local/share/bison.simple"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *.
@@ -938,37 +934,37 @@ yyreduce:
switch (yyn) {
case 3:
#line 230 "getdate.y"
#line 226 "getdate.y"
{
yyHaveTime++;
;
break;}
case 4:
#line 233 "getdate.y"
#line 229 "getdate.y"
{
yyHaveZone++;
;
break;}
case 5:
#line 236 "getdate.y"
#line 232 "getdate.y"
{
yyHaveDate++;
;
break;}
case 6:
#line 239 "getdate.y"
#line 235 "getdate.y"
{
yyHaveDay++;
;
break;}
case 7:
#line 242 "getdate.y"
#line 238 "getdate.y"
{
yyHaveRel++;
;
break;}
case 9:
#line 248 "getdate.y"
#line 244 "getdate.y"
{
yyHour = yyvsp[-1].Number;
yyMinutes = 0;
@@ -977,7 +973,7 @@ case 9:
;
break;}
case 10:
#line 254 "getdate.y"
#line 250 "getdate.y"
{
yyHour = yyvsp[-3].Number;
yyMinutes = yyvsp[-1].Number;
@@ -986,7 +982,7 @@ case 10:
;
break;}
case 11:
#line 260 "getdate.y"
#line 256 "getdate.y"
{
yyHour = yyvsp[-3].Number;
yyMinutes = yyvsp[-1].Number;
@@ -998,7 +994,7 @@ case 11:
;
break;}
case 12:
#line 269 "getdate.y"
#line 265 "getdate.y"
{
yyHour = yyvsp[-5].Number;
yyMinutes = yyvsp[-3].Number;
@@ -1007,7 +1003,7 @@ case 12:
;
break;}
case 13:
#line 275 "getdate.y"
#line 271 "getdate.y"
{
yyHour = yyvsp[-5].Number;
yyMinutes = yyvsp[-3].Number;
@@ -1020,53 +1016,53 @@ case 13:
;
break;}
case 14:
#line 287 "getdate.y"
#line 283 "getdate.y"
{
yyTimezone = yyvsp[0].Number;
;
break;}
case 15:
#line 290 "getdate.y"
#line 286 "getdate.y"
{
yyTimezone = yyvsp[0].Number - 60;
;
break;}
case 16:
#line 294 "getdate.y"
#line 290 "getdate.y"
{
yyTimezone = yyvsp[-1].Number - 60;
;
break;}
case 17:
#line 299 "getdate.y"
#line 295 "getdate.y"
{
yyDayOrdinal = 1;
yyDayNumber = yyvsp[0].Number;
;
break;}
case 18:
#line 303 "getdate.y"
#line 299 "getdate.y"
{
yyDayOrdinal = 1;
yyDayNumber = yyvsp[-1].Number;
;
break;}
case 19:
#line 307 "getdate.y"
#line 303 "getdate.y"
{
yyDayOrdinal = yyvsp[-1].Number;
yyDayNumber = yyvsp[0].Number;
;
break;}
case 20:
#line 313 "getdate.y"
#line 309 "getdate.y"
{
yyMonth = yyvsp[-2].Number;
yyDay = yyvsp[0].Number;
;
break;}
case 21:
#line 317 "getdate.y"
#line 313 "getdate.y"
{
/* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
The goal in recognizing YYYY/MM/DD is solely to support legacy
@@ -1087,7 +1083,7 @@ case 21:
;
break;}
case 22:
#line 335 "getdate.y"
#line 331 "getdate.y"
{
/* ISO 8601 format. yyyy-mm-dd. */
yyYear = yyvsp[-2].Number;
@@ -1096,7 +1092,7 @@ case 22:
;
break;}
case 23:
#line 341 "getdate.y"
#line 337 "getdate.y"
{
/* e.g. 17-JUN-1992. */
yyDay = yyvsp[-2].Number;
@@ -1105,14 +1101,14 @@ case 23:
;
break;}
case 24:
#line 347 "getdate.y"
#line 343 "getdate.y"
{
yyMonth = yyvsp[-1].Number;
yyDay = yyvsp[0].Number;
;
break;}
case 25:
#line 351 "getdate.y"
#line 347 "getdate.y"
{
yyMonth = yyvsp[-3].Number;
yyDay = yyvsp[-2].Number;
@@ -1120,14 +1116,14 @@ case 25:
;
break;}
case 26:
#line 356 "getdate.y"
#line 352 "getdate.y"
{
yyMonth = yyvsp[0].Number;
yyDay = yyvsp[-1].Number;
;
break;}
case 27:
#line 360 "getdate.y"
#line 356 "getdate.y"
{
yyMonth = yyvsp[-1].Number;
yyDay = yyvsp[-2].Number;
@@ -1135,7 +1131,7 @@ case 27:
;
break;}
case 28:
#line 367 "getdate.y"
#line 363 "getdate.y"
{
yyRelSeconds = -yyRelSeconds;
yyRelMinutes = -yyRelMinutes;
@@ -1146,115 +1142,115 @@ case 28:
;
break;}
case 30:
#line 378 "getdate.y"
#line 374 "getdate.y"
{
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 31:
#line 381 "getdate.y"
#line 377 "getdate.y"
{
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 32:
#line 384 "getdate.y"
#line 380 "getdate.y"
{
yyRelYear += yyvsp[0].Number;
;
break;}
case 33:
#line 387 "getdate.y"
#line 383 "getdate.y"
{
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 34:
#line 390 "getdate.y"
#line 386 "getdate.y"
{
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 35:
#line 393 "getdate.y"
#line 389 "getdate.y"
{
yyRelMonth += yyvsp[0].Number;
;
break;}
case 36:
#line 396 "getdate.y"
#line 392 "getdate.y"
{
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 37:
#line 399 "getdate.y"
#line 395 "getdate.y"
{
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 38:
#line 402 "getdate.y"
#line 398 "getdate.y"
{
yyRelDay += yyvsp[0].Number;
;
break;}
case 39:
#line 405 "getdate.y"
#line 401 "getdate.y"
{
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 40:
#line 408 "getdate.y"
#line 404 "getdate.y"
{
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 41:
#line 411 "getdate.y"
#line 407 "getdate.y"
{
yyRelHour += yyvsp[0].Number;
;
break;}
case 42:
#line 414 "getdate.y"
#line 410 "getdate.y"
{
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 43:
#line 417 "getdate.y"
#line 413 "getdate.y"
{
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 44:
#line 420 "getdate.y"
#line 416 "getdate.y"
{
yyRelMinutes += yyvsp[0].Number;
;
break;}
case 45:
#line 423 "getdate.y"
#line 419 "getdate.y"
{
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 46:
#line 426 "getdate.y"
#line 422 "getdate.y"
{
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 47:
#line 429 "getdate.y"
#line 425 "getdate.y"
{
yyRelSeconds += yyvsp[0].Number;
;
break;}
case 48:
#line 435 "getdate.y"
#line 431 "getdate.y"
{
if (yyHaveTime && yyHaveDate && !yyHaveRel)
yyYear = yyvsp[0].Number;
@@ -1287,20 +1283,20 @@ case 48:
;
break;}
case 49:
#line 468 "getdate.y"
#line 464 "getdate.y"
{
yyval.Meridian = MER24;
;
break;}
case 50:
#line 472 "getdate.y"
#line 468 "getdate.y"
{
yyval.Meridian = yyvsp[0].Meridian;
;
break;}
}
/* the action file gets copied in in place of this dollarsign */
#line 543 "/usr/lib/bison.simple"
#line 543 "/usr/local/share/bison.simple"
yyvsp -= yylen;
yyssp -= yylen;
@@ -1520,7 +1516,7 @@ yyerrhandle:
}
return 1;
}
#line 477 "getdate.y"
#line 473 "getdate.y"
/* Include this file down here because bison inserts code above which

View File

@@ -8,18 +8,14 @@
** This code is in the public domain and has no copyright.
*/
#include "setup.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# endif
# ifdef NEED_REENTRANT
# define _REENTRANT /* Necessary to use in Solaris, since the silly guys at
Sun made the localtime_r() prototype dependent on it
(or _POSIX_C_SOURCE or _POSIX_PTHREAD_SEMANTICS) */
# endif
# ifdef HAVE_TIME_H
# include <time.h>
# endif

View File

@@ -34,13 +34,6 @@
#include <errno.h>
#ifdef NEED_REENTRANT
#define _REENTRANT /* Necessary to use in Solaris, since the silly guys at Sun
made the localtime_r() prototype dependent on it (or
_POSIX_C_SOURCE or _POSIX_PTHREAD_SEMANTICS). */
#endif
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#include <winsock.h>
#include <time.h>
@@ -368,7 +361,7 @@ CURLcode Curl_http_done(struct connectdata *conn)
data=conn->data;
http=conn->proto.http;
if(data->bits.http_formpost) {
if(HTTPREQ_POST_FORM == data->httpreq) {
*bytecount = http->readbytecount + http->writebytecount;
Curl_FormFree(http->sendit); /* Now free that whole lot */
@@ -376,7 +369,7 @@ CURLcode Curl_http_done(struct connectdata *conn)
data->fread = http->storefread; /* restore */
data->in = http->in; /* restore */
}
else if(data->bits.http_put) {
else if(HTTPREQ_PUT == data->httpreq) {
*bytecount = http->readbytecount + http->writebytecount;
}
@@ -412,7 +405,7 @@ CURLcode Curl_http(struct connectdata *conn)
if ( (conn->protocol&(PROT_HTTP|PROT_FTP)) &&
data->bits.upload) {
data->bits.http_put=1;
data->httpreq = HTTPREQ_PUT;
}
/* The User-Agent string has been built in url.c already, because it might
@@ -464,7 +457,7 @@ CURLcode Curl_http(struct connectdata *conn)
/* The path sent to the proxy is in fact the entire URL */
ppath = data->url;
}
if(data->bits.http_formpost) {
if(HTTPREQ_POST_FORM == data->httpreq) {
/* we must build the whole darned post sequence first, so that we have
a size of the whole shebang before we start to send it */
http->sendit = Curl_getFormData(data->httppost, &http->postsize);
@@ -495,9 +488,9 @@ CURLcode Curl_http(struct connectdata *conn)
if(!checkheaders(data, "Accept:"))
http->p_accept = "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n";
if((data->bits.http_post ||
data->bits.http_formpost ||
data->bits.http_put) &&
if(( (HTTPREQ_POST == data->httpreq) ||
(HTTPREQ_POST_FORM == data->httpreq) ||
(HTTPREQ_PUT == data->httpreq) ) &&
conn->resume_from) {
/**********************************************************************
* Resuming upload in HTTP means that we PUT or POST and that we have
@@ -604,8 +597,9 @@ CURLcode Curl_http(struct connectdata *conn)
data->customrequest?data->customrequest:
(data->bits.no_body?"HEAD":
(data->bits.http_post || data->bits.http_formpost)?"POST":
(data->bits.http_put)?"PUT":"GET"),
((HTTPREQ_POST == data->httpreq) ||
(HTTPREQ_POST_FORM == data->httpreq))?"POST":
(HTTPREQ_PUT == data->httpreq)?"PUT":"GET"),
ppath,
(conn->bits.proxy_user_passwd &&
conn->allocptr.proxyuserpwd)?conn->allocptr.proxyuserpwd:"",
@@ -710,7 +704,7 @@ CURLcode Curl_http(struct connectdata *conn)
headers = headers->next;
}
if(data->bits.http_formpost) {
if(HTTPREQ_POST_FORM == data->httpreq) {
if(Curl_FormInit(&http->form, http->sendit)) {
failf(data, "Internal HTTP POST error!\n");
return CURLE_HTTP_POST_ERROR;
@@ -741,7 +735,7 @@ CURLcode Curl_http(struct connectdata *conn)
return result;
}
}
else if(data->bits.http_put) {
else if(HTTPREQ_PUT == data->httpreq) {
/* Let's PUT the data to the server! */
if(data->infilesize>0) {
@@ -769,7 +763,7 @@ CURLcode Curl_http(struct connectdata *conn)
}
else {
if(data->bits.http_post) {
if(HTTPREQ_POST == data->httpreq) {
/* this is the simple POST, using x-www-form-urlencoded style */
if(!checkheaders(data, "Content-Length:"))

View File

@@ -34,10 +34,6 @@
#if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__)
#ifdef NEED_REENTRANT
#define _REENTRANT
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif

View File

@@ -82,7 +82,7 @@ struct krb4_data {
#ifndef HAVE_STRLCPY
/* if it ever goes non-static, make it Curl_ prefixed! */
size_t static
static size_t
strlcpy (char *dst, const char *src, size_t dst_sz)
{
size_t n;

View File

@@ -7,26 +7,28 @@ LIBRARY LIBCURL
DESCRIPTION 'curl libcurl - http://curl.haxx.se'
EXPORTS
curl_easy_cleanup @ 1 ;
curl_easy_getinfo @ 2 ;
curl_easy_init @ 3 ;
curl_easy_perform @ 4 ;
curl_easy_setopt @ 5 ;
curl_escape @ 6 ;
curl_formparse @ 7 ;
curl_formfree @ 8 ;
curl_getdate @ 9 ;
curl_getenv @ 10 ;
curl_slist_append @ 11 ;
curl_slist_free_all @ 12 ;
curl_unescape @ 13 ;
curl_version @ 14 ;
curl_maprintf @ 15 ;
curl_mfprintf @ 16 ;
curl_mprintf @ 17 ;
curl_msprintf @ 18 ;
curl_msnprintf @ 19 ;
curl_mvfprintf @ 20 ;
curl_strequal @ 21 ;
curl_strnequal @ 22 ;
curl_easy_cleanup @ 1 ;
curl_easy_getinfo @ 2 ;
curl_easy_init @ 3 ;
curl_easy_perform @ 4 ;
curl_easy_setopt @ 5 ;
curl_escape @ 6 ;
curl_unescape @ 7;
curl_formparse @ 8 ;
curl_formfree @ 9 ;
curl_getdate @ 10 ;
curl_getenv @ 11 ;
curl_global_cleanup @ 12 ;
curl_global_init @ 13 ;
curl_slist_append @ 14 ;
curl_slist_free_all @ 15 ;
curl_version @ 16 ;
curl_maprintf @ 17 ;
curl_mfprintf @ 18 ;
curl_mprintf @ 19 ;
curl_msprintf @ 20 ;
curl_msnprintf @ 21 ;
curl_mvfprintf @ 22 ;
curl_strequal @ 23 ;
curl_strnequal @ 24 ;

View File

@@ -97,7 +97,9 @@ void Curl_pgrsDone(struct connectdata *conn)
if(!(data->progress.flags & PGRS_HIDE)) {
data->progress.lastshow=0;
Curl_pgrsUpdate(conn); /* the final (forced) update */
fprintf(data->err, "\n");
if(!data->progress.callback)
/* only output if we don't use progress callback */
fprintf(data->err, "\n");
}
}

View File

@@ -142,11 +142,6 @@ void Curl_failf(struct UrlData *data, char *fmt, ...)
va_start(ap, fmt);
if(data->errorbuffer)
vsnprintf(data->errorbuffer, CURL_ERROR_SIZE, fmt, ap);
else if(!data->bits.mute) {
/* no errorbuffer receives this, write to data->err instead */
vfprintf(data->err, fmt, ap);
fprintf(data->err, "\n");
}
va_end(ap);
}
@@ -235,7 +230,8 @@ CURLcode Curl_client_write(struct UrlData *data,
return CURLE_WRITE_ERROR;
}
}
if((type & CLIENTWRITE_HEADER) && data->writeheader) {
if((type & CLIENTWRITE_HEADER) &&
(data->fwrite_header || data->writeheader) ) {
/*
* Write headers to the same callback or to the especially setup
* header callback function (added after version 7.7.1).

View File

@@ -44,6 +44,14 @@
typedef char bool;
#endif /* (rabe) */
#ifdef NEED_REENTRANT
/* Solaris machines needs _REENTRANT set for a few function prototypes and
things to appear in the #include files. We need to #define it before all
#include files */
#define _REENTRANT
#endif
#include <stdio.h>
#ifndef OS
#ifdef WIN32

View File

@@ -230,7 +230,7 @@ int cert_verify_callback(int ok, X509_STORE_CTX *ctx)
err_cert=X509_STORE_CTX_get_current_cert(ctx);
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);
return 1;
return ok;
}
#endif
@@ -316,7 +316,7 @@ Curl_SSLConnect(struct connectdata *conn)
if(data->cert) {
if (!cert_stuff(conn, data->cert, data->cert)) {
failf(data, "couldn't use certificate!\n");
/* failf() is already done in cert_stuff() */
return CURLE_SSL_CONNECT_ERROR;
}
}

View File

@@ -24,14 +24,14 @@
#ifndef _CURL_STRTOK_R_H
#define _CURL_STRTOK_R_H
#include <stddef.h>
#include "setup.h"
#include <stddef.h>
#ifndef HAVE_STRTOK_R
char *Curl_strtok_r(char *s, const char *delim, char **last);
#define strtok_r Curl_strtok_r
#else
extern char *strtok_r(char *s1, const char *s2, char **lasts);
#include <string.h>
#endif
#endif

View File

@@ -194,7 +194,7 @@ Transfer(struct connectdata *c_conn)
int offset = 0; /* possible resume offset read from the
Content-Range: header */
int httpcode = 0; /* error code from the 'HTTP/1.? XXX' line */
int httpversion = -1; /* the last digit in the HTTP/1.1 string */
int httpversion = -1; /* the HTTP version*10 */
/* for the low speed checks: */
CURLcode urg;
@@ -302,6 +302,7 @@ Transfer(struct connectdata *c_conn)
we bail out from this! */
else if (0 >= (signed int) nread) {
keepon &= ~KEEP_READ;
FD_ZERO(&rkeepfd);
break;
}
@@ -464,8 +465,21 @@ Transfer(struct connectdata *c_conn)
if (!headerline++) {
/* This is the first header, it MUST be the error code line
or else we consiser this to be the body right away! */
if (2 == sscanf (p, " HTTP/1.%d %3d", &httpversion,
&httpcode)) {
int httpversion_major;
int nc=sscanf (p, " HTTP/%d.%d %3d",
&httpversion_major ,&httpversion, &httpcode);
if (nc==3) {
httpversion+=10*httpversion_major;
}
else {
/* this is the real world, not a Nirvana
NCSA 1.5.x returns this crap when asked for HTTP/1.1
*/
nc=sscanf (p, " HTTP %3d", &httpcode);
httpversion = 10;
}
if (nc) {
data->progress.httpcode = httpcode;
data->progress.httpversion = httpversion;
@@ -484,7 +498,7 @@ Transfer(struct connectdata *c_conn)
return CURLE_HTTP_NOT_FOUND;
}
if(httpversion == 0)
if(httpversion == 10)
/* Default action for HTTP/1.0 must be to close, unless
we get one of those fancy headers that tell us the
server keeps it open for us! */
@@ -510,7 +524,7 @@ Transfer(struct connectdata *c_conn)
conn->size = contentlength;
Curl_pgrsSetDownloadSize(data, contentlength);
}
else if((httpversion == 0) &&
else if((httpversion == 10) &&
conn->bits.httpproxy &&
compareheader(p, "Proxy-Connection:", "keep-alive")) {
/*
@@ -522,7 +536,7 @@ Transfer(struct connectdata *c_conn)
conn->bits.close = FALSE; /* don't close when done */
infof(data, "HTTP/1.0 proxy connection set to keep alive!\n");
}
else if((httpversion == 0) &&
else if((httpversion == 10) &&
compareheader(p, "Connection:", "keep-alive")) {
/*
* A HTTP/1.0 reply with the 'Connection: keep-alive' line
@@ -711,6 +725,7 @@ Transfer(struct connectdata *c_conn)
else if(CHUNKE_STOP == res) {
/* we're done reading chunks! */
keepon &= ~KEEP_READ; /* read no more */
FD_ZERO(&rkeepfd);
/* There are now possibly N number of bytes at the end of the
str buffer that weren't written to the client, but we don't
@@ -724,7 +739,9 @@ Transfer(struct connectdata *c_conn)
nread = conn->maxdownload - bytecount;
if((signed int)nread < 0 ) /* this should be unusual */
nread = 0;
keepon &= ~KEEP_READ; /* we're done reading */
FD_ZERO(&rkeepfd);
}
bytecount += nread;
@@ -758,6 +775,7 @@ Transfer(struct connectdata *c_conn)
if ((signed int)nread<=0) {
/* done */
keepon &= ~KEEP_WRITE; /* we're done writing */
FD_ZERO(&wkeepfd);
break;
}
writebytecount += nread;
@@ -1041,10 +1059,8 @@ CURLcode Curl_perform(CURL *curl)
case 303: /* See Other */
/* Disable both types of POSTs, since doing a second POST when
* following isn't what anyone would want! */
data->bits.http_post = FALSE;
data->bits.http_formpost = FALSE;
data->httpreq = HTTPREQ_GET; /* enfore GET request */
infof(data, "Disables POST\n");
data->httpreq = HTTPREQ_GET; /* enforce GET request */
infof(data, "Disables POST, goes with GET\n");
break;
case 304: /* Not Modified */
/* 304 means we did a conditional request and it was "Not modified".

View File

@@ -231,6 +231,10 @@ CURLcode Curl_open(CURL **curl, char *url)
data->httpreq = HTTPREQ_GET; /* Default HTTP request */
/* make libcurl quiet by default: */
data->bits.hide_progress = TRUE; /* CURLOPT_NOPROGRESS changes these */
data->progress.flags |= PGRS_HIDE;
/* create an array with connection data struct pointers */
data->numconnects = 5; /* hard-coded right now */
data->connects = (struct connectdata **)
@@ -363,6 +367,8 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
data->bits.hide_progress = va_arg(param, long)?TRUE:FALSE;
if(data->bits.hide_progress)
data->progress.flags |= PGRS_HIDE;
else
data->progress.flags &= ~PGRS_HIDE;
break;
case CURLOPT_NOBODY:
/*
@@ -426,18 +432,21 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
break;
case CURLOPT_PUT:
/*
* Use the HTTP PUT request to transfer data.
* Use the HTTP PUT request to transfer data if this is TRUE. If this is
* FALSE, don't set the httpreq. We can't know what to revert it to!
*/
data->bits.http_put = va_arg(param, long)?TRUE:FALSE;
if(data->bits.http_put)
if(va_arg(param, long))
data->httpreq = HTTPREQ_PUT;
break;
#if 0
/* obsolete stuff, kept here a while for informational purposes */
case CURLOPT_MUTE:
/*
* Stay absolutely quiet.
*/
data->bits.mute = va_arg(param, long)?TRUE:FALSE;
break;
#endif
case CURLOPT_TIMECONDITION:
/*
* Set HTTP time condition. This must be one of the defines in the
@@ -471,9 +480,9 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
break;
case CURLOPT_WRITEHEADER:
/*
* Callback function for header data
* Custom pointer to pass the header write callback function
*/
data->writeheader = (FILE *)va_arg(param, FILE *);
data->writeheader = (void *)va_arg(param, void *);
break;
case CURLOPT_COOKIE:
/*
@@ -520,10 +529,18 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
* Set to make us do HTTP POST
*/
data->httppost = va_arg(param, struct HttpPost *);
data->bits.http_formpost = data->httppost?1:0;
if(data->bits.http_formpost)
if(data->httppost)
data->httpreq = HTTPREQ_POST_FORM;
break;
case CURLOPT_HTTPGET:
/*
* Set to force us do HTTP GET
*/
if(va_arg(param, long))
data->httpreq = HTTPREQ_GET;
break;
case CURLOPT_INFILE:
/*
* FILE pointer to read the file to be uploaded from. Or possibly
@@ -566,8 +583,8 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
break;
case CURLOPT_POST:
/* Does this option serve a purpose anymore? */
data->bits.http_post = va_arg(param, long)?TRUE:FALSE;
if(data->bits.http_post)
if(va_arg(param, long))
data->httpreq = HTTPREQ_POST;
break;
case CURLOPT_POSTFIELDS:
@@ -575,8 +592,7 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
* A string with POST data. Makes curl HTTP POST.
*/
data->postfields = va_arg(param, char *);
data->bits.http_post = data->postfields?TRUE:FALSE;
if(data->bits.http_post)
if(data->postfields)
data->httpreq = HTTPREQ_POST;
break;
case CURLOPT_POSTFIELDSIZE:
@@ -2068,8 +2084,15 @@ static CURLcode Connect(struct UrlData *data,
/* tell ourselves to fetch this range */
conn->range = strdup(resumerange);
conn->bits.use_range = TRUE; /* enable range download */
conn->bits.rangestringalloc = TRUE; /* mark range string allocated */
}
else if (data->set_range) {
/* There is a range, but is not a resume, useful for random ftp access */
conn->range = strdup(data->set_range);
conn->bits.rangestringalloc = TRUE; /* mark range string allocated */
conn->bits.use_range = TRUE; /* enable range download */
}
*in_connect = conn; /* return this instead! */

View File

@@ -382,12 +382,6 @@ typedef enum {
/* This struct is for boolean settings that define how to behave during
this session. */
struct Configbits {
/* these four request types mirror the httpreq field */
bool http_formpost;
bool http_post;
bool http_put;
bool http_get;
bool get_filetime;
bool tunnel_thru_httpproxy;
bool ftp_append;
@@ -401,7 +395,6 @@ struct Configbits {
bool http_set_referer;
bool http_auto_referer; /* set "correct" referer when following location: */
bool httpproxy;
bool mute;
bool no_body;
bool set_port;
bool set_range;

View File

@@ -1 +1,2 @@
EXTRA_DIST = README getpageinvar.php simpleget.php simplepost.php
EXTRA_DIST = README getpageinvar.php getbinarypageinvar.php simpleget.php \
simplepost.php

View File

@@ -6,6 +6,9 @@
PHP program examples
getbinarypageinvar.php
- Fetch a single URL containing binary data and return it into a variable
getpageinvar.php
- Fetch a single URL and return in a variable

View File

@@ -0,0 +1,25 @@
<?php
// Allocate a new cURL handle
$ch = curl_init("http://www.designmultimedia.com/intro.jpg");
if (! $ch) {
die( "Cannot allocate a new PHP-CURL handle" );
}
// We'll be returning this transfer, and the data is binary
// so we don't want to NULL terminate
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
// Grab the jpg and save the contents in the $data variable
$data = curl_exec($ch);
// close the connection
curl_close($ch);
// Set the header to type image/jpeg, since that's what we're
// displaying
header("Content-type: image/jpeg");
// Output the image
print( $data );
?>

View File

@@ -1,10 +1,12 @@
#
# The PHP curl module supports the received page to be returned in a variable
# if told.
#
<?php
//
// The PHP curl module supports the received page to be returned in a variable
// if told.
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.myurl.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
?>

View File

@@ -1,6 +1,7 @@
#
# A very simple example that gets a HTTP page.
#
<?php
//
// A very simple example that gets a HTTP page.
//
$ch = curl_init();
@@ -10,4 +11,4 @@ curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
?>

View File

@@ -1,6 +1,7 @@
#
# A very simple PHP example that sends a HTTP POST to a remote site
#
<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
@@ -10,3 +11,4 @@ curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=v
curl_exec ($ch);
curl_close ($ch);
?>

2039
src/hugehelp.c.cvs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -126,52 +126,6 @@ char *strdup(char *str)
extern void hugehelp(void);
/***********************************************************************
* Start with some silly functions to make win32-systems survive
***********************************************************************/
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
static void win32_cleanup(void)
{
WSACleanup();
}
static CURLcode win32_init(void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
/* Tell the user that we couldn't find a useable */
/* winsock.dll. */
return CURLE_FAILED_INIT;
/* Confirm that the Windows Sockets DLL supports 1.1.*/
/* Note that if the DLL supports versions greater */
/* than 1.1 in addition to 1.1, it will still return */
/* 1.1 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
/* Tell the user that we couldn't find a useable */
/* winsock.dll. */
WSACleanup();
return CURLE_FAILED_INIT;
}
return CURLE_OK;
}
/* The Windows Sockets DLL is acceptable. Proceed. */
#else
static CURLcode win32_init(void) { return CURLE_OK; }
#define win32_cleanup()
#endif
/*
* This is the main global constructor for the app. Call this before
* _any_ libcurl usage. If this fails, *NO* libcurl functions may be
@@ -179,8 +133,7 @@ static CURLcode win32_init(void) { return CURLE_OK; }
*/
CURLcode main_init(void)
{
curl_global_init(CURL_GLOBAL_DEFAULT);
return win32_init();
return curl_global_init(CURL_GLOBAL_DEFAULT);
}
/*
@@ -189,7 +142,6 @@ CURLcode main_init(void)
*/
void main_free(void)
{
win32_cleanup();
curl_global_cleanup();
}
@@ -309,6 +261,7 @@ struct Configurable {
char *useragent;
char *cookie;
bool use_resume;
bool resume_from_current;
int resume_from;
char *postfields;
long postfieldsize;
@@ -757,8 +710,14 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
case 'C':
/* This makes us continue an ftp transfer at given position */
if(!strequal(nextarg, "-"))
if(!strequal(nextarg, "-")) {
config->resume_from= atoi(nextarg);
config->resume_from_current = FALSE;
}
else {
config->resume_from_current = TRUE;
config->resume_from = 0;
}
config->use_resume=TRUE;
break;
case 'd':
@@ -1639,7 +1598,7 @@ operate(struct Configurable *config, int argc, char *argv[])
free(storefile);
}
if((0 == config->resume_from) && config->use_resume) {
if(config->resume_from_current) {
/* we're told to continue where we are now, then we get the size of
the file as it is now and open it for append instead */
@@ -1707,8 +1666,7 @@ operate(struct Configurable *config, int argc, char *argv[])
}
if((config->conf&CONF_UPLOAD) &&
config->use_resume &&
(0==config->resume_from)) {
config->resume_from_current) {
config->resume_from = -1; /* -1 will then force get-it-yourself */
}
if(config->headerfile) {

View File

@@ -1,3 +1,3 @@
#define CURL_NAME "curl"
#define CURL_VERSION "7.8-pre2"
#define CURL_VERSION "7.8.1-pre3"
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "

View File

@@ -1,5 +1,5 @@
EXTRA_DIST = ftpserver.pl httpserver.pl runtests.pl ftpsserver.pl stunnel.pm \
getpart.pm
EXTRA_DIST = ftpserver.pl httpserver.pl httpsserver.pl runtests.pl \
ftpsserver.pl stunnel.pm getpart.pm
SUBDIRS = data

View File

@@ -5,6 +5,7 @@ test:
[ -f test1 ] || ln -s $(srcdir)/test* .
EXTRA_DIST = \
test1 test11 test14 test3 test400 test7 \
test10 test12 test2 test300 test5 test8 \
test100 test13 test200 test4 test6 test9
test1 test102 test106 test13 test17 test300 test43 test8 \
test10 test103 test107 test14 test2 test33 test5 test9 \
test100 test104 test11 test15 test200 test4 test6 \
test101 test105 test12 test16 test3 test400 test7

44
tests/data/test101 Normal file
View File

@@ -0,0 +1,44 @@
# Server-side
<reply>
<data>
total 20
drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
-r--r--r-- 1 0 1 35 Jul 16 1996 README
lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
</data>
</reply>
# Client-side
<client>
<name>
FTP dir list, PORT with specified IP
</name>
<command>
ftp://%HOSTIP:%FTPPORT/ -P %HOSTIP
</command>
</test>
# Verify data after the test has been "shot"
<verify>
# strip all kinds of PORT, EPRT and LPRT curl can do
<strip>
^PORT 127,0,0,1,.*
^EPRT.*
^LPRT.*
</strip>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
PORT 127,0,0,1,243,212
TYPE A
LIST
</protocol>
</verify>

33
tests/data/test102 Normal file
View File

@@ -0,0 +1,33 @@
# Server-side
<reply>
<data>
data
to
see
that FTP
works
so does it?
</data>
</reply>
# Client-side
<client>
<name>
FTP RETR PASV
</name>
<command>
ftp://%HOSTIP:%FTPPORT/102
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
PASV
TYPE I
RETR 102
</protocol>
</verify>

39
tests/data/test103 Normal file
View File

@@ -0,0 +1,39 @@
# Server-side
<reply>
<data>
data
to
see
that FTP
works
so does it?
</data>
</reply>
# Client-side
<client>
<name>
FTP RETR PORT with CWD
</name>
<command>
ftp://%HOSTIP:%FTPPORT/a/path/103 -P -
</command>
</test>
# 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 a/path
PORT 127,0,0,1,246,33
TYPE I
RETR 103
</protocol>
</verify>

29
tests/data/test104 Normal file
View File

@@ -0,0 +1,29 @@
# Server-side
<reply>
<size>
51
</size>
</reply>
# Client-side
<client>
<name>
FTP --head to get file size only
</name>
<command>
ftp://%HOSTIP:%FTPPORT/a/path/103 --head
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
CWD a/path
MDTM 103
TYPE I
SIZE 103
</protocol>
</verify>

33
tests/data/test105 Normal file
View File

@@ -0,0 +1,33 @@
# Server-side
<reply>
<data>
data
to
see
that FTP
works
so does it?
</data>
</reply>
# Client-side
<client>
<name>
FTP user+password in URL and ASCII transfer
</name>
<command>
ftp://userdude:passfellow@%HOSTIP:%FTPPORT/103 --use-ascii
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<protocol>
USER userdude
PASS passfellow
PWD
PASV
TYPE A
RETR 103
</protocol>
</verify>

34
tests/data/test106 Normal file
View File

@@ -0,0 +1,34 @@
# Server-side
<reply>
<data>
data
to
see
that FTP
works
so does it?
</data>
</reply>
# Client-side
<client>
<name>
FTP GET with type=A style ASCII URL using %20 codes
</name>
<command>
"ftp://%HOSTIP:%FTPPORT//path%20with%20%20spaces/and%20things2/106;type=A"
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
CWD /path with spaces/and things2
PASV
TYPE A
RETR 106
</protocol>
</verify>

38
tests/data/test107 Normal file
View File

@@ -0,0 +1,38 @@
# Client-side
<client>
<name>
FTP PASV upload file
</name>
<file name="log/test107.txt">
data
to
see
that FTP
works
so does it?
</file>
<command>
ftp://%HOSTIP:%FTPPORT/107 -T log/test107.txt
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<upload>
data
to
see
that FTP
works
so does it?
</upload>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
PASV
TYPE I
STOR 107
</protocol>
</verify>

44
tests/data/test15 Normal file
View File

@@ -0,0 +1,44 @@
# Server-side
<reply>
<data nocheck=true>
HTTP/1.4 200 OK
Fake: yes
Fake: yes
Fake: yes
Repeated nonsense-headers
</data>
</reply>
# Client-side
<client>
<name>
--write-out test
</name>
<command>
http://%HOSTIP:%HOSTPORT/want/15 --write-out '%{url_effective} %{http_code} %{size_download}\n'
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<stdout>
HTTP/1.4 200 OK
Fake: yes
Fake: yes
Fake: yes
Repeated nonsense-headers
http://127.0.0.1:8999/want/15 200 26
</stdout>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /want/15 HTTP/1.1
Host: 127.0.0.1:8999
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
</protocol>
</verify>

37
tests/data/test16 Normal file
View File

@@ -0,0 +1,37 @@
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Funny-head: yesyes
the content goes here
</data>
</reply>
# Client-side
<client>
<name>
HTTP with proxy athorization
</name>
<command>
-U fake@user:<3A><><EFBFBD>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong -x %HOSTIP:%HOSTPORT http://we.want.that.site.com/16
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET http://we.want.that.site.com/16 HTTP/1.1
Proxy-authorization: Basic ZmFrZUB1c2VyOqenp2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28=
Host: we.want.that.site.com
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
</protocol>
</verify>

42
tests/data/test17 Normal file
View File

@@ -0,0 +1,42 @@
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Funny-head: yesyes
This is the proof it works
</data>
</reply>
# Client-side
<client>
<name>
HTTP with config file on stdin
</name>
<stdin>
#
# Use a silly request without '--':
request MOOO
#
# Set the user-agent using a short-option:
-A "agent007 license to drill\t"
#
# long option *with* '--':
--max-time 180
</stdin>
<command>
-K - %HOSTIP:%HOSTPORT/that.site.com/17
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<protocol>
MOOO /that.site.com/17 HTTP/1.1
User-Agent: agent007 license to drill
Host: 127.0.0.1:8999
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
</protocol>
</verify>

50
tests/data/test33 Normal file
View File

@@ -0,0 +1,50 @@
# Server-side
<reply>
<data>
</data>
</reply>
# Client-side
<client>
<name>
HTTP PUT with resume
</name>
<file name="log/test33.txt">
012345678
012345678
012345678
012345678
012345678
012345678
012345678
012345678
012345678
012345678
</file>
<command>
http://%HOSTIP:%HOSTPORT/33 -Tlog/test33.txt -C 50
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
PUT /33 HTTP/1.1
Content-Range: bytes 50-99/100
User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)
Host: 127.0.0.1:8999
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Content-Length: 50
012345678
012345678
012345678
012345678
012345678
</protocol>
</verify>

64
tests/data/test43 Normal file
View File

@@ -0,0 +1,64 @@
# Server-side
<reply>
<data>
HTTP/1.1 301 This is a weirdo text message
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Location: data/110002.txt?coolsite=yes
Connection: close
This server reply is for testing a simple Location: following
</data>
<data2>
HTTP/1.1 200 Followed here fine
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
If this is received, the location following worked
</data2>
<datacheck>
HTTP/1.1 301 This is a weirdo text message
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Location: data/110002.txt?coolsite=yes
Connection: close
HTTP/1.1 200 Followed here fine
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
If this is received, the location following worked
</datacheck>
</reply>
# Client-side
<client>
<name>
HTTP Location: following over HTTP proxy
</name>
<command>
http://%HOSTIP:%HOSTPORT/want/11 -L -x %HOSTIP:%HOSTPORT
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET http://127.0.0.1:8999/want/11 HTTP/1.1
Host: 127.0.0.1:8999
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
GET http://127.0.0.1:8999/want/data/110002.txt?coolsite=yes HTTP/1.1
Host: 127.0.0.1:8999
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
</protocol>
</verify>

View File

@@ -162,11 +162,9 @@ sub SIZE_command {
logmsg "SIZE number $testno\n";
my $filename = "data/reply$testno.txt";
my @data = getpart("reply", "size");
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($filename);
my $size = $data[0];
if($size) {
print "213 $size\r\n";
@@ -198,7 +196,7 @@ sub RETR_command {
my $size=0;
for(@data) {
$size =+ length($_);
$size += length($_);
}
if($size) {
@@ -206,10 +204,16 @@ sub RETR_command {
if($rest) {
# move read pointer forward
$size -= $rest;
if($verbose) {
print STDERR "** REST $rest was removed from size.\n";
}
}
print "150 Binary data connection for $testno () ($size bytes).\r\n";
$rest=0; # reset rest again
if($verbose) {
print STDERR "150 Binary data connection for $testno ($size bytes).\n";
}
for(@data) {
print SOCK $_;
}
@@ -219,6 +223,9 @@ sub RETR_command {
}
else {
print "550 $testno: No such file or directory.\r\n";
if($verbose) {
print STDERR "550 $testno: no such file\n";
}
}
return 0;
}

View File

@@ -470,7 +470,7 @@ sub singletest {
# run curl, add -v for debug information output
my $cmdargs="$out--include -v $cmd";
my @stdintest = getpart("verify", "stdin");
my @stdintest = getpart("client", "stdin");
if(@stdintest) {
my $stdinfile="$LOGDIR/stdin-for-$testnum";
@@ -514,7 +514,7 @@ sub singletest {
if(!$short) {
print "curl returned $res\n";
}
print " error FAILED";
print " error FAILED\n";
return 1;
}
}
@@ -525,7 +525,7 @@ sub singletest {
$res = compare(\@actual, \@validstdout);
if($res) {
print " stdout FAILED";
print " stdout FAILED\n";
return 1;
}
if(!$short) {
@@ -533,12 +533,14 @@ sub singletest {
}
}
if(@reply) {
my %replyattr = getpartattr("reply", "data");
if(!$replyattr{'nocheck'} &&
@reply) {
# verify the received data
my @out = loadarray($CURLOUT);
$res = compare(\@out, \@reply);
if ($res) {
print " data FAILED";
print " data FAILED\n";
return 1;
}
if(!$short) {
@@ -551,7 +553,7 @@ sub singletest {
my @out = loadarray("$LOGDIR/upload.$testnum");
$res = compare(\@out, \@upload);
if ($res) {
print " upload FAILED";
print " upload FAILED\n";
return 1;
}
if(!$short) {
@@ -565,13 +567,18 @@ sub singletest {
# what to cut off from the live protocol sent by curl
my @strip = getpart("verify", "strip");
@out = striparray( $strip[0], \@out);
my @protstrip= striparray($strip[0], \@protocol);
my @protstrip=@protocol;
for(@strip) {
# strip all patterns from both arrays
@out = striparray( $_, \@out);
@protstrip= striparray( $_, \@protstrip);
}
$res = compare(\@out, \@protstrip);
if($res) {
print " protocol FAILED";
print " protocol FAILED\n";
return 1;
}
if(!$short) {
@@ -593,7 +600,7 @@ sub singletest {
$res = compare(\@generated, \@outfile);
if($res) {
print " output FAILED";
print " output FAILED\n";
return 1;
}
if(!$short) {