Blame src/data.h

Packit d7e8d0
/* data.h - Internal data object abstraction interface.
Packit d7e8d0
   Copyright (C) 2002, 2004, 2005 g10 Code 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 modify it
Packit d7e8d0
   under the terms of the GNU Lesser General Public License as
Packit d7e8d0
   published by the Free Software Foundation; either version 2.1 of
Packit d7e8d0
   the License, or (at your option) any later version.
Packit d7e8d0
Packit d7e8d0
   GPGME is distributed in the hope that it will be useful, but
Packit d7e8d0
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d7e8d0
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit d7e8d0
   Lesser General Public License for more details.
Packit d7e8d0
Packit d7e8d0
   You should have received a copy of the GNU Lesser General Public
Packit d7e8d0
   License along with this program; if not, write to the Free Software
Packit d7e8d0
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
Packit d7e8d0
   02111-1307, USA.  */
Packit d7e8d0
Packit d7e8d0
#ifndef DATA_H
Packit d7e8d0
#define DATA_H
Packit d7e8d0
Packit d7e8d0
#if HAVE_CONFIG_H
Packit d7e8d0
#include <config.h>
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
#ifdef HAVE_SYS_TYPES_H
Packit d7e8d0
# include <sys/types.h>
Packit d7e8d0
#endif
Packit d7e8d0
#include <limits.h>
Packit Service 30b792
#include <stdint.h>
Packit d7e8d0
Packit d7e8d0
#include "gpgme.h"
Packit d7e8d0
Packit d7e8d0

Packit d7e8d0
/* Read up to SIZE bytes into buffer BUFFER from the data object with
Packit d7e8d0
   the handle DH.  Return the number of characters read, 0 on EOF and
Packit d7e8d0
   -1 on error.  If an error occurs, errno is set.  */
Packit d7e8d0
typedef gpgme_ssize_t (*gpgme_data_read_cb) (gpgme_data_t dh,
Packit d7e8d0
                                             void *buffer,
Packit d7e8d0
                                             size_t size);
Packit d7e8d0
Packit d7e8d0
/* Write up to SIZE bytes from buffer BUFFER to the data object with
Packit d7e8d0
   the handle DH.  Return the number of characters written, or -1 on
Packit d7e8d0
   error.  If an error occurs, errno is set.  */
Packit d7e8d0
typedef gpgme_ssize_t (*gpgme_data_write_cb) (gpgme_data_t dh,
Packit d7e8d0
                                              const void *buffer,
Packit d7e8d0
                                              size_t size);
Packit d7e8d0
Packit d7e8d0
/* Set the current position from where the next read or write starts
Packit Service 30b792
   in the data object with the handle DH to OFFSET, relative to
Packit d7e8d0
   WHENCE.  */
Packit d7e8d0
typedef gpgme_off_t (*gpgme_data_seek_cb) (gpgme_data_t dh,
Packit d7e8d0
                                            gpgme_off_t offset,
Packit d7e8d0
                                            int whence);
