REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3496 Add new EDKII_HTTP_CALLBACK_PROTOCOL in NetworkPkg, Send HTTP Events via EDKII_HTTP_CALLBACK_PROTOCOL when Dns/ConnectTcp/TlsConnectSession/InitSession occurs. Signed-off-by: Heng Luo <heng.luo@intel.com> Cc: Maciej Rabeda <maciej.rabeda@linux.intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Cc: Siyuan Fu <siyuan.fu@intel.com> Reviewed-by: Maciej Rabeda <maciej.rabeda@linux.intel.com> Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
		
			
				
	
	
		
			625 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			625 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The header files of miscellaneous routines for HttpDxe driver.
 | |
| 
 | |
| Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
 | |
| (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_HTTP_PROTO_H__
 | |
| #define __EFI_HTTP_PROTO_H__
 | |
| 
 | |
| #define DEF_BUF_LEN                         2048
 | |
| 
 | |
| #define HTTP_SERVICE_SIGNATURE  SIGNATURE_32('H', 't', 't', 'S')
 | |
| 
 | |
| #define HTTP_SERVICE_FROM_PROTOCOL(a) \
 | |
|   CR ( \
 | |
|   (a), \
 | |
|   HTTP_SERVICE, \
 | |
|   ServiceBinding, \
 | |
|   HTTP_SERVICE_SIGNATURE \
 | |
|   )
 | |
| 
 | |
| 
 | |
| //
 | |
| // The state of HTTP protocol. It starts from UNCONFIGED.
 | |
| //
 | |
| #define HTTP_STATE_UNCONFIGED        0
 | |
| #define HTTP_STATE_HTTP_CONFIGED     1
 | |
| #define HTTP_STATE_TCP_CONFIGED      2
 | |
| #define HTTP_STATE_TCP_UNCONFIGED    3
 | |
| #define HTTP_STATE_TCP_CONNECTED     4
 | |
| #define HTTP_STATE_TCP_CLOSED        5
 | |
| 
 | |
| //
 | |
| // TCP configured data.
 | |
| //
 | |
| #define HTTP_TOS_DEAULT              8
 | |
| #define HTTP_TTL_DEAULT              255
 | |
| #define HTTP_BUFFER_SIZE_DEAULT      65535
 | |
| #define HTTP_MAX_SYN_BACK_LOG        5
 | |
| #define HTTP_CONNECTION_TIMEOUT      60
 | |
| #define HTTP_DATA_RETRIES            12
 | |
| #define HTTP_FIN_TIMEOUT             2
 | |
| #define HTTP_KEEP_ALIVE_PROBES       6
 | |
| #define HTTP_KEEP_ALIVE_TIME         7200
 | |
| #define HTTP_KEEP_ALIVE_INTERVAL     30
 | |
| 
 | |
| #define HTTP_URL_BUFFER_LEN          4096
 | |
| 
 | |
| typedef struct _HTTP_SERVICE {
 | |
|   UINT32                        Signature;
 | |
|   EFI_SERVICE_BINDING_PROTOCOL  ServiceBinding;
 | |
|   EFI_HANDLE                    Ip4DriverBindingHandle;
 | |
|   EFI_HANDLE                    Ip6DriverBindingHandle;
 | |
|   EFI_HANDLE                    ControllerHandle;
 | |
|   EFI_HANDLE                    Tcp4ChildHandle;
 | |
|   EFI_HANDLE                    Tcp6ChildHandle;
 | |
|   LIST_ENTRY                    ChildrenList;
 | |
|   UINTN                         ChildrenNumber;
 | |
|   INTN                          State;
 | |
| } HTTP_SERVICE;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_TCP4_IO_TOKEN             Tx4Token;
 | |
|   EFI_TCP4_TRANSMIT_DATA        Tx4Data;
 | |
|   EFI_TCP6_IO_TOKEN             Tx6Token;
 | |
|   EFI_TCP6_TRANSMIT_DATA        Tx6Data;
 | |
|   EFI_TCP4_IO_TOKEN             Rx4Token;
 | |
|   EFI_TCP4_RECEIVE_DATA         Rx4Data;
 | |
|   EFI_TCP6_IO_TOKEN             Rx6Token;
 | |
|   EFI_TCP6_RECEIVE_DATA         Rx6Data;
 | |
|   BOOLEAN                       IsTxDone;
 | |
|   BOOLEAN                       IsRxDone;
 | |
|   UINTN                         BodyLen;
 | |
|   EFI_HTTP_METHOD               Method;
 | |
| } HTTP_TCP_TOKEN_WRAP;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_TLS_VERSION               Version;
 | |
