#include "SecTokend.h"
#include "server.h"
#include <securityd_client/ssclient.h>
namespace Security {
namespace Tokend {
using namespace MachPlusPlus;
static const SCARD_READERSTATE *cbStartupReaderInfo()
{
return &server->startupReaderState();
}
static const char *cbTokenUid()
{
return server->tokenUid();
}
static void *cbMalloc(uint32 size)
{
return malloc(size);
}
static void cbFree(void *ptr)
{
return free(ptr);
}
static void *cbMallocSensitive(uint32 size)
{
return malloc(size);
}
static void cbFreeSensitive(void *ptr)
{
return free(ptr);
}
static SecTokendSupport supportVector = {
cbStartupReaderInfo,
cbTokenUid,
cbMalloc, cbFree,
cbMallocSensitive, cbFreeSensitive
};
extern "C" {
int SecTokendMain(int argc, const char * argv[],
const SecTokendCallbacks *callbacks, SecTokendSupport *support)
{
if (!callbacks) {
secdebug("tokenlib", "NULL callback structure");
exit(1);
}
if (callbacks->version != kSecTokendCallbackVersion) {
secdebug("tokenlib", "callback structure is version %d (supporting %d)",
callbacks->version, kSecTokendCallbackVersion);
exit(1);
}
secdebug("tokenlib", "API interface version %d", callbacks->version);
server = new Server();
if (!server)
{
secdebug("tokenlib", "can't create server object");
exit(1);
}
server->callbacks() = *callbacks;
if (support)
*support = supportVector;
try {
return (*server)(argc, argv, callbacks->flags);
} catch (...) {
secdebug("tokenlib", "server aborted with exception");
return 1;
}
}
}
} }