Bug fixes

This commit is contained in:
Andrew Pamment 2019-12-01 19:36:24 +10:00
parent 12f70e6ce9
commit e13f7e0777
3 changed files with 31 additions and 14 deletions

View File

@ -6,8 +6,12 @@
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#include <unistd.h> #include <unistd.h>
#include <time.h>
#include "MagiDoor.h" #include "MagiDoor.h"
extern time_t mdtimeout;
extern time_t mdtimeremaining;
char md_getc() { char md_getc() {
char c; char c;
ssize_t ret; ssize_t ret;
@ -25,9 +29,18 @@ char md_getc() {
#else #else
if (ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) { if (ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
#endif #endif
usleep(1); if (mdtimeout <= time(NULL)) {
md_printf("\r\nIdle timeout!\r\n");
md_exit(0);
}
if (mdtimeremaining <= time(NULL)) {
md_printf("\r\nOut of time!\r\n");
md_exit(0);
}
usleep(100);
continue; continue;
} }
mdtimeout = time(NULL) + 900;
return c; return c;
} }
} }

View File

@ -7,6 +7,7 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <time.h>
#include "MagiDoor.h" #include "MagiDoor.h"
@ -24,6 +25,9 @@ MDDoorControl_t mdcontrol;
struct termios ttysave; struct termios ttysave;
#endif #endif
time_t mdtimeout;
time_t mdtimeremaining;
static void md_cfg_read_line(char *buffer, int len, FILE *fptr) { static void md_cfg_read_line(char *buffer, int len, FILE *fptr) {
fgets(buffer, len, fptr); fgets(buffer, len, fptr);
if (buffer[strlen(buffer) - 1] == '\n') { if (buffer[strlen(buffer) - 1] == '\n') {
@ -74,13 +78,7 @@ int read_door32(const char *dropfile) {
md_cfg_read_line(buffer, 256, fptr); // node no md_cfg_read_line(buffer, 256, fptr); // node no
mdcontrol.node = strtol(buffer, NULL, 10); mdcontrol.node = strtol(buffer, NULL, 10);
#if defined(WIN32) || defined(_MSC_VER)
WSADATA wsa;
WSAStartup(WINSOCK_VERSION, &wsa);
#else
mdcontrol.socket = -1;
#endif
return 0; return 0;
} }
@ -171,8 +169,6 @@ int read_doorsys(const char *dropfile) {
fclose(fptr); fclose(fptr);
mdcontrol.socket = -1;
return 0; return 0;
} }
@ -187,13 +183,15 @@ void md_exit(int exitcode) {
exit(exitcode); exit(exitcode);
} }
int md_init(const char *dropfile) { int md_init(const char *dropfile, int socket) {
char *filename = strrchr(dropfile, PATH_SEP); char *filename = strrchr(dropfile, PATH_SEP);
#if !defined(WIN32) && !defined(_MSC_VER) #if !defined(WIN32) && !defined(_MSC_VER)
struct termios ttystate; struct termios ttystate;
#endif #endif
int ret; int ret;
mdcontrol.socket = socket;
if (filename == NULL) { if (filename == NULL) {
filename = (char *)dropfile; filename = (char *)dropfile;
} else { } else {
@ -207,8 +205,7 @@ int md_init(const char *dropfile) {
} }
if (mdcontrol.socket == -1) { if (mdcontrol.socket == -1) {
#if defined(WIN32) || defined(_MSC_VER) #if !defined(WIN32) && !defined(_MSC_VER)
#else
tcgetattr(STDIN_FILENO, &ttystate); tcgetattr(STDIN_FILENO, &ttystate);
ttysave = ttystate; ttysave = ttystate;
@ -220,7 +217,14 @@ int md_init(const char *dropfile) {
tcsetattr(STDIN_FILENO, TCSANOW, &ttystate); tcsetattr(STDIN_FILENO, TCSANOW, &ttystate);
#endif #endif
} } else {
#if defined(WIN32) || defined(_MSC_VER)
WSADATA wsa;
WSAStartup(WINSOCK_VERSION, &wsa);
#endif
}
mdtimeremaining = time(NULL) + mdcontrol.user_timeleft;
mdtimeout = time(NULL) + 900;
return ret; return ret;
} }

View File

@ -18,7 +18,7 @@ typedef struct MDDoorControl {
extern MDDoorControl_t mdcontrol; extern MDDoorControl_t mdcontrol;
extern int md_init(const char *dropfile); extern int md_init(const char *dropfile, int socket);
extern void md_exit(int exitcode); extern void md_exit(int exitcode);
extern void md_putchar(char c); extern void md_putchar(char c);
extern void md_printf(const char *fmt, ...); extern void md_printf(const char *fmt, ...);