diff --git a/CMakeLists.txt b/CMakeLists.txt index f30d8e9..38f02dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,9 @@ cmake_minimum_required(VERSION 2.6.0) project(toxic C) +execute_process(COMMAND git rev-list HEAD --count OUTPUT_VARIABLE COMMIT) +SET(GCC_COVERAGE_COMPILE_FLAGS '-DTOXICVER="0.1.1_r${COMMIT}"') +add_definitions(${GCC_COVERAGE_COMPILE_FLAGS}) set(exe_name toxic) add_executable(${exe_name} diff --git a/chat.c b/chat.c index 28c5de6..8376577 100644 --- a/chat.c +++ b/chat.c @@ -16,7 +16,7 @@ typedef struct { int friendnum; - char line[256]; + char line[MAX_STR_SIZE]; size_t pos; WINDOW* history; WINDOW* linewin; @@ -154,15 +154,47 @@ void execute(ToxWindow *self, ChatContext *ctx, char *cmd) } else if (!strncmp(cmd, "/status ", strlen("/status "))) { + char *status = strchr(cmd, ' '); char *msg; - msg = strchr(cmd, ' '); - if (msg == NULL) { + char *status_text; + if (status == NULL) { wprintw(ctx->history, "Invalid syntax.\n"); return; } - msg++; - m_set_statusmessage((uint8_t*) msg, strlen(msg)+1); - wprintw(ctx->history, "Status set to: %s\n", msg); + status++; + USERSTATUS status_kind; + if (!strncmp(status, "online", strlen("online"))) { + status_kind = USERSTATUS_NONE; + status_text = "ONLINE"; + } + + else if (!strncmp(status, "away", strlen("away"))) { + status_kind = USERSTATUS_AWAY; + status_text = "AWAY"; + } + + else if (!strncmp(status, "busy", strlen("busy"))) { + status_kind = USERSTATUS_BUSY; + status_text = "BUSY"; + } + + else + { + wprintw(ctx->history, "Invalid status.\n"); + return; + } + + msg = strchr(status, ' '); + if (msg == NULL) { + m_set_userstatus(status_kind); + wprintw(ctx->history, "Status set to: %s\n", status_text); + } + else { + msg++; + m_set_userstatus(status_kind); + m_set_statusmessage((uint8_t*) msg, strlen(msg)+1); + wprintw(ctx->history, "Status set to: %s, %s\n", status_text, msg); + } } else if (!strncmp(cmd, "/nick ", strlen("/nick "))) { @@ -178,9 +210,9 @@ void execute(ToxWindow *self, ChatContext *ctx, char *cmd) } else if (!strcmp(cmd, "/myid")) { - char id[32*2 + 1] = {0}; + char id[KEY_SIZE_BYTES*2+1] = {0}; int i; - for (i = 0; i < 32; i++) { + for (i = 0; i < KEY_SIZE_BYTES; i++) { char xx[3]; snprintf(xx, sizeof(xx), "%02x", self_public_key[i] & 0xff); strcat(id, xx); @@ -231,7 +263,7 @@ void print_help(ChatContext *self) wprintw(self->history, "Commands:\n"); wattroff(self->history, A_BOLD); - wprintw(self->history, " /status : Set your status\n"); + wprintw(self->history, " /status : Set your status\n"); wprintw(self->history, " /nick : Set your nickname\n"); wprintw(self->history, " /myid : Print your ID\n"); wprintw(self->history, " /clear : Clear the screen\n"); diff --git a/main.c b/main.c index ec439c8..bf5e1e6 100644 --- a/main.c +++ b/main.c @@ -23,7 +23,10 @@ extern int add_req(uint8_t *public_key); // XXX /* Holds status of chat windows */ char WINDOW_STATUS[MAX_WINDOW_SLOTS]; -#define TOXICVER "0.1.0" //Will be moved to a -D flag later + +#ifndef TOXICVER +#define TOXICVER "NOVER" //Use the -D flag to set this +#endif static ToxWindow windows[MAX_WINDOW_SLOTS]; static ToxWindow* prompt; @@ -38,7 +41,7 @@ void on_request(uint8_t *public_key, uint8_t *data, uint16_t length) wprintw(prompt->window, "\nFriend request from:\n"); int i; - for (i = 0; i < 32; ++i) { + for (i = 0; i < KEY_SIZE_BYTES; ++i) { wprintw(prompt->window, "%02x", public_key[i] & 0xff); } diff --git a/prompt.c b/prompt.c index 661d881..eaa8d7b 100644 --- a/prompt.c +++ b/prompt.c @@ -12,12 +12,12 @@ #include "windows.h" -uint8_t pending_requests[256][CLIENT_ID_SIZE]; // XXX +uint8_t pending_requests[MAX_STR_SIZE][CLIENT_ID_SIZE]; // XXX uint8_t num_requests=0; // XXX extern void on_friendadded(int friendnumber); static void print_usage(ToxWindow *self); -static char prompt_buf[256] = {0}; +static char prompt_buf[MAX_STR_SIZE] = {0}; static int prompt_buf_pos = 0; // XXX: @@ -43,7 +43,7 @@ unsigned char *hex_string_to_bin(char hex_string[]) static void execute(ToxWindow *self, char *u_cmd) { int newlines = 0; - char cmd[256] = {0}; + char cmd[MAX_STR_SIZE] = {0}; int i; for (i = 0; i < strlen(prompt_buf); ++i) { if (u_cmd[i] == '\n') @@ -53,9 +53,9 @@ static void execute(ToxWindow *self, char *u_cmd) } int leading_spc = 0; - for (i = 0; i < 256 && isspace(cmd[i]); ++i) + for (i = 0; i < MAX_STR_SIZE && isspace(cmd[i]); ++i) leading_spc++; - memmove(cmd, cmd + leading_spc, 256 - leading_spc); + memmove(cmd, cmd + leading_spc, MAX_STR_SIZE - leading_spc); int cmd_end = strlen(cmd); while (cmd_end > 0 && cmd_end--) @@ -121,7 +121,7 @@ static void execute(ToxWindow *self, char *u_cmd) } else if (!strncmp(cmd, "add ", strlen("add "))) { - uint8_t id_bin[32]; + uint8_t id_bin[KEY_SIZE_BYTES]; char xx[3]; uint32_t x; char *id = strchr(cmd, ' '); @@ -136,12 +136,12 @@ static void execute(ToxWindow *self, char *u_cmd) msg++; } else msg = ""; - if (strlen(id) != 2*32) { + if (strlen(id) != 2*KEY_SIZE_BYTES) { wprintw(self->window, "Invalid ID length.\n"); return; } int i; - for (i = 0; i < 32; ++i) { + for (i = 0; i < KEY_SIZE_BYTES; ++i) { xx[0] = id[2*i]; xx[1] = id[2*i+1]; xx[2] = '\0'; @@ -228,17 +228,6 @@ static void execute(ToxWindow *self, char *u_cmd) } } - else if (!strncmp(cmd, "statusmsg ", strlen("statumsg "))) { - char *msg = strchr(cmd, ' '); - if (msg == NULL) { - wprintw(self->window, "Invalid syntax.\n"); - return; - } - msg++; - m_set_statusmessage((uint8_t*) msg, strlen(msg)+1); - wprintw(self->window, "Status set to: %s\n", msg); - } - else if (!strncmp(cmd, "nick ", strlen("nick "))) { char *nick = strchr(cmd, ' '); if (nick == NULL) { @@ -251,9 +240,9 @@ static void execute(ToxWindow *self, char *u_cmd) } else if (!strcmp(cmd, "myid")) { - char id[32*2 + 1] = {0}; + char id[KEY_SIZE_BYTES*2 + 1] = {0}; size_t i; - for (i = 0; i < 32; ++i) { + for (i = 0; i < KEY_SIZE_BYTES; ++i) { char xx[3]; snprintf(xx, sizeof(xx), "%02x", self_public_key[i] & 0xff); strcat(id, xx); @@ -372,7 +361,6 @@ static void print_usage(ToxWindow *self) wprintw(self->window, " connect : Connect to DHT server\n"); wprintw(self->window, " add : Add friend\n"); wprintw(self->window, " status : Set your status\n"); - wprintw(self->window, " statusmsg : Set your status\n"); wprintw(self->window, " nick : Set your nickname\n"); wprintw(self->window, " accept : Accept friend request\n"); wprintw(self->window, " myid : Print your ID\n"); diff --git a/windows.h b/windows.h index cb45614..287e534 100644 --- a/windows.h +++ b/windows.h @@ -5,7 +5,9 @@ #include #define TOXWINDOWS_MAX_NUM 32 #define MAX_FRIENDS_NUM 100 - +#define MAX_STR_SIZE 256 +#define KEY_SIZE_BYTES 32 + /* number of permanent default windows */ #define N_DEFAULT_WINS 2