#include #include #include #include "../server/tcp.h" #include #include #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; }