common: New function get_assuan_server_version.
authorWerner Koch <wk@gnupg.org>
Fri, 8 Jan 2016 05:42:29 +0000 (06:42 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 8 Jan 2016 05:42:29 +0000 (06:42 +0100)
* common/asshelp.c: Include membuf.h.
(get_assuan_server_version): New.
* g10/call-agent.c (agent_get_version): Use new function.
--

Signed-off-by: Werner Koch <wk@gnupg.org>
common/asshelp.c
common/asshelp.h
g10/call-agent.c

index d33ffb5..f2b4402 100644 (file)
@@ -42,6 +42,7 @@
 #include "exechelp.h"
 #include "sysutils.h"
 #include "status.h"
+#include "membuf.h"
 #include "asshelp.h"
 
 /* The type we use for lock_agent_spawning.  */
@@ -699,3 +700,40 @@ start_new_dirmngr (assuan_context_t *r_ctx,
   *r_ctx = ctx;
   return 0;
 }
+
+
+/* Return the version of a server using "GETINFO version".  On success
+   0 is returned and R_VERSION receives a malloced string with the
+   version which must be freed by the caller.  On error NULL is stored
+   at R_VERSION and an error code returned.  Mode is in general 0 but
+   certian values may be used to modify the used version command:
+
+      MODE == 0 = Use "GETINFO version"
+      MODE == 2 - Use "SCD GETINFO version"
+ */
+gpg_error_t
+get_assuan_server_version (assuan_context_t ctx, int mode, char **r_version)
+{
+  gpg_error_t err;
+  membuf_t data;
+
+  init_membuf (&data, 64);
+  err = assuan_transact (ctx,
+                         mode == 2? "SCD GETINFO version"
+                         /**/     : "GETINFO version",
+                         put_membuf_cb, &data,
+                         NULL, NULL, NULL, NULL);
+  if (err)
+    {
+      xfree (get_membuf (&data, NULL));
+      *r_version = NULL;
+    }
+  else
+    {
+      put_membuf (&data, "", 1);
+      *r_version = get_membuf (&data, NULL);
+      if (!*r_version)
+        err = gpg_error_from_syserror ();
+    }
+  return err;
+}
index 35d2115..20414bd 100644 (file)
@@ -74,6 +74,10 @@ start_new_dirmngr (assuan_context_t *r_ctx,
                    gpg_error_t (*status_cb)(ctrl_t, int, ...),
                    ctrl_t status_cb_arg);
 
+/* Return the version of a server using "GETINFO version".  */
+gpg_error_t get_assuan_server_version (assuan_context_t ctx,
+                                       int mode, char **r_version);
+
 
 /*-- asshelp2.c --*/
 
index 363fc85..3600579 100644 (file)
@@ -2408,27 +2408,11 @@ gpg_error_t
 agent_get_version (ctrl_t ctrl, char **r_version)
 {
   gpg_error_t err;
-  membuf_t data;
 
   err = start_agent (ctrl, 0);
   if (err)
     return err;
 
-  init_membuf (&data, 64);
-  err = assuan_transact (agent_ctx, "GETINFO version",
-                        put_membuf_cb, &data,
-                        NULL, NULL, NULL, NULL);
-  if (err)
-    {
-      xfree (get_membuf (&data, NULL));
-      *r_version = NULL;
-    }
-  else
-    {
-      put_membuf (&data, "", 1);
-      *r_version = get_membuf (&data, NULL);
-      if (!*r_version)
-        err = gpg_error_from_syserror ();
-    }
+  err = get_assuan_server_version (agent_ctx, 0, r_version);
   return err;
 }