X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=inline;f=src%2Fserver%2Fserver.c;h=dd8a29432b3c2cb88660854ca07a68273cfb3cc2;hb=775921ac20618899f084977ac612b6b3e8544425;hp=de79f417c79a9530152cf5c3935055bdf977240d;hpb=85b50d7c9a9cc85d38f5b1703aed4f3ad7585f9a;p=tpg%2Fopendispense2.git diff --git a/src/server/server.c b/src/server/server.c index de79f41..dd8a294 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -70,6 +70,7 @@ void Server_Cmd_USERINFO(tClient *Client, char *Args); void _SendUserInfo(tClient *Client, int UserID); void Server_Cmd_USERADD(tClient *Client, char *Args); void Server_Cmd_USERFLAGS(tClient *Client, char *Args); +void Server_Cmd_UPDATEITEM(tClient *Client, char *Args); // --- Helpers --- void Debug(tClient *Client, const char *Format, ...); int sendf(int Socket, const char *Format, ...); @@ -97,7 +98,8 @@ const struct sClientCommand { {"ENUM_USERS", Server_Cmd_ENUMUSERS}, {"USER_INFO", Server_Cmd_USERINFO}, {"USER_ADD", Server_Cmd_USERADD}, - {"USER_FLAGS", Server_Cmd_USERFLAGS} + {"USER_FLAGS", Server_Cmd_USERFLAGS}, + {"UPDATE_ITEM", Server_Cmd_UPDATEITEM} }; #define NUM_COMMANDS ((int)(sizeof(gaServer_Commands)/sizeof(gaServer_Commands[0]))) @@ -177,8 +179,10 @@ void Server_Start(void) // write pidfile { FILE *fp = fopen("/var/run/dispsrv.pid", "w"); - fprintf(fp, "%i", getpid()); - fclose(fp); + if( fp ) { + fprintf(fp, "%i", getpid()); + fclose(fp); + } } for(;;) @@ -249,7 +253,7 @@ void Server_Cleanup(void) { printf("\nClose(%i)\n", giServer_Socket); close(giServer_Socket); - unlink("/var/run/dispsrv"); + unlink("/var/run/dispsrv.pid"); } /** @@ -475,7 +479,7 @@ void Server_Cmd_AUTOAUTH(tClient *Client, char *Args) } // Get UID - Client->UID = Bank_GetAcctByName( username ); + Client->UID = Bank_GetAcctByName( username, 0 ); if( Client->UID < 0 ) { if(giDebugLevel) Debug(Client, "Unknown user '%s'", username); @@ -535,7 +539,7 @@ void Server_Cmd_SETEUSER(tClient *Client, char *Args) } // Set id - Client->EffectiveUID = Bank_GetAcctByName(username); + Client->EffectiveUID = Bank_GetAcctByName(username, 0); if( Client->EffectiveUID == -1 ) { sendf(Client->Socket, "404 User not found\n"); return ; @@ -581,6 +585,10 @@ void Server_int_SendItem(tClient *Client, tItem *Item) } } + // KNOWN HACK: Naming a slot 'dead' disables it + if( strcmp(Item->Name, "dead") == 0 ) + status = "sold"; // Another status? + sendf(Client->Socket, "202 Item %s:%i %s %i %s\n", Item->Handler->Name, Item->ID, status, Item->Price, Item->Name @@ -740,7 +748,7 @@ void Server_Cmd_REFUND(tClient *Client, char *Args) return ; } - uid = Bank_GetAcctByName(username); + uid = Bank_GetAcctByName(username, 0); if( uid == -1 ) { sendf(Client->Socket, "404 Unknown user\n"); return ; @@ -782,7 +790,7 @@ void Server_Cmd_GIVE(tClient *Client, char *Args) } // Get recipient - uid = Bank_GetAcctByName(recipient); + uid = Bank_GetAcctByName(recipient, 0); if( uid == -1 ) { sendf(Client->Socket, "404 Invalid target user\n"); return ; @@ -893,7 +901,7 @@ void Server_Cmd_ADD(tClient *Client, char *Args) } // Get recipient - uid = Bank_GetAcctByName(user); + uid = Bank_GetAcctByName(user, 0); if( uid == -1 ) { sendf(Client->Socket, "404 Invalid user\n"); return ; @@ -954,7 +962,7 @@ void Server_Cmd_SET(tClient *Client, char *Args) } // Get recipient - uid = Bank_GetAcctByName(user); + uid = Bank_GetAcctByName(user, 0); if( uid == -1 ) { sendf(Client->Socket, "404 Invalid user\n"); return ; @@ -1167,7 +1175,7 @@ void Server_Cmd_USERINFO(tClient *Client, char *Args) if( giDebugLevel ) Debug(Client, "User Info '%s'", user); // Get recipient - uid = Bank_GetAcctByName(user); + uid = Bank_GetAcctByName(user, 0); if( giDebugLevel >= 2 ) Debug(Client, "uid = %i", uid); if( uid == -1 ) { @@ -1262,7 +1270,7 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args) } // Get UID - uid = Bank_GetAcctByName(username); + uid = Bank_GetAcctByName(username, 0); if( uid == -1 ) { sendf(Client->Socket, "404 User '%s' not found\n", username); return ; @@ -1283,6 +1291,51 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args) sendf(Client->Socket, "200 User Updated\n"); } +void Server_Cmd_UPDATEITEM(tClient *Client, char *Args) +{ + char *itemname, *price_str, *description; + int price; + tItem *item; + + if( Server_int_ParseArgs(1, Args, &itemname, &price_str, &description, NULL) ) { + sendf(Client->Socket, "407 UPDATE_ITEM takes 3 arguments\n"); + return ; + } + + if( !Client->bIsAuthed ) { + sendf(Client->Socket, "401 Not Authenticated\n"); + return ; + } + + // Check user permissions + if( !(Bank_GetFlags(Client->UID) & (USER_FLAG_COKE|USER_FLAG_ADMIN)) ) { + sendf(Client->Socket, "403 Not in coke\n"); + return ; + } + + item = _GetItemFromString(itemname); + if( !item ) { + // TODO: Create item? + sendf(Client->Socket, "406 Bad Item ID\n"); + return ; + } + + price = atoi(price_str); + if( price <= 0 && price_str[0] != '0' ) { + sendf(Client->Socket, "407 Invalid price set\n"); + } + + switch( DispenseUpdateItem( Client->UID, item, description, price ) ) + { + case 0: + // Return OK + sendf(Client->Socket, "200 Item updated\n"); + break; + default: + break; + } +} + // --- INTERNAL HELPERS --- void Debug(tClient *Client, const char *Format, ...) {