doc/
authorMarcus Brinkmann <mb@g10code.com>
Thu, 31 Jan 2002 00:31:44 +0000 (00:31 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Thu, 31 Jan 2002 00:31:44 +0000 (00:31 +0000)
2002-01-31  Marcus Brinkmann  <marcus@g10code.de>

* gpgme.texi (Generating Keys): Document error at creation
failure.

gpgme/
2002-01-31  Marcus Brinkmann  <marcus@g10code.de>

* rungpg.h: Add STATUS_KEY_CREATED.

* progress.c: New file.
* Makefile.am (libgpgme_la_SOURCES): Add progress.c.

* genkey.c (genkey_status_handler): Use
_gpgme_progress_status_handler.  Add check for status.
(struct genkey_result_s): New structure.
(_gpgme_release_genkey_result): New function.
(gpgme_op_genkey): Check for error.
* gpgme.c (_gpgme_release_result): Call
_gpgme_release_genkey_result.
* ops.h (_gpgme_release_genkey_result): Add prototype.
* types.h (GenKeyResult): New type.
* context.h (gpgme_context_s): Add GenKeyResult to member result.

12 files changed:
TODO
doc/ChangeLog
doc/gpgme.texi
gpgme/ChangeLog
gpgme/Makefile.am
gpgme/context.h
gpgme/delete.c
gpgme/genkey.c
gpgme/gpgme.c
gpgme/ops.h
gpgme/rungpg.h
gpgme/types.h

diff --git a/TODO b/TODO
index 9f09b416fec6d3375b9ad29fe1e36daa43dce5d2..1a840f7b40e648d8b3f5b19b7a16c6c23bdf37bd 100644 (file)
--- a/TODO
+++ b/TODO
@@ -35,7 +35,9 @@
    (it's an internal error, as select_protocol checks already).
 
 * Operations
-** Import, export, genkey, delete status handler need much more work.
+** Export status handler need much more work.
+** Import should return a useful error when one happened.
+** Genkey should return something more useful than General_Error.
 
 * Error Values
 ** Map ASSUAN error values.
index 8d5a898a418db9d597f9f05f630b88c903078eb5..ed854aa4e478fb1a9305e3a57240f529484e0b1b 100644 (file)
@@ -1,3 +1,8 @@
+2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.texi (Generating Keys): Document error at creation
+       failure.
+
 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.texi (Deleting Keys): Document new error values.
index 7287307c80fa78dda7ef8b066ec87cf92a1dc250..7e883e3c2f99aaf3723980bc83a77c0c39d0c4d5 100644 (file)
@@ -1472,8 +1472,9 @@ allowed.
 
 The function returns @code{GPGME_No_Error} if the operation could be
 started successfully, @code{GPGME_Invalid_Value} if @var{parms} is not
-a valid XML string, and @code{GPGME_Not_Supported} if @var{pubkey} or
-@var{seckey} is not @code{NULL}.
+a valid XML string, @code{GPGME_Not_Supported} if @var{pubkey} or
+@var{seckey} is not @code{NULL}, and @code{GPGME_General_Error} if no
+key was created by the backend.
 @end deftypefun
 
 @deftypefun GpgmeError gpgme_op_genkey_start (@w{GpgmeCtx @var{ctx}}, @w{const char *@var{parms}}, @w{GpgmeData @var{pubkey}}, @w{GpgmeData @var{seckey}})
index 8b47b092e510fc93d841d11cd223fb07ec5da243..8f0f1e31b28695be5f070045a524628a1201c7ed 100644 (file)
@@ -1,3 +1,21 @@
+2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
+
+       * rungpg.h: Add STATUS_KEY_CREATED.
+
+       * progress.c: New file.
+       * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
+
+       * genkey.c (genkey_status_handler): Use
+       _gpgme_progress_status_handler.  Add check for status.
+       (struct genkey_result_s): New structure.
+       (_gpgme_release_genkey_result): New function.
+       (gpgme_op_genkey): Check for error.
+       * gpgme.c (_gpgme_release_result): Call
+       _gpgme_release_genkey_result.
+       * ops.h (_gpgme_release_genkey_result): Add prototype.
+       * types.h (GenKeyResult): New type.
+       * context.h (gpgme_context_s): Add GenKeyResult to member result.
+
 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.c (_gpgme_release_result): Call
index e6c1dd75d64afecf1a651d1be30c99a59d10509d..ffc808d4927c9a74d2de30225d42986dbdbd62d9 100644 (file)
@@ -1,5 +1,5 @@
 # Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001 g10 Code GmbH
+# Copyright (C) 2001, 2002 g10 Code GmbH
 # 
 # This file is part of GPGME.
 # 
@@ -46,6 +46,7 @@ libgpgme_la_SOURCES = \
        verify.c \
        sign.c \
        passphrase.c \
+       progress.c \
         key.c key.h \
        keylist.c \
        trustlist.c \
index ae2460bd73a7b961ce6981dbef73bd3a37e1e870..9a467fee4dbd13fee94aae32df544e9273b90261 100644 (file)
@@ -1,6 +1,6 @@
 /* context.h 
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2002 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -70,6 +70,7 @@ struct gpgme_context_s {
         PassphraseResult passphrase;
         ImportResult import;
         DeleteResult delete;
+        GenKeyResult genkey;
     } result;
 
     GpgmeData notation;    /* last signature notation */
@@ -136,9 +137,4 @@ struct gpgme_recipients_s {
                 gpgme_wait ((c), 1);                          \
              } while (0)
 
-
-
 #endif /* CONTEXT_H */
-
-
-
index 23044c4f33bd04002bb235a4138cf7ea2666921e..35ba0feeef22786c1e2f7de5a38400a2d975837c 100644 (file)
@@ -1,5 +1,5 @@
 /* delete.c -  delete a key 
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2002 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
index be52056d276a4254a166524a6078304dac6944d6..ca04b4e4b4ab3537782cd2f8172f2f4ab306400d 100644 (file)
@@ -1,6 +1,6 @@
 /* genkey.c -  key generation
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2002 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
 #include "context.h"
 #include "ops.h"
 
+
+struct genkey_result_s
+{
+  int created_primary : 1;
+  int created_sub : 1;
+};
+
+
+void
+_gpgme_release_genkey_result (GenKeyResult result)
+{
+  if (!result)
+    return;
+  xfree (result);
+}
+
 static void
-genkey_status_handler ( GpgmeCtx ctx, GpgStatusCode code, char *args )
+genkey_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
 {
-    if ( code == STATUS_PROGRESS && *args ) {
-        if (ctx->progress_cb) {
-            char *p;
-            int type=0, current=0, total=0;
-            
-            if ( (p = strchr (args, ' ')) ) {
-                *p++ = 0;
-                if (*p) {
-                    type = *(byte*)p;
-                    if ( (p = strchr (p+1, ' ')) ) {
-                        *p++ = 0;
-                        if (*p) {
-                            current = atoi (p);
-                            if ( (p = strchr (p+1, ' ')) ) {
-                                *p++ = 0;
-                                total = atoi (p);
-                            }
-                        }
-                    }
-                }
-            }           
-            if ( type != 'X' )
-                ctx->progress_cb ( ctx->progress_cb_value, args, type,
-                                   current, total );
+  _gpgme_progress_status_handler (ctx, code, args);
+
+  if (ctx->out_of_core)
+    return;
+
+  if (!ctx->result.genkey)
+    {
+      ctx->result.genkey = xtrycalloc (1, sizeof *ctx->result.genkey);
+      if (!ctx->result.genkey)
+        {
+          ctx->out_of_core = 1;
+          return;
         }
-        return;
     }
 
-    DEBUG2 ("genkey_status: code=%d args=`%s'\n", code, args );
-    /* FIXME: Need to do more */
+  switch (code)
+    {
+    case STATUS_KEY_CREATED:
+      if (args && *args)
+       {
+         if (*args == 'B' || *args == 'P')
+           ctx->result.genkey->created_primary = 1;
+         if (*args == 'B' || *args == 'S')
+           ctx->result.genkey->created_sub = 1;
+       }
+      break;
+
+    default:
+      break;
+    }
 }
 
 
@@ -189,6 +205,7 @@ gpgme_op_genkey_start (GpgmeCtx ctx, const char *parms,
   return err;
 }
 
+
 /**
  * gpgme_op_genkey:
  * @c: the context
@@ -209,11 +226,15 @@ gpgme_op_genkey (GpgmeCtx ctx, const char *parms,
 {
   GpgmeError err = gpgme_op_genkey_start (ctx, parms, pubkey, seckey);
   if (!err)
-    gpgme_wait (ctx, 1);
+    {
+      gpgme_wait (ctx, 1);
+
+      /* FIXME: Should return some more useful error value.  */
+      if (!ctx->result.genkey)
+       err = mk_error (General_Error);
+      else if (!ctx->result.genkey->created_primary
+              && !ctx->result.genkey->created_sub)
+       err = mk_error (General_Error);
+    }
   return err;
 }
-
-
-
-
-
index d528f8f0223c2e9399c85dcdb8720bd39667f548..dbd620d2c0e30a5e63da587c69f63de4a687a21f 100644 (file)
@@ -34,7 +34,7 @@
  * @r_ctx: Returns the new context
  * 
  * Create a new context to be used with most of the other GPGME
- * functions.  Use gpgme_release_contect() to release all resources
+ * functions.  Use gpgme_release_context() to release all resources
  *
  * Return value: An error code 
  **/
@@ -88,6 +88,7 @@ _gpgme_release_result (GpgmeCtx ctx)
   _gpgme_release_passphrase_result (ctx->result.passphrase);
   _gpgme_release_import_result (ctx->result.import);
   _gpgme_release_delete_result (ctx->result.delete);
+  _gpgme_release_genkey_result (ctx->result.genkey);
   memset (&ctx->result, 0, sizeof (ctx->result));
   _gpgme_set_op_info (ctx, NULL);
 }
index ed6e5db9dbd4595c4216de2b3ecdb507a3a320c8..7b6b90f56152424f8145515319ab2179dd2d57d7 100644 (file)
@@ -1,6 +1,6 @@
 /* ops.h - internal operations stuff 
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2002 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -95,15 +95,23 @@ void _gpgme_passphrase_status_handler (GpgmeCtx ctx, GpgStatusCode code,
 GpgmeError _gpgme_passphrase_start (GpgmeCtx ctx);
 GpgmeError _gpgme_passphrase_result (GpgmeCtx ctx);
 
+/*-- progress.c --*/
+void _gpgme_progress_status_handler (GpgmeCtx ctx, GpgStatusCode code,
+                                    char *args);
+
 /*-- import.c --*/
 void _gpgme_release_import_result (ImportResult res);
 
 /*-- delete.c --*/
 void _gpgme_release_delete_result (DeleteResult res);
 
