X-Git-Url: https://git.ucc.asn.au/?p=tpg%2Fopendispense2.git;a=blobdiff_plain;f=src%2Fserver%2Fhandler_door.c;h=99425268a648d634196d8f0c7653e611768e1b41;hp=978c1848739d33b3003115aa1fa95cbb3e74e6b6;hb=91d11fd7f9bf911c6abc59a18e17ec5890cee148;hpb=45a676d692c76885c7b0bfaf6bde158429a96a4e diff --git a/src/server/handler_door.c b/src/server/handler_door.c index 978c184..9942526 100644 --- a/src/server/handler_door.c +++ b/src/server/handler_door.c @@ -14,6 +14,8 @@ #include #include +#define DEBUG 1 + #define DOOR_UNLOCKED_DELAY 10 // 10 seconds before it re-locks // === IMPORTS === @@ -30,16 +32,12 @@ tHandler gDoor_Handler = { Door_CanDispense, Door_DoDispense }; -char *gsDoor_Password; -char *gsDoor_Command; +char *gsDoor_Password = ""; // int giDoor_SerialFD; // == CODE === int Door_InitHandler(void) -{ - gsDoor_Command = malloc(sizeof("llogin door -w ")+strlen(gsDoor_Password)); - sprintf(gsDoor_Command, "llogin door -w %s", gsDoor_Password); - +{ return 0; } @@ -47,11 +45,23 @@ int Door_InitHandler(void) */ int Door_CanDispense(int User, int Item) { + #if DEBUG + printf("Door_CanDispense: (User=%i,Item=%i)\n", User, Item); + #endif // Sanity please - if( Item == 0 ) return -1; + if( Item != 0 ) return -1; if( !(Bank_GetFlags(User) & USER_FLAG_DOORGROUP) ) + { + #if DEBUG + printf("Door_CanDispense: User %i not in door\n", User); + #endif return 1; + } + + #if DEBUG + printf("Door_CanDispense: User %i can open the door\n", User); + #endif return 0; } @@ -62,25 +72,55 @@ int Door_CanDispense(int User, int Item) int Door_DoDispense(int User, int Item) { FILE *pipe; + char buf[512]; // Buffer flush location - the sewer :) + + #if DEBUG + printf("Door_DoDispense: (User=%i,Item=%i)\n", User, Item); + #endif + // Sanity please if( Item != 0 ) return -1; // Check if user is in door if( !(Bank_GetFlags(User) & USER_FLAG_DOORGROUP) ) + { + #if DEBUG + printf("Door_CanDispense: User %i not in door\n", User); + #endif return 1; + } // llogin or other - //pipe = popen(gsDoor_Command, "w"); pipe = popen("llogin door -w -", "w"); - if( !pipe || pipe == (void*)-1 ) + if( !pipe || pipe == (void*)-1 ) { + #if DEBUG + printf("Door_DoDispense: llogin failure\n"); + #endif return -1; + } + if( fread(buf, 512, 1, pipe) == 0 ) return -1; // Flush! + + // Send password + fputs(gsDoor_Password, pipe); + fputs("\n", pipe); + if( fread(buf, 512, 1, pipe) == 0 ) return -1; // Flush! - fputs(gsDoor_Password, pipe); fputs("\n", pipe); + // ATH1 - Unlock door fputs("ATH1\n", pipe); + if( fread(buf, 512, 1, pipe) == 0 ) return -1; // Flush! + + // Wait before re-locking sleep(DOOR_UNLOCKED_DELAY); + + // Re-lock the door fputs("ATH0\n", pipe); + if( fread(buf, 512, 1, pipe) == 0 ) return -1; // Flush! pclose(pipe); + + #if DEBUG + printf("Door_DoDispense: User %i opened door\n", User); + #endif return 0; }