NetworkPkg[all]  0.98
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
HttpLib.h File Reference

Data Structures

struct  HTTP_IO_HEADER
 

Typedefs

typedef IN CHAR8 * Data
 
typedef IN CHAR8 IN UINTN Length
 
typedef IN CHAR8 IN UINTN IN VOIDContext
 

Enumerations

enum  HTTP_BODY_PARSE_EVENT { BodyParseEventOnData, BodyParseEventOnComplete }
 

Functions

EFI_STATUS EFIAPI UriPercentDecode (IN CHAR8 *Buffer, IN UINT32 BufferLength, OUT CHAR8 *ResultBuffer, OUT UINT32 *ResultLength)
 
EFI_STATUS EFIAPI HttpParseUrl (IN CHAR8 *Url, IN UINT32 Length, IN BOOLEAN IsConnectMethod, OUT VOID **UrlParser)
 
EFI_STATUS EFIAPI HttpUrlGetHostName (IN CHAR8 *Url, IN VOID *UrlParser, OUT CHAR8 **HostName)
 
EFI_STATUS EFIAPI HttpUrlGetIp4 (IN CHAR8 *Url, IN VOID *UrlParser, OUT EFI_IPv4_ADDRESS *Ip4Address)
 
EFI_STATUS EFIAPI HttpUrlGetIp6 (IN CHAR8 *Url, IN VOID *UrlParser, OUT EFI_IPv6_ADDRESS *Ip6Address)
 
EFI_STATUS EFIAPI HttpUrlGetPort (IN CHAR8 *Url, IN VOID *UrlParser, OUT UINT16 *Port)
 
EFI_STATUS EFIAPI HttpUrlGetPath (IN CHAR8 *Url, IN VOID *UrlParser, OUT CHAR8 **Path)
 
VOID EFIAPI HttpUrlFreeParser (IN VOID *UrlParser)
 
