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
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
)\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
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
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
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
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
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
\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
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
//\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
//\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
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
}\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