diff options
| author | Andre Heinecke <[email protected]> | 2016-02-22 17:28:08 +0000 | 
|---|---|---|
| committer | Andre Heinecke <[email protected]> | 2016-02-22 18:01:37 +0000 | 
| commit | 0855a1296a1908016f011eb5e6552854ac53e63a (patch) | |
| tree | ae662e7201a7d60d0e7733532ebded629cfacb94 /lang/cpp/src/configuration.h | |
| parent | Fix possible _SC_OPEN_MAX max problem on AIX. (diff) | |
| download | gpgme-0855a1296a1908016f011eb5e6552854ac53e63a.tar.gz gpgme-0855a1296a1908016f011eb5e6552854ac53e63a.zip | |
Initial checkin of gpgmepp sources
Based on git.kde.org/pim/gpgmepp rev. 0e3ebc02
* lang/cpp/src/assuanresult.cpp,
 lang/cpp/src/assuanresult.h,
 lang/cpp/src/callbacks.cpp,
 lang/cpp/src/callbacks.h,
 lang/cpp/src/configuration.cpp,
 lang/cpp/src/configuration.h,
 lang/cpp/src/context.cpp,
 lang/cpp/src/context.h,
 lang/cpp/src/context_glib.cpp,
 lang/cpp/src/context_p.h,
 lang/cpp/src/context_qt.cpp,
 lang/cpp/src/context_vanilla.cpp,
 lang/cpp/src/data.cpp,
 lang/cpp/src/data.h,
 lang/cpp/src/data_p.h,
 lang/cpp/src/decryptionresult.cpp,
 lang/cpp/src/decryptionresult.h,
 lang/cpp/src/defaultassuantransaction.cpp,
 lang/cpp/src/defaultassuantransaction.h,
 lang/cpp/src/editinteractor.cpp,
 lang/cpp/src/editinteractor.h,
 lang/cpp/src/encryptionresult.cpp,
 lang/cpp/src/encryptionresult.h,
 lang/cpp/src/engineinfo.cpp,
 lang/cpp/src/engineinfo.h,
 lang/cpp/src/error.h,
 lang/cpp/src/eventloopinteractor.cpp,
 lang/cpp/src/eventloopinteractor.h,
 lang/cpp/src/exception.cpp,
 lang/cpp/src/exception.h,
 lang/cpp/src/global.h,
 lang/cpp/src/gpgadduserideditinteractor.cpp,
 lang/cpp/src/gpgadduserideditinteractor.h,
 lang/cpp/src/gpgagentgetinfoassuantransaction.cpp,
 lang/cpp/src/gpgagentgetinfoassuantransaction.h,
 lang/cpp/src/gpgmefw.h,
 lang/cpp/src/gpgmepp_export.h,
 lang/cpp/src/gpgsetexpirytimeeditinteractor.cpp,
 lang/cpp/src/gpgsetexpirytimeeditinteractor.h,
 lang/cpp/src/gpgsetownertrusteditinteractor.cpp,
 lang/cpp/src/gpgsetownertrusteditinteractor.h,
 lang/cpp/src/gpgsignkeyeditinteractor.cpp,
 lang/cpp/src/gpgsignkeyeditinteractor.h,
 lang/cpp/src/importresult.cpp,
 lang/cpp/src/importresult.h,
 lang/cpp/src/key.cpp,
 lang/cpp/src/key.h,
 lang/cpp/src/keygenerationresult.cpp,
 lang/cpp/src/keygenerationresult.h,
 lang/cpp/src/keylistresult.cpp,
 lang/cpp/src/keylistresult.h,
 lang/cpp/src/notation.h,
 lang/cpp/src/result.h,
 lang/cpp/src/result_p.h,
 lang/cpp/src/scdgetinfoassuantransaction.cpp,
 lang/cpp/src/scdgetinfoassuantransaction.h,
 lang/cpp/src/signingresult.cpp,
 lang/cpp/src/signingresult.h,
 lang/cpp/src/trustitem.cpp,
 lang/cpp/src/trustitem.h,
 lang/cpp/src/util.h,
 lang/cpp/src/verificationresult.cpp,
 lang/cpp/src/verificationresult.h,
 lang/cpp/src/vfsmountresult.cpp,
 lang/cpp/src/vfsmountresult.h,
 lang/cpp/src/interfaces/assuantransaction.h,
 lang/cpp/src/interfaces/dataprovider.h,
 lang/cpp/src/interfaces/passphraseprovider.h,
 lang/cpp/src/interfaces/progressprovider.h: New.
