2001-11-16 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / gpgme.c
index 1140c4c..2e010bc 100644 (file)
@@ -22,6 +22,7 @@
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #include "util.h"
 #include <assert.h>
 
 #include "util.h"
@@ -81,25 +82,15 @@ gpgme_release ( GpgmeCtx c )
 
 
 void
 
 
 void
-_gpgme_release_result ( GpgmeCtx c )
+_gpgme_release_result (GpgmeCtx c)
 {
 {
-    switch (c->result_type) {
-      case RESULT_TYPE_NONE:
-        break;
-      case RESULT_TYPE_VERIFY:
-        _gpgme_release_verify_result ( c->result.verify );
-        break;
-      case RESULT_TYPE_DECRYPT:
-        _gpgme_release_decrypt_result ( c->result.decrypt );
-        break;
-      case RESULT_TYPE_SIGN:
-        _gpgme_release_sign_result ( c->result.sign );
-        break;
-    }
-
-    c->result.verify = NULL;
-    c->result_type = RESULT_TYPE_NONE;
-    _gpgme_set_op_info (c, NULL);
+  _gpgme_release_verify_result (c->result.verify);
+  _gpgme_release_decrypt_result (c->result.decrypt);
+  _gpgme_release_sign_result (c->result.sign);
+  _gpgme_release_encrypt_result (c->result.encrypt);
+  _gpgme_release_passphrase_result (c->result.passphrase);
+  memset (&c->result, 0, sizeof (c->result));
+  _gpgme_set_op_info (c, NULL);
 }
 
 
 }
 
 
@@ -124,9 +115,10 @@ gpgme_cancel (GpgmeCtx c)
  * gpgme_get_notation:
  * @c: the context 
  * 
  * gpgme_get_notation:
  * @c: the context 
  * 
- * If there is notation data available from the last signature check, this
- * function may be used to return this notation data as a string.  The string
- * is an XML represantaton of that data embedded in a %<notation> container.
+ * If there is notation data available from the last signature check,
+ * this function may be used to return this notation data as a string.
+ * The string is an XML represantaton of that data embedded in a
+ * %&lt;notation&gt; container.
  * 
  * Return value: An XML string or NULL if no notation data is available.
  **/
  * 
  * Return value: An XML string or NULL if no notation data is available.
  **/
@@ -149,18 +141,21 @@ gpgme_get_notation ( GpgmeCtx c )
  * operation available or the operation has not yet finished.
  *
  * Here is a sample information we return:
  * operation available or the operation has not yet finished.
  *
  * Here is a sample information we return:
-<GnupgOperationInfo>
-  <signature>
-    <detached/> <!-- or cleartext or standard -->
-    <algo>17</algo>
-    <hashalgo>2</hashalgo>
-    <micalg>pgp-sha1</micalg>
-    <sigclass>01</sigclass>
-    <created>9222222</created>
-    <fpr>121212121212121212</fpr>
-  </signature>
-</GnupgOperationInfo>
- * 
+ * <literal>
+ * <![CDATA[
+ * <GnupgOperationInfo>
+ *   <signature>
+ *     <detached/> <!-- or cleartext or standard -->
+ *     <algo>17</algo>
+ *     <hashalgo>2</hashalgo>
+ *     <micalg>pgp-sha1</micalg>
+ *     <sigclass>01</sigclass>
+ *     <created>9222222</created>
+ *     <fpr>121212121212121212</fpr>
+ *   </signature>
+ * </GnupgOperationInfo>
+ * ]]>
+ * </literal>
  * Return value: NULL for no info available or an XML string 
  **/
 char *
  * Return value: NULL for no info available or an XML string 
  **/
 char *
@@ -188,6 +183,28 @@ _gpgme_set_op_info (GpgmeCtx c, GpgmeData info)
         c->op_info = info;
 }
 
         c->op_info = info;
 }
 
+GpgmeError
+gpgme_set_protocol (GpgmeCtx c, GpgmeProtocol prot)
+{
+  if (!c)
+    return mk_error (Invalid_Value);
+  
+  switch (prot)
+    {
+    case GPGME_PROTOCOL_OpenPGP:
+      c->use_cms = 0;
+      break;
+    case GPGME_PROTOCOL_CMS:
+      c->use_cms = 1;
+      break;
+    case GPGME_PROTOCOL_AUTO:
+      return mk_error (Not_Implemented);
+    default:
+      return mk_error (Invalid_Value);
+    }
+  
+  return 0;
+}
 
 /**
  * gpgme_set_armor:
 
 /**
  * gpgme_set_armor:
@@ -227,7 +244,8 @@ gpgme_get_armor (GpgmeCtx c)
  * @yes: boolean flag whether textmode should be enabled
  * 
  * Enable or disable the use of the special textmode.  Textmode is for example
  * @yes: boolean flag whether textmode should be enabled
  * 
  * Enable or disable the use of the special textmode.  Textmode is for example
- * used for MIME (RFC2015) signatures
+ * used for the RFC2015 signatures; note that the updated RFC 3156 mandates 
+ * that the MUA does some preparations so that textmode is not anymore needed.
  **/
 void
 gpgme_set_textmode ( GpgmeCtx c, int yes )
  **/
 void
 gpgme_set_textmode ( GpgmeCtx c, int yes )
@@ -302,12 +320,15 @@ gpgme_set_keylist_mode ( GpgmeCtx c, int mode )
 void
 gpgme_set_passphrase_cb ( GpgmeCtx c, GpgmePassphraseCb cb, void *cb_value )
 {
 void
 gpgme_set_passphrase_cb ( GpgmeCtx c, GpgmePassphraseCb cb, void *cb_value )
 {
-    c->passphrase_cb = cb;
-    c->passphrase_cb_value = cb_value;
+  if (c)
+    {
+      c->passphrase_cb = cb;
+      c->passphrase_cb_value = cb_value;
+    }
 }
 
 /**
 }
 
 /**
- * gpgme_set_pprogress_cb:
+ * gpgme_set_progress_cb:
  * @c: the context 
  * @cb: A callback function
  * @cb_value: The value passed to the callback function
  * @c: the context 
  * @cb: A callback function
  * @cb_value: The value passed to the callback function
@@ -326,8 +347,11 @@ gpgme_set_passphrase_cb ( GpgmeCtx c, GpgmePassphraseCb cb, void *cb_value )
 void
 gpgme_set_progress_cb ( GpgmeCtx c, GpgmeProgressCb cb, void *cb_value )
 {
 void
 gpgme_set_progress_cb ( GpgmeCtx c, GpgmeProgressCb cb, void *cb_value )
 {
-    c->progress_cb = cb;
-    c->progress_cb_value = cb_value;
+  if (c)
+    {
+      c->progress_cb = cb;
+      c->progress_cb_value = cb_value;
+    }
 }
 
 
 }