typedef EFI_STATUS (EFIAPI *HTTP_BODY_PARSER_CALLBACK)(IN HTTP_BODY_PARSE_EVENT EventType
 
EFI_STATUS EFIAPI HttpInitMsgParser (IN EFI_HTTP_METHOD Method, IN EFI_HTTP_STATUS_CODE StatusCode, IN UINTN HeaderCount, IN EFI_HTTP_HEADER *Headers, IN HTTP_BODY_PARSER_CALLBACK Callback, IN VOID *Context, OUT VOID **MsgParser)
 
EFI_STATUS EFIAPI HttpParseMessageBody (IN OUT VOID *MsgParser, IN UINTN BodyLength, IN CHAR8 *Body)
 
BOOLEAN EFIAPI HttpIsMessageComplete (IN VOID *MsgParser)
 
EFI_STATUS EFIAPI HttpGetEntityLength (IN VOID *MsgParser, OUT UINTN *ContentLength)
 
VOID EFIAPI HttpFreeMsgParser (IN VOID *MsgParser)
 
EFI_HTTP_HEADER *EFIAPI HttpFindHeader (IN UINTN HeaderCount, IN EFI_HTTP_HEADER *Headers, IN CHAR8 *FieldName)
 
EFI_STATUS EFIAPI HttpSetFieldNameAndValue (IN OUT EFI_HTTP_HEADER *HttpHeader, IN CONST CHAR8 *FieldName, IN CONST CHAR8 *FieldValue)
 
CHAR8 *EFIAPI HttpGetFieldNameAndValue (IN CHAR8 *String, OUT CHAR8 **FieldName, OUT CHAR8 **FieldValue)
 
VOID EFIAPI HttpFreeHeaderFields (IN EFI_HTTP_HEADER *HeaderFields, IN UINTN FieldCount)
 
EFI_STATUS EFIAPI HttpGenRequestMessage (IN CONST EFI_HTTP_MESSAGE *Message, IN CONST CHAR8 *Url, OUT CHAR8 **RequestMsg, OUT UINTN *RequestMsgSize)
 
EFI_HTTP_STATUS_CODE EFIAPI HttpMappingToStatusCode (IN UINTN StatusCode)
 
BOOLEAN EFIAPI HttpIsValidHttpHeader (IN CHAR8 *DeleteList[], IN UINTN DeleteCount, IN CHAR8 *FieldName)
 
HTTP_IO_HEADERHttpIoCreateHeader (UINTN MaxHeaderCount)
 
VOID HttpIoFreeHeader (IN HTTP_IO_HEADER *HttpIoHeader)
 
EFI_STATUS HttpIoSetHeader (IN HTTP_IO_HEADER *HttpIoHeader, IN CHAR8 *FieldName, IN CHAR8 *FieldValue)
 

Detailed Description

This library is used to share code between UEFI network stack modules. It provides the helper routines to parse the HTTP message byte stream.

Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.
(C) Copyright 2016 Hewlett Packard Enterprise Development LP
SPDX-License-Identifier: BSD-2-Clause-Patent

Typedef Documentation

typedef IN CHAR8 IN UINTN IN VOID* Context
typedef IN CHAR8* Data
typedef IN CHAR8 IN UINTN Length

Enumeration Type Documentation

Enumerator
BodyParseEventOnData 
BodyParseEventOnComplete 

Function Documentation

typedef EFI_STATUS ( EFIAPI *  HTTP_BODY_PARSER_CALLBACK)

A callback function to intercept events during message parser.

This function will be invoked during HttpParseMessageBody() with various events type. An error return status of the callback function will cause the HttpParseMessageBody() aborted.

Parameters
[in]EventTypeEvent type of this callback call.
[in]DataA pointer to data buffer.
[in]LengthLength in bytes of the Data.
[in]ContextCallback context set by HttpInitMsgParser().
Return values
EFI_SUCCESSContinue to parser the message body.
OthersAbort the parse.
EFI_HTTP_HEADER* EFIAPI HttpFindHeader ( IN UINTN  HeaderCount,
IN EFI_HTTP_HEADER *  Headers,
IN CHAR8 *  FieldName 
)

Find a specified header field according to the field name.

Parameters
[in]HeaderCountNumber of HTTP header structures in Headers list.
[in]HeadersArray containing list of HTTP headers.
[in]FieldNameNull terminated string which describes a field name.
Returns
Pointer to the found header or NULL.
VOID EFIAPI HttpFreeHeaderFields ( IN EFI_HTTP_HEADER *  HeaderFields,
IN UINTN  FieldCount 
)

Free existing HeaderFields.

Parameters
[in]HeaderFieldsPointer to array of key/value header pairs waiting for free.
[in]FieldCountThe number of header pairs in HeaderFields.
VOID EFIAPI HttpFreeMsgParser ( IN VOID MsgParser)

Release the resource of the message parser.

Parameters
[in]MsgParserPointer to the message parser.
EFI_STATUS EFIAPI HttpGenRequestMessage ( IN CONST EFI_HTTP_MESSAGE *  Message,
IN CONST CHAR8 *  Url,
OUT CHAR8 **  RequestMsg,
OUT UINTN *  RequestMsgSize 
)

Generate HTTP request message.

This function will allocate memory for the whole HTTP message and generate a well formatted HTTP Request message in it, include the Request-Line, header fields and also the message body. It is the caller's responsibility to free the buffer returned in *RequestMsg.

Parameters
[in]MessagePointer to the EFI_HTTP_MESSAGE structure which contains the required information to generate the HTTP request message.
[in]UrlThe URL of a remote host.
[out]RequestMsgPointer to the created HTTP request message. NULL if any error occurred.
[out]RequestMsgSizeSize of the RequestMsg (in bytes).
Return values
EFI_SUCCESSIf HTTP request string was created successfully.
EFI_OUT_OF_RESOURCESFailed to allocate resources.
EFI_INVALID_PARAMETERThe input arguments are invalid.
EFI_STATUS EFIAPI HttpGetEntityLength ( IN VOID MsgParser,
OUT UINTN *  ContentLength 
)

Get the content length of the entity.

Note that in trunk transfer, the entity length is not valid until the whole message body is received.

Parameters
[in]MsgParserPointer to the message parser.
[out]ContentLengthPointer to store the length of the entity.
Return values
EFI_SUCCESSSuccessfully to get the entity length.
EFI_NOT_READYEntity length is not valid yet.
EFI_INVALID_PARAMETERMsgParser is NULL or ContentLength is NULL.
CHAR8* EFIAPI HttpGetFieldNameAndValue ( IN CHAR8 *  String,
OUT CHAR8 **  FieldName,
OUT CHAR8 **  FieldValue 
)

Get one key/value header pair from the raw string.

Parameters
[in]StringPointer to the raw string.
[out]FieldNamePoints directly to field name within 'HttpHeader'.
[out]FieldValuePoints directly to field value within 'HttpHeader'.
Returns
Pointer to the next raw string.
NULL if no key/value header pair from this raw string.
EFI_STATUS EFIAPI HttpInitMsgParser ( IN EFI_HTTP_METHOD  Method,
IN EFI_HTTP_STATUS_CODE  StatusCode,
IN UINTN  HeaderCount,
IN EFI_HTTP_HEADER *  Headers,
IN HTTP_BODY_PARSER_CALLBACK  Callback,
IN VOID Context,
OUT VOID **  MsgParser 
)

Initialize a HTTP message-body parser.

This function will create and initialize a HTTP message parser according to caller provided HTTP message header information. It is the caller's responsibility to free the buffer returned in *UrlParser by HttpFreeMsgParser().

Parameters
[in]MethodThe HTTP method (e.g. GET, POST) for this HTTP message.
[in]StatusCodeResponse status code returned by the remote host.
[in]HeaderCountNumber of HTTP header structures in Headers.
[in]HeadersArray containing list of HTTP headers.
[in]CallbackCallback function that is invoked when parsing the HTTP message-body, set to NULL to ignore all events.
[in]ContextPointer to the context that will be passed to Callback.
[out]MsgParserPointer to the returned buffer to store the message parser.
Return values
EFI_SUCCESSSuccessfully initialized the parser.
EFI_OUT_OF_RESOURCESCould not allocate needed resources.
EFI_INVALID_PARAMETERMsgParser is NULL or HeaderCount is not NULL but Headers is NULL.
OthersFailed to initialize the parser.
HTTP_IO_HEADER* HttpIoCreateHeader ( UINTN  MaxHeaderCount)

Create a HTTP_IO_HEADER to hold the HTTP header items.

Parameters
[in]MaxHeaderCountThe maximun number of HTTP header in this holder.
Returns
A pointer of the HTTP header holder or NULL if failed.
VOID HttpIoFreeHeader ( IN HTTP_IO_HEADER HttpIoHeader)

Destroy the HTTP_IO_HEADER and release the resources.

Parameters
[in]HttpIoHeaderPoint to the HTTP header holder to be destroyed.
EFI_STATUS HttpIoSetHeader ( IN HTTP_IO_HEADER HttpIoHeader,
IN CHAR8 *  FieldName,
IN CHAR8 *  FieldValue 
)

Set or update a HTTP header with the field name and corresponding value.

Parameters
[in]HttpIoHeaderPoint to the HTTP header holder.
[in]FieldNameNull terminated string which describes a field name.
[in]FieldValueNull terminated string which describes the corresponding field value.
Return values
EFI_SUCCESSThe HTTP header has been set or updated.
EFI_INVALID_PARAMETERAny input parameter is invalid.
EFI_OUT_OF_RESOURCESInsufficient resource to complete the operation.
OtherUnexpected error happened.
BOOLEAN EFIAPI HttpIsMessageComplete ( IN VOID MsgParser)

Check whether the message-body is complete or not.

Parameters
[in]MsgParserPointer to the message parser.
Return values
TRUEMessage-body is complete.
FALSEMessage-body is not complete.
BOOLEAN EFIAPI HttpIsValidHttpHeader ( IN CHAR8 *  DeleteList[],
IN UINTN  DeleteCount,
IN CHAR8 *  FieldName 
)

Check whether header field called FieldName is in DeleteList.

Parameters
[in]DeleteListPointer to array of key/value header pairs.
[in]DeleteCountThe number of header pairs.
[in]FieldNamePointer to header field's name.
Returns
TRUE if FieldName is not in DeleteList, that means this header field is valid.
FALSE if FieldName is in DeleteList, that means this header field is invalid.
EFI_HTTP_STATUS_CODE EFIAPI HttpMappingToStatusCode ( IN UINTN  StatusCode)

Translate the status code in HTTP message to EFI_HTTP_STATUS_CODE defined in UEFI 2.5 specification.

Parameters
[in]StatusCodeThe status code value in HTTP message.
Returns
Value defined in EFI_HTTP_STATUS_CODE .
EFI_STATUS EFIAPI HttpParseMessageBody ( IN OUT VOID MsgParser,
IN UINTN  BodyLength,
IN CHAR8 *  Body 
)

Parse message body.

Parse BodyLength of message-body. This function can be called repeatedly to parse the message-body partially.

Parameters
[in,out]MsgParserPointer to the message parser.
[in]BodyLengthLength in bytes of the Body.
[in]BodyPointer to the buffer of the message-body to be parsed.
Return values
EFI_SUCCESSSuccessfully parse the message-body.
EFI_INVALID_PARAMETERMsgParser is NULL or Body is NULL or BodyLength is 0.
EFI_ABORTEDOperation aborted.
OtherError happened while parsing message body.
EFI_STATUS EFIAPI HttpParseUrl ( IN CHAR8 *  Url,
IN UINT32  Length,
IN BOOLEAN  IsConnectMethod,
OUT VOID **  UrlParser 
)

Create a URL parser for the input URL string.

This function will parse and dereference the input HTTP URL into it components. The original content of the URL won't be modified and the result will be returned in UrlParser, which can be used in other functions like NetHttpUrlGetHostName(). It is the caller's responsibility to free the buffer returned in *UrlParser by HttpUrlFreeParser().

Parameters
[in]UrlThe pointer to a HTTP URL string.
[in]LengthLength of Url in bytes.
[in]IsConnectMethodWhether the Url is used in HTTP CONNECT method or not.
[out]UrlParserPointer to the returned buffer to store the parse result.
Return values
EFI_SUCCESSSuccessfully dereferenced the HTTP URL.
EFI_INVALID_PARAMETERUrlParser is NULL or Url is not a valid HTTP URL.
EFI_OUT_OF_RESOURCESCould not allocate needed resources.
EFI_STATUS EFIAPI HttpSetFieldNameAndValue ( IN OUT EFI_HTTP_HEADER *  HttpHeader,
IN CONST CHAR8 *  FieldName,
IN CONST CHAR8 *  FieldValue 
)

Set FieldName and FieldValue into specified HttpHeader.

Parameters
[in,out]HttpHeaderSpecified HttpHeader.
[in]FieldNameFieldName of this HttpHeader, a NULL terminated ASCII string.
[in]FieldValueFieldValue of this HttpHeader, a NULL terminated ASCII string.
Return values
EFI_SUCCESSThe FieldName and FieldValue are set into HttpHeader successfully.
EFI_INVALID_PARAMETERThe parameter is invalid.
EFI_OUT_OF_RESOURCESFailed to allocate resources.
VOID EFIAPI HttpUrlFreeParser ( IN VOID UrlParser)

Release the resource of the URL parser.

Parameters
[in]UrlParserPointer to the parser.
EFI_STATUS EFIAPI HttpUrlGetHostName ( IN CHAR8 *  Url,
IN VOID UrlParser,
OUT CHAR8 **  HostName 
)

Get the Hostname from a HTTP URL.

This function will return the HostName according to the Url and previous parse result ,and it is the caller's responsibility to free the buffer returned in *HostName.

Parameters
[in]UrlThe pointer to a HTTP URL string.
[in]UrlParserURL Parse result returned by NetHttpParseUrl().
[out]HostNamePointer to a buffer to store the HostName.
Return values
EFI_SUCCESSSuccessfully get the required component.
EFI_INVALID_PARAMETERUri is NULL or HostName is NULL or UrlParser is invalid.
EFI_NOT_FOUNDNo hostName component in the URL.
EFI_OUT_OF_RESOURCESCould not allocate needed resources.
EFI_STATUS EFIAPI HttpUrlGetIp4 ( IN CHAR8 *  Url,
IN VOID UrlParser,
OUT EFI_IPv4_ADDRESS *  Ip4Address 
)

Get the IPv4 address from a HTTP URL.

This function will return the IPv4 address according to the Url and previous parse result.

Parameters
[in]UrlThe pointer to a HTTP URL string.
[in]UrlParserURL Parse result returned by NetHttpParseUrl().
[out]Ip4AddressPointer to a buffer to store the IP address.
Return values
EFI_SUCCESSSuccessfully get the required component.
EFI_INVALID_PARAMETERUri is NULL or Ip4Address is NULL or UrlParser is invalid.
EFI_NOT_FOUNDNo IPv4 address component in the URL.
EFI_OUT_OF_RESOURCESCould not allocate needed resources.
EFI_STATUS EFIAPI HttpUrlGetIp6 ( IN CHAR8 *  Url,
IN VOID UrlParser,
OUT EFI_IPv6_ADDRESS *  Ip6Address 
)

Get the IPv6 address from a HTTP URL.

This function will return the IPv6 address according to the Url and previous parse result.

Parameters
[in]UrlThe pointer to a HTTP URL string.
[in]UrlParserURL Parse result returned by NetHttpParseUrl().
[out]Ip6AddressPointer to a buffer to store the IP address.
Return values
EFI_SUCCESSSuccessfully get the required component.
EFI_INVALID_PARAMETERUri is NULL or Ip6Address is NULL or UrlParser is invalid.
EFI_NOT_FOUNDNo IPv6 address component in the URL.
EFI_OUT_OF_RESOURCESCould not allocate needed resources.
EFI_STATUS EFIAPI HttpUrlGetPath ( IN CHAR8 *  Url,
IN VOID UrlParser,
OUT CHAR8 **  Path 
)

Get the Path from a HTTP URL.

This function will return the Path according to the Url and previous parse result,and it is the caller's responsibility to free the buffer returned in *Path.

Parameters
[in]UrlThe pointer to a HTTP URL string.
[in]UrlParserURL Parse result returned by NetHttpParseUrl().
[out]PathPointer to a buffer to store the Path.
Return values
EFI_SUCCESSSuccessfully get the required component.
EFI_INVALID_PARAMETERUri is NULL or HostName is NULL or UrlParser is invalid.
EFI_NOT_FOUNDNo hostName component in the URL.
EFI_OUT_OF_RESOURCESCould not allocate needed resources.
EFI_STATUS EFIAPI HttpUrlGetPort ( IN CHAR8 *  Url,
IN VOID UrlParser,
OUT UINT16 *  Port 
)

Get the port number from a HTTP URL.

This function will return the port number according to the Url and previous parse result.

Parameters
[in]UrlThe pointer to a HTTP URL string.
[in]UrlParserURL Parse result returned by NetHttpParseUrl().
[out]PortPointer to a buffer to store the port number.
Return values
EFI_SUCCESSSuccessfully get the required component.
EFI_INVALID_PARAMETERUri is NULL or Port is NULL or UrlParser is invalid.
EFI_NOT_FOUNDNo port number in the URL.
EFI_OUT_OF_RESOURCESCould not allocate needed resources.
EFI_STATUS EFIAPI UriPercentDecode ( IN CHAR8 *  Buffer,
IN UINT32  BufferLength,
OUT CHAR8 *  ResultBuffer,
OUT UINT32 *  ResultLength 
)

Decode a percent-encoded URI component to the ASCII character.

Decode the input component in Buffer according to RFC 3986. The caller is responsible to make sure ResultBuffer points to a buffer with size equal or greater than ((AsciiStrSize (Buffer)) in bytes.

Parameters
[in]BufferThe pointer to a percent-encoded URI component.
[in]BufferLengthLength of Buffer in bytes.
[out]ResultBufferPoint to the buffer to store the decode result.
[out]ResultLengthLength of decoded string in ResultBuffer in bytes.
Return values
EFI_SUCCESSSuccessfully decoded the URI.
EFI_INVALID_PARAMETERBuffer is not a valid percent-encoded string.