summaryrefslogtreecommitdiff
path: root/Build/source/libs/curl/tests
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/curl/tests')
-rw-r--r--Build/source/libs/curl/tests/FILEFORMAT79
-rw-r--r--Build/source/libs/curl/tests/Makefile.am28
-rw-r--r--Build/source/libs/curl/tests/Makefile.in365
-rw-r--r--Build/source/libs/curl/tests/README80
-rw-r--r--Build/source/libs/curl/tests/data/Makefile.am19
-rw-r--r--Build/source/libs/curl/tests/data/Makefile.in238
-rw-r--r--Build/source/libs/curl/tests/data/test144
-rw-r--r--Build/source/libs/curl/tests/data/test1056
-rw-r--r--Build/source/libs/curl/tests/data/test10044
-rw-r--r--Build/source/libs/curl/tests/data/test10144
-rw-r--r--Build/source/libs/curl/tests/data/test10239
-rw-r--r--Build/source/libs/curl/tests/data/test10340
-rw-r--r--Build/source/libs/curl/tests/data/test10429
-rw-r--r--Build/source/libs/curl/tests/data/test10539
-rw-r--r--Build/source/libs/curl/tests/data/test10635
-rw-r--r--Build/source/libs/curl/tests/data/test10738
-rw-r--r--Build/source/libs/curl/tests/data/test10841
-rw-r--r--Build/source/libs/curl/tests/data/test10937
-rw-r--r--Build/source/libs/curl/tests/data/test1164
-rw-r--r--Build/source/libs/curl/tests/data/test11040
-rw-r--r--Build/source/libs/curl/tests/data/test11133
-rw-r--r--Build/source/libs/curl/tests/data/test11237
-rw-r--r--Build/source/libs/curl/tests/data/test11326
-rw-r--r--Build/source/libs/curl/tests/data/test11427
-rw-r--r--Build/source/libs/curl/tests/data/test11531
-rw-r--r--Build/source/libs/curl/tests/data/test11633
-rw-r--r--Build/source/libs/curl/tests/data/test11732
-rw-r--r--Build/source/libs/curl/tests/data/test11834
-rw-r--r--Build/source/libs/curl/tests/data/test11936
-rw-r--r--Build/source/libs/curl/tests/data/test1244
-rw-r--r--Build/source/libs/curl/tests/data/test12039
-rw-r--r--Build/source/libs/curl/tests/data/test12136
-rw-r--r--Build/source/libs/curl/tests/data/test12232
-rw-r--r--Build/source/libs/curl/tests/data/test12327
-rw-r--r--Build/source/libs/curl/tests/data/test12434
-rw-r--r--Build/source/libs/curl/tests/data/test12529
-rw-r--r--Build/source/libs/curl/tests/data/test12633
-rw-r--r--Build/source/libs/curl/tests/data/test12730
-rw-r--r--Build/source/libs/curl/tests/data/test1334
-rw-r--r--Build/source/libs/curl/tests/data/test1434
-rw-r--r--Build/source/libs/curl/tests/data/test1544
-rw-r--r--Build/source/libs/curl/tests/data/test1637
-rw-r--r--Build/source/libs/curl/tests/data/test1742
-rw-r--r--Build/source/libs/curl/tests/data/test1875
-rw-r--r--Build/source/libs/curl/tests/data/test1922
-rw-r--r--Build/source/libs/curl/tests/data/test19030
-rw-r--r--Build/source/libs/curl/tests/data/test242
-rw-r--r--Build/source/libs/curl/tests/data/test2022
-rw-r--r--Build/source/libs/curl/tests/data/test20031
-rw-r--r--Build/source/libs/curl/tests/data/test20122
-rw-r--r--Build/source/libs/curl/tests/data/test20226
-rw-r--r--Build/source/libs/curl/tests/data/test2122
-rw-r--r--Build/source/libs/curl/tests/data/test2234
-rw-r--r--Build/source/libs/curl/tests/data/test2322
-rw-r--r--Build/source/libs/curl/tests/data/test2437
-rw-r--r--Build/source/libs/curl/tests/data/test25109
-rw-r--r--Build/source/libs/curl/tests/data/test2635
-rw-r--r--Build/source/libs/curl/tests/data/test2746
-rw-r--r--Build/source/libs/curl/tests/data/test2864
-rw-r--r--Build/source/libs/curl/tests/data/test2940
-rw-r--r--Build/source/libs/curl/tests/data/test342
-rw-r--r--Build/source/libs/curl/tests/data/test3032
-rw-r--r--Build/source/libs/curl/tests/data/test30038
-rw-r--r--Build/source/libs/curl/tests/data/test30142
-rw-r--r--Build/source/libs/curl/tests/data/test30231
-rw-r--r--Build/source/libs/curl/tests/data/test30340
-rw-r--r--Build/source/libs/curl/tests/data/test30458
-rw-r--r--Build/source/libs/curl/tests/data/test3156
-rw-r--r--Build/source/libs/curl/tests/data/test3350
-rw-r--r--Build/source/libs/curl/tests/data/test3455
-rw-r--r--Build/source/libs/curl/tests/data/test3654
-rw-r--r--Build/source/libs/curl/tests/data/test3736
-rw-r--r--Build/source/libs/curl/tests/data/test3849
-rw-r--r--Build/source/libs/curl/tests/data/test439
-rw-r--r--Build/source/libs/curl/tests/data/test40048
-rw-r--r--Build/source/libs/curl/tests/data/test40130
-rw-r--r--Build/source/libs/curl/tests/data/test40221
-rw-r--r--Build/source/libs/curl/tests/data/test4364
-rw-r--r--Build/source/libs/curl/tests/data/test4460
-rw-r--r--Build/source/libs/curl/tests/data/test4564
-rw-r--r--Build/source/libs/curl/tests/data/test4662
-rw-r--r--Build/source/libs/curl/tests/data/test4738
-rw-r--r--Build/source/libs/curl/tests/data/test538
-rw-r--r--Build/source/libs/curl/tests/data/test636
-rw-r--r--Build/source/libs/curl/tests/data/test749
-rw-r--r--Build/source/libs/curl/tests/data/test847
-rw-r--r--Build/source/libs/curl/tests/data/test961
-rw-r--r--Build/source/libs/curl/tests/ftpserver.pl502
-rw-r--r--Build/source/libs/curl/tests/ftpsserver.pl48
-rw-r--r--Build/source/libs/curl/tests/getpart.pm203
-rw-r--r--Build/source/libs/curl/tests/httpserver.pl17
-rw-r--r--Build/source/libs/curl/tests/httpsserver.pl51
-rw-r--r--Build/source/libs/curl/tests/memanalyze.pl269
-rw-r--r--Build/source/libs/curl/tests/runtests.pl973
-rw-r--r--Build/source/libs/curl/tests/server/Makefile.am12
-rw-r--r--Build/source/libs/curl/tests/server/Makefile.in358
-rw-r--r--Build/source/libs/curl/tests/server/config.h.in2
-rw-r--r--Build/source/libs/curl/tests/server/getpart.c153
-rw-r--r--Build/source/libs/curl/tests/server/stamp-h3.in1
-rw-r--r--Build/source/libs/curl/tests/server/sws.c426
-rw-r--r--Build/source/libs/curl/tests/stunnel.pem31
-rw-r--r--Build/source/libs/curl/tests/stunnel.pm11
102 files changed, 7159 insertions, 0 deletions
diff --git a/Build/source/libs/curl/tests/FILEFORMAT b/Build/source/libs/curl/tests/FILEFORMAT
new file mode 100644
index 00000000000..6eb143485e0
--- /dev/null
+++ b/Build/source/libs/curl/tests/FILEFORMAT
@@ -0,0 +1,79 @@
+ The file format of the test suite is a very simple and extendable format. All
+data for a single test case resides in a single ASCII file. Labels mark the
+beginning and the end of all sections. Each label must be written in its own
+line and is resembling XML/HTML.
+
+ Each file is split up in three main sections: reply, client and verify. The
+reply section is used for the server to know what to send as a reply for the
+requests curl sends, the client section defines how the client should behave
+while the verify section defines how to verify that the data stored after a
+command has been run ended up correctly.
+
+ Each main section has a number of available subsections that can be
+specified, that will be checked/used if specified. This document includes all
+the subsections currently supported.
+
+<reply>
+<data [nocheck=1]>
+data to sent to the client on its request and later verified that it arrived
+safely. Set the nocheck=1 to prevent the test script to verify the arrival
+of this data.
+</data>
+<datacheck>
+if the data is sent but this is what should be checked afterwards
+</datacheck>
+<size>
+number to return on a ftp SIZE command
+</size>
+<cmd>
+special purpose server-command to control its behavior *before* the
+reply is sent
+</cmd>
+<postcmd>
+special purpose server-command to control its behavior *after* the
+reply is sent
+</postcmd>
+</reply>
+
+<client>
+<name>
+test case description
+</name>
+<command [option=no-output]>
+command line to run, there's a bunch of %variables that get replaced
+accordingly. more about them elsewhere
+
+Set 'option=no-output' to prevent the test script to slap on the --output
+argument that directs the output to a file. The --output is also not added if
+the client/stdout section is used.
+</command>
+<file name="log/filename">
+this creates the named file with this content before the test case is run
+which is useful if the test case needs a file to act on.
+</file>
+</client>
+
+<verify>
+<errorcode>
+numerical error code curl is supposed to return
+</errorcode>
+<strip>
+One regex per line that is removed from the protocol dumps before the
+comparison is made. This is very useful to remove dependencies on dynamicly
+changing protocol data such as port numbers or user-agent strings.
+</strip>
+<protocol [nonewline=yes]>
+the protocol dump curl should transmit, if 'nonewline' is set, we will cut
+off the trailing newline of this given data before comparing with the one
+actually sent by the client
+</protocol>
+<stdout>
+This verfies that this data was passed to stdout.
+</stdout>
+<file name="log/filename">
+the file's contents must be identical to this
+</file>
+<upload>
+the contents of the upload data curl should have sent
+</upload>
+</verify>
diff --git a/Build/source/libs/curl/tests/Makefile.am b/Build/source/libs/curl/tests/Makefile.am
new file mode 100644
index 00000000000..e0326c968c3
--- /dev/null
+++ b/Build/source/libs/curl/tests/Makefile.am
@@ -0,0 +1,28 @@
+EXTRA_DIST = ftpserver.pl httpserver.pl httpsserver.pl runtests.pl \
+ ftpsserver.pl stunnel.pm getpart.pm FILEFORMAT README \
+ stunnel.pem memanalyze.pl
+
+SUBDIRS = data server
+
+PERLFLAGS = -I$(srcdir)
+
+all:
+install:
+
+curl:
+ @(cd ..; make)
+
+test: server/sws
+ @cd data && exec $(MAKE) test
+ srcdir=$(srcdir) $(PERL) $(PERLFLAGS) $(srcdir)/runtests.pl
+
+quiet-test: server/sws
+ @cd data && exec $(MAKE) test
+ srcdir=$(srcdir) $(PERL) $(PERLFLAGS) $(srcdir)/runtests.pl -s -a
+
+clean:
+ rm -rf log
+ find . -name "*~" | xargs rm -f
+
+server/sws:
+ cd server; make sws
diff --git a/Build/source/libs/curl/tests/Makefile.in b/Build/source/libs/curl/tests/Makefile.in
new file mode 100644
index 00000000000..93327c0ccbe
--- /dev/null
+++ b/Build/source/libs/curl/tests/Makefile.in
@@ -0,0 +1,365 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AMTAR = @AMTAR@
+AS = @AS@
+AWK = @AWK@
+CC = @CC@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_ENABLED = @OPENSSL_ENABLED@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+YACC = @YACC@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+EXTRA_DIST = ftpserver.pl httpserver.pl httpsserver.pl runtests.pl \
+ ftpsserver.pl stunnel.pm getpart.pm FILEFORMAT README \
+ stunnel.pem memanalyze.pl
+
+
+SUBDIRS = data server
+
+PERLFLAGS = -I$(srcdir)
+subdir = tests
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/config.h \
+ $(top_builddir)/src/config.h \
+ $(top_builddir)/tests/server/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
+ uninstall-info-recursive all-recursive install-data-recursive \
+ install-exec-recursive installdirs-recursive install-recursive \
+ uninstall-recursive check-recursive installcheck-recursive
+DIST_COMMON = README Makefile.am Makefile.in
+DIST_SUBDIRS = $(SUBDIRS)
+all: all-recursive
+
+.SUFFIXES:
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ CONFIG_HEADERS= CONFIG_LINKS= \
+ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
+
+GTAGS:
+ here=`CDPATH=: && cd $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
+ if test -d $$d/$$file; then \
+ cp -pR $$d/$$file $(distdir) \
+ || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" \
+ distdir=../$(distdir)/$$subdir \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
+ clean-generic clean-libtool clean-recursive distclean \
+ distclean-generic distclean-libtool distclean-recursive \
+ distclean-tags distdir dvi dvi-am dvi-recursive info info-am \
+ info-recursive install install-am install-data install-data-am \
+ install-data-recursive install-exec install-exec-am \
+ install-exec-recursive install-info install-info-am \
+ install-info-recursive install-man install-recursive \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am installdirs-recursive maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive mostlyclean \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
+ tags tags-recursive uninstall uninstall-am uninstall-info-am \
+ uninstall-info-recursive uninstall-recursive
+
+
+all:
+install:
+
+curl:
+ @(cd ..; make)
+
+test: server/sws
+ @cd data && exec $(MAKE) test
+ srcdir=$(srcdir) $(PERL) $(PERLFLAGS) $(srcdir)/runtests.pl
+
+quiet-test: server/sws
+ @cd data && exec $(MAKE) test
+ srcdir=$(srcdir) $(PERL) $(PERLFLAGS) $(srcdir)/runtests.pl -s -a
+
+clean:
+ rm -rf log
+ find . -name "*~" | xargs rm -f
+
+server/sws:
+ cd server; make sws
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Build/source/libs/curl/tests/README b/Build/source/libs/curl/tests/README
new file mode 100644
index 00000000000..41b0f7e0212
--- /dev/null
+++ b/Build/source/libs/curl/tests/README
@@ -0,0 +1,80 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+The cURL Test Suite
+
+Requires:
+ perl (and a unix-style shell)
+ diff (when a test fail, a diff is shown)
+ stunnel (for HTTPS and FTPS tests)
+
+Run:
+ 'make test'. This invokes the 'runtests.pl' perl script. Edit the top
+ variables of that script in case you have some specific needs.
+
+ The script breaks on the first test that doesn't do OK. Use -a to prevent
+ the script to abort on the first error. Run the script with -v for more
+ verbose output. Use -d to run the test servers with debug output enabled as
+ well.
+
+ Use -s for shorter output, or pass test numbers to run specific tests only
+ (like "./runtests.pl 3 4" to test 3 and 4 only). It also supports test case
+ ranges with 'to'. As in "./runtests 3 to 9" which runs the seven tests from
+ 3 to 9.
+
+Memory:
+ The test script will check that all allocated memory is freed properly IF
+ curl has been built with the MALLOCDEBUG define set. The script will
+ automatically detect if that is the case, and it will use the ../memanalyze
+ script to analyze the memory debugging output.
+
+Debug:
+ If a test case fails, you can conveniently get the script to invoke the
+ debugger (gdb) for you with the server running and the exact same command
+ line parameters that failed. Just invoke 'runtests.pl <test number> -g' and
+ then just type 'run' in the debugger to perform the command through the
+ debugger.
+
+ If a test case causes a core dump, analyze it by running gdb like:
+
+ # gdb ../curl/src core
+
+ ... and get a stack trace with the gdb command:
+
+ (gdb) where
+
+Logs:
+ All logs are generated in the logs/ subdirctory (it is emtpied first
+ in the runtests.pl script)
+
+Data:
+ All test-data are put in the data/ subdirctory. Each test is stored in the
+ file named according to the test number.
+
+ The test case file format is simply a way to store different sections within
+ the same physical file. The different sections are to be described here
+ within shortly.
+
+
+TEST CASE NUMBERS
+
+ So far, I've used this system:
+
+ 1 - 99 HTTP
+ 100 - 199 FTP
+ 200 - 299 FILE
+ 300 - 399 HTTPS
+ 400 - 499 FTPS
+
+ ... if we run out of test numbers for a particular protocol, then we need
+ to fix it.
+
+TODO:
+
+ * Port old test cases to the new file format
+
+ * Make httpserver.pl work when we PUT without Content-Length:
+ * Add persistant connection support and test cases
diff --git a/Build/source/libs/curl/tests/data/Makefile.am b/Build/source/libs/curl/tests/data/Makefile.am
new file mode 100644
index 00000000000..2517626fb86
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/Makefile.am
@@ -0,0 +1,19 @@
+all:
+install:
+
+test:
+ [ -f test1 ] || ln -s $(srcdir)/test* .
+
+EXTRA_DIST = \
+test1 test108 test117 test127 test20 test27 test34 test46 \
+test10 test109 test118 test13 test200 test28 test36 test47 \
+test100 test11 test119 test14 test201 test29 test37 test5 \
+test101 test110 test12 test15 test202 test3 test4 test6 \
+test102 test111 test120 test16 test21 test30 test400 test7 \
+test103 test112 test121 test17 test22 test300 test401 test8 \
+test104 test113 test122 test18 test23 test301 test402 test9 \
+test105 test114 test123 test19 test24 test302 test43 test31 \
+test106 test115 test124 test190 test25 test303 test44 test38 \
+test107 test116 test125 test2 test26 test33 test45 test126 \
+test304
+
diff --git a/Build/source/libs/curl/tests/data/Makefile.in b/Build/source/libs/curl/tests/data/Makefile.in
new file mode 100644
index 00000000000..47bd4a00daf
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/Makefile.in
@@ -0,0 +1,238 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AMTAR = @AMTAR@
+AS = @AS@
+AWK = @AWK@
+CC = @CC@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_ENABLED = @OPENSSL_ENABLED@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+YACC = @YACC@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+EXTRA_DIST = \
+test1 test108 test117 test127 test20 test27 test34 test46 \
+test10 test109 test118 test13 test200 test28 test36 test47 \
+test100 test11 test119 test14 test201 test29 test37 test5 \
+test101 test110 test12 test15 test202 test3 test4 test6 \
+test102 test111 test120 test16 test21 test30 test400 test7 \
+test103 test112 test121 test17 test22 test300 test401 test8 \
+test104 test113 test122 test18 test23 test301 test402 test9 \
+test105 test114 test123 test19 test24 test302 test43 test31 \
+test106 test115 test124 test190 test25 test303 test44 test38 \
+test107 test116 test125 test2 test26 test33 test45 test126 \
+test304
+
+subdir = tests/data
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/config.h \
+ $(top_builddir)/src/config.h \
+ $(top_builddir)/tests/server/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+DIST_COMMON = Makefile.am Makefile.in
+all: all-am
+
+.SUFFIXES:
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/data/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ CONFIG_HEADERS= CONFIG_LINKS= \
+ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
+ if test -d $$d/$$file; then \
+ cp -pR $$d/$$file $(distdir) \
+ || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+
+installdirs:
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool uninstall uninstall-am uninstall-info-am
+
+
+all:
+install:
+
+test:
+ [ -f test1 ] || ln -s $(srcdir)/test* .
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Build/source/libs/curl/tests/data/test1 b/Build/source/libs/curl/tests/data/test1
new file mode 100644
index 00000000000..5dd5f11ccc7
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test1
@@ -0,0 +1,44 @@
+#
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+<foo>
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+simple HTTP GET
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/1
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test10 b/Build/source/libs/curl/tests/data/test10
new file mode 100644
index 00000000000..6672da85e61
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test10
@@ -0,0 +1,56 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+simple HTTP PUT from file
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/10 -T log/test10.txt
+</command>
+<file name="log/test10.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /we/want/10 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Content-Length: 78
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test100 b/Build/source/libs/curl/tests/data/test100
new file mode 100644
index 00000000000..436d94015b7
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test100
@@ -0,0 +1,44 @@
+#
+# Server-side
+<reply name="1">
+<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 PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+filter off really nothing
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+TYPE A
+LIST
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test101 b/Build/source/libs/curl/tests/data/test101
new file mode 100644
index 00000000000..877d7babcdd
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test101
@@ -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>
diff --git a/Build/source/libs/curl/tests/data/test102 b/Build/source/libs/curl/tests/data/test102
new file mode 100644
index 00000000000..536d4f0c8d3
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test102
@@ -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 PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/102
+</command>
+</test>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 500 no such command
+</file>
+
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 102
+RETR 102
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test103 b/Build/source/libs/curl/tests/data/test103
new file mode 100644
index 00000000000..3c7188b05fc
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test103
@@ -0,0 +1,40 @@
+# 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
+SIZE 103
+RETR 103
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test104 b/Build/source/libs/curl/tests/data/test104
new file mode 100644
index 00000000000..d44dcad2947
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test104
@@ -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>
diff --git a/Build/source/libs/curl/tests/data/test105 b/Build/source/libs/curl/tests/data/test105
new file mode 100644
index 00000000000..259d7a98186
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test105
@@ -0,0 +1,39 @@
+# 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>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 500 no such command
+REPLY SIZE 500 no such command
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER userdude
+PASS passfellow
+PWD
+EPSV
+PASV
+TYPE A
+SIZE 103
+RETR 103
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test106 b/Build/source/libs/curl/tests/data/test106
new file mode 100644
index 00000000000..8c7f294be3c
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test106
@@ -0,0 +1,35 @@
+# 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
+EPSV
+TYPE A
+SIZE 106
+RETR 106
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test107 b/Build/source/libs/curl/tests/data/test107
new file mode 100644
index 00000000000..c975ed2e804
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test107
@@ -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
+EPSV
+TYPE I
+STOR 107
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test108 b/Build/source/libs/curl/tests/data/test108
new file mode 100644
index 00000000000..69ddf912f97
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test108
@@ -0,0 +1,41 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP PORT upload with CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/CWD/STOR/RETR/108 -T log/upload108 -P -
+</command>
+<file name="log/upload108">
+Moooooooooooo
+ upload this
+</file>
+</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 CWD/STOR/RETR
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 108
+</protocol>
+<upload>
+Moooooooooooo
+ upload this
+</upload>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test109 b/Build/source/libs/curl/tests/data/test109
new file mode 100644
index 00000000000..2f19737b06a
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test109
@@ -0,0 +1,37 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP PASV upload append
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/109 -T log/upload109 --append
+</command>
+<file name="log/upload109">
+Moooooooooooo
+ upload this
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+TYPE I
+APPE 109
+</protocol>
+<upload>
+Moooooooooooo
+ upload this
+</upload>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test11 b/Build/source/libs/curl/tests/data/test11
new file mode 100644
index 00000000000..4d80c9d09ab
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test11
@@ -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>
+simple HTTP Location: following
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/11 -L
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /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 /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>
diff --git a/Build/source/libs/curl/tests/data/test110 b/Build/source/libs/curl/tests/data/test110
new file mode 100644
index 00000000000..e93c2cc4d99
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test110
@@ -0,0 +1,40 @@
+# Server-side
+<reply>
+<data>
+expected to be a file without the first part
+but we emulate that
+</data>
+<size>
+85
+</size>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download resume with set limit
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/110 -C 20
+</command>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 500 no such command
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 110
+REST 20
+RETR 110
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test111 b/Build/source/libs/curl/tests/data/test111
new file mode 100644
index 00000000000..a8052254b55
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test111
@@ -0,0 +1,33 @@
+# Server-side
+<reply>
+<size>
+85
+</size>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download resume beyond file size
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/111 -C 2000
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+36
+</errorcode>
+<strip>
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+TYPE I
+SIZE 111
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test112 b/Build/source/libs/curl/tests/data/test112
new file mode 100644
index 00000000000..001faa198c9
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test112
@@ -0,0 +1,37 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP PASV upload resume
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/112 -T log/upload112 -C 40
+</command>
+<file name="log/upload112">
+this is the *****crap******** that we're gonna upload
+
+worx?
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+TYPE I
+APPE 112
+</protocol>
+<upload>
+ gonna upload
+
+worx?
+</upload>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test113 b/Build/source/libs/curl/tests/data/test113
new file mode 100644
index 00000000000..93cb1c782bb
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test113
@@ -0,0 +1,26 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed login: USER not valid
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/113
+</command>
+<file name="log/ftpserver.cmd">
+REPLY USER 314 bluah you fewl!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+12
+</errorcode>
+<protocol>
+USER anonymous
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test114 b/Build/source/libs/curl/tests/data/test114
new file mode 100644
index 00000000000..7b35277d741
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test114
@@ -0,0 +1,27 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed login: PASS not valid
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/114
+</command>
+<file name="log/ftpserver.cmd">
+REPLY PASS 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+11
+</errorcode>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test115 b/Build/source/libs/curl/tests/data/test115
new file mode 100644
index 00000000000..e4bb77ec617
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test115
@@ -0,0 +1,31 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/115
+</command>
+<file name="log/ftpserver.cmd">
+REPLY PASV 314 bluah you f00l!
+REPLY EPSV 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+13
+</errorcode>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test116 b/Build/source/libs/curl/tests/data/test116
new file mode 100644
index 00000000000..d84ffe9fcfa
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test116
@@ -0,0 +1,33 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed PORT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/116 -P 127.0.0.1
+</command>
+<file name="log/ftpserver.cmd">
+REPLY PORT 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+30
+</errorcode>
+<strip>
+^PORT 127,0,0,1,.*
+^EPRT .*
+^LPRT .*
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test117 b/Build/source/libs/curl/tests/data/test117
new file mode 100644
index 00000000000..549f21c307c
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test117
@@ -0,0 +1,32 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed TYPE
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/117
+</command>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 314 bluah you f00l!
+REPLY TYPE 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+17
+</errorcode>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE I
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test118 b/Build/source/libs/curl/tests/data/test118
new file mode 100644
index 00000000000..db317c7b34e
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test118
@@ -0,0 +1,34 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed RETR
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/118
+</command>
+<file name="log/ftpserver.cmd">
+REPLY RETR 314 bluah you f00l!
+REPLY EPSV 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+19
+</errorcode>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 118
+RETR 118
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test119 b/Build/source/libs/curl/tests/data/test119
new file mode 100644
index 00000000000..dfcc50928b3
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test119
@@ -0,0 +1,36 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed RETR with PORT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/119 -P -
+</command>
+<file name="log/ftpserver.cmd">
+REPLY RETR 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+19
+</errorcode>
+<strip>
+^PORT.*
+^EPRT .*
+^LPRT .*
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+TYPE I
+SIZE 119
+RETR 119
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test12 b/Build/source/libs/curl/tests/data/test12
new file mode 100644
index 00000000000..6af9037db09
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test12
@@ -0,0 +1,44 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 206 Partial Content
+Date: Mon, 13 Nov 2000 13:41:09 GMT
+Server: Apache/1.3.11 (Unix) PHP/3.0.14
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 101
+Content-Range: bytes 100-200/3527
+Connection: close
+Content-Type: text/html
+
+ink="#ffffff" vlink="#cccccc">
+<table width=100% cellspacing=0 cellpadding=0 border=0>
+ <tr> 0123456
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP range support
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/12 -r 100-200
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/12 HTTP/1.1
+Range: bytes=100-200
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test120 b/Build/source/libs/curl/tests/data/test120
new file mode 100644
index 00000000000..30e03f9287f
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test120
@@ -0,0 +1,39 @@
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+ftp download with post-quote delete operation
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/120 -Q "-DELE file"
+</command>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 120
+RETR 120
+DELE file
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test121 b/Build/source/libs/curl/tests/data/test121
new file mode 100644
index 00000000000..34c22db6852
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test121
@@ -0,0 +1,36 @@
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+ftp download with post- and pre-transfer delete operations
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/121 -Q "-DELE after_transfer" -Q "DELE before_transfer"
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+DELE before_transfer
+EPSV
+TYPE I
+SIZE 121
+RETR 121
+DELE after_transfer
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test122 b/Build/source/libs/curl/tests/data/test122
new file mode 100644
index 00000000000..ba867c60207
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test122
@@ -0,0 +1,32 @@
+# Server-side
+<reply>
+<size>
+5
+</size>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download resume with whole file already downloaded
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/122 -C 5
+</command>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 500 no such command
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 122
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test123 b/Build/source/libs/curl/tests/data/test123
new file mode 100644
index 00000000000..d824fb61518
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test123
@@ -0,0 +1,27 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP upload resume with whole file already downloaded
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/123 -T log/upload123 -C 51
+</command>
+<file name="log/upload123">
+--------------------------------------------------
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+TYPE I
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test124 b/Build/source/libs/curl/tests/data/test124
new file mode 100644
index 00000000000..6eebcee35bf
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test124
@@ -0,0 +1,34 @@
+# Server-side
+<reply>
+<data>
+we can still send data even if pwd fails!
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed PWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/124
+</command>
+<file name="log/ftpserver.cmd">
+REPLY PWD 314 bluah you f00l!
+REPLY EPSV 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 124
+RETR 124
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test125 b/Build/source/libs/curl/tests/data/test125
new file mode 100644
index 00000000000..1f7be3d6711
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test125
@@ -0,0 +1,29 @@
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download, failed CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/file/125
+</command>
+<file name="log/ftpserver.cmd">
+REPLY CWD 314 bluah you f00l!
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+9
+</errorcode>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD path/to/file
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test126 b/Build/source/libs/curl/tests/data/test126
new file mode 100644
index 00000000000..9b227224cc1
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test126
@@ -0,0 +1,33 @@
+# Server-side
+<reply>
+<data>
+this is file contents
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download with multiple replies at once in RETR
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/lululul/126
+</command>
+<file name="log/ftpserver.cmd">
+RETRWEIRDO
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD blalbla/lululul
+EPSV
+TYPE I
+SIZE 126
+RETR 126
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test127 b/Build/source/libs/curl/tests/data/test127
new file mode 100644
index 00000000000..97aa45849ce
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test127
@@ -0,0 +1,30 @@
+# Server-side
+<reply>
+<data>
+moooooooo
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP --disable-epsv
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/file/127 --disable-epsv
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD path/to/file
+PASV
+TYPE I
+SIZE 127
+RETR 127
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test13 b/Build/source/libs/curl/tests/data/test13
new file mode 100644
index 00000000000..1a7d3605615
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test13
@@ -0,0 +1,34 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 Read you
+Deleted: suppose we got a header like this! ;-)
+
+blabla custom request result
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP custom request 'DELETE'
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/13 -X DELETE
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+DELETE /want/13 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test14 b/Build/source/libs/curl/tests/data/test14
new file mode 100644
index 00000000000..7f02b438aba
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test14
@@ -0,0 +1,34 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Connection: close
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP HEAD with Connection: close
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/14 -i --head
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+HEAD /want/14 HTTP/1.1
+User-Agent: curl/7.4.2-pre4 (sparc-sun-solaris2.7) libcurl 7.4.2-pre4
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test15 b/Build/source/libs/curl/tests/data/test15
new file mode 100644
index 00000000000..b2a8befa5f3
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test15
@@ -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>
diff --git a/Build/source/libs/curl/tests/data/test16 b/Build/source/libs/curl/tests/data/test16
new file mode 100644
index 00000000000..18ce653679c
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test16
@@ -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:§§§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>
diff --git a/Build/source/libs/curl/tests/data/test17 b/Build/source/libs/curl/tests/data/test17
new file mode 100644
index 00000000000..572252e5eca
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test17
@@ -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>
diff --git a/Build/source/libs/curl/tests/data/test18 b/Build/source/libs/curl/tests/data/test18
new file mode 100644
index 00000000000..3f33ae6cdcd
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test18
@@ -0,0 +1,75 @@
+# Server-side
+<reply>
+<data nocheck=1>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+
+moo
+</data>
+<data2>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+
+foo
+</data2>
+<data3>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+
+hoo
+</data3>
+</reply>
+
+# Client-side
+<client>
+ <name>
+multiple requests using {} in URL
+ </name>
+ <command>
+'%HOSTIP:%HOSTPORT/{18,180002,180003}'
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /18 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /180002 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /180003 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<stdout>
+--_curl_--127.0.0.1:8999/18
+HTTP/1.1 200 OK
+Funny-head: yesyes
+
+moo
+--_curl_--127.0.0.1:8999/180002
+HTTP/1.1 200 OK
+Funny-head: yesyes
+
+foo
+--_curl_--127.0.0.1:8999/180003
+HTTP/1.1 200 OK
+Funny-head: yesyes
+
+hoo
+</stdout>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test19 b/Build/source/libs/curl/tests/data/test19
new file mode 100644
index 00000000000..5e2b352c384
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test19
@@ -0,0 +1,22 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+attempt connect to non-listening socket
+ </name>
+ <command>
+%HOSTIP:60000
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+7
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test190 b/Build/source/libs/curl/tests/data/test190
new file mode 100644
index 00000000000..fc131f78b17
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test190
@@ -0,0 +1,30 @@
+# Server-side
+<reply>
+moooooooo
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download with strict timeout and slow CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/file/126 -m 3
+</command>
+<file name="log/ftpserver.cmd">
+DELAY CWD 15
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+28
+</errorcode>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD path/to/file
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test2 b/Build/source/libs/curl/tests/data/test2
new file mode 100644
index 00000000000..fc0ebe845e2
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test2
@@ -0,0 +1,42 @@
+#
+# 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
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTP GET with user and password
+ </name>
+ <command>
+ -u fake:user http://%HOSTIP:%HOSTPORT/2
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /2 HTTP/1.1
+Authorization: Basic ZmFrZTp1c2Vy
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<data>
+[insert full protocol verifiction dump here]
+</data>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test20 b/Build/source/libs/curl/tests/data/test20
new file mode 100644
index 00000000000..943596430bf
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test20
@@ -0,0 +1,22 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+attempt connect to non-existing host name
+ </name>
+ <command>
+non-existing-and-weeeeeeirdname
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+6
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test200 b/Build/source/libs/curl/tests/data/test200
new file mode 100644
index 00000000000..709de52fe61
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test200
@@ -0,0 +1,31 @@
+# Server-side
+<reply>
+<data>
+foo
+ bar
+bar
+ foo
+moo
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+basic file:// file
+ </name>
+ <command>
+file://localhost/%PWD/log/test200.txt
+</command>
+<file name="log/test200.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test201 b/Build/source/libs/curl/tests/data/test201
new file mode 100644
index 00000000000..f441be801a2
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test201
@@ -0,0 +1,22 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+missing file:// file
+ </name>
+ <command>
+file://localhost/%PWD/log/non-existant-file.txt
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+37
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test202 b/Build/source/libs/curl/tests/data/test202
new file mode 100644
index 00000000000..4a7fd313e81
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test202
@@ -0,0 +1,26 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+two file:// URLs to stdout
+ </name>
+ <command>
+file://localhost/%PWD/log/test202.txt file://localhost/%PWD/log/test202.txt
+</command>
+<file name="log/test202.txt">
+contents in a single file
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+contents in a single file
+contents in a single file
+</stdout>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test21 b/Build/source/libs/curl/tests/data/test21
new file mode 100644
index 00000000000..b8aa3e1b744
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test21
@@ -0,0 +1,22 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+use curl with multiple request methods
+ </name>
+ <command>
+-I -d FOOO localhost
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test22 b/Build/source/libs/curl/tests/data/test22
new file mode 100644
index 00000000000..1179cd29014
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test22
@@ -0,0 +1,34 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+
+This is the proof it works
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+get HTTP with URL > 10000 bytes
+ </name>
+ <command>
+%HOSTIP:%HOSTPORT/`perl -e 'print "a" x 10000;'`/22
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/22 HTTP/1.1
+User-Agent: curl/7.4.2 (sparc-sun-solaris2.7) libcurl 7.4.2 (SSL 0.9.6)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test23 b/Build/source/libs/curl/tests/data/test23
new file mode 100644
index 00000000000..1a30b303d4d
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test23
@@ -0,0 +1,22 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+unsupported protocol:// URL
+ </name>
+ <command>
+htfp://%HOSTIP:%HOSTPORT/none.htfml
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+1
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test24 b/Build/source/libs/curl/tests/data/test24
new file mode 100644
index 00000000000..1b8d528a97b
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test24
@@ -0,0 +1,37 @@
+# Server-side
+<reply>
+<data nocheck=1>
+HTTP/1.0 404 BAD BOY
+Content-Type: text/html
+
+This silly page doesn't reaaaaaly exist so you should not get it.
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP GET fail silently on HTTP error return
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/24 --fail
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /24 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<errorcode>
+22
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test25 b/Build/source/libs/curl/tests/data/test25
new file mode 100644
index 00000000000..a5592a00948
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test25
@@ -0,0 +1,109 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+Redirect to the same URL again!
+</data>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+ <name>
+looping HTTP Location: following with --max-redirs, no persistance
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/25 -L --max-redirs 5
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /want/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /want/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /want/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /want/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /want/data/reply/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /want/data/reply/data/reply/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+
+<errorcode>
+47
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test26 b/Build/source/libs/curl/tests/data/test26
new file mode 100644
index 00000000000..75530b1a304
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test26
@@ -0,0 +1,35 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 Mooo
+Server: test-server/fake
+Connection: close
+
+*flopp*
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+specify more -o than URLs
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/26 -o - -o -
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl.*
+</strip>
+<protocol>
+GET /want/26 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test27 b/Build/source/libs/curl/tests/data/test27
new file mode 100644
index 00000000000..830bb3dabeb
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test27
@@ -0,0 +1,46 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 Mooo
+Connection: close
+Set-Cookie: path=/; thewinneris=nowayyouwin;
+
+*flopp*
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+Get same cookie page several times
+ </name>
+ <command>
+'http://%HOSTIP:%HOSTPORT/want/{27,27,27}' -b none
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl.*
+</strip>
+<protocol>
+GET /want/27 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /want/27 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Cookie: thewinneris=nowayyouwin
+
+GET /want/27 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Cookie: thewinneris=nowayyouwin
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test28 b/Build/source/libs/curl/tests/data/test28
new file mode 100644
index 00000000000..bea7edd4787
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test28
@@ -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: /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE
+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: /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE
+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 with extra spaces in header
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/28 -L
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/28 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test29 b/Build/source/libs/curl/tests/data/test29
new file mode 100644
index 00000000000..e447c53d86c
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test29
@@ -0,0 +1,40 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+<html>result</html>
+</data>
+<postcmd>
+wait 10
+</postcmd>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP with 2 secs timeout
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/29 -m 2
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/29 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<errorcode>
+28
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test3 b/Build/source/libs/curl/tests/data/test3
new file mode 100644
index 00000000000..0e2d9d95f9d
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test3
@@ -0,0 +1,42 @@
+#
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+this is data even though Content-Length is set to zero
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTP POST with user and password
+ </name>
+ <command>
+ -d "fooo=mooo&pooo=clue&doo=%20%20%20++++" -u "fake:-user" http://%HOSTIP:%HOSTPORT/3
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline=yes>
+POST /3 HTTP/1.1
+Authorization: Basic ZmFrZTotdXNlcg==
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Content-Length: 37
+Content-Type: application/x-www-form-urlencoded
+
+fooo=mooo&pooo=clue&doo=%20%20%20++++
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test30 b/Build/source/libs/curl/tests/data/test30
new file mode 100644
index 00000000000..f8a1087dc0a
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test30
@@ -0,0 +1,32 @@
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP with no data in server reply
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/30
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/30 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<errorcode>
+52
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test300 b/Build/source/libs/curl/tests/data/test300
new file mode 100644
index 00000000000..faad4d0599f
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test300
@@ -0,0 +1,38 @@
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 7
+
+MooMoo
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+simple HTTPS GET
+ </name>
+ <command>
+https://%HOSTIP:%HTTPSPORT/300
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /300 HTTP/1.1
+Host: 127.0.0.1:8433
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test301 b/Build/source/libs/curl/tests/data/test301
new file mode 100644
index 00000000000..c84c57407c8
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test301
@@ -0,0 +1,42 @@
+#
+# 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
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTPS GET with user and password
+ </name>
+ <command>
+ -u fake:user https://%HOSTIP:%HTTPSPORT/2
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /2 HTTP/1.1
+Authorization: Basic ZmFrZTp1c2Vy
+Host: 127.0.0.1:8433
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<data>
+[insert full protocol verifiction dump here]
+</data>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test302 b/Build/source/libs/curl/tests/data/test302
new file mode 100644
index 00000000000..e31ce2ec93a
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test302
@@ -0,0 +1,31 @@
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTPS GET over HTTP proxy fails
+ </name>
+ <command>
+ -U fake:user -x %HOSTIP:%HOSTPORT https://ssl.fakeurl-to.test/slash/302
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+26
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+</protocol>
+<data>
+[insert full protocol verifiction dump here]
+</data>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test303 b/Build/source/libs/curl/tests/data/test303
new file mode 100644
index 00000000000..d925b143660
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test303
@@ -0,0 +1,40 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+<html>result</html>
+</data>
+<postcmd>
+wait 10
+</postcmd>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTPS with 2 secs timeout
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/want/303 -m 2
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/303 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<errorcode>
+28
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test304 b/Build/source/libs/curl/tests/data/test304
new file mode 100644
index 00000000000..8d151abef63
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test304
@@ -0,0 +1,58 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTPS multipart formpost
+ </name>
+ <command>
+https://%HOSTIP:%HTTPSPORT/we/want/304 -F name=daniel -F tool=curl -F file=@log/test304.txt
+</command>
+# We create this file before the command is invoked!
+<file name="log/test304.txt">
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|--curl).*
+</strip>
+<protocol>
+POST /we/want/304 HTTP/1.1
+User-Agent: curl/7.9.5-pre4 (sparc-sun-solaris2.7) libcurl 7.9.5-pre4 (OpenSSL 0.9.6c) (krb4 enabled)
+Host: 127.0.0.1:8433
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Content-Length: 1354
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=curlfPpkLyYwSYaH6Fkg0WkEldoJyAQ
+
+--curlfPpkLyYwSYaH6Fkg0WkEldoJyAQ
+Content-Disposition: form-data; name="name"
+
+daniel
+--curlfPpkLyYwSYaH6Fkg0WkEldoJyAQ
+Content-Disposition: form-data; name="tool"
+
+curl
+--curlfPpkLyYwSYaH6Fkg0WkEldoJyAQ
+Content-Disposition: form-data; name="file"; filename="log/test304.txt"
+Content-Type: text/plain
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+--curlfPpkLyYwSYaH6Fkg0WkEldoJyAQ--
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test31 b/Build/source/libs/curl/tests/data/test31
new file mode 100644
index 00000000000..037a872ef03
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test31
@@ -0,0 +1,56 @@
+# 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
+Set-Cookie: foobar=name; domain=127.0.0.1; path=/ ; secure
+Set-Cookie:mismatch=this ; domain=127.0.0.1; path=/silly/
+Set-Cookie: partmatch=present; domain=127.0.0.1 ; path=/;
+Set-Cookie: eat=this; domain=moo.foo.moo;
+Set-Cookie: eat=this-too; domain=.foo.moo;
+Set-Cookie: nodomainnovalue
+Set-Cookie: nodomain=value; expires=Tue Feb 1 11:56:27 MET 2014
+Set-Cookie: nodomainnovalue; domain=reallysilly
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP with weirdly formatted cookies and cookiejar storage
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/31 -b none -c log/jar31.txt
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/31 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<file name="log/jar31.txt">
+# Netscape HTTP Cookie File
+# http://www.netscape.com/newsref/std/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+127.0.0.1 FALSE / TRUE 0 foobar name
+127.0.0.1 FALSE /silly/ FALSE 0 ismatch this
+127.0.0.1 FALSE / FALSE 0 partmatch present
+moo.foo.moo FALSE / FALSE 0 eat this
+.foo.moo TRUE / FALSE 0 eat this-too
+127.0.0.1 FALSE / FALSE 1391252187 nodomain value
+</file>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test33 b/Build/source/libs/curl/tests/data/test33
new file mode 100644
index 00000000000..d8706adda7b
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test33
@@ -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>
diff --git a/Build/source/libs/curl/tests/data/test34 b/Build/source/libs/curl/tests/data/test34
new file mode 100644
index 00000000000..1786cb60c76
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test34
@@ -0,0 +1,55 @@
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccccc
+
+0
+muuu
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTP GET with chunked Transfer-Encoding
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/34
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /34 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
+
diff --git a/Build/source/libs/curl/tests/data/test36 b/Build/source/libs/curl/tests/data/test36
new file mode 100644
index 00000000000..0983beefde3
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test36
@@ -0,0 +1,54 @@
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+2
+a
+
+ILLEGAL
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+a
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTP GET with bad chunked Transfer-Encoding
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/36
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+26
+</errocode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /36 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
+
diff --git a/Build/source/libs/curl/tests/data/test37 b/Build/source/libs/curl/tests/data/test37
new file mode 100644
index 00000000000..5ebd6776cc6
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test37
@@ -0,0 +1,36 @@
+#
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTP GET with nothing returned from server
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/37
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+52
+</errocode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /37 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
+
diff --git a/Build/source/libs/curl/tests/data/test38 b/Build/source/libs/curl/tests/data/test38
new file mode 100644
index 00000000000..5b7b4fef7d6
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test38
@@ -0,0 +1,49 @@
+# Server-side
+<reply>
+<data nocheck=1>
+HTTP/1.0 200 Mooo
+Date: Mon, 13 Nov 2000 13:41:09 GMT
+Server: myown/1.0
+Connection: close
+
+todelooooo lalalala yada yada, we know nothing about ranges ;-)
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP resume request without server supporting it
+ </name>
+ <command option="no-output">
+http://%HOSTIP:%HOSTPORT/want/38 -C - -i -o log/fewl.txt
+</command>
+<file name="log/fewl.txt">
+This text is here to simulate a partly downloaded file to resume
+download on.
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+33
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/38 HTTP/1.1
+Range: bytes=78-
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+
+# the download target file must remain untouched
+<file name="log/fewl.txt">
+This text is here to simulate a partly downloaded file to resume
+download on.
+</file>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test4 b/Build/source/libs/curl/tests/data/test4
new file mode 100644
index 00000000000..47fc4d3ce38
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test4
@@ -0,0 +1,39 @@
+#
+# Server-side
+<reply name="1">
+<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
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+Replaced internal and added custom HTTP headers
+ </name>
+ <command>
+ -H "extra-header: here" -H "Accept: replaced" http://%HOSTIP:%HOSTPORT/4
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /4 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+extra-header: here
+Accept: replaced
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test400 b/Build/source/libs/curl/tests/data/test400
new file mode 100644
index 00000000000..b389cff7300
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test400
@@ -0,0 +1,48 @@
+#
+# Server-side
+<reply name="1">
+<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>
+FTPS dir list PASV
+ </name>
+ <command>
+ftps://%HOSTIP:%FTPSPORT/
+</command>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 500 no such command
+</file>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+filter off really nothing
+</strip>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+PASV
+TYPE A
+LIST
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test401 b/Build/source/libs/curl/tests/data/test401
new file mode 100644
index 00000000000..461b9ba8bb3
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test401
@@ -0,0 +1,30 @@
+# Server-side
+<reply>
+moooooooo
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTPS download with strict timeout and slow CWD
+ </name>
+ <command>
+ftps://%HOSTIP:%FTPSPORT/path/to/file/401 -m 4
+</command>
+<file name="log/ftpserver.cmd">
+DELAY CWD 15
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+28
+</errorcode>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD path/to/file
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test402 b/Build/source/libs/curl/tests/data/test402
new file mode 100644
index 00000000000..27b265c34cd
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test402
@@ -0,0 +1,21 @@
+# Server-side
+<reply>
+moooooooo
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTPS operation to FTP port
+ </name>
+ <command>
+ftps://%HOSTIP:%FTPPORT/path/to/file/402
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+35
+</errorcode>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test43 b/Build/source/libs/curl/tests/data/test43
new file mode 100644
index 00000000000..0a34a97890f
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test43
@@ -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>
diff --git a/Build/source/libs/curl/tests/data/test44 b/Build/source/libs/curl/tests/data/test44
new file mode 100644
index 00000000000..2426c61939c
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test44
@@ -0,0 +1,60 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP RFC1867-type formposting without Expect: header
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/44 -F name=daniel -F tool=curl -F file=@log/test44.txt -H 'Expect:'
+</command>
+# We create this file before the command is invoked!
+<file name="log/test44.txt">
+foo-
+This is a moo-
+bar
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|--curl).*
+</strip>
+<protocol>
+POST /we/want/44 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Content-Length: 376
+Content-Type: multipart/form-data; boundary=curluczemxkcWWsxptLlAImrFQHwQ3W
+
+--curluczemxkcWWsxptLlAImrFQHwQ3W
+Content-Disposition: form-data; name="name"
+
+daniel
+--curluczemxkcWWsxptLlAImrFQHwQ3W
+Content-Disposition: form-data; name="tool"
+
+curl
+--curluczemxkcWWsxptLlAImrFQHwQ3W
+Content-Disposition: form-data; name="file"; filename="log/test44.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+--curluczemxkcWWsxptLlAImrFQHwQ3W--
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test45 b/Build/source/libs/curl/tests/data/test45
new file mode 100644
index 00000000000..ec6a972d5b7
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test45
@@ -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.cgi?moo=http://&/110002
+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.cgi?moo=http://&/110002
+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>
+simple HTTP Location: without protocol in initial URL
+ </name>
+ <command>
+%HOSTIP:%HOSTPORT/want/45 -L
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/45 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+GET /want/data.cgi?moo=http://&/110002 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test46 b/Build/source/libs/curl/tests/data/test46
new file mode 100644
index 00000000000..94e01b05f3c
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test46
@@ -0,0 +1,62 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: Microsoft-IIS/4.0
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Set-Cookie: ckyPersistent=permanent; expires=Tue, 01-Jan-2010 05:00:00 GMT; path=/
+Set-Cookie: ckySession=temporary; path=/
+Set-Cookie: ASPSESSIONIDQGGQQSJJ=GKNBDIFAAOFDPDAIEAKDIBKE; path=/
+Cache-control: private
+
+This server reply is for testing a simple Location: following
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP, get cookies and store in cookie jar
+ </name>
+ <command>
+%HOSTIP:%HOSTPORT/want/46 -c log/jar46 -b log/injar46
+</command>
+<file name="log/injar46">
+# Netscape HTTP Cookie File
+# http://www.netscape.com/newsref/std/cookie_spec.html
+# This is generated by libcurl! Do not edit.
+
+www.fake.come FALSE / FALSE 1022144953 cookiecliente si
+www.loser.com FALSE / FALSE 1139150993 UID 99
+127.0.0.1 FALSE / FALSE 1139150993 mooo indeed
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/46 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Cookie: mooo=indeed
+
+</protocol>
+<file name="log/jar46">
+# Netscape HTTP Cookie File
+# http://www.netscape.com/newsref/std/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+www.fake.come FALSE / FALSE 1022144953 cookiecliente si
+www.loser.com FALSE / FALSE 1139150993 UID 99
+127.0.0.1 FALSE / FALSE 1139150993 mooo indeed
+127.0.0.1 FALSE / FALSE 1262322000 ckyPersistent permanent
+127.0.0.1 FALSE / FALSE 0 ckySession temporary
+127.0.0.1 FALSE / FALSE 0 ASPSESSIONIDQGGQQSJJ GKNBDIFAAOFDPDAIEAKDIBKE
+</file>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test47 b/Build/source/libs/curl/tests/data/test47
new file mode 100644
index 00000000000..3acfeb4677d
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test47
@@ -0,0 +1,38 @@
+#
+# Server-side
+<reply name="47">
+<data>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+<foo> within foo </foo>
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+simple HTTP 1.0 GET
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/47 -0
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /47 HTTP/1.0
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
+
diff --git a/Build/source/libs/curl/tests/data/test5 b/Build/source/libs/curl/tests/data/test5
new file mode 100644
index 00000000000..1052c1e9fab
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test5
@@ -0,0 +1,38 @@
+#
+# 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
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+ <name>
+HTTP over proxy
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/that/page/5 -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/we/want/that/page/5 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test6 b/Build/source/libs/curl/tests/data/test6
new file mode 100644
index 00000000000..d3e6ae321f1
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test6
@@ -0,0 +1,36 @@
+# 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
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP with simple cookie send
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/that/page/6 -b "name=contents;name2=content2"
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/that/page/6 HTTP/1.1
+Cookie: name=contents;name2=content2
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test7 b/Build/source/libs/curl/tests/data/test7
new file mode 100644
index 00000000000..c550feb41b2
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test7
@@ -0,0 +1,49 @@
+# 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
+Set-Cookie: foobar=name; domain=127.0.0.1; path=/;
+Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/";
+Set-Cookie: partmatch=present; domain=.0.0.1; path=/;
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP with cookie parser and header recording
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/7 -b none -D log/heads7.txt
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/7 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+
+</protocol>
+<file name="log/heads7.txt">
+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
+Set-Cookie: foobar=name; domain=127.0.0.1; path=/;
+Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/";
+Set-Cookie: partmatch=present; domain=.0.0.1; path=/;
+
+</file>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test8 b/Build/source/libs/curl/tests/data/test8
new file mode 100644
index 00000000000..4c1695b92a0
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test8
@@ -0,0 +1,47 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP with cookie parsing from header file
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/8 -b log/heads8.txt
+</command>
+
+# We create this file before the command is invoked!
+<file name="log/heads8.txt">
+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
+Set-Cookie: foobar=name; domain=127.0.0.1; path=/;
+Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/";
+Set-Cookie: partmatch=present; domain=.0.0.1; path=/;
+
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/8 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Cookie: partmatch=present; foobar=name
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/data/test9 b/Build/source/libs/curl/tests/data/test9
new file mode 100644
index 00000000000..e6883a979ef
--- /dev/null
+++ b/Build/source/libs/curl/tests/data/test9
@@ -0,0 +1,61 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+HTTP RFC1867-type formposting
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/9 -F name=daniel -F tool=curl -F file=@log/test9.txt
+</command>
+# We create this file before the command is invoked!
+<file name="log/test9.txt">
+foo-
+This is a moo-
+bar
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|--curl).*
+</strip>
+<protocol>
+POST /we/want/9 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Content-Length: 375
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=curluczemxkcWWsxptLlAImrFQHwQ3W
+
+--curluczemxkcWWsxptLlAImrFQHwQ3W
+Content-Disposition: form-data; name="name"
+
+daniel
+--curluczemxkcWWsxptLlAImrFQHwQ3W
+Content-Disposition: form-data; name="tool"
+
+curl
+--curluczemxkcWWsxptLlAImrFQHwQ3W
+Content-Disposition: form-data; name="file"; filename="log/test9.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+--curluczemxkcWWsxptLlAImrFQHwQ3W--
+
+</protocol>
+</verify>
diff --git a/Build/source/libs/curl/tests/ftpserver.pl b/Build/source/libs/curl/tests/ftpserver.pl
new file mode 100644
index 00000000000..084639a9cdb
--- /dev/null
+++ b/Build/source/libs/curl/tests/ftpserver.pl
@@ -0,0 +1,502 @@
+#!/usr/bin/perl
+#
+# $Id: ftpserver.pl,v 1.25 2001/12/03 13:46:56 bagder Exp $
+# This is the FTP server designed for the curl test suite.
+#
+# It is meant to exercise curl, it is not meant to be a fully working
+# or even very standard compliant server.
+#
+# You may optionally specify port on the command line, otherwise it'll
+# default to port 8921.
+#
+
+use Socket;
+use Carp;
+use FileHandle;
+
+use strict;
+
+require "getpart.pm";
+
+open(FTPLOG, ">log/ftpd.log") ||
+ print STDERR "failed to open log file, runs without logging\n";
+
+sub logmsg { print FTPLOG "$$: "; print FTPLOG @_; }
+
+sub ftpmsg { print INPUT @_; }
+
+my $verbose=0; # set to 1 for debugging
+my $retrweirdo=0;
+
+my $port = 8921; # just a default
+do {
+ if($ARGV[0] eq "-v") {
+ $verbose=1;
+ }
+ elsif($ARGV[0] =~ /^(\d+)$/) {
+ $port = $1;
+ }
+} while(shift @ARGV);
+
+my $proto = getprotobyname('tcp') || 6;
+
+socket(Server, PF_INET, SOCK_STREAM, $proto)|| die "socket: $!";
+setsockopt(Server, SOL_SOCKET, SO_REUSEADDR,
+ pack("l", 1)) || die "setsockopt: $!";
+bind(Server, sockaddr_in($port, INADDR_ANY))|| die "bind: $!";
+listen(Server,SOMAXCONN) || die "listen: $!";
+
+#print "FTP server started on port $port\n";
+
+open(PID, ">.ftp.pid");
+print PID $$;
+close(PID);
+
+my $waitedpid = 0;
+my $paddr;
+
+sub REAPER {
+ $waitedpid = wait;
+ $SIG{CHLD} = \&REAPER; # loathe sysV
+ logmsg "reaped $waitedpid" . ($? ? " with exit $?\n" : "\n");
+}
+
+# USER is ok in fresh state
+my %commandok = (
+ 'USER' => 'fresh',
+ 'PASS' => 'passwd',
+ 'PASV' => 'loggedin|twosock',
+ 'EPSV' => 'loggedin|twosock',
+ 'PORT' => 'loggedin|twosock',
+ 'TYPE' => 'loggedin|twosock',
+ 'LIST' => 'twosock',
+ 'NLST' => 'twosock',
+ 'RETR' => 'twosock',
+ 'STOR' => 'twosock',
+ 'APPE' => 'twosock',
+ 'REST' => 'twosock',
+ 'CWD' => 'loggedin|twosock',
+ 'SYST' => 'loggedin',
+ 'SIZE' => 'loggedin|twosock',
+ 'PWD' => 'loggedin|twosock',
+ 'QUIT' => 'loggedin|twosock',
+ 'DELE' => 'loggedin|twosock'
+ );
+
+# initially, we're in 'fresh' state
+my %statechange = ( 'USER' => 'passwd', # USER goes to passwd state
+ 'PASS' => 'loggedin', # PASS goes to loggedin state
+ 'PORT' => 'twosock', # PORT goes to twosock
+ 'PASV' => 'twosock', # PASV goes to twosock
+ 'EPSV' => 'twosock', # EPSV goes to twosock
+ );
+
+# this text is shown before the function specified below is run
+my %displaytext = ('USER' => '331 We are happy you popped in!',
+ 'PASS' => '230 Welcome you silly person',
+ 'PORT' => '200 You said PORT - I say FINE',
+ 'TYPE' => '200 I modify TYPE as you wanted',
+ 'LIST' => '150 here comes a directory',
+ 'NLST' => '150 here comes a directory',
+ 'CWD' => '250 CWD command successful.',
+ 'SYST' => '215 UNIX Type: L8', # just fake something
+ 'QUIT' => '221 bye bye baby', # just reply something
+ 'PWD' => '257 "/nowhere/anywhere" is current directory',
+ 'REST' => '350 Yeah yeah we set it there for you',
+ 'DELE' => '200 OK OK OK whatever you say'
+ );
+
+# callback functions for certain commands
+my %commandfunc = ( 'PORT' => \&PORT_command,
+ 'LIST' => \&LIST_command,
+ 'NLST' => \&NLST_command,
+ 'PASV' => \&PASV_command,
+ 'EPSV' => \&PASV_command,
+ 'RETR' => \&RETR_command,
+ 'SIZE' => \&SIZE_command,
+ 'REST' => \&REST_command,
+ 'STOR' => \&STOR_command,
+ 'APPE' => \&STOR_command, # append looks like upload
+ );
+
+my $rest=0;
+sub REST_command {
+ $rest = $_[0];
+ logmsg "Set REST position to $rest\n"
+}
+
+sub LIST_command {
+ # print "150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes)\r\n";
+
+# this is a built-in fake-dir ;-)
+my @ftpdir=("total 20\r\n",
+"drwxr-xr-x 8 98 98 512 Oct 22 13:06 .\r\n",
+"drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..\r\n",
+"drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT\r\n",
+"-r--r--r-- 1 0 1 35 Jul 16 1996 README\r\n",
+"lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin\r\n",
+"dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev\r\n",
+"drwxrwxrwx 2 98 98 512 May 29 16:04 download.html\r\n",
+"dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc\r\n",
+"drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub\r\n",
+"dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr\r\n");
+
+ logmsg "$$: pass data to child pid\n";
+ for(@ftpdir) {
+ print SOCK $_;
+ }
+ close(SOCK);
+ logmsg "$$: done passing data to child pid\n";
+
+ print "226 ASCII transfer complete\r\n";
+ return 0;
+}
+
+sub NLST_command {
+ my @ftpdir=("file", "with space", "fake", "..", " ..", "funny", "README");
+ for(@ftpdir) {
+ print SOCK "$_\r\n";
+ }
+ close(SOCK);
+ print "226 ASCII transfer complete\r\n";
+ return 0;
+}
+
+sub SIZE_command {
+ my $testno = $_[0];
+
+ loadtest("data/test$testno");
+
+ logmsg "SIZE number $testno\n";
+
+ my @data = getpart("reply", "size");
+
+ my $size = $data[0];
+
+ if($size) {
+ print "213 $size\r\n";
+ logmsg "SIZE $testno returned $size\n";
+ }
+ else {
+ $size=0;
+ @data = getpart("reply", "data");
+ for(@data) {
+ $size += length($_);
+ }
+ if($size) {
+ print "213 $size\r\n";
+ logmsg "SIZE $testno returned $size\n";
+ }
+ else {
+ print "550 $testno: No such file or directory.\r\n";
+ logmsg "SIZE $testno: no such file\n";
+ }
+ }
+ return 0;
+}
+
+sub RETR_command {
+ my $testno = $_[0];
+
+ logmsg "RETR test number $testno\n";
+
+ if($testno =~ /^verifiedserver$/) {
+ # this is the secret command that verifies that this actually is
+ # the curl test server
+ print "150 Binary junk (10 bytes).\r\n";
+ print SOCK "WE ROOLZ\r\n";
+ close(SOCK);
+ print "226 File transfer complete\r\n";
+ return 0;
+ }
+
+ loadtest("data/test$testno");
+
+ my @data = getpart("reply", "data");
+
+ my $size=0;
+ for(@data) {
+ $size += length($_);
+ }
+
+ if($size) {
+
+ if($rest) {
+ # move read pointer forward
+ $size -= $rest;
+ logmsg "REST $rest was removed from size, makes $size left\n";
+ $rest = 0; # reset REST offset again
+ }
+ if($retrweirdo) {
+ print "150 Binary data connection for $testno () ($size bytes).\r\n",
+ "226 File transfer complete\r\n";
+ logmsg "150+226 in one shot!\n";
+
+ for(@data) {
+ my $send = $_;
+ print SOCK $send;
+ }
+ close(SOCK);
+ $retrweirdo=0; # switch off the weirdo again!
+ }
+ else {
+ print "150 Binary data connection for $testno () ($size bytes).\r\n";
+ logmsg "150 Binary data connection for $testno ($size bytes).\n";
+
+ for(@data) {
+ my $send = $_;
+ print SOCK $send;
+ }
+ close(SOCK);
+
+ print "226 File transfer complete\r\n";
+ }
+ }
+ else {
+ print "550 $testno: No such file or directory.\r\n";
+ logmsg "550 $testno: no such file\n";
+ }
+ return 0;
+}
+
+sub STOR_command {
+ my $testno=$_[0];
+
+ logmsg "STOR test number $testno\n";
+
+ my $filename = "log/upload.$testno";
+
+ print "125 Gimme gimme gimme!\r\n";
+
+ open(FILE, ">$filename") ||
+ return 0; # failed to open output
+
+ my $line;
+ my $ulsize=0;
+ while (defined($line = <SOCK>)) {
+ $ulsize += length($line);
+ print FILE $line;
+ }
+ close(FILE);
+ close(SOCK);
+
+ logmsg "received $ulsize bytes upload\n";
+
+ print "226 File transfer complete\r\n";
+ return 0;
+}
+
+my $pasvport=9000;
+sub PASV_command {
+ my ($arg, $cmd)=@_;
+
+ socket(Server2, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
+ setsockopt(Server2, SOL_SOCKET, SO_REUSEADDR,
+ pack("l", 1)) || die "setsockopt: $!";
+
+ my $ok=0;
+
+ $pasvport++; # don't reuse the previous
+ for(1 .. 10) {
+ if($pasvport > 65535) {
+ $pasvport = 1025;
+ }
+ if(bind(Server2, sockaddr_in($pasvport, INADDR_ANY))) {
+ $ok=1;
+ last;
+ }
+ $pasvport+= 3; # try another port please
+ }
+ if(!$ok) {
+ print "500 no free ports!\r\n";
+ logmsg "couldn't find free port\n";
+ return 0;
+ }
+ listen(Server2,SOMAXCONN) || die "listen: $!";
+
+ if($cmd ne "EPSV") {
+ # PASV reply
+ logmsg "replying to a $cmd command\n";
+ printf("227 Entering Passive Mode (127,0,0,1,%d,%d)\n",
+ ($pasvport/256), ($pasvport%256));
+ }
+ else {
+ # EPSV reply
+ logmsg "replying to a $cmd command\n";
+ printf("229 Entering Passive Mode (|||%d|)\n", $pasvport);
+ }
+
+ my $paddr = accept(SOCK, Server2);
+ my($iport,$iaddr) = sockaddr_in($paddr);
+ my $name = gethostbyaddr($iaddr,AF_INET);
+
+ close(Server2); # close the listener when its served its purpose!
+
+ logmsg "$$: data connection from $name [", inet_ntoa($iaddr), "] at port $iport\n";
+
+ return;
+}
+
+
+sub PORT_command {
+ my $arg = $_[0];
+
+ if($arg !~ /(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)/) {
+ logmsg "bad PORT-line: $arg\n";
+ print "500 silly you, go away\r\n";
+ return 0;
+ }
+ my $iaddr = inet_aton("$1.$2.$3.$4");
+
+ my $port = ($5<<8)+$6;
+
+ if(!$port || $port > 65535) {
+ print STDERR "very illegal PORT number: $port\n";
+ return 1;
+ }
+
+ my $paddr = sockaddr_in($port, $iaddr);
+ my $proto = getprotobyname('tcp') || 6;
+
+ socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "major failure";
+ connect(SOCK, $paddr) || return 1;
+
+ return \&SOCK;
+}
+
+$SIG{CHLD} = \&REAPER;
+
+my %customreply;
+my %delayreply;
+sub customize {
+ undef %customreply;
+ open(CUSTOM, "<log/ftpserver.cmd") ||
+ return 1;
+
+ logmsg "FTPD: Getting commands from log/ftpserver.cmd\n";
+
+ while(<CUSTOM>) {
+ if($_ =~ /REPLY ([A-Z]+) (.*)/) {
+ $customreply{$1}=$2;
+ }
+ elsif($_ =~ /DELAY ([A-Z]+) (\d*)/) {
+ $delayreply{$1}=$2;
+ }
+ elsif($_ =~ /RETRWEIRDO/) {
+ print "instructed to use RETRWEIRDO\n";
+ $retrweirdo=1;
+ }
+ }
+ close(CUSTOM);
+}
+
+my @welcome=(
+ '220- _ _ ____ _ '."\r\n",
+ '220- ___| | | | _ \| | '."\r\n",
+ '220- / __| | | | |_) | | '."\r\n",
+ '220- | (__| |_| | _ <| |___ '."\r\n",
+ '220 \___|\___/|_| \_\_____|'."\r\n");
+
+for ( $waitedpid = 0;
+ ($paddr = accept(Client,Server)) || $waitedpid;
+ $waitedpid = 0, close Client)
+{
+ next if $waitedpid and not $paddr;
+ my($port,$iaddr) = sockaddr_in($paddr);
+ my $name = gethostbyaddr($iaddr,AF_INET);
+
+ # flush data:
+ $| = 1;
+
+ logmsg "connection from $name [", inet_ntoa($iaddr), "] at port $port\n";
+
+ open(STDIN, "<&Client") || die "can't dup client to stdin";
+ open(STDOUT, ">&Client") || die "can't dup client to stdout";
+
+ open(INPUT, ">log/server.input") ||
+ logmsg "failed to open log/server.input\n";
+
+ FTPLOG->autoflush(1);
+ INPUT->autoflush(1);
+
+ &customize(); # read test control instructions
+
+ print @welcome;
+ if($verbose) {
+ print STDERR "OUT:\n";
+ print STDERR @welcome;
+ }
+ my $state="fresh";
+
+ while(1) {
+
+ last unless defined ($_ = <STDIN>);
+
+ ftpmsg $_;
+
+ # Remove trailing CRLF.
+ s/[\n\r]+$//;
+
+ unless (m/^([A-Z]{3,4})\s?(.*)/i) {
+ print "500 '$_': command not understood.\r\n";
+ next;
+ }
+ my $FTPCMD=$1;
+ my $FTPARG=$2;
+ my $full=$_;
+
+ logmsg "GOT: ($1) $_\n";
+
+ if($verbose) {
+ print STDERR "IN: $full\n";
+ }
+
+ my $ok = $commandok{$FTPCMD};
+ if($ok !~ /$state/) {
+ print "500 $FTPCMD not OK in state: $state!\r\n";
+ next;
+ }
+
+ my $newstate=$statechange{$FTPCMD};
+ if($newstate eq "") {
+ # remain in the same state
+ }
+ else {
+ $state = $newstate;
+ }
+
+ my $delay = $delayreply{$FTPCMD};
+ if($delay) {
+ # just go sleep this many seconds!
+ sleep($delay);
+ }
+
+ my $text;
+ $text = $customreply{$FTPCMD};
+ my $fake = $text;
+ if($text eq "") {
+ $text = $displaytext{$FTPCMD};
+ }
+ else {
+ logmsg "$FTPCMD made to send '$text'\n";
+ }
+ if($text) {
+ print "$text\r\n";
+ }
+
+ if($fake eq "") {
+ # only perform this if we're not faking a reply
+ # see if the new state is a function caller.
+ my $func = $commandfunc{$FTPCMD};
+ if($func) {
+ # it is!
+ \&$func($FTPARG, $FTPCMD);
+ }
+ }
+
+ logmsg "set to state $state\n";
+
+ } # while(1)
+ close(Client);
+ close(Client2);
+}
diff --git a/Build/source/libs/curl/tests/ftpsserver.pl b/Build/source/libs/curl/tests/ftpsserver.pl
new file mode 100644
index 00000000000..b6bb11b036a
--- /dev/null
+++ b/Build/source/libs/curl/tests/ftpsserver.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+#
+# $Id: ftpsserver.pl,v 1.2 2001/09/17 08:55:32 bagder Exp $
+# This is the HTTPS server designed for the curl test suite.
+#
+# It is actually just a layer that runs stunnel properly.
+
+use strict;
+
+use stunnel;
+
+my $stunnel = &checkstunnel;
+
+if(!$stunnel) {
+ exit;
+}
+
+#
+# -p pemfile
+# -P pid dir
+# -d listen port
+# -r target port
+
+my $verbose=0; # set to 1 for debugging
+
+my $port = 8821; # just our default, weird enough
+my $ftp = 8921; # test ftp-server port
+do {
+ if($ARGV[0] eq "-v") {
+ $verbose=1;
+ }
+ elsif($ARGV[0] eq "-r") {
+ $ftp=$ARGV[1];
+ shift @ARGV;
+ }
+ elsif($ARGV[0] =~ /^(\d+)$/) {
+ $port = $1;
+ }
+} while(shift @ARGV);
+
+my $path = `pwd`;
+chomp $path;
+my $cmd = "$stunnel -p $path/stunnel.pem -P $path/.ftps.pid -d $port -r $ftp";
+
+if($verbose) {
+ print "FTPS server: $cmd\n";
+}
+system($cmd);
diff --git a/Build/source/libs/curl/tests/getpart.pm b/Build/source/libs/curl/tests/getpart.pm
new file mode 100644
index 00000000000..d288000882f
--- /dev/null
+++ b/Build/source/libs/curl/tests/getpart.pm
@@ -0,0 +1,203 @@
+
+#use strict;
+
+my @xml;
+
+my $warning=0;
+my $trace=0;
+
+sub getpartattr {
+ my ($section, $part)=@_;
+
+ my %hash;
+ my $inside=0;
+
+ # print "Section: $section, part: $part\n";
+
+ for(@xml) {
+ # print "$inside: $_";
+ if(!$inside && ($_ =~ /^ *\<$section/)) {
+ $inside++;
+ }
+ elsif((1 ==$inside) && ($_ =~ /^ *\<$part([^>]*)/)) {
+ $inside++;
+ my $attr=$1;
+ my @p=split("[ \t]", $attr);
+ my $assign;
+
+ foreach $assign (@p) {
+ # $assign is a 'name="contents"' pair
+
+ if($assign =~ / *([^=]*)=\"([^\"]*)\"/) {
+ # *with* quotes
+ $hash{$1}=$2;
+ }
+ elsif($assign =~ / *([^=]*)=([^\"]*)/) {
+ # *without* quotes
+ $hash{$1}=$2;
+ }
+ }
+ last;
+ }
+ elsif((2 ==$inside) && ($_ =~ /^ *\<\/$part/)) {
+ $inside--;
+ }
+ }
+ return %hash;
+}
+
+sub getpart {
+ my ($section, $part)=@_;
+
+ my @this;
+ my $inside=0;
+
+ # print "Section: $section, part: $part\n";
+
+ for(@xml) {
+ # print "$inside: $_";
+ if(!$inside && ($_ =~ /^ *\<$section/)) {
+ $inside++;
+ }
+ elsif((1 ==$inside) && ($_ =~ /^ *\<$part[ \>]/)) {
+ $inside++;
+ }
+ elsif((2 ==$inside) && ($_ =~ /^ *\<\/$part/)) {
+ $inside--;
+ }
+ elsif((1==$inside) && ($_ =~ /^ *\<\/$section/)) {
+ if($trace) {
+ print STDERR "*** getpart.pm: $section/$part returned data!\n";
+ }
+ if(!@this && $warning) {
+ print STDERR "*** getpart.pm: $section/$part returned empty!\n";
+ }
+ return @this;
+ }
+ elsif(2==$inside) {
+ push @this, $_;
+ }
+ }
+ if($warning) {
+ print STDERR "*** getpart.pm: $section/$part returned empty!\n";
+ }
+ return @this; #empty!
+}
+
+sub loadtest {
+ my ($file)=@_;
+
+ undef @xml;
+ open(XML, "<$file") ||
+ return 1; # failure!
+ while(<XML>) {
+ push @xml, $_;
+ }
+ close(XML);
+ return 0;
+}
+
+#
+# Strip off all lines that match the specified pattern and return
+# the new array.
+#
+
+sub striparray {
+ my ($pattern, $arrayref) = @_;
+
+ my @array;
+
+ for(@$arrayref) {
+ if($_ !~ /$pattern/) {
+ push @array, $_;
+ }
+ }
+ return @array;
+}
+
+#
+# pass array *REFERENCES* !
+#
+sub compareparts {
+ my ($firstref, $secondref)=@_;
+
+ my $sizefirst=scalar(@$firstref);
+ my $sizesecond=scalar(@$secondref);
+
+ if($sizefirst != $sizesecond) {
+ return -1;
+ }
+
+ for(1 .. $sizefirst) {
+ my $index = $_ - 1;
+ if($firstref->[$index] ne $secondref->[$index]) {
+ (my $aa = $firstref->[$index]) =~ s/\r+\n$/\n/;
+ (my $bb = $secondref->[$index]) =~ s/\r+\n$/\n/;
+ if($aa ne $bb) {
+ return 1+$index;
+ }
+ }
+ }
+ return 0;
+}
+
+#
+# Write a given array to the specified file
+#
+sub writearray {
+ my ($filename, $arrayref)=@_;
+
+ open(TEMP, ">$filename");
+ binmode(TEMP,":raw"); # cygwin fix by Kevin Roth
+ for(@$arrayref) {
+ print TEMP $_;
+ }
+ close(TEMP);
+}
+
+#
+# Load a specified file an return it as an array
+#
+sub loadarray {
+ my ($filename)=@_;
+ my @array;
+
+ open(TEMP, "<$filename");
+ while(<TEMP>) {
+ push @array, $_;
+ }
+ close(TEMP);
+ return @array;
+}
+
+#
+# Given two array references, this function will store them in two
+# temporary files, run 'diff' on them, store the result, remove the
+# temp files and return the diff output!
+#
+sub showdiff {
+ my ($firstref, $secondref)=@_;
+
+ my $file1=".array1";
+ my $file2=".array2";
+
+ open(TEMP, ">$file1");
+ for(@$firstref) {
+ print TEMP $_;
+ }
+ close(TEMP);
+
+ open(TEMP, ">$file2");
+ for(@$secondref) {
+ print TEMP $_;
+ }
+ close(TEMP);
+
+ my @out = `diff $file1 $file2`;
+
+ unlink $file1, $file2;
+ return @out;
+}
+
+
+1;
diff --git a/Build/source/libs/curl/tests/httpserver.pl b/Build/source/libs/curl/tests/httpserver.pl
new file mode 100644
index 00000000000..7faef92f9b1
--- /dev/null
+++ b/Build/source/libs/curl/tests/httpserver.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+
+use strict;
+
+my $verbose=0; # set to 1 for debugging
+
+my $port = 8999; # just a default
+do {
+ if($ARGV[0] eq "-v") {
+ $verbose=1;
+ }
+ elsif($ARGV[0] =~ /^(\d+)$/) {
+ $port = $1;
+ }
+} while(shift @ARGV);
+
+exec("server/sws $port");
diff --git a/Build/source/libs/curl/tests/httpsserver.pl b/Build/source/libs/curl/tests/httpsserver.pl
new file mode 100644
index 00000000000..7c93f075eba
--- /dev/null
+++ b/Build/source/libs/curl/tests/httpsserver.pl
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+#
+# $Id: httpsserver.pl,v 1.2 2001/09/17 08:41:01 bagder Exp $
+# This is the HTTPS server designed for the curl test suite.
+#
+# It is actually just a layer that runs stunnel properly.
+
+use strict;
+
+use stunnel;
+
+my $stunnel = &checkstunnel;
+
+if(!$stunnel) {
+ exit;
+}
+
+#
+# -p pemfile
+# -P pid dir
+# -d listen port
+# -r target port
+
+my $verbose=0; # set to 1 for debugging
+
+my $port = 8433; # just a default
+my $http = 8999; # http-port
+do {
+ if($ARGV[0] eq "-v") {
+ $verbose=1;
+ }
+ if($ARGV[0] eq "-w") {
+ return 0; # return success, means we have stunnel working!
+ }
+ elsif($ARGV[0] eq "-r") {
+ $http=$ARGV[1];
+ shift @ARGV;
+ }
+ elsif($ARGV[0] =~ /^(\d+)$/) {
+ $port = $1;
+ }
+} while(shift @ARGV);
+
+my $path = `pwd`;
+chomp $path;
+my $cmd = "$stunnel -p $path/stunnel.pem -P $path/.https.pid -d $port -r $http";
+
+if($verbose) {
+ print "$cmd\n";
+}
+system($cmd);
diff --git a/Build/source/libs/curl/tests/memanalyze.pl b/Build/source/libs/curl/tests/memanalyze.pl
new file mode 100644
index 00000000000..f16f2d8a9e7
--- /dev/null
+++ b/Build/source/libs/curl/tests/memanalyze.pl
@@ -0,0 +1,269 @@
+#!/usr/bin/perl
+#
+# Example input:
+#
+# MEM mprintf.c:1094 malloc(32) = e5718
+# MEM mprintf.c:1103 realloc(e5718, 64) = e6118
+# MEM sendf.c:232 free(f6520)
+
+do {
+ if($ARGV[0] eq "-v") {
+ $verbose=1;
+ }
+ elsif($ARGV[0] eq "-t") {
+ $trace=1;
+ }
+} while (shift @ARGV);
+
+my $maxmem;
+
+sub newtotal {
+ my ($newtot)=@_;
+ # count a max here
+
+ if($newtot > $maxmem) {
+ $maxmem= $newtot;
+ }
+}
+
+while(<STDIN>) {
+ chomp $_;
+ $line = $_;
+
+ if($line =~ /^MEM ([^:]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /free\(0x([0-9a-f]*)/) {
+ $addr = $1;
+ if($sizeataddr{$addr} == 0) {
+ print "FREE ERROR: No memory allocated: $line\n";
+ }
+ elsif(-1 == $sizeataddr{$addr}) {
+ print "FREE ERROR: Memory freed twice: $line\n";
+ print "FREE ERROR: Previously freed at: ".$getmem{$addr}."\n";
+ }
+ else {
+ $totalmem -= $sizeataddr{$addr};
+ if($trace) {
+ print "FREE: malloc at ".$getmem{$addr}." is freed again at $source:$linenum\n";
+ printf("FREE: %d bytes freed, left allocated: $totalmem bytes\n", $sizeataddr{$addr});
+ }
+
+ newtotal($totalmem);
+ $frees++;
+
+ $sizeataddr{$addr}=-1; # set -1 to mark as freed
+ $getmem{$addr}="$source:$linenum";
+
+ }
+ }
+ elsif($function =~ /malloc\((\d*)\) = 0x([0-9a-f]*)/) {
+ $size = $1;
+ $addr = $2;
+
+ if($sizeataddr{$addr}>0) {
+ # this means weeeeeirdo
+ print "Fucked up debug compile, rebuild curl now\n";
+ }
+
+ $sizeataddr{$addr}=$size;
+ $totalmem += $size;
+
+ if($trace) {
+ print "MALLOC: malloc($size) at $source:$linenum",
+ " makes totally $totalmem bytes\n";
+ }
+
+ newtotal($totalmem);
+ $mallocs++;
+
+ $getmem{$addr}="$source:$linenum";
+ }
+ elsif($function =~ /realloc\(0x([0-9a-f]*), (\d*)\) = 0x([0-9a-f]*)/) {
+ $oldaddr = $1;
+ $newsize = $2;
+ $newaddr = $3;
+
+ $totalmem -= $sizeataddr{$oldaddr};
+ if($trace) {
+ printf("REALLOC: %d less bytes and ", $sizeataddr{$oldaddr});
+ }
+ $sizeataddr{$oldaddr}=0;
+
+ $totalmem += $newsize;
+ $sizeataddr{$newaddr}=$newsize;
+
+ if($trace) {
+ printf("%d more bytes ($source:$linenum)\n", $newsize);
+ }
+
+ newtotal($totalmem);
+ $reallocs++;
+
+ $getmem{$oldaddr}="";
+ $getmem{$newaddr}="$source:$linenum";
+ }
+ elsif($function =~ /strdup\(0x([0-9a-f]*)\) \((\d*)\) = 0x([0-9a-f]*)/) {
+ # strdup(a5b50) (8) = df7c0
+
+ $dup = $1;
+ $size = $2;
+ $addr = $3;
+ $getmem{$addr}="$source:$linenum";
+ $sizeataddr{$addr}=$size;
+
+ $totalmem += $size;
+
+ if($trace) {
+ printf("STRDUP: $size bytes at %s, makes totally: %d bytes\n",
+ $getmem{$addr}, $totalmem);
+ }
+
+ newtotal($totalmem);
+ $strdups++;
+ }
+ else {
+ print "Not recognized input line: $function\n";
+ }
+ }
+ # FD url.c:1282 socket() = 5
+ elsif($_ =~ /^FD ([^:]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /socket\(\) = (\d*)/) {
+ $filedes{$1}=1;
+ $getfile{$1}="$source:$linenum";
+ $openfile++;
+ }
+ elsif($function =~ /accept\(\) = (\d*)/) {
+ $filedes{$1}=1;
+ $getfile{$1}="$source:$linenum";
+ $openfile++;
+ }
+ elsif($function =~ /sclose\((\d*)\)/) {
+ if($filedes{$1} != 1) {
+ print "Close without open: $line\n";
+ }
+ else {
+ $filedes{$1}=0; # closed now
+ $openfile--;
+ }
+ }
+ }
+ # FILE url.c:1282 fopen("blabla") = 0x5ddd
+ elsif($_ =~ /^FILE ([^:]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /fopen\(\"([^\"]*)\"\) = (\(nil\)|0x([0-9a-f]*))/) {
+ if($2 eq "(nil)") {
+ ;
+ }
+ else {
+ $fopen{$3}=1;
+ $fopenfile{$3}="$source:$linenum";
+ $fopens++;
+ }
+ }
+ # fclose(0x1026c8)
+ elsif($function =~ /fclose\(0x([0-9a-f]*)\)/) {
+ if(!$fopen{$1}) {
+ print "fclose() without fopen(): $line\n";
+ }
+ else {
+ $fopen{$1}=0;
+ $fopens--;
+ }
+ }
+ }
+ # ADDR url.c:1282 getaddrinfo() = 0x5ddd
+ elsif($_ =~ /^ADDR ([^:]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /getaddrinfo\(\) = (\(nil\)|0x([0-9a-f]*))/) {
+ my $add = $2;
+ if($add eq "(nil)") {
+ ;
+ }
+ else {
+ $addrinfo{$add}=1;
+ $addrinfofile{$add}="$source:$linenum";
+ $addrinfos++;
+ }
+ }
+ # fclose(0x1026c8)
+ elsif($function =~ /freeaddrinfo\(0x([0-9a-f]*)\)/) {
+ if(!$addrinfo{$1}) {
+ print "freeaddrinfo() without getaddrinfo(): $line\n";
+ }
+ else {
+ $addrinfo{$1}=0;
+ $addrinfos--;
+ }
+ }
+
+
+ }
+ else {
+ print "Not recognized prefix line: $line\n";
+ }
+}
+
+if($totalmem) {
+ print "Leak detected: memory still allocated: $totalmem bytes\n";
+
+ for(keys %sizeataddr) {
+ $addr = $_;
+ $size = $sizeataddr{$addr};
+ if($size > 0) {
+ print "At $addr, there's $size bytes.\n";
+ print " allocated by ".$getmem{$addr}."\n";
+ }
+ }
+}
+
+if($openfile) {
+ for(keys %filedes) {
+ if($filedes{$_} == 1) {
+ print "Open file descriptor created at ".$getfile{$_}."\n";
+ }
+ }
+}
+
+if($fopens) {
+ print "Open FILE handles left at:\n";
+ for(keys %fopen) {
+ if($fopen{$_} == 1) {
+ print "fopen() called at ".$fopenfile{$_}."\n";
+ }
+ }
+}
+
+if($addrinfos) {
+ print "IPv6-style name resolve data left at:\n";
+ for(keys %addrinfofile) {
+ if($addrinfo{$_} == 1) {
+ print "getaddrinfo() called at ".$addrinfofile{$_}."\n";
+ }
+ }
+}
+
+if($verbose) {
+ print "Mallocs: $mallocs\n",
+ "Reallocs: $reallocs\n",
+ "Strdups: $strdups\n",
+ "Frees: $frees\n";
+
+ print "Maximum allocated: $maxmem\n";
+}
diff --git a/Build/source/libs/curl/tests/runtests.pl b/Build/source/libs/curl/tests/runtests.pl
new file mode 100644
index 00000000000..20bef5c68fb
--- /dev/null
+++ b/Build/source/libs/curl/tests/runtests.pl
@@ -0,0 +1,973 @@
+#!/usr/bin/env perl
+# $Id: runtests.pl,v 1.57 2002/03/01 09:20:03 bagder Exp $
+#
+# Main curl test script, in perl to run on more platforms
+#
+#######################################################################
+# These should be the only variables that might be needed to get edited:
+
+use strict;
+
+@INC=(@INC, $ENV{'srcdir'}, ".");
+
+require "stunnel.pm"; # stunnel functions
+require "getpart.pm"; # array functions
+
+my $srcdir = $ENV{'srcdir'} || '.';
+my $HOSTIP="127.0.0.1";
+my $HOSTPORT=8999; # bad name, but this is the HTTP server port
+my $HTTPSPORT=8433; # this is the HTTPS server port
+my $FTPPORT=8921; # this is the FTP server port
+my $FTPSPORT=8821; # this is the FTPS server port
+my $CURL="../src/curl"; # what curl executable to run on the tests
+my $LOGDIR="log";
+my $TESTDIR="data";
+my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
+my $CURLLOG="$LOGDIR/curl.log"; # all command lines run
+my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
+
+# Normally, all test cases should be run, but at times it is handy to
+# simply run a particular one:
+my $TESTCASES="all";
+
+# To run specific test cases, set them like:
+# $TESTCASES="1 2 3 7 8";
+
+#######################################################################
+# No variables below this point should need to be modified
+#
+
+my $HTTPPIDFILE=".http.pid";
+my $HTTPSPIDFILE=".https.pid";
+my $FTPPIDFILE=".ftp.pid";
+my $FTPSPIDFILE=".ftps.pid";
+
+# invoke perl like this:
+my $perl="perl -I$srcdir";
+
+# this gets set if curl is compiled with memory debugging:
+my $memory_debug=0;
+
+# name of the file that the memory debugging creates:
+my $memdump="memdump";
+
+# the path to the script that analyzes the memory debug output file:
+my $memanalyze="./memanalyze.pl";
+
+my $checkstunnel = &checkstunnel;
+
+my $ssl_version; # set if libcurl is built with SSL support
+
+#######################################################################
+# variables the command line options may set
+#
+
+my $short;
+my $verbose;
+my $debugprotocol;
+my $anyway;
+my $gdbthis; # run test case with gdb debugger
+my $keepoutfiles; # keep stdout and stderr files after tests
+my $listonly; # only list the tests
+
+my $pwd; # current working directory
+
+chomp($pwd = `pwd`);
+
+# enable memory debugging if curl is compiled with it
+$ENV{'CURL_MEMDEBUG'} = 1;
+
+#######################################################################
+# Return the pid of the server as found in the given pid file
+#
+sub serverpid {
+ my $PIDFILE = $_[0];
+ open(PFILE, "<$PIDFILE");
+ my $PID=<PFILE>;
+ close(PFILE);
+ return $PID;
+}
+
+#######################################################################
+# stop the given test server
+#
+sub stopserver {
+ my $PIDFILE = $_[0];
+ # check for pidfile
+ if ( -f $PIDFILE ) {
+ my $PID = serverpid($PIDFILE);
+
+ my $res = kill (9, $PID); # die!
+ unlink $PIDFILE; # server is killed
+
+ if($res && $verbose) {
+ print "Test server pid $PID signalled to die\n";
+ }
+ elsif($verbose) {
+ print "Test server pid $PID didn't exist\n";
+ }
+ }
+}
+
+#######################################################################
+# check the given test server if it is still alive
+#
+sub checkserver {
+ my ($pidfile)=@_;
+ my $RUNNING=0;
+ my $PID=0;
+
+ # check for pidfile
+ if ( -f $pidfile ) {
+ $PID=serverpid($pidfile);
+ if ($PID ne "" && kill(0, $PID)) {
+ $RUNNING=1;
+ }
+ else {
+ $RUNNING=0;
+ $PID = -$PID; # negative means dead process
+ }
+ }
+ else {
+ $RUNNING=0;
+ }
+ return $PID
+}
+
+#######################################################################
+# start the http server, or if it already runs, verify that it is our
+# test server on the test-port!
+#
+sub runhttpserver {
+ my $verbose = $_[0];
+ my $RUNNING;
+ my $pid;
+
+ $pid = checkserver ($HTTPPIDFILE);
+
+ # verify if our/any server is running on this port
+ my $data=`$CURL --silent -i $HOSTIP:$HOSTPORT/verifiedserver`;
+
+ if ( $data =~ /WE ROOLZ(: |)(\d*)/ ) {
+ if($2) {
+ $pid = 0+$2;
+ }
+
+ if(!$pid) {
+ print "Test server already running with unknown pid! Use it...\n";
+ return;
+ }
+
+ if($verbose) {
+ print "Test server already running with pid $pid, killing it...\n";
+ }
+ }
+ elsif($data ne "") {
+ print "GOT: $data\n";
+ print "An alien HTTP server is running on port $HOSTPORT\n",
+ "Edit runtests.pl to use another port and rerun the test script\n";
+ exit;
+ }
+ else {
+ if($verbose) {
+ print "No server running, start it\n";
+ }
+ }
+
+ if($pid > 0) {
+ my $res = kill (9, $pid); # die!
+ if(!$res) {
+ print "Failed to kill our HTTP test server, do it manually and",
+ " restart the tests.\n";
+ exit;
+ }
+ sleep(2);
+ }
+
+ my $flag=$debugprotocol?"-v ":"";
+ my $cmd="$perl $srcdir/httpserver.pl $flag $HOSTPORT &";
+ system($cmd);
+ if($verbose) {
+ print "CMD: $cmd\n";
+ }
+
+}
+
+#######################################################################
+# start the https server (or rather, tunnel) if needed
+#
+sub runhttpsserver {
+ my $verbose = $_[0];
+ my $STATUS;
+ my $RUNNING;
+ my $PID=checkserver($HTTPSPIDFILE );
+
+ if($PID > 0) {
+ # kill previous stunnel!
+ if($verbose) {
+ print "kills off running stunnel at $PID\n";
+ }
+ stopserver($HTTPSPIDFILE);
+ }
+
+ my $flag=$debugprotocol?"-v ":"";
+ my $cmd="$perl $srcdir/httpsserver.pl $flag -r $HOSTPORT $HTTPSPORT &";
+ system($cmd);
+ if($verbose) {
+ print "CMD: $cmd\n";
+ }
+}
+
+#######################################################################
+# start the ftp server if needed
+#
+sub runftpserver {
+ my $verbose = $_[0];
+ my $STATUS;
+ my $RUNNING;
+ # check for pidfile
+ my $pid = checkserver ($FTPPIDFILE );
+
+ if ($pid <= 0) {
+ my $flag=$debugprotocol?"-v ":"";
+
+ # verify that our server is NOT running on this port:
+ my $data=`$CURL --silent -i ftp://$HOSTIP:$FTPPORT/verifiedserver`;
+
+ if ( $data =~ /WE ROOLZ/ ) {
+ print "A previous FTP server session is already running and we ",
+ "can't kill it!\n";
+ exit;
+ }
+
+ my $cmd="$perl $srcdir/ftpserver.pl $flag $FTPPORT &";
+ if($verbose) {
+ print "CMD: $cmd\n";
+ }
+ system($cmd);
+ }
+ else {
+ if($verbose) {
+ print "ftpd ($pid) is already running\n";
+ }
+
+ # verify that our server is one one running on this port:
+ my $data=`$CURL --silent -i ftp://$HOSTIP:$FTPPORT/verifiedserver`;
+
+ if ( $data !~ /WE ROOLZ/ ) {
+ print "Another FTP server is running on port $FTPPORT\n",
+ "Edit runtests.pl to use another FTP port and rerun the ",
+ "test script\n";
+ exit;
+ }
+
+ if($verbose) {
+ print "The running FTP server has been verified to be our server\n";
+ }
+ }
+}
+
+#######################################################################
+# start the ftps server (or rather, tunnel) if needed
+#
+sub runftpsserver {
+ my $verbose = $_[0];
+ my $STATUS;
+ my $RUNNING;
+ my $PID=checkserver($FTPSPIDFILE );
+
+ if($PID > 0) {
+ # kill previous stunnel!
+ if($verbose) {
+ print "kills off running stunnel at $PID\n";
+ }
+ stopserver($FTPSPIDFILE);
+ }
+
+ my $flag=$debugprotocol?"-v ":"";
+ my $cmd="$perl $srcdir/ftpsserver.pl $flag -r $FTPPORT $FTPSPORT &";
+ system($cmd);
+ if($verbose) {
+ print "CMD: $cmd\n";
+ }
+}
+
+#######################################################################
+# Remove all files in the specified directory
+#
+sub cleardir {
+ my $dir = $_[0];
+ my $count;
+ my $file;
+
+ # Get all files
+ opendir(DIR, $dir) ||
+ return 0; # can't open dir
+ while($file = readdir(DIR)) {
+ if($file !~ /^\./) {
+ unlink("$dir/$file");
+ $count++;
+ }
+ }
+ closedir DIR;
+ return $count;
+}
+
+#######################################################################
+# filter out the specified pattern from the given input file and store the
+# results in the given output file
+#
+sub filteroff {
+ my $infile=$_[0];
+ my $filter=$_[1];
+ my $ofile=$_[2];
+
+ open(IN, "<$infile")
+ || return 1;
+
+ open(OUT, ">$ofile")
+ || return 1;
+
+ # print "FILTER: off $filter from $infile to $ofile\n";
+
+ while(<IN>) {
+ $_ =~ s/$filter//;
+ print OUT $_;
+ }
+ close(IN);
+ close(OUT);
+ return 0;
+}
+
+#######################################################################
+# compare test results with the expected output, we might filter off
+# some pattern that is allowed to differ, output test results
+#
+
+sub compare {
+ # filter off patterns _before_ this comparison!
+ my ($firstref, $secondref)=@_;
+
+ my $result = compareparts($firstref, $secondref);
+
+ if(!$short && $result) {
+ print showdiff($firstref, $secondref);
+ }
+ return $result;
+}
+
+#######################################################################
+# display information about curl and the host the test suite runs on
+#
+sub displaydata {
+
+ unlink($memdump); # remove this if there was one left
+
+ my $version=`$CURL -V`;
+ chomp $version;
+
+ my $curl = $version;
+
+ $curl =~ s/^(.*)(libcurl.*)/$1/g;
+ my $libcurl = $2;
+
+ my $hostname=`hostname`;
+ my $hosttype=`uname -a`;
+
+ print "********* System characteristics ******** \n",
+ "* $curl\n",
+ "* $libcurl\n",
+ "* Host: $hostname",
+ "* System: $hosttype";
+
+ if($libcurl =~ /SSL/i) {
+ $ssl_version=1;
+ }
+
+ if( -r $memdump) {
+ # if this exists, curl was compiled with memory debugging
+ # enabled and we shall verify that no memory leaks exist
+ # after each and every test!
+ $memory_debug=1;
+ }
+ printf("* Memory debugging: %s\n", $memory_debug?"ON":"OFF");
+ printf("* HTTPS server: %s\n", $checkstunnel?"ON":"OFF");
+ printf("* FTPS server: %s\n", $checkstunnel?"ON":"OFF");
+ printf("* libcurl SSL: %s\n", $ssl_version?"ON":"OFF");
+ print "***************************************** \n";
+}
+
+#######################################################################
+# Run a single specified test case
+#
+
+sub singletest {
+ my $testnum=$_[0];
+
+ # load the test case file definition
+ if(loadtest("${TESTDIR}/test${testnum}")) {
+ if($verbose) {
+ # this is not a test
+ print "$testnum doesn't look like a test case!\n";
+ }
+ return -1;
+ }
+
+ # extract the reply data
+ my @reply = getpart("reply", "data");
+ my @replycheck = getpart("reply", "datacheck");
+
+ if (@replycheck) {
+ # we use this file instead to check the final output against
+ @reply=@replycheck;
+ }
+
+ # curl command to run
+ my @curlcmd= getpart("client", "command");
+
+ # this is the valid protocol blurb curl should generate
+ my @protocol= getpart("verify", "protocol");
+
+ # redirected stdout/stderr to these files
+ $STDOUT="$LOGDIR/stdout$testnum";
+ $STDERR="$LOGDIR/stderr$testnum";
+
+ # if this section exists, we verify that the stdout contained this:
+ my @validstdout = getpart("verify", "stdout");
+
+ # if this section exists, we verify upload
+ my @upload = getpart("verify", "upload");
+
+ # if this section exists, it is FTP server instructions:
+ my @ftpservercmd = getpart("server", "instruction");
+
+ my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout
+
+ # name of the test
+ my @testname= getpart("client", "name");
+
+ print "test $testnum...";
+ if(!$short) {
+ my $name = $testname[0];
+ $name =~ s/\n//g;
+ print "[$name]\n";
+ }
+
+ if($listonly) {
+ return 0; # look successful
+ }
+
+ # remove previous server output logfile
+ unlink($SERVERIN);
+
+ if(@ftpservercmd) {
+ # write the instructions to file
+ writearray($FTPDCMD, \@ftpservercmd);
+ }
+
+ # get the command line options to use
+ my ($cmd, @blaha)= getpart("client", "command");
+
+ # make some nice replace operations
+ $cmd =~ s/\n//g; # no newlines please
+ $cmd =~ s/%HOSTIP/$HOSTIP/g;
+ $cmd =~ s/%HOSTPORT/$HOSTPORT/g;
+ $cmd =~ s/%HTTPSPORT/$HTTPSPORT/g;
+ $cmd =~ s/%FTPPORT/$FTPPORT/g;
+ $cmd =~ s/%FTPSPORT/$FTPSPORT/g;
+ $cmd =~ s/%SRCDIR/$srcdir/g;
+ $cmd =~ s/%PWD/$pwd/g;
+
+ #$cmd =~ s/%HOSTNAME/$HOSTNAME/g;
+
+ if($memory_debug) {
+ unlink($memdump);
+ }
+
+ my @inputfile=getpart("client", "file");
+ if(@inputfile) {
+ # we need to generate a file before this test is invoked
+ my %hash = getpartattr("client", "file");
+
+ my $filename=$hash{'name'};
+ if(!$filename) {
+ print "ERROR: section client=>file has no name attribute!\n";
+ exit;
+ }
+ writearray($filename, \@inputfile);
+ }
+
+ my %cmdhash = getpartattr("client", "command");
+
+ my $out="";
+
+ if($cmdhash{'option'} eq "no-output") {
+ #print "*** We don't slap on --output\n";
+ }
+ else {
+ if (!@validstdout) {
+ $out="--output $CURLOUT ";
+ }
+ }
+
+ # run curl, add -v for debug information output
+ my $cmdargs="$out--include -v $cmd";
+
+ my @stdintest = getpart("client", "stdin");
+
+ if(@stdintest) {
+ my $stdinfile="$LOGDIR/stdin-for-$testnum";
+ writearray($stdinfile, \@stdintest);
+
+ $cmdargs .= " <$stdinfile";
+ }
+ my $CMDLINE="$CURL $cmdargs >$STDOUT 2>$STDERR";
+
+ if($verbose) {
+ print "$CMDLINE\n";
+ }
+
+ print CMDLOG "$CMDLINE\n";
+
+ my $res;
+ # run the command line we built
+ if($gdbthis) {
+ open(GDBCMD, ">log/gdbcmd");
+ print GDBCMD "set args $cmdargs\n";
+ print GDBCMD "show args\n";
+ close(GDBCMD);
+ system("gdb $CURL -x log/gdbcmd");
+ $res =0; # makes it always continue after a debugged run
+ }
+ else {
+ $res = system("$CMDLINE");
+ $res /= 256;
+ }
+
+ # remove the special FTP command file after each test!
+ unlink($FTPDCMD);
+
+ my @err = getpart("verify", "errorcode");
+ my $errorcode = $err[0];
+
+ if($errorcode || $res) {
+ if($errorcode == $res) {
+ if(!$short) {
+ print " error OK";
+ }
+ }
+ else {
+ if(!$short) {
+ print "curl returned $res, ".(0+$errorcode)." was expected\n";
+ }
+ print " error FAILED\n";
+ return 1;
+ }
+ }
+
+ if (@validstdout) {
+ # verify redirected stdout
+ my @actual = loadarray($STDOUT);
+
+ $res = compare(\@actual, \@validstdout);
+ if($res) {
+ print " stdout FAILED\n";
+ return 1;
+ }
+ if(!$short) {
+ print " stdout OK";
+ }
+ }
+
+ my %replyattr = getpartattr("reply", "data");
+ if(!$replyattr{'nocheck'} &&
+ @reply) {
+ # verify the received data
+ my @out = loadarray($CURLOUT);
+ $res = compare(\@out, \@reply);
+ if ($res) {
+ print " data FAILED\n";
+ return 1;
+ }
+ if(!$short) {
+ print " data OK";
+ }
+ }
+
+ if(@upload) {
+ # verify uploaded data
+ my @out = loadarray("$LOGDIR/upload.$testnum");
+ $res = compare(\@out, \@upload);
+ if ($res) {
+ print " upload FAILED\n";
+ return 1;
+ }
+ if(!$short) {
+ print " upload OK";
+ }
+ }
+
+ if(@protocol) {
+ # verify the sent request
+ my @out = loadarray($SERVERIN);
+
+ # what to cut off from the live protocol sent by curl
+ my @strip = getpart("verify", "strip");
+
+ my @protstrip=@protocol;
+
+ # check if there's any attributes on the verify/protocol section
+ my %hash = getpartattr("verify", "protocol");
+
+ if($hash{'nonewline'}) {
+ # Yes, we must cut off the final newline from the final line
+ # of the protocol data
+ chomp($protstrip[$#protstrip]);
+ }
+
+ for(@strip) {
+ # strip all patterns from both arrays
+ @out = striparray( $_, \@out);
+ @protstrip= striparray( $_, \@protstrip);
+ }
+
+ $res = compare(\@out, \@protstrip);
+ if($res) {
+ print " protocol FAILED\n";
+ return 1;
+ }
+ if(!$short) {
+ print " protocol OK";
+ }
+ }
+
+ my @outfile=getpart("verify", "file");
+ if(@outfile) {
+ # we're supposed to verify a dynamicly generated file!
+ my %hash = getpartattr("verify", "file");
+
+ my $filename=$hash{'name'};
+ if(!$filename) {
+ print "ERROR: section verify=>file has no name attribute!\n";
+ exit;
+ }
+ my @generated=loadarray($filename);
+
+ $res = compare(\@generated, \@outfile);
+ if($res) {
+ print " output FAILED\n";
+ return 1;
+ }
+ if(!$short) {
+ print " output OK";
+ }
+ }
+
+ if(!$keepoutfiles) {
+ # remove the stdout and stderr files
+ unlink($STDOUT);
+ unlink($STDERR);
+ unlink($CURLOUT); # remove the downloaded results
+
+ unlink("$LOGDIR/upload.$testnum"); # remove upload leftovers
+ }
+
+ unlink($FTPDCMD); # remove the instructions for this test
+
+ if($memory_debug) {
+ if(! -f $memdump) {
+ print "\n** ALERT! memory debuggin without any output file?\n";
+ }
+ else {
+ my @memdata=`$memanalyze < $memdump`;
+ my $leak=0;
+ for(@memdata) {
+ if($_ ne "") {
+ # well it could be other memory problems as well, but
+ # we call it leak for short here
+ $leak=1;
+ }
+ }
+ if($leak) {
+ print "\n** MEMORY FAILURE\n";
+ print @memdata;
+ return 1;
+ }
+ else {
+ if(!$short) {
+ print " memory OK";
+ }
+ }
+ }
+ }
+ if($short) {
+ print "OK";
+ }
+ print "\n";
+
+ return 0;
+}
+
+my %run;
+
+##############################################################################
+# This function makes sure the right set of server is running for the
+# specified test case. This is a useful design when we run single tests as not
+# all servers need to run then!
+
+sub serverfortest {
+ my ($testnum)=@_;
+
+ if($testnum< 100) {
+ # 0 - 99 is for HTTP
+ if(!$run{'http'}) {
+ runhttpserver($verbose);
+ $run{'http'}=$HTTPPIDFILE;
+ }
+ }
+ elsif($testnum< 200) {
+ # 100 - 199 is for FTP
+ if(!$run{'ftp'}) {
+ runftpserver($verbose);
+ $run{'ftp'}=$FTPPIDFILE;
+ }
+ }
+ elsif($testnum< 300) {
+ # 200 - 299 is for FILE, no server!
+ $run{'file'}="moo";
+ }
+ elsif($testnum< 400) {
+ # 300 - 399 is for HTTPS, two servers!
+
+ if(!$checkstunnel || !$ssl_version) {
+ # we can't run https tests without stunnel
+ # or if libcurl is SSL-less
+ return 1;
+ }
+
+ if(!$run{'http'}) {
+ runhttpserver($verbose);
+ $run{'http'}=$HTTPPIDFILE;
+ }
+ if(!$run{'https'}) {
+ runhttpsserver($verbose);
+ $run{'https'}=$HTTPSPIDFILE;
+ }
+ }
+ elsif($testnum< 500) {
+ # 400 - 499 is for FTPS, also two servers
+
+ if(!$checkstunnel || !$ssl_version) {
+ # we can't run https tests without stunnel
+ # or if libcurl is SSL-less
+ return 1;
+ }
+ if(!$run{'ftp'}) {
+ runftpserver($verbose);
+ $run{'ftp'}=$FTPPIDFILE;
+ }
+ if(!$run{'ftps'}) {
+ runftpsserver($verbose);
+ $run{'ftps'}=$FTPSPIDFILE;
+ }
+ }
+ else {
+ print "Bad test number, no server available\n";
+ return 100;
+ }
+ sleep 1; # give a second for the server(s) to startup
+ return 0; # ok
+}
+
+#######################################################################
+# Check options to this test program
+#
+
+my $number=0;
+my $fromnum=-1;
+my @testthis;
+do {
+ if ($ARGV[0] eq "-v") {
+ # verbose output
+ $verbose=1;
+ }
+ elsif ($ARGV[0] eq "-c") {
+ # use this path to curl instead of default
+ $CURL=$ARGV[1];
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] eq "-d") {
+ # have the servers display protocol output
+ $debugprotocol=1;
+ }
+ elsif ($ARGV[0] eq "-g") {
+ # run this test with gdb
+ $gdbthis=1;
+ }
+ elsif($ARGV[0] eq "-s") {
+ # short output
+ $short=1;
+ }
+ elsif($ARGV[0] eq "-a") {
+ # continue anyway, even if a test fail
+ $anyway=1;
+ }
+ elsif($ARGV[0] eq "-l") {
+ # lists the test case names only
+ $listonly=1;
+ }
+ elsif($ARGV[0] eq "-k") {
+ # keep stdout and stderr files after tests
+ $keepoutfiles=1;
+ }
+ elsif($ARGV[0] eq "-h") {
+ # show help text
+ print <<EOHELP
+Usage: runtests.pl [options]
+ -a continue even if a test fails
+ -d display server debug info
+ -g run the test case with gdb
+ -h this help text
+ -k keep stdout and stderr files present after tests
+ -l list all test case names/descriptions
+ -s short output
+ -v verbose output
+ [num] like "5 6 9" or " 5 to 22 " to run those tests only
+EOHELP
+ ;
+ exit;
+ }
+ elsif($ARGV[0] =~ /^(\d+)/) {
+ $number = $1;
+ if($fromnum >= 0) {
+ for($fromnum .. $number) {
+ push @testthis, $_;
+ }
+ $fromnum = -1;
+ }
+ else {
+ push @testthis, $1;
+ }
+ }
+ elsif($ARGV[0] =~ /^to$/i) {
+ $fromnum = $number+1;
+ }
+} while(shift @ARGV);
+
+if($testthis[0] ne "") {
+ $TESTCASES=join(" ", @testthis);
+}
+
+#######################################################################
+# Output curl version and host info being tested
+#
+
+if(!$listonly) {
+ displaydata();
+}
+
+#######################################################################
+# clear and create logging directory:
+#
+cleardir($LOGDIR);
+mkdir($LOGDIR, 0777);
+
+#######################################################################
+# If 'all' tests are requested, find out all test numbers
+#
+
+if ( $TESTCASES eq "all") {
+ # Get all commands and find out their test numbers
+ opendir(DIR, $TESTDIR) || die "can't opendir $TESTDIR: $!";
+ my @cmds = grep { /^test([0-9]+)$/ && -f "$TESTDIR/$_" } readdir(DIR);
+ closedir DIR;
+
+ $TESTCASES=""; # start with no test cases
+
+ # cut off everything but the digits
+ for(@cmds) {
+ $_ =~ s/[a-z\/\.]*//g;
+ }
+ # the the numbers from low to high
+ for(sort { $a <=> $b } @cmds) {
+ $TESTCASES .= " $_";
+ }
+}
+
+#######################################################################
+# Start the command line log
+#
+open(CMDLOG, ">$CURLLOG") ||
+ print "can't log command lines to $CURLLOG\n";
+
+#######################################################################
+# The main test-loop
+#
+
+my $failed;
+my $testnum;
+my $ok=0;
+my $total=0;
+my $skipped=0;
+
+foreach $testnum (split(" ", $TESTCASES)) {
+
+ my $serverproblem = serverfortest($testnum);
+
+ if($serverproblem) {
+ # there's a problem with the server, don't run
+ # this particular server, but count it as "skipped"
+ $skipped++;
+ next;
+ }
+
+ my $error = singletest($testnum);
+ if(-1 != $error) {
+ # valid test case number
+ $total++;
+ }
+ if($error>0) {
+ $failed.= "$testnum ";
+ if(!$anyway) {
+ # a test failed, abort
+ print "\n - abort tests\n";
+ last;
+ }
+ }
+ elsif(!$error) {
+ $ok++;
+ }
+
+ # loop for next test
+}
+
+#######################################################################
+# Close command log
+#
+close(CMDLOG);
+
+#######################################################################
+# Tests done, stop the servers
+#
+
+for(keys %run) {
+ stopserver($run{$_}); # the pid file is in the hash table
+}
+
+if($total) {
+ printf("$ok tests out of $total reported OK: %d%%\n",
+ $ok/$total*100);
+
+ if($ok != $total) {
+ print "These test cases failed: $failed\n";
+ }
+}
+else {
+ print "No tests were performed!\n";
+}
+if($skipped) {
+ print "$skipped tests were skipped due to restraints\n";
+}
+if($total && ($ok != $total)) {
+ exit 1;
+}
diff --git a/Build/source/libs/curl/tests/server/Makefile.am b/Build/source/libs/curl/tests/server/Makefile.am
new file mode 100644
index 00000000000..cb98c20e102
--- /dev/null
+++ b/Build/source/libs/curl/tests/server/Makefile.am
@@ -0,0 +1,12 @@
+# sws is the Silly Web Server
+#
+# Original http server code contributed by Georg Horn. Heavily modified since.
+#
+
+AUTOMAKE_OPTIONS = foreign
+
+noinst_PROGRAMS = sws
+
+sws_SOURCES= sws.c getpart.c
+
+extra_DIST = config.h.in
diff --git a/Build/source/libs/curl/tests/server/Makefile.in b/Build/source/libs/curl/tests/server/Makefile.in
new file mode 100644
index 00000000000..16db3025f9c
--- /dev/null
+++ b/Build/source/libs/curl/tests/server/Makefile.in
@@ -0,0 +1,358 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# sws is the Silly Web Server
+#
+# Original http server code contributed by Georg Horn. Heavily modified since.
+#
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AMTAR = @AMTAR@
+AS = @AS@
+AWK = @AWK@
+CC = @CC@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_ENABLED = @OPENSSL_ENABLED@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+YACC = @YACC@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+AUTOMAKE_OPTIONS = foreign
+
+noinst_PROGRAMS = sws
+
+sws_SOURCES = sws.c getpart.c
+
+extra_DIST = config.h.in
+subdir = tests/server
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/config.h \
+ $(top_builddir)/src/config.h config.h
+CONFIG_CLEAN_FILES =
+noinst_PROGRAMS = sws$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+
+am_sws_OBJECTS = sws.$(OBJEXT) getpart.$(OBJEXT)
+sws_OBJECTS = $(am_sws_OBJECTS)
+sws_LDADD = $(LDADD)
+sws_DEPENDENCIES =
+sws_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/lib -I$(top_builddir)/src -I.
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/getpart.Po $(DEPDIR)/sws.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(sws_SOURCES)
+DIST_COMMON = ./stamp-h3.in Makefile.am Makefile.in config.h.in
+SOURCES = $(sws_SOURCES)
+
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/server/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ CONFIG_HEADERS= CONFIG_LINKS= \
+ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+config.h: stamp-h3
+ @if test ! -f $@; then \
+ rm -f stamp-h3; \
+ $(MAKE) stamp-h3; \
+ else :; fi
+stamp-h3: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h3 stamp-h3T
+ @echo timestamp > stamp-h3T 2> /dev/null
+ cd $(top_builddir) \
+ && CONFIG_FILES= CONFIG_HEADERS=tests/server/config.h \
+ $(SHELL) ./config.status
+ @mv stamp-h3T stamp-h3
+$(srcdir)/config.h.in: $(srcdir)/./stamp-h3.in
+ @if test ! -f $@; then \
+ rm -f $(srcdir)/./stamp-h3.in; \
+ $(MAKE) $(srcdir)/./stamp-h3.in; \
+ else :; fi
+$(srcdir)/./stamp-h3.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) $(top_srcdir)/acconfig.h
+ @rm -f $(srcdir)/./stamp-h3.in $(srcdir)/./stamp-h3.inT
+ @echo timestamp > $(srcdir)/./stamp-h3.inT 2> /dev/null
+ cd $(top_srcdir) && $(AUTOHEADER)
+ @mv $(srcdir)/./stamp-h3.inT $(srcdir)/./stamp-h3.in
+
+distclean-hdr:
+ -rm -f config.h
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+sws$(EXEEXT): $(sws_OBJECTS) $(sws_DEPENDENCIES)
+ @rm -f sws$(EXEEXT)
+ $(LINK) $(sws_LDFLAGS) $(sws_OBJECTS) $(sws_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/sws.Po@am__quote@
+
+distclean-depend:
+ -rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `cygpath -w $<`
+
+.c.lo:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+ || etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)
+
+GTAGS:
+ here=`CDPATH=: && cd $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
+ if test -d $$d/$$file; then \
+ cp -pR $$d/$$file $(distdir) \
+ || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) config.h
+
+installdirs:
+
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+ distclean-generic distclean-hdr distclean-libtool \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+uninstall-am: uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS distclean distclean-compile \
+ distclean-depend distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distdir dvi dvi-am info \
+ info-am install install-am install-data install-data-am \
+ install-exec install-exec-am install-info install-info-am \
+ install-man install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool tags uninstall uninstall-am \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Build/source/libs/curl/tests/server/config.h.in b/Build/source/libs/curl/tests/server/config.h.in
new file mode 100644
index 00000000000..544ce104766
--- /dev/null
+++ b/Build/source/libs/curl/tests/server/config.h.in
@@ -0,0 +1,2 @@
+
+#undef HAVE_SIGNAL
diff --git a/Build/source/libs/curl/tests/server/getpart.c b/Build/source/libs/curl/tests/server/getpart.c
new file mode 100644
index 00000000000..c2160a59785
--- /dev/null
+++ b/Build/source/libs/curl/tests/server/getpart.c
@@ -0,0 +1,153 @@
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define EAT_SPACE(ptr) while( ptr && *ptr && isspace(*ptr) ) ptr++
+#define EAT_WORD(ptr) while( ptr && *ptr && !isspace(*ptr) && ('>' != *ptr)) ptr++
+
+#ifdef DEBUG
+#define show(x) printf x
+#else
+#define show(x)
+#endif
+
+static
+char *appendstring(char *string, /* original string */
+ char *buffer, /* to append */
+ int *stringlen, int *stralloc)
+{
+ int len = strlen(buffer);
+
+ if((len + *stringlen) > *stralloc) {
+ char *newptr= realloc(string, *stralloc*2);
+ if(newptr) {
+ string = newptr;
+ *stralloc *= 2;
+ }
+ else
+ return NULL;
+ }
+ strcpy(&string[*stringlen], buffer);
+ *stringlen += len;
+
+ return string;
+}
+
+char *spitout(FILE *stream, char *main, char *sub, int *size)
+{
+ char buffer[8192]; /* big enough for anything */
+ char cmain[128]=""; /* current main section */
+ char csub[128]=""; /* current sub section */
+ char *ptr;
+ char *end;
+ char display = 0;
+
+ char *string;
+ int stringlen=0;
+ int stralloc=256;
+
+ enum {
+ STATE_OUTSIDE,
+ STATE_INMAIN,
+ STATE_INSUB,
+ STATE_ILLEGAL
+ } state = STATE_OUTSIDE;
+
+ string = (char *)malloc(stralloc);
+
+ while(fgets(buffer, sizeof(buffer), stream)) {
+
+ ptr = buffer;
+
+ /* pass white spaces */
+ EAT_SPACE(ptr);
+
+ if('<' != *ptr) {
+ if(display) {
+ show(("=> %s", buffer));
+ string = appendstring(string, buffer, &stringlen, &stralloc);
+ show(("* %s\n", buffer));
+ }
+ continue;
+ }
+
+ ptr++;
+ EAT_SPACE(ptr);
+
+ if('/' == *ptr) {
+ /* end of a section */
+ ptr++;
+ EAT_SPACE(ptr);
+
+ end = ptr;
+ EAT_WORD(end);
+ *end = 0;
+
+ if((state == STATE_INSUB) &&
+ !strcmp(csub, ptr)) {
+ /* this is the end of the currently read sub section */
+ state--;
+ csub[0]=0; /* no sub anymore */
+ display=0;
+ }
+ else if((state == STATE_INMAIN) &&
+ !strcmp(cmain, ptr)) {
+ /* this is the end of the currently read main section */
+ state--;
+ cmain[0]=0; /* no main anymore */
+ display=0;
+ }
+ }
+ else if(!display) {
+ /* this is the beginning of a section */
+ end = ptr;
+ EAT_WORD(end);
+
+ *end = 0;
+ switch(state) {
+ case STATE_OUTSIDE:
+ strcpy(cmain, ptr);
+ state = STATE_INMAIN;
+ break;
+ case STATE_INMAIN:
+ strcpy(csub, ptr);
+ state = STATE_INSUB;
+ break;
+ }
+ }
+ if(display) {
+ string = appendstring(string, buffer, &stringlen, &stralloc);
+ show(("* %s\n", buffer));
+ }
+
+ if((STATE_INSUB == state) &&
+ !strcmp(cmain, main) &&
+ !strcmp(csub, sub)) {
+ show(("* (%d bytes) %s\n", stringlen, buffer));
+ display = 1; /* start displaying */
+ }
+ else {
+ show(("%d (%s/%s): %s\n", state, cmain, csub, buffer));
+ display = 0; /* no display */
+ }
+ }
+
+ *size = stringlen;
+ return string;
+}
+
+#ifdef TEST
+int main(int argc, char **argv)
+{
+ if(argc< 3) {
+ printf("./moo main sub\n");
+ }
+ else {
+ int size;
+ char *buffer = spitout(stdin, argv[1], argv[2], &size);
+ }
+ return 0;
+}
+#endif
diff --git a/Build/source/libs/curl/tests/server/stamp-h3.in b/Build/source/libs/curl/tests/server/stamp-h3.in
new file mode 100644
index 00000000000..9788f70238c
--- /dev/null
+++ b/Build/source/libs/curl/tests/server/stamp-h3.in
@@ -0,0 +1 @@
+timestamp
diff --git a/Build/source/libs/curl/tests/server/sws.c b/Build/source/libs/curl/tests/server/sws.c
new file mode 100644
index 00000000000..01991bbc0dc
--- /dev/null
+++ b/Build/source/libs/curl/tests/server/sws.c
@@ -0,0 +1,426 @@
+/* sws.c: simple (silly?) web server */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+
+char *spitout(FILE *stream, char *main, char *sub, int *size);
+
+#define DEFAULT_PORT 8999
+
+#ifndef DEFAULT_LOGFILE
+#define DEFAULT_LOGFILE "log/sws.log"
+#endif
+
+#define DOCBUFSIZE 4
+#define BUFFERSIZE (DOCBUFSIZE * 1024)
+
+#define VERSION "cURL test suite HTTP server/0.1"
+
+#define REQUEST_DUMP "log/server.input"
+
+#define TEST_DATA_PATH "data/test%d"
+
+static char *docfriends = "HTTP/1.1 200 Mighty fine indeed\r\n\r\nWE ROOLZ\r\n";
+static char *doc404 = "HTTP/1.1 404 Not Found\n"
+ "Server: " VERSION "\n"
+ "Connection: close\n"
+ "Content-Type: text/html\n"
+ "\n"
+ "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
+ "<HTML><HEAD>\n"
+ "<TITLE>404 Not Found</TITLE>\n"
+ "</HEAD><BODY>\n"
+ "<H1>Not Found</H1>\n"
+ "The requested URL was not found on this server.\n"
+ "<P><HR><ADDRESS>" VERSION "</ADDRESS>\n" "</BODY></HTML>\n";
+
+static volatile int sigpipe, sigterm;
+static FILE *logfp;
+
+
+static void logmsg(const char *msg)
+{
+ time_t t = time(NULL);
+ struct tm *curr_time = localtime(&t);
+ char loctime[80];
+
+ strcpy(loctime, asctime(curr_time));
+ loctime[strlen(loctime) - 1] = '\0';
+ fprintf(logfp, "%s: pid %d: %s\n", loctime, getpid(), msg);
+#ifdef DEBUG
+ fprintf(stderr, "%s: pid %d: %s\n", loctime, getpid(), msg);
+#endif
+ fflush(logfp);
+}
+
+
+static void sigpipe_handler(int sig)
+{
+ sigpipe = 1;
+}
+
+
+static void sigterm_handler(int sig)
+{
+ char logbuf[100];
+ snprintf(logbuf, 100, "Got signal %d, terminating", sig);
+ logmsg(logbuf);
+ sigterm = 1;
+}
+
+int ProcessRequest(char *request)
+{
+ char *line=request;
+ unsigned long contentlength=0;
+
+#define END_OF_HEADERS "\r\n\r\n"
+
+ char *end;
+ end = strstr(request, END_OF_HEADERS);
+
+ if(!end)
+ /* we don't have a complete request yet! */
+ return 0;
+
+ /* **** Persistancy ****
+ *
+ * If the request is a HTTP/1.0 one, we close the connection unconditionally
+ * when we're done.
+ *
+ * If the request is a HTTP/1.1 one, we MUST check for a "Connection:"
+ * header that might say "close". If it does, we close a connection when
+ * this request is processed. Otherwise, we keep the connection alive for X
+ * seconds.
+ */
+
+ do {
+ if(!strncasecmp("Content-Length:", line, 15))
+ contentlength = strtol(line+15, &line, 10);
+
+ line = strchr(line, '\n');
+ if(line)
+ line++;
+ } while(line);
+
+ if(contentlength > 0 ) {
+ if(contentlength <= strlen(end+strlen(END_OF_HEADERS)))
+ return 1; /* done */
+ else
+ return 0; /* not complete yet */
+ }
+ return 1; /* done */
+}
+
+/* store the entire request in a file */
+void storerequest(char *reqbuf)
+{
+ FILE *dump;
+
+ dump = fopen(REQUEST_DUMP, "ab"); /* b is for windows-preparing */
+ if(dump) {
+ fwrite(reqbuf, 1, strlen(reqbuf), dump);
+
+ fclose(dump);
+ }
+
+}
+
+
+#define REQBUFSIZ 50000
+#define REQBUFSIZ_TXT "49999"
+
+/* very-big-path support */
+#define MAXDOCNAMELEN 40000
+#define MAXDOCNAMELEN_TXT "39999"
+
+#define REQUEST_KEYWORD_SIZE 256
+static int get_request(int sock, int *part)
+{
+ static char reqbuf[REQBUFSIZ], doc[MAXDOCNAMELEN];
+ static char request[REQUEST_KEYWORD_SIZE];
+ unsigned int offset = 0;
+ int prot_major, prot_minor;
+ char logbuf[256];
+
+ *part = 0; /* part zero equals none */
+
+ while (offset < REQBUFSIZ) {
+ int got = recv(sock, reqbuf + offset, REQBUFSIZ - offset, 0);
+ if (got <= 0) {
+ if (got < 0) {
+ perror("recv");
+ return -1;
+ }
+ logmsg("Connection closed by client");
+ return -1;
+ }
+ offset += got;
+
+ reqbuf[offset] = 0;
+
+ if(ProcessRequest(reqbuf))
+ break;
+ }
+
+ if (offset >= REQBUFSIZ) {
+ logmsg("Request buffer overflow, closing connection");
+ return -1;
+ }
+ reqbuf[offset]=0;
+
+ logmsg("Received a request");
+
+ /* dump the request to an external file */
+ storerequest(reqbuf);
+
+ if (sscanf(reqbuf, "%" REQBUFSIZ_TXT"s %" MAXDOCNAMELEN_TXT "s HTTP/%d.%d",
+ request,
+ doc,
+ &prot_major,
+ &prot_minor) == 4) {
+ char *ptr;
+ int test_no=0;
+
+ /* find the last slash */
+ ptr = strrchr(doc, '/');
+
+ /* get the number after it */
+ if(ptr) {
+
+ if((strlen(doc) + strlen(request)) < 200)
+ sprintf(logbuf, "Got request: %s %s HTTP/%d.%d",
+ request, doc, prot_major, prot_minor);
+ else
+ sprintf(logbuf, "Got a *HUGE* request HTTP/%d.%d",
+ prot_major, prot_minor);
+ logmsg(logbuf);
+
+ if(!strncmp("/verifiedserver", ptr, 15)) {
+ logmsg("Are-we-friendly question received");
+ return -2;
+ }
+
+ ptr++; /* skip the slash */
+
+ test_no = strtol(ptr, &ptr, 10);
+
+ if(test_no > 10000) {
+ *part = test_no % 10000;
+ test_no /= 10000;
+ }
+
+ sprintf(logbuf, "Found test number %d in path", test_no);
+ logmsg(logbuf);
+ }
+ else {
+
+ logmsg("Did not find test number in PATH");
+ }
+
+ return test_no;
+ }
+
+ logmsg("Got illegal request");
+ fprintf(stderr, "Got illegal request\n");
+ return -1;
+}
+
+
+static int send_doc(int sock, int doc, int part_no)
+{
+ int written;
+ int count;
+ char *buffer;
+ char *ptr;
+ FILE *stream;
+ char *cmd=NULL;
+ int cmdsize;
+
+ char filename[256];
+ char partbuf[80]="data";
+
+ if(doc < 0) {
+ if(-2 == doc)
+ /* we got a "friends?" question, reply back that we sure are */
+ buffer = docfriends;
+ else
+ buffer = doc404;
+ ptr = NULL;
+ stream=NULL;
+
+ count = strlen(buffer);
+ }
+ else {
+ if(0 != part_no) {
+ sprintf(partbuf, "data%d", part_no);
+ }
+
+
+ sprintf(filename, TEST_DATA_PATH, doc);
+
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ logmsg("Couldn't open test file");
+ return 0;
+ }
+ else {
+ ptr = buffer = spitout(stream, "reply", partbuf, &count);
+ fclose(stream);
+ }
+
+ /* re-open the same file again */
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ logmsg("Couldn't open test file");
+ return 0;
+ }
+ else {
+ /* get the custom server control "commands" */
+ cmd = spitout(stream, "reply", "postcmd", &cmdsize);
+ fclose(stream);
+ }
+ }
+
+ do {
+ written = send(sock, buffer, count, 0);
+ if (written < 0) {
+ return -1;
+ }
+ count -= written;
+ buffer += written;
+ } while(count>0);
+
+ if(ptr)
+ free(ptr);
+
+ if(cmdsize > 0 ) {
+ char command[32];
+ int num;
+ char *ptr=cmd;
+ do {
+ if(2 == sscanf(ptr, "%31s %d", command, &num)) {
+ if(!strcmp("wait", command))
+ sleep(num); /* wait this many seconds */
+ else {
+ logmsg("Unknown command in reply command section");
+ }
+ }
+ ptr = strchr(ptr, '\n');
+ if(ptr)
+ ptr++;
+ else
+ ptr = NULL;
+ } while(ptr && *ptr);
+ }
+ if(cmd)
+ free(cmd);
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ struct sockaddr_in me;
+ int sock, msgsock, flag;
+ unsigned short port = DEFAULT_PORT;
+ char *logfile = DEFAULT_LOGFILE;
+ int part_no;
+ FILE *pidfile;
+
+ if(argc>1)
+ port = atoi(argv[1]);
+
+ /* FIX: write our pid to a file name */
+
+ logfp = fopen(logfile, "a");
+ if (!logfp) {
+ perror(logfile);
+ exit(1);
+ }
+
+#ifdef HAVE_SIGNAL
+ /* FIX: make a more portable signal handler */
+ signal(SIGPIPE, sigpipe_handler);
+ signal(SIGINT, sigterm_handler);
+ signal(SIGTERM, sigterm_handler);
+
+ siginterrupt(SIGPIPE, 1);
+ siginterrupt(SIGINT, 1);
+ siginterrupt(SIGTERM, 1);
+#endif
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock < 0) {
+ perror("opening stream socket");
+ fprintf(logfp, "Error opening socket -- aborting\n");
+ fclose(logfp);
+ exit(1);
+ }
+
+ flag = 1;
+ if (setsockopt
+ (sock, SOL_SOCKET, SO_REUSEADDR, (const void *) &flag,
+ sizeof(int)) < 0) {
+ perror("setsockopt(SO_REUSEADDR)");
+ }
+
+ me.sin_family = AF_INET;
+ me.sin_addr.s_addr = INADDR_ANY;
+ me.sin_port = htons(port);
+ if (bind(sock, (struct sockaddr *) &me, sizeof me) < 0) {
+ perror("binding stream socket");
+ fprintf(logfp, "Error binding socket -- aborting\n");
+ fclose(logfp);
+ exit(1);
+ }
+
+ pidfile = fopen(".http.pid", "w");
+ if(pidfile) {
+ fprintf(pidfile, "%d\n", (int)getpid());
+ fclose(pidfile);
+ }
+ else
+ fprintf(stderr, "Couldn't write pid file\n");
+
+ /* start accepting connections */
+ listen(sock, 5);
+
+ fprintf(stderr, "*** %s listening on port %u ***\n", VERSION, port);
+
+ while (!sigterm) {
+ int doc;
+
+ msgsock = accept(sock, NULL, NULL);
+
+ if (msgsock == -1) {
+ if (sigterm) {
+ break;
+ }
+ /* perror("accept"); */
+ continue;
+ }
+
+ logmsg("New client connected");
+
+ doc = get_request(msgsock, &part_no);
+ send_doc(msgsock, doc, part_no);
+
+ close(msgsock);
+ }
+
+ close(sock);
+ fclose(logfp);
+
+ return 0;
+}
+
diff --git a/Build/source/libs/curl/tests/stunnel.pem b/Build/source/libs/curl/tests/stunnel.pem
new file mode 100644
index 00000000000..2668a4bd12d
--- /dev/null
+++ b/Build/source/libs/curl/tests/stunnel.pem
@@ -0,0 +1,31 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDQPvaAU+Pdd5B0XlR71lDw0LyMridewzGaN6H3T+vRKYkvxyZw
+nrxhYSLWn4g9wcu/EWcTN23A07Oa4HSZ/wHQ/yO+Yv01OmfGHylWZNN0eb/qemv8
+wp/bFRaubeuIGz9hl4r1HM5Mn3cNjhDjIjDqzGorObUItigCHY4ZDNHOOQIDAQAB
+AoGAfK4V3ANeHEznuiR4JKTOVUBEg14JyFzJp/HDEVVSdSqPLoHn6+m+E/eaajGd
+2ovbNwxuUD0Rgy+9Cu90IHdjV+8i7xo/ttnzg8UDUUhT0BMuOsbEPGGABqPxXEoM
++c58smG9r30K+5ToctRlsYuH4xQvHL3fc2DHRDEwPDD+KdkCQQD3kO9D6sV9/So3
+wWLamW0AFK/spK0i1MqSdPi/gnor37WNqOxBz2MVYDmTWeDWtq9HuG2QRKCNiqGB
+tAUyKSVjAkEA11ccOxGleOM+scugobGkktnCniyMJSxQijMpIDmO/S0DBH5SiTee
+BywwtcadjUWn4uQGJ0CQCJo2mjsmY13OswJBAKJgPJ7WWKyXJV6mh9kLMrQP3Yeg
+RzMGUMuYzyKFSO6H74O3nSZZCQsXLwxXsiICdpra+3nZmVjc6aux0Iqi9DMCQQCh
+DXaAux7t/c9q/CeEJy814YWL9TdPqggGhGLyxfmqYprKJowmMiGPrb40hXpaKUl6
+CR6NBt1ygZvq1+hLEuK/AkBYJ0ikl3YHkWqSFgiw/yDsVa3CDpChLGxjlheX5gop
+LKrKE8RO3rtT3CdWyI/IBWPyc0h+qCTEqUdqKW1vRYeS
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIICcTCCAdqgAwIBAgIBADANBgkqhkiG9w0BAQQFADBzMQswCQYDVQQGEwJTRTEO
+MAwGA1UECBMFU29sbmExDTALBgNVBAcTBE1vb28xDTALBgNVBAoTBEhheHgxDjAM
+BgNVBAsTBUNvb2x4MRIwEAYDVQQDEwlzdG9yZWJyb3IxEjAQBgNVBAMTCWxvY2Fs
+aG9zdDAeFw0wMTA0MjAxODI2MjhaFw0wMjA0MjAxODI2MjhaMHMxCzAJBgNVBAYT
+AlNFMQ4wDAYDVQQIEwVTb2xuYTENMAsGA1UEBxMETW9vbzENMAsGA1UEChMESGF4
+eDEOMAwGA1UECxMFQ29vbHgxEjAQBgNVBAMTCXN0b3JlYnJvcjESMBAGA1UEAxMJ
+bG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQPvaAU+Pdd5B0
+XlR71lDw0LyMridewzGaN6H3T+vRKYkvxyZwnrxhYSLWn4g9wcu/EWcTN23A07Oa
+4HSZ/wHQ/yO+Yv01OmfGHylWZNN0eb/qemv8wp/bFRaubeuIGz9hl4r1HM5Mn3cN
+jhDjIjDqzGorObUItigCHY4ZDNHOOQIDAQABoxUwEzARBglghkgBhvhCAQEEBAMC
+BkAwDQYJKoZIhvcNAQEEBQADgYEASTzH6Af6xmkpPGAdL/lecdkeuChfgb7tVkOE
+rTzgxE5fVcW9NK79HXZ3OND2uHyu9WMieIr7QKyzfK1uskxQcY6mPApn/Z+yD1vn
+TYBuyP8I+khaLKA69QzVv+5yVBR0xlAaXGwTKxNzBTXznSmshgvYt5nsmcMw2Xfg
+CMkSsOU=
+-----END CERTIFICATE-----
diff --git a/Build/source/libs/curl/tests/stunnel.pm b/Build/source/libs/curl/tests/stunnel.pm
new file mode 100644
index 00000000000..d1b9d9fd9bf
--- /dev/null
+++ b/Build/source/libs/curl/tests/stunnel.pm
@@ -0,0 +1,11 @@
+sub checkstunnel {
+ my @paths=("/usr/sbin", "/usr/local/sbin", "/sbin", "/usr/bin",
+ "/usr/local/bin");
+ for(@paths) {
+ if( -x "$_/stunnel") {
+ return "$_/stunnel";
+ }
+ }
+}
+
+1;