]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpDxe/HttpProto.h
NetworkPkg:Enable Http Boot over Ipv6 stack
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.h
index c37b80c8ec745d62e5f2a34ba2c227757ed0fcbe..a15e0a87be53bd1678187cf5edbf2dec789363b9 100644 (file)
@@ -27,6 +27,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
   HTTP_SERVICE_SIGNATURE \\r
   )\r
 \r
+\r
 //\r
 // The state of HTTP protocol. It starts from UNCONFIGED.\r
 //\r
@@ -58,18 +59,23 @@ typedef struct _HTTP_SERVICE {
   EFI_SERVICE_BINDING_PROTOCOL  ServiceBinding;\r
   EFI_HANDLE                    ImageHandle;\r
   EFI_HANDLE                    ControllerHandle;\r
+  EFI_HANDLE                    Tcp4ChildHandle;\r
+  EFI_HANDLE                    Tcp6ChildHandle;\r
   LIST_ENTRY                    ChildrenList;\r
   UINTN                         ChildrenNumber;\r
-  EFI_HANDLE                    TcpChildHandle;\r
   INTN                          State;\r
 } HTTP_SERVICE;\r
 \r
 typedef struct {\r
-  EFI_TCP4_IO_TOKEN             TxToken;\r
-  EFI_TCP4_TRANSMIT_DATA        TxData;\r
+  EFI_TCP4_IO_TOKEN             Tx4Token;\r
+  EFI_TCP4_TRANSMIT_DATA        Tx4Data;\r
+  EFI_TCP6_IO_TOKEN             Tx6Token;\r
+  EFI_TCP6_TRANSMIT_DATA        Tx6Data;\r
+  EFI_TCP4_IO_TOKEN             Rx4Token;\r
+  EFI_TCP4_RECEIVE_DATA         Rx4Data;\r
+  EFI_TCP6_IO_TOKEN             Rx6Token;\r
+  EFI_TCP6_RECEIVE_DATA         Rx6Data;\r
   BOOLEAN                       IsTxDone;\r
-  EFI_TCP4_IO_TOKEN             RxToken;\r
-  EFI_TCP4_RECEIVE_DATA         RxData;\r
   BOOLEAN                       IsRxDone;\r
   UINTN                         BodyLen;\r
   EFI_HTTP_METHOD               Method;\r
@@ -84,26 +90,43 @@ typedef struct _HTTP_PROTOCOL {
   BOOLEAN                       InDestroy;\r
   INTN                          State;\r
 \r
-  EFI_HANDLE                    TcpChildHandle;\r
+  EFI_HANDLE                    Tcp4ChildHandle;\r
   EFI_TCP4_PROTOCOL             *Tcp4;\r
   EFI_TCP4_CONFIG_DATA          Tcp4CfgData;\r
   EFI_TCP4_OPTION               Tcp4Option;\r
 \r
-  EFI_TCP4_CONNECTION_TOKEN     ConnToken;\r
-  BOOLEAN                       IsConnDone;\r
-  EFI_TCP4_CLOSE_TOKEN          CloseToken;\r
-  BOOLEAN                       IsCloseDone;\r
-\r
+  EFI_TCP4_CONNECTION_TOKEN     Tcp4ConnToken;\r
+  BOOLEAN                       IsTcp4ConnDone;\r
+  EFI_TCP4_CLOSE_TOKEN          Tcp4CloseToken;\r
+  BOOLEAN                       IsTcp4CloseDone;\r
   CHAR8                         *RemoteHost;\r
   UINT16                        RemotePort;\r
   EFI_IPv4_ADDRESS              RemoteAddr;\r
+  \r
+  EFI_HANDLE                    Tcp6ChildHandle;\r
+  EFI_TCP6_PROTOCOL             *Tcp6;\r
+  EFI_TCP6_CONFIG_DATA          Tcp6CfgData;\r
+  EFI_TCP6_OPTION               Tcp6Option;\r
+  \r
+  EFI_TCP6_CONNECTION_TOKEN     Tcp6ConnToken;\r
+  BOOLEAN                       IsTcp6ConnDone;\r
+  EFI_TCP6_CLOSE_TOKEN          Tcp6CloseToken;\r
+  BOOLEAN                       IsTcp6CloseDone;\r
+  EFI_IPv6_ADDRESS              RemoteIpv6Addr;\r
+\r
+\r
+  \r
   //\r
-  // RxToken used for receiving HTTP header.\r
+  // Rx4Token or Rx6Token used for receiving HTTP header.\r
   //\r
-  EFI_TCP4_IO_TOKEN             RxToken;\r
-  EFI_TCP4_RECEIVE_DATA         RxData;\r
+  EFI_TCP4_IO_TOKEN             Rx4Token;\r
+  EFI_TCP4_RECEIVE_DATA         Rx4Data;\r
+  EFI_TCP6_IO_TOKEN             Rx6Token;\r
+  EFI_TCP6_RECEIVE_DATA         Rx6Data;\r
   BOOLEAN                       IsRxDone;\r
 \r
+  CHAR8                         **EndofHeader;\r
+  CHAR8                         **HttpHeaders;\r
   CHAR8                         *CacheBody;\r
   CHAR8                         *NextMsg;\r
   UINTN                         CacheLen;\r
@@ -119,6 +142,7 @@ typedef struct _HTTP_PROTOCOL {
   BOOLEAN                       LocalAddressIsIPv6;\r
 \r
   EFI_HTTPv4_ACCESS_POINT       IPv4Node;\r
+  EFI_HTTPv6_ACCESS_POINT       Ipv6Node;\r
 \r
   NET_MAP                       TxTokens;\r
   NET_MAP                       RxTokens;\r
@@ -158,7 +182,7 @@ HttpCommonNotify (
   );\r
 \r
 /**\r
-  Create events for the TCP4 connection token and TCP4 close token.\r
+  Create events for the TCP connection token and TCP close token.\r
 \r
   @param[in]  HttpInstance       Pointer to HTTP_PROTOCOL structure.\r
 \r
@@ -167,23 +191,23 @@ HttpCommonNotify (
 \r
 **/\r
 EFI_STATUS\r
-HttpCreateTcp4ConnCloseEvent (\r
+HttpCreateTcpConnCloseEvent (\r
   IN  HTTP_PROTOCOL        *HttpInstance\r
   );\r
 \r
 /**\r
-  Close events in the TCP4 connection token and TCP4 close token.\r
+  Close events in the TCP connection token and TCP close token.\r
 \r
   @param[in]  HttpInstance   Pointer to HTTP_PROTOCOL structure.\r
 \r
 **/\r
 VOID\r
-HttpCloseTcp4ConnCloseEvent (\r
+HttpCloseTcpConnCloseEvent (\r
   IN  HTTP_PROTOCOL        *HttpInstance\r
   );\r
 \r
 /**\r
-  Create event for the TCP4 transmit token.\r
+  Create event for the TCP transmit token.\r
 \r
   @param[in]  Wrap               Point to HTTP token's wrap data.\r
 \r
@@ -192,12 +216,12 @@ HttpCloseTcp4ConnCloseEvent (
 \r
 **/\r
 EFI_STATUS\r
-HttpCreateTcp4TxEvent (\r
+HttpCreateTcpTxEvent (\r
   IN  HTTP_TOKEN_WRAP      *Wrap\r
   );\r
 \r
 /**\r
-  Create event for the TCP4 receive token which is used to receive HTTP header.\r
+  Create event for the TCP receive token which is used to receive HTTP header.\r
 \r
   @param[in]  HttpInstance       Pointer to HTTP_PROTOCOL structure.\r
 \r
@@ -206,12 +230,12 @@ HttpCreateTcp4TxEvent (
 \r
 **/\r
 EFI_STATUS\r
-HttpCreateTcp4RxEventForHeader (\r
+HttpCreateTcpRxEventForHeader (\r
   IN  HTTP_PROTOCOL        *HttpInstance\r
   );\r
 \r
 /**\r
-  Create event for the TCP4 receive token which is used to receive HTTP body.\r
+  Create event for the TCP receive token which is used to receive HTTP body.\r
 \r
   @param[in]  Wrap               Point to HTTP token's wrap data.\r
 \r
@@ -220,15 +244,26 @@ HttpCreateTcp4RxEventForHeader (
 \r
 **/\r
 EFI_STATUS\r
-HttpCreateTcp4RxEvent (\r
+HttpCreateTcpRxEvent (\r
   IN  HTTP_TOKEN_WRAP      *Wrap \r
   );\r
 \r
+/**\r
+  Close Events for Tcp Receive Tokens for HTTP body and HTTP header.\r
+\r
+  @param[in]  Wrap               Pointer to HTTP token's wrap data.\r
+  \r
+**/\r
+VOID\r
+HttpCloseTcpRxEvent (\r
+  IN  HTTP_TOKEN_WRAP      *Wrap\r
+  );\r
+\r
 /**\r
   Intiialize the HTTP_PROTOCOL structure to the unconfigured state.\r
 \r
-  @param[in]       HttpSb               The HTTP service private instance.\r
   @param[in, out]  HttpInstance         Pointer to HTTP_PROTOCOL structure.\r
+  @param[in]       IpVersion            Indicate us TCP4 protocol or TCP6 protocol.\r
 \r
   @retval EFI_SUCCESS       HTTP_PROTOCOL structure is initialized successfully.                                          \r
   @retval Others            Other error as indicated.\r
@@ -236,8 +271,8 @@ HttpCreateTcp4RxEvent (
 **/\r
 EFI_STATUS\r
 HttpInitProtocol (\r
-  IN     HTTP_SERVICE            *HttpSb,\r
-  IN OUT HTTP_PROTOCOL           *HttpInstance\r
+  IN OUT HTTP_PROTOCOL           *HttpInstance,\r
+  IN     BOOLEAN                 IpVersion\r
   );\r
 \r
 /**\r
@@ -295,6 +330,22 @@ HttpConfigureTcp4 (
   IN  HTTP_TOKEN_WRAP      *Wrap\r
   );\r
 \r
+/**\r
+  Configure TCP6 protocol child.\r
+\r
+  @param[in]  HttpInstance       The HTTP instance private data.\r
+  @param[in]  Wrap               The HTTP token's wrap data.\r
+\r
+  @retval EFI_SUCCESS            The TCP6 protocol child is configured.\r
+  @retval Others                 Other error as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpConfigureTcp6 (\r
+  IN  HTTP_PROTOCOL        *HttpInstance,\r
+  IN  HTTP_TOKEN_WRAP      *Wrap\r
+  );\r
+\r
 /**\r
   Check existing TCP connection, if in error state, receover TCP4 connection.\r
 \r
@@ -311,7 +362,22 @@ HttpConnectTcp4 (
   );\r
 \r
 /**\r
-  Send the HTTP message through TCP4.\r
+  Check existing TCP connection, if in error state, recover TCP6 connection.\r
+\r
+  @param[in]  HttpInstance       The HTTP instance private data.\r
+\r
+  @retval EFI_SUCCESS            The TCP connection is established.\r
+  @retval EFI_NOT_READY          TCP6 protocol child is not created or configured.\r
+  @retval Others                 Other error as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpConnectTcp6 (\r
+  IN  HTTP_PROTOCOL        *HttpInstance\r
+  );\r
+\r
+/**\r
+  Send the HTTP message through TCP4 or TCP6.\r
 \r
   @param[in]  HttpInstance       The HTTP instance private data.\r
   @param[in]  Wrap               The HTTP token's wrap data.\r
@@ -323,7 +389,7 @@ HttpConnectTcp4 (
 \r
 **/\r
 EFI_STATUS\r
-HttpTransmitTcp4 (\r
+HttpTransmitTcp (\r
   IN  HTTP_PROTOCOL    *HttpInstance,\r
   IN  HTTP_TOKEN_WRAP  *Wrap,\r
   IN  UINT8            *TxString,\r
@@ -346,7 +412,7 @@ HttpMappingToStatusCode (
 \r
 /**\r
   Check whether the user's token or event has already\r
-  been enqueue on HTTP TxToken or RxToken list.\r
+  been enqueue on HTTP Tx or Rx Token list.\r
 \r
   @param[in]  Map                The container of either user's transmit or receive\r
                                  token.\r
@@ -367,7 +433,7 @@ HttpTokenExist (
   );\r
 \r
 /**\r
-  Check whether the HTTP message associated with TxToken is already sent out.\r
+  Check whether the HTTP message associated with TxToken or Tx6Token is already sent out.\r
 \r
   @param[in]  Map                The container of TxToken.\r
   @param[in]  Item               Current item to check against.\r
@@ -385,10 +451,26 @@ HttpTcpNotReady (
   IN VOID                   *Context\r
   );\r
 \r
+/**\r
+  Initialize TCP related data.\r
+\r
+  @param[in]  HttpInstance       The HTTP instance private data.\r
+  @param[in]  Wrap               The HTTP token's wrap data.\r
+\r
+  @retval EFI_SUCCESS            The initialization of TCP instance is done. \r
+  @retval Others                 Other error as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpInitTcp (\r
+  IN  HTTP_PROTOCOL    *HttpInstance,\r
+  IN  HTTP_TOKEN_WRAP  *Wrap\r
+  );\r
+\r
 /**\r
   Transmit the HTTP mssage by processing the associated HTTP token.\r
 \r
-  @param[in]  Map                The container of TxToken.\r
+  @param[in]  Map                The container of TxToken or Tx6Token.\r
   @param[in]  Item               Current item to check against.\r
   @param[in]  Context            The Token to check againist.\r
 \r
@@ -408,7 +490,7 @@ HttpTcpTransmit (
 /**\r
   Receive the HTTP response by processing the associated HTTP token.\r
 \r
-  @param[in]  Map                The container of RxToken.\r
+  @param[in]  Map                The container of Rx4Token or Rx6Token.\r
   @param[in]  Item               Current item to check against.\r
   @param[in]  Context            The Token to check againist.\r
 \r
@@ -425,6 +507,51 @@ HttpTcpReceive (
   IN VOID                   *Context\r
   );\r
 \r
+/**\r
+  Receive the HTTP header by processing the associated HTTP token.\r
+\r
+  @param[in]       HttpInstance    The HTTP instance private data.\r
+  @param[in, out]  SizeofHeaders   The HTTP header length.\r
+  @param[in, out]  BufferSize      The size of buffer to cacahe the header message.\r
+\r
+  @retval EFI_SUCCESS              The HTTP header is received.                          \r
+  @retval Others                   Other errors as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpTcpReceiveHeader (\r
+  IN  HTTP_PROTOCOL         *HttpInstance,\r
+  IN  OUT UINTN             *SizeofHeaders,\r
+  IN  OUT UINTN             *BufferSize\r
+  );\r
+\r
+/**\r
+  Receive the HTTP body by processing the associated HTTP token.\r
+\r
+  @param[in]  Wrap               The HTTP token's wrap data.\r
+  @param[in]  HttpMsg            The HTTP message data.\r
+\r
+  @retval EFI_SUCCESS            The HTTP body is received.                          \r
+  @retval Others                 Other error as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpTcpReceiveBody (\r
+  IN  HTTP_TOKEN_WRAP       *Wrap,\r
+  IN  EFI_HTTP_MESSAGE      *HttpMsg\r
+  );\r
+\r
+/**\r
+  Clean up Tcp Tokens while the Tcp transmission error occurs.\r
+\r
+  @param[in]  Wrap               Pointer to HTTP token's wrap data.\r
+  \r
+**/\r
+VOID\r
+HttpTcpTokenCleanup (\r
+  IN  HTTP_TOKEN_WRAP      *Wrap\r
+  );\r
+\r
 /**\r
   Generate HTTP request string.\r
 \r