MdeModulePkg:DxeHttpLib: Update to DxeHttpLib API

Rename and update the logic of HttpGenRequestString API provided
by DxeHttpLib. The RequestString size is returned as an argument.
The user is not expected to do a AsciiStrLen anymore, and is not
logical too, since request string can contain message body and
using AsciiStrLen on such a string can provide truncated lengths.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Nagaraj Hegde <nagaraj-p.hegde@hpe.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Samer El-Haj-Mahmoud <elhaj@hpe.com>
This commit is contained in:
Nagaraj Hegde 2016-04-04 18:09:27 +08:00 committed by Fu Siyuan
parent 0aa0beca37
commit e297a0a498
2 changed files with 44 additions and 18 deletions

View File

@ -417,12 +417,20 @@ HttpFreeHeaderFields (
); );
/** /**
Generate HTTP request string. Generate HTTP request message.
@param[in] Message Pointer to storage containing HTTP message data. This function will allocate memory for the whole HTTP message and generate a
well formatted HTTP Request message in it, include the Request-Line, header
fields and also the message body. It is the caller's responsibility to free
the buffer returned in *RequestMsg.
@param[in] Message Pointer to the EFI_HTTP_MESSAGE structure which
contains the required information to generate
the HTTP request message.
@param[in] Url The URL of a remote host. @param[in] Url The URL of a remote host.
@param[out] RequestString Pointer to the created HTTP request string. @param[out] RequestMsg Pointer to the created HTTP request message.
NULL if any error occured. NULL if any error occured.
@param[out] RequestMsgSize Size of the RequestMsg (in bytes).
@return EFI_SUCCESS If HTTP request string was created successfully @return EFI_SUCCESS If HTTP request string was created successfully
@retval EFI_OUT_OF_RESOURCES Failed to allocate resources. @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.
@ -431,10 +439,11 @@ HttpFreeHeaderFields (
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
HttpGenRequestString ( HttpGenRequestMessage (
IN CONST EFI_HTTP_MESSAGE *Message, IN CONST EFI_HTTP_MESSAGE *Message,
IN CONST CHAR8 *Url, IN CONST CHAR8 *Url,
OUT CHAR8 **RequestString OUT CHAR8 **RequestMsg,
OUT UINTN *RequestMsgSize
); );
/** /**

View File

@ -1630,12 +1630,20 @@ HttpFreeHeaderFields (
} }
/** /**
Generate HTTP request string. Generate HTTP request message.
@param[in] Message Pointer to storage containing HTTP message data. This function will allocate memory for the whole HTTP message and generate a
well formatted HTTP Request message in it, include the Request-Line, header
fields and also the message body. It is the caller's responsibility to free
the buffer returned in *RequestMsg.
@param[in] Message Pointer to the EFI_HTTP_MESSAGE structure which
contains the required information to generate
the HTTP request message.
@param[in] Url The URL of a remote host. @param[in] Url The URL of a remote host.
@param[out] RequestString Pointer to the created HTTP request string. @param[out] RequestMsg Pointer to the created HTTP request message.
NULL if any error occured. NULL if any error occured.
@param[out] RequestMsgSize Size of the RequestMsg (in bytes).
@return EFI_SUCCESS If HTTP request string was created successfully @return EFI_SUCCESS If HTTP request string was created successfully
@retval EFI_OUT_OF_RESOURCES Failed to allocate resources. @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.
@ -1644,10 +1652,11 @@ HttpFreeHeaderFields (
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
HttpGenRequestString ( HttpGenRequestMessage (
IN CONST EFI_HTTP_MESSAGE *Message, IN CONST EFI_HTTP_MESSAGE *Message,
IN CONST CHAR8 *Url, IN CONST CHAR8 *Url,
OUT CHAR8 **Request OUT CHAR8 **RequestMsg,
OUT UINTN *RequestMsgSize
) )
{ {
EFI_STATUS Status; EFI_STATUS Status;
@ -1664,7 +1673,7 @@ HttpGenRequestString (
ASSERT (Message != NULL); ASSERT (Message != NULL);
*Request = NULL; *RequestMsg = NULL;
MsgSize = 0; MsgSize = 0;
Success = FALSE; Success = FALSE;
HttpHdr = NULL; HttpHdr = NULL;
@ -1727,13 +1736,13 @@ HttpGenRequestString (
AsciiStrLen (HTTP_VERSION_CRLF_STR) + HttpHdrSize; AsciiStrLen (HTTP_VERSION_CRLF_STR) + HttpHdrSize;
*Request = AllocateZeroPool (MsgSize); *RequestMsg = AllocateZeroPool (MsgSize);
if (*Request == NULL) { if (*RequestMsg == NULL) {
Status = EFI_OUT_OF_RESOURCES; Status = EFI_OUT_OF_RESOURCES;
goto Exit; goto Exit;
} }
RequestPtr = *Request; RequestPtr = *RequestMsg;
// //
// Construct header request // Construct header request
// //
@ -1792,19 +1801,27 @@ HttpGenRequestString (
CopyMem (RequestPtr, HttpHdr, HttpHdrSize); CopyMem (RequestPtr, HttpHdr, HttpHdrSize);
RequestPtr += HttpHdrSize; RequestPtr += HttpHdrSize;
//
// Construct body
//
if (Message->Body != NULL) {
CopyMem (RequestPtr, Message->Body, Message->BodyLength);
RequestPtr += Message->BodyLength;
}
// //
// Done // Done
// //
*RequestPtr = 0; (*RequestMsgSize) = (UINTN)(RequestPtr) - (UINTN)(*RequestMsg);
Success = TRUE; Success = TRUE;
Exit: Exit:
if (!Success) { if (!Success) {
if (*Request != NULL) { if (*RequestMsg != NULL) {
FreePool (*Request); FreePool (*RequestMsg);
} }
*Request = NULL; *RequestMsg = NULL;
return Status; return Status;
} }