From 91d11fd7f9bf911c6abc59a18e17ec5890cee148 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 19 Feb 2011 16:07:50 +0800 Subject: [PATCH] Door config settings (and some fixes to doorgroup reporting) --- RunServerTest | 1 + items.cfg | 2 ++ src/cokebank_sqlite/main.c | 4 +++ src/server/handler_door.c | 60 +++++++++++++++++++++++++++++++------- src/server/server.c | 8 +++-- 5 files changed, 63 insertions(+), 12 deletions(-) diff --git a/RunServerTest b/RunServerTest index b117c70..a72a3fa 100755 --- a/RunServerTest +++ b/RunServerTest @@ -2,6 +2,7 @@ ARGS="--itemsfile items.cfg -p 11020" ARGS=$ARGS" --cokeport /dev/ttyUSB0" +ARGS=$ARGS" -d 2" if [ "x$2" != "x" ]; then _cokebank=$1 diff --git a/items.cfg b/items.cfg index ef85035..f8e7106 100644 --- a/items.cfg +++ b/items.cfg @@ -17,6 +17,8 @@ pseudo 2 128 clue # clue.flac - Dont' Ask pseudo 3 3500 polo postorder # Polo Shirt! (With UCC Sun Logo) pseudo 4 2500 membership # here comes the money! +door 0 0 Open Door # Open Sesame + # Snack machine -snack 13 128 Smiths Salt & Vinegar -snack 33 128 Smiths Original diff --git a/src/cokebank_sqlite/main.c b/src/cokebank_sqlite/main.c index e539105..23776b3 100644 --- a/src/cokebank_sqlite/main.c +++ b/src/cokebank_sqlite/main.c @@ -220,6 +220,10 @@ int Bank_SetFlags(int UserID, int Mask, int Value) ); #undef MAP_FLAG + #if DEBUG + printf("Bank_SetFlags: query=\"%s\"\n", query); + #endif + // Execute Query rv = sqlite3_exec(gBank_Database, query, NULL, NULL, &errmsg); if( rv != SQLITE_OK ) 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; } diff --git a/src/server/server.c b/src/server/server.c index 4379317..cd69224 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -1095,9 +1095,9 @@ void _SendUserInfo(tClient *Client, int UserID) // TODO: User flags/type sendf( - Client->Socket, "202 User %s %i %s%s\n", + Client->Socket, "202 User %s %i %s%s%s\n", Bank_GetAcctName(UserID), Bank_GetBalance(UserID), - type, disabled + type, disabled, door ); } @@ -1172,6 +1172,10 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args) if( Server_int_ParseFlags(Client, flags, &mask, &value) ) return ; + if( giDebugLevel ) + Debug(Client, "Set %i(%s) flags to %x (masked %x)\n", + uid, username, mask, value); + // Apply flags Bank_SetFlags(uid, mask, value); -- 2.20.1