|
@@ -583,6 +583,102 @@ RedfishPatchToPayload (
|
|
|
return EFI_SUCCESS;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ Use HTTP POST to create new Redfish resource in the Resource Collection.
|
|
|
+
|
|
|
+ The POST request should be submitted to the Resource Collection in which the new resource
|
|
|
+ is to belong. The Resource Collection is addressed by URI. The Redfish may
|
|
|
+ ignore any service controlled properties. The corresponding redfish response will returned,
|
|
|
+ including HTTP StatusCode, Headers and Payload which record any HTTP response messages.
|
|
|
+
|
|
|
+ Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
|
|
|
+ redfish response data.
|
|
|
+
|
|
|
+ @param[in] RedfishService The Service to access the Redfish resources.
|
|
|
+ @param[in] Uri Relative path to address the resource.
|
|
|
+ @param[in] Content JSON represented properties to be update.
|
|
|
+ @param[in] ContentSize Size of the Content to be send to Redfish service
|
|
|
+ @param[in] ContentType Type of the Content to be send to Redfish service
|
|
|
+ @param[out] RedResponse Pointer to the Redfish response data.
|
|
|
+
|
|
|
+ @retval EFI_SUCCESS The opeartion is successful, indicates the HTTP StatusCode is not
|
|
|
+ NULL and the value is 2XX. The Redfish resource will be returned
|
|
|
+ in Payload within RedResponse if server send it back in the HTTP
|
|
|
+ response message body.
|
|
|
+ @retval EFI_INVALID_PARAMETER RedfishService, Uri, Content, or RedResponse is NULL.
|
|
|
+ @retval EFI_DEVICE_ERROR An unexpected system or network error occurred. Callers can get
|
|
|
+ more error info from returned HTTP StatusCode, Headers and Payload
|
|
|
+ within RedResponse:
|
|
|
+ 1. If the returned StatusCode is NULL, indicates any error happen.
|
|
|
+ 2. If the returned StatusCode is not NULL and the value is not 2XX,
|
|
|
+ indicates any error happen.
|
|
|
+**/
|
|
|
+EFI_STATUS
|
|
|
+EFIAPI
|
|
|
+RedfishPostToUri (
|
|
|
+ IN REDFISH_SERVICE RedfishService,
|
|
|
+ IN CONST CHAR8 *Uri,
|
|
|
+ IN CONST CHAR8 *Content,
|
|
|
+ IN UINTN ContentSize,
|
|
|
+ IN CONST CHAR8 *ContentType,
|
|
|
+ OUT REDFISH_RESPONSE *RedResponse
|
|
|
+ )
|
|
|
+{
|
|
|
+ EFI_STATUS Status;
|
|
|
+ EDKII_JSON_VALUE JsonValue;
|
|
|
+
|
|
|
+ Status = EFI_SUCCESS;
|
|
|
+ JsonValue = NULL;
|
|
|
+
|
|
|
+ if ((RedfishService == NULL) || (Uri == NULL) || (Content == NULL) || (RedResponse == NULL)) {
|
|
|
+ return EFI_INVALID_PARAMETER;
|
|
|
+ }
|
|
|
+
|
|
|
+ ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
|
|
|
+
|
|
|
+ JsonValue = (EDKII_JSON_VALUE)postUriFromService (
|
|
|
+ RedfishService,
|
|
|
+ Uri,
|
|
|
+ Content,
|
|
|
+ ContentSize,
|
|
|
+ ContentType,
|
|
|
+ &(RedResponse->StatusCode)
|
|
|
+ );
|
|
|
+
|
|
|
+ //
|
|
|
+ // 1. If the returned StatusCode is NULL, indicates any error happen.
|
|
|
+ //
|
|
|
+ if (RedResponse->StatusCode == NULL) {
|
|
|
+ Status = EFI_DEVICE_ERROR;
|
|
|
+ goto ON_EXIT;
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+ // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
|
|
|
+ // NOTE: If there is any error message returned from server, it will be returned in
|
|
|
+ // Payload within RedResponse.
|
|
|
+ //
|
|
|
+ if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
|
|
|
+ (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
|
|
|
+ {
|
|
|
+ Status = EFI_DEVICE_ERROR;
|
|
|
+ }
|
|
|
+
|
|
|
+ON_EXIT:
|
|
|
+ if (JsonValue != NULL) {
|
|
|
+ RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
|
|
|
+ if (RedResponse->Payload == NULL) {
|
|
|
+ //
|
|
|
+ // Ignore the error when create RedfishPayload, just free the JsonValue since it's not what
|
|
|
+ // we care about if the returned StatusCode is 2XX.
|
|
|
+ //
|
|
|
+ JsonValueFree (JsonValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return Status;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
Use HTTP POST to create a new resource in target payload.
|
|
|
|
|
@@ -738,6 +834,96 @@ ON_EXIT:
|
|
|
return Status;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ Use HTTP DELETE to remove a resource.
|
|
|
+
|
|
|
+ This function uses the RedfishService to remove a Redfish resource which is addressed
|
|
|
+ by input Uri (only the relative path is required). The corresponding redfish response will
|
|
|
+ returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
|
|
|
+ messages.
|
|
|
+
|
|
|
+ Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
|
|
|
+ redfish response data.
|
|
|
+
|
|
|
+ @param[in] RedfishService The Service to access the Redfish resources.
|
|
|
+ @param[in] Uri Relative path to address the resource.
|
|
|
+ @param[in] Content JSON represented properties to be deleted.
|
|
|
+ @param[out] RedResponse Pointer to the Redfish response data.
|
|
|
+
|
|
|
+ @retval EFI_SUCCESS The opeartion is successful, indicates the HTTP StatusCode is not
|
|
|
+ NULL and the value is 2XX, the Redfish resource has been removed.
|
|
|
+ If there is any message returned from server, it will be returned
|
|
|
+ in Payload within RedResponse.
|
|
|
+ @retval EFI_INVALID_PARAMETER RedfishService, Uri, or RedResponse is NULL.
|
|
|
+ @retval EFI_DEVICE_ERROR An unexpected system or network error occurred. Callers can get
|
|
|
+ more error info from returned HTTP StatusCode, Headers and Payload
|
|
|
+ within RedResponse:
|
|
|
+ 1. If the returned StatusCode is NULL, indicates any error happen.
|
|
|
+ 2. If the returned StatusCode is not NULL and the value is not 2XX,
|
|
|
+ indicates any error happen.
|
|
|
+**/
|
|
|
+EFI_STATUS
|
|
|
+EFIAPI
|
|
|
+RedfishDeleteByUriEx (
|
|
|
+ IN REDFISH_SERVICE RedfishService,
|
|
|
+ IN CONST CHAR8 *Uri,
|
|
|
+ IN CONST CHAR8 *Content,
|
|
|
+ OUT REDFISH_RESPONSE *RedResponse
|
|
|
+ )
|
|
|
+{
|
|
|
+ EFI_STATUS Status;
|
|
|
+ EDKII_JSON_VALUE JsonValue;
|
|
|
+
|
|
|
+ Status = EFI_SUCCESS;
|
|
|
+ JsonValue = NULL;
|
|
|
+
|
|
|
+ if ((RedfishService == NULL) || (Content == NULL) || (Uri == NULL) || (RedResponse == NULL)) {
|
|
|
+ return EFI_INVALID_PARAMETER;
|
|
|
+ }
|
|
|
+
|
|
|
+ ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
|
|
|
+
|
|
|
+ JsonValue = (EDKII_JSON_VALUE)deleteUriFromServiceEx (
|
|
|
+ RedfishService,
|
|
|
+ Uri,
|
|
|
+ Content,
|
|
|
+ &(RedResponse->StatusCode)
|
|
|
+ );
|
|
|
+
|
|
|
+ //
|
|
|
+ // 1. If the returned StatusCode is NULL, indicates any error happen.
|
|
|
+ //
|
|
|
+ if (RedResponse->StatusCode == NULL) {
|
|
|
+ Status = EFI_DEVICE_ERROR;
|
|
|
+ goto ON_EXIT;
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+ // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
|
|
|
+ // NOTE: If there is any error message returned from server, it will be returned in
|
|
|
+ // Payload within RedResponse.
|
|
|
+ //
|
|
|
+ if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
|
|
|
+ (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
|
|
|
+ {
|
|
|
+ Status = EFI_DEVICE_ERROR;
|
|
|
+ }
|
|
|
+
|
|
|
+ON_EXIT:
|
|
|
+ if (JsonValue != NULL) {
|
|
|
+ RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
|
|
|
+ if (RedResponse->Payload == NULL) {
|
|
|
+ //
|
|
|
+ // Ignore the error when create RedfishPayload, just free the JsonValue since it's not what
|
|
|
+ // we care about if the returned StatusCode is 2XX.
|
|
|
+ //
|
|
|
+ JsonValueFree (JsonValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return Status;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
Dump text in fractions.
|
|
|
|