First take on the low-level assuan interface.
[gpgme.git] / tests / opassuan / t-command.c
1 /* t-command.c - Regression test.
2    Copyright (C) 2009 g10 Code GmbH
3
4    This file is part of GPGME.
5
6    GPGME is free software; you can redistribute it and/or modify it
7    under the terms of the GNU Lesser General Public License as
8    published by the Free Software Foundation; either version 2.1 of
9    the License, or (at your option) any later version.
10    
11    GPGME is distributed in the hope that it will be useful, but
12    WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15    
16    You should have received a copy of the GNU Lesser General Public
17    License along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <stdlib.h>
25 #include <string.h>
26 #include <locale.h>
27
28 #include <gpgme.h>
29
30 #define fail_if_err(err)                                        \
31   do                                                            \
32     {                                                           \
33       if (err)                                                  \
34         {                                                       \
35           fprintf (stderr, "%s:%d: %s: %s (%d.%d)\n",           \
36                    __FILE__, __LINE__, gpg_strsource (err),     \
37                    gpg_strerror (err),                          \
38                    gpg_err_source (err), gpg_err_code (err));   \
39           exit (1);                                             \
40         }                                                       \
41     }                                                           \
42   while (0)
43
44
45 static gpg_error_t
46 data_cb (void *opaque, const void *data, size_t datalen)
47 {
48   printf ("DATA_CB: datalen=%d\n", (int)datalen);
49   return 0;
50 }     
51
52
53 static gpg_error_t
54 inq_cb (void *opaque, const char *name, const char *args,
55         gpgme_assuan_sendfnc_t sendfnc,
56         gpgme_assuan_sendfnc_ctx_t sendfnc_value)
57 {
58   printf ("INQ_CB: name=`%s' args=`%s'\n", name, args);
59
60   return 0;
61 }     
62
63
64 static gpg_error_t
65 status_cb (void *opaque, const char *status, const char *args)
66 {
67   printf ("STATUS_CB: status=`%s'  args=`%s'\n", status, args);
68   return 0;
69 }     
70
71
72
73
74
75
76 int 
77 main (int argc, char **argv)
78 {
79   gpgme_error_t err;
80   gpgme_ctx_t ctx;
81   const char *command;
82
83   gpgme_check_version (NULL);
84 #ifndef HAVE_W32_SYSTEM
85   setlocale (LC_ALL, "");
86   gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
87   gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
88 #endif
89
90   if (argc)
91     {
92       argc--;
93       argv++;
94     }
95   command = argc? *argv : "NOP";
96   
97
98   err = gpgme_new (&ctx);
99   fail_if_err (err);
100
101   err = gpgme_set_protocol (ctx, GPGME_PROTOCOL_ASSUAN);
102   fail_if_err (err);
103
104   err = gpgme_op_assuan_transact (ctx, command,
105                                   data_cb, NULL,
106                                   inq_cb, NULL,
107                                   status_cb, NULL);
108   fail_if_err (err);
109   err = gpgme_op_assuan_result (ctx);
110   if (err)
111     fprintf (stderr, "assuan command `%s' failed: %s <%s> (%d)\n", 
112              command, gpg_strerror (err), gpg_strsource (err), err);
113   else
114     fprintf (stderr, "assuan command `%s' succeeded\n", command);
115
116
117   gpgme_release (ctx);
118
119   return 0;
120 }
121