Initial client implementation

This commit is contained in:
akp 2023-11-11 19:50:43 +00:00
parent 2b91931c34
commit eb32875748
No known key found for this signature in database
GPG key ID: CF8D58F3DEB20755

View file

@ -1,6 +1,73 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define USAGE "usage: %s IP PORT OPCODE [ARGS...]\n"
int main (int argc, char **argv) {
// Client to be written
if (argc < 4) {
fprintf(stderr, USAGE, argv[0]);
return 1;
}
const char *ip = argv[1];
const char *port = argv[2];
const char *opcode = argv[3];
if (strlen(opcode) != 1) {
fprintf(stderr, "invalid opcode\n");
return 1;
}
char *payload = NULL;
switch (opcode[0]) {
case 'A':
case 'D':
case 'C': {
if (argc < 6) {
fprintf(stderr, USAGE, argv[0]);
fprintf(stderr, "not enough arguments for opcode %s\n", opcode);
return 1;
}
int payload_len = strlen(ip) + strlen(port) + 1;
payload = (char *) malloc(sizeof(char) * (payload_len + 1));
memset(payload, 0, payload_len + 1);
strcat(payload, argv[4]);
if (opcode[0] == 'C') {
strcat(payload, ",");
} else {
strcat(payload, " ");
}
strcat(payload, argv[5]);
}
case 'L': {
break;
}
default: {
fprintf(stderr, "invalid opcode\n");
return 1;
}
}
unsigned char payload_size = 0;
if (payload != NULL) {
payload_size = strlen(payload);
}
char *message = (char *)malloc(sizeof(char) * (payload_size + 3));
message[0] = opcode[0];
message[1] = payload_size;
if (payload != NULL) {
strcat(message + 2, payload);
free(payload);
}
fwrite(message, 1, 2 + payload_size, stdout);
return 0;
}