git.ucc.asn.au
/
tpg
/
opendispense2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Cleaning up a little
[tpg/opendispense2.git]
/
src
/
server
/
server.c
diff --git
a/src/server/server.c
b/src/server/server.c
index
04f1c39
..
f0d7d46
100644
(file)
--- a/
src/server/server.c
+++ b/
src/server/server.c
@@
-296,22
+296,23
@@
void Server_ParseClientCommand(tClient *Client, char *CommandString)
{
char *command, *args;
int i;
- #if 0
- char **argList;
- int numArgs = 0;
- #endif
+
+ if( giDebugLevel >= 2 )
+ Debug(Client, "Server_ParseClientCommand: (CommandString = '%s')", CommandString);
if( Server_int_ParseArgs(1, CommandString, &command, &args, NULL) )
{
// Is this an error? (just ignore for now)
- args = "";
+
//
args = "";
}
// Find command
for( i = 0; i < NUM_COMMANDS; i++ )
{
- if(strcmp(CommandString, gaServer_Commands[i].Name) == 0) {
+ if(strcmp(command, gaServer_Commands[i].Name) == 0) {
+ if( giDebugLevel >= 2 )
+ Debug(Client, "CMD %s - \"%s\"", command, args);
gaServer_Commands[i].Function(Client, args);
return ;
}
@@
-394,7
+395,11
@@
void Server_Cmd_AUTOAUTH(tClient *Client, char *Args)
{
char *username;
- Server_int_ParseArgs(0, Args, &username, NULL);
+ if( Server_int_ParseArgs(0, Args, &username, NULL) )
+ {
+ sendf(Client->Socket, "407 AUTOAUTH takes 1 argument\n");
+ return ;
+ }
// Check if trusted
if( !Client->bIsTrusted ) {
@@
-415,6
+420,8
@@
void Server_Cmd_AUTOAUTH(tClient *Client, char *Args)
// You can't be an internal account
if( Bank_GetFlags(Client->UID) & USER_FLAG_INTERNAL ) {
+ if(giDebugLevel)
+ Debug(Client, "Autoauth as '%s', not allowed", username);
Client->UID = -1;
sendf(Client->Socket, "401 Auth Failure\n");
return ;
@@
-465,6
+472,32
@@
void Server_Cmd_SETEUSER(tClient *Client, char *Args)
sendf(Client->Socket, "200 User set\n");
}
+/**
+ * \brief Send an item status to the client
+ * \param Client Who to?
+ * \param Item Item to send
+ */
+void Server_int_SendItem(tClient *Client, tItem *Item)
+{
+ char *status = "avail";
+
+ if( Item->Handler->CanDispense )
+ {
+ switch(Item->Handler->CanDispense(Client->UID, Item->ID))
+ {
+ case 0: status = "avail"; break;
+ case 1: status = "sold"; break;
+ default:
+ case -1: status = "error"; break;
+ }
+ }
+
+ sendf(Client->Socket,
+ "202 Item %s:%i %s %i %s\n",
+ Item->Handler->Name, Item->ID, status, Item->Price, Item->Name
+ );
+}
+
/**
* \brief Enumerate the items that the server knows about
*/
@@
-488,10
+521,7
@@
void Server_Cmd_ENUMITEMS(tClient *Client, char *Args)
for( i = 0; i < giNumItems; i ++ ) {
if( gaItems[i].bHidden ) continue;
- sendf(Client->Socket,
- "202 Item %s:%i %i %s\n",
- gaItems[i].Handler->Name, gaItems[i].ID, gaItems[i].Price, gaItems[i].Name
- );
+ Server_int_SendItem( Client, &gaItems[i] );
}
sendf(Client->Socket, "200 List end\n");
@@
-553,10
+583,7
@@
void Server_Cmd_ITEMINFO(tClient *Client, char *Args)
return ;
}
- sendf(Client->Socket,
- "202 Item %s:%i %i %s\n",
- item->Handler->Name, item->ID, item->Price, item->Name
- );
+ Server_int_SendItem( Client, item );
}
void Server_Cmd_DISPENSE(tClient *Client, char *Args)
@@
-1163,9
+1190,20
@@
int sendf(int Socket, const char *Format, ...)
int Server_int_ParseArgs(int bUseLongLast, char *ArgStr, ...)
{
va_list args;
- char savedChar
= *ArgStr
;
+ char savedChar;
char **dest;
va_start(args, ArgStr);
+
+ // Check for null
+ if( !ArgStr )
+ {
+ while( (dest = va_arg(args, char **)) )
+ *dest = NULL;
+ va_end(args);
+ return 1;
+ }
+
+ savedChar = *ArgStr;
while( (dest = va_arg(args, char **)) )
{
@@
-1180,37
+1218,42
@@
int Server_int_ParseArgs(int bUseLongLast, char *ArgStr, ...)
do {
*dest = NULL;
} while( (dest = va_arg(args, char **)) );
+ va_end(args);
return -1;
}
- // Set destination
- *dest = ArgStr;
-
if( *ArgStr == '"' )
{
+ ArgStr ++;
+ *dest = ArgStr;
// Read until quote
while( *ArgStr && *ArgStr != '"' )
ArgStr ++;
}
else
{
+ // Set destination
+ *dest = ArgStr;
// Read until a space
while( *ArgStr && *ArgStr != ' ' && *ArgStr != '\t' )
ArgStr ++;
}
savedChar = *ArgStr; // savedChar is used to un-mangle the last string
*ArgStr = '\0';
+ ArgStr ++;
}
+ va_end(args);
// Oops, extra arguments, and greedy not set
- if(
savedChar == ' ' && bUseLongLast )
+ if(
(savedChar == ' ' || savedChar == '\t') && !bUseLongLast ) {
return -1;
+ }
// Un-mangle last
- if(bUseLongLast)
+ if(bUseLongLast) {
+ ArgStr --;
*ArgStr = savedChar;
-
- va_end(args);
+ }
return 0; // Success!
}
UCC
git Repository :: git.ucc.asn.au