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         fgets (temp, sizeof (temp), stdin);
00036 }
00037 
00038 static
00039 void
00040 _pkcs11h_hooks_log (
00041         IN void * const global_data,
00042         IN unsigned flags,
00043         IN const char * const format,
00044         IN va_list args
00045 ) {
00046         vfprintf (stdout, format, args);
00047         fprintf (stdout, "\n");
00048 }
00049 
00050 static
00051 void
00052 _pkcs11h_hooks_slotevent (
00053         IN void * const global_data
00054 ) {
00055         printf ("slotevent\n");
00056 }
00057 
00058 int main () {
00059         CK_RV rv;
00060 
00061         printf ("Initializing pkcs11-helper\n");
00062 
00063         if ((rv = pkcs11h_initialize ()) != CKR_OK) {
00064                 fatal ("pkcs11h_initialize failed", rv);
00065         }
00066 
00067         printf ("Registering pkcs11-helper hooks\n");
00068 
00069         if ((rv = pkcs11h_setLogHook (_pkcs11h_hooks_log, NULL)) != CKR_OK) {
00070                 fatal ("pkcs11h_setLogHook failed", rv);
00071         }
00072 
00073         pkcs11h_setLogLevel (TEST_LOG_LEVEL);
00074 
00075         if ((rv = pkcs11h_setSlotEventHook (_pkcs11h_hooks_slotevent, NULL)) != CKR_OK) {
00076                 fatal ("pkcs11h_setSlotEventHook failed", rv);
00077         }
00078 
00079         printf ("Adding provider '%s' as auto\n", TEST_PROVIDER);
00080 
00081         if (
00082                 (rv = pkcs11h_addProvider (
00083                         TEST_PROVIDER,
00084                         TEST_PROVIDER,
00085                         FALSE,
00086                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00087                         PKCS11H_SLOTEVENT_METHOD_AUTO,
00088                         0,
00089                         FALSE
00090                 )) != CKR_OK
00091         ) {
00092                 fatal ("pkcs11h_terminate failed", rv);
00093         }
00094 
00095         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00096 
00097 #if defined(_WIN32)
00098         Sleep (30*1024);
00099 #else
00100         sleep (30);
00101 #endif
00102 
00103         if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00104                 fatal ("pkcs11h_removeProvider failed", rv);
00105         }
00106 
00107         printf ("Adding provider '%s' as trigger\n", TEST_PROVIDER);
00108 
00109         if (
00110                 (rv = pkcs11h_addProvider (
00111                         TEST_PROVIDER,
00112                         TEST_PROVIDER,
00113                         FALSE,
00114                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00115                         PKCS11H_SLOTEVENT_METHOD_TRIGGER,
00116                         0,
00117                         FALSE
00118                 )) != CKR_OK
00119         ) {
00120                 fatal ("pkcs11h_terminate failed", rv);
00121         }
00122 
00123         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00124 
00125 #if defined(_WIN32)
00126         Sleep (30*1024);
00127 #else
00128         sleep (30);
00129 #endif
00130 
00131         if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00132                 fatal ("pkcs11h_removeProvider failed", rv);
00133         }
00134 
00135         printf ("Adding provider '%s' as poll\n", TEST_PROVIDER);
00136 
00137         if (
00138                 (rv = pkcs11h_addProvider (
00139                         TEST_PROVIDER,
00140                         TEST_PROVIDER,
00141                         FALSE,
00142                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00143                         PKCS11H_SLOTEVENT_METHOD_POLL,
00144                         0,
00145                         FALSE
00146                 )) != CKR_OK
00147         ) {
00148                 fatal ("pkcs11h_terminate failed", rv);
00149         }
00150 
00151         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00152 
00153 #if defined(_WIN32)
00154         Sleep (30*1024);
00155 #else
00156         sleep (30);
00157 #endif
00158 
00159         printf ("Adding provider '%s' as fetch\n", TEST_PROVIDER);
00160 
00161         if (
00162                 (rv = pkcs11h_addProvider (
00163                         TEST_PROVIDER,
00164                         TEST_PROVIDER,
00165                         FALSE,
00166                         PKCS11H_PRIVATEMODE_MASK_AUTO,
00167                         PKCS11H_SLOTEVENT_METHOD_FETCH,
00168                         0,
00169                         FALSE
00170                 )) != CKR_OK
00171         ) {
00172                 fatal ("pkcs11h_terminate failed", rv);
00173         }
00174 
00175         printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00176 
00177 #if defined(_WIN32)
00178         Sleep (30*1024);
00179 #else
00180         sleep (30);
00181 #endif
00182 
00183         printf ("Terminating pkcs11-helper\n");
00184 
00185         if ((rv = pkcs11h_terminate ()) != CKR_OK) {
00186                 fatal ("pkcs11h_terminate failed", rv);
00187         }
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