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 trigger\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_TRIGGER,
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 poll\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_POLL,
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 printf ("Terminating pkcs11-helper\n");
00132
00133 if ((rv = pkcs11h_terminate ()) != CKR_OK) {
00134 fatal ("pkcs11h_terminate failed", rv);
00135 }
00136
00137 exit (0);
00138 return 0;
00139 }
00140
00141 #endif