Added declarations for EFI HTTP protocol

This commit is contained in:
Thomas Oltmann 2025-06-04 21:11:48 +02:00
parent 5d58b46bbe
commit 3fd0ea1b79
3 changed files with 247 additions and 0 deletions

View file

@ -1,2 +1,5 @@
*.o
!crt0-efi-x86_64.o
bootnetboot.efi
bootnetboot.rom
efirom

View file

@ -44,6 +44,9 @@
#include <eficon.h>
#include <efiprot.h>
#include <efigpt.h>
#include "efiip.h"
#include "efitcp.h"
#include "efihttp.h"
#include "tinf.h"
// get BOOTBOOT specific stuff
#include <bootboot.h>
@ -1191,6 +1194,15 @@ GetLFB()
return EFI_SUCCESS;
}
EFI_STATUS
RetrieveFile(IN CHAR16 *FileName, OUT UINT8 **FileData, OUT UINTN *FileDataLength)
{
(void)FileName;
(void)FileData;
(void)FileDataLength;
return EFI_SUCCESS;
}
/**
* Load a file from FS0 into memory
*/

232
x86_64-efi/efihttp.h Normal file
View file

@ -0,0 +1,232 @@
/* Declarations for the UEFI HTTP + HTTPSB Protocol.
* Mostly taken directly from the spec.
*/
#ifndef EFI_HTTP_H
#define EFI_HTTP_H
// HTTP Service Binding Protocol
#define EFI_HTTP_SERVICE_BINDING_PROTOCOL_GUID \
{0xbdc8e6af, 0xd9bc, 0x4379,\
{0xa7, 0x2a, 0xe0, 0xc4, 0xe7, 0x5d, 0xae, 0x1c}}
// HTTP Binding Protocol
#define EFI_HTTP_PROTOCOL_GUID \
{0x7A59B29B, 0x910B, 0x4171,\
{0x82, 0x42, 0xA8, 0x5A, 0x0D, 0xF2, 0x5B, 0x5B}}
INTERFACE_DECL(_EFI_HTTP);
typedef struct _EFI_HTTP_PROTOCOL EFI_HTTP_PROTOCOL;
//*******************************************
// EFI_HTTP_VERSION
//*******************************************
typedef enum {
HttpVersion10,
HttpVersion11,
HttpVersionUnsupported
} EFI_HTTP_VERSION;
//*******************************************
// EFI_HTTP_METHOD
//*******************************************
typedef enum {
HttpMethodGet,
HttpMethodPost,
HttpMethodPatch,
HttpMethodOptions,
HttpMethodConnect,
HttpMethodHead,
HttpMethodPut,
HttpMethodDelete,
HttpMethodTrace,
HttpMethodMax
} EFI_HTTP_METHOD;
//*******************************************
// EFI_HTTP_STATUS
//*******************************************
typedef enum {
HTTP_STATUS_UNSUPPORTED_STATUS = 0,
HTTP_STATUS_100_CONTINUE,
HTTP_STATUS_101_SWITCHING_PROTOCOLS,
HTTP_STATUS_200_OK,
HTTP_STATUS_201_CREATED,
HTTP_STATUS_202_ACCEPTED,
HTTP_STATUS_203_NON_AUTHORITATIVE_INFORMATION,
HTTP_STATUS_204_NO_CONTENT,
HTTP_STATUS_205_RESET_CONTENT,
HTTP_STATUS_206_PARTIAL_CONTENT,
HTTP_STATUS_300_MULTIPLE_CHOICES,
HTTP_STATUS_301_MOVED_PERMANENTLY,
HTTP_STATUS_302_FOUND,
HTTP_STATUS_303_SEE_OTHER,
HTTP_STATUS_304_NOT_MODIFIED,
HTTP_STATUS_305_USE_PROXY,
HTTP_STATUS_307_TEMPORARY_REDIRECT,
HTTP_STATUS_400_BAD_REQUEST,
HTTP_STATUS_401_UNAUTHORIZED,
HTTP_STATUS_402_PAYMENT_REQUIRED,
HTTP_STATUS_403_FORBIDDEN,
HTTP_STATUS_404_NOT_FOUND,
HTTP_STATUS_405_METHOD_NOT_ALLOWED,
HTTP_STATUS_406_NOT_ACCEPTABLE,
HTTP_STATUS_407_PROXY_AUTHENTICATION_REQUIRED,
HTTP_STATUS_408_REQUEST_TIME_OUT,
HTTP_STATUS_409_CONFLICT,
HTTP_STATUS_410_GONE,
HTTP_STATUS_411_LENGTH_REQUIRED,
HTTP_STATUS_412_PRECONDITION_FAILED,
HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE,
HTTP_STATUS_414_REQUEST_URI_TOO_LARGE,
HTTP_STATUS_415_UNSUPPORTED_MEDIA_TYPE,
HTTP_STATUS_416_REQUESTED_RANGE_NOT_SATISFIED,
HTTP_STATUS_417_EXPECTATION_FAILED,
HTTP_STATUS_500_INTERNAL_SERVER_ERROR,
HTTP_STATUS_501_NOT_IMPLEMENTED,
HTTP_STATUS_502_BAD_GATEWAY,
HTTP_STATUS_503_SERVICE_UNAVAILABLE,
HTTP_STATUS_504_GATEWAY_TIME_OUT,
HTTP_STATUS_505_HTTP_VERSION_NOT_SUPPORTED,
HTTP_STATUS_308_PERMANENT_REDIRECT
} EFI_HTTP_STATUS_CODE;
//*******************************************
// EFI_HTTPv4_ACCESS_POINT
//*******************************************
typedef struct {
BOOLEAN UseDefaultAddress;
EFI_IPv4_ADDRESS LocalAddress;
EFI_IPv4_ADDRESS LocalSubnet;
UINT16 LocalPort;
} EFI_HTTPv4_ACCESS_POINT;
//******************************************
// EFI_HTTPv6_ACCESS_POINT
//******************************************
typedef struct {
EFI_IPv6_ADDRESS LocalAddress;
UINT16 LocalPort;
} EFI_HTTPv6_ACCESS_POINT;
//******************************************
// EFI_HTTP_CONFIG_DATA
//******************************************
typedef struct {
EFI_HTTP_VERSION HttpVersion;
UINT32 TimeOutMillisec;
BOOLEAN LocalAddressIsIPv6;
union {
EFI_HTTPv4_ACCESS_POINT *IPv4Node;
EFI_HTTPv6_ACCESS_POINT *IPv6Node;
} AccessPoint;
} EFI_HTTP_CONFIG_DATA;
//*******************************************
// EFI_HTTP_REQUEST_DATA
//*******************************************
typedef struct {
EFI_HTTP_METHOD Method;
CHAR16 *Url;
} EFI_HTTP_REQUEST_DATA;
//*******************************************
// EFI_HTTP_CONNECT_REQUEST_DATA
//*******************************************
typedef struct {
EFI_HTTP_REQUEST_DATA Base;
CHAR16 *ProxyUrl;
} EFI_HTTP_CONNECT_REQUEST_DATA;
//*******************************************
// EFI_HTTP_RESPONSE_DATA
//*******************************************
typedef struct {
EFI_HTTP_STATUS_CODE StatusCode;
} EFI_HTTP_RESPONSE_DATA;
//*******************************************
// EFI_HTTP_HEADER
//*******************************************
typedef struct {
CHAR8 *FieldName;
CHAR8 *FieldValue;
} EFI_HTTP_HEADER;
//******************************************
// EFI_HTTP_MESSAGE
//******************************************
typedef struct {
union {
EFI_HTTP_REQUEST_DATA *Request;
EFI_HTTP_RESPONSE_DATA *Response;
} Data;
UINTN HeaderCount;
EFI_HTTP_HEADER *Headers;
UINTN BodyLength;
VOID *Body;
} EFI_HTTP_MESSAGE;
//******************************************
// EFI_HTTP_TOKEN
//******************************************
typedef struct {
EFI_EVENT Event;
EFI_STATUS Status;
EFI_HTTP_MESSAGE *Message;
} EFI_HTTP_TOKEN;
typedef
EFI_STATUS
(EFIAPI * EFI_HTTP_GET_MODE_DATA)(
IN EFI_HTTP_PROTOCOL *This,
OUT EFI_HTTP_CONFIG_DATA *HttpConfigData
);
typedef
EFI_STATUS
(EFIAPI *EFI_HTTP_CONFIGURE)(
IN EFI_HTTP_PROTOCOL *This,
IN EFI_HTTP_CONFIG_DATA *HttpConfigData OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_HTTP_REQUEST) (
IN EFI_HTTP_PROTOCOL *This,
IN EFI_HTTP_TOKEN *Token
);
typedef
EFI_STATUS
(EFIAPI * EFI_HTTP_CANCEL)(
IN EFI_HTTP_PROTOCOL *This,
IN EFI_HTTP_TOKEN *Token
);
typedef
EFI_STATUS
(EFIAPI *EFI_HTTP_RESPONSE) (
IN EFI_HTTP_PROTOCOL *This,
IN EFI_HTTP_TOKEN *Token
);
typedef
EFI_STATUS
(EFIAPI *EFI_HTTP_POLL) (
IN EFI_HTTP_PROTOCOL *This
);
typedef struct _EFI_HTTP_PROTOCOL {
EFI_HTTP_GET_MODE_DATA GetModeData;
EFI_HTTP_CONFIGURE Configure;
EFI_HTTP_REQUEST Request;
EFI_HTTP_CANCEL Cancel;
EFI_HTTP_RESPONSE Response;
EFI_HTTP_POLL Poll;
} EFI_HTTP_PROTOCOL;
#endif