Page MenuHome GnuPG

No OneTemporary

diff --git a/data.cpp b/data.cpp
index 32c52d31..38387894 100644
--- a/data.cpp
+++ b/data.cpp
@@ -1,146 +1,184 @@
/*
data.cpp - wraps a gpgme data object
Copyright (C) 2003 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.
*/
#include <gpgme++/context.h> // Error
#include <gpgme++/interfaces/dataprovider.h>
#include "data_p.h"
#include <gpgme.h>
#ifndef NDEBUG
#include <iostream>
#endif
GpgME::Data::Private::~Private() {
if ( data )
gpgme_data_release( data );
}
GpgME::Data GpgME::Data::null( (gpgme_data_t)0 );
GpgME::Data::Data() {
gpgme_data_t data;
const gpgme_error_t e = gpgme_data_new( &data );
d = new Private( e ? 0 : data );
d->ref();
}
GpgME::Data::Data( gpgme_data_t data ) {
d = new Private( data );
d->ref();
}
GpgME::Data::Data( const Data & other )
: d( other.d )
{
d->ref();
}
GpgME::Data::~Data() {
d->unref(); d = 0;
}
GpgME::Data::Data( const char * buffer, size_t size, bool copy ) {
gpgme_data_t data;
const gpgme_error_t e = gpgme_data_new_from_mem( &data, buffer, size, int( copy ) );
d = new Private( e ? 0 : data );
d->ref();
}
GpgME::Data::Data( const char * filename ) {
gpgme_data_t data;
const gpgme_error_t e = gpgme_data_new_from_file( &data, filename, 1 );
d = new Private( e ? 0 : data );
d->ref();
}
GpgME::Data::Data( const char * filename, off_t offset, size_t length ) {
gpgme_data_t data;
const gpgme_error_t e = gpgme_data_new_from_filepart( &data, filename, 0, offset, length );
d = new Private( e ? 0 : data );
d->ref();
}
GpgME::Data::Data( FILE * fp ) {
gpgme_data_t data;
const gpgme_error_t e = gpgme_data_new_from_stream( &data, fp );
d = new Private( e ? 0 : data );
d->ref();
}
GpgME::Data::Data( FILE * fp, off_t offset, size_t length ) {
gpgme_data_t data;
const gpgme_error_t e = gpgme_data_new_from_filepart( &data, 0, fp, offset, length );
d = new Private( e ? 0 : data );
d->ref();
}
GpgME::Data::Data( int fd ) {
gpgme_data_t data;
const gpgme_error_t e = gpgme_data_new_from_fd( &data, fd );
d = new Private( e ? 0 : data );
d->ref();
}
GpgME::Data::Data( DataProvider * dp ) {
d = new Private();
d->ref();
if ( !dp )
return;
if ( !dp->isSupported( DataProvider::Read ) )
d->cbs.read = 0;
if ( !dp->isSupported( DataProvider::Write ) )
d->cbs.write = 0;
if ( !dp->isSupported( DataProvider::Seek ) )
d->cbs.seek = 0;
if ( !dp->isSupported( DataProvider::Release ) )
d->cbs.release = 0;
const gpgme_error_t e = gpgme_data_new_from_cbs( &d->data, &d->cbs, dp );
if ( e )
d->data = 0;
#ifndef NDEBUG
std::cerr << "GpgME::Data(): DataProvider supports: "
<< ( d->cbs.read ? "read" : "no read" ) << ", "
<< ( d->cbs.write ? "write" : "no write" ) << ", "
<< ( d->cbs.seek ? "seek" : "no seek" ) << ", "
<< ( d->cbs.release ? "release" : "no release" ) << std::endl;
#endif
}
bool GpgME::Data::isNull() const {
return !d || !d->data;
}
+GpgME::Data::Encoding GpgME::Data::encoding() const {
+ switch ( gpgme_data_get_encoding( d->data ) ) {
+ case GPGME_DATA_ENCODING_NONE: return AutoEncoding;
+ case GPGME_DATA_ENCODING_BINARY: return BinaryEncoding;
+ case GPGME_DATA_ENCODING_BASE64: return Base64Encoding;
+ case GPGME_DATA_ENCODING_ARMOR: return ArmorEncoding;
+ }
+ return AutoEncoding;
+}
+
+GpgME::Error GpgME::Data::setEncoding( Encoding enc ) {
+ gpgme_data_encoding_t ge = GPGME_DATA_ENCODING_NONE;
+ switch ( enc ) {
+ case AutoEncoding: ge = GPGME_DATA_ENCODING_NONE; break;
+ case BinaryEncoding: ge = GPGME_DATA_ENCODING_BINARY; break;
+ case Base64Encoding: ge = GPGME_DATA_ENCODING_BASE64; break;
+ case ArmorEncoding: ge = GPGME_DATA_ENCODING_ARMOR; break;
+ }
+ return Error( gpgme_data_set_encoding( d->data, ge ) );
+}
+
+char * GpgME::Data::fileName() const {
+#ifdef HAVE_GPGME_DATA_SET_FILE_NAME
+ return gpgme_data_get_file_name( d->data );
+#else
+ return 0;
+#endif
+}
+
+GpgME::Error GpgME::Data::setFileName( const char * name ) {
+#ifdef HAVE_GPGME_DATA_SET_FILE_NAME
+ return Error( gpgme_data_set_file_name( d->data, name ) );
+#else
+ (void)name;
+ return Error();
+#endif
+}
+
ssize_t GpgME::Data::read( void * buffer, size_t length ) {
return gpgme_data_read( d->data, buffer, length );
}
ssize_t GpgME::Data::write( const void * buffer, size_t length ) {
return gpgme_data_write( d->data, buffer, length );
}
off_t GpgME::Data::seek( off_t offset, int whence ) {
return gpgme_data_seek( d->data, offset, whence );
}
diff --git a/data.h b/data.h
index 7756c646..c4515278 100644
--- a/data.h
+++ b/data.h
@@ -1,85 +1,98 @@
/*
data.h - wraps a gpgme data object
Copyright (C) 2003,2004 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.
*/
#ifndef __GPGMEPP_DATA_H__
#define __GPGMEPP_DATA_H__
#include <gpgme++/gpgmefw.h>
#include <gpgme++/gpgme++_export.h>
#include <sys/types.h> // for size_t, off_t
#include <cstdio> // FILE
#include <algorithm>
namespace GpgME {
class DataProvider;
+ class Error;
class GPGMEPP_EXPORT Data {
public:
Data();
explicit Data( gpgme_data_t data );
Data( const Data & other );
// Memory-Based Data Buffers:
Data( const char * buffer, size_t size, bool copy=true );
explicit Data( const char * filename );
Data( const char * filename, off_t offset, size_t length );
Data( FILE * fp, off_t offset, size_t length );
// File-Based Data Buffers:
explicit Data( FILE * fp );
explicit Data( int fd );
// Callback-Based Data Buffers:
explicit Data( DataProvider * provider );
virtual ~Data();
static Data null;
const Data & operator=( Data other ) {
swap( other );
return *this;
}
void swap( Data & other ) {
using std::swap;
swap( this->d, other.d );
}
bool isNull() const;
+ enum Encoding {
+ AutoEncoding,
+ BinaryEncoding,
+ Base64Encoding,
+ ArmorEncoding
+ };
+ Encoding encoding() const;
+ Error setEncoding( Encoding encoding );
+
+ char * fileName() const;
+ Error setFileName( const char * name );
+
ssize_t read( void * buffer, size_t length );
ssize_t write( const void * buffer, size_t length );
off_t seek( off_t offset, int whence );
class Private;
Private * impl() { return d; }
const Private * impl() const { return d; }
private:
Private * d;
};
}
GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION( Data )
#endif // __GPGMEPP_DATA_H__

File Metadata

Mime Type
text/x-diff
Expires
Thu, Feb 26, 6:28 PM (6 h, 13 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
5e/e5/d81efb13c5e831cc9c6255d0cea7

Event Timeline