REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the NetworkPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Maciej Rabeda <maciej.rabeda@linux.intel.com>
		
			
				
	
	
		
			330 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   HttpIoLib.h.
 | |
| 
 | |
| (C) Copyright 2020 Hewlett-Packard Development Company, L.P.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef HTTP_IO_LIB_H_
 | |
| #define HTTP_IO_LIB_H_
 | |
| 
 | |
| #include <IndustryStandard/Http11.h>
 | |
| 
 | |
| #include <Library/DpcLib.h>
 | |
| #include <Library/HttpLib.h>
 | |
| #include <Library/NetLib.h>
 | |
| 
 | |
| #define HTTP_IO_MAX_SEND_PAYLOAD                     1024
 | |
| #define HTTP_IO_CHUNK_SIZE_STRING_LEN                50
 | |
| #define HTTP_IO_CHUNKED_TRANSFER_CODING_DATA_LENGTH  256
 | |
| 
 | |
| ///
 | |
| /// HTTP_IO_CALLBACK_EVENT
 | |
| ///
 | |
| typedef enum {
 | |
|   HttpIoRequest,
 | |
|   HttpIoResponse
 | |
| } HTTP_IO_CALLBACK_EVENT;
 | |
| 
 | |
| /**
 | |
|   HttpIo Callback function which will be invoked when specified HTTP_IO_CALLBACK_EVENT happened.
 | |
| 
 | |
|   @param[in]    EventType      Indicate the Event type that occurs in the current callback.
 | |
|   @param[in]    Message        HTTP message which will be send to, or just received from HTTP server.
 | |
|   @param[in]    Context        The Callback Context pointer.
 | |
| 
 | |
|   @retval EFI_SUCCESS          Tells the HttpIo to continue the HTTP process.
 | |
|   @retval Others               Tells the HttpIo to abort the current HTTP process.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *HTTP_IO_CALLBACK)(
 | |
|   IN  HTTP_IO_CALLBACK_EVENT    EventType,
 | |
|   IN  EFI_HTTP_MESSAGE          *Message,
 | |
|   IN  VOID                      *Context
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// A wrapper structure to hold the received HTTP response data.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_HTTP_RESPONSE_DATA    Response;
 | |
|   UINTN                     HeaderCount;
 | |
|   EFI_HTTP_HEADER           *Headers;
 | |
|   UINTN                     BodyLength;
 | |
|   CHAR8                     *Body;
 | |
|   EFI_STATUS                Status;
 | |
| } HTTP_IO_RESPONSE_DATA;
 | |
| 
 | |
| ///
 | |
| /// HTTP_IO configuration data for IPv4
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_HTTP_VERSION    HttpVersion;
 | |
|   UINT32              RequestTimeOut;        ///< In milliseconds.
 | |
|   UINT32              ResponseTimeOut;       ///< In milliseconds.
 | |
|   BOOLEAN             UseDefaultAddress;
 | |
|   EFI_IPv4_ADDRESS    LocalIp;
 | |
|   EFI_IPv4_ADDRESS    SubnetMask;
 | |
|   UINT16              LocalPort;
 | |
| } HTTP4_IO_CONFIG_DATA;
 | |
| 
 | |
| ///
 | |
| /// HTTP_IO configuration data for IPv6
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_HTTP_VERSION    HttpVersion;
 | |
|   UINT32              RequestTimeOut;        ///< In milliseconds.
 | |
|   BOOLEAN             UseDefaultAddress;
 | |
|   EFI_IPv6_ADDRESS    LocalIp;
 | |
|   UINT16              LocalPort;
 | |
| } HTTP6_IO_CONFIG_DATA;
 | |
| 
 | |
| ///
 | |
| /// HTTP_IO configuration
 | |
| ///
 | |
| typedef union {
 | |
|   HTTP4_IO_CONFIG_DATA    Config4;
 | |
|   HTTP6_IO_CONFIG_DATA    Config6;
 | |
| } HTTP_IO_CONFIG_DATA;
 | |
| 
 | |
| ///
 | |
| /// HTTP_IO wrapper of the EFI HTTP service.
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT8                IpVersion;
 | |
|   EFI_HANDLE           Image;
 | |
|   EFI_HANDLE           Controller;
 | |
|   EFI_HANDLE           Handle;
 | |
| 
 | |
|   EFI_HTTP_PROTOCOL    *Http;
 | |
| 
 | |
|   HTTP_IO_CALLBACK     Callback;
 | |
|   VOID                 *Context;
 | |
| 
 | |
|   EFI_HTTP_TOKEN       ReqToken;
 | |
|   EFI_HTTP_MESSAGE     ReqMessage;
 | |
|   EFI_HTTP_TOKEN       RspToken;
 | |
|   EFI_HTTP_MESSAGE     RspMessage;
 | |
| 
 | |
|   BOOLEAN              IsTxDone;
 | |
|   BOOLEAN              IsRxDone;
 | |
| 
 | |
|   EFI_EVENT            TimeoutEvent;
 | |
|   UINT32               Timeout;
 | |
| } HTTP_IO;
 | |
| 
 | |
| ///
 | |
| /// Process code of HTTP chunk transfer.
 | |
| ///
 | |
| typedef enum  {
 | |
|   HttpIoSendChunkNone = 0,
 | |
|   HttpIoSendChunkHeaderZeroContent,
 | |
|   HttpIoSendChunkContent,
 | |
|   HttpIoSendChunkEndChunk,
 | |
|   HttpIoSendChunkFinish
 | |
| } HTTP_IO_SEND_CHUNK_PROCESS;
 | |
| 
 | |
| ///
 | |
| /// Process code of HTTP non chunk transfer.
 | |
| ///
 | |
| typedef enum  {
 | |
|   HttpIoSendNonChunkNone = 0,
 | |
|   HttpIoSendNonChunkHeaderZeroContent,
 | |
|   HttpIoSendNonChunkContent,
 | |
|   HttpIoSendNonChunkFinish
 | |
| } HTTP_IO_SEND_NON_CHUNK_PROCESS;
 | |
| 
 | |
| ///
 | |
| /// Chunk links for HTTP chunked transfer coding.
 | |
| ///
 | |
| typedef struct {
 | |
|   LIST_ENTRY    NextChunk;
 | |
|   UINTN         Length;
 | |
|   CHAR8         *Data;
 | |
| } HTTP_IO_CHUNKS;
 | |
| 
 | |
| /**
 | |
|   Notify the callback function when an event is triggered.
 | |
| 
 | |
|   @param[in]  Context         The opaque parameter to the function.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| HttpIoNotifyDpc (
 | |
|   IN VOID  *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Request HttpIoNotifyDpc as a DPC at TPL_CALLBACK.
 | |
| 
 | |
|   @param[in]  Event                 The event signaled.
 | |
|   @param[in]  Context               The opaque parameter to the function.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| HttpIoNotify (
 | |
|   IN EFI_EVENT  Event,
 | |
|   IN VOID       *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Destroy the HTTP_IO and release the resources.
 | |
| 
 | |
|   @param[in]  HttpIo          The HTTP_IO which wraps the HTTP service to be destroyed.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| HttpIoDestroyIo (
 | |
|   IN HTTP_IO  *HttpIo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create a HTTP_IO to access the HTTP service. It will create and configure
 | |
|   a HTTP child handle.
 | |
| 
 | |
|   @param[in]  Image          The handle of the driver image.
 | |
|   @param[in]  Controller     The handle of the controller.
 | |
|   @param[in]  IpVersion      IP_VERSION_4 or IP_VERSION_6.
 | |
|   @param[in]  ConfigData     The HTTP_IO configuration data.
 | |
|   @param[in]  Callback       Callback function which will be invoked when specified
 | |
|                              HTTP_IO_CALLBACK_EVENT happened.
 | |
|   @param[in]  Context        The Context data which will be passed to the Callback function.
 | |
|   @param[out] HttpIo         The HTTP_IO.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The HTTP_IO is created and configured.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_UNSUPPORTED        One or more of the control options are not
 | |
|                                  supported in the implementation.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | |
|   @retval Others                 Failed to create the HTTP_IO or configure it.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpIoCreateIo (
 | |
|   IN EFI_HANDLE           Image,
 | |
|   IN EFI_HANDLE           Controller,
 | |
|   IN UINT8                IpVersion,
 | |
|   IN HTTP_IO_CONFIG_DATA  *ConfigData,
 | |
|   IN HTTP_IO_CALLBACK     Callback,
 | |
|   IN VOID                 *Context,
 | |
|   OUT HTTP_IO             *HttpIo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Synchronously send a HTTP REQUEST message to the server.
 | |
| 
 | |
|   @param[in]   HttpIo           The HttpIo wrapping the HTTP service.
 | |
|   @param[in]   Request          A pointer to storage such data as URL and HTTP method.
 | |
|   @param[in]   HeaderCount      Number of HTTP header structures in Headers list.
 | |
|   @param[in]   Headers          Array containing list of HTTP headers.
 | |
|   @param[in]   BodyLength       Length in bytes of the HTTP body.
 | |
|   @param[in]   Body             Body associated with the HTTP request.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The HTTP request is transmitted.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | |
|   @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.
 | |
|   @retval Others                 Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpIoSendRequest (
 | |
|   IN  HTTP_IO                *HttpIo,
 | |
|   IN  EFI_HTTP_REQUEST_DATA  *Request       OPTIONAL,
 | |
|   IN  UINTN                  HeaderCount,
 | |
|   IN  EFI_HTTP_HEADER        *Headers       OPTIONAL,
 | |
|   IN  UINTN                  BodyLength,
 | |
|   IN  VOID                   *Body          OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Synchronously receive a HTTP RESPONSE message from the server.
 | |
| 
 | |
|   @param[in]   HttpIo           The HttpIo wrapping the HTTP service.
 | |
|   @param[in]   RecvMsgHeader    TRUE to receive a new HTTP response (from message header).
 | |
|                                 FALSE to continue receive the previous response message.
 | |
|   @param[out]  ResponseData     Point to a wrapper of the received response data.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The HTTP response is received.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | |
|   @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.
 | |
|   @retval Others                 Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpIoRecvResponse (
 | |
|   IN      HTTP_IO                *HttpIo,
 | |
|   IN      BOOLEAN                RecvMsgHeader,
 | |
|   OUT     HTTP_IO_RESPONSE_DATA  *ResponseData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get the value of the content length if there is a "Content-Length" header.
 | |
| 
 | |
|   @param[in]    HeaderCount        Number of HTTP header structures in Headers.
 | |
|   @param[in]    Headers            Array containing list of HTTP headers.
 | |
|   @param[out]   ContentLength      Pointer to save the value of the content length.
 | |
| 
 | |
|   @retval EFI_SUCCESS              Successfully get the content length.
 | |
|   @retval EFI_NOT_FOUND            No "Content-Length" header in the Headers.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpIoGetContentLength (
 | |
|   IN     UINTN            HeaderCount,
 | |
|   IN     EFI_HTTP_HEADER  *Headers,
 | |
|   OUT    UINTN            *ContentLength
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Synchronously receive a HTTP RESPONSE message from the server.
 | |
| 
 | |
|   @param[in]   HttpIo           The HttpIo wrapping the HTTP service.
 | |
|   @param[in]   HeaderCount      Number of headers in Headers.
 | |
|   @param[in]   Headers          Array containing list of HTTP headers.
 | |
|   @param[out]  ChunkListHead    A pointer to receivce list head of chunked data.
 | |
|                                 Caller has to release memory of ChunkListHead
 | |
|                                 and all list entries.
 | |
|   @param[out]  ContentLength    Total content length
 | |
| 
 | |
|   @retval EFI_SUCCESS            The HTTP chunked transfer is received.
 | |
|   @retval EFI_NOT_FOUND          No chunked transfer coding header found.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | |
|   @retval EFI_INVALID_PARAMETER  Improper parameters.
 | |
|   @retval Others                 Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpIoGetChunkedTransferContent (
 | |
|   IN     HTTP_IO          *HttpIo,
 | |
|   IN     UINTN            HeaderCount,
 | |
|   IN     EFI_HTTP_HEADER  *Headers,
 | |
|   OUT    LIST_ENTRY       **ChunkListHead,
 | |
|   OUT    UINTN            *ContentLength
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Send HTTP request in chunks.
 | |
| 
 | |
|   @param[in]   HttpIo             The HttpIo wrapping the HTTP service.
 | |
|   @param[in]   SendChunkProcess   Pointer to current chunk process status.
 | |
|   @param[out]  RequestMessage     Request to send.
 | |
| 
 | |
|   @retval EFI_SUCCESS             Successfully to send chunk data according to SendChunkProcess.
 | |
|   @retval Other                   Other errors.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpIoSendChunkedTransfer (
 | |
|   IN  HTTP_IO                     *HttpIo,
 | |
|   IN  HTTP_IO_SEND_CHUNK_PROCESS  *SendChunkProcess,
 | |
|   IN  EFI_HTTP_MESSAGE            *RequestMessage
 | |
|   );
 | |
| 
 | |
| #endif
 |