<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:PMingLiU;
        panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@PMingLiU";
        panose-1:2 1 6 1 0 1 1 1 1 1;}
/* Style Definitions */
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-ligatures:standardcontextual;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 129.75pt 1.0in 129.7pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoPlainText">Hi <a id="OWAAM5F137A7B5442465F97AAAE1284A6195D" href="mailto:abner.chang@amd.com">
<span style="font-family:"Calibri",sans-serif;text-decoration:none">@Abner Chang</span></a><o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">I update the function header of RedfishRestExSendReceive() in 2nd version and I assume there is no need to update UEFI specification for this. Please feel free to correct me if I am wrong.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thanks,<o:p></o:p></p>
<p class="MsoPlainText">Nickle<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> -----Original Message-----</p>
<p class="MsoPlainText">> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Nickle Wang</p>
<p class="MsoPlainText">> via groups.io</p>
<p class="MsoPlainText">> Sent: Monday, September 18, 2023 9:13 PM</p>
<p class="MsoPlainText">> To: devel@edk2.groups.io</p>
<p class="MsoPlainText">> Cc: Abner Chang <abner.chang@amd.com>; Igor Kulchytskyy <igork@ami.com>;</p>
<p class="MsoPlainText">> Nick Ramirez <nramirez@nvidia.com>; Mike Maslenkin</p>
<p class="MsoPlainText">> <mike.maslenkin@gmail.com></p>
<p class="MsoPlainText">> Subject: [edk2-devel] [PATCH v2] RedfishPkg/RedfishRestExDxe: return HTTP</p>
<p class="MsoPlainText">> status code to caller.</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> External email: Use caution opening links or attachments</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> Return unsupported HTTP status code to caller so caller can handle HTTP error</p>
<p class="MsoPlainText">> status code. Current implementation only return EFI error to caller. Without</p>
<p class="MsoPlainText">> knowing the HTTP status code, caller has trouble to handle HTTP request failure.</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> Signed-off-by: Nickle Wang <<a href="mailto:nicklew@nvidia.com"><span style="color:windowtext;text-decoration:none">nicklew@nvidia.com</span></a>></p>
<p class="MsoPlainText">> Cc: Abner Chang <<a href="mailto:abner.chang@amd.com"><span style="color:windowtext;text-decoration:none">abner.chang@amd.com</span></a>></p>
<p class="MsoPlainText">> Cc: Igor Kulchytskyy <<a href="mailto:igork@ami.com"><span style="color:windowtext;text-decoration:none">igork@ami.com</span></a>></p>
<p class="MsoPlainText">> Cc: Nick Ramirez <<a href="mailto:nramirez@nvidia.com"><span style="color:windowtext;text-decoration:none">nramirez@nvidia.com</span></a>></p>
<p class="MsoPlainText">> Cc: Mike Maslenkin <<a href="mailto:mike.maslenkin@gmail.com"><span style="color:windowtext;text-decoration:none">mike.maslenkin@gmail.com</span></a>></p>
<p class="MsoPlainText">> ---</p>
<p class="MsoPlainText">>  MdePkg/Include/Protocol/RestEx.h              |  3 ++-</p>
<p class="MsoPlainText">>  .../RedfishRestExDxe/RedfishRestExProtocol.c  | 27 ++++++++++---------</p>
<p class="MsoPlainText">>  2 files changed, 16 insertions(+), 14 deletions(-)</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> diff --git a/MdePkg/Include/Protocol/RestEx.h</p>
<p class="MsoPlainText">> b/MdePkg/Include/Protocol/RestEx.h</p>
<p class="MsoPlainText">> index e9bc7be94f2c..da9f1c3f87ef 100644</p>
<p class="MsoPlainText">> --- a/MdePkg/Include/Protocol/RestEx.h</p>
<p class="MsoPlainText">> +++ b/MdePkg/Include/Protocol/RestEx.h</p>
<p class="MsoPlainText">> @@ -131,7 +131,8 @@ typedef struct {</p>
<p class="MsoPlainText">>    response when the data is retrieved from the service. RequestMessage contains</p>
<p class="MsoPlainText">> the HTTP</p>
<p class="MsoPlainText">>    request to the REST resource identified by RequestMessage.Request.Url. The</p>
<p class="MsoPlainText">>    ResponseMessage is the returned HTTP response for that request, including any</p>
<p class="MsoPlainText">> HTTP</p>
<p class="MsoPlainText">> -  status.</p>
<p class="MsoPlainText">> +  status. It's caller's responsibility to free this ResponseMessage using FreePool().</p>
<p class="MsoPlainText">> +  RestConfigFreeHttpMessage() in RedfishLib is an example to release</p>
<p class="MsoPlainText">> ResponseMessage structure.</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">>    @param[in]  This                Pointer to EFI_REST_EX_PROTOCOL instance for a</p>
<p class="MsoPlainText">> particular</p>
<p class="MsoPlainText">>                                    REST service.</p>
<p class="MsoPlainText">> diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c</p>
<p class="MsoPlainText">> b/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c</p>
<p class="MsoPlainText">> index 90973619f2bc..5bcdade4b18c 100644</p>
<p class="MsoPlainText">> --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c</p>
<p class="MsoPlainText">> +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c</p>
<p class="MsoPlainText">> @@ -29,7 +29,8 @@ EFI_REST_EX_PROTOCOL  mRedfishRestExProtocol = {</p>
<p class="MsoPlainText">>    response when the data is retrieved from the service. RequestMessage contains</p>
<p class="MsoPlainText">> the HTTP</p>
<p class="MsoPlainText">>    request to the REST resource identified by RequestMessage.Request.Url. The</p>
<p class="MsoPlainText">>    ResponseMessage is the returned HTTP response for that request, including any</p>
<p class="MsoPlainText">> HTTP</p>
<p class="MsoPlainText">> -  status.</p>
<p class="MsoPlainText">> +  status. It's caller's responsibility to free this ResponseMessage using FreePool().</p>
<p class="MsoPlainText">> +  RestConfigFreeHttpMessage() in RedfishLib is an example to release</p>
<p class="MsoPlainText">> ResponseMessage structure.</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">>    @param[in]  This                Pointer to EFI_REST_EX_PROTOCOL instance for a</p>
<p class="MsoPlainText">> particular</p>
<p class="MsoPlainText">>                                    REST service.</p>
<p class="MsoPlainText">> @@ -320,6 +321,18 @@ ReSendRequest:;</p>
<p class="MsoPlainText">>      DEBUG ((DEBUG_ERROR, "This HTTP Status is not handled!\n"));</p>
<p class="MsoPlainText">>      DumpHttpStatusCode (DEBUG_REDFISH_NETWORK, ResponseData-</p>
<p class="MsoPlainText">> >Response.StatusCode);</p>
<p class="MsoPlainText">>      Status = EFI_UNSUPPORTED;</p>
<p class="MsoPlainText">> +</p>
<p class="MsoPlainText">> +    //</p>
<p class="MsoPlainText">> +    // Deliver status code back to caller so caller can handle it.</p>
<p class="MsoPlainText">> +    //</p>
<p class="MsoPlainText">> +    ResponseMessage->Data.Response = AllocateZeroPool (sizeof</p>
<p class="MsoPlainText">> (EFI_HTTP_RESPONSE_DATA));</p>
<p class="MsoPlainText">> +    if (ResponseMessage->Data.Response == NULL) {</p>
<p class="MsoPlainText">> +      Status = EFI_OUT_OF_RESOURCES;</p>
<p class="MsoPlainText">> +      goto ON_EXIT;</p>
<p class="MsoPlainText">> +    }</p>
<p class="MsoPlainText">> +</p>
<p class="MsoPlainText">> +    ResponseMessage->Data.Response->StatusCode =</p>
<p class="MsoPlainText">> + ResponseData->Response.StatusCode;</p>
<p class="MsoPlainText">> +</p>
<p class="MsoPlainText">>      goto ON_EXIT;</p>
<p class="MsoPlainText">>    }</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> @@ -443,18 +456,6 @@ ON_EXIT:</p>
<p class="MsoPlainText">>      FreePool (ResponseData);</p>
<p class="MsoPlainText">>    }</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> -  if (EFI_ERROR (Status)) {</p>
<p class="MsoPlainText">> -    if (ResponseMessage->Data.Response != NULL) {</p>
<p class="MsoPlainText">> -      FreePool (ResponseMessage->Data.Response);</p>
<p class="MsoPlainText">> -      ResponseMessage->Data.Response = NULL;</p>
<p class="MsoPlainText">> -    }</p>
<p class="MsoPlainText">> -</p>
<p class="MsoPlainText">> -    if (ResponseMessage->Body != NULL) {</p>
<p class="MsoPlainText">> -      FreePool (ResponseMessage->Body);</p>
<p class="MsoPlainText">> -      ResponseMessage->Body = NULL;</p>
<p class="MsoPlainText">> -    }</p>
<p class="MsoPlainText">> -  }</p>
<p class="MsoPlainText">> -</p>
<p class="MsoPlainText">>    return Status;</p>
<p class="MsoPlainText">>  }</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> --</p>
<p class="MsoPlainText">> 2.17.1</p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText">> </p>
<p class="MsoPlainText"><o:p> </o:p></p>
</div>
</body>
</html>


<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>


Groups.io Links:<p>


  
    You receive all messages sent to this group.
  
  


<p>
<a target="_blank" href="https://edk2.groups.io/g/devel/message/108780">View/Reply Online (#108780)</a> |


  

|

  <a target="_blank" href="https://groups.io/mt/101432753/1813853">Mute This Topic</a>


| <a href="https://edk2.groups.io/g/devel/post">New Topic</a>

<br>




<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |

<a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>

 [edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>