+/*-- genkey.c --*/
+void _gpgme_release_genkey_result (GenKeyResult res);
+
 /*-- version.c --*/
 const char *_gpgme_compare_versions (const char *my_version,
                                     const char *req_version);
 char *_gpgme_get_program_version (const char *const path);
 
+
 #endif /* OPS_H */
index 3ca993ce22a9162c6dd3b2b30813d2533f84044b..9120a4d01ef1958ed12579a30edd2d6761baae06 100644 (file)
@@ -48,7 +48,6 @@ typedef enum  {
     STATUS_SHM_GET_BOOL       ,
     STATUS_SHM_GET_HIDDEN     ,
     STATUS_NEED_PASSPHRASE    ,
-    STATUS_USERID_HINT        ,
     STATUS_UNEXPECTED         ,
     STATUS_VALIDSIG           ,
     STATUS_SIG_ID            ,
@@ -81,9 +80,11 @@ typedef enum  {
     STATUS_GOT_IT            ,
     STATUS_PROGRESS          ,
     STATUS_SIG_CREATED       ,
+    STATUS_KEY_CREATED       ,
     STATUS_SESSION_KEY        ,
     STATUS_NOTATION_NAME      ,
     STATUS_NOTATION_DATA      ,
+    STATUS_USERID_HINT       ,
     STATUS_POLICY_URL         ,
     STATUS_BEGIN_STREAM       ,
     STATUS_END_STREAM         ,
index 38f58f992ba521cb96b6314b03c8d6c7a74b1186..9ebdfe91d5297a0ee71a50e5b0ded78948283b17 100644 (file)
@@ -1,6 +1,6 @@
 /* types.h -  Some type definitions
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2002 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -84,5 +84,9 @@ typedef struct import_result_s *ImportResult;
 struct delete_result_s;
 typedef struct delete_result_s *DeleteResult;
 
+/*-- genkey.c --*/
+struct genkey_result_s;
+typedef struct genkey_result_s *GenKeyResult;
+
 
 #endif /* TYPES_H */