/** @file
  Definitions of RedfishHttpOperation

  Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#pragma once

#include "RedfishHttpDxe.h"

#define REDFISH_CONTENT_LENGTH_SIZE              80
#define REDFISH_COMMON_HEADER_SIZE               5
#define REDFISH_HTTP_HEADER_ODATA_VERSION_STR    "OData-Version"
#define REDFISH_HTTP_HEADER_ODATA_VERSION_VALUE  "4.0"
#define REDFISH_HTTP_HEADER_USER_AGENT_VALUE     "edk2redfish"
#define REDFISH_HTTP_HEADER_CONNECTION_STR       "Connection"
#define REDFISH_HTTP_HEADER_CONNECTION_VALUE     "Keep-Alive"
#define REDFISH_HTTP_CONTENT_ENCODING_NONE       "None"
#define ASCII_STR_DUPLICATE(a)  (AllocateCopyPool (AsciiStrSize ((a)), (a)))

/**
  This function free resources in Request. Request is no longer available
  after this function returns successfully.

  @param[in]  Request      HTTP request to be released.

  @retval     EFI_SUCCESS     Resource is released successfully.
  @retval     Others          Errors occur.

**/
EFI_STATUS
ReleaseRedfishRequest (
  IN  REDFISH_REQUEST  *Request
  );

/**
  This function free resources in given Response.

  @param[in]  Response     HTTP response to be released.

  @retval     EFI_SUCCESS     Resource is released successfully.
  @retval     Others          Errors occur.

**/
EFI_STATUS
ReleaseRedfishResponse (
  IN  REDFISH_RESPONSE  *Response
  );

/**
  This function send Redfish request to Redfish service by calling
  Rest Ex protocol.

  @param[in]   Service       Pointer to Redfish service.
  @param[in]   Uri           Uri of Redfish service.
  @param[in]   Method        HTTP method.
  @param[in]   Request     Request data. This is optional.
  @param[out]  Response    Redfish response data.

  @retval     EFI_SUCCESS     Request is sent and received successfully.
  @retval     Others          Errors occur.

**/
EFI_STATUS
HttpSendReceive (
  IN  REDFISH_SERVICE   Service,
  IN  EFI_STRING        Uri,
  IN  EFI_HTTP_METHOD   Method,
  IN  REDFISH_REQUEST   *Request  OPTIONAL,
  OUT REDFISH_RESPONSE  *Response
  );
