Blame lang/cpp/src/global.h

Packit d7e8d0
/*
Packit d7e8d0
  global.h - global gpgme functions and enums
Packit d7e8d0
  Copyright (C) 2003, 2007 Klarälvdalens Datakonsult AB
Packit d7e8d0
  2016 Bundesamt für Sicherheit in der Informationstechnik
Packit d7e8d0
  Software engineering by Intevation GmbH
Packit d7e8d0
Packit d7e8d0
  This file is part of GPGME++.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is free software; you can redistribute it and/or
Packit d7e8d0
  modify it under the terms of the GNU Library General Public
Packit d7e8d0
  License as published by the Free Software Foundation; either
Packit d7e8d0
  version 2 of the License, or (at your option) any later version.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is distributed in the hope that it will be useful,
Packit d7e8d0
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d7e8d0
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit d7e8d0
  GNU Library General Public License for more details.
Packit d7e8d0
Packit d7e8d0
  You should have received a copy of the GNU Library General Public License
Packit d7e8d0
  along with GPGME++; see the file COPYING.LIB.  If not, write to the
Packit d7e8d0
  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit d7e8d0
  Boston, MA 02110-1301, USA.
Packit d7e8d0
*/
Packit d7e8d0
Packit d7e8d0
// -*- c++ -*-
Packit d7e8d0
#ifndef __GPGMEPP_GLOBAL_H__
Packit d7e8d0
#define __GPGMEPP_GLOBAL_H__
Packit d7e8d0
Packit d7e8d0
#include "gpgmefw.h"
Packit d7e8d0
#include "gpgmepp_export.h"
Packit d7e8d0
Packit d7e8d0
#include <iosfwd>
Packit d7e8d0
#include <cstring>
Packit d7e8d0
Packit d7e8d0
namespace GpgME
Packit d7e8d0
{
Packit d7e8d0
class Error;
Packit d7e8d0
class EngineInfo;
Packit d7e8d0
class Context;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
struct _GIOChannel;
Packit d7e8d0
typedef struct _GIOChannel      GIOChannel;
Packit d7e8d0
class QIODevice;
Packit d7e8d0
Packit d7e8d0
namespace GpgME
Packit d7e8d0
{
Packit d7e8d0
Packit d7e8d0
GPGMEPP_EXPORT void initializeLibrary();
Packit d7e8d0
/*!
Packit d7e8d0
  Initializes the library, returns Error::code() ==
Packit d7e8d0
  GPG_ERR_USER_1 if underlying gpgme is too old.
Packit d7e8d0
*/
Packit d7e8d0
GPGMEPP_EXPORT Error initializeLibrary(int);
Packit d7e8d0
Packit d7e8d0
enum Protocol { OpenPGP, CMS, UnknownProtocol };
Packit d7e8d0
Packit d7e8d0
enum Engine { GpgEngine, GpgSMEngine, GpgConfEngine, UnknownEngine, AssuanEngine, G13Engine, SpawnEngine };
Packit d7e8d0
Packit d7e8d0
enum KeyListMode {
Packit d7e8d0
    Local = 0x1,
Packit d7e8d0
    Extern = 0x2,
Packit Service 30b792
    Locate = 0x3,
Packit d7e8d0
    Signatures = 0x4,
Packit d7e8d0
    SignatureNotations = 0x8,
Packit d7e8d0
    Validate = 0x10,
Packit d7e8d0
    Ephemeral = 0x20,
Packit d7e8d0
    WithTofu = 0x40
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
enum SignatureMode { NormalSignatureMode, Detached, Clearsigned };
Packit d7e8d0
Packit d7e8d0
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Protocol proto);
Packit d7e8d0
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Engine eng);
Packit d7e8d0
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, KeyListMode mode);
Packit d7e8d0
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, SignatureMode mode);
Packit d7e8d0
Packit d7e8d0
GPGMEPP_EXPORT Error setDefaultLocale(int category, const char *value);
Packit d7e8d0
Packit d7e8d0
GPGMEPP_EXPORT Context *wait(Error &e, bool hang = true);
Packit d7e8d0
typedef void (*IdleFunction)(void);
Packit d7e8d0
GPGMEPP_EXPORT IdleFunction registerIdleFunction(IdleFunction idleFunction);
Packit d7e8d0
Packit d7e8d0
typedef void (*IOCallback)(void *data, int fd);
Packit d7e8d0
Packit d7e8d0
GPGMEPP_EXPORT EngineInfo engineInfo(Protocol proto);
Packit d7e8d0
GPGMEPP_EXPORT EngineInfo engineInfo(Engine engine);
Packit d7e8d0
/** Wrapper around gpgme_get_dirinfo. What can be:
Packit d7e8d0
homedir, sysconfdir, bindir, libexecdir, libdir,
Packit d7e8d0
datadir, localedir, agent-socket, agent-ssh-socket,
Packit d7e8d0
dirmngr-socket, uiserver-socket, gpgconf-name, gpg-name,
Packit d7e8d0
gpgsm-name, g13-name
Packit d7e8d0
Packit d7e8d0
This may be extended in the future.
Packit d7e8d0
*/
Packit d7e8d0
GPGMEPP_EXPORT const char *dirInfo(const char *what);
Packit d7e8d0
Packit d7e8d0
GPGMEPP_EXPORT Error checkEngine(Protocol proto);
Packit d7e8d0
GPGMEPP_EXPORT Error checkEngine(Engine engine);
Packit d7e8d0
Packit Service 30b792
/* Wrapper for gpgme_set_global_flag */
Packit Service 30b792
GPGMEPP_EXPORT int setGlobalFlag(const char *name, const char *value);
Packit Service 30b792
Packit d7e8d0
GPGMEPP_EXPORT GIOChannel *getGIOChannel(int fd);
Packit d7e8d0
GPGMEPP_EXPORT QIODevice   *getQIODevice(int fd);
Packit d7e8d0
Packit d7e8d0
enum Feature {
Packit d7e8d0
    ValidatingKeylistModeFeature               = 0x00000001,
Packit d7e8d0
    CancelOperationFeature                     = 0x00000002,
Packit d7e8d0
    WrongKeyUsageFeature                       = 0x00000004,
Packit d7e8d0
    DefaultCertificateInclusionFeature         = 0x00000008,
Packit d7e8d0
Packit d7e8d0
    GetSetEngineInfoFeature                    = 0x00000010,
Packit d7e8d0
    EngineInfoHomeDirFeature                   = 0x00000020,
Packit d7e8d0
    NoEncryptToEncryptionFlagFeature           = 0x00000040,
Packit d7e8d0
    EphemeralKeylistModeFeature                = 0x00000080,
Packit d7e8d0
Packit d7e8d0
    SetDataFileNameFeeature                    = 0x00000100,
Packit d7e8d0
    VerificationResultFileNameFeature          = 0x00000200,
Packit d7e8d0
    DecryptionResultFileNameFeature            = 0x00000400,
Packit d7e8d0
    DecryptionResultRecipientsFeature          = 0x00000800,
Packit d7e8d0
Packit d7e8d0
    AuditLogFeature                            = 0x00001000,
Packit d7e8d0
    GpgConfEngineFeature                       = 0x00002000,
Packit d7e8d0
    CancelOperationAsyncFeature                = 0x00004000,
Packit d7e8d0
    AssuanEngineFeature                        = 0x00008000,
Packit d7e8d0
Packit d7e8d0
    ClearAddGetSignatureNotationsFeature       = 0x00010000,
Packit d7e8d0
    SignatureNotationsKeylistModeFeature       = 0x00020000,
Packit d7e8d0
    KeySignatureNotationsFeature               = 0x00040000,
Packit d7e8d0
    SignatureNotationsFlagsFeature             = 0x00080000,
Packit d7e8d0
    SignatureNotationsCriticalFlagFeature      = 0x00100000,
Packit d7e8d0
    SignatureNotationsHumanReadableFlagFeature = 0x00200000,
Packit d7e8d0
    CardKeyFeature                             = 0x00400000,
Packit d7e8d0
    ImportFromKeyserverFeature                 = 0x00800000,
Packit d7e8d0
Packit d7e8d0
    KeyIsQualifiedFeature                      = 0x01000200,
Packit d7e8d0
    SubkeyIsQualifiedFeature                   = 0x02000000,
Packit d7e8d0
    SignaturePkaFieldsFeature                  = 0x04000000,
Packit d7e8d0
    SignatureAlgorithmFieldsFeature            = 0x08000000,
Packit d7e8d0
Packit d7e8d0
    FdPointerFeature                           = 0x10000000,
Packit d7e8d0
    G13VFSFeature                              = 0x20000000,
Packit d7e8d0
    PasswdFeature                              = 0x40000000, // gpgme >= 1.3.0
Packit d7e8d0
    // unusable (max value)
Packit d7e8d0
Packit d7e8d0
    FeatureMaxValue                            = 0x80000000
Packit d7e8d0
};
Packit d7e8d0
enum Feature2 {
Packit d7e8d0
    BinaryAndFineGrainedIdentify               = 0x00000001, // gpgme >= 1.7.0
Packit d7e8d0
    Feature2MaxValue                           = 0x80000000
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
// use hasFeature( unsigned long, unsigned long ) instead
Packit d7e8d0
GPGMEPP_DEPRECATED_EXPORT bool hasFeature(unsigned long feature);
Packit d7e8d0
GPGMEPP_EXPORT bool hasFeature(unsigned long feature, unsigned long feature2);
Packit d7e8d0
Packit d7e8d0
} // namespace GpgME
Packit d7e8d0
Packit d7e8d0
# ifndef GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION
Packit d7e8d0
#  define GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION( Class ) \
Packit d7e8d0
    namespace std { template <> inline void swap< GpgME::Class >( GpgME::Class & lhs, GpgME::Class & rhs ) { lhs.swap( rhs ); } }
