Initial client implementation
This commit is contained in:
parent
2b91931c34
commit
eb32875748
1 changed files with 68 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Reference in a new issue