blob: 009220602ea9b00f10b3041b3b408f3ea80ac155 [file] [log] [blame]
/*
* Copyright 2004-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* XSEC
*
* XKMSStatus := Interface for Status elements (in KeyBinding)
*
* $Id$
*
*/
#ifndef XKMSSTATUS_INCLUDE
#define XKMSSTATUS_INCLUDE
// XSEC Includes
#include <xsec/framework/XSECDefs.hpp>
/**
* @ingroup xkms
*/
/**
* @brief Interface definition for the Status elements
*
* The \<Status\> Element is used in a KeyBinding message to a client
* to provide status information for keys that are returned in a
* ValidateResult message
*
* The schema definition for KeyBinding is as follows :
*
* \verbatim
<!-- Status -->
<element name="Status" type="xkms:StatusType"/>
<complexType name="StatusType">
<sequence>
<element ref="xkms:ValidReason" minOccurs="0"
maxOccurs="unbounded"/>
<element ref="xkms:IndeterminateReason" minOccurs="0"
maxOccurs="unbounded"/>
<element ref="xkms:InvalidReason" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
<attribute name="StatusValue" type="xkms:KeyBindingStatus"
use="required"/>
</complexType>
<simpleType name="KeyBindingStatus">
<restriction base="QName">
<enumeration value="xkms:Valid"/>
<enumeration value="xkms:Invalid"/>
<enumeration value="xkms:Indeterminate"/>
</restriction>
</simpleType>
<!-- /Status -->
\endverbatim
*/
class XKMSStatus {
/** @name Constructors and Destructors */
//@{
protected:
XKMSStatus() {};
public:
virtual ~XKMSStatus() {};
//@}
enum StatusValue {
StatusUndefined = 0, /** Error - the status value is undefined */
Valid = 1, /** Good key! */
Invalid = 2, /** Bad key! */
Indeterminate = 3 /** Smarmy key! */
};
enum StatusReason {
ReasonUndefined = 0, /** The reason is undefined or unknown */
IssuerTrust = 1, /** The issuer of the info is considered good */
RevocationStatus = 2, /** Key is/is not revoked */
ValidityInterval = 3, /** Key not expired */
Signature = 4 /** Signature on the provided data is good */
};
/** @name Getter methods */
//@{
/**
* \brief Get the KeyBinding status assertion
*
* The Status element has a StatusValue attribute that defines
* the validity of the key in question
*
* @return the status assertion
*/
virtual StatusValue getStatusValue(void) const = 0;
/**
* \brief Find the Reason for a particular facet of status codes
*
* For each status reason, a Status can define a number of reasons
* to return to a client. There are some controls on this (e.g. you cannot
* have an InvalidReason if the actual KeyBindingStatus is Valid), but
* you can have things in ValidReason and IndeterminateReason for an Invalid
* result. This call allows you to find out about any facet of a reason
*
* @param status The particular status value you want to find a reason for
* @param reason The particular reason that you want to determine is or is not
* set
* @return true if the particular reason is set for the given status, false
* otherwise
*/
virtual bool getStatusReason(StatusValue status, StatusReason reason) const = 0;
//@}
/** @name Setter Methods */
//@{
/**
* \brief Activate or de-activate a particular reason in the status result
*
* For each status reason, a Status can define a number of reasons
* to return to a client. There are some controls on this (e.g. you cannot
* have an InvalidReason if the actual KeyBindingStatus is Valid), but
* you can have things in ValidReason and IndeterminateReason for an Invalid
* result. This call allows you to set any facet of a reason
*
* @param status The particular status value you want to set a reason for
* @param reason The particular reason that you want to set
* @param value true to turn on the reason, false to turn it off
*/
virtual void setStatusReason(StatusValue status, StatusReason reason, bool value) = 0;
//@}
private:
// Unimplemented
XKMSStatus(const XKMSStatus &);
XKMSStatus & operator = (const XKMSStatus &);
};
#endif /* XKMSSTATUS_INCLUDE */