/** @file | |
The implementation of delete policy entry function in IpSecConfig application. | |
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php. | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#include "IpSecConfig.h" | |
#include "Indexer.h" | |
#include "Delete.h" | |
#include "Match.h" | |
#include "ForEach.h" | |
/** | |
Private function to delete entry information in database. | |
@param[in] Selector The pointer to EFI_IPSEC_CONFIG_SELECTOR structure. | |
@param[in] Data The pointer to Data. | |
@param[in] Context The pointer to DELETE_POLICY_ENTRY_CONTEXT. | |
@retval EFI_ABORTED Abort the iteration. | |
@retval EFI_SUCCESS Continue the iteration. | |
**/ | |
EFI_STATUS | |
DeletePolicyEntry ( | |
IN EFI_IPSEC_CONFIG_SELECTOR *Selector, | |
IN VOID *Data, | |
IN DELETE_POLICY_ENTRY_CONTEXT *Context | |
) | |
{ | |
if (mMatchPolicyEntry[Context->DataType] (Selector, Data, &Context->Indexer)) { | |
Context->Status = mIpSecConfig->SetData ( | |
mIpSecConfig, | |
Context->DataType, | |
Selector, | |
NULL, | |
NULL | |
); | |
// | |
// Abort the iteration after the insertion. | |
// | |
return EFI_ABORTED; | |
} | |
return EFI_SUCCESS; | |
} | |
/** | |
Flush or delete entry information in the database according to datatype. | |
@param[in] DataType The value of EFI_IPSEC_CONFIG_DATA_TYPE. | |
@param[in] ParamPackage The pointer to the ParamPackage list. | |
@retval EFI_SUCCESS Delete entry information successfully. | |
@retval EFI_NOT_FOUND Can't find the specified entry. | |
@retval Others Some mistaken case. | |
**/ | |
EFI_STATUS | |
FlushOrDeletePolicyEntry ( | |
IN EFI_IPSEC_CONFIG_DATA_TYPE DataType, | |
IN LIST_ENTRY *ParamPackage | |
) | |
{ | |
EFI_STATUS Status; | |
DELETE_POLICY_ENTRY_CONTEXT Context; | |
CONST CHAR16 *ValueStr; | |
// | |
// If user wants to remove all. | |
// | |
if (ShellCommandLineGetFlag (ParamPackage, L"-f")) { | |
Status = mIpSecConfig->SetData ( | |
mIpSecConfig, | |
DataType, | |
NULL, | |
NULL, | |
NULL | |
); | |
} else { | |
ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d"); | |
if (ValueStr == NULL) { | |
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IPSEC_CONFIG_INDEX_NOT_SPECIFIED), mHiiHandle, mAppName, ValueStr); | |
return EFI_NOT_FOUND; | |
} | |
Status = mConstructPolicyEntryIndexer[DataType] (&Context.Indexer, ParamPackage); | |
if (!EFI_ERROR (Status)) { | |
Context.DataType = DataType; | |
Context.Status = EFI_NOT_FOUND; | |
ForeachPolicyEntry (DataType, (VISIT_POLICY_ENTRY) DeletePolicyEntry, &Context); | |
Status = Context.Status; | |
if (Status == EFI_NOT_FOUND) { | |
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IPSEC_CONFIG_INDEX_NOT_FOUND), mHiiHandle, mAppName, ValueStr); | |
} else if (EFI_ERROR (Status)) { | |
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IPSEC_CONFIG_DELETE_FAILED), mHiiHandle, mAppName); | |
} | |
} | |
} | |
return Status; | |
} |