Blame src/wait.h

Packit d7e8d0
/* wait.h - Definitions for the wait queue interface.
Packit d7e8d0
   Copyright (C) 2000 Werner Koch (dd9jn)
Packit d7e8d0
   Copyright (C) 2001, 2002, 2003, 2004 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 WAIT_H
Packit d7e8d0
#define WAIT_H
Packit d7e8d0
Packit d7e8d0
#include "gpgme.h"
Packit d7e8d0
#include "sema.h"
Packit d7e8d0
Packit d7e8d0
struct fd_table
Packit d7e8d0
{
Packit d7e8d0
  struct io_select_fd_s *fds;
Packit d7e8d0
  size_t size;
Packit d7e8d0
};
Packit d7e8d0
typedef struct fd_table *fd_table_t;
Packit d7e8d0
Packit d7e8d0
/* Wait items are hooked into the io_select_fd_s to connect an fd with
Packit d7e8d0
   a callback handler.  */
Packit d7e8d0
struct wait_item_s
Packit d7e8d0
{
Packit d7e8d0
  gpgme_ctx_t ctx;
Packit d7e8d0
  gpgme_io_cb_t handler;
Packit d7e8d0
  void *handler_value;
Packit d7e8d0
  int dir;
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
/* A registered fd handler is removed later using the tag that
Packit d7e8d0
   identifies it.  */
Packit d7e8d0
struct tag
Packit d7e8d0
{
Packit d7e8d0
  /* The context for which the fd was registered.  */
Packit d7e8d0
  gpgme_ctx_t ctx;
Packit d7e8d0
Packit d7e8d0
  /* The index into the fd table for this context.  */
Packit d7e8d0
  int idx;
Packit d7e8d0
Packit d7e8d0
  /* This is used by the wrappers for the user event loop.  */
Packit d7e8d0
  void *user_tag;
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
void _gpgme_fd_table_init (fd_table_t fdt);
Packit d7e8d0
void _gpgme_fd_table_deinit (fd_table_t fdt);
Packit d7e8d0
Packit d7e8d0
gpgme_error_t _gpgme_add_io_cb (void *data, int fd, int dir,
Packit d7e8d0
			     gpgme_io_cb_t fnc, void *fnc_data, void **r_tag);
Packit d7e8d0
void _gpgme_remove_io_cb (void *tag);
Packit d7e8d0
void _gpgme_wait_private_event_cb (void *data, gpgme_event_io_t type,
Packit d7e8d0
				   void *type_data);
Packit d7e8d0
void _gpgme_wait_global_event_cb (void *data, gpgme_event_io_t type,
Packit d7e8d0
				  void *type_data);
Packit d7e8d0
Packit d7e8d0
gpgme_error_t _gpgme_wait_user_add_io_cb (void *data, int fd, int dir,
Packit d7e8d0
					  gpgme_io_cb_t fnc, void *fnc_data,
Packit d7e8d0
					  void **r_tag);
Packit d7e8d0
void _gpgme_wait_user_remove_io_cb (void *tag);
Packit d7e8d0
void _gpgme_wait_user_event_cb (void *data, gpgme_event_io_t type,
Packit d7e8d0
				void *type_data);
Packit d7e8d0
Packit d7e8d0
gpgme_error_t _gpgme_run_io_cb (struct io_select_fd_s *an_fds, int checked,
Packit d7e8d0
				gpgme_error_t *err);
Packit d7e8d0
Packit d7e8d0

Packit d7e8d0
/* Session based interfaces require to make a distinction between IPC
Packit d7e8d0
   errors and operational errors.  To glue this into the old
Packit d7e8d0
   interface, I/O handlers (esp. the status handler) are called with a
Packit d7e8d0
   struct as the opaque value that contains the handlers opaque value
Packit d7e8d0
   but also a field for the operational error to be returned.  */
Packit d7e8d0
struct io_cb_data
Packit d7e8d0
{
Packit d7e8d0
  /* If this is the first field, the old internal code will still work.  */
Packit d7e8d0
  void *handler_value;
Packit d7e8d0
Packit d7e8d0
  /* The I/O callback can pass an operational error here.  */
Packit d7e8d0
  gpgme_error_t op_err;
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
#endif	/* WAIT_H */