#ifndef _RLM_SECURID_H
#define _RLM_SECURID_H
#include <freeradius-devel/ident.h>
#include <freeradius-devel/radiusd.h>
#include <freeradius-devel/modules.h>
#include <freeradius-devel/rad_assert.h>
#include "acexport.h"
#define SAFE_STR(s) s==NULL?"EMPTY":s
typedef enum {
INITIAL_STATE = 0,
NEXT_CODE_REQUIRED_STATE = 100,
NEW_PIN_REQUIRED_STATE = 200,
NEW_PIN_USER_CONFIRM_STATE = 201,
NEW_PIN_AUTH_VALIDATE_STATE = 202
}
SECURID_SESSION_STATE;
#define SECURID_STATE_LEN 32
typedef struct _securid_session_t {
struct _securid_session_t *prev, *next;
SDI_HANDLE sdiHandle;
SECURID_SESSION_STATE securidSessionState;
uint8_t state[SECURID_STATE_LEN];
fr_ipaddr_t src_ipaddr;
time_t timestamp;
unsigned int session_id;
int trips;
char *pin;
char *identity;
} SECURID_SESSION;
typedef struct rlm_securid_t {
pthread_mutex_t session_mutex;
rbtree_t* session_tree;
SECURID_SESSION *session_head, *session_tail;
unsigned int last_session_id;
int timer_limit;
int max_sessions;
int max_trips_per_session;
} rlm_securid_t;
SECURID_SESSION* securid_session_alloc(void);
void securid_session_free(rlm_securid_t *inst, REQUEST *request,SECURID_SESSION *session);
void securid_sessionlist_free(rlm_securid_t *inst,REQUEST *request);
int securid_sessionlist_add(rlm_securid_t *inst, REQUEST *request, SECURID_SESSION *session);
SECURID_SESSION* securid_sessionlist_find(rlm_securid_t *inst, REQUEST *request);
#endif