Compare commits
95 Commits
curl-7_8-p
...
curl-7_8_1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a6a3673804 | ||
![]() |
944f9a73f4 | ||
![]() |
5ab1a10e9c | ||
![]() |
1813d2ddf7 | ||
![]() |
2827f5327a | ||
![]() |
47bb09e908 | ||
![]() |
7f21669ef2 | ||
![]() |
3a145180cc | ||
![]() |
f24d54a9c4 | ||
![]() |
9478d796a3 | ||
![]() |
00b00c6931 | ||
![]() |
e791f6ec58 | ||
![]() |
8987244758 | ||
![]() |
9b69f6faab | ||
![]() |
e7b966b9eb | ||
![]() |
e7801afed1 | ||
![]() |
929366b5ae | ||
![]() |
e1d8c5daa7 | ||
![]() |
2b44fdab2e | ||
![]() |
3e0a95bb78 | ||
![]() |
f0efa89484 | ||
![]() |
45037a39aa | ||
![]() |
31336d63ae | ||
![]() |
2c39a4381a | ||
![]() |
532624bafe | ||
![]() |
8469918306 | ||
![]() |
9646a8b346 | ||
![]() |
5e2a74fcc4 | ||
![]() |
813d7585c7 | ||
![]() |
ae55c1c144 | ||
![]() |
1a6143feba | ||
![]() |
b70a4227b3 | ||
![]() |
7d82bc81a2 | ||
![]() |
be449bdea1 | ||
![]() |
798aaf0c0a | ||
![]() |
6f2fca53ad | ||
![]() |
cd4aed6690 | ||
![]() |
fa601af722 | ||
![]() |
303b3cf41c | ||
![]() |
fc535aa086 | ||
![]() |
cd33795903 | ||
![]() |
c9d233d34a | ||
![]() |
bd192d5387 | ||
![]() |
4ac7a087c6 | ||
![]() |
2d5039184e | ||
![]() |
b1bbaebb17 | ||
![]() |
8f6997cbde | ||
![]() |
e18ecaf108 | ||
![]() |
fe67ba6d2b | ||
![]() |
e39e6c537e | ||
![]() |
4e4a899306 | ||
![]() |
9a78db6e59 | ||
![]() |
6475600afa | ||
![]() |
e450888b15 | ||
![]() |
23522a66d1 | ||
![]() |
116462a512 | ||
![]() |
217e033120 | ||
![]() |
259ac2dd77 | ||
![]() |
4ebf001d37 | ||
![]() |
5e326014cd | ||
![]() |
0b0bbffa35 | ||
![]() |
2b35432fcc | ||
![]() |
ef8a2bc4fc | ||
![]() |
96d235d9a3 | ||
![]() |
eaf51b62b9 | ||
![]() |
80994a123e | ||
![]() |
b1cd033c27 | ||
![]() |
268867311e | ||
![]() |
6840f80d21 | ||
![]() |
cac6876734 | ||
![]() |
753011c8db | ||
![]() |
2774dc390a | ||
![]() |
eb4534f735 | ||
![]() |
efb957039d | ||
![]() |
fe82ddda46 | ||
![]() |
94af496ac4 | ||
![]() |
6f17c2f140 | ||
![]() |
490c00fb30 | ||
![]() |
2d0dbd87c3 | ||
![]() |
13a5e16f35 | ||
![]() |
3d54ba1b9e | ||
![]() |
e051f904f2 | ||
![]() |
f8d94a3849 | ||
![]() |
ac691cae88 | ||
![]() |
43d0d75688 | ||
![]() |
77f34915ce | ||
![]() |
72b8993164 | ||
![]() |
6b9bd96c06 | ||
![]() |
6532f737eb | ||
![]() |
928ff54388 | ||
![]() |
95c94bf658 | ||
![]() |
7f295939d0 | ||
![]() |
aa27db6986 | ||
![]() |
4ce5fa3ea9 | ||
![]() |
ffa7c13117 |
1381
CHANGES.2000
Normal file
1381
CHANGES.2000
Normal file
File diff suppressed because it is too large
Load Diff
5
CVS-INFO
5
CVS-INFO
@@ -13,6 +13,9 @@ inner sanctum.
|
|||||||
Use autoconf 2.50 and no earlier. Also, try having automake 1.4 and libtool
|
Use autoconf 2.50 and no earlier. Also, try having automake 1.4 and libtool
|
||||||
1.4 at least.
|
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.
|
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
|
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:
|
To build after having extracted everything from CVS, do this:
|
||||||
|
|
||||||
|
14
README
14
README
@@ -30,19 +30,17 @@ README
|
|||||||
|
|
||||||
To download the very latest source off the CVS server do this:
|
To download the very latest source off the CVS server do this:
|
||||||
|
|
||||||
cvs -d :pserver: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
|
(you'll get a directory named curl created, filled with the source code)
|
||||||
directory. Note that this does NOT create a directory named curl or
|
|
||||||
anything)
|
|
||||||
|
|
||||||
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
|
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
|
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
||||||
|
49
configure.in
49
configure.in
@@ -64,8 +64,32 @@ AC_ARG_ENABLE(debug,
|
|||||||
AC_MSG_RESULT(no)
|
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 check for working getaddrinfo()
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
|
AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
|
||||||
@@ -418,7 +442,7 @@ dnl ucb lib?
|
|||||||
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
|
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
|
||||||
|
|
||||||
dnl dl lib?
|
dnl dl lib?
|
||||||
AC_CHECK_FUNC(dlopen, , AC_CHECK_LIB(dl, dlopen))
|
AC_CHECK_FUNC(dlclose, , AC_CHECK_LIB(dl, dlopen))
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the random seed preferences
|
dnl Check for the random seed preferences
|
||||||
@@ -559,13 +583,20 @@ then
|
|||||||
else
|
else
|
||||||
|
|
||||||
dnl Check for and handle argument to --with-ssl.
|
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
|
case "$OPT_SSL" in
|
||||||
yes)
|
yes)
|
||||||
EXTRA_SSL=/usr/local/ssl ;;
|
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
|
esac
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
||||||
@@ -573,8 +604,8 @@ else
|
|||||||
],[
|
],[
|
||||||
OLDLDFLAGS="$LDFLAGS"
|
OLDLDFLAGS="$LDFLAGS"
|
||||||
OLDCPPFLAGS="$CPPFLAGS"
|
OLDCPPFLAGS="$CPPFLAGS"
|
||||||
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
|
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib"
|
||||||
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
||||||
HAVECRYPTO="yes" ], [
|
HAVECRYPTO="yes" ], [
|
||||||
LDFLAGS="$OLDLDFLAGS"
|
LDFLAGS="$OLDLDFLAGS"
|
||||||
@@ -681,6 +712,9 @@ then
|
|||||||
Set to explicitly specify we don't want to use thread-safe functions)
|
Set to explicitly specify we don't want to use thread-safe functions)
|
||||||
else
|
else
|
||||||
|
|
||||||
|
dnl check that 'localhost' resolves first
|
||||||
|
CURL_CHECK_WORKING_RESOLVER
|
||||||
|
|
||||||
dnl dig around for gethostbyname_r()
|
dnl dig around for gethostbyname_r()
|
||||||
CURL_CHECK_GETHOSTBYNAME_R()
|
CURL_CHECK_GETHOSTBYNAME_R()
|
||||||
|
|
||||||
@@ -799,7 +833,8 @@ AC_CHECK_FUNCS( socket \
|
|||||||
getpass_r \
|
getpass_r \
|
||||||
strlcat \
|
strlcat \
|
||||||
getpwuid \
|
getpwuid \
|
||||||
geteuid
|
geteuid \
|
||||||
|
dlopen
|
||||||
)
|
)
|
||||||
|
|
||||||
dnl removed 'getpass' check on October 26, 2000
|
dnl removed 'getpass' check on October 26, 2000
|
||||||
|
@@ -22,6 +22,7 @@ Available values for OPTION include:
|
|||||||
--libs library linking information
|
--libs library linking information
|
||||||
--prefix curl install prefix
|
--prefix curl install prefix
|
||||||
--version output version information
|
--version output version information
|
||||||
|
--vernum output the version information as a number (hexadecimal)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
exit $1
|
exit $1
|
||||||
|
@@ -206,8 +206,14 @@ Win32
|
|||||||
|
|
||||||
Microsoft command line style
|
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
|
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
|
The vcvars32.bat file is part of the Microsoft development
|
||||||
environment.
|
environment.
|
||||||
|
@@ -591,7 +591,7 @@ HTTPS
|
|||||||
Run the 'openssl' application to convert the certificate. If you cd to the
|
Run the 'openssl' application to convert the certificate. If you cd to the
|
||||||
openssl installation, you can do it like:
|
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
|
RESUMING FILE TRANSFERS
|
||||||
|
@@ -26,7 +26,7 @@ man_MANS = \
|
|||||||
curl_mprintf.3 \
|
curl_mprintf.3 \
|
||||||
curl_global_init.3 \
|
curl_global_init.3 \
|
||||||
curl_global_cleanup.3 \
|
curl_global_cleanup.3 \
|
||||||
libcurl.5
|
libcurl.3
|
||||||
|
|
||||||
EXTRA_DIST = $(man_MANS) \
|
EXTRA_DIST = $(man_MANS) \
|
||||||
MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
||||||
|
43
docs/TODO
43
docs/TODO
@@ -7,22 +7,43 @@
|
|||||||
TODO
|
TODO
|
||||||
|
|
||||||
Things to do in project cURL. Please tell me what you think, contribute and
|
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):
|
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
|
* 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
|
host is requested. http://curl.haxx.se/dev/SSL_session_id.txt
|
||||||
connections?
|
|
||||||
|
* 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...!
|
* 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
|
* Add configure options that disables certain protocols in libcurl to
|
||||||
decrease footprint. '--disable-[protocol]' where protocol is http, ftp,
|
decrease footprint. '--disable-[protocol]' where protocol is http, ftp,
|
||||||
telnet, ldap, dict or file.
|
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
|
* Extend the test suite to include telnet. The telnet could just do ftp or
|
||||||
http operations (for which we have test servers).
|
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
|
* 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
|
stamp as the remote file. libcurl already is capable of fetching the remote
|
||||||
file's date.
|
file's date.
|
||||||
@@ -40,7 +63,7 @@ To do in a future release (random order):
|
|||||||
(http://gnutls.hellug.gr/)
|
(http://gnutls.hellug.gr/)
|
||||||
|
|
||||||
* Add asynchronous name resolving, as this enables full timeout support for
|
* 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
|
* Move non-URL related functions that are used by both the lib and the curl
|
||||||
application to a separate "portability lib".
|
application to a separate "portability lib".
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
.\" nroff -man curl.1
|
.\" nroff -man curl.1
|
||||||
.\" Written by Daniel Stenberg
|
.\" 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
|
.SH NAME
|
||||||
curl \- get a URL with FTP, TELNET, LDAP, GOPHER, DICT, FILE, HTTP or
|
curl \- get a URL with FTP, TELNET, LDAP, GOPHER, DICT, FILE, HTTP or
|
||||||
HTTPS syntax.
|
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
|
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
|
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
|
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.
|
To post data purely binary, you should instead use the --data-binary option.
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_cleanup 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
|
.TH curl_easy_cleanup 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
@@ -8,7 +8,7 @@ curl_easy_cleanup - End a libcurl session
|
|||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B #include <curl/curl.h>
|
.B #include <curl/curl.h>
|
||||||
.sp
|
.sp
|
||||||
.BI "curl_easy_cleanup(CURL *" handle ");"
|
.BI "void curl_easy_cleanup(CURL *" handle ");"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
This function must be the last function to call for a curl session. It is the
|
This function must be the last function to call for a curl session. It is the
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.6.1" "libcurl Manual"
|
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.6.1" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
|
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual"
|
.TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" 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
|
.SH NAME
|
||||||
curl_easy_setopt - Set curl easy-session options
|
curl_easy_setopt - Set curl easy-session options
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -178,12 +178,6 @@ similar.
|
|||||||
A non-zero parameter tells the library to use HTTP PUT a file. The file to put
|
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.
|
must be set with CURLOPT_INFILE and CURLOPT_INFILESIZE.
|
||||||
.TP
|
.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
|
.B CURLOPT_USERPWD
|
||||||
Pass a char * as parameter, which should be [username]:[password] to use for
|
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.
|
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
|
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
|
it has connected, this option is of no more use. Set to zero to disable
|
||||||
connection timeout (it will then only timeout on the system's internal
|
connection timeout (it will then only timeout on the system's internal
|
||||||
timeouts). This option doesn't work in win32 systems. See also the
|
timeouts). See also the
|
||||||
.I CURLOPT_TIMEOUT
|
.I CURLOPT_TIMEOUT
|
||||||
option.
|
option.
|
||||||
.PP
|
.PP
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_escape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
|
.TH curl_escape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_formfree 3 "6 April 2001" "libcurl 7.7.1" "libcurl Manual"
|
.TH curl_formfree 3 "6 April 2001" "libcurl 7.7.1" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_formparse 3 "21 May 2001" "libcurl 7.7.4" "libcurl Manual"
|
.TH curl_formparse 3 "21 May 2001" "libcurl 7.7.4" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_getenv 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
.TH curl_getenv 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual"
|
.TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" 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
|
.SH NAME
|
||||||
curl_global_init - Global libcurl initialisation
|
curl_global_init - Global libcurl initialisation
|
||||||
.SH SYNOPSIS
|
.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
|
If this function hasn't been invoked when \fIcurl_easy_init\fP is called, it
|
||||||
will be done automatically by libcurl.
|
will be done automatically by libcurl.
|
||||||
|
|
||||||
The flags option should be set to zero. It will be used to tell libcurl what
|
The flags option is a bit pattern that tells libcurl exact what features to
|
||||||
specific features it should \fBnot\fP init.
|
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
|
You must however \fBalways\fP use the \fIcurl_global_cleanup\fP function, as
|
||||||
that cannot be called automatically for you by libcurl.
|
that cannot be called automatically for you by libcurl.
|
||||||
|
|
||||||
This function was added in libcurl 7.8.
|
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
|
.SH RETURN VALUE
|
||||||
If this function returns non-zero, something went wrong and you cannot use the
|
If this function returns non-zero, something went wrong and you cannot use the
|
||||||
other curl functions.
|
other curl functions.
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_printf 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
|
.TH curl_printf 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_slist_append 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
.TH curl_slist_append 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_slist_free_all 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
.TH curl_slist_free_all 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_strequal 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
|
.TH curl_strequal 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
|
||||||
.SH NAME
|
.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
|
strings in a truly portable manner. There are no standard portable case
|
||||||
insensitive string comparison functions. These two works on all platforms.
|
insensitive string comparison functions. These two works on all platforms.
|
||||||
.SH RETURN VALUE
|
.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"
|
.SH "SEE ALSO"
|
||||||
.BR strcmp "(3), " strcasecmp "(3)"
|
.BR strcmp "(3), " strcasecmp "(3)"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_unescape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
|
.TH curl_unescape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_version 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
.TH curl_version 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@@ -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
|
* These are example functions doing socket init that Windows
|
||||||
* require. If you don't use windows, you can safely ignore this crap.
|
* 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();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
static CURLcode win32_init(void)
|
int win32_init(void)
|
||||||
{
|
{
|
||||||
WORD wVersionRequested;
|
WORD wVersionRequested;
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by Daniel Stenberg
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH libcurl 5 "28 May 2001" "libcurl 7.8" "libcurl overview"
|
.TH libcurl 5 "28 May 2001" "libcurl 7.8" "libcurl overview"
|
||||||
.SH NAME
|
.SH NAME
|
@@ -351,7 +351,8 @@ typedef enum {
|
|||||||
|
|
||||||
CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
|
CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
|
||||||
CINIT(PUT, LONG, 54), /* PUT the input file */
|
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 that will be called instead of the internal progress display
|
||||||
* function. This function should be defined as the curl_progress_callback
|
* 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. */
|
* parameters will use fwrite() syntax, make sure to follow them. */
|
||||||
CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
|
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 */
|
CURLOPT_LASTENTRY /* the last unusued */
|
||||||
} CURLoption;
|
} CURLoption;
|
||||||
|
|
||||||
@@ -503,8 +509,8 @@ void curl_global_cleanup(void);
|
|||||||
|
|
||||||
|
|
||||||
/* This is the version number */
|
/* This is the version number */
|
||||||
#define LIBCURL_VERSION "7.8-pre2"
|
#define LIBCURL_VERSION "7.8.1-pre3"
|
||||||
#define LIBCURL_VERSION_NUM 0x070800
|
#define LIBCURL_VERSION_NUM 0x070801
|
||||||
|
|
||||||
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
|
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
|
||||||
struct curl_slist {
|
struct curl_slist {
|
||||||
@@ -573,9 +579,11 @@ typedef enum {
|
|||||||
CURLCLOSEPOLICY_LAST /* last, never use this */
|
CURLCLOSEPOLICY_LAST /* last, never use this */
|
||||||
} curl_closepolicy;
|
} curl_closepolicy;
|
||||||
|
|
||||||
#define CURL_GLOBAL_NOT_SSL (1<<0)
|
#define CURL_GLOBAL_SSL (1<<0)
|
||||||
#define CURL_GLOBAL_NOTHING CURL_GLOBAL_NOT_SSL
|
#define CURL_GLOBAL_WIN32 (1<<1)
|
||||||
#define CURL_GLOBAL_DEFAULT 0
|
#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
|
||||||
|
#define CURL_GLOBAL_NOTHING 0
|
||||||
|
#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
6
lib/.cvsignore
Normal file
6
lib/.cvsignore
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
.deps
|
||||||
|
.libs
|
@@ -16,7 +16,7 @@ lib_LTLIBRARIES = libcurl.la
|
|||||||
INCLUDES = -I$(top_srcdir)/include
|
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,
|
# This flag accepts an argument of the form current[:revision[:age]]. So,
|
||||||
# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
|
# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
|
||||||
# 1.
|
# 1.
|
||||||
|
@@ -55,7 +55,8 @@ SOURCES = \
|
|||||||
getinfo.c \
|
getinfo.c \
|
||||||
version.c \
|
version.c \
|
||||||
easy.c \
|
easy.c \
|
||||||
strequal.c
|
strequal.c \
|
||||||
|
strtok.c
|
||||||
|
|
||||||
OBJECTS = $(SOURCES:.c=.obj)
|
OBJECTS = $(SOURCES:.c=.obj)
|
||||||
|
|
||||||
|
@@ -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 \
|
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 \
|
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 \
|
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 \
|
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 \
|
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 \
|
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 \
|
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)
|
LIBRARIES = $(libcurl_a_LIBRARIES)
|
||||||
SOURCES = $(libcurl_a_SOURCES)
|
SOURCES = $(libcurl_a_SOURCES)
|
||||||
|
@@ -60,7 +60,8 @@ RELEASE_OBJS= \
|
|||||||
getinfor.obj \
|
getinfor.obj \
|
||||||
versionr.obj \
|
versionr.obj \
|
||||||
easyr.obj \
|
easyr.obj \
|
||||||
strequalr.obj
|
strequalr.obj \
|
||||||
|
strtokr.obj
|
||||||
|
|
||||||
DEBUG_OBJS= \
|
DEBUG_OBJS= \
|
||||||
base64d.obj \
|
base64d.obj \
|
||||||
@@ -91,7 +92,8 @@ DEBUG_OBJS= \
|
|||||||
getinfod.obj \
|
getinfod.obj \
|
||||||
versiond.obj \
|
versiond.obj \
|
||||||
easyd.obj \
|
easyd.obj \
|
||||||
strequald.obj
|
strequald.obj \
|
||||||
|
strtokd.obj
|
||||||
|
|
||||||
RELEASE_SSL_OBJS= \
|
RELEASE_SSL_OBJS= \
|
||||||
base64rs.obj \
|
base64rs.obj \
|
||||||
@@ -122,7 +124,8 @@ RELEASE_SSL_OBJS= \
|
|||||||
getinfors.obj \
|
getinfors.obj \
|
||||||
versionrs.obj \
|
versionrs.obj \
|
||||||
easyrs.obj \
|
easyrs.obj \
|
||||||
strequalrs.obj
|
strequalrs.obj \
|
||||||
|
strtokd.obj
|
||||||
|
|
||||||
LINK_OBJS= \
|
LINK_OBJS= \
|
||||||
base64.obj \
|
base64.obj \
|
||||||
@@ -153,7 +156,8 @@ LINK_OBJS= \
|
|||||||
getinfo.obj \
|
getinfo.obj \
|
||||||
version.obj \
|
version.obj \
|
||||||
easy.obj \
|
easy.obj \
|
||||||
strequal.obj
|
strequal.obj \
|
||||||
|
strtok.obj
|
||||||
|
|
||||||
all : release
|
all : release
|
||||||
|
|
||||||
@@ -225,6 +229,8 @@ easyr.obj: easy.c
|
|||||||
$(CCR) $(CFLAGS) easy.c
|
$(CCR) $(CFLAGS) easy.c
|
||||||
strequalr.obj: strequal.c
|
strequalr.obj: strequal.c
|
||||||
$(CCR) $(CFLAGS) strequal.c
|
$(CCR) $(CFLAGS) strequal.c
|
||||||
|
strtokr.obj:strtok.c
|
||||||
|
$(CCR) $(CFLAGS) strtok.c
|
||||||
|
|
||||||
## Debug
|
## Debug
|
||||||
base64d.obj: base64.c
|
base64d.obj: base64.c
|
||||||
@@ -285,7 +291,8 @@ easyd.obj: easy.c
|
|||||||
$(CCD) $(CFLAGS) easy.c
|
$(CCD) $(CFLAGS) easy.c
|
||||||
strequald.obj: strequal.c
|
strequald.obj: strequal.c
|
||||||
$(CCD) $(CFLAGS) strequal.c
|
$(CCD) $(CFLAGS) strequal.c
|
||||||
|
strtokd.obj:strtok.c
|
||||||
|
$(CCR) $(CFLAGS) strtok.c
|
||||||
|
|
||||||
## Release SSL
|
## Release SSL
|
||||||
base64rs.obj: base64.c
|
base64rs.obj: base64.c
|
||||||
@@ -346,6 +353,8 @@ easyrs.obj: easy.c
|
|||||||
$(CCRS) $(CFLAGS) easy.c
|
$(CCRS) $(CFLAGS) easy.c
|
||||||
strequalrs.obj: strequal.c
|
strequalrs.obj: strequal.c
|
||||||
$(CCRS) $(CFLAGS) strequal.c
|
$(CCRS) $(CFLAGS) strequal.c
|
||||||
|
strtokrs.obj:strtok.c
|
||||||
|
$(CCR) $(CFLAGS) strtok.c
|
||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@@ -1,321 +1,101 @@
|
|||||||
/*
|
#ifndef __ARPA_TELNET_H
|
||||||
* Copyright (c) 1983, 1993
|
#define __ARPA_TELNET_H
|
||||||
* The Regents of the University of California. All rights reserved.
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Copyright (C) 2001, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
* 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.
|
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
* In order to be useful for every potential user, curl and libcurl are
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* dual-licensed under the MPL and the MIT/X-derivate licenses.
|
||||||
* 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.
|
|
||||||
*
|
*
|
||||||
* @(#)telnet.h 8.2 (Berkeley) 12/15/93
|
* 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
|
||||||
#ifndef _ARPA_TELNET_H
|
* licenses. You may pick one of these licenses.
|
||||||
#define _ARPA_TELNET_H
|
*
|
||||||
|
* 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 TELOPT_BINARY 0 /* binary 8bit data */
|
||||||
#define DONT 254 /* you are not to use option */
|
#define TELOPT_SGA 3 /* Supress Go Ahead */
|
||||||
#define DO 253 /* please, you use option */
|
#define TELOPT_EXOPL 255 /* EXtended OPtions List */
|
||||||
#define WONT 252 /* I won't use option */
|
#define TELOPT_TTYPE 24 /* Terminal TYPE */
|
||||||
#define WILL 251 /* I will use option */
|
#define TELOPT_XDISPLOC 35 /* X DISPlay LOCation */
|
||||||
#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 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
|
* The telnet options represented as strings
|
||||||
char *telcmds[] = {
|
*/
|
||||||
"EOF", "SUSP", "ABORT", "EOR",
|
static char *telnetoptions[]=
|
||||||
"SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
|
{
|
||||||
"EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
|
"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
|
#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 */
|
|
||||||
|
367
lib/base64.c
367
lib/base64.c
@@ -1,34 +1,35 @@
|
|||||||
/*
|
/*****************************************************************************
|
||||||
* Copyright (c) 1995 - 1999 Kungliga Tekniska H<>gskolan
|
* _ _ ____ _
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* Project ___| | | | _ \| |
|
||||||
* All rights reserved.
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* 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
|
* This code will break if int is smaller than 32 bits
|
||||||
* 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.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
@@ -38,115 +39,221 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
|
|
||||||
/* The last #include file should be: */
|
|
||||||
#ifdef MALLOCDEBUG
|
#ifdef MALLOCDEBUG
|
||||||
#include "memdebug.h"
|
#include "memdebug.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
static void decodeQuantum(unsigned char *dest, char *src)
|
||||||
|
|
||||||
static int pos(char c)
|
|
||||||
{
|
{
|
||||||
char *p;
|
unsigned int x = 0;
|
||||||
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;
|
|
||||||
int i;
|
int i;
|
||||||
int c;
|
for(i = 0; i < 4; i++) {
|
||||||
const unsigned char *q;
|
if(src[i] >= 'A' && src[i] <= 'Z')
|
||||||
|
x = (x << 6) + (unsigned int)(src[i] - 'A' + 0);
|
||||||
p = s = (char*)malloc(size*4/3+4);
|
else if(src[i] >= 'a' && src[i] <= 'z')
|
||||||
if (p == NULL)
|
x = (x << 6) + (unsigned int)(src[i] - 'a' + 26);
|
||||||
return -1;
|
else if(src[i] >= '0' && src[i] <= '9')
|
||||||
q = (const unsigned char*)data;
|
x = (x << 6) + (unsigned int)(src[i] - '0' + 52);
|
||||||
i=0;
|
else if(src[i] == '+')
|
||||||
for(i = 0; i < size;){
|
x = (x << 6) + 62;
|
||||||
c=q[i++];
|
else if(src[i] == '/')
|
||||||
c*=256;
|
x = (x << 6) + 63;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
*p=0;
|
|
||||||
*str = s;
|
dest[2] = (unsigned char)(x & 255); x >>= 8;
|
||||||
return strlen(s);
|
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)
|
int Curl_base64_decode(const char *str, void *data)
|
||||||
{
|
{
|
||||||
const char *p;
|
int ret;
|
||||||
unsigned char *q;
|
|
||||||
int c;
|
base64Decode((unsigned char *)data, (char *)str, &ret);
|
||||||
int x;
|
return ret;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************* 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
|
||||||
|
|
||||||
|
57
lib/base64.h
57
lib/base64.h
@@ -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
|
#ifndef __BASE64_H
|
||||||
#define __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_encode(const void *data, int size, char **str);
|
||||||
int Curl_base64_decode(const char *str, void *data);
|
int Curl_base64_decode(const char *str, void *data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -209,6 +209,10 @@ SOURCE=.\strequal.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\strtok.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\telnet.c
|
SOURCE=.\telnet.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -341,6 +345,10 @@ SOURCE=.\strequal.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\strtok.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\telnet.h
|
SOURCE=.\telnet.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
85
lib/easy.c
85
lib/easy.c
@@ -78,17 +78,95 @@
|
|||||||
#define _MPRINTF_REPLACE /* use our functions only */
|
#define _MPRINTF_REPLACE /* use our functions only */
|
||||||
#include <curl/mprintf.h>
|
#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)
|
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();
|
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;
|
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)
|
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)
|
CURL *curl_easy_init(void)
|
||||||
@@ -97,7 +175,8 @@ CURL *curl_easy_init(void)
|
|||||||
struct UrlData *data;
|
struct UrlData *data;
|
||||||
|
|
||||||
/* Make sure we inited the global SSL stuff */
|
/* 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 */
|
/* We use curl_open() with undefined URL so far */
|
||||||
res = Curl_open((CURL **)&data, NULL);
|
res = Curl_open((CURL **)&data, NULL);
|
||||||
|
27
lib/escape.c
27
lib/escape.c
@@ -54,28 +54,15 @@ char *curl_escape(char *string, int length)
|
|||||||
!(in >= 'A' && in <= 'Z') &&
|
!(in >= 'A' && in <= 'Z') &&
|
||||||
!(in >= '0' && in <= '9')) {
|
!(in >= '0' && in <= '9')) {
|
||||||
/* encode it */
|
/* encode it */
|
||||||
if(('%' == in) &&
|
newlen += 2; /* the size grows with two, since this'll become a %XX */
|
||||||
(length>=2) &&
|
if(newlen > alloc) {
|
||||||
isxdigit((int)string[1]) &&
|
alloc *= 2;
|
||||||
isxdigit((int)string[2]) ) {
|
ns = realloc(ns, alloc);
|
||||||
/*
|
if(!ns)
|
||||||
* This is an already encoded letter, leave it!
|
return NULL;
|
||||||
*/
|
|
||||||
memcpy(&ns[index], string, 3);
|
|
||||||
string+=2;
|
|
||||||
}
|
}
|
||||||
else {
|
sprintf(&ns[index], "%%%02X", in);
|
||||||
/* encode this now */
|
|
||||||
|
|
||||||
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;
|
index+=3;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@@ -115,7 +115,7 @@ int FormParse(char *input,
|
|||||||
struct HttpPost *subpost; /* a sub-node */
|
struct HttpPost *subpost; /* a sub-node */
|
||||||
unsigned int i;
|
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 */
|
/* the input was using the correct format */
|
||||||
contp = contents;
|
contp = contents;
|
||||||
|
|
||||||
@@ -634,11 +634,16 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
form=Curl_getFormData(httppost, &size);
|
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);
|
fwrite(buffer, nread, 1, stderr);
|
||||||
}
|
} while(1);
|
||||||
|
|
||||||
fprintf(stderr, "size: %d\n", size);
|
fprintf(stderr, "size: %d\n", size);
|
||||||
|
|
||||||
|
@@ -172,7 +172,7 @@ int Curl_GetFTPResponse(int sockfd,
|
|||||||
fd_set readfd;
|
fd_set readfd;
|
||||||
struct UrlData *data = conn->data;
|
struct UrlData *data = conn->data;
|
||||||
char *line_start;
|
char *line_start;
|
||||||
int code;
|
int code=0; /* default "error code" to return */
|
||||||
|
|
||||||
#define SELECT_OK 0
|
#define SELECT_OK 0
|
||||||
#define SELECT_ERROR 1
|
#define SELECT_ERROR 1
|
||||||
@@ -680,7 +680,7 @@ CURLcode Curl_ftp_done(struct connectdata *conn)
|
|||||||
|
|
||||||
/* 226 Transfer complete, 250 Requested file action okay, completed. */
|
/* 226 Transfer complete, 250 Requested file action okay, completed. */
|
||||||
if((ftpcode != 226) && (ftpcode != 250)) {
|
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;
|
return CURLE_FTP_WRITE_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
120
lib/getdate.c
120
lib/getdate.c
@@ -32,18 +32,14 @@
|
|||||||
** This code is in the public domain and has no copyright.
|
** This code is in the public domain and has no copyright.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
# ifdef HAVE_ALLOCA_H
|
# ifdef HAVE_ALLOCA_H
|
||||||
# include <alloca.h>
|
# include <alloca.h>
|
||||||
# endif
|
# 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
|
# ifdef HAVE_TIME_H
|
||||||
# include <time.h>
|
# include <time.h>
|
||||||
# endif
|
# endif
|
||||||
@@ -227,7 +223,7 @@ static int yyRelSeconds;
|
|||||||
static int yyRelYear;
|
static int yyRelYear;
|
||||||
|
|
||||||
|
|
||||||
#line 210 "getdate.y"
|
#line 206 "getdate.y"
|
||||||
typedef union {
|
typedef union {
|
||||||
int Number;
|
int Number;
|
||||||
enum _MERIDIAN Meridian;
|
enum _MERIDIAN Meridian;
|
||||||
@@ -310,11 +306,11 @@ static const short yyrhs[] = { -1,
|
|||||||
|
|
||||||
#if YYDEBUG != 0
|
#if YYDEBUG != 0
|
||||||
static const short yyrline[] = { 0,
|
static const short yyrline[] = { 0,
|
||||||
226, 227, 230, 233, 236, 239, 242, 245, 248, 254,
|
222, 223, 226, 229, 232, 235, 238, 241, 244, 250,
|
||||||
260, 269, 275, 287, 290, 293, 299, 303, 307, 313,
|
256, 265, 271, 283, 286, 289, 295, 299, 303, 309,
|
||||||
317, 335, 341, 347, 351, 356, 360, 367, 375, 378,
|
313, 331, 337, 343, 347, 352, 356, 363, 371, 374,
|
||||||
381, 384, 387, 390, 393, 396, 399, 402, 405, 408,
|
377, 380, 383, 386, 389, 392, 395, 398, 401, 404,
|
||||||
411, 414, 417, 420, 423, 426, 429, 434, 467, 471
|
407, 410, 413, 416, 419, 422, 425, 430, 463, 467
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -395,7 +391,7 @@ static const short yycheck[] = { 0,
|
|||||||
56
|
56
|
||||||
};
|
};
|
||||||
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
/* -*-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. */
|
/* This file comes from bison-1.28. */
|
||||||
|
|
||||||
/* Skeleton output parser for bison,
|
/* Skeleton output parser for bison,
|
||||||
@@ -609,7 +605,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
|
|||||||
#endif
|
#endif
|
||||||
#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
|
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
||||||
into yyparse. The argument should have type void *.
|
into yyparse. The argument should have type void *.
|
||||||
@@ -938,37 +934,37 @@ yyreduce:
|
|||||||
switch (yyn) {
|
switch (yyn) {
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
#line 230 "getdate.y"
|
#line 226 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHaveTime++;
|
yyHaveTime++;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 4:
|
case 4:
|
||||||
#line 233 "getdate.y"
|
#line 229 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHaveZone++;
|
yyHaveZone++;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 5:
|
case 5:
|
||||||
#line 236 "getdate.y"
|
#line 232 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHaveDate++;
|
yyHaveDate++;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 6:
|
case 6:
|
||||||
#line 239 "getdate.y"
|
#line 235 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHaveDay++;
|
yyHaveDay++;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 7:
|
case 7:
|
||||||
#line 242 "getdate.y"
|
#line 238 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHaveRel++;
|
yyHaveRel++;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 9:
|
case 9:
|
||||||
#line 248 "getdate.y"
|
#line 244 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHour = yyvsp[-1].Number;
|
yyHour = yyvsp[-1].Number;
|
||||||
yyMinutes = 0;
|
yyMinutes = 0;
|
||||||
@@ -977,7 +973,7 @@ case 9:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 10:
|
case 10:
|
||||||
#line 254 "getdate.y"
|
#line 250 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHour = yyvsp[-3].Number;
|
yyHour = yyvsp[-3].Number;
|
||||||
yyMinutes = yyvsp[-1].Number;
|
yyMinutes = yyvsp[-1].Number;
|
||||||
@@ -986,7 +982,7 @@ case 10:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 11:
|
case 11:
|
||||||
#line 260 "getdate.y"
|
#line 256 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHour = yyvsp[-3].Number;
|
yyHour = yyvsp[-3].Number;
|
||||||
yyMinutes = yyvsp[-1].Number;
|
yyMinutes = yyvsp[-1].Number;
|
||||||
@@ -998,7 +994,7 @@ case 11:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 12:
|
case 12:
|
||||||
#line 269 "getdate.y"
|
#line 265 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHour = yyvsp[-5].Number;
|
yyHour = yyvsp[-5].Number;
|
||||||
yyMinutes = yyvsp[-3].Number;
|
yyMinutes = yyvsp[-3].Number;
|
||||||
@@ -1007,7 +1003,7 @@ case 12:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 13:
|
case 13:
|
||||||
#line 275 "getdate.y"
|
#line 271 "getdate.y"
|
||||||
{
|
{
|
||||||
yyHour = yyvsp[-5].Number;
|
yyHour = yyvsp[-5].Number;
|
||||||
yyMinutes = yyvsp[-3].Number;
|
yyMinutes = yyvsp[-3].Number;
|
||||||
@@ -1020,53 +1016,53 @@ case 13:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 14:
|
case 14:
|
||||||
#line 287 "getdate.y"
|
#line 283 "getdate.y"
|
||||||
{
|
{
|
||||||
yyTimezone = yyvsp[0].Number;
|
yyTimezone = yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 15:
|
case 15:
|
||||||
#line 290 "getdate.y"
|
#line 286 "getdate.y"
|
||||||
{
|
{
|
||||||
yyTimezone = yyvsp[0].Number - 60;
|
yyTimezone = yyvsp[0].Number - 60;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 16:
|
case 16:
|
||||||
#line 294 "getdate.y"
|
#line 290 "getdate.y"
|
||||||
{
|
{
|
||||||
yyTimezone = yyvsp[-1].Number - 60;
|
yyTimezone = yyvsp[-1].Number - 60;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 17:
|
case 17:
|
||||||
#line 299 "getdate.y"
|
#line 295 "getdate.y"
|
||||||
{
|
{
|
||||||
yyDayOrdinal = 1;
|
yyDayOrdinal = 1;
|
||||||
yyDayNumber = yyvsp[0].Number;
|
yyDayNumber = yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 18:
|
case 18:
|
||||||
#line 303 "getdate.y"
|
#line 299 "getdate.y"
|
||||||
{
|
{
|
||||||
yyDayOrdinal = 1;
|
yyDayOrdinal = 1;
|
||||||
yyDayNumber = yyvsp[-1].Number;
|
yyDayNumber = yyvsp[-1].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 19:
|
case 19:
|
||||||
#line 307 "getdate.y"
|
#line 303 "getdate.y"
|
||||||
{
|
{
|
||||||
yyDayOrdinal = yyvsp[-1].Number;
|
yyDayOrdinal = yyvsp[-1].Number;
|
||||||
yyDayNumber = yyvsp[0].Number;
|
yyDayNumber = yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 20:
|
case 20:
|
||||||
#line 313 "getdate.y"
|
#line 309 "getdate.y"
|
||||||
{
|
{
|
||||||
yyMonth = yyvsp[-2].Number;
|
yyMonth = yyvsp[-2].Number;
|
||||||
yyDay = yyvsp[0].Number;
|
yyDay = yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 21:
|
case 21:
|
||||||
#line 317 "getdate.y"
|
#line 313 "getdate.y"
|
||||||
{
|
{
|
||||||
/* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
|
/* 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
|
The goal in recognizing YYYY/MM/DD is solely to support legacy
|
||||||
@@ -1087,7 +1083,7 @@ case 21:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 22:
|
case 22:
|
||||||
#line 335 "getdate.y"
|
#line 331 "getdate.y"
|
||||||
{
|
{
|
||||||
/* ISO 8601 format. yyyy-mm-dd. */
|
/* ISO 8601 format. yyyy-mm-dd. */
|
||||||
yyYear = yyvsp[-2].Number;
|
yyYear = yyvsp[-2].Number;
|
||||||
@@ -1096,7 +1092,7 @@ case 22:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 23:
|
case 23:
|
||||||
#line 341 "getdate.y"
|
#line 337 "getdate.y"
|
||||||
{
|
{
|
||||||
/* e.g. 17-JUN-1992. */
|
/* e.g. 17-JUN-1992. */
|
||||||
yyDay = yyvsp[-2].Number;
|
yyDay = yyvsp[-2].Number;
|
||||||
@@ -1105,14 +1101,14 @@ case 23:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 24:
|
case 24:
|
||||||
#line 347 "getdate.y"
|
#line 343 "getdate.y"
|
||||||
{
|
{
|
||||||
yyMonth = yyvsp[-1].Number;
|
yyMonth = yyvsp[-1].Number;
|
||||||
yyDay = yyvsp[0].Number;
|
yyDay = yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 25:
|
case 25:
|
||||||
#line 351 "getdate.y"
|
#line 347 "getdate.y"
|
||||||
{
|
{
|
||||||
yyMonth = yyvsp[-3].Number;
|
yyMonth = yyvsp[-3].Number;
|
||||||
yyDay = yyvsp[-2].Number;
|
yyDay = yyvsp[-2].Number;
|
||||||
@@ -1120,14 +1116,14 @@ case 25:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 26:
|
case 26:
|
||||||
#line 356 "getdate.y"
|
#line 352 "getdate.y"
|
||||||
{
|
{
|
||||||
yyMonth = yyvsp[0].Number;
|
yyMonth = yyvsp[0].Number;
|
||||||
yyDay = yyvsp[-1].Number;
|
yyDay = yyvsp[-1].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 27:
|
case 27:
|
||||||
#line 360 "getdate.y"
|
#line 356 "getdate.y"
|
||||||
{
|
{
|
||||||
yyMonth = yyvsp[-1].Number;
|
yyMonth = yyvsp[-1].Number;
|
||||||
yyDay = yyvsp[-2].Number;
|
yyDay = yyvsp[-2].Number;
|
||||||
@@ -1135,7 +1131,7 @@ case 27:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 28:
|
case 28:
|
||||||
#line 367 "getdate.y"
|
#line 363 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelSeconds = -yyRelSeconds;
|
yyRelSeconds = -yyRelSeconds;
|
||||||
yyRelMinutes = -yyRelMinutes;
|
yyRelMinutes = -yyRelMinutes;
|
||||||
@@ -1146,115 +1142,115 @@ case 28:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 30:
|
case 30:
|
||||||
#line 378 "getdate.y"
|
#line 374 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 31:
|
case 31:
|
||||||
#line 381 "getdate.y"
|
#line 377 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 32:
|
case 32:
|
||||||
#line 384 "getdate.y"
|
#line 380 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelYear += yyvsp[0].Number;
|
yyRelYear += yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 33:
|
case 33:
|
||||||
#line 387 "getdate.y"
|
#line 383 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 34:
|
case 34:
|
||||||
#line 390 "getdate.y"
|
#line 386 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 35:
|
case 35:
|
||||||
#line 393 "getdate.y"
|
#line 389 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelMonth += yyvsp[0].Number;
|
yyRelMonth += yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 36:
|
case 36:
|
||||||
#line 396 "getdate.y"
|
#line 392 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 37:
|
case 37:
|
||||||
#line 399 "getdate.y"
|
#line 395 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 38:
|
case 38:
|
||||||
#line 402 "getdate.y"
|
#line 398 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelDay += yyvsp[0].Number;
|
yyRelDay += yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 39:
|
case 39:
|
||||||
#line 405 "getdate.y"
|
#line 401 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 40:
|
case 40:
|
||||||
#line 408 "getdate.y"
|
#line 404 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 41:
|
case 41:
|
||||||
#line 411 "getdate.y"
|
#line 407 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelHour += yyvsp[0].Number;
|
yyRelHour += yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 42:
|
case 42:
|
||||||
#line 414 "getdate.y"
|
#line 410 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 43:
|
case 43:
|
||||||
#line 417 "getdate.y"
|
#line 413 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 44:
|
case 44:
|
||||||
#line 420 "getdate.y"
|
#line 416 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelMinutes += yyvsp[0].Number;
|
yyRelMinutes += yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 45:
|
case 45:
|
||||||
#line 423 "getdate.y"
|
#line 419 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 46:
|
case 46:
|
||||||
#line 426 "getdate.y"
|
#line 422 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 47:
|
case 47:
|
||||||
#line 429 "getdate.y"
|
#line 425 "getdate.y"
|
||||||
{
|
{
|
||||||
yyRelSeconds += yyvsp[0].Number;
|
yyRelSeconds += yyvsp[0].Number;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 48:
|
case 48:
|
||||||
#line 435 "getdate.y"
|
#line 431 "getdate.y"
|
||||||
{
|
{
|
||||||
if (yyHaveTime && yyHaveDate && !yyHaveRel)
|
if (yyHaveTime && yyHaveDate && !yyHaveRel)
|
||||||
yyYear = yyvsp[0].Number;
|
yyYear = yyvsp[0].Number;
|
||||||
@@ -1287,20 +1283,20 @@ case 48:
|
|||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 49:
|
case 49:
|
||||||
#line 468 "getdate.y"
|
#line 464 "getdate.y"
|
||||||
{
|
{
|
||||||
yyval.Meridian = MER24;
|
yyval.Meridian = MER24;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
case 50:
|
case 50:
|
||||||
#line 472 "getdate.y"
|
#line 468 "getdate.y"
|
||||||
{
|
{
|
||||||
yyval.Meridian = yyvsp[0].Meridian;
|
yyval.Meridian = yyvsp[0].Meridian;
|
||||||
;
|
;
|
||||||
break;}
|
break;}
|
||||||
}
|
}
|
||||||
/* the action file gets copied in in place of this dollarsign */
|
/* 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;
|
yyvsp -= yylen;
|
||||||
yyssp -= yylen;
|
yyssp -= yylen;
|
||||||
@@ -1520,7 +1516,7 @@ yyerrhandle:
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#line 477 "getdate.y"
|
#line 473 "getdate.y"
|
||||||
|
|
||||||
|
|
||||||
/* Include this file down here because bison inserts code above which
|
/* Include this file down here because bison inserts code above which
|
||||||
|
@@ -8,18 +8,14 @@
|
|||||||
** This code is in the public domain and has no copyright.
|
** This code is in the public domain and has no copyright.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
# ifdef HAVE_ALLOCA_H
|
# ifdef HAVE_ALLOCA_H
|
||||||
# include <alloca.h>
|
# include <alloca.h>
|
||||||
# endif
|
# 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
|
# ifdef HAVE_TIME_H
|
||||||
# include <time.h>
|
# include <time.h>
|
||||||
# endif
|
# endif
|
||||||
|
32
lib/http.c
32
lib/http.c
@@ -34,13 +34,6 @@
|
|||||||
|
|
||||||
#include <errno.h>
|
#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__)
|
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
|
||||||
#include <winsock.h>
|
#include <winsock.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@@ -368,7 +361,7 @@ CURLcode Curl_http_done(struct connectdata *conn)
|
|||||||
data=conn->data;
|
data=conn->data;
|
||||||
http=conn->proto.http;
|
http=conn->proto.http;
|
||||||
|
|
||||||
if(data->bits.http_formpost) {
|
if(HTTPREQ_POST_FORM == data->httpreq) {
|
||||||
*bytecount = http->readbytecount + http->writebytecount;
|
*bytecount = http->readbytecount + http->writebytecount;
|
||||||
|
|
||||||
Curl_FormFree(http->sendit); /* Now free that whole lot */
|
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->fread = http->storefread; /* restore */
|
||||||
data->in = http->in; /* restore */
|
data->in = http->in; /* restore */
|
||||||
}
|
}
|
||||||
else if(data->bits.http_put) {
|
else if(HTTPREQ_PUT == data->httpreq) {
|
||||||
*bytecount = http->readbytecount + http->writebytecount;
|
*bytecount = http->readbytecount + http->writebytecount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +405,7 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
|
|
||||||
if ( (conn->protocol&(PROT_HTTP|PROT_FTP)) &&
|
if ( (conn->protocol&(PROT_HTTP|PROT_FTP)) &&
|
||||||
data->bits.upload) {
|
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
|
/* 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 */
|
/* The path sent to the proxy is in fact the entire URL */
|
||||||
ppath = data->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
|
/* 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 */
|
a size of the whole shebang before we start to send it */
|
||||||
http->sendit = Curl_getFormData(data->httppost, &http->postsize);
|
http->sendit = Curl_getFormData(data->httppost, &http->postsize);
|
||||||
@@ -495,9 +488,9 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
if(!checkheaders(data, "Accept:"))
|
if(!checkheaders(data, "Accept:"))
|
||||||
http->p_accept = "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n";
|
http->p_accept = "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n";
|
||||||
|
|
||||||
if((data->bits.http_post ||
|
if(( (HTTPREQ_POST == data->httpreq) ||
|
||||||
data->bits.http_formpost ||
|
(HTTPREQ_POST_FORM == data->httpreq) ||
|
||||||
data->bits.http_put) &&
|
(HTTPREQ_PUT == data->httpreq) ) &&
|
||||||
conn->resume_from) {
|
conn->resume_from) {
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Resuming upload in HTTP means that we PUT or POST and that we have
|
* 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->customrequest?data->customrequest:
|
||||||
(data->bits.no_body?"HEAD":
|
(data->bits.no_body?"HEAD":
|
||||||
(data->bits.http_post || data->bits.http_formpost)?"POST":
|
((HTTPREQ_POST == data->httpreq) ||
|
||||||
(data->bits.http_put)?"PUT":"GET"),
|
(HTTPREQ_POST_FORM == data->httpreq))?"POST":
|
||||||
|
(HTTPREQ_PUT == data->httpreq)?"PUT":"GET"),
|
||||||
ppath,
|
ppath,
|
||||||
(conn->bits.proxy_user_passwd &&
|
(conn->bits.proxy_user_passwd &&
|
||||||
conn->allocptr.proxyuserpwd)?conn->allocptr.proxyuserpwd:"",
|
conn->allocptr.proxyuserpwd)?conn->allocptr.proxyuserpwd:"",
|
||||||
@@ -710,7 +704,7 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
headers = headers->next;
|
headers = headers->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data->bits.http_formpost) {
|
if(HTTPREQ_POST_FORM == data->httpreq) {
|
||||||
if(Curl_FormInit(&http->form, http->sendit)) {
|
if(Curl_FormInit(&http->form, http->sendit)) {
|
||||||
failf(data, "Internal HTTP POST error!\n");
|
failf(data, "Internal HTTP POST error!\n");
|
||||||
return CURLE_HTTP_POST_ERROR;
|
return CURLE_HTTP_POST_ERROR;
|
||||||
@@ -741,7 +735,7 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(data->bits.http_put) {
|
else if(HTTPREQ_PUT == data->httpreq) {
|
||||||
/* Let's PUT the data to the server! */
|
/* Let's PUT the data to the server! */
|
||||||
|
|
||||||
if(data->infilesize>0) {
|
if(data->infilesize>0) {
|
||||||
@@ -769,7 +763,7 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(data->bits.http_post) {
|
if(HTTPREQ_POST == data->httpreq) {
|
||||||
/* this is the simple POST, using x-www-form-urlencoded style */
|
/* this is the simple POST, using x-www-form-urlencoded style */
|
||||||
|
|
||||||
if(!checkheaders(data, "Content-Length:"))
|
if(!checkheaders(data, "Content-Length:"))
|
||||||
|
@@ -34,10 +34,6 @@
|
|||||||
|
|
||||||
#if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__)
|
#if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__)
|
||||||
|
|
||||||
#ifdef NEED_REENTRANT
|
|
||||||
#define _REENTRANT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
|
@@ -82,7 +82,7 @@ struct krb4_data {
|
|||||||
|
|
||||||
#ifndef HAVE_STRLCPY
|
#ifndef HAVE_STRLCPY
|
||||||
/* if it ever goes non-static, make it Curl_ prefixed! */
|
/* 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)
|
strlcpy (char *dst, const char *src, size_t dst_sz)
|
||||||
{
|
{
|
||||||
size_t n;
|
size_t n;
|
||||||
|
@@ -7,26 +7,28 @@ LIBRARY LIBCURL
|
|||||||
DESCRIPTION 'curl libcurl - http://curl.haxx.se'
|
DESCRIPTION 'curl libcurl - http://curl.haxx.se'
|
||||||
|
|
||||||
EXPORTS
|
EXPORTS
|
||||||
curl_easy_cleanup @ 1 ;
|
curl_easy_cleanup @ 1 ;
|
||||||
curl_easy_getinfo @ 2 ;
|
curl_easy_getinfo @ 2 ;
|
||||||
curl_easy_init @ 3 ;
|
curl_easy_init @ 3 ;
|
||||||
curl_easy_perform @ 4 ;
|
curl_easy_perform @ 4 ;
|
||||||
curl_easy_setopt @ 5 ;
|
curl_easy_setopt @ 5 ;
|
||||||
curl_escape @ 6 ;
|
curl_escape @ 6 ;
|
||||||
curl_formparse @ 7 ;
|
curl_unescape @ 7;
|
||||||
curl_formfree @ 8 ;
|
curl_formparse @ 8 ;
|
||||||
curl_getdate @ 9 ;
|
curl_formfree @ 9 ;
|
||||||
curl_getenv @ 10 ;
|
curl_getdate @ 10 ;
|
||||||
curl_slist_append @ 11 ;
|
curl_getenv @ 11 ;
|
||||||
curl_slist_free_all @ 12 ;
|
curl_global_cleanup @ 12 ;
|
||||||
curl_unescape @ 13 ;
|
curl_global_init @ 13 ;
|
||||||
curl_version @ 14 ;
|
curl_slist_append @ 14 ;
|
||||||
curl_maprintf @ 15 ;
|
curl_slist_free_all @ 15 ;
|
||||||
curl_mfprintf @ 16 ;
|
curl_version @ 16 ;
|
||||||
curl_mprintf @ 17 ;
|
curl_maprintf @ 17 ;
|
||||||
curl_msprintf @ 18 ;
|
curl_mfprintf @ 18 ;
|
||||||
curl_msnprintf @ 19 ;
|
curl_mprintf @ 19 ;
|
||||||
curl_mvfprintf @ 20 ;
|
curl_msprintf @ 20 ;
|
||||||
curl_strequal @ 21 ;
|
curl_msnprintf @ 21 ;
|
||||||
curl_strnequal @ 22 ;
|
curl_mvfprintf @ 22 ;
|
||||||
|
curl_strequal @ 23 ;
|
||||||
|
curl_strnequal @ 24 ;
|
||||||
|
|
||||||
|
@@ -97,7 +97,9 @@ void Curl_pgrsDone(struct connectdata *conn)
|
|||||||
if(!(data->progress.flags & PGRS_HIDE)) {
|
if(!(data->progress.flags & PGRS_HIDE)) {
|
||||||
data->progress.lastshow=0;
|
data->progress.lastshow=0;
|
||||||
Curl_pgrsUpdate(conn); /* the final (forced) update */
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -142,11 +142,6 @@ void Curl_failf(struct UrlData *data, char *fmt, ...)
|
|||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
if(data->errorbuffer)
|
if(data->errorbuffer)
|
||||||
vsnprintf(data->errorbuffer, CURL_ERROR_SIZE, fmt, ap);
|
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);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,7 +230,8 @@ CURLcode Curl_client_write(struct UrlData *data,
|
|||||||
return CURLE_WRITE_ERROR;
|
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
|
* Write headers to the same callback or to the especially setup
|
||||||
* header callback function (added after version 7.7.1).
|
* header callback function (added after version 7.7.1).
|
||||||
|
@@ -44,6 +44,14 @@
|
|||||||
typedef char bool;
|
typedef char bool;
|
||||||
#endif /* (rabe) */
|
#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>
|
#include <stdio.h>
|
||||||
#ifndef OS
|
#ifndef OS
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -230,7 +230,7 @@ int cert_verify_callback(int ok, X509_STORE_CTX *ctx)
|
|||||||
err_cert=X509_STORE_CTX_get_current_cert(ctx);
|
err_cert=X509_STORE_CTX_get_current_cert(ctx);
|
||||||
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);
|
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);
|
||||||
|
|
||||||
return 1;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -316,7 +316,7 @@ Curl_SSLConnect(struct connectdata *conn)
|
|||||||
|
|
||||||
if(data->cert) {
|
if(data->cert) {
|
||||||
if (!cert_stuff(conn, data->cert, 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;
|
return CURLE_SSL_CONNECT_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,14 +24,14 @@
|
|||||||
#ifndef _CURL_STRTOK_R_H
|
#ifndef _CURL_STRTOK_R_H
|
||||||
#define _CURL_STRTOK_R_H
|
#define _CURL_STRTOK_R_H
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
#ifndef HAVE_STRTOK_R
|
#ifndef HAVE_STRTOK_R
|
||||||
char *Curl_strtok_r(char *s, const char *delim, char **last);
|
char *Curl_strtok_r(char *s, const char *delim, char **last);
|
||||||
#define strtok_r Curl_strtok_r
|
#define strtok_r Curl_strtok_r
|
||||||
#else
|
#else
|
||||||
extern char *strtok_r(char *s1, const char *s2, char **lasts);
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -194,7 +194,7 @@ Transfer(struct connectdata *c_conn)
|
|||||||
int offset = 0; /* possible resume offset read from the
|
int offset = 0; /* possible resume offset read from the
|
||||||
Content-Range: header */
|
Content-Range: header */
|
||||||
int httpcode = 0; /* error code from the 'HTTP/1.? XXX' line */
|
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: */
|
/* for the low speed checks: */
|
||||||
CURLcode urg;
|
CURLcode urg;
|
||||||
@@ -302,6 +302,7 @@ Transfer(struct connectdata *c_conn)
|
|||||||
we bail out from this! */
|
we bail out from this! */
|
||||||
else if (0 >= (signed int) nread) {
|
else if (0 >= (signed int) nread) {
|
||||||
keepon &= ~KEEP_READ;
|
keepon &= ~KEEP_READ;
|
||||||
|
FD_ZERO(&rkeepfd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -464,8 +465,21 @@ Transfer(struct connectdata *c_conn)
|
|||||||
if (!headerline++) {
|
if (!headerline++) {
|
||||||
/* This is the first header, it MUST be the error code line
|
/* This is the first header, it MUST be the error code line
|
||||||
or else we consiser this to be the body right away! */
|
or else we consiser this to be the body right away! */
|
||||||
if (2 == sscanf (p, " HTTP/1.%d %3d", &httpversion,
|
int httpversion_major;
|
||||||
&httpcode)) {
|
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.httpcode = httpcode;
|
||||||
data->progress.httpversion = httpversion;
|
data->progress.httpversion = httpversion;
|
||||||
|
|
||||||
@@ -484,7 +498,7 @@ Transfer(struct connectdata *c_conn)
|
|||||||
return CURLE_HTTP_NOT_FOUND;
|
return CURLE_HTTP_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(httpversion == 0)
|
if(httpversion == 10)
|
||||||
/* Default action for HTTP/1.0 must be to close, unless
|
/* Default action for HTTP/1.0 must be to close, unless
|
||||||
we get one of those fancy headers that tell us the
|
we get one of those fancy headers that tell us the
|
||||||
server keeps it open for us! */
|
server keeps it open for us! */
|
||||||
@@ -510,7 +524,7 @@ Transfer(struct connectdata *c_conn)
|
|||||||
conn->size = contentlength;
|
conn->size = contentlength;
|
||||||
Curl_pgrsSetDownloadSize(data, contentlength);
|
Curl_pgrsSetDownloadSize(data, contentlength);
|
||||||
}
|
}
|
||||||
else if((httpversion == 0) &&
|
else if((httpversion == 10) &&
|
||||||
conn->bits.httpproxy &&
|
conn->bits.httpproxy &&
|
||||||
compareheader(p, "Proxy-Connection:", "keep-alive")) {
|
compareheader(p, "Proxy-Connection:", "keep-alive")) {
|
||||||
/*
|
/*
|
||||||
@@ -522,7 +536,7 @@ Transfer(struct connectdata *c_conn)
|
|||||||
conn->bits.close = FALSE; /* don't close when done */
|
conn->bits.close = FALSE; /* don't close when done */
|
||||||
infof(data, "HTTP/1.0 proxy connection set to keep alive!\n");
|
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")) {
|
compareheader(p, "Connection:", "keep-alive")) {
|
||||||
/*
|
/*
|
||||||
* A HTTP/1.0 reply with the 'Connection: keep-alive' line
|
* 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) {
|
else if(CHUNKE_STOP == res) {
|
||||||
/* we're done reading chunks! */
|
/* we're done reading chunks! */
|
||||||
keepon &= ~KEEP_READ; /* read no more */
|
keepon &= ~KEEP_READ; /* read no more */
|
||||||
|
FD_ZERO(&rkeepfd);
|
||||||
|
|
||||||
/* There are now possibly N number of bytes at the end of the
|
/* 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
|
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;
|
nread = conn->maxdownload - bytecount;
|
||||||
if((signed int)nread < 0 ) /* this should be unusual */
|
if((signed int)nread < 0 ) /* this should be unusual */
|
||||||
nread = 0;
|
nread = 0;
|
||||||
|
|
||||||
keepon &= ~KEEP_READ; /* we're done reading */
|
keepon &= ~KEEP_READ; /* we're done reading */
|
||||||
|
FD_ZERO(&rkeepfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
bytecount += nread;
|
bytecount += nread;
|
||||||
@@ -758,6 +775,7 @@ Transfer(struct connectdata *c_conn)
|
|||||||
if ((signed int)nread<=0) {
|
if ((signed int)nread<=0) {
|
||||||
/* done */
|
/* done */
|
||||||
keepon &= ~KEEP_WRITE; /* we're done writing */
|
keepon &= ~KEEP_WRITE; /* we're done writing */
|
||||||
|
FD_ZERO(&wkeepfd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
writebytecount += nread;
|
writebytecount += nread;
|
||||||
@@ -1041,10 +1059,8 @@ CURLcode Curl_perform(CURL *curl)
|
|||||||
case 303: /* See Other */
|
case 303: /* See Other */
|
||||||
/* Disable both types of POSTs, since doing a second POST when
|
/* Disable both types of POSTs, since doing a second POST when
|
||||||
* following isn't what anyone would want! */
|
* following isn't what anyone would want! */
|
||||||
data->bits.http_post = FALSE;
|
data->httpreq = HTTPREQ_GET; /* enforce GET request */
|
||||||
data->bits.http_formpost = FALSE;
|
infof(data, "Disables POST, goes with GET\n");
|
||||||
data->httpreq = HTTPREQ_GET; /* enfore GET request */
|
|
||||||
infof(data, "Disables POST\n");
|
|
||||||
break;
|
break;
|
||||||
case 304: /* Not Modified */
|
case 304: /* Not Modified */
|
||||||
/* 304 means we did a conditional request and it was "Not modified".
|
/* 304 means we did a conditional request and it was "Not modified".
|
||||||
|
45
lib/url.c
45
lib/url.c
@@ -231,6 +231,10 @@ CURLcode Curl_open(CURL **curl, char *url)
|
|||||||
|
|
||||||
data->httpreq = HTTPREQ_GET; /* Default HTTP request */
|
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 */
|
/* create an array with connection data struct pointers */
|
||||||
data->numconnects = 5; /* hard-coded right now */
|
data->numconnects = 5; /* hard-coded right now */
|
||||||
data->connects = (struct connectdata **)
|
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;
|
data->bits.hide_progress = va_arg(param, long)?TRUE:FALSE;
|
||||||
if(data->bits.hide_progress)
|
if(data->bits.hide_progress)
|
||||||
data->progress.flags |= PGRS_HIDE;
|
data->progress.flags |= PGRS_HIDE;
|
||||||
|
else
|
||||||
|
data->progress.flags &= ~PGRS_HIDE;
|
||||||
break;
|
break;
|
||||||
case CURLOPT_NOBODY:
|
case CURLOPT_NOBODY:
|
||||||
/*
|
/*
|
||||||
@@ -426,18 +432,21 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
|
|||||||
break;
|
break;
|
||||||
case CURLOPT_PUT:
|
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(va_arg(param, long))
|
||||||
if(data->bits.http_put)
|
|
||||||
data->httpreq = HTTPREQ_PUT;
|
data->httpreq = HTTPREQ_PUT;
|
||||||
break;
|
break;
|
||||||
|
#if 0
|
||||||
|
/* obsolete stuff, kept here a while for informational purposes */
|
||||||
case CURLOPT_MUTE:
|
case CURLOPT_MUTE:
|
||||||
/*
|
/*
|
||||||
* Stay absolutely quiet.
|
* Stay absolutely quiet.
|
||||||
*/
|
*/
|
||||||
data->bits.mute = va_arg(param, long)?TRUE:FALSE;
|
data->bits.mute = va_arg(param, long)?TRUE:FALSE;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case CURLOPT_TIMECONDITION:
|
case CURLOPT_TIMECONDITION:
|
||||||
/*
|
/*
|
||||||
* Set HTTP time condition. This must be one of the defines in the
|
* 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;
|
break;
|
||||||
case CURLOPT_WRITEHEADER:
|
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;
|
break;
|
||||||
case CURLOPT_COOKIE:
|
case CURLOPT_COOKIE:
|
||||||
/*
|
/*
|
||||||
@@ -520,10 +529,18 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
|
|||||||
* Set to make us do HTTP POST
|
* Set to make us do HTTP POST
|
||||||
*/
|
*/
|
||||||
data->httppost = va_arg(param, struct HttpPost *);
|
data->httppost = va_arg(param, struct HttpPost *);
|
||||||
data->bits.http_formpost = data->httppost?1:0;
|
if(data->httppost)
|
||||||
if(data->bits.http_formpost)
|
|
||||||
data->httpreq = HTTPREQ_POST_FORM;
|
data->httpreq = HTTPREQ_POST_FORM;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CURLOPT_HTTPGET:
|
||||||
|
/*
|
||||||
|
* Set to force us do HTTP GET
|
||||||
|
*/
|
||||||
|
if(va_arg(param, long))
|
||||||
|
data->httpreq = HTTPREQ_GET;
|
||||||
|
break;
|
||||||
|
|
||||||
case CURLOPT_INFILE:
|
case CURLOPT_INFILE:
|
||||||
/*
|
/*
|
||||||
* FILE pointer to read the file to be uploaded from. Or possibly
|
* FILE pointer to read the file to be uploaded from. Or possibly
|
||||||
@@ -566,8 +583,8 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
|
|||||||
break;
|
break;
|
||||||
case CURLOPT_POST:
|
case CURLOPT_POST:
|
||||||
/* Does this option serve a purpose anymore? */
|
/* 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;
|
data->httpreq = HTTPREQ_POST;
|
||||||
break;
|
break;
|
||||||
case CURLOPT_POSTFIELDS:
|
case CURLOPT_POSTFIELDS:
|
||||||
@@ -575,8 +592,7 @@ CURLcode Curl_setopt(CURL *curl, CURLoption option, ...)
|
|||||||
* A string with POST data. Makes curl HTTP POST.
|
* A string with POST data. Makes curl HTTP POST.
|
||||||
*/
|
*/
|
||||||
data->postfields = va_arg(param, char *);
|
data->postfields = va_arg(param, char *);
|
||||||
data->bits.http_post = data->postfields?TRUE:FALSE;
|
if(data->postfields)
|
||||||
if(data->bits.http_post)
|
|
||||||
data->httpreq = HTTPREQ_POST;
|
data->httpreq = HTTPREQ_POST;
|
||||||
break;
|
break;
|
||||||
case CURLOPT_POSTFIELDSIZE:
|
case CURLOPT_POSTFIELDSIZE:
|
||||||
@@ -2068,8 +2084,15 @@ static CURLcode Connect(struct UrlData *data,
|
|||||||
|
|
||||||
/* tell ourselves to fetch this range */
|
/* tell ourselves to fetch this range */
|
||||||
conn->range = strdup(resumerange);
|
conn->range = strdup(resumerange);
|
||||||
|
conn->bits.use_range = TRUE; /* enable range download */
|
||||||
conn->bits.rangestringalloc = TRUE; /* mark range string allocated */
|
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! */
|
*in_connect = conn; /* return this instead! */
|
||||||
|
|
||||||
|
@@ -382,12 +382,6 @@ typedef enum {
|
|||||||
/* This struct is for boolean settings that define how to behave during
|
/* This struct is for boolean settings that define how to behave during
|
||||||
this session. */
|
this session. */
|
||||||
struct Configbits {
|
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 get_filetime;
|
||||||
bool tunnel_thru_httpproxy;
|
bool tunnel_thru_httpproxy;
|
||||||
bool ftp_append;
|
bool ftp_append;
|
||||||
@@ -401,7 +395,6 @@ struct Configbits {
|
|||||||
bool http_set_referer;
|
bool http_set_referer;
|
||||||
bool http_auto_referer; /* set "correct" referer when following location: */
|
bool http_auto_referer; /* set "correct" referer when following location: */
|
||||||
bool httpproxy;
|
bool httpproxy;
|
||||||
bool mute;
|
|
||||||
bool no_body;
|
bool no_body;
|
||||||
bool set_port;
|
bool set_port;
|
||||||
bool set_range;
|
bool set_range;
|
||||||
|
@@ -1 +1,2 @@
|
|||||||
EXTRA_DIST = README getpageinvar.php simpleget.php simplepost.php
|
EXTRA_DIST = README getpageinvar.php getbinarypageinvar.php simpleget.php \
|
||||||
|
simplepost.php
|
||||||
|
@@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
PHP program examples
|
PHP program examples
|
||||||
|
|
||||||
|
getbinarypageinvar.php
|
||||||
|
- Fetch a single URL containing binary data and return it into a variable
|
||||||
|
|
||||||
getpageinvar.php
|
getpageinvar.php
|
||||||
- Fetch a single URL and return in a variable
|
- Fetch a single URL and return in a variable
|
||||||
|
|
||||||
|
25
php/examples/getbinarypageinvar.php
Normal file
25
php/examples/getbinarypageinvar.php
Normal 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 );
|
||||||
|
?>
|
@@ -1,10 +1,12 @@
|
|||||||
#
|
<?php
|
||||||
# The PHP curl module supports the received page to be returned in a variable
|
//
|
||||||
# if told.
|
// The PHP curl module supports the received page to be returned in a variable
|
||||||
#
|
// if told.
|
||||||
|
//
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
|
|
||||||
curl_setopt($ch, CURLOPT_URL,"http://www.myurl.com/");
|
curl_setopt($ch, CURLOPT_URL,"http://www.myurl.com/");
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
|
||||||
$result=curl_exec ($ch);
|
$result=curl_exec ($ch);
|
||||||
curl_close ($ch);
|
curl_close ($ch);
|
||||||
|
?>
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
#
|
<?php
|
||||||
# A very simple example that gets a HTTP page.
|
//
|
||||||
#
|
// A very simple example that gets a HTTP page.
|
||||||
|
//
|
||||||
|
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
|
|
||||||
@@ -10,4 +11,4 @@ curl_setopt ($ch, CURLOPT_HEADER, 0);
|
|||||||
curl_exec ($ch);
|
curl_exec ($ch);
|
||||||
|
|
||||||
curl_close ($ch);
|
curl_close ($ch);
|
||||||
|
?>
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
#
|
<?php
|
||||||
# A very simple PHP example that sends a HTTP POST to a remote site
|
//
|
||||||
#
|
// A very simple PHP example that sends a HTTP POST to a remote site
|
||||||
|
//
|
||||||
|
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
|
|
||||||
@@ -10,3 +11,4 @@ curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=v
|
|||||||
|
|
||||||
curl_exec ($ch);
|
curl_exec ($ch);
|
||||||
curl_close ($ch);
|
curl_close ($ch);
|
||||||
|
?>
|
||||||
|
2039
src/hugehelp.c.cvs
Normal file
2039
src/hugehelp.c.cvs
Normal file
File diff suppressed because it is too large
Load Diff
64
src/main.c
64
src/main.c
@@ -126,52 +126,6 @@ char *strdup(char *str)
|
|||||||
|
|
||||||
extern void hugehelp(void);
|
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
|
* This is the main global constructor for the app. Call this before
|
||||||
* _any_ libcurl usage. If this fails, *NO* libcurl functions may be
|
* _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)
|
CURLcode main_init(void)
|
||||||
{
|
{
|
||||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
return curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||||
return win32_init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -189,7 +142,6 @@ CURLcode main_init(void)
|
|||||||
*/
|
*/
|
||||||
void main_free(void)
|
void main_free(void)
|
||||||
{
|
{
|
||||||
win32_cleanup();
|
|
||||||
curl_global_cleanup();
|
curl_global_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,6 +261,7 @@ struct Configurable {
|
|||||||
char *useragent;
|
char *useragent;
|
||||||
char *cookie;
|
char *cookie;
|
||||||
bool use_resume;
|
bool use_resume;
|
||||||
|
bool resume_from_current;
|
||||||
int resume_from;
|
int resume_from;
|
||||||
char *postfields;
|
char *postfields;
|
||||||
long postfieldsize;
|
long postfieldsize;
|
||||||
@@ -757,8 +710,14 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
|
|||||||
break;
|
break;
|
||||||
case 'C':
|
case 'C':
|
||||||
/* This makes us continue an ftp transfer at given position */
|
/* This makes us continue an ftp transfer at given position */
|
||||||
if(!strequal(nextarg, "-"))
|
if(!strequal(nextarg, "-")) {
|
||||||
config->resume_from= atoi(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;
|
config->use_resume=TRUE;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
@@ -1639,7 +1598,7 @@ operate(struct Configurable *config, int argc, char *argv[])
|
|||||||
free(storefile);
|
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
|
/* 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 */
|
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) &&
|
if((config->conf&CONF_UPLOAD) &&
|
||||||
config->use_resume &&
|
config->resume_from_current) {
|
||||||
(0==config->resume_from)) {
|
|
||||||
config->resume_from = -1; /* -1 will then force get-it-yourself */
|
config->resume_from = -1; /* -1 will then force get-it-yourself */
|
||||||
}
|
}
|
||||||
if(config->headerfile) {
|
if(config->headerfile) {
|
||||||
|
@@ -1,3 +1,3 @@
|
|||||||
#define CURL_NAME "curl"
|
#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 ") "
|
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
EXTRA_DIST = ftpserver.pl httpserver.pl runtests.pl ftpsserver.pl stunnel.pm \
|
EXTRA_DIST = ftpserver.pl httpserver.pl httpsserver.pl runtests.pl \
|
||||||
getpart.pm
|
ftpsserver.pl stunnel.pm getpart.pm
|
||||||
|
|
||||||
SUBDIRS = data
|
SUBDIRS = data
|
||||||
|
|
||||||
|
@@ -5,6 +5,7 @@ test:
|
|||||||
[ -f test1 ] || ln -s $(srcdir)/test* .
|
[ -f test1 ] || ln -s $(srcdir)/test* .
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
test1 test11 test14 test3 test400 test7 \
|
test1 test102 test106 test13 test17 test300 test43 test8 \
|
||||||
test10 test12 test2 test300 test5 test8 \
|
test10 test103 test107 test14 test2 test33 test5 test9 \
|
||||||
test100 test13 test200 test4 test6 test9
|
test100 test104 test11 test15 test200 test4 test6 \
|
||||||
|
test101 test105 test12 test16 test3 test400 test7
|
||||||
|
44
tests/data/test101
Normal file
44
tests/data/test101
Normal 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
33
tests/data/test102
Normal 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
39
tests/data/test103
Normal 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
29
tests/data/test104
Normal 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
33
tests/data/test105
Normal 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
34
tests/data/test106
Normal 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
38
tests/data/test107
Normal 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
44
tests/data/test15
Normal 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
37
tests/data/test16
Normal 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
42
tests/data/test17
Normal 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
50
tests/data/test33
Normal 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
64
tests/data/test43
Normal 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>
|
@@ -162,11 +162,9 @@ sub SIZE_command {
|
|||||||
|
|
||||||
logmsg "SIZE number $testno\n";
|
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,
|
my $size = $data[0];
|
||||||
$atime,$mtime,$ctime,$blksize,$blocks)
|
|
||||||
= stat($filename);
|
|
||||||
|
|
||||||
if($size) {
|
if($size) {
|
||||||
print "213 $size\r\n";
|
print "213 $size\r\n";
|
||||||
@@ -198,7 +196,7 @@ sub RETR_command {
|
|||||||
|
|
||||||
my $size=0;
|
my $size=0;
|
||||||
for(@data) {
|
for(@data) {
|
||||||
$size =+ length($_);
|
$size += length($_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($size) {
|
if($size) {
|
||||||
@@ -206,10 +204,16 @@ sub RETR_command {
|
|||||||
if($rest) {
|
if($rest) {
|
||||||
# move read pointer forward
|
# move read pointer forward
|
||||||
$size -= $rest;
|
$size -= $rest;
|
||||||
|
if($verbose) {
|
||||||
|
print STDERR "** REST $rest was removed from size.\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
print "150 Binary data connection for $testno () ($size bytes).\r\n";
|
print "150 Binary data connection for $testno () ($size bytes).\r\n";
|
||||||
$rest=0; # reset rest again
|
$rest=0; # reset rest again
|
||||||
|
|
||||||
|
if($verbose) {
|
||||||
|
print STDERR "150 Binary data connection for $testno ($size bytes).\n";
|
||||||
|
}
|
||||||
for(@data) {
|
for(@data) {
|
||||||
print SOCK $_;
|
print SOCK $_;
|
||||||
}
|
}
|
||||||
@@ -219,6 +223,9 @@ sub RETR_command {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
print "550 $testno: No such file or directory.\r\n";
|
print "550 $testno: No such file or directory.\r\n";
|
||||||
|
if($verbose) {
|
||||||
|
print STDERR "550 $testno: no such file\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -470,7 +470,7 @@ sub singletest {
|
|||||||
# run curl, add -v for debug information output
|
# run curl, add -v for debug information output
|
||||||
my $cmdargs="$out--include -v $cmd";
|
my $cmdargs="$out--include -v $cmd";
|
||||||
|
|
||||||
my @stdintest = getpart("verify", "stdin");
|
my @stdintest = getpart("client", "stdin");
|
||||||
|
|
||||||
if(@stdintest) {
|
if(@stdintest) {
|
||||||
my $stdinfile="$LOGDIR/stdin-for-$testnum";
|
my $stdinfile="$LOGDIR/stdin-for-$testnum";
|
||||||
@@ -514,7 +514,7 @@ sub singletest {
|
|||||||
if(!$short) {
|
if(!$short) {
|
||||||
print "curl returned $res\n";
|
print "curl returned $res\n";
|
||||||
}
|
}
|
||||||
print " error FAILED";
|
print " error FAILED\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -525,7 +525,7 @@ sub singletest {
|
|||||||
|
|
||||||
$res = compare(\@actual, \@validstdout);
|
$res = compare(\@actual, \@validstdout);
|
||||||
if($res) {
|
if($res) {
|
||||||
print " stdout FAILED";
|
print " stdout FAILED\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(!$short) {
|
if(!$short) {
|
||||||
@@ -533,12 +533,14 @@ sub singletest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(@reply) {
|
my %replyattr = getpartattr("reply", "data");
|
||||||
|
if(!$replyattr{'nocheck'} &&
|
||||||
|
@reply) {
|
||||||
# verify the received data
|
# verify the received data
|
||||||
my @out = loadarray($CURLOUT);
|
my @out = loadarray($CURLOUT);
|
||||||
$res = compare(\@out, \@reply);
|
$res = compare(\@out, \@reply);
|
||||||
if ($res) {
|
if ($res) {
|
||||||
print " data FAILED";
|
print " data FAILED\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(!$short) {
|
if(!$short) {
|
||||||
@@ -551,7 +553,7 @@ sub singletest {
|
|||||||
my @out = loadarray("$LOGDIR/upload.$testnum");
|
my @out = loadarray("$LOGDIR/upload.$testnum");
|
||||||
$res = compare(\@out, \@upload);
|
$res = compare(\@out, \@upload);
|
||||||
if ($res) {
|
if ($res) {
|
||||||
print " upload FAILED";
|
print " upload FAILED\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(!$short) {
|
if(!$short) {
|
||||||
@@ -565,13 +567,18 @@ sub singletest {
|
|||||||
|
|
||||||
# what to cut off from the live protocol sent by curl
|
# what to cut off from the live protocol sent by curl
|
||||||
my @strip = getpart("verify", "strip");
|
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);
|
$res = compare(\@out, \@protstrip);
|
||||||
if($res) {
|
if($res) {
|
||||||
print " protocol FAILED";
|
print " protocol FAILED\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(!$short) {
|
if(!$short) {
|
||||||
@@ -593,7 +600,7 @@ sub singletest {
|
|||||||
|
|
||||||
$res = compare(\@generated, \@outfile);
|
$res = compare(\@generated, \@outfile);
|
||||||
if($res) {
|
if($res) {
|
||||||
print " output FAILED";
|
print " output FAILED\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(!$short) {
|
if(!$short) {
|
||||||
|
Reference in New Issue
Block a user