[http] Rewrite HTTP core to support content encodings
authorMichael Brown <mcb30@ipxe.org>
Mon, 17 Aug 2015 12:16:26 +0000 (13:16 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 17 Aug 2015 12:24:33 +0000 (13:24 +0100)
commit518a98eb56f073c4fd1f20c730e474a6f2c8c2e9
tree68b8afa4064fe1c2b95a9a959f8808f881594d0f
parent09236e603055b1833c85a6a5a99de401e32df7fc
[http] Rewrite HTTP core to support content encodings

Rewrite the HTTP core to allow for the addition of arbitrary content
encoding mechanisms, such as PeerDist and gzip.

The core now exposes http_open() which can be used to create requests
with an explicitly selected HTTP method, an optional requested content
range, and an optional request body.  A simple wrapper provides the
preexisting behaviour of creating either a GET request or an
application/x-www-form-urlencoded POST request (if the URI includes
parameters).

The HTTP SAN interface is now implemented using the generic block
device translator.  Individual blocks are requested using http_open()
to create a range request.

Server connections are now managed via a connection pool; this allows
for multiple requests to the same server (e.g. for SAN blocks) to be
completely unaware of each other.  Repeated HTTPS connections to the
same server can reuse a pooled connection, avoiding the per-connection
overhead of establishing a TLS session (which can take several seconds
if using a client certificate).

Support for HTTP SAN booting and for the Basic and Digest
authentication schemes is now optional and can be controlled via the
SANBOOT_PROTO_HTTP, HTTP_AUTH_BASIC, and HTTP_AUTH_DIGEST build
configuration options in config/general.h.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
14 files changed:
src/config/config.c
src/config/config_http.c [new file with mode: 0644]
src/config/defaults/pcbios.h
src/config/general.h
src/include/ipxe/errfile.h
src/include/ipxe/http.h
src/net/tcp/http.c
src/net/tcp/httpauth.c [new file with mode: 0644]
src/net/tcp/httpbasic.c [new file with mode: 0644]
src/net/tcp/httpblock.c [new file with mode: 0644]
src/net/tcp/httpconn.c [new file with mode: 0644]
src/net/tcp/httpcore.c
src/net/tcp/httpdigest.c [new file with mode: 0644]
src/net/tcp/https.c