Packit d7e8d0
# endif
Packit d7e8d0
Packit d7e8d0
# ifndef GPGMEPP_MAKE_SAFE_BOOL_OPERATOR
Packit d7e8d0
#  define GPGMEPP_MAKE_SAFE_BOOL_OPERATOR( Cond ) \
Packit d7e8d0
    private: \
Packit d7e8d0
    struct __safe_bool_dummy__ { void nonnull() {} }; \
Packit d7e8d0
    typedef void ( __safe_bool_dummy__::*unspecified_bool_type )(); \
Packit d7e8d0
    public: \
Packit Service 30b792
    operator unspecified_bool_type() const { return ( Cond ) ? &__safe_bool_dummy__::nonnull : nullptr; }
Packit d7e8d0
# endif
Packit d7e8d0
Packit d7e8d0
inline int _gpgmepp_strcmp(const char *s1, const char *s2)
Packit d7e8d0
{
Packit d7e8d0
    return s1 ? s2 ? std::strcmp(s1, s2) : 1 : s2 ? -1 : 0;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
#define _GPGMEPP_MAKE_STRCMP( Name, expr, cmp )                     \
Packit d7e8d0
    template <template <typename U> class Op>                           \
Packit d7e8d0
    struct Name {                                                       \
Packit d7e8d0
        typedef bool result_type;                                       \
Packit d7e8d0
        \
Packit d7e8d0
        bool operator()( const char * lhs, const char * rhs ) const {   \
Packit d7e8d0
            return Op<int>()( cmp, 0 );                                 \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        \
Packit d7e8d0
        bool operator()( const std::string & lhs, const std::string & rhs ) const { \
Packit d7e8d0
            return operator()( lhs.c_str(), rhs.c_str() );              \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        bool operator()( const char * lhs, const std::string & rhs ) const { \
Packit d7e8d0
            return operator()( lhs, rhs.c_str() );                      \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        bool operator()( const std::string & lhs, const char * rhs ) const { \
Packit d7e8d0
            return operator()( lhs.c_str(), rhs );                      \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        \
Packit d7e8d0
        template <typename T>                                           \
Packit d7e8d0
        bool operator()( const T & lhs, const T & rhs ) const {         \
Packit d7e8d0
            return operator()( (lhs expr), (rhs expr) );                \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        template <typename T>                                           \
Packit d7e8d0
        bool operator()( const T & lhs, const char * rhs ) const {      \
Packit d7e8d0
            return operator()( (lhs expr), rhs );                       \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        template <typename T>                                           \
Packit d7e8d0
        bool operator()( const char * lhs, const T & rhs ) const {      \
Packit d7e8d0
            return operator()( lhs, (rhs expr) );                       \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        template <typename T>                                           \
Packit d7e8d0
        bool operator()( const T & lhs, const std::string & rhs ) const { \
Packit d7e8d0
            return operator()( (lhs expr), rhs );                       \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
        template <typename T>                                           \
Packit d7e8d0
        bool operator()( const std::string & lhs, const T & rhs ) const {    \
Packit d7e8d0
            return operator()( lhs, (rhs expr) );                       \
Packit d7e8d0
        }                                                               \
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
#define GPGMEPP_MAKE_STRCMP( Name, expr )                          \
Packit d7e8d0
    _GPGMEPP_MAKE_STRCMP( Name, expr, _gpgmepp_strcmp( lhs, rhs ) )
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
#endif // __GPGMEPP_GLOBAL_H__