#ifndef _EAP8021X_EAPCLIENTMODULE_H
#define _EAP8021X_EAPCLIENTMODULE_H
#include <stdint.h>
#include <EAP8021X/EAP.h>
#include <EAP8021X/EAPClientPlugin.h>
typedef struct EAPClientModule_s EAPClientModule, *EAPClientModuleRef;
enum {
kEAPClientModuleStatusOK = 0,
kEAPClientModuleStatusInvalidType = 1,
kEAPClientModuleStatusTypeAlreadyLoaded = 2,
kEAPClientModuleStatusAllocationFailed = 3,
kEAPClientModuleStatusPluginInvalidVersion = 4,
kEAPClientModuleStatusPluginIncomplete = 5,
};
typedef uint32_t EAPClientModuleStatus;
EAPClientModuleRef
EAPClientModuleLookup(EAPType type);
EAPType
EAPClientModuleDefaultType(void);
EAPClientModuleStatus
EAPClientModuleAddBuiltinModule(EAPClientPluginFuncIntrospect * func);
EAPClientPluginFuncRef
EAPClientModulePluginIntrospect(EAPClientModuleRef module,
EAPClientPluginFuncName);
EAPType
EAPClientModulePluginEAPType(EAPClientModuleRef module);
const char *
EAPClientModulePluginEAPName(EAPClientModuleRef module);
EAPClientStatus
EAPClientModulePluginInit(EAPClientModuleRef module,
EAPClientPluginDataRef plugin,
CFArrayRef * required_props,
int * error);
void
EAPClientModulePluginFree(EAPClientModuleRef module,
EAPClientPluginDataRef plugin);
void
EAPClientModulePluginFreePacket(EAPClientModuleRef module,
EAPClientPluginDataRef plugin,
EAPPacketRef pkt_p);
EAPClientState
EAPClientModulePluginProcess(EAPClientModuleRef module,
EAPClientPluginDataRef plugin,
const EAPPacketRef in_pkt,
EAPPacketRef * out_pkt_p,
EAPClientStatus * status,
EAPClientDomainSpecificError * error);
const char *
EAPClientModulePluginFailureString(EAPClientModuleRef module,
EAPClientPluginDataRef plugin);
void *
EAPClientModulePluginSessionKey(EAPClientModuleRef module,
EAPClientPluginDataRef plugin,
int * key_length);
void *
EAPClientModulePluginServerKey(EAPClientModuleRef module,
EAPClientPluginDataRef plugin,
int * key_length);
int
EAPClientModulePluginMasterSessionKeyCopyBytes(EAPClientModuleRef module,
EAPClientPluginDataRef plugin,
uint8_t * msk, int msk_size);
CFArrayRef
EAPClientModulePluginRequireProperties(EAPClientModuleRef module,
EAPClientPluginDataRef plugin);
CFDictionaryRef
EAPClientModulePluginPublishProperties(EAPClientModuleRef module,
EAPClientPluginDataRef plugin);
bool
EAPClientModulePluginPacketDump(EAPClientModuleRef module,
FILE * out_f, const EAPPacketRef packet);
CFStringRef
EAPClientModulePluginUserName(EAPClientModuleRef module,
CFDictionaryRef properties);
CFStringRef
EAPClientModulePluginCopyIdentity(EAPClientModuleRef module,
EAPClientPluginDataRef plugin);
CFStringRef
EAPClientModulePluginCopyPacketDescription(EAPClientModuleRef module,
const EAPPacketRef packet,
bool * is_valid);
#endif