|   EFI_TLS_CONNECTION_END        ConnectionEnd;
 | |
|   EFI_TLS_VERIFY                VerifyMethod;
 | |
|   EFI_TLS_VERIFY_HOST           VerifyHost;
 | |
|   EFI_TLS_SESSION_STATE         SessionState;
 | |
| } TLS_CONFIG_DATA;
 | |
| 
 | |
| //
 | |
| // Callback data for HTTP_PARSER_CALLBACK()
 | |
| //
 | |
| typedef struct {
 | |
|   UINTN                         ParseDataLength;
 | |
|   VOID                          *ParseData;
 | |
|   VOID                          *Wrap;
 | |
| } HTTP_CALLBACK_DATA;
 | |
| 
 | |
| typedef struct _HTTP_PROTOCOL {
 | |
|   UINT32                        Signature;
 | |
|   EFI_HTTP_PROTOCOL             Http;
 | |
|   EFI_HANDLE                    Handle;
 | |
|   HTTP_SERVICE                  *Service;
 | |
|   LIST_ENTRY                    Link;   // Link to all HTTP instance from the service.
 | |
|   BOOLEAN                       InDestroy;
 | |
|   INTN                          State;
 | |
|   EFI_HTTP_METHOD               Method;
 | |
| 
 | |
|   UINTN                         StatusCode;
 | |
| 
 | |
|   EFI_EVENT                     TimeoutEvent;
 | |
| 
 | |
|   EFI_HANDLE                    Tcp4ChildHandle;
 | |
|   EFI_TCP4_PROTOCOL             *Tcp4;
 | |
|   EFI_TCP4_CONFIG_DATA          Tcp4CfgData;
 | |
|   EFI_TCP4_OPTION               Tcp4Option;
 | |
| 
 | |
|   EFI_TCP4_CONNECTION_TOKEN     Tcp4ConnToken;
 | |
|   BOOLEAN                       IsTcp4ConnDone;
 | |
|   EFI_TCP4_CLOSE_TOKEN          Tcp4CloseToken;
 | |
|   BOOLEAN                       IsTcp4CloseDone;
 | |
|   CHAR8                         *RemoteHost;
 | |
|   UINT16                        RemotePort;
 | |
|   EFI_IPv4_ADDRESS              RemoteAddr;
 | |
| 
 | |
|   EFI_HANDLE                    Tcp6ChildHandle;
 | |
|   EFI_TCP6_PROTOCOL             *Tcp6;
 | |
|   EFI_TCP6_CONFIG_DATA          Tcp6CfgData;
 | |
|   EFI_TCP6_OPTION               Tcp6Option;
 | |
| 
 | |
|   EFI_TCP6_CONNECTION_TOKEN     Tcp6ConnToken;
 | |
|   BOOLEAN                       IsTcp6ConnDone;
 | |
|   EFI_TCP6_CLOSE_TOKEN          Tcp6CloseToken;
 | |
|   BOOLEAN                       IsTcp6CloseDone;
 | |
|   EFI_IPv6_ADDRESS              RemoteIpv6Addr;
 | |
| 
 | |
|   //
 | |
|   // Rx4Token or Rx6Token used for receiving HTTP header.
 | |
|   //
 | |
|   EFI_TCP4_IO_TOKEN             Rx4Token;
 | |
|   EFI_TCP4_RECEIVE_DATA         Rx4Data;
 | |
|   EFI_TCP6_IO_TOKEN             Rx6Token;
 | |
|   EFI_TCP6_RECEIVE_DATA         Rx6Data;
 | |
|   BOOLEAN                       IsRxDone;
 | |
| 
 | |
|   CHAR8                         **EndofHeader;
 | |
|   CHAR8                         **HttpHeaders;
 | |
|   CHAR8                         *CacheBody;
 | |
|   CHAR8                         *NextMsg;
 | |
|   UINTN                         CacheLen;
 | |
|   UINTN                         CacheOffset;
 | |
| 
 | |
|   //
 | |
|   // HTTP message-body parser.
 | |
|   //
 | |
|   VOID                          *MsgParser;
 | |
|   HTTP_CALLBACK_DATA            CallbackData;
 | |
| 
 | |
|   EFI_HTTP_VERSION              HttpVersion;
 | |
|   UINT32                        TimeOutMillisec;
 | |
|   BOOLEAN                       LocalAddressIsIPv6;
 | |
| 
 | |
|   EFI_HTTPv4_ACCESS_POINT       IPv4Node;
 | |
|   EFI_HTTPv6_ACCESS_POINT       Ipv6Node;
 | |
| 
 | |
|   NET_MAP                       TxTokens;
 | |
|   NET_MAP                       RxTokens;
 | |
| 
 | |
|   CHAR8                         *Url;
 | |
| 
 | |
|   //
 | |
|   // Https Support
 | |
|   //
 | |
|   BOOLEAN                          UseHttps;
 | |
| 
 | |
|   EFI_SERVICE_BINDING_PROTOCOL     *TlsSb;
 | |
|   EFI_HANDLE                       TlsChildHandle; /// Tls ChildHandle
 | |
|   TLS_CONFIG_DATA                  TlsConfigData;
 | |
|   EFI_TLS_PROTOCOL                 *Tls;
 | |
|   EFI_TLS_CONFIGURATION_PROTOCOL   *TlsConfiguration;
 | |
|   EFI_TLS_SESSION_STATE            TlsSessionState;
 | |
| 
 | |
|   //
 | |
|   // TlsTxData used for transmitting TLS related messages.
 | |
|   //
 | |
|   EFI_TCP4_IO_TOKEN                Tcp4TlsTxToken;
 | |
|   EFI_TCP4_TRANSMIT_DATA           Tcp4TlsTxData;
 | |
|   EFI_TCP6_IO_TOKEN                Tcp6TlsTxToken;
 | |
|   EFI_TCP6_TRANSMIT_DATA           Tcp6TlsTxData;
 | |
|   BOOLEAN                          TlsIsTxDone;
 | |
| 
 | |
|   //
 | |
|   // TlsRxData used for receiving TLS related messages.
 | |
|   //
 | |
|   EFI_TCP4_IO_TOKEN                Tcp4TlsRxToken;
 | |
|   EFI_TCP4_RECEIVE_DATA            Tcp4TlsRxData;
 | |
|   EFI_TCP6_IO_TOKEN                Tcp6TlsRxToken;
 | |
|   EFI_TCP6_RECEIVE_DATA            Tcp6TlsRxData;
 | |
|   BOOLEAN                          TlsIsRxDone;
 | |
| } HTTP_PROTOCOL;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_HTTP_TOKEN                *HttpToken;
 | |
