libkdenetwork Library API Documentation

data.cpp

00001 /* data.cpp - wraps a gpgme data object 00002 Copyright (C) 2003 Klarälvdalens Datakonsult AB 00003 00004 This file is part of GPGME++. 00005 00006 GPGME++ is free software; you can redistribute it and/or modify it 00007 under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 GPGME++ is distributed in the hope that it will be useful, but 00012 WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with GPGME++; if not, write to the Free Software Foundation, 00018 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. 00019 */ 00020 00021 #ifdef HAVE_CONFIG_H 00022 #include <config.h> 00023 #endif 00024 00025 #include <gpgmepp/context.h> // Error 00026 #include <gpgmepp/interfaces/dataprovider.h> 00027 #include "data_p.h" 00028 00029 #include <gpgme.h> 00030 00031 #ifndef NDEBUG 00032 #include <iostream> 00033 #endif 00034 00035 GpgME::Data::Private::~Private() { 00036 if ( data ) 00037 gpgme_data_release( data ); 00038 } 00039 00040 GpgME::Data GpgME::Data::null( (gpgme_data_t)0 ); 00041 00042 GpgME::Data::Data() { 00043 gpgme_data_t data; 00044 const gpgme_error_t e = gpgme_data_new( &data ); 00045 d = new Private( e ? 0 : data ); 00046 d->ref(); 00047 } 00048 00049 GpgME::Data::Data( gpgme_data_t data ) { 00050 d = new Private( data ); 00051 d->ref(); 00052 } 00053 00054 GpgME::Data::Data( const Data & other ) 00055 : d( other.d ) 00056 { 00057 d->ref(); 00058 } 00059 00060 GpgME::Data::~Data() { 00061 d->unref(); d = 0; 00062 } 00063 00064 00065 const GpgME::Data & GpgME::Data::operator=( const Data & other ) { 00066 if ( this->d == other.d ) return *this; 00067 00068 if ( other.d ) 00069 other.d->ref(); 00070 if ( this->d ) 00071 this->d->unref(); 00072 this->d = other.d; 00073 00074 return *this; 00075 } 00076 00077 GpgME::Data::Data( const char * buffer, size_t size, bool copy ) { 00078 gpgme_data_t data; 00079 const gpgme_error_t e = gpgme_data_new_from_mem( &data, buffer, size, int( copy ) ); 00080 d = new Private( e ? 0 : data ); 00081 d->ref(); 00082 } 00083 00084 GpgME::Data::Data( const char * filename ) { 00085 gpgme_data_t data; 00086 const gpgme_error_t e = gpgme_data_new_from_file( &data, filename, 1 ); 00087 d = new Private( e ? 0 : data ); 00088 d->ref(); 00089 } 00090 00091 GpgME::Data::Data( const char * filename, off_t offset, size_t length ) { 00092 gpgme_data_t data; 00093 const gpgme_error_t e = gpgme_data_new_from_filepart( &data, filename, 0, offset, length ); 00094 d = new Private( e ? 0 : data ); 00095 d->ref(); 00096 } 00097 00098 GpgME::Data::Data( FILE * fp ) { 00099 gpgme_data_t data; 00100 const gpgme_error_t e = gpgme_data_new_from_stream( &data, fp ); 00101 d = new Private( e ? 0 : data ); 00102 d->ref(); 00103 } 00104 00105 GpgME::Data::Data( FILE * fp, off_t offset, size_t length ) { 00106 gpgme_data_t data; 00107 const gpgme_error_t e = gpgme_data_new_from_filepart( &data, 0, fp, offset, length ); 00108 d = new Private( e ? 0 : data ); 00109 d->ref(); 00110 } 00111 00112 GpgME::Data::Data( int fd ) { 00113 gpgme_data_t data; 00114 const gpgme_error_t e = gpgme_data_new_from_fd( &data, fd ); 00115 d = new Private( e ? 0 : data ); 00116 d->ref(); 00117 } 00118 00119 GpgME::Data::Data( DataProvider * dp ) { 00120 d = new Private(); 00121 d->ref(); 00122 if ( !dp ) 00123 return; 00124 if ( !dp->isSupported( DataProvider::Read ) ) 00125 d->cbs.read = 0; 00126 if ( !dp->isSupported( DataProvider::Write ) ) 00127 d->cbs.write = 0; 00128 if ( !dp->isSupported( DataProvider::Seek ) ) 00129 d->cbs.seek = 0; 00130 if ( !dp->isSupported( DataProvider::Release ) ) 00131 d->cbs.release = 0; 00132 const gpgme_error_t e = gpgme_data_new_from_cbs( &d->data, &d->cbs, dp ); 00133 if ( e ) 00134 d->data = 0; 00135 #ifndef NDEBUG 00136 std::cerr << "GpgME::Data(): DataProvider supports: " 00137 << ( d->cbs.read ? "read" : "no read" ) << ", " 00138 << ( d->cbs.write ? "write" : "no write" ) << ", " 00139 << ( d->cbs.seek ? "seek" : "no seek" ) << ", " 00140 << ( d->cbs.release ? "release" : "no release" ) << std::endl; 00141 #endif 00142 } 00143 00144 00145 00146 bool GpgME::Data::isNull() const { 00147 return !d || !d->data; 00148 } 00149 00150 ssize_t GpgME::Data::read( void * buffer, size_t length ) { 00151 return gpgme_data_read( d->data, buffer, length ); 00152 } 00153 00154 ssize_t GpgME::Data::write( const void * buffer, size_t length ) { 00155 return gpgme_data_write( d->data, buffer, length ); 00156 } 00157 00158 off_t GpgME::Data::seek( off_t offset, int whence ) { 00159 return gpgme_data_seek( d->data, offset, whence ); 00160 }
KDE Logo
This file is part of the documentation for libkdenetwork Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 27 12:48:39 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003