133 lines
4.0 KiB
C
133 lines
4.0 KiB
C
#define _GNU_SOURCE
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <signal.h>
|
|
#include <syslog.h>
|
|
#include <string.h>
|
|
#include "runtime.h"
|
|
#include "config.h"
|
|
#include "web.h"
|
|
#include "gpio.h"
|
|
#include "serial.h"
|
|
#include "mf700.h"
|
|
#include "log.h"
|
|
#include "info.h"
|
|
#include "jsontypes.h"
|
|
#include "inputs.h"
|
|
#include "reader.h"
|
|
#include "relay.h"
|
|
#include "display.h"
|
|
|
|
void readerrequest(struct reader_t *reader, struct config_t *config){
|
|
server_credential_request(reader, config);
|
|
|
|
#ifdef TEST
|
|
printf("Cardnumber: %d\n", reader->cardnumber);
|
|
printf("Opentime: %d\n", reader->opentime);
|
|
printf("State: %d\n", reader->state);
|
|
//printf("server: %s\n", reader->config->serveraddress);
|
|
#endif
|
|
|
|
if(reader->state == ACCESSGRANTED){
|
|
if(mf700_controlcommand(&reader->fd, (unsigned int)reader->opentime, GREENLED1BEEP) == ERROR){
|
|
exitprogram(EXIT_FAILURE);
|
|
}
|
|
if(relay_switch(RELAY_ON, reader->opentime, config) == ERROR){
|
|
exitprogram(EXIT_FAILURE);
|
|
}
|
|
|
|
char *log;
|
|
if(asprintf(&log, "CARD ID %d", reader->cardnumber) > 0){
|
|
clear_display();
|
|
write_display(line[1], 0, 0, log);
|
|
write_display(line[2], 0, 0, "access granted");
|
|
display_timer(reader->opentime);
|
|
}
|
|
free(log);
|
|
if(asprintf(&log, "%d - access granted", reader->cardnumber) > 0 ){
|
|
writesyslog(LOG_INFO, log);
|
|
}
|
|
free(log);
|
|
}
|
|
else if(reader->state == ACCESSDENIED){
|
|
if(mf700_controlcommand(&reader->fd, 2, REDLED3BEEPS) == ERROR){
|
|
exitprogram(EXIT_FAILURE);
|
|
}
|
|
|
|
char *log;
|
|
if(asprintf(&log, "CARD ID %d", reader->cardnumber) > 0){
|
|
clear_display();
|
|
write_display(line[1], 0, 0, log);
|
|
write_display(line[2], 0, 0, "access denied");
|
|
display_timer(3);
|
|
}
|
|
free(log);
|
|
if(asprintf(&log, "%d - access denied", reader->cardnumber) > 0 ){
|
|
writesyslog(LOG_INFO, log);
|
|
}
|
|
free(log);
|
|
}
|
|
else if (reader->state == UNKNOWNERROR || reader->state == CONNECTIONTIMEOUT || reader->state == RESOLVEERROR || reader->state == SERVERERROR || reader->state == CREDENTIALERROR){
|
|
if(mf700_controlcommand(&reader->fd, 0, EVERYLEDON) == ERROR){
|
|
exitprogram(EXIT_FAILURE);
|
|
}
|
|
if(mf700_controlcommand(&reader->fd, 5, BUZZER3TIME) == ERROR){
|
|
exitprogram(EXIT_FAILURE);
|
|
}
|
|
|
|
char *log;
|
|
char *ln1, *ln2;
|
|
int len = 0;
|
|
switch(reader->state){
|
|
case UNKNOWNERROR:
|
|
len = asprintf(&log, "Unknown error");
|
|
asprintf(&ln1, "Unknown error");
|
|
asprintf(&ln2, "%s", config->serveraddress);
|
|
break;
|
|
case CONNECTIONTIMEOUT:
|
|
len = asprintf(&log, "Connection timeout to server: %s", config->serveraddress);
|
|
asprintf(&ln1, "Connection timout");
|
|
asprintf(&ln2, "%s", config->serveraddress);
|
|
break;
|
|
case RESOLVEERROR:
|
|
len = asprintf(&log, "Can't resolve server address: %s", config->serveraddress);
|
|
asprintf(&ln1, "Resolve error");
|
|
asprintf(&ln2, "%s", config->serveraddress);
|
|
break;
|
|
case SERVERERROR:
|
|
len = asprintf(&log, "Error in ACS server: %s", config->serveraddress);
|
|
asprintf(&ln1, "Error in server");
|
|
asprintf(&ln2, "%s", config->serveraddress);
|
|
break;
|
|
case CREDENTIALERROR:
|
|
len = asprintf(&log, "Error in credential: %s", config->serveraddress);
|
|
asprintf(&ln1, "Error in credential");
|
|
asprintf(&ln2, "%s", config->serveraddress);
|
|
break;
|
|
default:
|
|
len = asprintf(&log, "switch default - server errors");
|
|
asprintf(&ln1, "Switch default server");
|
|
asprintf(&ln2, "cannot happen !");
|
|
}
|
|
if(len > 0){
|
|
clear_display();
|
|
write_display(line[1], 0, 0, ln1);
|
|
write_display(line[2], 0, 0, ln2);
|
|
writesyslog(LOG_ERR, log);
|
|
display_timer(5);
|
|
}
|
|
free(ln1);
|
|
free(ln2);
|
|
free(log);
|
|
}else{
|
|
char *log;
|
|
if(asprintf(&log, "Unknown state from server: %d\n", reader->state) > 0 ){
|
|
writesyslog(LOG_ERR, log);
|
|
}
|
|
free(log);
|
|
}
|
|
}
|