First take on the low-level assuan interface.
[gpgme.git] / src / context.h
1 /* context.h - Definitions for a GPGME context.
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2002, 2003, 2004, 2005 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 Lesser General Public License as
9    published by the Free Software Foundation; either version 2.1 of
10    the License, or (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    Lesser General Public License for more details.
16    
17    You should have received a copy of the GNU Lesser General Public
18    License along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 #ifndef CONTEXT_H
23 #define CONTEXT_H
24
25 #include "gpgme.h"
26 #include "engine.h"
27 #include "wait.h"
28 #include "sema.h"
29
30 \f
31 /* Operations might require to remember arbitrary information and data
32    objects during invocations of the status handler.  The
33    ctx_op_data structure provides a generic framework to hook in
34    such additional data.  */
35 typedef enum
36   {
37     OPDATA_DECRYPT, OPDATA_SIGN, OPDATA_ENCRYPT, OPDATA_PASSPHRASE,
38     OPDATA_IMPORT, OPDATA_GENKEY, OPDATA_KEYLIST, OPDATA_EDIT,
39     OPDATA_VERIFY, OPDATA_TRUSTLIST, OPDATA_ASSUAN
40   } ctx_op_data_id_t;
41
42
43 struct ctx_op_data
44 {
45   /* The next element in the linked list, or NULL if this is the last
46      element.  */
47   struct ctx_op_data *next;
48
49   /* The type of the hook data, which can be used by a routine to
50      lookup the hook data.  */
51   ctx_op_data_id_t type;
52
53   /* The function to release HOOK and all its associated resources.
54      Can be NULL if no special deallocation routine is necessary.  */
55   void (*cleanup) (void *hook);
56
57   /* The hook that points to the operation data.  */
58   void *hook;
59 };
60 typedef struct ctx_op_data *ctx_op_data_t;
61
62 \f
63 /* The context defines an environment in which crypto operations can
64    be performed (sequentially).  */
65 struct gpgme_context
66 {
67   DECLARE_LOCK (lock);
68
69   /* True if the context was canceled asynchronously.  */
70   int canceled;
71
72   /* The engine info for this context.  */
73   gpgme_engine_info_t engine_info;
74
75   /* The protocol used by this context.  */
76   gpgme_protocol_t protocol;
77
78   /* The running engine process.  */
79   engine_t engine;
80
81   /* True if armor mode should be used.  */
82   unsigned int use_armor : 1;
83
84   /* True if text mode should be used.  */
85   unsigned int use_textmode : 1;
86
87   /* Flags for keylist mode.  */
88   gpgme_keylist_mode_t keylist_mode;
89
90   /* Number of certs to be included.  */
91   unsigned int include_certs;
92
93   /* The number of keys in signers.  */
94   unsigned int signers_len;
95
96   /* Size of the following array.  */
97   unsigned int signers_size;
98   gpgme_key_t *signers;
99
100   /* The signature notations for this context.  */
101   gpgme_sig_notation_t sig_notations;
102
103   /* The locale for the pinentry.  */
104   char *lc_ctype;
105   char *lc_messages;
106
107   /* The operation data hooked into the context.  */
108   ctx_op_data_t op_data;
109
110   /* The user provided passphrase callback and its hook value.  */
111   gpgme_passphrase_cb_t passphrase_cb;
112   void *passphrase_cb_value;
113
114   /* The user provided progress callback and its hook value.  */
115   gpgme_progress_cb_t progress_cb;
116   void *progress_cb_value;
117
118   /* A list of file descriptors in active use by the current
119      operation.  */
120   struct fd_table fdt;
121   struct gpgme_io_cbs io_cbs;
122 };
123
124 #endif  /* CONTEXT_H */