blob: b821c005654166238935f7b3e8f058b49e23ce16 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 */