Blame tests/opassuan/t-command.c

Packit d7e8d0
/* t-command.c - Regression test.
Packit Service 30b792
 * Copyright (C) 2009 g10 Code GmbH
Packit Service 30b792
 *
Packit Service 30b792
 * This file is part of GPGME.
Packit Service 30b792
 *
Packit Service 30b792
 * GPGME is free software; you can redistribute it and/or modify it
Packit Service 30b792
 * under the terms of the GNU Lesser General Public License as
Packit Service 30b792
 * published by the Free Software Foundation; either version 2.1 of
Packit Service 30b792
 * the License, or (at your option) any later version.
Packit Service 30b792
 *
Packit Service 30b792
 * GPGME is distributed in the hope that it will be useful, but
Packit Service 30b792
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 30b792
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 30b792
 * Lesser General Public License for more details.
Packit Service 30b792
 *
Packit Service 30b792
 * You should have received a copy of the GNU Lesser General Public
Packit Service 30b792
 * License along with this program; if not, see <https://gnu.org/licenses/>.
Packit Service 30b792
 * SPDX-License-Identifier: LGPL-2.1-or-later
Packit d7e8d0
 */
Packit d7e8d0
Packit d7e8d0
#ifdef HAVE_CONFIG_H
Packit d7e8d0
#include <config.h>
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
#include <stdlib.h>
Packit d7e8d0
#include <string.h>
Packit d7e8d0
#include <locale.h>
Packit d7e8d0
#include <assert.h>
Packit d7e8d0
Packit d7e8d0
#include <gpgme.h>
Packit d7e8d0
Packit d7e8d0
#define fail_if_err(err)					\
Packit d7e8d0
  do								\
Packit d7e8d0
    {								\
Packit d7e8d0
      if (err)							\
Packit d7e8d0
        {							\
Packit d7e8d0
          fprintf (stderr, "%s:%d: %s: %s (%d.%d)\n",        	\
Packit d7e8d0
                   __FILE__, __LINE__, gpgme_strsource (err),	\
Packit d7e8d0
		   gpgme_strerror (err),                        \
Packit d7e8d0
                   gpgme_err_source (err), gpgme_err_code (err)); \
Packit d7e8d0
          exit (1);						\
Packit d7e8d0
        }							\
Packit d7e8d0
    }								\
Packit d7e8d0
  while (0)
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
static gpgme_error_t
Packit d7e8d0
data_cb (void *opaque, const void *data, size_t datalen)
Packit d7e8d0
{
Packit d7e8d0
  (void)opaque;
Packit d7e8d0
  (void)data;
Packit d7e8d0
Packit d7e8d0
  printf ("DATA_CB: datalen=%d\n", (int)datalen);
Packit d7e8d0
  return 0;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
static gpgme_error_t
Packit d7e8d0
inq_cb (void *opaque, const char *name, const char *args,
Packit d7e8d0
        gpgme_data_t *r_data)
Packit d7e8d0
{
Packit d7e8d0
  gpgme_data_t data;
Packit d7e8d0
  gpgme_error_t err;
Packit d7e8d0
Packit d7e8d0
  (void)opaque;
Packit d7e8d0
Packit d7e8d0
  if (name)
Packit d7e8d0
    {
Packit d7e8d0
      printf ("INQ_CB: name=`%s' args=`%s'\n", name, args);
Packit d7e8d0
      /* There shall be no data object.  */
Packit d7e8d0
      assert (!*r_data);
Packit d7e8d0
Packit d7e8d0
      err = gpgme_data_new (&data);
Packit d7e8d0
      fail_if_err (err);
Packit d7e8d0
      *r_data = data;
Packit d7e8d0
      printf ("        sending data object %p\n", data);
Packit d7e8d0
    }
Packit d7e8d0
  else /* Finished using the formerly returned data object.  */
Packit d7e8d0
    {
Packit d7e8d0
      printf ("INQ_CB: data object %p finished\n", *r_data);
Packit d7e8d0
      /* There shall be a data object so that it can be cleaned up. */
Packit d7e8d0
      assert (r_data);
Packit d7e8d0
Packit d7e8d0
      gpgme_data_release (*r_data);
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
  /* Uncomment the next lines and send a "SCD LEARN" to test sending
Packit d7e8d0
     cancel from in inquiry.  */
Packit d7e8d0
  /* if (name && !strcmp (name, "KNOWNCARDP")) */
Packit d7e8d0
  /*   return gpgme_error (GPG_ERR_ASS_CANCELED); */
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
  return 0;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
static gpgme_error_t
Packit d7e8d0
status_cb (void *opaque, const char *status, const char *args)
Packit d7e8d0
{
Packit d7e8d0
  (void)opaque;
Packit d7e8d0
Packit d7e8d0
  printf ("STATUS_CB: status=`%s'  args=`%s'\n", status, args);
Packit d7e8d0
  return 0;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
int
Packit d7e8d0
main (int argc, char **argv)
Packit d7e8d0
{
Packit d7e8d0
  gpgme_error_t err;
Packit d7e8d0
  gpgme_error_t op_err;
Packit d7e8d0
  gpgme_ctx_t ctx;
Packit d7e8d0
  const char *command;
Packit d7e8d0
Packit d7e8d0
  gpgme_check_version (NULL);
Packit d7e8d0
#ifndef HAVE_W32_SYSTEM
Packit d7e8d0
  setlocale (LC_ALL, "");
Packit d7e8d0
  gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
Packit d7e8d0
  gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
  if (argc)
Packit d7e8d0
    {
Packit d7e8d0
      argc--;
Packit d7e8d0
      argv++;
Packit d7e8d0
    }
Packit d7e8d0
  command = argc? *argv : "NOP";
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
  err = gpgme_new (&ctx;;
Packit d7e8d0
  fail_if_err (err);
Packit d7e8d0
Packit d7e8d0
  err = gpgme_set_protocol (ctx, GPGME_PROTOCOL_ASSUAN);
Packit d7e8d0
  fail_if_err (err);
Packit d7e8d0
Packit d7e8d0
  err = gpgme_op_assuan_transact_ext (ctx, command, data_cb, NULL,
Packit d7e8d0
                                  inq_cb, NULL, status_cb, NULL, &op_err);
Packit d7e8d0
  fail_if_err (err || op_err);
Packit d7e8d0
Packit d7e8d0
  gpgme_release (ctx);
Packit d7e8d0
Packit d7e8d0
  return 0;
Packit d7e8d0
}
Packit d7e8d0