added new status messages
authorWerner Koch <wk@gnupg.org>
Fri, 7 Sep 2001 12:47:33 +0000 (12:47 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 7 Sep 2001 12:47:33 +0000 (12:47 +0000)
gpgme/ChangeLog
gpgme/encrypt.c
gpgme/rungpg.h
gpgme/verify.c

index 5437ad5ec29240cfc5321831f48271c7af5d5b8c..e4794d9a344f3c6a2fb054a6b3351c57fa11e338 100644 (file)
@@ -1,3 +1,11 @@
+2001-09-07  Werner Koch  <wk@gnupg.org>
+
+       * rungpg.h: Add NO_RECP.
+       * encrypt.c (encrypt_status_handler): Take on No_RECP.
+       (gpgme_op_encrypt): Better error return.
+
+       * verify.c (verify_status_handler): Take on NODATA.
+
 2001-09-03  Werner Koch  <wk@gnupg.org>
 
        * rungpg.h: Added STATUS_INV_RECP.
index 00531a0161bdd40bb7966f0f6e9c613268a74e76..3dc7eb035553ad6e053602724a946afcd8dc1f79 100644 (file)
@@ -39,6 +39,7 @@
 
 
 struct encrypt_result_s {
+    int no_recipients;
     GpgmeData xmlinfo;
 };
 
@@ -126,6 +127,10 @@ encrypt_status_handler ( GpgmeCtx ctx, GpgStatusCode code, char *args )
         append_xml_encinfo (&ctx->result.encrypt->xmlinfo, args);
         break;
 
+      case STATUS_NO_RECP:
+        ctx->result.encrypt->no_recipients = 1; /* i.e. no usable ones */
+        break;
+
       default:
         break;
     }
@@ -222,18 +227,27 @@ GpgmeError
 gpgme_op_encrypt ( GpgmeCtx c, GpgmeRecipients recp,
                    GpgmeData in, GpgmeData out )
 {
-    int rc = gpgme_op_encrypt_start ( c, recp, in, out );
-    if ( !rc ) {
+    int err = gpgme_op_encrypt_start ( c, recp, in, out );
+    if ( !err ) {
         gpgme_wait (c, 1);
+        if ( c->result_type != RESULT_TYPE_ENCRYPT )
+            err = mk_error (General_Error);
+        else if ( c->out_of_core )
+            err = mk_error (Out_Of_Core);
+        else {
+            assert ( c->result.encrypt );
+            if (c->result.encrypt->no_recipients) 
+                err = mk_error (No_Recipients);
+        }
         c->pending = 0;
-        /* FIXME: old gpg versions don't return status info for invalid
+        /* 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 assume that we don't have valid recipients
          * */
-        if (gpgme_data_get_type (out) == GPGME_DATA_TYPE_NONE)
-            rc = mk_error (No_Recipients);
+        if (!err && gpgme_data_get_type (out) == GPGME_DATA_TYPE_NONE)
+            err = mk_error (No_Recipients);
     }
-    return rc;
+    return err;
 }
 
 
index 3c2da5da40ad849266583a92d73b55d6d55ab1b3..6c6fc32a826d918e795c601649d8fd4ff36714a0 100644 (file)
@@ -87,7 +87,8 @@ typedef enum  {
     STATUS_POLICY_URL         ,
     STATUS_BEGIN_STREAM       ,
     STATUS_END_STREAM         ,
-    STATUS_INV_RECP        
+    STATUS_INV_RECP           ,
+    STATUS_NO_RECP        
 } GpgStatusCode;
 
 typedef void (*GpgStatusHandler)( GpgmeCtx, GpgStatusCode code, char *args ); 
index 3b2174b678279086283173ee76b7a313ee3a2cd4..ededc580c61d3574235f6cec96f9355f0749e731 100644 (file)
@@ -152,8 +152,12 @@ verify_status_handler ( GpgmeCtx ctx, GpgStatusCode code, char *args )
     }
 
     switch (code) {
+      case STATUS_NODATA:
+        ctx->result.verify->status = GPGME_SIG_STAT_NOSIG;
+        break;
+
       case STATUS_GOODSIG:
-        /* We just look at VALIDSIG */
+        /* We only look at VALIDSIG */
         break;
 
       case STATUS_VALIDSIG: