User timeouts, compile fixes
[tpg/opendispense2.git] / src / server / server.c
index f4b25d8..b103e83 100644 (file)
@@ -23,6 +23,7 @@
 // Statistics
 #define MAX_CONNECTION_QUEUE   5
 #define INPUT_BUFFER_SIZE      256
+#define CLIENT_TIMEOUT 10      // Seconds
 
 #define HASH_TYPE      SHA1
 #define HASH_LENGTH    20
@@ -153,6 +154,18 @@ void Server_Start(void)
                        return ;
                }
                
+               // Set a timeout on the user conneciton
+               {
+                       struct timeval tv;
+                       tv.tv_sec = CLIENT_TIMEOUT;
+                       tv.tv_usec = 0;
+                       if( setsockopt(client_socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) )
+                       {
+                               perror("setsockopt");
+                               return ;
+                       }
+               }
+               
                // Debug: Print the connection string
                if(giDebugLevel >= 2) {
                        char    ipstr[INET_ADDRSTRLEN];
@@ -225,6 +238,7 @@ void Server_HandleClient(int Socket, int bTrusted)
         *   it is saved to the beginning of `inbuf` and `buf` is updated to
         *   the end of it.
         */
+       // TODO: Use select() instead (to give a timeout)
        while( (bytes = recv(Socket, buf, remspace, 0)) > 0 )
        {
                char    *eol, *start;
@@ -1031,13 +1045,14 @@ void Server_Cmd_USERINFO(tClient *Client, char *Args)
        space = strchr(user, ' ');
        if(space)       *space = '\0';
        
-       if( giDebugLevel )
-               Debug(Client, "User Info '%s'", user);
+       if( giDebugLevel )      Debug(Client, "User Info '%s'", user);
        
        // Get recipient
        uid = Bank_GetAcctByName(user);
+       
+       if( giDebugLevel >= 2 ) Debug(Client, "uid = %i", uid);
        if( uid == -1 ) {
-               sendf(Client->Socket, "404 Invalid user");
+               sendf(Client->Socket, "404 Invalid user\n");
                return ;
        }
        
@@ -1160,9 +1175,10 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args)
 void Debug(tClient *Client, const char *Format, ...)
 {
        va_list args;
-       printf("%010lli [%i] ", time(NULL), Client->ID);
+       //printf("%010i [%i] ", (int)time(NULL), Client->ID);
+       printf("[%i] ", Client->ID);
        va_start(args, Format);
-       vprintf(NULL, 0, Format, args);
+       vprintf(Format, args);
        va_end(args);
        printf("\n");
 }

UCC git Repository :: git.ucc.asn.au