Blame lang/cpp/src/data.h

Packit d7e8d0
/*
Packit d7e8d0
  data.h - wraps a gpgme data object
Packit d7e8d0
  Copyright (C) 2003,2004 Klarälvdalens Datakonsult AB
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
#ifndef __GPGMEPP_DATA_H__
Packit d7e8d0
#define __GPGMEPP_DATA_H__
Packit d7e8d0
Packit d7e8d0
#include "global.h"
Packit d7e8d0
#include "key.h"
Packit d7e8d0
Packit d7e8d0
#include <sys/types.h> // for size_t, off_t
Packit d7e8d0
#include <cstdio> // FILE
Packit d7e8d0
#include <algorithm>
Packit d7e8d0
#include <memory>
Packit d7e8d0
Packit d7e8d0
namespace GpgME
Packit d7e8d0
{
Packit d7e8d0
Packit d7e8d0
class DataProvider;
Packit d7e8d0
class Error;
Packit d7e8d0
Packit d7e8d0
class GPGMEPP_EXPORT Data
Packit d7e8d0
{
Packit d7e8d0
    struct Null {
Packit d7e8d0
		Null() {}
Packit d7e8d0
	};
Packit d7e8d0
public:
Packit d7e8d0
    /* implicit */ Data(const Null &);
Packit d7e8d0
    Data();
Packit d7e8d0
    explicit Data(gpgme_data_t data);
Packit d7e8d0
Packit d7e8d0
    // Memory-Based Data Buffers:
Packit d7e8d0
    Data(const char *buffer, size_t size, bool copy = true);
Packit d7e8d0
    explicit Data(const char *filename);
Packit d7e8d0
    Data(const char *filename, off_t offset, size_t length);
Packit d7e8d0
    Data(std::FILE *fp, off_t offset, size_t length);
Packit d7e8d0
    // File-Based Data Buffers:
Packit d7e8d0
    explicit Data(std::FILE *fp);
Packit d7e8d0
    explicit Data(int fd);
Packit d7e8d0
    // Callback-Based Data Buffers:
Packit d7e8d0
    explicit Data(DataProvider *provider);
Packit d7e8d0
Packit d7e8d0
    static const Null null;
Packit d7e8d0
Packit d7e8d0
    const Data &operator=(Data other)
Packit d7e8d0
    {
Packit d7e8d0
        swap(other);
Packit d7e8d0
        return *this;
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
    void swap(Data &other)
Packit d7e8d0
    {
Packit d7e8d0
        using std::swap;
Packit d7e8d0
        swap(this->d, other.d);
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
    bool isNull() const;
Packit d7e8d0
Packit d7e8d0
    enum Encoding {
Packit d7e8d0
        AutoEncoding,
Packit d7e8d0
        BinaryEncoding,
Packit d7e8d0
        Base64Encoding,
Packit d7e8d0
        ArmorEncoding,
Packit d7e8d0
        MimeEncoding,
Packit d7e8d0
        UrlEncoding,
Packit d7e8d0
        UrlEscEncoding,
Packit d7e8d0
        Url0Encoding,
Packit d7e8d0
    };
Packit d7e8d0
    Encoding encoding() const;
Packit d7e8d0
    Error setEncoding(Encoding encoding);
Packit d7e8d0
Packit d7e8d0
    enum Type {
Packit d7e8d0
        Invalid,
Packit d7e8d0
        Unknown,
Packit d7e8d0
        PGPSigned,
Packit d7e8d0
        PGPOther,
Packit d7e8d0
        PGPKey,
Packit d7e8d0
        CMSSigned,
Packit d7e8d0
        CMSEncrypted,
Packit d7e8d0
        CMSOther,
Packit d7e8d0
        X509Cert,
Packit d7e8d0
        PKCS12,
Packit d7e8d0
        PGPEncrypted,
Packit d7e8d0
        PGPSignature,
Packit d7e8d0
    };
Packit d7e8d0
    Type type() const;
Packit d7e8d0
Packit d7e8d0
    char *fileName() const;
Packit d7e8d0
    Error setFileName(const char *name);
Packit d7e8d0
Packit d7e8d0
    ssize_t read(void *buffer, size_t length);
Packit d7e8d0
    ssize_t write(const void *buffer, size_t length);
Packit d7e8d0
    off_t seek(off_t offset, int whence);
Packit d7e8d0
Packit Service 30b792
    /* Convenience function to do a seek (0, SEEK_SET).  */
Packit Service 30b792
    Error rewind();
Packit Service 30b792
Packit d7e8d0
    /** Try to parse the data to a key object using the
Packit d7e8d0
     * Protocol proto. Returns an empty list on error.*/
Packit d7e8d0
    std::vector<Key> toKeys(const Protocol proto = Protocol::OpenPGP) const;
Packit d7e8d0
Packit Service 30b792
    /** Return a copy of the data as std::string. Sets seek pos to 0 */
Packit Service 30b792
    std::string toString();
Packit Service 30b792
Packit d7e8d0
    class Private;
Packit d7e8d0
    Private *impl()
Packit d7e8d0
    {
Packit d7e8d0
        return d.get();
Packit d7e8d0
    }
Packit d7e8d0
    const Private *impl() const
Packit d7e8d0
    {
Packit d7e8d0
        return d.get();
Packit d7e8d0
    }
Packit d7e8d0
private:
Packit d7e8d0
    std::shared_ptr<Private> d;
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(Data)
Packit d7e8d0
Packit d7e8d0
#endif // __GPGMEPP_DATA_H__