Packit d7e8d0
Packit d7e8d0
/* Release the data object with the handle DH.  */
Packit d7e8d0
typedef void (*gpgme_data_release_cb) (gpgme_data_t dh);
Packit d7e8d0
Packit d7e8d0
/* Get the FD associated with the handle DH, or -1.  */
Packit d7e8d0
typedef int (*gpgme_data_get_fd_cb) (gpgme_data_t dh);
Packit d7e8d0
Packit d7e8d0
struct _gpgme_data_cbs
Packit d7e8d0
{
Packit d7e8d0
  gpgme_data_read_cb read;
Packit d7e8d0
  gpgme_data_write_cb write;
Packit d7e8d0
  gpgme_data_seek_cb seek;
Packit d7e8d0
  gpgme_data_release_cb release;
Packit d7e8d0
  gpgme_data_get_fd_cb get_fd;
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
struct gpgme_data
Packit d7e8d0
{
Packit d7e8d0
  struct _gpgme_data_cbs *cbs;
Packit d7e8d0
  gpgme_data_encoding_t encoding;
Packit Service 30b792
  unsigned int propidx;  /* Index into the property table.  */
Packit d7e8d0
Packit d7e8d0
#ifdef PIPE_BUF
Packit d7e8d0
#define BUFFER_SIZE PIPE_BUF
Packit d7e8d0
#else
Packit d7e8d0
#ifdef _POSIX_PIPE_BUF
Packit d7e8d0
#define BUFFER_SIZE _POSIX_PIPE_BUF
Packit d7e8d0
#else
Packit d7e8d0
#define BUFFER_SIZE 512
Packit d7e8d0
#endif
Packit d7e8d0
#endif
Packit d7e8d0
  char pending[BUFFER_SIZE];
Packit d7e8d0
  int pending_len;
Packit d7e8d0
Packit d7e8d0
  /* File name of the data object.  */
Packit d7e8d0
  char *file_name;
Packit d7e8d0
Packit Service 30b792
  /* Hint on the to be expected total size of the data.  */
Packit d7e8d0
  gpgme_off_t size_hint;
Packit d7e8d0
Packit d7e8d0
  union
Packit d7e8d0
  {
Packit d7e8d0
    /* For gpgme_data_new_from_fd.  */
Packit d7e8d0
    int fd;
Packit d7e8d0
Packit d7e8d0
    /* For gpgme_data_new_from_stream.  */
Packit d7e8d0
    FILE *stream;
Packit d7e8d0
Packit Service 30b792
    /* For gpgme_data_new_from_estream.  */
Packit Service 30b792
    gpgrt_stream_t e_stream;
Packit Service 30b792
Packit d7e8d0
    /* For gpgme_data_new_from_cbs.  */
Packit d7e8d0
    struct
Packit d7e8d0
    {
Packit d7e8d0
      gpgme_data_cbs_t cbs;
Packit d7e8d0
      void *handle;
Packit d7e8d0
    } user;
Packit d7e8d0
Packit d7e8d0
    /* For gpgme_data_new_from_mem.  */
Packit d7e8d0
    struct
Packit d7e8d0
    {
Packit d7e8d0
      char *buffer;
Packit d7e8d0
      const char *orig_buffer;
Packit d7e8d0
      /* Allocated size of BUFFER.  */
Packit d7e8d0
      size_t size;
Packit d7e8d0
      size_t length;
Packit d7e8d0
      gpgme_off_t offset;
Packit d7e8d0
    } mem;
Packit d7e8d0
Packit d7e8d0
    /* For gpgme_data_new_from_read_cb.  */
Packit d7e8d0
    struct
Packit d7e8d0
    {
Packit d7e8d0
      int (*cb) (void *, char *, size_t, size_t *);
Packit d7e8d0
      void *handle;
Packit d7e8d0
    } old_user;
Packit d7e8d0
  } data;
Packit d7e8d0
};
Packit d7e8d0
Packit Service 30b792
Packit Service 30b792
/* The data property types.  */
Packit Service 30b792
typedef enum
Packit Service 30b792
  {
Packit Service 30b792
    DATA_PROP_NONE = 0,   /* Dummy property. */
Packit Service 30b792
    DATA_PROP_BLANKOUT    /* Do not return the held data.  */
Packit Service 30b792
  } data_prop_t;
Packit Service 30b792
Packit Service 30b792
Packit d7e8d0

Packit Service 30b792
/* Return the data object's serial number for handle DH.  */
Packit Service 30b792
uint64_t _gpgme_data_get_dserial (gpgme_data_t dh);
Packit Service 30b792
Packit Service 30b792
/* Set an internal property of a data object.  */
Packit Service 30b792
gpg_error_t _gpgme_data_set_prop (gpgme_data_t dh, uint64_t dserial,
Packit Service 30b792
                                  data_prop_t name, int value);
Packit Service 30b792
Packit Service 30b792
/* Get an internal property of a data object.  */
Packit Service 30b792
gpg_error_t _gpgme_data_get_prop (gpgme_data_t dh, uint64_t dserial,
Packit Service 30b792
                                  data_prop_t name, int *r_value);
Packit Service 30b792
Packit Service 30b792
/* Create a new data object.  */
Packit d7e8d0
gpgme_error_t _gpgme_data_new (gpgme_data_t *r_dh,
Packit d7e8d0
			       struct _gpgme_data_cbs *cbs);
Packit d7e8d0
Packit d7e8d0
void _gpgme_data_release (gpgme_data_t dh);
Packit d7e8d0
Packit d7e8d0
/* Get the file descriptor associated with DH, if possible.  Otherwise
Packit d7e8d0
   return -1.  */
Packit d7e8d0
int _gpgme_data_get_fd (gpgme_data_t dh);
Packit d7e8d0
Packit d7e8d0
/* Get the size-hint value for DH or 0 if not available.  */
Packit d7e8d0
gpgme_off_t _gpgme_data_get_size_hint (gpgme_data_t dh);
Packit d7e8d0
Packit Service 30b792
Packit d7e8d0
#endif	/* DATA_H */