X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=NetworkPkg%2FHttpDxe%2FHttpImpl.c;h=17deceb395473e7457e2c3616c7059eea423cc56;hp=fe1c3b7784e932f56dced4f93ea8927ad27f5e4b;hb=895b87e38015e0698c6a5c0633e0156b038a56f1;hpb=c0a0a5a5c76f7aaef30b5010ae1de6236defb445
diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c
index fe1c3b7784..17deceb395 100644
--- a/NetworkPkg/HttpDxe/HttpImpl.c
+++ b/NetworkPkg/HttpDxe/HttpImpl.c
@@ -1,7 +1,7 @@
/** @file
Implementation of EFI_HTTP_PROTOCOL protocol interfaces.
- Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.
+ Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP
This program and the accompanying materials
@@ -33,17 +33,17 @@ EFI_HTTP_PROTOCOL mEfiHttpTemplate = {
@param[in] This Pointer to EFI_HTTP_PROTOCOL instance.
@param[out] HttpConfigData Point to buffer for operational parameters of this
- HTTP instance. It is the responsibility of the caller
- to allocate the memory for HttpConfigData and
- HttpConfigData->AccessPoint.IPv6Node/IPv4Node. In fact,
- it is recommended to allocate sufficient memory to record
- IPv6Node since it is big enough for all possibilities.
+ HTTP instance. It is the responsibility of the caller
+ to allocate the memory for HttpConfigData and
+ HttpConfigData->AccessPoint.IPv6Node/IPv4Node. In fact,
+ it is recommended to allocate sufficient memory to record
+ IPv6Node since it is big enough for all possibilities.
@retval EFI_SUCCESS Operation succeeded.
@retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
This is NULL.
HttpConfigData is NULL.
- HttpConfigData->AccessPoint.IPv4Node or
+ HttpConfigData->AccessPoint.IPv4Node or
HttpConfigData->AccessPoint.IPv6Node is NULL.
@retval EFI_NOT_STARTED This EFI HTTP Protocol instance has not been started.
@@ -65,7 +65,6 @@ EfiHttpGetModeData (
}
HttpInstance = HTTP_INSTANCE_FROM_PROTOCOL (This);
- ASSERT (HttpInstance != NULL);
if ((HttpConfigData->AccessPoint.IPv6Node == NULL) ||
(HttpConfigData->AccessPoint.IPv4Node == NULL)) {
@@ -133,23 +132,23 @@ EFIAPI
EfiHttpConfigure (
IN EFI_HTTP_PROTOCOL *This,
IN EFI_HTTP_CONFIG_DATA *HttpConfigData OPTIONAL
- )
+ )
{
HTTP_PROTOCOL *HttpInstance;
EFI_STATUS Status;
-
+
//
// Check input parameters.
//
if (This == NULL ||
- (HttpConfigData != NULL &&
+ (HttpConfigData != NULL &&
((HttpConfigData->LocalAddressIsIPv6 && HttpConfigData->AccessPoint.IPv6Node == NULL) ||
(!HttpConfigData->LocalAddressIsIPv6 && HttpConfigData->AccessPoint.IPv4Node == NULL)))) {
return EFI_INVALID_PARAMETER;
}
HttpInstance = HTTP_INSTANCE_FROM_PROTOCOL (This);
- ASSERT (HttpInstance != NULL && HttpInstance->Service != NULL);
+ ASSERT (HttpInstance->Service != NULL);
if (HttpConfigData != NULL) {
@@ -167,8 +166,8 @@ EfiHttpConfigure (
HttpInstance->HttpVersion = HttpConfigData->HttpVersion;
HttpInstance->TimeOutMillisec = HttpConfigData->TimeOutMillisec;
HttpInstance->LocalAddressIsIPv6 = HttpConfigData->LocalAddressIsIPv6;
-
- if (HttpConfigData->LocalAddressIsIPv6) {
+
+ if (HttpConfigData->LocalAddressIsIPv6) {
CopyMem (
&HttpInstance->Ipv6Node,
HttpConfigData->AccessPoint.IPv6Node,
@@ -181,7 +180,7 @@ EfiHttpConfigure (
sizeof (HttpInstance->IPv4Node)
);
}
-
+
//
// Creat Tcp child
//
@@ -189,7 +188,7 @@ EfiHttpConfigure (
if (EFI_ERROR (Status)) {
return Status;
}
-
+
HttpInstance->State = HTTP_STATE_HTTP_CONFIGED;
return EFI_SUCCESS;
@@ -202,7 +201,7 @@ EfiHttpConfigure (
return EFI_SUCCESS;
}
}
-
+
/**
The Request() function queues an HTTP request to this HTTP instance.
@@ -282,16 +281,16 @@ EfiHttpRequest (
Request = HttpMsg->Data.Request;
//
- // Only support GET, HEAD, PATCH, PUT and POST method in current implementation.
+ // Only support GET, HEAD, DELETE, PATCH, PUT and POST method in current implementation.
//
if ((Request != NULL) && (Request->Method != HttpMethodGet) &&
- (Request->Method != HttpMethodHead) && (Request->Method != HttpMethodPut) &&
- (Request->Method != HttpMethodPost) && (Request->Method != HttpMethodPatch)) {
+ (Request->Method != HttpMethodHead) && (Request->Method != HttpMethodDelete) &&
+ (Request->Method != HttpMethodPut) && (Request->Method != HttpMethodPost) &&
+ (Request->Method != HttpMethodPatch)) {
return EFI_UNSUPPORTED;
}
HttpInstance = HTTP_INSTANCE_FROM_PROTOCOL (This);
- ASSERT (HttpInstance != NULL);
//
// Capture the method into HttpInstance.
@@ -308,8 +307,8 @@ EfiHttpRequest (
//
// Request would be NULL only for PUT/POST/PATCH operation (in the current implementation)
//
- if ((HttpInstance->Method != HttpMethodPut) &&
- (HttpInstance->Method != HttpMethodPost) &&
+ if ((HttpInstance->Method != HttpMethodPut) &&
+ (HttpInstance->Method != HttpMethodPost) &&
(HttpInstance->Method != HttpMethodPatch)) {
return EFI_INVALID_PARAMETER;
}
@@ -359,7 +358,7 @@ EfiHttpRequest (
UnicodeStrToAsciiStrS (Request->Url, Url, UrlLen);
//
- // From the information in Url, the HTTP instance will
+ // From the information in Url, the HTTP instance will
// be able to determine whether to use http or https.
//
HttpInstance->UseHttps = IsHttpsUrl (Url);
@@ -368,7 +367,7 @@ EfiHttpRequest (
// HTTP is disabled, return directly if the URI is not HTTPS.
//
if (!PcdGetBool (PcdAllowHttpConnections) && !(HttpInstance->UseHttps)) {
-
+
DEBUG ((EFI_D_ERROR, "EfiHttpRequest: HTTP is disabled.\n"));
return EFI_ACCESS_DENIED;
@@ -435,9 +434,9 @@ EfiHttpRequest (
ReConfigure = FALSE;
} else {
if ((HttpInstance->RemotePort == RemotePort) &&
- (AsciiStrCmp (HttpInstance->RemoteHost, HostName) == 0) &&
- (!HttpInstance->UseHttps || (HttpInstance->UseHttps &&
- !TlsConfigure &&
+ (AsciiStrCmp (HttpInstance->RemoteHost, HostName) == 0) &&
+ (!HttpInstance->UseHttps || (HttpInstance->UseHttps &&
+ !TlsConfigure &&
HttpInstance->TlsSessionState == EfiTlsSessionDataTransferring))) {
//
// Host Name and port number of the request URL are the same with previous call to Request().
@@ -496,7 +495,7 @@ EfiHttpRequest (
}
}
}
- }
+ }
if (Configure) {
//
@@ -515,14 +514,14 @@ EfiHttpRequest (
Status = EFI_OUT_OF_RESOURCES;
goto Error1;
}
-
+
AsciiStrToUnicodeStrS (HostName, HostNameStr, HostNameSize);
if (!HttpInstance->LocalAddressIsIPv6) {
Status = HttpDns4 (HttpInstance, HostNameStr, &HttpInstance->RemoteAddr);
} else {
Status = HttpDns6 (HttpInstance, HostNameStr, &HttpInstance->RemoteIpv6Addr);
}
-
+
FreePool (HostNameStr);
if (EFI_ERROR (Status)) {
DEBUG ((EFI_D_ERROR, "Error: Could not retrieve the host address from DNS server.\n"));
@@ -554,10 +553,10 @@ EfiHttpRequest (
if (EFI_ERROR (Status)) {
goto Error1;
}
-
+
TlsCloseTxRxEvent (HttpInstance);
}
-
+
HttpCloseConnection (HttpInstance);
EfiHttpCancel (This, NULL);
}
@@ -576,11 +575,11 @@ EfiHttpRequest (
if (Request != NULL) {
Wrap->TcpWrap.Method = Request->Method;
}
-
+
Status = HttpInitSession (
- HttpInstance,
- Wrap,
- Configure || ReConfigure,
+ HttpInstance,
+ Wrap,
+ Configure || ReConfigure,
TlsConfigure
);
if (EFI_ERROR (Status)) {
@@ -589,14 +588,14 @@ EfiHttpRequest (
if (!Configure && !ReConfigure && !TlsConfigure) {
//
- // For the new HTTP token, create TX TCP token events.
+ // For the new HTTP token, create TX TCP token events.
//
Status = HttpCreateTcpTxEvent (Wrap);
if (EFI_ERROR (Status)) {
goto Error1;
}
}
-
+
//
// Create request message.
//
@@ -625,8 +624,6 @@ EfiHttpRequest (
goto Error3;
}
- ASSERT (RequestMsg != NULL);
-
//
// Every request we insert a TxToken and a response call would remove the TxToken.
// In cases of PUT/POST/PATCH, after an initial request-response pair, we would do a
@@ -650,11 +647,11 @@ EfiHttpRequest (
RequestMsgSize
);
if (EFI_ERROR (Status)) {
- goto Error5;
+ goto Error5;
}
DispatchDpc ();
-
+
if (HostName != NULL) {
FreePool (HostName);
}
@@ -662,7 +659,7 @@ EfiHttpRequest (
if (UrlParser != NULL) {
HttpUrlFreeParser (UrlParser);
}
-
+
return EFI_SUCCESS;
Error5:
@@ -677,7 +674,7 @@ Error5:
Error4:
if (RequestMsg != NULL) {
FreePool (RequestMsg);
- }
+ }
Error3:
if (HttpInstance->UseHttps) {
@@ -687,7 +684,7 @@ Error3:
Error2:
HttpCloseConnection (HttpInstance);
-
+
HttpCloseTcpConnCloseEvent (HttpInstance);
if (NULL != Wrap->TcpWrap.Tx4Token.CompletionToken.Event) {
gBS->CloseEvent (Wrap->TcpWrap.Tx4Token.CompletionToken.Event);
@@ -710,12 +707,12 @@ Error1:
}
return Status;
-
+
}
/**
- Cancel a user's Token.
-
+ Cancel a user's Token.
+
@param[in] Map The HTTP instance's token queue.
@param[in] Item Object container for one HTTP token and token's wrap.
@param[in] Context The user's token to cancel.
@@ -749,7 +746,7 @@ HttpCancelTokens (
Wrap = (HTTP_TOKEN_WRAP *) Item->Value;
ASSERT (Wrap != NULL);
HttpInstance = Wrap->HttpInstance;
-
+
if (!HttpInstance->LocalAddressIsIPv6) {
if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {
//
@@ -784,7 +781,7 @@ HttpCancelTokens (
return EFI_ABORTED;
}
- return EFI_SUCCESS;
+ return EFI_SUCCESS;
}
/**
@@ -797,7 +794,7 @@ HttpCancelTokens (
cancelled.
@retval EFI_SUCCESS The token is cancelled.
- @retval EFI_NOT_FOUND The asynchronous request or response token is not found.
+ @retval EFI_NOT_FOUND The asynchronous request or response token is not found.
@retval Others Other error as indicated.
**/
@@ -817,7 +814,7 @@ HttpCancel (
if (Token != NULL) {
if (Status == EFI_ABORTED) {
return EFI_SUCCESS;
- }
+ }
} else {
return Status;
}
@@ -846,7 +843,7 @@ HttpCancel (
HttpInstance->Tcp6->Cancel (HttpInstance->Tcp6, &HttpInstance->Tcp6TlsRxToken.CompletionToken);
}
}
-
+
return EFI_SUCCESS;
}
@@ -887,7 +884,6 @@ EfiHttpCancel (
}
HttpInstance = HTTP_INSTANCE_FROM_PROTOCOL (This);
- ASSERT (HttpInstance != NULL);
if (HttpInstance->State != HTTP_STATE_TCP_CONNECTED) {
return EFI_NOT_STARTED;
@@ -920,6 +916,7 @@ HttpBodyParserCallback (
IN VOID *Context
)
{
+ HTTP_CALLBACK_DATA *CallbackData;
HTTP_TOKEN_WRAP *Wrap;
UINTN BodyLength;
CHAR8 *Body;
@@ -932,20 +929,17 @@ HttpBodyParserCallback (
return EFI_SUCCESS;
}
- Wrap = (HTTP_TOKEN_WRAP *) Context;
- Body = Wrap->HttpToken->Message->Body;
- BodyLength = Wrap->HttpToken->Message->BodyLength;
+ CallbackData = (HTTP_CALLBACK_DATA *) Context;
+
+ Wrap = (HTTP_TOKEN_WRAP *) (CallbackData->Wrap);
+ Body = CallbackData->ParseData;
+ BodyLength = CallbackData->ParseDataLength;
+
if (Data < Body + BodyLength) {
Wrap->HttpInstance->NextMsg = Data;
} else {
Wrap->HttpInstance->NextMsg = NULL;
}
-
-
- //
- // Free Tx4Token or Tx6Token since already received corrsponding HTTP response.
- //
- FreePool (Wrap);
return EFI_SUCCESS;
}
@@ -957,7 +951,7 @@ HttpBodyParserCallback (
@retval EFI_SUCCESS Allocation succeeded.
@retval EFI_OUT_OF_RESOURCES Failed to complete the opration due to lack of resources.
- @retval EFI_NOT_READY Can't find a corresponding Tx4Token/Tx6Token or
+ @retval EFI_NOT_READY Can't find a corresponding Tx4Token/Tx6Token or
the EFI_HTTP_UTILITIES_PROTOCOL is not available.
**/
@@ -987,7 +981,7 @@ HttpResponseWorker (
if (Wrap == NULL || Wrap->HttpInstance == NULL) {
return EFI_INVALID_PARAMETER;
}
-
+
HttpInstance = Wrap->HttpInstance;
Token = Wrap->HttpToken;
HttpMsg = Token->Message;
@@ -1002,7 +996,7 @@ HttpResponseWorker (
ValueInItem = NULL;
Fragment.Len = 0;
Fragment.Bulk = NULL;
-
+
if (HttpMsg->Data.Response != NULL) {
//
// Check whether we have cached header from previous call.
@@ -1029,8 +1023,8 @@ HttpResponseWorker (
//
// Check whether we cached the whole HTTP headers.
//
- EndofHeader = AsciiStrStr (HttpHeaders, HTTP_END_OF_HDR_STR);
- }
+ EndofHeader = AsciiStrStr (HttpHeaders, HTTP_END_OF_HDR_STR);
+ }
HttpInstance->EndofHeader = &EndofHeader;
HttpInstance->HttpHeaders = &HttpHeaders;
@@ -1195,7 +1189,7 @@ HttpResponseWorker (
HttpMsg->HeaderCount,
HttpMsg->Headers,
HttpBodyParserCallback,
- (VOID *) ValueInItem,
+ (VOID *) (&HttpInstance->CallbackData),
&HttpInstance->MsgParser
);
if (EFI_ERROR (Status)) {
@@ -1206,18 +1200,28 @@ HttpResponseWorker (
// Check whether we received a complete HTTP message.
//
if (HttpInstance->CacheBody != NULL) {
+ //
+ // Record the CallbackData data.
+ //
+ HttpInstance->CallbackData.Wrap = (VOID *) Wrap;
+ HttpInstance->CallbackData.ParseData = (VOID *) HttpInstance->CacheBody;
+ HttpInstance->CallbackData.ParseDataLength = HttpInstance->CacheLen;
+
+ //
+ // Parse message with CallbackData data.
+ //
Status = HttpParseMessageBody (HttpInstance->MsgParser, HttpInstance->CacheLen, HttpInstance->CacheBody);
if (EFI_ERROR (Status)) {
goto Error2;
}
+ }
- if (HttpIsMessageComplete (HttpInstance->MsgParser)) {
- //
- // Free the MsgParse since we already have a full HTTP message.
- //
- HttpFreeMsgParser (HttpInstance->MsgParser);
- HttpInstance->MsgParser = NULL;
- }
+ if (HttpIsMessageComplete (HttpInstance->MsgParser)) {
+ //
+ // Free the MsgParse since we already have a full HTTP message.
+ //
+ HttpFreeMsgParser (HttpInstance->MsgParser);
+ HttpInstance->MsgParser = NULL;
}
}
@@ -1243,7 +1247,7 @@ HttpResponseWorker (
//
// We have a cached HTTP message which includes a part of HTTP header of next message.
//
- BodyLen = HttpInstance->NextMsg - (HttpInstance->CacheBody + HttpInstance->CacheOffset);
+ BodyLen = HttpInstance->NextMsg - (HttpInstance->CacheBody + HttpInstance->CacheOffset);
} else {
BodyLen = HttpInstance->CacheLen - HttpInstance->CacheOffset;
}
@@ -1278,7 +1282,7 @@ HttpResponseWorker (
//
Status = EFI_SUCCESS;
goto Exit;
- }
+ }
if (BodyLen == 0 && HttpInstance->MsgParser == NULL) {
//
@@ -1286,8 +1290,8 @@ HttpResponseWorker (
//
HttpMsg->BodyLength = 0;
Status = EFI_SUCCESS;
- goto Exit;
- }
+ goto Exit;
+ }
}
ASSERT (HttpInstance->MsgParser != NULL);
@@ -1301,7 +1305,7 @@ HttpResponseWorker (
if (EFI_ERROR (Status)) {
goto Error2;
}
-
+
} else {
if (HttpInstance->TimeoutEvent == NULL) {
//
@@ -1326,22 +1330,36 @@ HttpResponseWorker (
if (EFI_ERROR (Status)) {
goto Error2;
}
-
+
Status = HttpsReceive (HttpInstance, &Fragment, HttpInstance->TimeoutEvent);
gBS->SetTimer (HttpInstance->TimeoutEvent, TimerCancel, 0);
-
+
if (EFI_ERROR (Status)) {
goto Error2;
}
//
- // Check whether we receive a complete HTTP message.
+ // Process the received the body packet.
+ //
+ HttpMsg->BodyLength = MIN (Fragment.Len, (UINT32) HttpMsg->BodyLength);
+
+ CopyMem (HttpMsg->Body, Fragment.Bulk, HttpMsg->BodyLength);
+
+ //
+ // Record the CallbackData data.
+ //
+ HttpInstance->CallbackData.Wrap = (VOID *) Wrap;
+ HttpInstance->CallbackData.ParseData = HttpMsg->Body;
+ HttpInstance->CallbackData.ParseDataLength = HttpMsg->BodyLength;
+
+ //
+ // Parse Body with CallbackData data.
//
Status = HttpParseMessageBody (
HttpInstance->MsgParser,
- (UINTN) Fragment.Len,
- (CHAR8 *) Fragment.Bulk
+ HttpMsg->BodyLength,
+ HttpMsg->Body
);
if (EFI_ERROR (Status)) {
goto Error2;
@@ -1356,46 +1374,28 @@ HttpResponseWorker (
}
//
- // We receive part of header of next HTTP msg.
+ // Check whether there is the next message header in the HttpMsg->Body.
//
if (HttpInstance->NextMsg != NULL) {
- HttpMsg->BodyLength = MIN ((UINTN) HttpInstance->NextMsg - (UINTN) Fragment.Bulk, HttpMsg->BodyLength);
- CopyMem (HttpMsg->Body, Fragment.Bulk, HttpMsg->BodyLength);
-
- HttpInstance->CacheLen = Fragment.Len - HttpMsg->BodyLength;
- if (HttpInstance->CacheLen != 0) {
- if (HttpInstance->CacheBody != NULL) {
- FreePool (HttpInstance->CacheBody);
- }
-
- HttpInstance->CacheBody = AllocateZeroPool (HttpInstance->CacheLen);
- if (HttpInstance->CacheBody == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto Error2;
- }
-
- CopyMem (HttpInstance->CacheBody, Fragment.Bulk + HttpMsg->BodyLength, HttpInstance->CacheLen);
- HttpInstance->CacheOffset = 0;
+ HttpMsg->BodyLength = HttpInstance->NextMsg - (CHAR8 *) HttpMsg->Body;
+ }
- HttpInstance->NextMsg = HttpInstance->CacheBody + ((UINTN) HttpInstance->NextMsg - (UINTN) (Fragment.Bulk + HttpMsg->BodyLength));
+ HttpInstance->CacheLen = Fragment.Len - HttpMsg->BodyLength;
+ if (HttpInstance->CacheLen != 0) {
+ if (HttpInstance->CacheBody != NULL) {
+ FreePool (HttpInstance->CacheBody);
}
- } else {
- HttpMsg->BodyLength = MIN (Fragment.Len, (UINT32) HttpMsg->BodyLength);
- CopyMem (HttpMsg->Body, Fragment.Bulk, HttpMsg->BodyLength);
- HttpInstance->CacheLen = Fragment.Len - HttpMsg->BodyLength;
- if (HttpInstance->CacheLen != 0) {
- if (HttpInstance->CacheBody != NULL) {
- FreePool (HttpInstance->CacheBody);
- }
-
- HttpInstance->CacheBody = AllocateZeroPool (HttpInstance->CacheLen);
- if (HttpInstance->CacheBody == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto Error2;
- }
- CopyMem (HttpInstance->CacheBody, Fragment.Bulk + HttpMsg->BodyLength, HttpInstance->CacheLen);
- HttpInstance->CacheOffset = 0;
+ HttpInstance->CacheBody = AllocateZeroPool (HttpInstance->CacheLen);
+ if (HttpInstance->CacheBody == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ goto Error2;
+ }
+
+ CopyMem (HttpInstance->CacheBody, Fragment.Bulk + HttpMsg->BodyLength, HttpInstance->CacheLen);
+ HttpInstance->CacheOffset = 0;
+ if (HttpInstance->NextMsg != NULL) {
+ HttpInstance->NextMsg = HttpInstance->CacheBody;
}
}
@@ -1442,7 +1442,7 @@ Error:
} else {
FreePool (Wrap);
}
-
+
if (HttpHeaders != NULL) {
FreePool (HttpHeaders);
HttpHeaders = NULL;
@@ -1471,7 +1471,7 @@ Error:
gBS->SignalEvent (Token->Event);
- return Status;
+ return Status;
}
@@ -1543,9 +1543,8 @@ EfiHttpResponse (
if (HttpMsg == NULL) {
return EFI_INVALID_PARAMETER;
}
-
+
HttpInstance = HTTP_INSTANCE_FROM_PROTOCOL (This);
- ASSERT (HttpInstance != NULL);
if (HttpInstance->State != HTTP_STATE_TCP_CONNECTED) {
return EFI_NOT_STARTED;
@@ -1555,7 +1554,7 @@ EfiHttpResponse (
// Check whether the token already existed.
//
if (EFI_ERROR (NetMapIterate (&HttpInstance->RxTokens, HttpTokenExist, Token))) {
- return EFI_ACCESS_DENIED;
+ return EFI_ACCESS_DENIED;
}
Wrap = AllocateZeroPool (sizeof (HTTP_TOKEN_WRAP));
@@ -1567,8 +1566,8 @@ EfiHttpResponse (
Wrap->HttpToken = Token;
//
- // Notes: For Https, receive token wrapped in HTTP_TOKEN_WRAP is not used to
- // receive the https response. A special TlsRxToken is used for receiving TLS
+ // Notes: For Https, receive token wrapped in HTTP_TOKEN_WRAP is not used to
+ // receive the https response. A special TlsRxToken is used for receiving TLS
// related messages. It should be a blocking response.
//
if (!HttpInstance->UseHttps) {
@@ -1602,9 +1601,9 @@ Error:
gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);
}
FreePool (Wrap);
- }
+ }
- return Status;
+ return Status;
}
/**
@@ -1641,12 +1640,11 @@ EfiHttpPoll (
}
HttpInstance = HTTP_INSTANCE_FROM_PROTOCOL (This);
- ASSERT (HttpInstance != NULL);
if (HttpInstance->State != HTTP_STATE_TCP_CONNECTED) {
return EFI_NOT_STARTED;
}
-
+
if (HttpInstance->LocalAddressIsIPv6) {
if (HttpInstance->Tcp6 == NULL) {
return EFI_NOT_STARTED;
@@ -1658,8 +1656,8 @@ EfiHttpPoll (
}
Status = HttpInstance->Tcp4->Poll (HttpInstance->Tcp4);
}
-
+
DispatchDpc ();
-
+
return Status;
}