2004-09-30 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / context.h
index f16af04..64c5276 100644 (file)
@@ -1,6 +1,6 @@
-/* context.h
+/* context.h - Definitions for a GPGME context.
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003 g10 Code GmbH
 
    This file is part of GPGME.
  
 #define CONTEXT_H
 
 #include "gpgme.h"
-#include "types.h"
 #include "engine.h"
 #include "wait.h"
 
-struct key_queue_item_s
-{
-  struct key_queue_item_s *next;
-  GpgmeKey key;
-};
+\f
+/* Operations might require to remember arbitrary information and data
+   objects during invocations of the status handler.  The
+   ctx_op_data structure provides a generic framework to hook in
+   such additional data.  */
+typedef enum
+  {
+    OPDATA_DECRYPT, OPDATA_SIGN, OPDATA_ENCRYPT, OPDATA_PASSPHRASE,
+    OPDATA_IMPORT, OPDATA_GENKEY, OPDATA_KEYLIST, OPDATA_EDIT,
+    OPDATA_VERIFY, OPDATA_TRUSTLIST
+  } ctx_op_data_id_t;
+
 
-struct trust_queue_item_s
+struct ctx_op_data
 {
-  struct trust_queue_item_s *next;
-  GpgmeTrustItem item;
-};
+  /* The next element in the linked list, or NULL if this is the last
+     element.  */
+  struct ctx_op_data *next;
 
+  /* The type of the hook data, which can be used by a routine to
+     lookup the hook data.  */
+  ctx_op_data_id_t type;
 
-/* Currently we need it at several places, so we put the definition
-   into this header file.  */
-struct gpgme_context_s
-{
-  int initialized;
-  /* An engine request is still pending.  */
-  int pending;
+  /* The function to release HOOK and all its associated resources.
+     Can be NULL if no special dealllocation routine is necessary.  */
+  void (*cleanup) (void *hook);
 
-  int use_cms;
+  /* The hook that points to the operation data.  */
+  void *hook;
+};
+typedef struct ctx_op_data *ctx_op_data_t;
 
-  /* Cancel operation requested.  */
-  int cancel;
+\f
+/* The context defines an environment in which crypto operations can
+   be performed (sequentially).  */
+struct gpgme_context
+{
+  /* The protocol used by this context.  */
+  gpgme_protocol_t protocol;
 
   /* The running engine process.  */
-  EngineObject engine;
+  engine_t engine;
+
+  /* True if armor mode should be used.  */
+  unsigned int use_armor : 1;
+
+  /* True if text mode should be used.  */
+  unsigned int use_textmode : 1;
 
-  /* Level of verbosity to use.  */
-  int verbosity;
-  int use_armor;  
-  int use_textmode;
-  int keylist_mode;
-  int include_certs;
+  /* Flags for keylist mode.  */
+  gpgme_keylist_mode_t keylist_mode;
+
+  /* Number of certs to be included.  */
+  unsigned int include_certs;
 
   /* The number of keys in signers.  */
-  int signers_len;
+  unsigned int signers_len;
+
   /* Size of the following array.  */
-  int signers_size;
-  GpgmeKey *signers;
+  unsigned int signers_size;
+  gpgme_key_t *signers;
 
-  struct
-  {
-    VerifyResult verify;
-    DecryptResult decrypt;
-    SignResult sign;
-    EncryptResult encrypt;
-    PassphraseResult passphrase;
-    ImportResult import;
-    DeleteResult delete;
-    GenKeyResult genkey;
-    KeylistResult keylist;
-    EditResult edit;
-  } result;
-
-  /* Last signature notation.  */
-  GpgmeData notation;
-  /* Last operation info.  */
-  GpgmeData op_info;
-
-  /* Used by keylist.c.  */
-  GpgmeKey tmp_key;
-  struct user_id_s *tmp_uid;
-  /* Something new is available.  */
-  volatile int key_cond;
-  struct key_queue_item_s *key_queue;
-  struct trust_queue_item_s *trust_queue;
-
-  GpgmePassphraseCb passphrase_cb;
+  /* The locale for the pinentry.  */
+  char *lc_ctype;
+  char *lc_messages;
+
+  /* The operation data hooked into the context.  */
+  ctx_op_data_t op_data;
+
+  /* The user provided passphrase callback and its hook value.  */
+  gpgme_passphrase_cb_t passphrase_cb;
   void *passphrase_cb_value;
 
-  GpgmeProgressCb progress_cb;
+  /* The user provided progress callback and its hook value.  */
+  gpgme_progress_cb_t progress_cb;
   void *progress_cb_value;
 
   /* A list of file descriptors in active use by the current
      operation.  */
   struct fd_table fdt;
-  struct GpgmeIOCbs io_cbs;
-  
-  GpgmeData help_data_1;
+  struct gpgme_io_cbs io_cbs;
 };
 
-/* Forward declaration of a structure to store certification
-   signatures.  */
-struct certsig_s;
-
-/* Structure to store user IDs.  */
-struct user_id_s
-{
-  struct user_id_s *next;
-  unsigned int revoked : 1;
-  unsigned int invalid : 1;
-  GpgmeValidity validity; 
-  struct certsig_s *certsigs;
-  struct certsig_s *last_certsig;
-  const char *name_part;       /* All 3 point into strings behind name  */
-  const char *email_part;      /* or to read-only strings.  */
-  const char *comment_part;
-  char name[1];
-};
-
-
-struct gpgme_recipients_s
-{
-  struct user_id_s *list;
-  int checked; /* Wether the recipients are all valid.  */
-};
-
-
-#define fail_on_pending_request(c)                            \
-          do {                                                \
-                if (!(c))         return GPGME_Invalid_Value; \
-                if ((c)->pending) return GPGME_Busy;          \
-             } while (0)
-
-#define wait_on_request_or_fail(c)                            \
-          do {                                                \
-                if (!(c))          return GPGME_Invalid_Value;\
-                if (!(c)->pending) return GPGME_No_Request;   \
-                gpgme_wait ((c), 1);                          \
-             } while (0)
-
 #endif /* CONTEXT_H */