diff options
Diffstat (limited to 'test/general.c')
-rw-r--r-- | test/general.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/test/general.c b/test/general.c new file mode 100644 index 0000000..d7673a3 --- /dev/null +++ b/test/general.c @@ -0,0 +1,79 @@ +#include <netinet/in.h> +#include <stdio.h> +#include <pthread.h> + +#include "../server/tcp.h" + +#include <errno.h> +#include <packet.h> + +#define W printf("LINE %i\n", __LINE__) + +int commsock; +enum commd_error cerr; + +void setup_globals(void) { commsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); } + +u64 sendtoserv(int sock, enum commd_type t, struct commd *cmd, enum commd_error * NULLABLE e) { + sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + struct sockaddr_in serv = { + .sin_family = AF_INET, .sin_port = htons(TCP_PORT), .sin_addr = {htonl(INADDR_LOOPBACK)}}; + while (connect(sock, (struct sockaddr *)&serv, sizeof(serv)) != 0) sleep(1); + t = htonl(t); + if (send(sock, &t, sizeof(t), 0) <= 0) { *e = ERR_SERV; return 0; } + if (send(sock, cmd, sizeof(*cmd), 0) <= 0) { *e = ERR_SERV; return 0; } + + u64 resp; + if (recv(sock, &resp, sizeof(resp), 0) <= 0) {*e = ERR_SERV; return 0; } + resp = ntoh64(resp); + if (resp == 0 && e != NULL) { + read(sock, e, sizeof(*e)); + *e = ntohl(*e); + } + shutdown(sock, SHUT_RDWR); + close(sock); + return resp; +} + +u64 register_user(i32 perm) { + struct commd_register r = {.auid = hton64(0), .perm = hton64(perm)}; + if (cerr != ERR_SUCCESS) DEBUGF("Server returned error %i: %s. errno: %s\n", cerr, kv_strerror(cerr), strerror(errno)); + return sendtoserv(commsock, CMD_REGISTER, (struct commd *)&r, &cerr); +} + +void unreg_user(u64 u) { + struct commd_unregister unreg = {.auid = hton64(u), .uid = hton64(u)}; + u64 resp = sendtoserv(commsock, CMD_UNREGISTER, (struct commd *)&unreg, &cerr); + if (cerr != ERR_SUCCESS) DEBUGF("Server returned error %i: %s. errno: %s\n", cerr, kv_strerror(cerr), strerror(errno)); + printf("sendtoserv returned %zu\n", resp); +} + +u64 create_channel(u64 u) { + struct commd_create c = {.uid = hton64(u)}; + u64 resp = sendtoserv(commsock, CMD_CREATE, (struct commd *)&c, &cerr); + if (cerr != ERR_SUCCESS) DEBUGF("Server returned error %i: %s\n", cerr, kv_strerror(cerr)); + return resp; +} + +void* thr(void* a) { + (void)a; + u64 uid = register_user(perm_none); + printf("uid: %zu\n", uid); + unreg_user(uid); + uid = register_user(perm_admin); + printf("uid: %zu\n", uid); + u64 chid = create_channel(uid); + printf("chid: %zu\n", chid); + return NULL; +} + +int main(int argc, char *argv[]) { + (void)argc; + (void)argv; + for (int i = 0; i < 1; ++i) { + pthread_t t; + pthread_create(&t, NULL, thr, NULL); + } + sleep(1); + return 0; +} |