[http] Hide HTTP transport-layer filter implementation details

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2020-12-08 14:55:44 +00:00
parent 1b112e9d18
commit be47c2c72c
3 changed files with 17 additions and 6 deletions

View File

@@ -21,6 +21,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <ipxe/ntlm.h> #include <ipxe/ntlm.h>
struct http_transaction; struct http_transaction;
struct http_connection;
/****************************************************************************** /******************************************************************************
* *
@@ -43,11 +44,10 @@ struct http_scheme {
unsigned int port; unsigned int port;
/** Transport-layer filter (if any) /** Transport-layer filter (if any)
* *
* @v xfer Data transfer interface * @v conn HTTP connection
* @v name Host name
* @ret rc Return status code * @ret rc Return status code
*/ */
int ( * filter ) ( struct interface *xfer, const char *name ); int ( * filter ) ( struct http_connection *conn );
}; };
/** HTTP scheme table */ /** HTTP scheme table */

View File

@@ -301,8 +301,7 @@ int http_connect ( struct interface *xfer, struct uri *uri ) {
goto err_open; goto err_open;
/* Add filter, if any */ /* Add filter, if any */
if ( scheme->filter && if ( scheme->filter && ( ( rc = scheme->filter ( conn ) ) != 0 ) )
( ( rc = scheme->filter ( &conn->socket, uri->host ) ) != 0 ) )
goto err_filter; goto err_filter;
/* Attach to parent interface, mortalise self, and return */ /* Attach to parent interface, mortalise self, and return */

View File

@@ -31,12 +31,24 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/ */
#include <ipxe/open.h> #include <ipxe/open.h>
#include <ipxe/uri.h>
#include <ipxe/tls.h> #include <ipxe/tls.h>
#include <ipxe/http.h> #include <ipxe/http.h>
#include <ipxe/features.h> #include <ipxe/features.h>
FEATURE ( FEATURE_PROTOCOL, "HTTPS", DHCP_EB_FEATURE_HTTPS, 1 ); FEATURE ( FEATURE_PROTOCOL, "HTTPS", DHCP_EB_FEATURE_HTTPS, 1 );
/**
* Add HTTPS filter
*
* @v conn HTTP connection
* @ret rc Return status code
*/
static int https_filter ( struct http_connection *conn ) {
return add_tls ( &conn->socket, conn->uri->host );
}
/** HTTPS URI opener */ /** HTTPS URI opener */
struct uri_opener https_uri_opener __uri_opener = { struct uri_opener https_uri_opener __uri_opener = {
.scheme = "https", .scheme = "https",
@@ -47,5 +59,5 @@ struct uri_opener https_uri_opener __uri_opener = {
struct http_scheme https_scheme __http_scheme = { struct http_scheme https_scheme __http_scheme = {
.name = "https", .name = "https",
.port = HTTPS_PORT, .port = HTTPS_PORT,
.filter = add_tls, .filter = https_filter,
}; };