|   HTTP_PROTOCOL                 *HttpInstance;
 | |
|   HTTP_TCP_TOKEN_WRAP           TcpWrap;
 | |
| } HTTP_TOKEN_WRAP;
 | |
| 
 | |
| 
 | |
| #define HTTP_PROTOCOL_SIGNATURE  SIGNATURE_32('H', 't', 't', 'P')
 | |
| 
 | |
| #define HTTP_INSTANCE_FROM_PROTOCOL(a) \
 | |
|   CR ( \
 | |
|   (a), \
 | |
|   HTTP_PROTOCOL, \
 | |
|   Http, \
 | |
|   HTTP_PROTOCOL_SIGNATURE \
 | |
|   )
 | |
| 
 | |
| /**
 | |
|   The common notify function used in HTTP driver.
 | |
| 
 | |
|   @param[in]  Event   The event signaled.
 | |
|   @param[in]  Context The context.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| HttpCommonNotify (
 | |
|   IN EFI_EVENT  Event,
 | |
|   IN VOID       *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create events for the TCP connection token and TCP close token.
 | |
| 
 | |
|   @param[in]  HttpInstance       Pointer to HTTP_PROTOCOL structure.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The events are created successfully.
 | |
|   @retval others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpCreateTcpConnCloseEvent (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Close events in the TCP connection token and TCP close token.
 | |
| 
 | |
|   @param[in]  HttpInstance   Pointer to HTTP_PROTOCOL structure.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| HttpCloseTcpConnCloseEvent (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create event for the TCP transmit token.
 | |
| 
 | |
|   @param[in]  Wrap               Point to HTTP token's wrap data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The events is created successfully.
 | |
|   @retval others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpCreateTcpTxEvent (
 | |
|   IN  HTTP_TOKEN_WRAP      *Wrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create event for the TCP receive token which is used to receive HTTP header.
 | |
| 
 | |
|   @param[in]  HttpInstance       Pointer to HTTP_PROTOCOL structure.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The events is created successfully.
 | |
|   @retval others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpCreateTcpRxEventForHeader (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create event for the TCP receive token which is used to receive HTTP body.
 | |
| 
 | |
|   @param[in]  Wrap               Point to HTTP token's wrap data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The events is created successfully.
 | |
|   @retval others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpCreateTcpRxEvent (
 | |
|   IN  HTTP_TOKEN_WRAP      *Wrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Close Events for Tcp Receive Tokens for HTTP body and HTTP header.
 | |
| 
 | |
|   @param[in]  Wrap               Pointer to HTTP token's wrap data.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| HttpCloseTcpRxEvent (
 | |
|   IN  HTTP_TOKEN_WRAP      *Wrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Initialize the HTTP_PROTOCOL structure to the unconfigured state.
 | |
| 
 | |
|   @param[in, out]  HttpInstance         Pointer to HTTP_PROTOCOL structure.
 | |
|   @param[in]       IpVersion            Indicate us TCP4 protocol or TCP6 protocol.
 | |
| 
 | |
|   @retval EFI_SUCCESS       HTTP_PROTOCOL structure is initialized successfully.
 | |
|   @retval Others            Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpInitProtocol (
 | |
|   IN OUT HTTP_PROTOCOL           *HttpInstance,
 | |
|   IN     BOOLEAN                 IpVersion
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Clean up the HTTP child, release all the resources used by it.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP child to clean up.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| HttpCleanProtocol (
 | |
|   IN  HTTP_PROTOCOL          *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Establish TCP connection with HTTP server.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The TCP connection is established.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpCreateConnection (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Close existing TCP connection.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The TCP connection is closed.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpCloseConnection (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Configure TCP4 protocol child.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
|   @param[in]  Wrap               The HTTP token's wrap data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The TCP4 protocol child is configured.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpConfigureTcp4 (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance,
 | |
|   IN  HTTP_TOKEN_WRAP      *Wrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Configure TCP6 protocol child.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
|   @param[in]  Wrap               The HTTP token's wrap data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The TCP6 protocol child is configured.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpConfigureTcp6 (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance,
 | |
|   IN  HTTP_TOKEN_WRAP      *Wrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Check existing TCP connection, if in error state, recover TCP4 connection. Then,
 | |
|   connect one TLS session if required.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The TCP connection is established.
 | |
|   @retval EFI_NOT_READY          TCP4 protocol child is not created or configured.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpConnectTcp4 (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Check existing TCP connection, if in error state, recover TCP6 connection. Then,
 | |
|   connect one TLS session if required.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The TCP connection is established.
 | |
|   @retval EFI_NOT_READY          TCP6 protocol child is not created or configured.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpConnectTcp6 (
 | |
|   IN  HTTP_PROTOCOL        *HttpInstance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Send the HTTP or HTTPS message through TCP4 or TCP6.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
|   @param[in]  Wrap               The HTTP token's wrap data.
 | |
|   @param[in]  TxString           Buffer containing the HTTP message string.
 | |
|   @param[in]  TxStringLen        Length of the HTTP message string in bytes.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The HTTP message is queued into TCP transmit queue.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpTransmitTcp (
 | |
|   IN  HTTP_PROTOCOL    *HttpInstance,
 | |
|   IN  HTTP_TOKEN_WRAP  *Wrap,
 | |
|   IN  UINT8            *TxString,
 | |
|   IN  UINTN            TxStringLen
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Check whether the user's token or event has already
 | |
|   been enqueue on HTTP Tx or Rx Token list.
 | |
| 
 | |
|   @param[in]  Map                The container of either user's transmit or receive
 | |
|                                  token.
 | |
|   @param[in]  Item               Current item to check against.
 | |
|   @param[in]  Context            The Token to check against.
 | |
| 
 | |
|   @retval EFI_ACCESS_DENIED      The token or event has already been enqueued in IP
 | |
|   @retval EFI_SUCCESS            The current item isn't the same token/event as the
 | |
|                                  context.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| HttpTokenExist (
 | |
|   IN NET_MAP                *Map,
 | |
|   IN NET_MAP_ITEM           *Item,
 | |
|   IN VOID                   *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Check whether the HTTP message associated with TxToken or Tx6Token is already sent out.
 | |
| 
 | |
|   @param[in]  Map                The container of TxToken.
 | |
|   @param[in]  Item               Current item to check against.
 | |
|   @param[in]  Context            The Token to check against.
 | |
| 
 | |
|   @retval EFI_NOT_READY          The HTTP message is still queued in the list.
 | |
|   @retval EFI_SUCCESS            The HTTP message has been sent out.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| HttpTcpNotReady (
 | |
|   IN NET_MAP                *Map,
 | |
|   IN NET_MAP_ITEM           *Item,
 | |
|   IN VOID                   *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Initialize Http session.
 | |
| 
 | |
|   @param[in]  HttpInstance       The HTTP instance private data.
 | |
|   @param[in]  Wrap               The HTTP token's wrap data.
 | |
|   @param[in]  Configure          The Flag indicates whether need to initialize session.
 | |
|   @param[in]  TlsConfigure       The Flag indicates whether it's the new Tls session.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The initialization of session is done.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpInitSession (
 | |
|   IN  HTTP_PROTOCOL    *HttpInstance,
 | |
|   IN  HTTP_TOKEN_WRAP  *Wrap,
 | |
|   IN  BOOLEAN          Configure,
 | |
|   IN  BOOLEAN          TlsConfigure
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Transmit the HTTP or HTTPS message by processing the associated HTTP token.
 | |
| 
 | |
|   @param[in]  Map                The container of TxToken or Tx6Token.
 | |
|   @param[in]  Item               Current item to check against.
 | |
|   @param[in]  Context            The Token to check against.
 | |
| 
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate resources.
 | |
|   @retval EFI_SUCCESS            The HTTP message is queued into TCP transmit
 | |
|                                  queue.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| HttpTcpTransmit (
 | |
|   IN NET_MAP                *Map,
 | |
|   IN NET_MAP_ITEM           *Item,
 | |
|   IN VOID                   *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Receive the HTTP response by processing the associated HTTP token.
 | |
| 
 | |
|   @param[in]  Map                The container of Rx4Token or Rx6Token.
 | |
|   @param[in]  Item               Current item to check against.
 | |
|   @param[in]  Context            The Token to check against.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The HTTP response is queued into TCP receive
 | |
|                                  queue.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| HttpTcpReceive (
 | |
|   IN NET_MAP                *Map,
 | |
|   IN NET_MAP_ITEM           *Item,
 | |
|   IN VOID                   *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Receive the HTTP header by processing the associated HTTP token.
 | |
| 
 | |
|   @param[in]       HttpInstance    The HTTP instance private data.
 | |
|   @param[in, out]  SizeofHeaders   The HTTP header length.
 | |
|   @param[in, out]  BufferSize      The size of buffer to cache the header message.
 | |
|   @param[in]       Timeout         The time to wait for receiving the header packet.
 | |
| 
 | |
|   @retval EFI_SUCCESS              The HTTP header is received.
 | |
|   @retval Others                   Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpTcpReceiveHeader (
 | |
|   IN  HTTP_PROTOCOL         *HttpInstance,
 | |
|   IN  OUT UINTN             *SizeofHeaders,
 | |
|   IN  OUT UINTN             *BufferSize,
 | |
|   IN  EFI_EVENT             Timeout
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Receive the HTTP body by processing the associated HTTP token.
 | |
| 
 | |
|   @param[in]  Wrap               The HTTP token's wrap data.
 | |
|   @param[in]  HttpMsg            The HTTP message data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The HTTP body is received.
 | |
|   @retval Others                 Other error as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpTcpReceiveBody (
 | |
|   IN  HTTP_TOKEN_WRAP       *Wrap,
 | |
|   IN  EFI_HTTP_MESSAGE      *HttpMsg
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Clean up Tcp Tokens while the Tcp transmission error occurs.
 | |
| 
 | |
|   @param[in]  Wrap               Pointer to HTTP token's wrap data.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| HttpTcpTokenCleanup (
 | |
|   IN  HTTP_TOKEN_WRAP      *Wrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   The work function of EfiHttpResponse().
 | |
| 
 | |
|   @param[in]  Wrap                Pointer to HTTP token's wrap data.
 | |
| 
 | |
|   @retval EFI_SUCCESS             Allocation succeeded.
 | |
|   @retval EFI_OUT_OF_RESOURCES    Failed to complete the operation due to lack of resources.
 | |
|   @retval EFI_NOT_READY           Can't find a corresponding TxToken.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpResponseWorker (
 | |
|   IN  HTTP_TOKEN_WRAP           *Wrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Send Events via EDKII_HTTP_CALLBACK_PROTOCOL.
 | |
| 
 | |
|   @param[in]  Event               The event that occurs in the current state.
 | |
|   @param[in]  EventStatus         The Status of Event, EFI_SUCCESS or other errors.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| HttpNotify (
 | |
|   IN  EDKII_HTTP_CALLBACK_EVENT         Event,
 | |
|   IN  EFI_STATUS                        EventStatus
 | |
|   );
 | |
| 
 | |
| #endif
 |