2004-09-30 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / context.h
1 /* context.h - Definitions for a GPGME context.
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 CONTEXT_H
22 #define CONTEXT_H
23
24 #include "gpgme.h"
25 #include "engine.h"
26 #include "wait.h"
27
28 \f
29 /* Operations might require to remember arbitrary information and data
30    objects during invocations of the status handler.  The
31    ctx_op_data structure provides a generic framework to hook in
32    such additional data.  */
33 typedef enum
34   {
35     OPDATA_DECRYPT, OPDATA_SIGN, OPDATA_ENCRYPT, OPDATA_PASSPHRASE,
36     OPDATA_IMPORT, OPDATA_GENKEY, OPDATA_KEYLIST, OPDATA_EDIT,
37     OPDATA_VERIFY, OPDATA_TRUSTLIST
38   } ctx_op_data_id_t;
39
40
41 struct ctx_op_data
42 {
43   /* The next element in the linked list, or NULL if this is the last
44      element.  */
45   struct ctx_op_data *next;
46
47   /* The type of the hook data, which can be used by a routine to
48      lookup the hook data.  */
49   ctx_op_data_id_t type;
50
51   /* The function to release HOOK and all its associated resources.
52      Can be NULL if no special dealllocation routine is necessary.  */
53   void (*cleanup) (void *hook);
54
55   /* The hook that points to the operation data.  */
56   void *hook;
57 };
58 typedef struct ctx_op_data *ctx_op_data_t;
59
60 \f
61 /* The context defines an environment in which crypto operations can
62    be performed (sequentially).  */
63 struct gpgme_context
64 {
65   /* The protocol used by this context.  */
66   gpgme_protocol_t protocol;
67
68   /* The running engine process.  */
69   engine_t engine;
70
71   /* True if armor mode should be used.  */
72   unsigned int use_armor : 1;
73
74   /* True if text mode should be used.  */
75   unsigned int use_textmode : 1;
76
77   /* Flags for keylist mode.  */
78   gpgme_keylist_mode_t keylist_mode;
79
80   /* Number of certs to be included.  */
81   unsigned int include_certs;
82
83   /* The number of keys in signers.  */
84   unsigned int signers_len;
85
86   /* Size of the following array.  */
87   unsigned int signers_size;
88   gpgme_key_t *signers;
89
90   /* The locale for the pinentry.  */
91   char *lc_ctype;
92   char *lc_messages;
93
94   /* The operation data hooked into the context.  */
95   ctx_op_data_t op_data;
96
97   /* The user provided passphrase callback and its hook value.  */
98   gpgme_passphrase_cb_t passphrase_cb;
99   void *passphrase_cb_value;
100
101   /* The user provided progress callback and its hook value.  */
102   gpgme_progress_cb_t progress_cb;
103   void *progress_cb_value;
104
105   /* A list of file descriptors in active use by the current
106      operation.  */
107   struct fd_table fdt;
108   struct gpgme_io_cbs io_cbs;
109 };
110
111 #endif  /* CONTEXT_H */