curl/lib
Yang Tse 89f54f3739 Platforms that don't have/run configure need default values in their config files for:
HAVE_GETNAMEINFO, GETNAMEINFO_QUAL_ARG1, GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2, GETNAMEINFO_TYPE_ARG46, GETNAMEINFO_TYPE_ARG7

HAVE_RECV, RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3, RECV_TYPE_ARG4, RECV_TYPE_RETV

HAVE_SEND, SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4, SEND_TYPE_RETV
2006-07-04 16:10:13 +00:00
..
.cvsignore ignore curllib.dsp 2004-08-10 10:43:41 +00:00
Makefile.Watcom Added splay.c. 2006-04-12 14:01:21 +00:00
Makefile.am Added README.pipelining but also extracted the "docs" files to a separate list 2006-06-24 21:54:22 +00:00
Makefile.b32 Static lib is libcurl.lib and import lib libcurl_imp.lib. 2004-11-14 13:48:15 +00:00
Makefile.inc First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
Makefile.m32 OpenSSL updates; get CA_BUNDLE from env. Assume no 2004-12-19 11:52:31 +00:00
Makefile.netware removed -fpack-struct because gcc4 seems to know its obsolete and warns... 2006-04-20 10:26:51 +00:00
Makefile.riscos GnuTLS updates 2005-04-07 21:10:31 +00:00
Makefile.vc6 added splay 2006-04-12 18:12:46 +00:00
README.ares up-to-date with reality 2004-04-06 07:59:11 +00:00
README.curlx updated with more and new info 2004-04-30 08:51:19 +00:00
README.encoding Fixed a lingering omission of gzip support. 2005-12-08 18:59:19 +00:00
README.hostip Added README.hostip 2005-01-14 13:43:29 +00:00
README.httpauth HTTP "auth done right". See lib/README.httpauth 2004-11-24 16:11:35 +00:00
README.memoryleak CURLDEBUG, not MALLOCDEBUG 2003-07-22 10:00:37 +00:00
README.multi_socket each socket is used by exactly one easy handle, but of course each easy handle 2006-04-21 13:40:07 +00:00
README.pipelining thoughts and ideas as posted to the list the other day 2006-06-24 21:51:28 +00:00
amigaos.c Made the copyright year match the latest modification's year. 2006-01-09 13:17:14 +00:00
amigaos.h Made the copyright year match the latest modification's year. 2006-01-09 13:17:14 +00:00
arpa_telnet.h Make some more arrays of pointers const. 2004-12-20 18:23:43 +00:00
base64.c Updated the copyright year since changes have been this year. 2005-03-31 07:02:02 +00:00
base64.h Updated the copyright year since changes have been this year. 2005-03-31 07:02:02 +00:00
ca-bundle.crt Removed the "TC TrustCenter, Germany, Class 0 CA." certificate: 2003-03-24 11:06:57 +00:00
config-amigaos.h Platforms that don't have/run configure need default values in their config files for: 2006-07-04 16:10:13 +00:00
config-mac.h Platforms that don't have/run configure need default values in their config files for: 2006-07-04 16:10:13 +00:00
config-riscos.h Platforms that don't have/run configure need default values in their config files for: 2006-07-04 16:10:13 +00:00
config-tpf.h Platforms that don't have/run configure need default values in their config files for: 2006-07-04 16:10:13 +00:00
config-win32.h Platforms that don't have/run configure need default values in their config files for: 2006-07-04 16:10:13 +00:00
config-win32ce.h Platforms that don't have/run configure need default values in their config files for: 2006-07-04 16:10:13 +00:00
config.dj djgpp has <process.h> too. 2006-04-26 17:15:57 +00:00
connect.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
connect.h Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
content_encoding.c Paul Querna fixed libcurl to better deal with deflate content encoding when 2006-04-25 20:49:40 +00:00
content_encoding.h strip trailing whitespace 2004-08-16 13:24:01 +00:00
cookie.c Michael Wallner provided a patch that allows "SESS" to be set with 2006-05-24 22:46:38 +00:00
cookie.h Michael Wallner provided a patch that allows "SESS" to be set with 2006-05-24 22:46:38 +00:00
curllib.dsw Hanno L. Kranzhoff fixed them 2002-06-14 09:36:09 +00:00
curlx.h delete trailing whitespace 2004-05-24 11:57:34 +00:00
dict.c 1 - allow DICT with properly URL-escaped words, like using %20 for spaces 2006-05-10 11:44:31 +00:00
dict.h FTP code turned into state machine. Not completely yet, but a good start. 2005-02-09 13:06:40 +00:00
easy.c First commit of David McCreedy's EBCDIC and TPF changes. 2006-04-07 21:50:47 +00:00
easyif.h First commit of David McCreedy's EBCDIC and TPF changes. 2006-04-07 21:50:47 +00:00
escape.c First commit of David McCreedy's EBCDIC and TPF changes. 2006-04-07 21:50:47 +00:00
escape.h First commit of David McCreedy's EBCDIC and TPF changes. 2006-04-07 21:50:47 +00:00
file.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
file.h FTP code turned into state machine. Not completely yet, but a good start. 2005-02-09 13:06:40 +00:00
formdata.c fix minor compiler warning 2006-06-28 02:45:27 +00:00
formdata.h Allow formposting of files larger than what fits in memory by not reading the 2004-06-14 08:51:43 +00:00
ftp.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
ftp.h First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
getenv.c Made the copyright year match the latest modification's year. 2006-01-09 13:17:14 +00:00
getinfo.c make sure the LASTSOCKET check only checks for SSL status if the socket 2006-05-11 05:17:40 +00:00
getinfo.h updated year in the copyright string 2004-01-07 09:19:33 +00:00
gtls.c additional renames of Curl_ourerrno => Curl_sockerrno 2006-05-05 10:24:27 +00:00
gtls.h GnuTLS support added. There's now a "generic" SSL layer that we use all over 2005-04-07 15:27:13 +00:00
hash.c First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
hash.h Use plain structs and not typedef'ed ones in the hash and linked-list code. 2005-01-25 00:06:29 +00:00
hostares.c get the Curl_sockerrno proto 2006-05-05 22:07:01 +00:00
hostasyn.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
hostip.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
hostip.h Test HAVE_GETNAMEINFO definition before using GETNAMEINFO_XXX definitions. 2006-07-04 02:27:11 +00:00
hostip4.c Use the HAVE_MALLOC_H and HAVE_PROCESS_H defines 2006-04-26 17:23:28 +00:00
hostip6.c Test HAVE_GETNAMEINFO definition before using GETNAMEINFO_XXX definitions. 2006-07-04 02:27:11 +00:00
hostsyn.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
hostthre.c Use the HAVE_MALLOC_H and HAVE_PROCESS_H defines 2006-04-26 17:23:28 +00:00
http.c Toshiyuki Maezawa fixed a problem where you couldn't override the 2006-07-04 12:01:59 +00:00
http.h First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
http_chunks.c Adrian Schuur added trailer support in the chunked encoding stream. The 2005-07-12 18:15:34 +00:00
http_chunks.h Adrian Schuur added trailer support in the chunked encoding stream. The 2005-07-12 18:15:34 +00:00
http_digest.c Olaf Stben fixed a bug that caused Digest authentication with md5-sess to 2006-05-25 23:04:20 +00:00
http_digest.h return CURLDIGEST_NOMEM when a memory function fails to deliver 2004-05-13 14:14:03 +00:00
http_negotiate.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
http_negotiate.h updated year in the copyright string 2004-01-07 09:19:33 +00:00
http_ntlm.c NTLM2 session response support 2006-06-07 14:14:04 +00:00
http_ntlm.h only enable NTLM if HTTP and NTLM is not disabled, and if NTLM is disabled 2005-11-23 11:51:31 +00:00
if2ip.c Brian Dessent's fixes for cygwin builds 2006-06-08 06:12:30 +00:00
if2ip.h build fix for Interix 2006-03-04 22:39:31 +00:00
inet_ntoa_r.h provide the proper copyright texts for these 2005-05-26 20:56:25 +00:00
inet_ntop.c Replaced nonstandard u_char and u_int types 2005-12-08 22:59:58 +00:00
inet_ntop.h Yang Tse: fixes the use of Curl_inet_ntop and Curl_inet_pton with no 2005-11-25 22:20:02 +00:00
inet_pton.c Replaced nonstandard u_char and u_int types 2005-12-08 22:59:58 +00:00
inet_pton.h Yang Tse's changes to provide an inet_pton() proto for the platforms who 2005-11-28 20:21:35 +00:00
krb4.c updated source header 2006-01-26 10:39:25 +00:00
krb4.h GnuTLS support added. There's now a "generic" SSL layer that we use all over 2005-04-07 15:27:13 +00:00
ldap.c Use the HAVE_MALLOC_H and HAVE_PROCESS_H defines 2006-04-26 17:23:28 +00:00
ldap.h FTP code turned into state machine. Not completely yet, but a good start. 2005-02-09 13:06:40 +00:00
libcurl.def Yang Tse: msvc7+ has deprecated the 'DESCRIPTION' section in 2005-11-14 07:48:05 +00:00
libcurl.framework.make scar Morales Viv updated the libcurl.framework.make file. 2006-05-26 22:23:54 +00:00
libcurl.imp there's an curl_easy_unescape too now 2006-04-18 09:23:03 +00:00
libcurl.plist Matt Veenstra updated to 7.12.3. Starting now, we'll update the version number 2004-12-08 23:09:23 +00:00
libcurl.rc Update copyright. 2005-07-05 18:07:55 +00:00
llist.c Use plain structs and not typedef'ed ones in the hash and linked-list code. 2005-01-25 00:06:29 +00:00
llist.h Use plain structs and not typedef'ed ones in the hash and linked-list code. 2005-01-25 00:06:29 +00:00
makefile.amiga Diego Casorran patches to make (lib)curl build fine on Amiga again 2005-07-13 18:06:40 +00:00
makefile.dj Updated generated dependencies. 2005-05-14 06:04:21 +00:00
md5.c corrected copyright year 2005-05-02 14:33:07 +00:00
md5.h Add 'const' to immutable arrays. 2004-12-15 01:38:25 +00:00
memdebug.c use %p to printf pointers since %x doesn't work properly on tru64 for this 2005-06-30 13:30:23 +00:00
memdebug.h Test HAVE_GETNAMEINFO definition before using GETNAMEINFO_XXX definitions. 2006-07-04 02:27:11 +00:00
memory.h removed tabs and trailing whitespace from source 2004-10-06 07:50:18 +00:00
mprintf.c Diego Casorran patches to make (lib)curl build fine on Amiga again 2005-07-13 18:06:40 +00:00
msvcproj.foot new attempt at an improved DSP-file generation 2004-05-11 07:54:55 +00:00
msvcproj.head Use the more correct BUILDING_LIBCURL define instead of CURLLIB_EXPORTS. 2005-08-29 20:56:20 +00:00
multi.c fix better minor compiler warning 2006-06-28 05:22:47 +00:00
multiif.h First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
netrc.c corrected copyright year 2005-05-02 14:33:07 +00:00
netrc.h updated year in the copyright string 2004-01-07 09:19:33 +00:00
nwlib.c converted to UNIX format. 2004-06-10 21:20:15 +00:00
parsedate.c fix questionable compare 2005-12-30 00:35:21 +00:00
parsedate.h Updated the copyright year since changes have been this year. 2005-03-31 07:02:02 +00:00
progress.c As reported in Mandrake's bug tracker bug 12289 2004-11-26 14:33:13 +00:00
progress.h clean up start time and t_startsingle use so that redirect_time works properly 2004-11-15 11:27:03 +00:00
security.c Removed security.h since it shadows an include file mingw needs when building 2005-03-14 00:00:45 +00:00
select.c additional renames of Curl_ourerrno => Curl_sockerrno 2006-05-05 10:24:27 +00:00
select.h First commit of David McCreedy's EBCDIC and TPF changes. 2006-04-07 21:50:47 +00:00
sendf.c additional renames of Curl_ourerrno => Curl_sockerrno 2006-05-05 10:24:27 +00:00
sendf.h FTP code turned into state machine. Not completely yet, but a good start. 2005-02-09 13:06:40 +00:00
setup.h Brian Dessent's fixes for cygwin builds 2006-06-08 06:12:30 +00:00
share.c Dan Fandrich added the --disable-cookies option to configure to build 2004-12-05 23:59:32 +00:00
share.h Added support for Salford-C under Win32 (scc). HAVE_MALLOC_H and 2006-04-26 17:11:05 +00:00
sockaddr.h oops * 2 2005-11-12 22:13:20 +00:00
speedcheck.c First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
speedcheck.h updated year in the copyright string 2004-01-07 09:19:33 +00:00
splay.c Ifdef'ed out unused function, added lots of comments and renamed a few 2006-05-27 22:25:55 +00:00
splay.h one modified proto and one removed proto 2006-05-27 22:26:41 +00:00
sslgen.c silence warning 2006-05-11 05:16:38 +00:00
sslgen.h David McCreedy provided a fix for CURLINFO_LASTSOCKET that does extended 2006-05-10 22:17:42 +00:00
ssluse.c with a very recent yassl, we now can display 'yassl' when the OpenSSL API is 2006-06-29 07:35:02 +00:00
ssluse.h NTLM2 session response support 2006-06-07 14:14:04 +00:00
strequal.c removed tabs and trailing whitespace from source 2004-10-06 07:50:18 +00:00
strequal.h modified this year 2005-04-22 20:48:07 +00:00
strerror.c Added revision ID-tag. 2006-04-26 17:27:36 +00:00
strerror.h removed trailing whitespace 2004-10-11 17:26:24 +00:00
strtok.c Dan Fandrich's cleanup patch to make pedantic compiler options cause less 2004-01-29 13:56:45 +00:00
strtok.h updated year in the copyright string 2004-01-07 09:19:33 +00:00
strtoofft.c Made the copyright year match the latest modification's year. 2006-01-09 13:17:14 +00:00
strtoofft.h Watcom uses 'i64' suffix. 2004-12-17 18:33:09 +00:00
telnet.c Roland Blom filed bug report #1481217 2006-05-04 22:39:47 +00:00
telnet.h FTP code turned into state machine. Not completely yet, but a good start. 2005-02-09 13:06:40 +00:00
tftp.c oops, could return an uninitialized variable 2006-05-09 13:02:53 +00:00
tftp.h John Kelly added TFTP support to libcurl. A bunch of new error codes was 2005-09-02 15:11:08 +00:00
timeval.c Made the copyright year match the latest modification's year. 2006-01-09 13:17:14 +00:00
timeval.h Made the copyright year match the latest modification's year. 2006-01-09 13:17:14 +00:00
transfer.c Peter Silva introduced CURLOPT_MAX_SEND_SPEED_LARGE and 2006-06-22 21:36:53 +00:00
transfer.h First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
url.c Peter Silva introduced CURLOPT_MAX_SEND_SPEED_LARGE and 2006-06-22 21:36:53 +00:00
url.h First curl_multi_socket() commit. Should primarily be considered as an internal 2006-04-10 15:00:53 +00:00
urldata.h Peter Silva introduced CURLOPT_MAX_SEND_SPEED_LARGE and 2006-06-22 21:36:53 +00:00
version.c CURL_VERSION_CONV is returned by curl_version_info if libcurl has been built 2006-04-19 09:03:21 +00:00

