26467cab6256ab26eca7e4ac2e2992c1b4128796
[gpgme.git] / gpgme / context.h
1 /* context.h
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 "types.h"
26 #include "engine.h"
27 #include "wait.h"
28
29 \f
30 /* Operations might require to remember arbitrary information and data
31    objects during invocations of the status handler.  The
32    ctx_op_data structure provides a generic framework to hook in
33    such additional data.  */
34 typedef enum
35   {
36     OPDATA_DECRYPT, OPDATA_SIGN, OPDATA_ENCRYPT, OPDATA_PASSPHRASE,
37     OPDATA_IMPORT, OPDATA_GENKEY, OPDATA_KEYLIST, OPDATA_EDIT,
38     OPDATA_VERIFY_COLLECTING, OPDATA_VERIFY
39   } ctx_op_data_type;
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_type 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
59 \f
60 struct key_queue_item_s
61 {
62   struct key_queue_item_s *next;
63   GpgmeKey key;
64 };
65
66
67 struct trust_queue_item_s
68 {
69   struct trust_queue_item_s *next;
70   GpgmeTrustItem item;
71 };
72
73
74 /* Currently we need it at several places, so we put the definition
75    into this header file.  */
76 struct gpgme_context_s
77 {
78   int initialized;
79   /* An engine request is still pending.  */
80   int pending;
81
82   int use_cms;
83
84   /* Cancel operation requested.  */
85   int cancel;
86
87   /* The running engine process.  */
88   EngineObject engine;
89
90   /* Level of verbosity to use.  */
91   int verbosity;
92   int use_armor;  
93   int use_textmode;
94   int keylist_mode;
95   int include_certs;
96
97   /* The number of keys in signers.  */
98   int signers_len;
99   /* Size of the following array.  */
100   int signers_size;
101   GpgmeKey *signers;
102
103   /* The operation data hooked into the context.  */
104   struct ctx_op_data *op_data;
105
106   /* Last signature notation.  */
107   GpgmeData notation;
108   /* Last operation info.  */
109   GpgmeData op_info;
110
111   /* Used by keylist.c.  */
112   GpgmeKey tmp_key;
113   struct user_id_s *tmp_uid;
114   /* Something new is available.  */
115   volatile int key_cond;
116   struct key_queue_item_s *key_queue;
117   struct trust_queue_item_s *trust_queue;
118
119   GpgmePassphraseCb passphrase_cb;
120   void *passphrase_cb_value;
121
122   GpgmeProgressCb progress_cb;
123   void *progress_cb_value;
124
125   /* A list of file descriptors in active use by the current
126      operation.  */
127   struct fd_table fdt;
128   struct GpgmeIOCbs io_cbs;
129   
130   GpgmeData help_data_1;
131 };
132
133 /* Forward declaration of a structure to store certification
134    signatures.  */
135 struct certsig_s;
136
137 /* Structure to store user IDs.  */
138 struct user_id_s
139 {
140   struct user_id_s *next;
141   unsigned int revoked : 1;
142   unsigned int invalid : 1;
143   GpgmeValidity validity; 
144   struct certsig_s *certsigs;
145   struct certsig_s *last_certsig;
146   const char *name_part;        /* All 3 point into strings behind name  */
147   const char *email_part;       /* or to read-only strings.  */
148   const char *comment_part;
149   char name[1];
150 };
151
152
153 struct gpgme_recipients_s
154 {
155   struct user_id_s *list;
156   int checked;  /* Whether the recipients are all valid.  */
157 };
158
159
160 #endif  /* CONTEXT_H */