enum for cmds

This commit is contained in:
Benedikt Galbavy 2023-10-15 22:49:24 +02:00
parent 7908c18560
commit 53edbed05b

View File

@ -9,9 +9,18 @@
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <string>
#define BUF 1024
enum commands {
SEND = 1,
LIST,
READ,
DEL,
QUIT = -1
};
namespace fs = std::filesystem;
int abortRequested = 0;
@ -183,34 +192,47 @@ void *clientCommunication(void *data)
}
// remove ugly debug message, because of the sent newline of client
if (buffer[size - 2] == '\r' && buffer[size - 1] == '\n')
{
if (buffer[size - 2] == '\r' && buffer[size - 1] == '\n') {
size -= 2;
}
else if (buffer[size - 1] == '\n')
{
} else if (buffer[size - 1] == '\n') {
--size;
}
buffer[size] = '\0';
printf("Message received: %s\n", buffer); // ignore error
if (send(*current_socket, "OK", 3, 0) == -1)
{
/* New code here for handling requests */
enum commands cmd;
// can't wait for reflections (maybe c++26?)
if (strcasecmp(buffer, "SEND") == 0) cmd = SEND;
else if (strcasecmp(buffer, "LIST") == 0) cmd = LIST;
else if (strcasecmp(buffer, "READ") == 0) cmd = READ;
else if (strcasecmp(buffer, "DEL") == 0) cmd = DEL;
else if (strcasecmp(buffer, "QUIT") == 0) cmd = QUIT;
switch (cmd) {
case SEND:
case LIST:
case READ:
case DEL:
case QUIT:
break;
}
if (send(*current_socket, "OK", 3, 0) == -1) {
perror("send answer failed");
return NULL;
}
} while (strcmp(buffer, "quit") != 0 && !abortRequested);
// closes/frees the descriptor if not already
if (*current_socket != -1)
{
if (shutdown(*current_socket, SHUT_RDWR) == -1)
{
if (*current_socket != -1) {
if (shutdown(*current_socket, SHUT_RDWR) == -1) {
perror("shutdown new_socket");
}
if (close(*current_socket) == -1)
{
if (close(*current_socket) == -1) {
perror("close new_socket");
}
*current_socket = -1;
@ -221,15 +243,9 @@ void *clientCommunication(void *data)
void signalHandler(int sig)
{
if (sig == SIGINT)
{
if (sig == SIGINT) {
printf("abort Requested... "); // ignore error
abortRequested = 1;
/////////////////////////////////////////////////////////////////////////
// With shutdown() one can initiate normal TCP close sequence ignoring
// the reference count.
// https://beej.us/guide/bgnet/html/#close-and-shutdownget-outta-my-face
// https://linux.die.net/man/3/shutdown
if (new_socket != -1)
{
if (shutdown(new_socket, SHUT_RDWR) == -1)
@ -243,21 +259,16 @@ void signalHandler(int sig)
new_socket = -1;
}
if (create_socket != -1)
{
if (shutdown(create_socket, SHUT_RDWR) == -1)
{
if (create_socket != -1) {
if (shutdown(create_socket, SHUT_RDWR) == -1) {
perror("shutdown create_socket");
}
if (close(create_socket) == -1)
{
if (close(create_socket) == -1) {
perror("close create_socket");
}
create_socket = -1;
}
}
else
{
} else {
exit(sig);
}
}