2009-10-27 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / src / getauditlog.c
1 /* getauditlog.c - Retrieve the audit log.
2    Copyright (C) 2007 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 #if HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include "gpgme.h"
25 #include "debug.h"
26 #include "context.h"
27 #include "ops.h"
28
29 \f
30 static gpgme_error_t
31 getauditlog_status_handler (void *priv, gpgme_status_code_t code, char *args)
32 {
33   return 0;
34 }
35
36
37 static gpgme_error_t
38 getauditlog_start (gpgme_ctx_t ctx, int synchronous,
39                    gpgme_data_t output, unsigned int flags)
40 {
41   gpgme_error_t err;
42
43   if (!output)
44     return gpg_error (GPG_ERR_INV_VALUE);
45
46   err = _gpgme_op_reset (ctx, ((synchronous&255) | 256) );
47   if (err)
48     return err;
49
50   _gpgme_engine_set_status_handler (ctx->engine, 
51                                     getauditlog_status_handler, ctx);
52
53   return _gpgme_engine_op_getauditlog (ctx->engine, output, flags);
54 }
55
56
57
58 /* Return the auditlog for the current session.  This may be called
59    after a successful or failed operation.  If no audit log is
60    available GPG_ERR_NO_DATA is returned.  This is the asynchronous
61    variant. */
62 gpgme_error_t
63 gpgme_op_getauditlog_start (gpgme_ctx_t ctx, 
64                             gpgme_data_t output, unsigned int flags)
65 {
66   TRACE_BEG2 (DEBUG_CTX, "gpgme_op_getauditlog_start", ctx,
67               "output=%p, flags=0x%x", output, flags);
68   return TRACE_ERR (getauditlog_start (ctx, 0, output, flags));
69 }
70
71
72 /* Return the auditlog for the current session.  This may be called
73    after a successful or failed operation.  If no audit log is
74    available GPG_ERR_NO_DATA is returned.  This is the synchronous
75    variant. */
76 gpgme_error_t
77 gpgme_op_getauditlog (gpgme_ctx_t ctx, gpgme_data_t output, unsigned int flags)
78 {
79   gpgme_error_t err;
80
81   TRACE_BEG2 (DEBUG_CTX, "gpgme_op_getauditlog", ctx,
82               "output=%p, flags=0x%x", output, flags);
83
84   err = getauditlog_start (ctx, 1, output, flags);
85   if (!err)
86     err = _gpgme_wait_one (ctx);
87   return TRACE_ERR (err);
88 }
89