]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpDxe/HttpProto.c
NetworkPkg: Fix typos in some EFI_HTTP_STATUS_CODE definitions
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.c
index 829758ad5ea4173e1ab23333cf623912cc025cc7..13d5748378e3e645101a4bd8128390e4ddf378af 100644 (file)
@@ -2,6 +2,7 @@
   Miscellaneous routines for HttpDxe driver.\r
 \r
 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -38,20 +39,18 @@ HttpCommonNotify (
 /**\r
   The notify function associated with TxToken for Tcp4->Transmit().\r
 \r
-  @param[in]  Event   The event signaled.\r
   @param[in]  Context The context.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
-HttpTcpTransmitNotify (\r
-  IN EFI_EVENT  Event,\r
+HttpTcpTransmitNotifyDpc (\r
   IN VOID       *Context\r
   )\r
 {\r
   HTTP_TOKEN_WRAP          *Wrap;\r
 \r
-  if ((Event == NULL) || (Context == NULL)) {\r
+  if (Context == NULL) {\r
     return ;\r
   }\r
 \r
@@ -79,17 +78,36 @@ HttpTcpTransmitNotify (
 \r
 }\r
 \r
+/**\r
+  Request HttpTcpTransmitNotifyDpc as a DPC at TPL_CALLBACK.\r
+\r
+  @param  Event                 The receive event delivered to TCP for transmit.\r
+  @param  Context               Context for the callback.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+HttpTcpTransmitNotify (\r
+  IN EFI_EVENT                Event,\r
+  IN VOID                     *Context\r
+  )\r
+{\r
+  //\r
+  // Request HttpTcpTransmitNotifyDpc as a DPC at TPL_CALLBACK\r
+  //\r
+  QueueDpc (TPL_CALLBACK, HttpTcpTransmitNotifyDpc, Context);\r
+}\r
+\r
+\r
 /**\r
   The notify function associated with RxToken for Tcp4->Receive ().\r
 \r
-  @param[in]  Event   The event signaled.\r
   @param[in]  Context The context.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
-HttpTcpReceiveNotify (\r
-  IN EFI_EVENT  Event,\r
+HttpTcpReceiveNotifyDpc (\r
   IN VOID       *Context\r
   )\r
 {\r
@@ -99,11 +117,12 @@ HttpTcpReceiveNotify (
   EFI_STATUS               Status;\r
   HTTP_PROTOCOL            *HttpInstance;\r
 \r
-  if ((Event == NULL) || (Context == NULL)) {\r
+  if (Context == NULL) {\r
     return ;\r
   }\r
 \r
   Wrap = (HTTP_TOKEN_WRAP *) Context;\r
+  gBS->CloseEvent (Wrap->TcpWrap.RxToken.CompletionToken.Event);\r
   if (EFI_ERROR (Wrap->TcpWrap.RxToken.CompletionToken.Status)) {\r
     return ;\r
   }\r
@@ -172,6 +191,27 @@ HttpTcpReceiveNotify (
   FreePool (Wrap);\r
 }\r
 \r
+/**\r
+  Request HttpTcpReceiveNotifyDpc as a DPC at TPL_CALLBACK.\r
+\r
+  @param  Event                 The receive event delivered to TCP for receive.\r
+  @param  Context               Context for the callback.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+HttpTcpReceiveNotify (\r
+  IN EFI_EVENT                Event,\r
+  IN VOID                     *Context\r
+  )\r
+{\r
+  //\r
+  // Request HttpTcpTransmitNotifyDpc as a DPC at TPL_CALLBACK\r
+  //\r
+  QueueDpc (TPL_CALLBACK, HttpTcpReceiveNotifyDpc, Context);\r
+}\r
+\r
+\r
 /**\r
   Create events for the TCP4 connection token and TCP4 close token.\r
 \r
@@ -243,10 +283,12 @@ HttpCloseTcp4ConnCloseEvent (
 \r
   if (NULL != HttpInstance->ConnToken.CompletionToken.Event) {\r
     gBS->CloseEvent (HttpInstance->ConnToken.CompletionToken.Event);\r
+    HttpInstance->ConnToken.CompletionToken.Event = NULL;\r
   }\r
 \r
   if (NULL != HttpInstance->CloseToken.CompletionToken.Event) {\r
     gBS->CloseEvent(HttpInstance->CloseToken.CompletionToken.Event);\r
+    HttpInstance->CloseToken.CompletionToken.Event = NULL;\r
   }  \r
 }\r
 \r
@@ -429,6 +471,12 @@ HttpInitProtocol (
     goto ON_ERROR;\r
   }\r
 \r
+  HttpInstance->Url = AllocateZeroPool (HTTP_URL_BUFFER_LEN);\r
+  if (HttpInstance->Url == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto ON_ERROR;\r
+  }\r
+\r
   NetMapInit (&HttpInstance->TxTokens);\r
   NetMapInit (&HttpInstance->RxTokens);\r
 \r
@@ -494,6 +542,11 @@ HttpCleanProtocol (
     HttpInstance->MsgParser = NULL;\r
   }\r
 \r
+  if (HttpInstance->Url != NULL) {\r
+    FreePool (HttpInstance->Url);\r
+    HttpInstance->Url = NULL;\r
+  }\r
+\r
   NetMapClean (&HttpInstance->TxTokens);\r
   NetMapClean (&HttpInstance->RxTokens);\r
 \r
@@ -581,21 +634,22 @@ HttpCloseConnection (
 {\r
   EFI_STATUS                Status;\r
 \r
-  HttpInstance->CloseToken.AbortOnClose = TRUE;\r
-  HttpInstance->IsCloseDone             = FALSE;\r
-  \r
-\r
-  Status = HttpInstance->Tcp4->Close (HttpInstance->Tcp4, &HttpInstance->CloseToken);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
+  if (HttpInstance->State == HTTP_STATE_TCP_CONNECTED) {\r
+    HttpInstance->CloseToken.AbortOnClose = TRUE;\r
+    HttpInstance->IsCloseDone             = FALSE;\r
+    \r
+    Status = HttpInstance->Tcp4->Close (HttpInstance->Tcp4, &HttpInstance->CloseToken);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
 \r
-  while (!HttpInstance->IsCloseDone) {\r
-    HttpInstance->Tcp4->Poll (HttpInstance->Tcp4);\r
+    while (!HttpInstance->IsCloseDone) {\r
+      HttpInstance->Tcp4->Poll (HttpInstance->Tcp4);\r
+    }\r
   }\r
 \r
   HttpInstance->State = HTTP_STATE_TCP_CLOSED;\r
-  return Status;\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
@@ -840,7 +894,7 @@ HttpMappingToStatusCode (
   case 414:\r
     return HTTP_STATUS_414_REQUEST_URI_TOO_LARGE;\r
   case 415:\r
-    return HTTP_STATUS_415_UNSUPPORETD_MEDIA_TYPE;\r
+    return HTTP_STATUS_415_UNSUPPORTED_MEDIA_TYPE;\r
   case 416:\r
     return HTTP_STATUS_416_REQUESTED_RANGE_NOT_SATISFIED;\r
   case 417:\r
@@ -848,7 +902,7 @@ HttpMappingToStatusCode (
   case 500:\r
     return HTTP_STATUS_500_INTERNAL_SERVER_ERROR;\r
   case 501:\r
-    return HTTP_STATUS_501_NOT_IMIPLEMENTED;\r
+    return HTTP_STATUS_501_NOT_IMPLEMENTED;\r
   case 502:\r
     return HTTP_STATUS_502_BAD_GATEWAY;\r
   case 503:\r