2002-07-28 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / encrypt.c
index 0a3970c..57ec978 100644 (file)
@@ -28,6 +28,7 @@
 #include "util.h"
 #include "context.h"
 #include "ops.h"
+#include "wait.h"
 
 #define SKIP_TOKEN_OR_RETURN(a) do { \
     while (*(a) && *(a) != ' ') (a)++; \
@@ -99,7 +100,7 @@ append_xml_encinfo (GpgmeData *rdh, char *args)
 
 
 void
-_gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
+_gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
 {
   if (ctx->error)
     return;
@@ -107,7 +108,7 @@ _gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
 
   switch (code)
     {
-    case STATUS_EOF:
+    case GPGME_STATUS_EOF:
       if (ctx->result.encrypt->xmlinfo)
        {
          append_xml_encinfo (&ctx->result.encrypt->xmlinfo, NULL);
@@ -120,12 +121,12 @@ _gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
        ctx->error = mk_error (Invalid_Recipients);
       break;
 
-    case STATUS_INV_RECP:
+    case GPGME_STATUS_INV_RECP:
       ctx->result.encrypt->invalid_recipients++;
       append_xml_encinfo (&ctx->result.encrypt->xmlinfo, args);
       break;
 
-    case STATUS_NO_RECP:
+    case GPGME_STATUS_NO_RECP:
       ctx->result.encrypt->no_valid_recipients = 1;
       break;
 
@@ -136,24 +137,19 @@ _gpgme_encrypt_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
 
 
 void
-_gpgme_encrypt_sym_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
+_gpgme_encrypt_sym_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
 {
   _gpgme_passphrase_status_handler (ctx, code, args);
 }
 
 
-GpgmeError
-gpgme_op_encrypt_start (GpgmeCtx ctx, GpgmeRecipients recp, GpgmeData plain,
-                       GpgmeData ciph)
+static GpgmeError
+_gpgme_op_encrypt_start (GpgmeCtx ctx, int synchronous,
+                        GpgmeRecipients recp, GpgmeData plain, GpgmeData ciph)
 {
-  int err = 0;
+  GpgmeError err = 0;
   int symmetric = 0;
 
-  fail_on_pending_request (ctx);
-  ctx->pending = 1;
-
-  _gpgme_release_result (ctx);
-
   /* Do some checks.  */
   if (!recp)
     symmetric = 1;
@@ -163,11 +159,7 @@ gpgme_op_encrypt_start (GpgmeCtx ctx, GpgmeRecipients recp, GpgmeData plain,
       goto leave;
     }
 
-  /* Create an engine object.  */
-  _gpgme_engine_release (ctx->engine);
-  ctx->engine = NULL;
-  err = _gpgme_engine_new (ctx->use_cms ? GPGME_PROTOCOL_CMS
-                          : GPGME_PROTOCOL_OpenPGP, &ctx->engine);
+  err = _gpgme_op_reset (ctx, synchronous);
   if (err)
     goto leave;
 
@@ -216,6 +208,14 @@ gpgme_op_encrypt_start (GpgmeCtx ctx, GpgmeRecipients recp, GpgmeData plain,
 }
 
 
+GpgmeError
+gpgme_op_encrypt_start (GpgmeCtx ctx, GpgmeRecipients recp, GpgmeData plain,
+                       GpgmeData ciph)
+{
+  return _gpgme_op_encrypt_start (ctx, 0, recp, plain, ciph);
+}
+
+
 /**
  * gpgme_op_encrypt:
  * @c: The context
@@ -233,10 +233,10 @@ GpgmeError
 gpgme_op_encrypt (GpgmeCtx ctx, GpgmeRecipients recp,
                  GpgmeData plain, GpgmeData cipher)
 {
-  int err = gpgme_op_encrypt_start (ctx, recp, plain, cipher);
+  int err = _gpgme_op_encrypt_start (ctx, 1, recp, plain, cipher);
   if (!err)
     {
-      gpgme_wait (ctx, &err, 1);
+      err = _gpgme_wait_one (ctx);
       /* Old gpg versions don't return status info for invalid
         recipients, so we simply check whether we got any output at
         all, and if not we assume that we don't have valid