]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpDxe/HttpProto.c
NetworkPkg: DnsDxe: fix return type of DnsFillinQNameForQueryIp()
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.c
index 39837a3c827dd53d5a13fd096db070cc329f77c5..9660b6fb67162afd99bfbbb4a6121f8d2431eaf3 100644 (file)
@@ -150,6 +150,9 @@ HttpTcpReceiveNotifyDpc (
     gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
     \r
     if (EFI_ERROR (Wrap->TcpWrap.Rx6Token.CompletionToken.Status)) {\r
+      Wrap->HttpToken->Status = Wrap->TcpWrap.Rx6Token.CompletionToken.Status;\r
+      gBS->SignalEvent (Wrap->HttpToken->Event);\r
+      FreePool (Wrap);\r
       return ;\r
     }\r
 \r
@@ -157,6 +160,9 @@ HttpTcpReceiveNotifyDpc (
     gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
     \r
     if (EFI_ERROR (Wrap->TcpWrap.Rx4Token.CompletionToken.Status)) {\r
+      Wrap->HttpToken->Status = Wrap->TcpWrap.Rx4Token.CompletionToken.Status;\r
+      gBS->SignalEvent (Wrap->HttpToken->Event);\r
+      FreePool (Wrap);\r
       return ;\r
     }\r
   }\r
@@ -562,18 +568,13 @@ HttpCloseTcpRxEvent (
   )\r
 {\r
   HTTP_PROTOCOL            *HttpInstance;\r
-  EFI_TCP4_IO_TOKEN        *Rx4Token;\r
-  EFI_TCP6_IO_TOKEN        *Rx6Token;\r
 \r
+  ASSERT (Wrap != NULL);\r
   HttpInstance   = Wrap->HttpInstance;\r
-  Rx4Token       = NULL;\r
-  Rx6Token       = NULL;\r
   \r
   if (HttpInstance->LocalAddressIsIPv6) {\r
-    if (Wrap != NULL) {\r
-      if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
-        gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
-      } \r
+    if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
     }\r
 \r
     if (HttpInstance->Rx6Token.CompletionToken.Event != NULL) {\r
@@ -581,10 +582,8 @@ HttpCloseTcpRxEvent (
       HttpInstance->Rx6Token.CompletionToken.Event = NULL;\r
     }\r
   } else {\r
-    if (Wrap != NULL) {\r
-      if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
-        gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
-      }\r
+    if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
     }\r
     \r
     if (HttpInstance->Rx4Token.CompletionToken.Event != NULL) {\r
@@ -1179,7 +1178,7 @@ HttpConnectTcp4 (
   EFI_TCP4_CONNECTION_STATE Tcp4State;\r
 \r
 \r
-  if (HttpInstance->State != HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp4 == NULL) {\r
+  if (HttpInstance->State < HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp4 == NULL) {\r
     return EFI_NOT_READY;\r
   }\r
 \r
@@ -1196,9 +1195,11 @@ HttpConnectTcp4 (
     return Status;\r
   }\r
 \r
-  if (Tcp4State > Tcp4StateEstablished) {\r
+  if (Tcp4State == Tcp4StateEstablished) {\r
+    return EFI_SUCCESS;\r
+  } else if (Tcp4State > Tcp4StateEstablished ) {\r
     HttpCloseConnection(HttpInstance);\r
-  }  \r
+  }\r
 \r
   return HttpCreateConnection (HttpInstance);\r
 }\r
@@ -1221,7 +1222,7 @@ HttpConnectTcp6 (
   EFI_STATUS                Status;\r
   EFI_TCP6_CONNECTION_STATE Tcp6State;\r
 \r
-  if (HttpInstance->State != HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp6 == NULL) {\r
+  if (HttpInstance->State < HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp6 == NULL) {\r
     return EFI_NOT_READY;\r
   }\r
 \r
@@ -1239,8 +1240,10 @@ HttpConnectTcp6 (
      return Status;\r
   }\r
 \r
-  if (Tcp6State > Tcp6StateEstablished) {\r
-    HttpCloseConnection (HttpInstance);\r
+  if (Tcp6State == Tcp6StateEstablished) {\r
+    return EFI_SUCCESS;\r
+  } else if (Tcp6State > Tcp6StateEstablished ) {\r
+    HttpCloseConnection(HttpInstance);\r
   }\r
 \r
   return HttpCreateConnection (HttpInstance);\r
@@ -1251,6 +1254,7 @@ HttpConnectTcp6 (
 \r
   @param[in]  HttpInstance       The HTTP instance private data.\r
   @param[in]  Wrap               The HTTP token's wrap data.\r
+  @param[in]  Configure          The Flag indicates whether the first time to initialize Tcp.\r
 \r
   @retval EFI_SUCCESS            The initialization of TCP instance is done. \r
   @retval Others                 Other error as indicated.\r
@@ -1259,7 +1263,8 @@ HttpConnectTcp6 (
 EFI_STATUS\r
 HttpInitTcp (\r
   IN  HTTP_PROTOCOL    *HttpInstance,\r
-  IN  HTTP_TOKEN_WRAP  *Wrap\r
+  IN  HTTP_TOKEN_WRAP  *Wrap,\r
+  IN  BOOLEAN          Configure\r
   )\r
 {\r
   EFI_STATUS           Status;\r
@@ -1269,10 +1274,13 @@ HttpInitTcp (
     //\r
     // Configure TCP instance.\r
     //\r
-    Status = HttpConfigureTcp4 (HttpInstance, Wrap);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
+    if (Configure) {\r
+      Status = HttpConfigureTcp4 (HttpInstance, Wrap);\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
+      }\r
     }\r
+\r
     //\r
     // Connect TCP.\r
     //\r
@@ -1284,10 +1292,13 @@ HttpInitTcp (
     //\r
     // Configure TCP instance.\r
     //\r
-    Status = HttpConfigureTcp6 (HttpInstance, Wrap);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
+    if (Configure) {\r
+      Status = HttpConfigureTcp6 (HttpInstance, Wrap);\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
+      }\r
     }\r
+\r
     //\r
     // Connect TCP.\r
     //\r
@@ -1879,23 +1890,22 @@ HttpTcpTokenCleanup (
   EFI_TCP4_IO_TOKEN        *Rx4Token;\r
   EFI_TCP6_IO_TOKEN        *Rx6Token;\r
 \r
+  ASSERT (Wrap != NULL);\r
   HttpInstance   = Wrap->HttpInstance;\r
   Rx4Token       = NULL;\r
   Rx6Token       = NULL;\r
   \r
   if (HttpInstance->LocalAddressIsIPv6) {\r
-    if (Wrap != NULL) {\r
-      if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
-        gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
-      }\r
+    if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
+    }\r
 \r
-      Rx6Token = &Wrap->TcpWrap.Rx6Token;\r
-      if (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
-        FreePool (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
-        Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r
-      }\r
-      FreePool (Wrap); \r
+    Rx6Token = &Wrap->TcpWrap.Rx6Token;\r
+    if (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
+      FreePool (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
+      Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r
     }\r
+    FreePool (Wrap);\r
 \r
     if (HttpInstance->Rx6Token.CompletionToken.Event != NULL) {\r
       gBS->CloseEvent (HttpInstance->Rx6Token.CompletionToken.Event);\r
@@ -1909,18 +1919,16 @@ HttpTcpTokenCleanup (
     }\r
     \r
   } else {\r
-    if (Wrap != NULL) {\r
-      if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
-        gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
-      }\r
-      Rx4Token = &Wrap->TcpWrap.Rx4Token;\r
-      if (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
-        FreePool (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
-        Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r
-      }\r
-      FreePool (Wrap);\r
+    if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
     }\r
-    \r
+    Rx4Token = &Wrap->TcpWrap.Rx4Token;\r
+    if (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
+      FreePool (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
+      Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r
+    }\r
+    FreePool (Wrap);\r
+\r
     if (HttpInstance->Rx4Token.CompletionToken.Event != NULL) {\r
       gBS->CloseEvent (HttpInstance->Rx4Token.CompletionToken.Event);\r
       HttpInstance->Rx4Token.CompletionToken.Event = NULL;\r