* scdaemon.c (main): Do the last change the usual way. This is so
[gnupg.git] / scd / scdaemon.h
index 9c8af5d..1dd32ae 100644 (file)
@@ -1,5 +1,5 @@
 /* scdaemon.h - Global definitions for the SCdaemon
- *     Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ *     Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
 #ifndef SCDAEMON_H
 #define SCDAEMON_H
 
+#ifdef GPG_ERR_SOURCE_DEFAULT
+#error GPG_ERR_SOURCE_DEFAULT already defined
+#endif
+#define GPG_ERR_SOURCE_DEFAULT  GPG_ERR_SOURCE_SCD
+#include <gpg-error.h>
+#include <errno.h>
+
 #include <time.h>
 #include <gcrypt.h>
 #include "../common/util.h"
 #include "../common/errors.h"
 
+
 #define MAX_DIGEST_LEN 24 
 
 /* A large struct name "opt" to keep global flags */
 struct {
   unsigned int debug; /* debug flags (DBG_foo_VALUE) */
+  int debug_sc;     /* OpenSC debug level */
   int verbose;      /* verbosity level */
   int quiet;        /* be as quiet as possible */
   int dry_run;      /* don't change any persistent data */
   int batch;        /* batch mode */
   const char *homedir; /* configuration directory name */
+  const char *ctapi_driver; /* Library to access the ctAPI. */
+  const char *pcsc_driver;  /* Library to access the PC/SC system. */
+  const char *reader_port;  /* NULL or reder port to use. */
+  int disable_opensc;  /* Disable the use of the OpenSC framework. */
+  int disable_ccid;    /* Disable the use of the internal CCID driver. */
+  int allow_admin;     /* Allow the use of admin commands for certain
+                          cards. */
 } opt;
 
 
@@ -47,6 +63,7 @@ struct {
 #define DBG_MEMSTAT_VALUE 128  /* show memory statistics */
 #define DBG_HASHING_VALUE 512  /* debug hashing operations */
 #define DBG_ASSUAN_VALUE 1024   
+#define DBG_CARD_IO_VALUE 2048
 
 #define DBG_COMMAND (opt.debug & DBG_COMMAND_VALUE)
 #define DBG_CRYPTO  (opt.debug & DBG_CRYPTO_VALUE)
@@ -54,21 +71,29 @@ struct {
 #define DBG_CACHE   (opt.debug & DBG_CACHE_VALUE)
 #define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
 #define DBG_ASSUAN  (opt.debug & DBG_ASSUAN_VALUE)
+#define DBG_CARD_IO (opt.debug & DBG_CARD_IO_VALUE)
 
 struct server_local_s;
 struct card_ctx_s;
+struct app_ctx_s;
 
 struct server_control_s {
   struct server_local_s *server_local;
+  int reader_slot;  /* Slot of the open reader or -1 if not open. */
   struct card_ctx_s *card_ctx;
+  struct app_ctx_s *app_ctx;
   struct {
     unsigned char *value;  
     int valuelen;
   } in_data;  /* helper to store the value we are going to sign */
 
 };
+
 typedef struct server_control_s *CTRL;
+typedef struct server_control_s *ctrl_t;
 typedef struct card_ctx_s *CARD;
+typedef struct app_ctx_s *APP;
+typedef struct app_ctx_s *app_t;
 
 /*-- scdaemon.c --*/
 void scd_exit (int rc);
@@ -76,6 +101,8 @@ void scd_init_default_ctrl (CTRL ctrl);
 
 /*-- command.c --*/
 void scd_command_handler (int);
+void send_status_info (CTRL ctrl, const char *keyword, ...);
+void scd_update_reader_status_file (void);
 
 /*-- card.c --*/
 int card_open (CARD *rcard);
@@ -84,6 +111,7 @@ int card_get_serial_and_stamp (CARD card, char **serial, time_t *stamp);
 int card_enum_keypairs (CARD card, int idx,
                         unsigned char *keygrip,
                         char **keyid);
+int card_enum_certs (CARD card, int idx, char **certid, int *certtype);
 int card_read_cert (CARD card, const char *certidstr,
                     unsigned char **cert, size_t *ncert);
 int card_sign (CARD card,
@@ -91,12 +119,12 @@ int card_sign (CARD card,
                int (pincb)(void*, const char *, char **),
                void *pincb_arg,
                const void *indata, size_t indatalen,
-               void **outdata, size_t *outdatalen );
+               unsigned char **outdata, size_t *outdatalen );
 int card_decipher (CARD card, const char *keyidstr,
                    int (pincb)(void*, const char *, char **),
                    void *pincb_arg,
                    const void *indata, size_t indatalen,
-                   void **outdata, size_t *outdatalen);
+                   unsigned char **outdata, size_t *outdatalen);
 
 
 #endif /*SCDAEMON_H*/