README.pipelining

Doing HTTP Pipelining with libcurl
==================================

Background

Since pipelining implies that one or more requests are sent to a server before
the previous response(s) have been received, it cannot be implemented easily
into libcurl's easy interface due to its synchronous nature. We therefore only
aim on adding it for multi interface use.

Considerations

When using the multi interface, you create one easy handle for each transfer.
Bascially any number of handles can be created, added and used with the multi
interface - simultaneously. It is an interface designed to allow many
simultaneous transfers while still using a single thread.

Pipelining however, will force us to allow apps to somehow "connect" two (or
more) easy handles that are added to a multi handle. The first one sends a
request and receives a response, just as normal, while the second (and
subsequent) ones need to be attached to the first handle so that it can send
its request on the same connection and then sit and wait until its response
comes.

To ponder about:

- Explicitly ask for pipelining handle X and handle Y ? It isn't always that
  easy for an app to do this association. The lib should probably still resolve
  the second one properly to make sure that they actually _can_ be considered
  for pipelining. Also, asking for explicit pipelining on handle X may be
  tricky when handle X get a closed connection.

- Have an option like "attempt pipelining" and then it _may_ use that if an
  existing connection is already present against our target HTTP server? May
  cause funny effects if the first transfer is a slow big file and the second
  is a very small one... Also probably requires some kind of notification
  support so that the app can get to know that the handle is put "in line" for
  pipelining.

- We need options to control max pipeline length, and probably how to behave
  if we reach that limit.

- When a pipeline is in use, we must take precautions so that we either don't
  allow the used handles (i.e those who still wait for a response) to be
  removed, or we allow removal but still deal with the outstanding response
  somehow.

- Currently (before pipelining) we do not have any code or concept that lets
  multiple handles share the same physical connection. We need a lock concept
  and carefully make sure that each handle knows exactly what they can do and
  when, on the shared connection.

- We need to keep a linked list of each handle that is part of a single pipe
  so that if it breaks, we know which handles that need to resend their
  requests.