doc/
[gpgme.git] / gpgme / wait.h
1 /* wait.h - Definitions for the wait queue interface.
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2002, 2003 g10 Code GmbH
4  
5    This file is part of GPGME.
6  
7    GPGME is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11  
12    GPGME is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16  
17    You should have received a copy of the GNU General Public License
18    along with GPGME; if not, write to the Free Software Foundation,
19    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #ifndef WAIT_H
22 #define WAIT_H
23
24 #include "gpgme.h"
25 #include "sema.h"
26
27 struct fd_table
28 {
29   struct io_select_fd_s *fds;
30   size_t size;
31 };
32 typedef struct fd_table *fd_table_t;
33
34 /* Wait items are hooked into the io_select_fd_s to connect an fd with
35    a callback handler.  */
36 struct wait_item_s
37 {
38   GpgmeCtx ctx;
39   GpgmeIOCb handler;
40   void *handler_value;
41   int dir;
42 };
43
44 /* A registered fd handler is removed later using the tag that
45    identifies it.  */
46 struct tag
47 {
48   /* The context for which the fd was registered.  */
49   GpgmeCtx ctx;
50
51   /* The index into the fd table for this context.  */
52   int idx;
53
54   /* This is used by the wrappers for the user event loop.  */
55   void *user_tag;
56 };
57
58
59 void _gpgme_fd_table_init (fd_table_t fdt);
60 void _gpgme_fd_table_deinit (fd_table_t fdt);
61
62 GpgmeError _gpgme_add_io_cb (void *data, int fd, int dir,
63                              GpgmeIOCb fnc, void *fnc_data, void **r_tag);
64 void _gpgme_remove_io_cb (void *tag);
65 void _gpgme_wait_private_event_cb (void *data, GpgmeEventIO type, void *type_data);
66 void _gpgme_wait_global_event_cb (void *data, GpgmeEventIO type, void *type_data);
67
68 GpgmeError _gpgme_wait_user_add_io_cb (void *data, int fd, int dir,
69                                        GpgmeIOCb fnc, void *fnc_data, void **r_tag);
70 void _gpgme_wait_user_remove_io_cb (void *tag);
71 void _gpgme_wait_user_event_cb (void *data, GpgmeEventIO type, void *type_data);
72
73 GpgmeError _gpgme_wait_one (GpgmeCtx ctx);
74
75 #endif  /* WAIT_H */