Compare commits
27 Commits
curl-7_6
...
curl-7_6_1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3b44a3df76 | ||
![]() |
572c29a4a3 | ||
![]() |
9464c5430d | ||
![]() |
a14aaaf23f | ||
![]() |
c41c5a0ef2 | ||
![]() |
c0c0283356 | ||
![]() |
1bcd3e601a | ||
![]() |
e721f85c83 | ||
![]() |
7015c61b86 | ||
![]() |
30ec0af109 | ||
![]() |
f585b66af7 | ||
![]() |
1b77c18430 | ||
![]() |
bd0bd35771 | ||
![]() |
368e3526ea | ||
![]() |
1bbe407a4d | ||
![]() |
513bc44421 | ||
![]() |
4cc76d1576 | ||
![]() |
6dc5c6ffc7 | ||
![]() |
c69c79dd04 | ||
![]() |
7fca24b14b | ||
![]() |
2fa0d3dd5f | ||
![]() |
3a8210c975 | ||
![]() |
d69302202d | ||
![]() |
227662d2ed | ||
![]() |
3cb3d43913 | ||
![]() |
c8a546c941 | ||
![]() |
62fec1d28d |
46
CHANGES
46
CHANGES
@@ -7,6 +7,52 @@
|
||||
History of Changes
|
||||
|
||||
|
||||
Daniel (31 January 2001)
|
||||
- Curl_read() and curl_read() now return a ssize_t for the size, as it had to
|
||||
be able to return -1. The telnet support crashed due to this and there was
|
||||
a possibility to weird behaviour all over.
|
||||
|
||||
- Added a configure.in check for a working getaddrinfo() if IPv6 is requested.
|
||||
I also made the configure script feature --enable-debug which sets a couple
|
||||
of compiler options when used. It assumes gcc.
|
||||
|
||||
Daniel (30 January 2001)
|
||||
- I finally took a stab at the long-term FIXME item I've had on myself, and
|
||||
now libcurl will properly work when doing a HTTP range-request that follows
|
||||
a Location:. Previously that would make libcurl fail saying that the server
|
||||
doesn't seem to support range requests.
|
||||
|
||||
Daniel (29 January 2001)
|
||||
- I added a test case for the HTTP PUT resume thing (test case 33).
|
||||
|
||||
Version 7.6.1-pre1
|
||||
|
||||
Daniel (29 January 2001)
|
||||
- Yet another Content-Range change. Ok now? Bob Schader checks from his end
|
||||
and it works for him.
|
||||
|
||||
Daniel (27 January 2001)
|
||||
- So the HTTP PUT resume fix wasn't good. There should appearantly be a
|
||||
Content-Range header when resuming a PUT.
|
||||
|
||||
- I noticed I broke the download-check that verifies that a resumed HTTP
|
||||
download is actually resumed. It got broke because my new 'httpreq' field
|
||||
in the main curl struct. I should get slapped. I added a test case for
|
||||
this now, so I won't be able to ruin this again without noticing.
|
||||
|
||||
- Added a test case for content-length verifying when downloading HTTP.
|
||||
|
||||
- Made the progress meter title say if the transfer is being transfered. It
|
||||
makes the output slightly better for resumes.
|
||||
|
||||
- When dealing with Location: and HTTP return codes, libcurl will not attempt
|
||||
to follow the spirit of RFC2616 better. It means that when POSTing to a
|
||||
URL that is being following to a second place, the standard will judge on
|
||||
what to do. All HTTP codes except 303 and 305 will cause curl to make a
|
||||
second POST operation. 303 will make a GET and 305 is not yet supported.
|
||||
|
||||
I also wrote two test cases for this POST/GET/Location stuff.
|
||||
|
||||
Version 7.6
|
||||
|
||||
Daniel (26 January 2001)
|
||||
|
73
configure.in
73
configure.in
@@ -26,6 +26,72 @@ dnl The install stuff has already been taken care of by the automake stuff
|
||||
dnl AC_PROG_INSTALL
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
dnl ************************************************************
|
||||
dnl lame option to switch on debug options
|
||||
dnl
|
||||
AC_MSG_CHECKING([whether to enable debug options])
|
||||
AC_ARG_ENABLE(debug,
|
||||
[ --enable-debug Enable pedantic debug options
|
||||
--disable-debug Disable debug options],
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
|
||||
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
||||
CFLAGS="-Wall -pedantic -g"
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
|
||||
|
||||
dnl
|
||||
dnl check for working getaddrinfo()
|
||||
dnl
|
||||
AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
|
||||
AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
|
||||
AC_TRY_RUN( [
|
||||
#ifdef HAVE_NETDB_H
|
||||
#include <netdb.h>
|
||||
#endif
|
||||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
void main(void) {
|
||||
struct addrinfo hints, *ai;
|
||||
int error;
|
||||
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
||||
if (error) {
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
],[
|
||||
ac_cv_working_getaddrinfo="yes"
|
||||
],[
|
||||
ac_cv_working_getaddrinfo="no"
|
||||
],[
|
||||
ac_cv_working_getaddrinfo="yes"
|
||||
])])
|
||||
if test "$ac_cv_working_getaddrinfo" = "yes"; then
|
||||
AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
|
||||
AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
AC_DEFUN(CURL_CHECK_LOCALTIME_R,
|
||||
[
|
||||
dnl check for a few thread-safe functions
|
||||
@@ -251,7 +317,6 @@ AC_ARG_ENABLE(ipv6,
|
||||
ipv6=no
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(ENABLE_IPV6)
|
||||
ipv6=yes
|
||||
;;
|
||||
esac ],
|
||||
@@ -268,7 +333,6 @@ main()
|
||||
}
|
||||
],
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(ENABLE_IPV6)
|
||||
ipv6=yes,
|
||||
AC_MSG_RESULT(no)
|
||||
ipv6=no,
|
||||
@@ -276,6 +340,11 @@ main()
|
||||
ipv6=no
|
||||
))
|
||||
|
||||
if test "$ipv6" = "yes"; then
|
||||
CURL_CHECK_WORKING_GETADDRINFO
|
||||
fi
|
||||
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Checks for libraries.
|
||||
dnl **********************************************************************
|
||||
|
29
docs/FAQ
29
docs/FAQ
@@ -1,4 +1,4 @@
|
||||
Updated: January 22, 2001 (http://curl.haxx.se/docs/faq.shtml)
|
||||
Updated: January 29, 2001 (http://curl.haxx.se/docs/faq.shtml)
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
@@ -30,6 +30,7 @@ FAQ
|
||||
3.6 Does curl support javascript, ASP, XML, XHTML or HTML version Y?
|
||||
3.7 Can I use curl to delete/rename a file through FTP?
|
||||
3.8 How do I tell curl to follow HTTP redirects?
|
||||
3.9 How do I use curl in PHP?
|
||||
|
||||
4. Running Problems
|
||||
4.1 Problems connecting to SSL servers.
|
||||
@@ -53,6 +54,7 @@ FAQ
|
||||
5.3 How do I fetch multiple files with libcurl?
|
||||
5.4 Does libcurl do Winsock initing on win32 systems?
|
||||
5.5 Does CURLOPT_FILE work on win32 ?
|
||||
5.6 What about Keep-Alive or persistant connections?
|
||||
|
||||
6. License Issues
|
||||
6.1 I have a GPL program, can I use the libcurl library?
|
||||
@@ -279,6 +281,19 @@ FAQ
|
||||
|
||||
curl -L http://redirector.com
|
||||
|
||||
3.9 How do I use curl in PHP?
|
||||
|
||||
PHP4 has the ability to use libcurl as an internal module if built with that
|
||||
option enabled. You then get a set of extra functions that can be used
|
||||
within your PHP programs. You find all details about those functions in the
|
||||
curl section in the PHP manual, see the online version at:
|
||||
|
||||
http://www.php.net/manual/ref.curl.php
|
||||
|
||||
PHP also offers the option to run a command line, and then you can of course
|
||||
invoke the curl tool using a command line. This is the way to use curl if
|
||||
you're using PHP3 or PHP4 built without curl module support.
|
||||
|
||||
4. Running Problems
|
||||
|
||||
4.1. Problems connecting to SSL servers.
|
||||
@@ -310,6 +325,9 @@ FAQ
|
||||
In win32, the standard DOS shell treats the %-letter specially and you may
|
||||
need to quote the string properly when % is used in it.
|
||||
|
||||
Also note that if you want the literal %-letter to be part of the data you
|
||||
pass in a POST using -d/--data you must encode it as '%25'.
|
||||
|
||||
4.3. How can I use {, }, [ or ] to specify multiple URLs?
|
||||
|
||||
Because those letters have a special meaning to the shell, and to be used in
|
||||
@@ -482,6 +500,15 @@ FAQ
|
||||
|
||||
(provided by Joel DeYoung)
|
||||
|
||||
5.6 What about Keep-Alive or persistant connections?
|
||||
|
||||
This is closely related to issue 5.3. Since libcurl has no real support
|
||||
for doing multiple file transfers, there's no support for Keep-Alive or
|
||||
persistant connections either.
|
||||
|
||||
This is of course subject to change as soon as libcurl gets support for
|
||||
multiple files. Feel free to join in and make this change happen sooner!
|
||||
|
||||
6. License Issues
|
||||
|
||||
NOTE: This section is now updated to concern curl 7.5.2 or later!
|
||||
|
@@ -452,8 +452,8 @@ char *curl_getenv(char *variable);
|
||||
char *curl_version(void);
|
||||
|
||||
/* This is the version number */
|
||||
#define LIBCURL_VERSION "7.6"
|
||||
#define LIBCURL_VERSION_NUM 0x070600
|
||||
#define LIBCURL_VERSION "7.6.1-pre2"
|
||||
#define LIBCURL_VERSION_NUM 0x070601
|
||||
|
||||
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
|
||||
struct curl_slist {
|
||||
@@ -554,7 +554,7 @@ CURLcode curl_setopt(CURL *handle, CURLoption option, ...);
|
||||
CURLcode curl_close(CURL *curl); /* the opposite of curl_open() */
|
||||
|
||||
CURLcode curl_read(CURLconnect *c_conn, char *buf, size_t buffersize,
|
||||
size_t *n);
|
||||
ssize_t *n);
|
||||
CURLcode curl_write(CURLconnect *c_conn, char *buf, size_t amount,
|
||||
size_t *n);
|
||||
|
||||
|
@@ -221,7 +221,7 @@ int Curl_GetFTPResponse(int sockfd, char *buf,
|
||||
int *ftpcode)
|
||||
{
|
||||
int nread;
|
||||
size_t keepon=TRUE;
|
||||
ssize_t keepon=TRUE;
|
||||
char *ptr;
|
||||
int timeout = 3600; /* in seconds */
|
||||
struct timeval interval;
|
||||
|
33
lib/http.c
33
lib/http.c
@@ -214,7 +214,7 @@ CURLcode add_buffer(send_buffer *in, void *inptr, size_t size)
|
||||
static
|
||||
int GetLine(int sockfd, char *buf, struct connectdata *conn)
|
||||
{
|
||||
size_t nread;
|
||||
ssize_t nread;
|
||||
int read_rc=1;
|
||||
char *ptr;
|
||||
struct UrlData *data=conn->data;
|
||||
@@ -429,9 +429,6 @@ CURLcode Curl_http(struct connectdata *conn)
|
||||
}
|
||||
}
|
||||
}
|
||||
if((data->bits.set_range) && !checkheaders(data, "Range:")) {
|
||||
data->ptr_rangeline = aprintf("Range: bytes=%s\015\012", data->range);
|
||||
}
|
||||
if((data->bits.http_set_referer) && !checkheaders(data, "Referer:")) {
|
||||
data->ptr_ref = aprintf("Referer: %s\015\012", data->referer);
|
||||
}
|
||||
@@ -528,6 +525,34 @@ CURLcode Curl_http(struct connectdata *conn)
|
||||
/* we've passed, proceed as normal */
|
||||
}
|
||||
}
|
||||
if(data->bits.set_range) {
|
||||
/*
|
||||
* A range is selected. We use different headers whether we're downloading
|
||||
* or uploading and we always let customized headers override our internal
|
||||
* ones if any such are specified.
|
||||
*/
|
||||
if((data->httpreq == HTTPREQ_GET) &&
|
||||
!checkheaders(data, "Range:")) {
|
||||
data->ptr_rangeline = aprintf("Range: bytes=%s\r\n", data->range);
|
||||
}
|
||||
else if((data->httpreq != HTTPREQ_GET) &&
|
||||
!checkheaders(data, "Content-Range:")) {
|
||||
|
||||
if(data->resume_from) {
|
||||
/* This is because "resume" was selected */
|
||||
long total_expected_size= data->resume_from + data->infilesize;
|
||||
data->ptr_rangeline = aprintf("Content-Range: bytes %s%ld/%ld\r\n",
|
||||
data->range, total_expected_size-1,
|
||||
total_expected_size);
|
||||
}
|
||||
else {
|
||||
/* Range was selected and then we just pass the incoming range and
|
||||
append total size */
|
||||
data->ptr_rangeline = aprintf("Content-Range: bytes %s/%d\r\n",
|
||||
data->range, data->infilesize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
send_buffer *req_buffer;
|
||||
|
@@ -203,6 +203,9 @@ int Curl_pgrsUpdate(struct UrlData *data)
|
||||
even when not displayed! */
|
||||
else if(!(data->progress.flags & PGRS_HEADERS_OUT)) {
|
||||
if (!data->progress.callback) {
|
||||
if(data->resume_from)
|
||||
fprintf(data->err, "** Resuming transfer from byte position %d\n",
|
||||
data->resume_from);
|
||||
fprintf(data->err,
|
||||
" %% Total %% Received %% Xferd Average Speed Time Curr.\n"
|
||||
" Dload Upload Total Current Left Speed\n");
|
||||
|
@@ -198,10 +198,10 @@ CURLcode Curl_client_write(struct UrlData *data,
|
||||
*/
|
||||
CURLcode Curl_read(struct connectdata *conn, int sockfd,
|
||||
char *buf, size_t buffersize,
|
||||
size_t *n)
|
||||
ssize_t *n)
|
||||
{
|
||||
struct UrlData *data = conn->data;
|
||||
size_t nread;
|
||||
ssize_t nread;
|
||||
|
||||
#ifdef USE_SSLEAY
|
||||
if (data->ssl.use) {
|
||||
@@ -234,7 +234,7 @@ CURLcode Curl_read(struct connectdata *conn, int sockfd,
|
||||
*/
|
||||
|
||||
CURLcode curl_read(CURLconnect *c_conn, char *buf, size_t buffersize,
|
||||
size_t *n)
|
||||
ssize_t *n)
|
||||
{
|
||||
struct connectdata *conn = (struct connectdata *)c_conn;
|
||||
|
||||
|
@@ -47,7 +47,7 @@ CURLcode Curl_client_write(struct UrlData *data, int type, char *ptr,
|
||||
/* internal read-function, does plain socket, SSL and krb4 */
|
||||
CURLcode Curl_read(struct connectdata *conn, int sockfd,
|
||||
char *buf, size_t buffersize,
|
||||
size_t *n);
|
||||
ssize_t *n);
|
||||
/* internal write-function, does plain socket, SSL and krb4 */
|
||||
CURLcode Curl_write(struct connectdata *conn, int sockfd,
|
||||
void *mem, size_t len,
|
||||
|
22
lib/telnet.c
22
lib/telnet.c
@@ -833,7 +833,7 @@ CURLcode Curl_telnet(struct connectdata *conn)
|
||||
|
||||
bool keepon = TRUE;
|
||||
char *buf = data->buffer;
|
||||
size_t nread;
|
||||
ssize_t nread;
|
||||
|
||||
init_telnet(data);
|
||||
|
||||
@@ -872,20 +872,22 @@ CURLcode Curl_telnet(struct connectdata *conn)
|
||||
}
|
||||
}
|
||||
|
||||
if(FD_ISSET(sockfd, &readfd))
|
||||
if(FD_ISSET(sockfd, &readfd)) {
|
||||
Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
|
||||
|
||||
/* if we receive 0 or less here, the server closed the connection and
|
||||
we bail out from this! */
|
||||
if (nread <= 0) {
|
||||
keepon = FALSE;
|
||||
break;
|
||||
}
|
||||
/* if we receive 0 or less here, the server closed the connection and
|
||||
we bail out from this! */
|
||||
if (nread <= 0) {
|
||||
keepon = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
telrcv(data, (unsigned char *)buf, nread);
|
||||
telrcv(data, (unsigned char *)buf, nread);
|
||||
}
|
||||
}
|
||||
}
|
||||
return CURLE_OK;
|
||||
/* mark this as "no further transfer wanted" */
|
||||
return Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -109,7 +109,7 @@
|
||||
CURLcode static
|
||||
_Transfer(struct connectdata *c_conn)
|
||||
{
|
||||
size_t nread; /* number of bytes read */
|
||||
ssize_t nread; /* number of bytes read */
|
||||
int bytecount = 0; /* total number of bytes read */
|
||||
int writebytecount = 0; /* number of bytes written */
|
||||
long contentlength=0; /* size of incoming data */
|
||||
@@ -161,6 +161,12 @@ _Transfer(struct connectdata *c_conn)
|
||||
Curl_pgrsTime(data, TIMER_PRETRANSFER);
|
||||
Curl_speedinit(data);
|
||||
|
||||
if((conn->sockfd == -1) &&
|
||||
(conn->writesockfd == -1)) {
|
||||
/* nothing to read, nothing to write, we're already OK! */
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
if (!conn->getheader) {
|
||||
header = FALSE;
|
||||
if(conn->size > 0)
|
||||
@@ -444,9 +450,14 @@ _Transfer(struct connectdata *c_conn)
|
||||
write a chunk of the body */
|
||||
if(conn->protocol&PROT_HTTP) {
|
||||
/* HTTP-only checks */
|
||||
if (data->resume_from &&
|
||||
!content_range &&
|
||||
(data->httpreq==HTTPREQ_GET)) {
|
||||
if (data->newurl) {
|
||||
/* abort after the headers if "follow Location" is set */
|
||||
infof (data, "Follow to new URL: %s\n", data->newurl);
|
||||
return CURLE_OK;
|
||||
}
|
||||
else if (data->resume_from &&
|
||||
!content_range &&
|
||||
(data->httpreq==HTTPREQ_GET)) {
|
||||
/* we wanted to resume a download, although the server
|
||||
doesn't seem to support this and we did this with a GET
|
||||
(if it wasn't a GET we did a POST or PUT resume) */
|
||||
@@ -454,11 +465,6 @@ _Transfer(struct connectdata *c_conn)
|
||||
"byte ranges. Cannot resume.");
|
||||
return CURLE_HTTP_RANGE_ERROR;
|
||||
}
|
||||
else if (data->newurl) {
|
||||
/* abort after the headers if "follow Location" is set */
|
||||
infof (data, "Follow to new URL: %s\n", data->newurl);
|
||||
return CURLE_OK;
|
||||
}
|
||||
else if(data->timecondition && !data->range) {
|
||||
/* A time condition has been set AND no ranges have been
|
||||
requested. This seems to be what chapter 13.3.4 of
|
||||
@@ -725,13 +731,48 @@ CURLcode curl_transfer(CURL *curl)
|
||||
data->newurl = NULL; /* don't show! */
|
||||
data->bits.urlstringalloc = TRUE; /* the URL is allocated */
|
||||
|
||||
/* Disable both types of POSTs, since doing a second POST when
|
||||
following isn't what anyone would want! */
|
||||
data->bits.http_post = FALSE;
|
||||
data->bits.http_formpost = FALSE;
|
||||
|
||||
infof(data, "Follows Location: to new URL: '%s'\n", data->url);
|
||||
|
||||
/*
|
||||
* We get here when the HTTP code is 300-399. We need to perform
|
||||
* differently based on exactly what return code there was.
|
||||
* Discussed on the curl mailing list and posted about on the 26th
|
||||
* of January 2001.
|
||||
*/
|
||||
switch(data->progress.httpcode) {
|
||||
case 300: /* Multiple Choices */
|
||||
case 301: /* Moved Permanently */
|
||||
case 302: /* Found */
|
||||
case 306: /* Not used */
|
||||
case 307: /* Temporary Redirect */
|
||||
default: /* for all unknown ones */
|
||||
/* These are explicitly mention since I've checked RFC2616 and they
|
||||
* seem to be OK to POST to.
|
||||
*/
|
||||
break;
|
||||
case 303: /* See Other */
|
||||
/* Disable both types of POSTs, since doing a second POST when
|
||||
* following isn't what anyone would want! */
|
||||
data->bits.http_post = FALSE;
|
||||
data->bits.http_formpost = FALSE;
|
||||
data->httpreq = HTTPREQ_GET; /* enfore GET request */
|
||||
infof(data, "Disables POST\n");
|
||||
break;
|
||||
case 304: /* Not Modified */
|
||||
/* 304 means we did a conditional request and it was "Not modified".
|
||||
* We shouldn't get any Location: header in this response!
|
||||
*/
|
||||
break;
|
||||
case 305: /* Use Proxy */
|
||||
/* (quote from RFC2616, section 10.3.6):
|
||||
* "The requested resource MUST be accessed through the proxy given
|
||||
* by the Location field. The Location field gives the URI of the
|
||||
* proxy. The recipient is expected to repeat this single request
|
||||
* via the proxy. 305 responses MUST only be generated by origin
|
||||
* servers."
|
||||
*/
|
||||
break;
|
||||
}
|
||||
curl_disconnect(c_connect);
|
||||
continue;
|
||||
}
|
||||
|
15
lib/url.c
15
lib/url.c
@@ -339,10 +339,14 @@ CURLcode curl_setopt(CURL *curl, CURLoption option, ...)
|
||||
break;
|
||||
case CURLOPT_UPLOAD:
|
||||
data->bits.upload = va_arg(param, long)?TRUE:FALSE;
|
||||
if(data->bits.upload)
|
||||
/* If this is HTTP, PUT is what's needed to "upload" */
|
||||
data->httpreq = HTTPREQ_PUT;
|
||||
break;
|
||||
case CURLOPT_POST:
|
||||
data->bits.http_post = va_arg(param, long)?TRUE:FALSE;
|
||||
data->httpreq = HTTPREQ_POST;
|
||||
if(data->bits.http_post)
|
||||
data->httpreq = HTTPREQ_POST;
|
||||
break;
|
||||
case CURLOPT_FILETIME:
|
||||
data->bits.get_filetime = va_arg(param, long)?TRUE:FALSE;
|
||||
@@ -364,7 +368,8 @@ CURLcode curl_setopt(CURL *curl, CURLoption option, ...)
|
||||
break;
|
||||
case CURLOPT_PUT:
|
||||
data->bits.http_put = va_arg(param, long)?TRUE:FALSE;
|
||||
data->httpreq = HTTPREQ_PUT;
|
||||
if(data->bits.http_put)
|
||||
data->httpreq = HTTPREQ_PUT;
|
||||
break;
|
||||
case CURLOPT_MUTE:
|
||||
data->bits.mute = va_arg(param, long)?TRUE:FALSE;
|
||||
@@ -406,12 +411,14 @@ CURLcode curl_setopt(CURL *curl, CURLoption option, ...)
|
||||
break;
|
||||
case CURLOPT_CUSTOMREQUEST:
|
||||
data->customrequest = va_arg(param, char *);
|
||||
data->httpreq = HTTPREQ_CUSTOM;
|
||||
if(data->customrequest)
|
||||
data->httpreq = HTTPREQ_CUSTOM;
|
||||
break;
|
||||
case CURLOPT_HTTPPOST:
|
||||
data->httppost = va_arg(param, struct HttpPost *);
|
||||
data->bits.http_formpost = data->httppost?1:0;
|
||||
data->httpreq = HTTPREQ_POST_FORM;
|
||||
if(data->bits.http_formpost)
|
||||
data->httpreq = HTTPREQ_POST_FORM;
|
||||
break;
|
||||
case CURLOPT_INFILE:
|
||||
data->in = va_arg(param, FILE *);
|
||||
|
@@ -109,7 +109,9 @@ typedef enum {
|
||||
#define CONF_FOLLOWLOCATION (1<<23) /* use Location: Luke! */
|
||||
#define CONF_GETTEXT (1<<24) /* use ASCII/text for transfer */
|
||||
#define CONF_HTTPPOST (1<<25) /* multipart/form-data HTTP POST */
|
||||
#if 0
|
||||
#define CONF_PUT (1<<27) /* PUT the input file */
|
||||
#endif
|
||||
#define CONF_MUTE (1<<28) /* force NOPROGRESS */
|
||||
|
||||
#ifndef HAVE_STRDUP
|
||||
@@ -1749,7 +1751,9 @@ operate(struct Configurable *config, int argc, char *argv[])
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,
|
||||
config->conf&CONF_FOLLOWLOCATION);
|
||||
curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT, config->conf&CONF_GETTEXT);
|
||||
#if 0
|
||||
curl_easy_setopt(curl, CURLOPT_PUT, config->conf&CONF_PUT);
|
||||
#endif
|
||||
curl_easy_setopt(curl, CURLOPT_MUTE, config->conf&CONF_MUTE);
|
||||
curl_easy_setopt(curl, CURLOPT_USERPWD, config->userpwd);
|
||||
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, config->proxyuserpwd);
|
||||
|
@@ -1,3 +1,3 @@
|
||||
#define CURL_NAME "curl"
|
||||
#define CURL_VERSION "7.6"
|
||||
#define CURL_VERSION "7.6.1-pre2"
|
||||
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "
|
||||
|
@@ -56,4 +56,10 @@ command26.txt prot26.txt command27.txt prot27.txt \
|
||||
name26.txt reply26.txt name27.txt stdout27.txt \
|
||||
command28.txt name28.txt prot28.txt reply28.txt \
|
||||
command120.txt name120.txt prot120.txt reply120.txt \
|
||||
command121.txt name121.txt prot121.txt reply121.txt
|
||||
command121.txt name121.txt prot121.txt reply121.txt \
|
||||
command29.txt error30.txt name30.txt prot30.txt reply30.txt \
|
||||
command30.txt name29.txt prot29.txt reply29.txt \
|
||||
command31.txt name32.txt reply31.txt reply32.txt \
|
||||
command32.txt prot31.txt reply310001.txt reply320001.txt \
|
||||
name31.txt prot32.txt reply310002.txt reply320002.txt \
|
||||
command33.txt extra33.txt name33.txt prot33.txt reply33.txt
|
||||
|
1
tests/data/command29.txt
Normal file
1
tests/data/command29.txt
Normal file
@@ -0,0 +1 @@
|
||||
-C 200 http://%HOSTIP:%HOSTPORT/29
|
1
tests/data/command30.txt
Normal file
1
tests/data/command30.txt
Normal file
@@ -0,0 +1 @@
|
||||
http://%HOSTIP:%HOSTPORT/30
|
2
tests/data/command31.txt
Normal file
2
tests/data/command31.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
http://%HOSTIP:%HOSTPORT/31 -d mooo=fooo -L
|
||||
|
2
tests/data/command32.txt
Normal file
2
tests/data/command32.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
http://%HOSTIP:%HOSTPORT/32 -d mooo=fooo -L
|
||||
|
3
tests/data/command33.txt
Normal file
3
tests/data/command33.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
http://%HOSTIP:%HOSTPORT/33 -Tdata/extra33.txt -C 50
|
||||
|
||||
|
1
tests/data/error30.txt
Normal file
1
tests/data/error30.txt
Normal file
@@ -0,0 +1 @@
|
||||
18
|
15
tests/data/extra33.txt
Normal file
15
tests/data/extra33.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
1
tests/data/name29.txt
Normal file
1
tests/data/name29.txt
Normal file
@@ -0,0 +1 @@
|
||||
HTTP download resume with Content-Length validity
|
1
tests/data/name30.txt
Normal file
1
tests/data/name30.txt
Normal file
@@ -0,0 +1 @@
|
||||
HTTP GET uncomplete document
|
1
tests/data/name31.txt
Normal file
1
tests/data/name31.txt
Normal file
@@ -0,0 +1 @@
|
||||
HTTP POST and follow Location: (error 301)
|
1
tests/data/name32.txt
Normal file
1
tests/data/name32.txt
Normal file
@@ -0,0 +1 @@
|
||||
HTTP POST and follow Location: (error 303)
|
1
tests/data/name33.txt
Normal file
1
tests/data/name33.txt
Normal file
@@ -0,0 +1 @@
|
||||
HTTP PUT resume
|
7
tests/data/prot29.txt
Normal file
7
tests/data/prot29.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
GET /29 HTTP/1.0
|
||||
Range: bytes=200-
|
||||
User-Agent: curl/7.6 (i686-pc-linux-gnu) libcurl 7.6 (SSL 0.9.5) (ipv6 enabled)
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
|
||||
|
6
tests/data/prot30.txt
Normal file
6
tests/data/prot30.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
GET /30 HTTP/1.0
|
||||
User-Agent: curl/7.6 (i686-pc-linux-gnu) libcurl 7.6 (SSL 0.9.5) (ipv6 enabled)
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
|
||||
|
9
tests/data/prot31.txt
Normal file
9
tests/data/prot31.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
POST /moo/moo/moo/310002 HTTP/1.0
|
||||
User-Agent: curl/7.6 (i686-pc-linux-gnu) libcurl 7.6 (SSL 0.9.5) (ipv6 enabled)
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
|
||||
Content-Length: 9
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
mooo=fooo
|
6
tests/data/prot32.txt
Normal file
6
tests/data/prot32.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
GET /moo/moo/moo/320002 HTTP/1.0
|
||||
User-Agent: curl/7.6 (i686-pc-linux-gnu) libcurl 7.6 (SSL 0.9.5) (ipv6 enabled)
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
|
||||
|
18
tests/data/prot33.txt
Normal file
18
tests/data/prot33.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
PUT /33 HTTP/1.0
|
||||
Content-Range: bytes 50-149/150
|
||||
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: 100
|
||||
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
||||
012345678
|
9
tests/data/reply29.txt
Normal file
9
tests/data/reply29.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
HTTP/1.1 200 OK
|
||||
Server: fake
|
||||
Content-Range: bytes 200-3526/3527
|
||||
Content-Length: 84
|
||||
|
||||
|
||||
The Content-Range header's contents above aren't really genuine for this
|
||||
content.
|
||||
|
7
tests/data/reply30.txt
Normal file
7
tests/data/reply30.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
HTTP/1.1 200 OK
|
||||
Server: fake
|
||||
Content-Length: 8400
|
||||
|
||||
This file is a lot smaller than 8400 and thus curl should return an error
|
||||
for this.
|
||||
|
6
tests/data/reply31.txt
Normal file
6
tests/data/reply31.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
HTTP/1.1 301 Moved Permanently
|
||||
Server: fake
|
||||
Location: /moo/moo/moo/310002
|
||||
|
||||
No contents
|
||||
|
9
tests/data/reply310001.txt
Normal file
9
tests/data/reply310001.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
HTTP/1.1 301 Moved Permanently
|
||||
Server: fake
|
||||
Location: /moo/moo/moo/310002
|
||||
|
||||
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
|
5
tests/data/reply310002.txt
Normal file
5
tests/data/reply310002.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
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
|
7
tests/data/reply32.txt
Normal file
7
tests/data/reply32.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
HTTP/1.1 303 See Other
|
||||
Server: fake
|
||||
Location: /moo/moo/moo/320002
|
||||
|
||||
This Location should be fetched with a GET!
|
||||
|
||||
|
9
tests/data/reply320001.txt
Normal file
9
tests/data/reply320001.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
HTTP/1.1 303 See Other
|
||||
Server: fake
|
||||
Location: /moo/moo/moo/320002
|
||||
|
||||
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
|
5
tests/data/reply320002.txt
Normal file
5
tests/data/reply320002.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
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
|
7
tests/data/reply33.txt
Normal file
7
tests/data/reply33.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
HTTP/1.1 303 See Other
|
||||
Server: fake
|
||||
Location: /moo/moo/moo/320002
|
||||
|
||||
This Location should be fetched with a GET!
|
||||
|
||||
|
@@ -119,7 +119,7 @@ for ( $waitedpid = 0;
|
||||
$testnum=$1;
|
||||
|
||||
if($verbose) {
|
||||
print STDERR "sending reply $testnum\n";
|
||||
print STDERR "OUT: sending reply $testnum\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@@ -49,6 +49,7 @@ my $memanalyze="../memanalyze.pl";
|
||||
|
||||
my $short;
|
||||
my $verbose;
|
||||
my $debugprotocol;
|
||||
my $anyway;
|
||||
|
||||
#######################################################################
|
||||
@@ -109,7 +110,8 @@ sub runhttpserver {
|
||||
}
|
||||
|
||||
if ($RUNNING != 1) {
|
||||
system("perl $srcdir/httpserver.pl $HOSTPORT &");
|
||||
my $flag=$debugprotocol?"-v ":"";
|
||||
system("perl $srcdir/httpserver.pl $flag $HOSTPORT &");
|
||||
sleep 1; # give it a little time to start
|
||||
}
|
||||
else {
|
||||
@@ -150,7 +152,8 @@ sub runftpserver {
|
||||
}
|
||||
|
||||
if ($RUNNING != 1) {
|
||||
system("perl $srcdir/ftpserver.pl $FTPPORT &");
|
||||
my $flag=$debugprotocol?"-v ":"";
|
||||
system("perl $srcdir/ftpserver.pl $flag $FTPPORT &");
|
||||
sleep 1; # give it a little time to start
|
||||
}
|
||||
else {
|
||||
@@ -504,6 +507,8 @@ sub singletest {
|
||||
unlink($STDOUT);
|
||||
unlink($STDERR);
|
||||
|
||||
unlink("$LOGDIR/upload.$NUMBER"); # remove upload leftovers
|
||||
unlink($CURLOUT); # remove the downloaded results
|
||||
unlink($FTPDCMD); # remove the instructions for this test
|
||||
|
||||
if($memory_debug) {
|
||||
@@ -551,6 +556,10 @@ do {
|
||||
# verbose output
|
||||
$verbose=1;
|
||||
}
|
||||
elsif ($ARGV[0] eq "-d") {
|
||||
# have the servers display protocol output
|
||||
$debugprotocol=1;
|
||||
}
|
||||
elsif($ARGV[0] eq "-s") {
|
||||
# short output
|
||||
$short=1;
|
||||
@@ -564,6 +573,7 @@ do {
|
||||
print <<EOHELP
|
||||
Usage: runtests.pl [-h][-s][-v][numbers]
|
||||
-a continue even if a test fails
|
||||
-d display server debug info
|
||||
-h this help text
|
||||
-s short output
|
||||
-v verbose output
|
||||
|
Reference in New Issue
Block a user