test-slotevent.c

The following example shows how to use the slot event interface.

00001 #include "../../config.h"
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <string.h>
00005 
00006 #if !defined(ENABLE_PKCS11H_SLOTEVENT)
00007 int main () {
00008         printf ("!win32, certificate, enum and crypto engine interfaces should be enabled for this test");
00009         exit (0);
00010         return 0;
00011 }
00012 #else
00013 
00014 #if defined(_WIN32)
00015 #include <windows.h>
00016 #else
00017 #include <unistd.h>
00018 #endif
00019 
00020 #include <pkcs11-helper-1.0/pkcs11h-core.h>
00021 
00022 static
00023 void
00024 fatal (const char * const m, CK_RV rv) {
00025         fprintf (stderr, "%s - %08lu - %s\n", m, rv, pkcs11h_getMessage (rv));
00026         exit (1);
00027 }
00028 
00029 static
00030 void
00031 mypause (const char * const m) {
00032         char temp[10];
00033 
00034         fprintf (stdout, "%s", m);
00035         fflush (stdout);
00036         fgets (temp, sizeof (temp), stdin);
00037 }
00038 
00039 static
00040 void
00041 _pkcs11h_hooks_log (
00042         IN void * const global_data,
00043         IN unsigned flags,
00044         IN const char * const format,
00045         IN va_list args
00046 ) {
00047         vfprintf (stdout, format, args);
00048         fprintf (stdout, "\n");
00049         fflush (stdout);
00050 }
00051 
00052 static
00053 void
00054 _pkcs11h_hooks_slotevent (
00055         IN void * const global_data
00056 ) {
00057         printf ("slotevent\n");
00058 }
00059 
00060 int main () {
00061         CK_RV rv;
00062 
00063         printf ("Initializing pkcs11-helper\n");
00064 
00065         if ((rv = pkcs11h_initialize ()) != CKR_OK) {
00066                 fatal ("pkcs11h_initialize failed", rv);
00067         }
00068 
00069         printf ("Registering pkcs11-helper hooks\n");
00070 
00071         if ((rv = pkcs11h_setLogHook (_pkcs11h_hooks_log, NULL)) != CKR_OK) {
00072                 fatal ("pkcs11h_setLogHook failed", rv);
00073         }
00074 
00075         pkcs11h_setLogLevel (TEST_LOG_LEVEL);
00076 
00077         if ((rv = pkcs11h_setSlotEventHook (_pkcs11h_hooks_slotevent, NULL)) != CKR_OK) {
00078                 fatal ("pkcs11h_setSlotEventHook failed", rv);
00079         }
00080 
00081         printf ("Adding provider '%s' as auto\n", TEST_PROVIDER);
00082 
00083         if (
00084                 (rv = pkcs11h_addProvider (
00085                         TEST_PROVIDER,
00086                         TEST_PROVIDER,
00087                         FALSE,
00088                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00089                         PKCS11H_SLOTEVENT_METHOD_AUTO,
00090                         0,
00091                         FALSE
00092                 )) != CKR_OK
00093         ) {
00094                 fatal ("pkcs11h_addProvider failed", rv);
00095         }
00096 
00097         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00098 
00099 #if defined(_WIN32)
00100         Sleep (30*1024);
00101 #else
00102         sleep (30);
00103 #endif
00104 
00105         if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00106                 fatal ("pkcs11h_removeProvider failed", rv);
00107         }
00108 
00109         printf ("Adding provider '%s' as trigger\n", TEST_PROVIDER);
00110 
00111         if (
00112                 (rv = pkcs11h_addProvider (
00113                         TEST_PROVIDER,
00114                         TEST_PROVIDER,
00115                         FALSE,
00116                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00117                         PKCS11H_SLOTEVENT_METHOD_TRIGGER,
00118                         0,
00119                         FALSE
00120                 )) != CKR_OK
00121         ) {
00122                 fatal ("pkcs11h_addProvider failed", rv);
00123         }
00124 
00125         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00126 
00127 #if defined(_WIN32)
00128         Sleep (30*1024);
00129 #else
00130         sleep (30);
00131 #endif
00132 
00133         if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00134                 fatal ("pkcs11h_removeProvider failed", rv);
00135         }
00136 
00137         printf ("Adding provider '%s' as poll\n", TEST_PROVIDER);
00138 
00139         if (
00140                 (rv = pkcs11h_addProvider (
00141                         TEST_PROVIDER,
00142                         TEST_PROVIDER,
00143                         FALSE,
00144                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00145                         PKCS11H_SLOTEVENT_METHOD_POLL,
00146                         0,
00147                         FALSE
00148                 )) != CKR_OK
00149         ) {
00150                 fatal ("pkcs11h_addProvider failed", rv);
00151         }
00152 
00153         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00154 
00155 #if defined(_WIN32)
00156         Sleep (30*1024);
00157 #else
00158         sleep (30);
00159 #endif
00160 
00161         if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00162                 fatal ("pkcs11h_removeProvider failed", rv);
00163         }
00164 
00165         printf ("Adding provider '%s' as fetch\n", TEST_PROVIDER);
00166 
00167         if (
00168                 (rv = pkcs11h_addProvider (
00169                         TEST_PROVIDER,
00170                         TEST_PROVIDER,
00171                         FALSE,
00172                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00173                         PKCS11H_SLOTEVENT_METHOD_FETCH,
00174                         0,
00175                         FALSE
00176                 )) != CKR_OK
00177         ) {
00178                 fatal ("pkcs11h_addProvider failed", rv);
00179         }
00180 
00181         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00182 
00183 #if defined(_WIN32)
00184         Sleep (30*1024);
00185 #else
00186         sleep (30);
00187 #endif
00188 
00189         printf ("Terminating pkcs11-helper\n");
00190 
00191         if ((rv = pkcs11h_terminate ()) != CKR_OK) {
00192                 fatal ("pkcs11h_terminate failed", rv);
00193         }
00194 
00195         exit (0);
00196         return 0;
00197 }
00198 
00199 #endif

pkcs11-helper, Copyright (C) Alon Bar-Lev <alon.barlev@gmail.com>OpenSC-Project.org Logo