Diffstat (limited to '')
| -rw-r--r-- | lang/cpp/src/configuration.h | 297 | 
1 files changed, 297 insertions, 0 deletions
| diff --git a/lang/cpp/src/configuration.h b/lang/cpp/src/configuration.h new file mode 100644 index 00000000..e6e13db4 --- /dev/null +++ b/lang/cpp/src/configuration.h @@ -0,0 +1,297 @@ +/* +  configuration.h - wraps gpgme configuration components +  Copyright (C) 2010 Klarälvdalens Datakonsult AB + +  This file is part of GPGME++. + +  GPGME++ is free software; you can redistribute it and/or +  modify it under the terms of the GNU Library General Public +  License as published by the Free Software Foundation; either +  version 2 of the License, or (at your option) any later version. + +  GPGME++ is distributed in the hope that it will be useful, +  but WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +  GNU Library General Public License for more details. + +  You should have received a copy of the GNU Library General Public License +  along with GPGME++; see the file COPYING.LIB.  If not, write to the +  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +  Boston, MA 02110-1301, USA. +*/ + +// -*- c++ -*- +#ifndef __GPGMEPP_CONFIGURATION_H__ +#define __GPGMEPP_CONFIGURATION_H__ + +#include "global.h" + +#include "gpgmefw.h" + +#include <boost/shared_ptr.hpp> +#include <boost/weak_ptr.hpp> +#include <boost/type_traits/remove_pointer.hpp> +#if 0 +#include <boost/variant.hpp> +#include <boost/optional.hpp> +#endif + +#include <iosfwd> +#include <vector> +#include <string> +#include <algorithm> + +namespace GpgME +{ +namespace Configuration +{ + +typedef boost::shared_ptr< boost::remove_pointer<gpgme_conf_comp_t>::type > shared_gpgme_conf_comp_t; +typedef boost::weak_ptr< boost::remove_pointer<gpgme_conf_comp_t>::type > weak_gpgme_conf_comp_t; + +class Argument; +class Option; +class Component; + +enum Level { +    Basic, +    Advanced, +    Expert, +    Invisible, +    Internal, + +    NumLevels +}; + +enum Type { +    NoType, +    StringType, +    IntegerType, +    UnsignedIntegerType, + +    FilenameType = 32, +    LdapServerType, +    KeyFingerprintType, +    PublicKeyType, +    SecretKeyType, +    AliasListType, + +    MaxType +}; + +enum Flag { +    Group    = (1 << 0), +    Optional = (1 << 1), +    List     = (1 << 2), +    Runtime  = (1 << 3), +    Default  = (1 << 4), +    DefaultDescription = (1 << 5), +    NoArgumentDescription = (1 << 6), +    NoChange = (1 << 7), + +    LastFlag = NoChange +}; + +// +// class Component +// + +class GPGMEPP_EXPORT Component +{ +public: +    Component() : comp() {} +    explicit Component(const shared_gpgme_conf_comp_t &comp) +        : comp(comp) {} + +    // copy ctor is ok + +    const Component &operator=(const Component &other) +    { +        if (this != &other) { +            Component(other).swap(*this); +        } +        return *this; +    } + +    void swap(Component &other) +    { +        using std::swap; +        swap(this->comp, other.comp); +    } + +    bool isNull() const +    { +        return !comp; +    } + +    static std::vector<Component> load(Error &err); +    Error save() const; + +    const char *name() const; +    const char *description() const; +    const char *programName() const; + +    Option option(unsigned int index) const; +    Option option(const char *name) const; + +    unsigned int numOptions() const; + +    std::vector<Option> options() const; + +    GPGMEPP_MAKE_SAFE_BOOL_OPERATOR(!isNull()) +private: +    shared_gpgme_conf_comp_t comp; +}; + +// +// class Option +// + +class GPGMEPP_EXPORT Option +{ +public: +    Option() : comp(), opt(0) {} +    Option(const shared_gpgme_conf_comp_t &comp, gpgme_conf_opt_t opt) +        : comp(comp), opt(opt) {} + +    const Option &operator=(const Option &other) +    { +        if (this != &other) { +            Option(other).swap(*this); +        } +        return *this; +    } + +    void swap(Option &other) +    { +        using std::swap; +        swap(this->comp, other.comp); +        swap(this->opt,  other.opt); +    } + +    bool isNull() const +    { +        return comp.expired() || !opt; +    } + +    Component parent() const; + +    unsigned int flags() const; + +    Level level() const; + +    const char *name() const; +    const char *description() const; +    const char *argumentName() const; + +    Type type() const; +    Type alternateType() const; + +    Argument defaultValue() const; +    const char *defaultDescription() const; + +    Argument noArgumentValue() const; +    const char *noArgumentDescription() const; + +    /*! The value that is in the config file (or null, if it's not set). */ +    Argument activeValue() const; +    /*! The value that is in this object, ie. either activeValue(), newValue(), or defaultValue() */ +    Argument currentValue() const; + +    Argument newValue() const; +    bool set() const; +    bool dirty() const; + +    Error setNewValue(const Argument &argument); +    Error resetToDefaultValue(); +    Error resetToActiveValue(); + +    Argument createNoneArgument(bool set) const; +    Argument createStringArgument(const char *value) const; +    Argument createStringArgument(const std::string &value) const; +    Argument createIntArgument(int value) const; +    Argument createUIntArgument(unsigned int value) const; + +    Argument createNoneListArgument(unsigned int count) const; +    Argument createStringListArgument(const std::vector<const char *> &value) const; +    Argument createStringListArgument(const std::vector<std::string> &value) const; +    Argument createIntListArgument(const std::vector<int> &values) const; +    Argument createUIntListArgument(const std::vector<unsigned int> &values) const; + +    GPGMEPP_MAKE_SAFE_BOOL_OPERATOR(!isNull()) +private: +    weak_gpgme_conf_comp_t  comp; +    gpgme_conf_opt_t opt; +}; + +// +// class Argument +// + +class GPGMEPP_EXPORT Argument +{ +    friend class ::GpgME::Configuration::Option; +    Argument(const shared_gpgme_conf_comp_t &comp, gpgme_conf_opt_t opt, gpgme_conf_arg_t arg, bool owns); +public: +    Argument() : comp(), opt(0), arg(0) {} +    //Argument( const shared_gpgme_conf_comp_t & comp, gpgme_conf_opt_t opt, gpgme_conf_arg_t arg ); +    Argument(const Argument &other); +    ~Argument(); + +    const Argument &operator=(const Argument &other) +    { +        if (this != &other) { +            Argument(other).swap(*this); +        } +        return *this; +    } + +    void swap(Argument &other) +    { +        using std::swap; +        swap(this->comp, other.comp); +        swap(this->opt,  other.opt); +        swap(this->arg,  other.arg); +    } + +    bool isNull() const +    { +        return comp.expired() || !opt || !arg; +    } + +    Option parent() const; + +    unsigned int numElements() const; + +    bool boolValue() const; +    const char *stringValue(unsigned int index = 0) const; +    int          intValue(unsigned int index = 0) const; +    unsigned int uintValue(unsigned int index = 0) const; + +    unsigned int numberOfTimesSet() const; +    std::vector<const char *> stringValues() const; +    std::vector<int>          intValues() const; +    std::vector<unsigned int> uintValues() const; + +    GPGMEPP_MAKE_SAFE_BOOL_OPERATOR(!isNull()) +private: +    weak_gpgme_conf_comp_t comp; +    gpgme_conf_opt_t opt; +    gpgme_conf_arg_t arg; +}; + +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Level level); +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Type type); +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Flag flag); +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Component &component); +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Option &option); +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Argument &argument); + +} // namespace Configuration +} // namespace GpgME + +GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(Configuration::Component) +GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(Configuration::Option) +GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(Configuration::Argument) + +#endif // __GPGMEPP_CONFIGURATION_H__ | 
