From dc912588d17deca35aa1fa308cc5f504ac1d245d Mon Sep 17 00:00:00 2001 From: jfreegman Date: Sat, 20 Jan 2024 11:07:40 -0500 Subject: [PATCH] refactor: all callbacks now take a Toxic * instead of Tox * --- src/chat.c | 104 ++++++++++++---- src/conference.c | 90 +++++++++----- src/conference.h | 4 +- src/conference_commands.c | 4 +- src/friendlist.c | 34 ++++-- src/friendlist.h | 2 +- src/game_base.c | 13 +- src/global_commands.c | 2 +- src/groupchat_commands.c | 19 ++- src/groupchats.c | 245 +++++++++++++++++++++++++++----------- src/groupchats.h | 12 +- src/help.c | 2 +- src/help.h | 2 +- src/prompt.c | 23 ++-- src/toxic.c | 10 +- src/windows.c | 199 +++++++++++++++++++------------ src/windows.h | 63 +++++----- 17 files changed, 539 insertions(+), 289 deletions(-) diff --git a/src/chat.c b/src/chat.c index 50d6889d0..33f0e8597 100644 --- a/src/chat.c +++ b/src/chat.c @@ -284,9 +284,13 @@ static void chat_onConnectionChange(ToxWindow *self, Toxic *toxic, uint32_t num, } } -static void chat_onTypingChange(ToxWindow *self, Tox *tox, uint32_t num, bool is_typing) +static void chat_onTypingChange(ToxWindow *self, Toxic *toxic, uint32_t num, bool is_typing) { - UNUSED_VAR(tox); + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } if (self->num != num) { return; @@ -295,9 +299,13 @@ static void chat_onTypingChange(ToxWindow *self, Tox *tox, uint32_t num, bool is Friends.list[num].is_typing = is_typing; } -static void chat_onNickChange(ToxWindow *self, Tox *tox, uint32_t num, const char *nick, size_t length) +static void chat_onNickChange(ToxWindow *self, Toxic *toxic, uint32_t num, const char *nick, size_t length) { - UNUSED_VAR(tox); + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } if (self->num != num) { return; @@ -312,9 +320,13 @@ static void chat_onNickChange(ToxWindow *self, Tox *tox, uint32_t num, const cha set_window_title(self, statusbar->nick, length); } -static void chat_onStatusChange(ToxWindow *self, Tox *tox, uint32_t num, Tox_User_Status status) +static void chat_onStatusChange(ToxWindow *self, Toxic *toxic, uint32_t num, Tox_User_Status status) { - UNUSED_VAR(tox); + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } if (self->num != num) { return; @@ -328,6 +340,10 @@ static void chat_onStatusMessageChange(ToxWindow *self, uint32_t num, const char { UNUSED_VAR(length); + if (self == NULL) { + return; + } + if (self->num != num) { return; } @@ -338,11 +354,19 @@ static void chat_onStatusMessageChange(ToxWindow *self, uint32_t num, const char statusbar->statusmsg_len = strlen(statusbar->statusmsg); } -static void chat_onReadReceipt(ToxWindow *self, Tox *tox, uint32_t num, uint32_t receipt) +static void chat_onReadReceipt(ToxWindow *self, Toxic *toxic, uint32_t num, uint32_t receipt) { UNUSED_VAR(num); - cqueue_remove(self, tox, receipt); + if (self == NULL) { + return; + } + + if (toxic == NULL) { + return; + } + + cqueue_remove(self, toxic->tox, receipt); } /* Stops active file transfers for this friend. Called when a friend goes offline */ @@ -388,17 +412,23 @@ static void chat_resume_file_senders(ToxWindow *self, Tox *tox, uint32_t friendn } } -static void chat_onFileChunkRequest(ToxWindow *self, Tox *tox, uint32_t friendnum, uint32_t filenumber, +static void chat_onFileChunkRequest(ToxWindow *self, Toxic *toxic, uint32_t friendnum, uint32_t filenumber, uint64_t position, size_t length) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (friendnum != self->num) { return; } struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenumber); - if (!ft) { + if (ft == NULL) { return; } @@ -461,18 +491,25 @@ static void chat_onFileChunkRequest(ToxWindow *self, Tox *tox, uint32_t friendnu ft->bps += send_length; } -static void chat_onFileRecvChunk(ToxWindow *self, Tox *tox, uint32_t friendnum, uint32_t filenumber, uint64_t position, +static void chat_onFileRecvChunk(ToxWindow *self, Toxic *toxic, uint32_t friendnum, uint32_t filenumber, + uint64_t position, const char *data, size_t length) { UNUSED_VAR(position); + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (friendnum != self->num) { return; } struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenumber); - if (!ft) { + if (ft == NULL) { return; } @@ -505,9 +542,13 @@ static void chat_onFileRecvChunk(ToxWindow *self, Tox *tox, uint32_t friendnum, ft->position += length; } -static void chat_onFileControl(ToxWindow *self, Tox *tox, uint32_t friendnum, uint32_t filenumber, +static void chat_onFileControl(ToxWindow *self, Toxic *toxic, uint32_t friendnum, uint32_t filenumber, Tox_File_Control control) { + if (toxic == NULL || self == NULL) { + return; + } + if (friendnum != self->num) { return; } @@ -540,7 +581,7 @@ static void chat_onFileControl(ToxWindow *self, Tox *tox, uint32_t friendnum, ui case TOX_FILE_CONTROL_CANCEL: { char msg[MAX_STR_SIZE]; snprintf(msg, sizeof(msg), "File transfer for '%s' was aborted.", ft->file_name); - close_file_transfer(self, tox, ft, -1, msg, notif_error); + close_file_transfer(self, toxic->tox, ft, -1, msg, notif_error); break; } } @@ -550,8 +591,14 @@ static void chat_onFileControl(ToxWindow *self, Tox *tox, uint32_t friendnum, ui * * Returns true if resume is successful. */ -static bool chat_resume_broken_ft(ToxWindow *self, Tox *tox, uint32_t friendnum, uint32_t filenumber) +static bool chat_resume_broken_ft(ToxWindow *self, Toxic *toxic, uint32_t friendnum, uint32_t filenumber) { + if (toxic == NULL || self == NULL) { + return false; + } + + Tox *tox = toxic->tox; + char msg[MAX_STR_SIZE]; uint8_t file_id[TOX_FILE_ID_LENGTH]; @@ -578,7 +625,7 @@ static bool chat_resume_broken_ft(ToxWindow *self, Tox *tox, uint32_t friendnum, } } - if (!resuming || !ft) { + if (!resuming || ft == NULL) { return false; } @@ -633,24 +680,24 @@ static bool valid_file_name(const char *filename, size_t length) static void chat_onFileRecv(ToxWindow *self, Toxic *toxic, uint32_t friendnum, uint32_t filenumber, uint64_t file_size, const char *filename, size_t name_length) { - if (self->num != friendnum) { - return; - } - if (toxic == NULL || self == NULL) { return; } Tox *tox = toxic->tox; + if (self->num != friendnum) { + return; + } + /* first check if we need to resume a broken transfer */ - if (chat_resume_broken_ft(self, tox, friendnum, filenumber)) { + if (chat_resume_broken_ft(self, toxic, friendnum, filenumber)) { return; } struct FileTransfer *ft = new_file_transfer(self, friendnum, filenumber, FILE_TRANSFER_RECV, TOX_FILE_KIND_DATA); - if (!ft) { + if (ft == NULL) { tox_file_control(tox, friendnum, filenumber, TOX_FILE_CONTROL_CANCEL, NULL); line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "File transfer request failed: Too many concurrent file transfers."); @@ -1343,8 +1390,13 @@ bool chat_onKey(ToxWindow *self, Toxic *toxic, wint_t key, bool ltr) return input_ret; } -static void chat_onDraw(ToxWindow *self, Tox *tox) +static void chat_onDraw(ToxWindow *self, Toxic *toxic) { + if (toxic == NULL || self == NULL) { + fprintf(stderr, "chat_onDraw null param\n"); + return; + } + int x2; int y2; getmaxyx(self->window, y2, x2); @@ -1459,8 +1511,8 @@ static void chat_onDraw(ToxWindow *self, Tox *tox) pthread_mutex_lock(&Winthread.lock); - tox_friend_get_status_message(tox, self->num, (uint8_t *) statusmsg, NULL); - size_t s_len = tox_friend_get_status_message_size(tox, self->num, NULL); + tox_friend_get_status_message(toxic->tox, self->num, (uint8_t *) statusmsg, NULL); + const size_t s_len = tox_friend_get_status_message_size(toxic->tox, self->num, NULL); filter_str(statusmsg, s_len); snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg); @@ -1546,7 +1598,7 @@ static void chat_onDraw(ToxWindow *self, Tox *tox) #endif if (self->help->active) { - help_onDraw(self); + help_draw_main(self); } pthread_mutex_lock(&Winthread.lock); diff --git a/src/conference.c b/src/conference.c index bc99666fd..817e68ea0 100644 --- a/src/conference.c +++ b/src/conference.c @@ -296,9 +296,9 @@ void free_conference(ToxWindow *self, uint32_t conferencenum) kill_conference_window(self); } -static void delete_conference(ToxWindow *self, Tox *tox, uint32_t conferencenum) +static void delete_conference(ToxWindow *self, Toxic *toxic, uint32_t conferencenum) { - tox_conference_delete(tox, conferencenum, NULL); + tox_conference_delete(toxic->tox, conferencenum, NULL); free_conference(self, conferencenum); } @@ -363,11 +363,17 @@ void redraw_conference_win(ToxWindow *self) wmove(self->window, y2 - CURS_Y_OFFSET, 0); } -static void conference_onConferenceMessage(ToxWindow *self, Tox *tox, uint32_t conferencenum, uint32_t peernum, +static void conference_onConferenceMessage(ToxWindow *self, Toxic *toxic, uint32_t conferencenum, uint32_t peernum, Tox_Message_Type type, const char *msg, size_t len) { UNUSED_VAR(len); + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (self->num != conferencenum) { return; } @@ -404,10 +410,16 @@ static void conference_onConferenceMessage(ToxWindow *self, Tox *tox, uint32_t c write_to_log(msg, nick, ctx->log, false); } -static void conference_onConferenceTitleChange(ToxWindow *self, Tox *tox, uint32_t conferencenum, uint32_t peernum, +static void conference_onConferenceTitleChange(ToxWindow *self, Toxic *toxic, uint32_t conferencenum, uint32_t peernum, const char *title, size_t length) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + ChatContext *ctx = self->chatwin; if (self->num != conferencenum) { @@ -658,7 +670,7 @@ static bool find_peer_by_pubkey(const ConferencePeer *list, uint32_t num_peers, return false; } -static void update_peer_list(ToxWindow *self, Tox *tox, uint32_t conferencenum, uint32_t num_peers, +static void update_peer_list(ToxWindow *self, Toxic *toxic, uint32_t conferencenum, uint32_t num_peers, uint32_t old_num_peers) { ConferenceChat *chat = &conferences[conferencenum]; @@ -667,6 +679,8 @@ static void update_peer_list(ToxWindow *self, Tox *tox, uint32_t conferencenum, return; } + Tox *tox = toxic->tox; + ChatContext *ctx = self->chatwin; ConferencePeer *old_peer_list = malloc(old_num_peers * sizeof(ConferencePeer)); @@ -758,8 +772,14 @@ static void update_peer_list(ToxWindow *self, Tox *tox, uint32_t conferencenum, free(old_peer_list); } -static void conference_onConferenceNameListChange(ToxWindow *self, Tox *tox, uint32_t conferencenum) +static void conference_onConferenceNameListChange(ToxWindow *self, Toxic *toxic, uint32_t conferencenum) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (self->num != conferencenum) { return; } @@ -776,7 +796,7 @@ static void conference_onConferenceNameListChange(ToxWindow *self, Tox *tox, uin Tox_Err_Conference_Peer_Query err; - uint32_t num_peers = tox_conference_peer_count(tox, conferencenum, &err); + const uint32_t num_peers = tox_conference_peer_count(tox, conferencenum, &err); if (err != TOX_ERR_CONFERENCE_PEER_QUERY_OK) { fprintf(stderr, "conference_onConferenceNameListChange() failed with error: %d\n", err); @@ -787,14 +807,19 @@ static void conference_onConferenceNameListChange(ToxWindow *self, Tox *tox, uin chat->num_peers = num_peers; chat->max_idx = num_peers; - update_peer_list(self, tox, conferencenum, num_peers, old_num); + update_peer_list(self, toxic, conferencenum, num_peers, old_num); } -static void conference_onConferencePeerNameChange(ToxWindow *self, Tox *tox, uint32_t conferencenum, uint32_t peernum, +static void conference_onConferencePeerNameChange(ToxWindow *self, Toxic *toxic, uint32_t conferencenum, + uint32_t peernum, const char *name, size_t length) { UNUSED_VAR(length); + if (toxic == NULL || self == NULL) { + return; + } + if (self->num != conferencenum) { return; } @@ -819,7 +844,7 @@ static void conference_onConferencePeerNameChange(ToxWindow *self, Tox *tox, uin } } - conference_onConferenceNameListChange(self, tox, conferencenum); + conference_onConferenceNameListChange(self, toxic, conferencenum); } static void send_conference_action(ToxWindow *self, ChatContext *ctx, Tox *tox, char *action) @@ -993,7 +1018,7 @@ static bool conference_onKey(ToxWindow *self, Toxic *toxic, wint_t key, bool ltr if (line[0] == '/') { if (strcmp(line, "/close") == 0) { - delete_conference(self, tox, self->num); + delete_conference(self, toxic, self->num); return true; } else if (strncmp(line, "/me ", strlen("/me ")) == 0) { send_conference_action(self, ctx, tox, line + strlen("/me ")); @@ -1019,12 +1044,12 @@ static bool conference_onKey(ToxWindow *self, Toxic *toxic, wint_t key, bool ltr return input_ret; } -static void draw_peer(ToxWindow *self, Tox *tox, ChatContext *ctx, uint32_t i) +static void draw_peer(ToxWindow *self, Toxic *toxic, ChatContext *ctx, uint32_t i) { pthread_mutex_lock(&Winthread.lock); const uint32_t peer_idx = i + conferences[self->num].side_pos; const uint32_t peernum = conferences[self->num].name_list[peer_idx].peernum; - const bool is_self = tox_conference_peer_number_is_ours(tox, self->num, peernum, NULL); + const bool is_self = tox_conference_peer_number_is_ours(toxic->tox, self->num, peernum, NULL); const bool audio = conferences[self->num].audio_enabled; if (audio) { @@ -1051,7 +1076,7 @@ static void draw_peer(ToxWindow *self, Tox *tox, ChatContext *ctx, uint32_t i) /* truncate nick to fit in side panel without modifying list */ char tmpnick[TOX_MAX_NAME_LENGTH]; - int maxlen = SIDEBAR_WIDTH - 2 - 2 * audio; + const int maxlen = SIDEBAR_WIDTH - 2 - 2 * audio; pthread_mutex_lock(&Winthread.lock); memcpy(tmpnick, &conferences[self->num].name_list[peer_idx].name, maxlen); @@ -1070,9 +1095,12 @@ static void draw_peer(ToxWindow *self, Tox *tox, ChatContext *ctx, uint32_t i) } } -static void conference_onDraw(ToxWindow *self, Tox *tox) +static void conference_onDraw(ToxWindow *self, Toxic *toxic) { - UNUSED_VAR(tox); + if (toxic == NULL || self == NULL) { + fprintf(stderr, "conference_onDraw null param\n"); + return; + } int x2, y2; getmaxyx(self->window, y2, x2); @@ -1177,7 +1205,7 @@ static void conference_onDraw(ToxWindow *self, Tox *tox) i < num_peers && i < y2 - header_lines - CHATBOX_HEIGHT; ++i) { wmove(ctx->sidebar, i + header_lines, 1); - draw_peer(self, tox, ctx, i); + draw_peer(self, toxic, ctx, i); } } @@ -1194,13 +1222,13 @@ static void conference_onDraw(ToxWindow *self, Tox *tox) wnoutrefresh(self->window); if (self->help->active) { - help_onDraw(self); + help_draw_main(self); } } static void conference_onInit(ToxWindow *self, Toxic *toxic) { - if (self == NULL) { + if (toxic == NULL || self == NULL) { return; } @@ -1316,7 +1344,7 @@ static void conference_read_device_callback(const int16_t *captured, uint32_t si chat->last_sent_audio = get_unix_time(); - int channels = user_settings->conference_audio_channels; + const int channels = user_settings->conference_audio_channels; toxav_group_send_audio(audio_input_callback_data->tox, audio_input_callback_data->conferencenum, @@ -1335,12 +1363,12 @@ bool init_conference_audio_input(Tox *tox, uint32_t conferencenum) const AudioInputCallbackData audio_input_callback_data = { tox, conferencenum }; chat->audio_input_callback_data = audio_input_callback_data; - int channels = user_settings->conference_audio_channels; + const int channels = user_settings->conference_audio_channels; - bool success = (open_input_device(&chat->audio_in_idx, - conference_read_device_callback, &chat->audio_input_callback_data, - CONFAV_SAMPLE_RATE, CONFAV_FRAME_DURATION, channels) - == de_None); + const bool success = (open_input_device(&chat->audio_in_idx, + conference_read_device_callback, &chat->audio_input_callback_data, + CONFAV_SAMPLE_RATE, CONFAV_FRAME_DURATION, channels) + == de_None); chat->audio_enabled = success; @@ -1360,10 +1388,10 @@ bool toggle_conference_push_to_talk(uint32_t conferencenum, bool enabled) return true; } -bool enable_conference_audio(ToxWindow *self, Tox *tox, uint32_t conferencenum) +bool enable_conference_audio(ToxWindow *self, Toxic *toxic, uint32_t conferencenum) { - if (!toxav_groupchat_av_enabled(tox, conferencenum)) { - if (toxav_groupchat_enable_av(tox, conferencenum, audio_conference_callback, NULL) != 0) { + if (!toxav_groupchat_av_enabled(toxic->tox, conferencenum)) { + if (toxav_groupchat_enable_av(toxic->tox, conferencenum, audio_conference_callback, NULL) != 0) { return false; } } @@ -1374,7 +1402,7 @@ bool enable_conference_audio(ToxWindow *self, Tox *tox, uint32_t conferencenum) return true; } - const bool success = init_conference_audio_input(tox, conferencenum); + const bool success = init_conference_audio_input(toxic->tox, conferencenum); if (success) { self->is_call = true; @@ -1383,7 +1411,7 @@ bool enable_conference_audio(ToxWindow *self, Tox *tox, uint32_t conferencenum) return success; } -bool disable_conference_audio(ToxWindow *self, Tox *tox, uint32_t conferencenum) +bool disable_conference_audio(ToxWindow *self, Toxic *toxic, uint32_t conferencenum) { ConferenceChat *chat = &conferences[conferencenum]; @@ -1398,7 +1426,7 @@ bool disable_conference_audio(ToxWindow *self, Tox *tox, uint32_t conferencenum) return true; } - const bool success = toxav_groupchat_disable_av(tox, conferencenum) == 0; + const bool success = toxav_groupchat_disable_av(toxic->tox, conferencenum) == 0; if (success) { self->is_call = false; diff --git a/src/conference.h b/src/conference.h index 26a602d5f..b5672415e 100644 --- a/src/conference.h +++ b/src/conference.h @@ -108,13 +108,13 @@ uint32_t get_name_list_entries_by_prefix(uint32_t conferencenum, const char *pre * * Return true on success or if audio is already enabled. */ -bool enable_conference_audio(ToxWindow *self, Tox *tox, uint32_t conferencenum); +bool enable_conference_audio(ToxWindow *self, Toxic *toxic, uint32_t conferencenum); /* Disable audio in a conference. * * Return true on success or if audio is already disabled. */ -bool disable_conference_audio(ToxWindow *self, Tox *tox, uint32_t conferencenum); +bool disable_conference_audio(ToxWindow *self, Toxic *toxic, uint32_t conferencenum); bool init_conference_audio_input(Tox *tox, uint32_t conferencenum); bool toggle_conference_push_to_talk(uint32_t conferencenum, bool enabled); diff --git a/src/conference_commands.c b/src/conference_commands.c index a88651c9b..81b6ad805 100644 --- a/src/conference_commands.c +++ b/src/conference_commands.c @@ -107,8 +107,6 @@ void cmd_enable_audio(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, c return; } - Tox *tox = toxic->tox; - bool enable; if (argc == 1 && !strcasecmp(argv[1], "on")) { @@ -120,7 +118,7 @@ void cmd_enable_audio(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, c return; } - if (enable ? enable_conference_audio(self, tox, self->num) : disable_conference_audio(self, tox, self->num)) { + if (enable ? enable_conference_audio(self, toxic, self->num) : disable_conference_audio(self, toxic, self->num)) { print_err(self, enable ? "Enabled conference audio. Use the '/ptt' command to toggle Push-To-Talk." : "Disabled conference audio"); } else { diff --git a/src/friendlist.c b/src/friendlist.c index 13b68975f..f3772f076 100644 --- a/src/friendlist.c +++ b/src/friendlist.c @@ -452,7 +452,7 @@ static void friendlist_onConnectionChange(ToxWindow *self, Toxic *toxic, uint32_ sort_friendlist_index(); } -static void friendlist_onNickChange(ToxWindow *self, Tox *tox, uint32_t num, const char *nick, size_t length) +static void friendlist_onNickChange(ToxWindow *self, Toxic *toxic, uint32_t num, const char *nick, size_t length) { UNUSED_VAR(self); UNUSED_VAR(length); @@ -473,7 +473,7 @@ static void friendlist_onNickChange(ToxWindow *self, Tox *tox, uint32_t num, con char newnamecpy[TOXIC_MAX_NAME_LENGTH + 1]; char myid[TOX_ADDRESS_SIZE]; strcpy(newnamecpy, Friends.list[num].name); - tox_self_get_address(tox, (uint8_t *) myid); + tox_self_get_address(toxic->tox, (uint8_t *) myid); if (strcmp(oldname, newnamecpy) != 0) { if (rename_logfile(oldname, newnamecpy, myid, Friends.list[num].pub_key, Friends.list[num].chatwin) != 0) { @@ -484,10 +484,10 @@ static void friendlist_onNickChange(ToxWindow *self, Tox *tox, uint32_t num, con sort_friendlist_index(); } -static void friendlist_onStatusChange(ToxWindow *self, Tox *tox, uint32_t num, Tox_User_Status status) +static void friendlist_onStatusChange(ToxWindow *self, Toxic *toxic, uint32_t num, Tox_User_Status status) { UNUSED_VAR(self); - UNUSED_VAR(tox); + UNUSED_VAR(toxic); if (num >= Friends.max_idx) { return; @@ -508,10 +508,17 @@ static void friendlist_onStatusMessageChange(ToxWindow *self, uint32_t num, cons Friends.list[num].statusmsg_len = strlen(Friends.list[num].statusmsg); } -void friendlist_onFriendAdded(ToxWindow *self, Tox *tox, uint32_t num, bool sort) +void friendlist_onFriendAdded(ToxWindow *self, Toxic *toxic, uint32_t num, bool sort) { UNUSED_VAR(self); + if (toxic == NULL) { + fprintf(stderr, "friendlist_onFriendAdded null param\n"); + return; + } + + Tox *tox = toxic->tox; + realloc_friends(Friends.max_idx + 1); clear_friendlist_index(Friends.max_idx); @@ -1154,12 +1161,17 @@ static void blocklist_onDraw(ToxWindow *self, Tox *tox, int y2, int x2) draw_del_popup(); if (self->help->active) { - help_onDraw(self); + help_draw_main(self); } } -static void friendlist_onDraw(ToxWindow *self, Tox *tox) +static void friendlist_onDraw(ToxWindow *self, Toxic *toxic) { + if (toxic == NULL || self == NULL) { + fprintf(stderr, "friendlist_onDraw null param\n"); + return; + } + curs_set(0); werase(self->window); int x2, y2; @@ -1178,7 +1190,7 @@ static void friendlist_onDraw(ToxWindow *self, Tox *tox) draw_window_bar(self); if (blocklist_view == 1) { - blocklist_onDraw(self, tox, y2, x2); + blocklist_onDraw(self, toxic->tox, y2, x2); return; } @@ -1276,8 +1288,8 @@ static void friendlist_onDraw(ToxWindow *self, Tox *tox) char statusmsg[TOX_MAX_STATUS_MESSAGE_LENGTH]; pthread_mutex_lock(&Winthread.lock); - tox_friend_get_status_message(tox, Friends.list[f].num, (uint8_t *) statusmsg, NULL); - size_t s_len = tox_friend_get_status_message_size(tox, Friends.list[f].num, NULL); + tox_friend_get_status_message(toxic->tox, Friends.list[f].num, (uint8_t *) statusmsg, NULL); + const size_t s_len = tox_friend_get_status_message_size(toxic->tox, Friends.list[f].num, NULL); pthread_mutex_unlock(&Winthread.lock); statusmsg[s_len] = '\0'; @@ -1381,7 +1393,7 @@ static void friendlist_onDraw(ToxWindow *self, Tox *tox) draw_del_popup(); if (self->help->active) { - help_onDraw(self); + help_draw_main(self); } } diff --git a/src/friendlist.h b/src/friendlist.h index 100d91077..3e380d8f4 100644 --- a/src/friendlist.h +++ b/src/friendlist.h @@ -125,7 +125,7 @@ void disable_chatwin(uint32_t f_num); int get_friendnum(uint8_t *name); int load_blocklist(char *data); void kill_friendlist(ToxWindow *self); -void friendlist_onFriendAdded(ToxWindow *self, Tox *tox, uint32_t num, bool sort); +void friendlist_onFriendAdded(ToxWindow *self, Toxic *toxic, uint32_t num, bool sort); Tox_User_Status get_friend_status(uint32_t friendnumber); Tox_Connection get_friend_connection_status(uint32_t friendnumber); diff --git a/src/game_base.c b/src/game_base.c index c885bf2cc..4702a8fcf 100644 --- a/src/game_base.c +++ b/src/game_base.c @@ -726,9 +726,14 @@ static void game_update_state(GameData *game) } } -void game_onDraw(ToxWindow *self, Tox *tox) +void game_onDraw(ToxWindow *self, Toxic *toxic) { - UNUSED_VAR(tox); // Note: This function is not thread safe if we ever need to use `m` + UNUSED_VAR(toxic); // Note: This function is not thread safe if we ever need to use `toxic` + + if (self == NULL) { + fprintf(stderr, "game_onDraw null param\n"); + return; + } GameData *game = self->game; @@ -844,9 +849,9 @@ void game_onInit(ToxWindow *self, Toxic *toxic) * Byte 2-5: Game ID * Byte 6-* Game data */ -void game_onPacket(ToxWindow *self, Tox *tox, uint32_t friendnumber, const uint8_t *data, size_t length) +void game_onPacket(ToxWindow *self, Toxic *toxic, uint32_t friendnumber, const uint8_t *data, size_t length) { - UNUSED_VAR(tox); + UNUSED_VAR(toxic); GameData *game = self->game; diff --git a/src/global_commands.c b/src/global_commands.c index c1305a748..6283d14eb 100644 --- a/src/global_commands.c +++ b/src/global_commands.c @@ -1039,7 +1039,7 @@ void cmd_status(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char (* tox_self_set_status(tox, status); prompt_update_status(prompt, status); - set_status_all_groups(tox, status); + set_status_all_groups(toxic, status); line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Your status has been changed to %s.", status_str); diff --git a/src/groupchat_commands.c b/src/groupchat_commands.c index bfc41b53f..edc780763 100644 --- a/src/groupchat_commands.c +++ b/src/groupchat_commands.c @@ -113,7 +113,7 @@ void cmd_group_nick(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, cha len = MIN(len, TOXIC_MAX_NAME_LENGTH - 1); nick[len] = '\0'; - set_nick_this_group(self, toxic->tox, nick, len); + set_nick_this_group(self, toxic, nick, len); store_data(toxic); } @@ -199,7 +199,8 @@ void cmd_kick(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char (*ar get_group_self_nick_truncate(tox, self_nick, self->num); line_info_add(self, true, NULL, NULL, SYS_MSG, 1, RED, "-!- %s has been kicked by %s", nick, self_nick); - groupchat_onGroupPeerExit(self, tox, self->num, target_peer_id, TOX_GROUP_EXIT_TYPE_KICK, nick, strlen(nick), NULL, 0); + groupchat_onGroupPeerExit(self, toxic, self->num, target_peer_id, TOX_GROUP_EXIT_TYPE_KICK, nick, strlen(nick), NULL, + 0); return; } @@ -296,7 +297,7 @@ void cmd_mod(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char (*arg switch (err) { case TOX_ERR_GROUP_MOD_SET_ROLE_OK: { - groupchat_onGroupModeration(self, tox, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_MODERATOR); + groupchat_onGroupModeration(self, toxic, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_MODERATOR); return; } @@ -367,7 +368,7 @@ void cmd_unmod(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char (*a switch (err) { case TOX_ERR_GROUP_MOD_SET_ROLE_OK: { - groupchat_onGroupModeration(self, tox, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_USER); + groupchat_onGroupModeration(self, toxic, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_USER); return; } @@ -726,7 +727,7 @@ void cmd_silence(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char ( switch (err) { case TOX_ERR_GROUP_MOD_SET_ROLE_OK: { - groupchat_onGroupModeration(self, tox, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_OBSERVER); + groupchat_onGroupModeration(self, toxic, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_OBSERVER); return; } @@ -797,7 +798,7 @@ void cmd_unsilence(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char switch (err) { case TOX_ERR_GROUP_MOD_SET_ROLE_OK: { - groupchat_onGroupModeration(self, tox, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_USER); + groupchat_onGroupModeration(self, toxic, self->num, self_peer_id, target_peer_id, TOX_GROUP_MOD_EVENT_USER); return; } @@ -836,18 +837,16 @@ void cmd_rejoin(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char (* return; } - Tox *tox = toxic->tox; - Tox_Err_Group_Reconnect err; - if (!tox_group_reconnect(tox, self->num, &err)) { + if (!tox_group_reconnect(toxic->tox, self->num, &err)) { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Failed to rejoin group (error %d).", err); return; } line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Reconnecting to group..."); - groupchat_rejoin(self, tox); + groupchat_rejoin(self, toxic); } void cmd_set_topic(WINDOW *window, ToxWindow *self, Toxic *toxic, int argc, char (*argv)[MAX_STR_SIZE]) diff --git a/src/groupchats.c b/src/groupchats.c index 76467fdf9..5e0dec419 100644 --- a/src/groupchats.c +++ b/src/groupchats.c @@ -126,13 +126,13 @@ GroupChat groupchats[MAX_GROUPCHAT_NUM]; static ToxWindow *new_group_chat(Tox *tox, uint32_t groupnumber, const char *groupname, int length); static void groupchat_set_group_name(ToxWindow *self, Toxic *toxic, uint32_t groupnumber); static void group_update_name_list(uint32_t groupnumber); -static void groupchat_onGroupPeerJoin(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id); +static void groupchat_onGroupPeerJoin(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id); static int realloc_peer_list(uint32_t groupnumber, uint32_t n); -static void groupchat_onGroupNickChange(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +static void groupchat_onGroupNickChange(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, const char *new_nick, size_t len); -static void groupchat_onGroupStatusChange(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +static void groupchat_onGroupStatusChange(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, TOX_USER_STATUS status); -static void groupchat_onGroupSelfNickChange(ToxWindow *self, Tox *tox, uint32_t groupnumber, const char *old_nick, +static void groupchat_onGroupSelfNickChange(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, const char *old_nick, size_t old_length, const char *new_nick, size_t length); static void ignore_list_cleanup(GroupChat *chat); @@ -239,7 +239,7 @@ static void clear_peer(GroupPeer *peer) }; } -void groupchat_rejoin(ToxWindow *self, Tox *tox) +void groupchat_rejoin(ToxWindow *self, Toxic *toxic) { GroupChat *chat = get_groupchat(self->num); @@ -249,7 +249,7 @@ void groupchat_rejoin(ToxWindow *self, Tox *tox) } Tox_Err_Group_Self_Query s_err; - uint32_t self_peer_id = tox_group_self_get_peer_id(tox, self->num, &s_err); + const uint32_t self_peer_id = tox_group_self_get_peer_id(toxic->tox, self->num, &s_err); if (s_err != TOX_ERR_GROUP_SELF_QUERY_OK) { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Failed to fetch self peer_id in groupchat_rejoin()"); @@ -264,7 +264,7 @@ void groupchat_rejoin(ToxWindow *self, Tox *tox) chat->max_idx = 0; realloc_peer_list(self->num, 0); - groupchat_onGroupPeerJoin(self, tox, self->num, self_peer_id); + groupchat_onGroupPeerJoin(self, toxic, self->num, self_peer_id); } static void kill_groupchat_window(ToxWindow *self) @@ -291,7 +291,7 @@ static void kill_groupchat_window(ToxWindow *self) } /* Closes groupchat window and cleans up. */ -static void close_groupchat(ToxWindow *self, Tox *tox, uint32_t groupnumber) +static void close_groupchat(ToxWindow *self, Toxic *toxic, uint32_t groupnumber) { GroupChat *chat = get_groupchat(groupnumber); @@ -321,16 +321,16 @@ static void close_groupchat(ToxWindow *self, Tox *tox, uint32_t groupnumber) kill_groupchat_window(self); } -void exit_groupchat(ToxWindow *self, Tox *tox, uint32_t groupnumber, const char *partmessage, size_t length) +void exit_groupchat(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, const char *partmessage, size_t length) { if (length > TOX_GROUP_MAX_PART_LENGTH) { length = TOX_GROUP_MAX_PART_LENGTH; } - tox_group_leave(tox, groupnumber, (uint8_t *) partmessage, length, NULL); + tox_group_leave(toxic->tox, groupnumber, (uint8_t *) partmessage, length, NULL); if (self != NULL) { - close_groupchat(self, tox, groupnumber); + close_groupchat(self, toxic, groupnumber); } } @@ -440,7 +440,7 @@ int init_groupchat_win(Toxic *toxic, uint32_t groupnumber, const char *groupname groupchats[i].time_connected = get_unix_time(); if (!tox_group_get_chat_id(tox, groupnumber, (uint8_t *) groupchats[i].chat_id, NULL)) { - close_groupchat(self, tox, groupnumber); + close_groupchat(self, toxic, groupnumber); return -1; } @@ -455,7 +455,7 @@ int init_groupchat_win(Toxic *toxic, uint32_t groupnumber, const char *groupname uint32_t peer_id = tox_group_self_get_peer_id(tox, groupnumber, &err); if (err != TOX_ERR_GROUP_SELF_QUERY_OK) { - close_groupchat(self, tox, groupnumber); + close_groupchat(self, toxic, groupnumber); return -1; } @@ -463,7 +463,7 @@ int init_groupchat_win(Toxic *toxic, uint32_t groupnumber, const char *groupname groupchat_set_group_name(self, toxic, groupnumber); } - groupchat_onGroupPeerJoin(self, tox, groupnumber, peer_id); + groupchat_onGroupPeerJoin(self, toxic, groupnumber, peer_id); return 0; } @@ -474,12 +474,14 @@ int init_groupchat_win(Toxic *toxic, uint32_t groupnumber, const char *groupname return -1; } -void set_nick_this_group(ToxWindow *self, Tox *tox, const char *new_nick, size_t length) +void set_nick_this_group(ToxWindow *self, Toxic *toxic, const char *new_nick, size_t length) { if (self == NULL) { return; } + Tox *tox = toxic->tox; + char old_nick[TOX_MAX_NAME_LENGTH + 1]; size_t old_length = get_group_self_nick_truncate(tox, old_nick, self->num); @@ -495,7 +497,7 @@ void set_nick_this_group(ToxWindow *self, Tox *tox, const char *new_nick, size_t switch (err) { case TOX_ERR_GROUP_SELF_NAME_SET_OK: { - groupchat_onGroupSelfNickChange(self, tox, self->num, old_nick, old_length, new_nick, length); + groupchat_onGroupSelfNickChange(self, toxic, self->num, old_nick, old_length, new_nick, length); break; } @@ -543,7 +545,7 @@ void set_nick_this_group(ToxWindow *self, Tox *tox, const char *new_nick, size_t /* } */ /* } */ -void set_status_all_groups(Tox *tox, uint8_t status) +void set_status_all_groups(Toxic *toxic, uint8_t status) { for (int i = 0; i < max_groupchat_index; ++i) { if (groupchats[i].active) { @@ -554,15 +556,15 @@ void set_status_all_groups(Tox *tox, uint8_t status) } Tox_Err_Group_Self_Query s_err; - uint32_t self_peer_id = tox_group_self_get_peer_id(tox, self->num, &s_err); + const uint32_t self_peer_id = tox_group_self_get_peer_id(toxic->tox, self->num, &s_err); if (s_err != TOX_ERR_GROUP_SELF_QUERY_OK) { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Failed to fetch self peer_id."); continue; } - if (tox_group_self_set_status(tox, self->num, (TOX_USER_STATUS) status, NULL)) { - groupchat_onGroupStatusChange(self, tox, self->num, self_peer_id, (TOX_USER_STATUS) status); + if (tox_group_self_set_status(toxic->tox, self->num, (TOX_USER_STATUS) status, NULL)) { + groupchat_onGroupStatusChange(self, toxic, self->num, self_peer_id, (TOX_USER_STATUS) status); } } } @@ -972,16 +974,16 @@ void redraw_groupchat_win(ToxWindow *self) wmove(self->window, y2 - CURS_Y_OFFSET, 0); } -static void group_onAction(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, const char *action, +static void group_onAction(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, const char *action, size_t len) { ChatContext *ctx = self->chatwin; char nick[TOX_MAX_NAME_LENGTH + 1]; - get_group_nick_truncate(tox, nick, peer_id, groupnumber); + get_group_nick_truncate(toxic->tox, nick, peer_id, groupnumber); char self_nick[TOX_MAX_NAME_LENGTH + 1]; - get_group_self_nick_truncate(tox, self_nick, groupnumber); + get_group_self_nick_truncate(toxic->tox, self_nick, groupnumber); if (strcasestr(action, self_nick)) { if (self->active_box != -1) { @@ -999,9 +1001,15 @@ static void group_onAction(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint write_to_log(action, nick, ctx->log, true); } -static void groupchat_onGroupMessage(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +static void groupchat_onGroupMessage(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, TOX_MESSAGE_TYPE type, const char *msg, size_t len) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (self->num != groupnumber || !get_groupchat(groupnumber)) { return; } @@ -1009,7 +1017,7 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *tox, uint32_t groupnu groupchat_update_last_seen(groupnumber, peer_id); if (type == TOX_MESSAGE_TYPE_ACTION) { - group_onAction(self, tox, groupnumber, peer_id, msg, len); + group_onAction(self, toxic, groupnumber, peer_id, msg, len); return; } @@ -1042,9 +1050,15 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *tox, uint32_t groupnu write_to_log(msg, nick, ctx->log, false); } -static void groupchat_onGroupPrivateMessage(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +static void groupchat_onGroupPrivateMessage(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, const char *msg, size_t len) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (self->num != groupnumber || !get_groupchat(groupnumber)) { return; } @@ -1068,9 +1082,15 @@ static void groupchat_onGroupPrivateMessage(ToxWindow *self, Tox *tox, uint32_t } } -static void groupchat_onGroupTopicChange(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +static void groupchat_onGroupTopicChange(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, const char *topic, size_t length) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + ChatContext *ctx = self->chatwin; if (self->num != groupnumber || !get_groupchat(groupnumber)) { @@ -1088,8 +1108,14 @@ static void groupchat_onGroupTopicChange(ToxWindow *self, Tox *tox, uint32_t gro write_to_log(tmp_event, nick, ctx->log, true); } -static void groupchat_onGroupPeerLimit(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_limit) +static void groupchat_onGroupPeerLimit(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_limit) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + ChatContext *ctx = self->chatwin; if (self->num != groupnumber || !get_groupchat(groupnumber)) { @@ -1104,9 +1130,15 @@ static void groupchat_onGroupPeerLimit(ToxWindow *self, Tox *tox, uint32_t group write_to_log(tmp_event, "The founder", ctx->log, true); } -static void groupchat_onGroupPrivacyState(ToxWindow *self, Tox *tox, uint32_t groupnumber, +static void groupchat_onGroupPrivacyState(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, Tox_Group_Privacy_State state) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + ChatContext *ctx = self->chatwin; if (self->num != groupnumber || !get_groupchat(groupnumber)) { @@ -1123,8 +1155,14 @@ static void groupchat_onGroupPrivacyState(ToxWindow *self, Tox *tox, uint32_t gr write_to_log(tmp_event, "The founder", ctx->log, true); } -void groupchat_onGroupVoiceState(ToxWindow *self, Tox *tox, uint32_t groupnumber, Tox_Group_Voice_State voice_state) +void groupchat_onGroupVoiceState(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, Tox_Group_Voice_State voice_state) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + ChatContext *ctx = self->chatwin; if (self->num != groupnumber || !get_groupchat(groupnumber)) { @@ -1160,8 +1198,15 @@ void groupchat_onGroupVoiceState(ToxWindow *self, Tox *tox, uint32_t groupnumber write_to_log(tmp_event, "The founder", ctx->log, true); } -static void groupchat_onGroupTopicLock(ToxWindow *self, Tox *tox, uint32_t groupnumber, Tox_Group_Topic_Lock topic_lock) +static void groupchat_onGroupTopicLock(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, + Tox_Group_Topic_Lock topic_lock) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + ChatContext *ctx = self->chatwin; if (self->num != groupnumber || !get_groupchat(groupnumber)) { @@ -1177,9 +1222,15 @@ static void groupchat_onGroupTopicLock(ToxWindow *self, Tox *tox, uint32_t group write_to_log(tmp_event, "The founder", ctx->log, true); } -static void groupchat_onGroupPassword(ToxWindow *self, Tox *tox, uint32_t groupnumber, const char *password, +static void groupchat_onGroupPassword(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, const char *password, size_t length) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + ChatContext *ctx = self->chatwin; if (self->num != groupnumber || !get_groupchat(groupnumber)) { @@ -1231,8 +1282,14 @@ static int realloc_peer_list(uint32_t groupnumber, uint32_t n) return 0; } -static void groupchat_onGroupPeerJoin(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id) +static void groupchat_onGroupPeerJoin(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (self->num != groupnumber) { return; } @@ -1292,12 +1349,17 @@ static void groupchat_onGroupPeerJoin(ToxWindow *self, Tox *tox, uint32_t groupn } } -void groupchat_onGroupPeerExit(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +void groupchat_onGroupPeerExit(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, Tox_Group_Exit_Type exit_type, const char *name, size_t name_len, const char *part_message, size_t length) { UNUSED_VAR(name_len); UNUSED_VAR(length); + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } if (self->num != groupnumber) { return; @@ -1364,7 +1426,7 @@ static void groupchat_set_group_name(ToxWindow *self, Toxic *toxic, uint32_t gro GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { return; } @@ -1406,7 +1468,7 @@ static void groupchat_onGroupSelfJoin(ToxWindow *self, Toxic *toxic, uint32_t gr GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { return; } @@ -1415,7 +1477,7 @@ static void groupchat_onGroupSelfJoin(ToxWindow *self, Toxic *toxic, uint32_t gr char topic[TOX_GROUP_MAX_TOPIC_LENGTH + 1]; Tox_Err_Group_State_Queries err; - size_t topic_length = tox_group_get_topic_size(tox, groupnumber, &err); + const size_t topic_length = tox_group_get_topic_size(tox, groupnumber, &err); if (err != TOX_ERR_GROUP_STATE_QUERIES_OK) { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Failed to retrieve group topic length (error %d)", err); @@ -1444,13 +1506,13 @@ static void groupchat_onGroupSelfJoin(ToxWindow *self, Toxic *toxic, uint32_t gr return; } - uint32_t self_peer_id = tox_group_self_get_peer_id(tox, groupnumber, &s_err); + const uint32_t self_peer_id = tox_group_self_get_peer_id(tox, groupnumber, &s_err); if (s_err != TOX_ERR_GROUP_SELF_QUERY_OK) { return; } - int idx = get_peer_index(groupnumber, self_peer_id); + const int idx = get_peer_index(groupnumber, self_peer_id); if (idx < 0) { return; @@ -1461,8 +1523,14 @@ static void groupchat_onGroupSelfJoin(ToxWindow *self, Toxic *toxic, uint32_t gr sort_peerlist(groupnumber); } -static void groupchat_onGroupRejected(ToxWindow *self, Tox *tox, uint32_t groupnumber, Tox_Group_Join_Fail type) +static void groupchat_onGroupRejected(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, Tox_Group_Join_Fail type) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + if (self->num != groupnumber || !get_groupchat(groupnumber)) { return; } @@ -1490,7 +1558,7 @@ static void groupchat_update_roles(Tox *tox, uint32_t groupnumber) { GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { return; } @@ -1510,16 +1578,22 @@ static void groupchat_update_roles(Tox *tox, uint32_t groupnumber) } } -void groupchat_onGroupModeration(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t src_peer_id, +void groupchat_onGroupModeration(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t src_peer_id, uint32_t tgt_peer_id, Tox_Group_Mod_Event type) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (self->num != groupnumber) { return; } GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { return; } @@ -1529,7 +1603,7 @@ void groupchat_onGroupModeration(ToxWindow *self, Tox *tox, uint32_t groupnumber get_group_nick_truncate(tox, src_name, src_peer_id, groupnumber); get_group_nick_truncate(tox, tgt_name, tgt_peer_id, groupnumber); - int tgt_index = get_peer_index(groupnumber, tgt_peer_id); + const int tgt_index = get_peer_index(groupnumber, tgt_peer_id); if (tgt_index < 0) { groupchat_update_roles(tox, groupnumber); @@ -1567,29 +1641,35 @@ void groupchat_onGroupModeration(ToxWindow *self, Tox *tox, uint32_t groupnumber } } -static void groupchat_onGroupSelfNickChange(ToxWindow *self, Tox *tox, uint32_t groupnumber, const char *old_nick, +static void groupchat_onGroupSelfNickChange(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, const char *old_nick, size_t old_length, const char *new_nick, size_t length) { UNUSED_VAR(old_length); + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + if (self->num != groupnumber) { return; } GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { return; } Tox_Err_Group_Self_Query s_err; - uint32_t peer_id = tox_group_self_get_peer_id(tox, self->num, &s_err); + const uint32_t peer_id = tox_group_self_get_peer_id(tox, self->num, &s_err); if (s_err != TOX_ERR_GROUP_SELF_QUERY_OK) { return; } - int peer_index = get_peer_index(groupnumber, peer_id); + const int peer_index = get_peer_index(groupnumber, peer_id); if (peer_index < 0) { return; @@ -1606,20 +1686,26 @@ static void groupchat_onGroupSelfNickChange(ToxWindow *self, Tox *tox, uint32_t group_update_name_list(groupnumber); } -static void groupchat_onGroupNickChange(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +static void groupchat_onGroupNickChange(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, const char *new_nick, size_t length) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + if (self->num != groupnumber) { return; } GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { return; } - int peer_index = get_peer_index(groupnumber, peer_id); + const int peer_index = get_peer_index(groupnumber, peer_id); if (peer_index < 0) { return; @@ -1641,20 +1727,26 @@ static void groupchat_onGroupNickChange(ToxWindow *self, Tox *tox, uint32_t grou group_update_name_list(groupnumber); } -static void groupchat_onGroupStatusChange(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +static void groupchat_onGroupStatusChange(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, TOX_USER_STATUS status) { + UNUSED_VAR(toxic); + + if (self == NULL) { + return; + } + if (self->num != groupnumber) { return; } GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { return; } - int peer_index = get_peer_index(groupnumber, peer_id); + const int peer_index = get_peer_index(groupnumber, peer_id); if (peer_index < 0) { return; @@ -1664,8 +1756,15 @@ static void groupchat_onGroupStatusChange(ToxWindow *self, Tox *tox, uint32_t gr chat->peer_list[peer_index].status = status; } -static void send_group_message(ToxWindow *self, Tox *tox, uint32_t groupnumber, const char *msg, TOX_MESSAGE_TYPE type) +static void send_group_message(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, const char *msg, + TOX_MESSAGE_TYPE type) { + if (toxic == NULL || self == NULL) { + return; + } + + Tox *tox = toxic->tox; + ChatContext *ctx = self->chatwin; if (msg == NULL) { @@ -1704,13 +1803,14 @@ static void send_group_message(ToxWindow *self, Tox *tox, uint32_t groupnumber, } } -static void send_group_prvt_message(ToxWindow *self, Tox *tox, uint32_t groupnumber, const char *data, size_t data_len) +static void send_group_prvt_message(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, const char *data, + size_t data_len) { ChatContext *ctx = self->chatwin; GroupChat *chat = get_groupchat(groupnumber); - if (!chat) { + if (chat == NULL) { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, RED, "Failed to fetch GroupChat object."); return; } @@ -1757,7 +1857,7 @@ static void send_group_prvt_message(ToxWindow *self, Tox *tox, uint32_t groupnum return; } - int msg_len = ((int) data_len) - ((int) name_length) - 1; + const int msg_len = ((int) data_len) - ((int) name_length) - 1; if (msg_len <= 0) { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Message is empty."); @@ -1768,7 +1868,7 @@ static void send_group_prvt_message(ToxWindow *self, Tox *tox, uint32_t groupnum Tox_Err_Group_Send_Private_Message err; - if (!tox_group_send_private_message(tox, groupnumber, peer_id, TOX_MESSAGE_TYPE_NORMAL, + if (!tox_group_send_private_message(toxic->tox, groupnumber, peer_id, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) msg, msg_len, &err)) { if (err == TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_PERMISSIONS) { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, RED, " * You are silenced."); @@ -1795,13 +1895,11 @@ static bool groupchat_onKey(ToxWindow *self, Toxic *toxic, wint_t key, bool ltr) return false; } - Tox *tox = toxic->tox; - ChatContext *ctx = self->chatwin; GroupChat *chat = get_groupchat(self->num); - if (!chat) { + if (chat == NULL) { return false; } @@ -1905,21 +2003,21 @@ static bool groupchat_onKey(ToxWindow *self, Toxic *toxic, wint_t key, bool ltr) size_t part_length = ctx->len - offset; if (part_length > 0) { - exit_groupchat(self, tox, self->num, part_message, part_length); + exit_groupchat(self, toxic, self->num, part_message, part_length); } else { - exit_groupchat(self, tox, self->num, user_settings->group_part_message, strlen(user_settings->group_part_message)); + exit_groupchat(self, toxic, self->num, user_settings->group_part_message, strlen(user_settings->group_part_message)); } return true; } else if (strncmp(line, "/me ", strlen("/me ")) == 0) { - send_group_message(self, tox, self->num, line + 4, TOX_MESSAGE_TYPE_ACTION); + send_group_message(self, toxic, self->num, line + 4, TOX_MESSAGE_TYPE_ACTION); } else if (strncmp(line, "/whisper ", strlen("/whisper ")) == 0) { - send_group_prvt_message(self, tox, self->num, line + 9, ctx->len - 9); + send_group_prvt_message(self, toxic, self->num, line + 9, ctx->len - 9); } else { execute(ctx->history, self, toxic, line, GROUPCHAT_COMMAND_MODE); } } else if (line[0]) { - send_group_message(self, tox, self->num, line, TOX_MESSAGE_TYPE_NORMAL); + send_group_message(self, toxic, self->num, line, TOX_MESSAGE_TYPE_NORMAL); } else { line_info_add(self, false, NULL, NULL, SYS_MSG, 0, RED, " * Failed to parse message."); } @@ -1933,8 +2031,13 @@ static bool groupchat_onKey(ToxWindow *self, Toxic *toxic, wint_t key, bool ltr) return input_ret; } -static void groupchat_onDraw(ToxWindow *self, Tox *tox) +static void groupchat_onDraw(ToxWindow *self, Toxic *toxic) { + if (toxic == NULL || self == NULL) { + fprintf(stderr, "groupchat_onDraw null param\n"); + return; + } + int x2, y2; getmaxyx(self->window, y2, x2); @@ -1948,7 +2051,7 @@ static void groupchat_onDraw(ToxWindow *self, Tox *tox) GroupChat *chat = get_groupchat(self->num); - if (!chat) { + if (chat == NULL) { pthread_mutex_unlock(&Winthread.lock); return; } @@ -1980,7 +2083,7 @@ static void groupchat_onDraw(ToxWindow *self, Tox *tox) if (chat->num_peers > 1) { wprintw(ctx->sidebar, "Peers: %d\n", chat->num_peers); - } else if (tox_group_is_connected(tox, self->num, NULL)) { + } else if (tox_group_is_connected(toxic->tox, self->num, NULL)) { wprintw(ctx->sidebar, "Connecting...\n"); } else { wprintw(ctx->sidebar, "Disconnected\n"); @@ -2084,7 +2187,7 @@ static void groupchat_onDraw(ToxWindow *self, Tox *tox) wrefresh(self->window); if (self->help->active) { - help_onDraw(self); + help_draw_main(self); } } diff --git a/src/groupchats.h b/src/groupchats.h index 127d4dcc9..ba23e2420 100644 --- a/src/groupchats.h +++ b/src/groupchats.h @@ -73,19 +73,19 @@ typedef struct { int side_pos; /* current position of the sidebar - used for scrolling up and down */ } GroupChat; -void exit_groupchat(ToxWindow *self, Tox *tox, uint32_t groupnumber, const char *partmessage, size_t length); +void exit_groupchat(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, const char *partmessage, size_t length); int init_groupchat_win(Toxic *toxic, uint32_t groupnumber, const char *groupname, size_t length, Group_Join_Type join_type); -void set_nick_this_group(ToxWindow *self, Tox *tox, const char *new_nick, size_t length); -void set_status_all_groups(Tox *tox, uint8_t status); +void set_nick_this_group(ToxWindow *self, Toxic *toxic, const char *new_nick, size_t length); +void set_status_all_groups(Toxic *toxic, uint8_t status); int get_peer_index(uint32_t groupnumber, uint32_t peer_id); -void groupchat_onGroupPeerExit(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t peer_id, +void groupchat_onGroupPeerExit(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t peer_id, Tox_Group_Exit_Type exit_type, const char *name, size_t name_len, const char *partmessage, size_t len); -void groupchat_onGroupModeration(ToxWindow *self, Tox *tox, uint32_t groupnumber, uint32_t src_peer_id, +void groupchat_onGroupModeration(ToxWindow *self, Toxic *toxic, uint32_t groupnumber, uint32_t src_peer_id, uint32_t tgt_peer_id, Tox_Group_Mod_Event type); -void groupchat_rejoin(ToxWindow *self, Tox *tox); +void groupchat_rejoin(ToxWindow *self, Toxic *toxic); /* Puts the peer_id associated with `identifier` in `peer_id`. The string may be * either a nick or a public key. diff --git a/src/help.c b/src/help.c index 551af6a0e..cc8b81923 100644 --- a/src/help.c +++ b/src/help.c @@ -505,7 +505,7 @@ void help_onKey(ToxWindow *self, wint_t key) } } -void help_onDraw(ToxWindow *self) +void help_draw_main(ToxWindow *self) { switch (self->help->type) { case HELP_MENU: diff --git a/src/help.h b/src/help.h index 6e4355d44..b1a3c76e8 100644 --- a/src/help.h +++ b/src/help.h @@ -39,7 +39,7 @@ typedef enum { #endif } HELP_TYPES; -void help_onDraw(ToxWindow *self); +void help_draw_main(ToxWindow *self); void help_init_menu(ToxWindow *self); void help_onKey(ToxWindow *self, wint_t key); diff --git a/src/prompt.c b/src/prompt.c index faa8fd809..5b999fc6a 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -312,8 +312,13 @@ static bool prompt_onKey(ToxWindow *self, Toxic *toxic, wint_t key, bool ltr) return input_ret; } -static void prompt_onDraw(ToxWindow *self, Tox *tox) +static void prompt_onDraw(ToxWindow *self, Toxic *toxic) { + if (toxic == NULL || self == NULL) { + fprintf(stderr, "prompt_onDraw null param\n"); + return; + } + int x2; int y2; getmaxyx(self->window, y2, x2); @@ -430,8 +435,8 @@ static void prompt_onDraw(ToxWindow *self, Tox *tox) pthread_mutex_lock(&Winthread.lock); - size_t slen = tox_self_get_status_message_size(tox); - tox_self_get_status_message(tox, (uint8_t *) statusmsg); + const size_t slen = tox_self_get_status_message_size(toxic->tox); + tox_self_get_status_message(toxic->tox, (uint8_t *) statusmsg); statusmsg[slen] = '\0'; snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg); @@ -483,7 +488,7 @@ static void prompt_onDraw(ToxWindow *self, Tox *tox) wnoutrefresh(self->window); if (self->help->active) { - help_onDraw(self); + help_draw_main(self); } } @@ -556,11 +561,15 @@ static bool key_is_similar(const char *key) return false; } -static void prompt_onFriendRequest(ToxWindow *self, Tox *tox, const char *key, const char *data, size_t length) +static void prompt_onFriendRequest(ToxWindow *self, Toxic *toxic, const char *key, const char *data, size_t length) { - UNUSED_VAR(tox); + UNUSED_VAR(toxic); UNUSED_VAR(length); + if (self == NULL) { + return; + } + ChatContext *ctx = self->chatwin; line_info_add(self, true, NULL, NULL, SYS_MSG, 0, 0, "Friend request with the message '%s'", data); @@ -573,7 +582,7 @@ static void prompt_onFriendRequest(ToxWindow *self, Tox *tox, const char *key, c "in your list. This may be an impersonation attempt, or it may have occurred by chance."); } - int n = add_friend_request(key, data); + const int n = add_friend_request(key, data); if (n == -1) { const char *errmsg = "Friend request queue is full. Discarding request."; diff --git a/src/toxic.c b/src/toxic.c index 7205b2584..f8cf3fe66 100644 --- a/src/toxic.c +++ b/src/toxic.c @@ -176,7 +176,7 @@ void exit_toxic_success(Toxic *toxic) terminate_notify(); kill_all_file_transfers(toxic->tox); - kill_all_windows(toxic->tox); + kill_all_windows(toxic); #ifdef AUDIO #ifdef VIDEO @@ -542,12 +542,12 @@ static void print_init_messages(ToxWindow *toxwin) } } -static void load_friendlist(Tox *tox) +static void load_friendlist(Toxic *toxic) { - size_t numfriends = tox_self_get_friend_list_size(tox); + const size_t numfriends = tox_self_get_friend_list_size(toxic->tox); for (size_t i = 0; i < numfriends; ++i) { - friendlist_onFriendAdded(NULL, tox, i, false); + friendlist_onFriendAdded(NULL, toxic, i, false); } sort_friendlist_index(); @@ -1186,7 +1186,7 @@ static bool load_toxic(Toxic *toxic) } init_tox_callbacks(toxic->tox); - load_friendlist(toxic->tox); + load_friendlist(toxic); if (load_blocklist(toxic->client_data.block_path) == -1) { queue_init_message("Failed to load block list"); diff --git a/src/windows.c b/src/windows.c index 752d80d20..de837d1ff 100644 --- a/src/windows.c +++ b/src/windows.c @@ -49,26 +49,24 @@ static int num_active_windows; /* CALLBACKS START */ void on_friend_request(Tox *tox, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; char msg[MAX_STR_SIZE + 1]; length = copy_tox_str(msg, sizeof(msg), (const char *) data, length); for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onFriendRequest != NULL) { - windows[i]->onFriendRequest(windows[i], tox, (const char *) public_key, msg, length); + windows[i]->onFriendRequest(windows[i], toxic, (const char *) public_key, msg, length); } } } void on_friend_connection_status(Tox *tox, uint32_t friendnumber, Tox_Connection connection_status, void *userdata) { + UNUSED_VAR(tox); Toxic *toxic = (Toxic *) userdata; - if (toxic == NULL) { - return; - } - on_avatar_friend_connection_status(toxic->tox, friendnumber, connection_status); for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { @@ -82,7 +80,8 @@ void on_friend_connection_status(Tox *tox, uint32_t friendnumber, Tox_Connection void on_friend_typing(Tox *tox, uint32_t friendnumber, bool is_typing, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; if (user_settings->show_typing_other == SHOW_TYPING_OFF) { return; @@ -90,7 +89,7 @@ void on_friend_typing(Tox *tox, uint32_t friendnumber, bool is_typing, void *use for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onTypingChange != NULL) { - windows[i]->onTypingChange(windows[i], tox, friendnumber, is_typing); + windows[i]->onTypingChange(windows[i], toxic, friendnumber, is_typing); } } @@ -100,6 +99,7 @@ void on_friend_typing(Tox *tox, uint32_t friendnumber, bool is_typing, void *use void on_friend_message(Tox *tox, uint32_t friendnumber, Tox_Message_Type type, const uint8_t *string, size_t length, void *userdata) { + UNUSED_VAR(tox); Toxic *toxic = (Toxic *) userdata; char msg[MAX_STR_SIZE + 1]; @@ -114,11 +114,9 @@ void on_friend_message(Tox *tox, uint32_t friendnumber, Tox_Message_Type type, c void on_friend_name(Tox *tox, uint32_t friendnumber, const uint8_t *string, size_t length, void *userdata) { - const Toxic *toxic = (Toxic *) userdata; + UNUSED_VAR(tox); - if (toxic == NULL) { - return; - } + Toxic *toxic = (Toxic *) userdata; char nick[TOXIC_MAX_NAME_LENGTH + 1]; length = copy_tox_str(nick, sizeof(nick), (const char *) string, length); @@ -126,7 +124,7 @@ void on_friend_name(Tox *tox, uint32_t friendnumber, const uint8_t *string, size for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onNickChange != NULL) { - windows[i]->onNickChange(windows[i], tox, friendnumber, nick, length); + windows[i]->onNickChange(windows[i], toxic, friendnumber, nick, length); } } @@ -137,8 +135,8 @@ void on_friend_name(Tox *tox, uint32_t friendnumber, const uint8_t *string, size void on_friend_status_message(Tox *tox, uint32_t friendnumber, const uint8_t *string, size_t length, void *userdata) { - UNUSED_VAR(userdata); UNUSED_VAR(tox); + UNUSED_VAR(userdata); char msg[TOX_MAX_STATUS_MESSAGE_LENGTH + 1]; length = copy_tox_str(msg, sizeof(msg), (const char *) string, length); @@ -155,11 +153,12 @@ void on_friend_status_message(Tox *tox, uint32_t friendnumber, const uint8_t *st void on_friend_status(Tox *tox, uint32_t friendnumber, Tox_User_Status status, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onStatusChange != NULL) { - windows[i]->onStatusChange(windows[i], tox, friendnumber, status); + windows[i]->onStatusChange(windows[i], toxic, friendnumber, status); } } @@ -169,13 +168,9 @@ void on_friend_status(Tox *tox, uint32_t friendnumber, Tox_User_Status status, v // TODO: This isn't a proper tox callback. Refactor with friendlist. void on_friend_added(Toxic *toxic, uint32_t friendnumber, bool sort) { - if (toxic == NULL) { - return; - } - for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onFriendAdded != NULL) { - windows[i]->onFriendAdded(windows[i], toxic->tox, friendnumber, sort); + windows[i]->onFriendAdded(windows[i], toxic, friendnumber, sort); } } @@ -185,14 +180,15 @@ void on_friend_added(Toxic *toxic, uint32_t friendnumber, bool sort) void on_conference_message(Tox *tox, uint32_t conferencenumber, uint32_t peernumber, Tox_Message_Type type, const uint8_t *message, size_t length, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; char msg[MAX_STR_SIZE + 1]; length = copy_tox_str(msg, sizeof(msg), (const char *) message, length); for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onConferenceMessage != NULL) { - windows[i]->onConferenceMessage(windows[i], tox, conferencenumber, peernumber, type, msg, length); + windows[i]->onConferenceMessage(windows[i], toxic, conferencenumber, peernumber, type, msg, length); } } } @@ -200,12 +196,9 @@ void on_conference_message(Tox *tox, uint32_t conferencenumber, uint32_t peernum void on_conference_invite(Tox *tox, uint32_t friendnumber, Tox_Conference_Type type, const uint8_t *conference_pub_key, size_t length, void *userdata) { + UNUSED_VAR(tox); Toxic *toxic = (Toxic *) userdata; - if (toxic == NULL) { - return; - } - for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onConferenceInvite != NULL) { windows[i]->onConferenceInvite(windows[i], toxic, friendnumber, type, (const char *) conference_pub_key, length); @@ -215,11 +208,12 @@ void on_conference_invite(Tox *tox, uint32_t friendnumber, Tox_Conference_Type t void on_conference_peer_list_changed(Tox *tox, uint32_t conferencenumber, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onConferenceNameListChange != NULL) { - windows[i]->onConferenceNameListChange(windows[i], tox, conferencenumber); + windows[i]->onConferenceNameListChange(windows[i], toxic, conferencenumber); } } @@ -229,7 +223,8 @@ void on_conference_peer_list_changed(Tox *tox, uint32_t conferencenumber, void * void on_conference_peer_name(Tox *tox, uint32_t conferencenumber, uint32_t peernumber, const uint8_t *name, size_t length, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; char nick[TOXIC_MAX_NAME_LENGTH + 1]; length = copy_tox_str(nick, sizeof(nick), (const char *) name, length); @@ -237,7 +232,7 @@ void on_conference_peer_name(Tox *tox, uint32_t conferencenumber, uint32_t peern for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onConferencePeerNameChange != NULL) { - windows[i]->onConferencePeerNameChange(windows[i], tox, conferencenumber, peernumber, nick, length); + windows[i]->onConferencePeerNameChange(windows[i], toxic, conferencenumber, peernumber, nick, length); } } } @@ -245,14 +240,15 @@ void on_conference_peer_name(Tox *tox, uint32_t conferencenumber, uint32_t peern void on_conference_title(Tox *tox, uint32_t conferencenumber, uint32_t peernumber, const uint8_t *title, size_t length, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; char data[MAX_STR_SIZE + 1]; length = copy_tox_str(data, sizeof(data), (const char *) title, length); for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onConferenceTitleChange != NULL) { - windows[i]->onConferenceTitleChange(windows[i], tox, conferencenumber, peernumber, data, length); + windows[i]->onConferenceTitleChange(windows[i], toxic, conferencenumber, peernumber, data, length); } } } @@ -260,11 +256,11 @@ void on_conference_title(Tox *tox, uint32_t conferencenumber, uint32_t peernumbe void on_file_chunk_request(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint64_t position, size_t length, void *userdata) { - UNUSED_VAR(userdata); + Toxic *toxic = (Toxic *) userdata; FileTransfer *ft = get_file_transfer_struct(friendnumber, filenumber); - if (!ft) { + if (ft == NULL) { return; } @@ -275,7 +271,7 @@ void on_file_chunk_request(Tox *tox, uint32_t friendnumber, uint32_t filenumber, for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onFileChunkRequest != NULL) { - windows[i]->onFileChunkRequest(windows[i], tox, friendnumber, filenumber, position, length); + windows[i]->onFileChunkRequest(windows[i], toxic, friendnumber, filenumber, position, length); } } } @@ -283,17 +279,18 @@ void on_file_chunk_request(Tox *tox, uint32_t friendnumber, uint32_t filenumber, void on_file_recv_chunk(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint64_t position, const uint8_t *data, size_t length, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; - FileTransfer *ft = get_file_transfer_struct(friendnumber, filenumber); + const FileTransfer *ft = get_file_transfer_struct(friendnumber, filenumber); - if (!ft) { + if (ft == NULL) { return; } for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onFileRecvChunk != NULL) { - windows[i]->onFileRecvChunk(windows[i], tox, friendnumber, filenumber, position, (const char *) data, length); + windows[i]->onFileRecvChunk(windows[i], toxic, friendnumber, filenumber, position, (const char *) data, length); } } } @@ -301,11 +298,11 @@ void on_file_recv_chunk(Tox *tox, uint32_t friendnumber, uint32_t filenumber, ui void on_file_recv_control(Tox *tox, uint32_t friendnumber, uint32_t filenumber, Tox_File_Control control, void *userdata) { - UNUSED_VAR(userdata); + Toxic *toxic = (Toxic *) userdata; FileTransfer *ft = get_file_transfer_struct(friendnumber, filenumber); - if (!ft) { + if (ft == NULL) { return; } @@ -316,7 +313,7 @@ void on_file_recv_control(Tox *tox, uint32_t friendnumber, uint32_t filenumber, for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onFileControl != NULL) { - windows[i]->onFileControl(windows[i], tox, friendnumber, filenumber, control); + windows[i]->onFileControl(windows[i], toxic, friendnumber, filenumber, control); } } } @@ -326,10 +323,6 @@ void on_file_recv(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint32_t { Toxic *toxic = (Toxic *) userdata; - if (toxic == NULL) { - return; - } - /* We don't care about receiving avatars */ if (kind != TOX_FILE_KIND_DATA) { tox_file_control(tox, friendnumber, filenumber, TOX_FILE_CONTROL_CANCEL, NULL); @@ -346,11 +339,12 @@ void on_file_recv(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint32_t void on_friend_read_receipt(Tox *tox, uint32_t friendnumber, uint32_t receipt, void *userdata) { - UNUSED_VAR(userdata); + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onReadReceipt != NULL) { - windows[i]->onReadReceipt(windows[i], tox, friendnumber, receipt); + windows[i]->onReadReceipt(windows[i], toxic, friendnumber, receipt); } } } @@ -363,10 +357,6 @@ void on_lossless_custom_packet(Tox *tox, uint32_t friendnumber, const uint8_t *d Toxic *toxic = (Toxic *) userdata; - if (toxic == NULL) { - return; - } - const uint8_t type = data[0]; switch (type) { @@ -389,7 +379,7 @@ void on_lossless_custom_packet(Tox *tox, uint32_t friendnumber, const uint8_t *d ToxWindow *window = windows[i]; if (window != NULL && window->onGameData != NULL) { - window->onGameData(window, toxic->tox, friendnumber, data + 1, length - 1); + window->onGameData(window, toxic, friendnumber, data + 1, length - 1); } } @@ -411,10 +401,6 @@ void on_group_invite(Tox *tox, uint32_t friendnumber, const uint8_t *invite_data { Toxic *toxic = (Toxic *) userdata; - if (toxic == NULL) { - return; - } - char gname[MAX_STR_SIZE + 1]; group_name_length = copy_tox_str(gname, sizeof(gname), (const char *) group_name, group_name_length); @@ -429,13 +415,16 @@ void on_group_message(Tox *tox, uint32_t groupnumber, uint32_t peer_id, TOX_MESS const uint8_t *message, size_t length, uint32_t message_id, void *userdata) { UNUSED_VAR(message_id); + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; char msg[MAX_STR_SIZE + 1]; length = copy_tox_str(msg, sizeof(msg), (const char *) message, length); for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupMessage != NULL) { - windows[i]->onGroupMessage(windows[i], tox, groupnumber, peer_id, type, msg, length); + windows[i]->onGroupMessage(windows[i], toxic, groupnumber, peer_id, type, msg, length); } } } @@ -444,21 +433,29 @@ void on_group_private_message(Tox *tox, uint32_t groupnumber, uint32_t peer_id, const uint8_t *message, size_t length, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + char msg[MAX_STR_SIZE + 1]; length = copy_tox_str(msg, sizeof(msg), (const char *) message, length); for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupPrivateMessage != NULL) { - windows[i]->onGroupPrivateMessage(windows[i], tox, groupnumber, peer_id, msg, length); + windows[i]->onGroupPrivateMessage(windows[i], toxic, groupnumber, peer_id, msg, length); } } } void on_group_status_change(Tox *tox, uint32_t groupnumber, uint32_t peer_id, TOX_USER_STATUS status, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupStatusChange != NULL) { - windows[i]->onGroupStatusChange(windows[i], tox, groupnumber, peer_id, status); + windows[i]->onGroupStatusChange(windows[i], toxic, groupnumber, peer_id, status); } } @@ -467,9 +464,13 @@ void on_group_status_change(Tox *tox, uint32_t groupnumber, uint32_t peer_id, TO void on_group_peer_join(Tox *tox, uint32_t groupnumber, uint32_t peer_id, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupPeerJoin != NULL) { - windows[i]->onGroupPeerJoin(windows[i], tox, groupnumber, peer_id); + windows[i]->onGroupPeerJoin(windows[i], toxic, groupnumber, peer_id); } } @@ -480,6 +481,10 @@ void on_group_peer_exit(Tox *tox, uint32_t groupnumber, uint32_t peer_id, Tox_Gr const uint8_t *nick, size_t nick_len, const uint8_t *part_message, size_t length, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + char toxic_nick[TOXIC_MAX_NAME_LENGTH + 1]; nick_len = copy_tox_str(toxic_nick, sizeof(toxic_nick), (const char *) nick, nick_len); @@ -492,7 +497,7 @@ void on_group_peer_exit(Tox *tox, uint32_t groupnumber, uint32_t peer_id, Tox_Gr for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupPeerExit != NULL) { - windows[i]->onGroupPeerExit(windows[i], tox, groupnumber, peer_id, exit_type, toxic_nick, nick_len, buf, buf_len); + windows[i]->onGroupPeerExit(windows[i], toxic, groupnumber, peer_id, exit_type, toxic_nick, nick_len, buf, buf_len); } } } @@ -500,48 +505,68 @@ void on_group_peer_exit(Tox *tox, uint32_t groupnumber, uint32_t peer_id, Tox_Gr void on_group_topic_change(Tox *tox, uint32_t groupnumber, uint32_t peer_id, const uint8_t *topic, size_t length, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + char data[MAX_STR_SIZE + 1]; length = copy_tox_str(data, sizeof(data), (const char *) topic, length); for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupTopicChange != NULL) { - windows[i]->onGroupTopicChange(windows[i], tox, groupnumber, peer_id, data, length); + windows[i]->onGroupTopicChange(windows[i], toxic, groupnumber, peer_id, data, length); } } } void on_group_peer_limit(Tox *tox, uint32_t groupnumber, uint32_t peer_limit, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupPeerLimit != NULL) { - windows[i]->onGroupPeerLimit(windows[i], tox, groupnumber, peer_limit); + windows[i]->onGroupPeerLimit(windows[i], toxic, groupnumber, peer_limit); } } } void on_group_privacy_state(Tox *tox, uint32_t groupnumber, Tox_Group_Privacy_State privacy_state, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupPrivacyState != NULL) { - windows[i]->onGroupPrivacyState(windows[i], tox, groupnumber, privacy_state); + windows[i]->onGroupPrivacyState(windows[i], toxic, groupnumber, privacy_state); } } } void on_group_topic_lock(Tox *tox, uint32_t groupnumber, Tox_Group_Topic_Lock topic_lock, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupTopicLock != NULL) { - windows[i]->onGroupTopicLock(windows[i], tox, groupnumber, topic_lock); + windows[i]->onGroupTopicLock(windows[i], toxic, groupnumber, topic_lock); } } } void on_group_password(Tox *tox, uint32_t groupnumber, const uint8_t *password, size_t length, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupPassword != NULL) { - windows[i]->onGroupPassword(windows[i], tox, groupnumber, (char *) password, length); + windows[i]->onGroupPassword(windows[i], toxic, groupnumber, (char *) password, length); } } } @@ -549,19 +574,25 @@ void on_group_password(Tox *tox, uint32_t groupnumber, const uint8_t *password, void on_group_nick_change(Tox *tox, uint32_t groupnumber, uint32_t peer_id, const uint8_t *newname, size_t length, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + char name[TOXIC_MAX_NAME_LENGTH + 1]; length = copy_tox_str(name, sizeof(name), (const char *) newname, length); filter_str(name, length); for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupNickChange != NULL) { - windows[i]->onGroupNickChange(windows[i], tox, groupnumber, peer_id, name, length); + windows[i]->onGroupNickChange(windows[i], toxic, groupnumber, peer_id, name, length); } } } void on_group_self_join(Tox *tox, uint32_t groupnumber, void *userdata) { + UNUSED_VAR(tox); + Toxic *toxic = (Toxic *) userdata; for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { @@ -573,9 +604,13 @@ void on_group_self_join(Tox *tox, uint32_t groupnumber, void *userdata) void on_group_rejected(Tox *tox, uint32_t groupnumber, Tox_Group_Join_Fail type, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupRejected != NULL) { - windows[i]->onGroupRejected(windows[i], tox, groupnumber, type); + windows[i]->onGroupRejected(windows[i], toxic, groupnumber, type); } } } @@ -583,18 +618,26 @@ void on_group_rejected(Tox *tox, uint32_t groupnumber, Tox_Group_Join_Fail type, void on_group_moderation(Tox *tox, uint32_t groupnumber, uint32_t source_peer_id, uint32_t target_peer_id, Tox_Group_Mod_Event type, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupModeration != NULL) { - windows[i]->onGroupModeration(windows[i], tox, groupnumber, source_peer_id, target_peer_id, type); + windows[i]->onGroupModeration(windows[i], toxic, groupnumber, source_peer_id, target_peer_id, type); } } } void on_group_voice_state(Tox *tox, uint32_t groupnumber, Tox_Group_Voice_State voice_state, void *userdata) { + UNUSED_VAR(tox); + + Toxic *toxic = (Toxic *) userdata; + for (size_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onGroupVoiceState != NULL) { - windows[i]->onGroupVoiceState(windows[i], tox, groupnumber, voice_state); + windows[i]->onGroupVoiceState(windows[i], toxic, groupnumber, voice_state); } } } @@ -1032,14 +1075,14 @@ void draw_active_window(Toxic *toxic) if (flag_refresh) { touchwin(a->window); - a->onDraw(a, toxic->tox); + a->onDraw(a, toxic); wrefresh(a->window); } #ifdef AUDIO else if (a->is_call && timed_out(a->chatwin->infobox.lastupdate, 1)) { touchwin(a->window); - a->onDraw(a, toxic->tox); + a->onDraw(a, toxic); wrefresh(a->window); } @@ -1050,7 +1093,7 @@ void draw_active_window(Toxic *toxic) if (a->type == WINDOW_TYPE_GAME) { if (!flag_refresh) { // we always want to be continously refreshing game windows touchwin(a->window); - a->onDraw(a, toxic->tox); + a->onDraw(a, toxic); wrefresh(a->window); } @@ -1182,7 +1225,7 @@ size_t get_num_active_windows_type(WINDOW_TYPE type) } /* destroys all chat and conference windows (should only be called on shutdown) */ -void kill_all_windows(Tox *tox) +void kill_all_windows(Toxic *toxic) { for (size_t i = 2; i < MAX_WINDOWS_NUM; ++i) { ToxWindow *w = windows[i]; @@ -1193,7 +1236,7 @@ void kill_all_windows(Tox *tox) switch (w->type) { case WINDOW_TYPE_CHAT: { - kill_chat_window(w, tox); + kill_chat_window(w, toxic->tox); break; } @@ -1212,7 +1255,7 @@ void kill_all_windows(Tox *tox) #endif // GAMES case WINDOW_TYPE_GROUPCHAT: { - exit_groupchat(w, tox, w->num, user_settings->group_part_message, + exit_groupchat(w, toxic, w->num, user_settings->group_part_message, strlen(user_settings->group_part_message)); break; } diff --git a/src/windows.h b/src/windows.h index c38b477d3..11257aaac 100644 --- a/src/windows.h +++ b/src/windows.h @@ -185,51 +185,52 @@ typedef struct GameData GameData; struct ToxWindow { /* ncurses */ bool(*onKey)(ToxWindow *, Toxic *, wint_t, bool); - void(*onDraw)(ToxWindow *, Tox *); + void(*onDraw)(ToxWindow *, Toxic *); void(*onInit)(ToxWindow *, Toxic *); /* toxcore */ - void(*onFriendRequest)(ToxWindow *, Tox *, const char *, const char *, size_t); - void(*onFriendAdded)(ToxWindow *, Tox *, uint32_t, bool); + void(*onFriendRequest)(ToxWindow *, Toxic *, const char *, const char *, size_t); + void(*onFriendAdded)(ToxWindow *, Toxic *, uint32_t, bool); void(*onConnectionChange)(ToxWindow *, Toxic *, uint32_t, Tox_Connection); void(*onMessage)(ToxWindow *, Toxic *, uint32_t, Tox_Message_Type, const char *, size_t); - void(*onNickChange)(ToxWindow *, Tox *, uint32_t, const char *, size_t); - void(*onStatusChange)(ToxWindow *, Tox *, uint32_t, Tox_User_Status); + void(*onNickChange)(ToxWindow *, Toxic *, uint32_t, const char *, size_t); + void(*onStatusChange)(ToxWindow *, Toxic *, uint32_t, Tox_User_Status); void(*onStatusMessageChange)(ToxWindow *, uint32_t, const char *, size_t); - void(*onConferenceMessage)(ToxWindow *, Tox *, uint32_t, uint32_t, Tox_Message_Type, const char *, size_t); + void(*onConferenceMessage)(ToxWindow *, Toxic *, uint32_t, uint32_t, Tox_Message_Type, const char *, size_t); void(*onConferenceInvite)(ToxWindow *, Toxic *, int32_t, uint8_t, const char *, uint16_t); - void(*onConferenceNameListChange)(ToxWindow *, Tox *, uint32_t); - void(*onConferencePeerNameChange)(ToxWindow *, Tox *, uint32_t, uint32_t, const char *, size_t); - void(*onConferenceTitleChange)(ToxWindow *, Tox *, uint32_t, uint32_t, const char *, size_t); - void(*onFileChunkRequest)(ToxWindow *, Tox *, uint32_t, uint32_t, uint64_t, size_t); - void(*onFileRecvChunk)(ToxWindow *, Tox *, uint32_t, uint32_t, uint64_t, const char *, size_t); - void(*onFileControl)(ToxWindow *, Tox *, uint32_t, uint32_t, Tox_File_Control); + void(*onConferenceNameListChange)(ToxWindow *, Toxic *, uint32_t); + void(*onConferencePeerNameChange)(ToxWindow *, Toxic *, uint32_t, uint32_t, const char *, size_t); + void(*onConferenceTitleChange)(ToxWindow *, Toxic *, uint32_t, uint32_t, const char *, size_t); + void(*onFileChunkRequest)(ToxWindow *, Toxic *, uint32_t, uint32_t, uint64_t, size_t); + void(*onFileRecvChunk)(ToxWindow *, Toxic *, uint32_t, uint32_t, uint64_t, const char *, size_t); + void(*onFileControl)(ToxWindow *, Toxic *, uint32_t, uint32_t, Tox_File_Control); void(*onFileRecv)(ToxWindow *, Toxic *, uint32_t, uint32_t, uint64_t, const char *, size_t); - void(*onTypingChange)(ToxWindow *, Tox *, uint32_t, bool); - void(*onReadReceipt)(ToxWindow *, Tox *, uint32_t, uint32_t); + void(*onTypingChange)(ToxWindow *, Toxic *, uint32_t, bool); + void(*onReadReceipt)(ToxWindow *, Toxic *, uint32_t, uint32_t); #ifdef GAMES void(*onGameInvite)(ToxWindow *, Toxic *, uint32_t, const uint8_t *, size_t); - void(*onGameData)(ToxWindow *, Tox *, uint32_t, const uint8_t *, size_t); + void(*onGameData)(ToxWindow *, Toxic *, uint32_t, const uint8_t *, size_t); #endif // GAMES void(*onGroupInvite)(ToxWindow *, Toxic *, uint32_t, const char *, size_t, const char *, size_t); - void(*onGroupMessage)(ToxWindow *, Tox *, uint32_t, uint32_t, TOX_MESSAGE_TYPE, const char *, size_t); - void(*onGroupPrivateMessage)(ToxWindow *, Tox *, uint32_t, uint32_t, const char *, size_t); - void(*onGroupPeerJoin)(ToxWindow *, Tox *, uint32_t, uint32_t); - void(*onGroupPeerExit)(ToxWindow *, Tox *, uint32_t, uint32_t, Tox_Group_Exit_Type, const char *, size_t, const char *, + void(*onGroupMessage)(ToxWindow *, Toxic *, uint32_t, uint32_t, TOX_MESSAGE_TYPE, const char *, size_t); + void(*onGroupPrivateMessage)(ToxWindow *, Toxic *, uint32_t, uint32_t, const char *, size_t); + void(*onGroupPeerJoin)(ToxWindow *, Toxic *, uint32_t, uint32_t); + void(*onGroupPeerExit)(ToxWindow *, Toxic *, uint32_t, uint32_t, Tox_Group_Exit_Type, const char *, size_t, + const char *, size_t); - void(*onGroupNickChange)(ToxWindow *, Tox *, uint32_t, uint32_t, const char *, size_t); - void(*onGroupStatusChange)(ToxWindow *, Tox *, uint32_t, uint32_t, TOX_USER_STATUS); - void(*onGroupTopicChange)(ToxWindow *, Tox *, uint32_t, uint32_t, const char *, size_t); - void(*onGroupPeerLimit)(ToxWindow *, Tox *, uint32_t, uint32_t); - void(*onGroupPrivacyState)(ToxWindow *, Tox *, uint32_t, Tox_Group_Privacy_State); - void(*onGroupTopicLock)(ToxWindow *, Tox *, uint32_t, Tox_Group_Topic_Lock); - void(*onGroupPassword)(ToxWindow *, Tox *, uint32_t, const char *, size_t); + void(*onGroupNickChange)(ToxWindow *, Toxic *, uint32_t, uint32_t, const char *, size_t); + void(*onGroupStatusChange)(ToxWindow *, Toxic *, uint32_t, uint32_t, TOX_USER_STATUS); + void(*onGroupTopicChange)(ToxWindow *, Toxic *, uint32_t, uint32_t, const char *, size_t); + void(*onGroupPeerLimit)(ToxWindow *, Toxic *, uint32_t, uint32_t); + void(*onGroupPrivacyState)(ToxWindow *, Toxic *, uint32_t, Tox_Group_Privacy_State); + void(*onGroupTopicLock)(ToxWindow *, Toxic *, uint32_t, Tox_Group_Topic_Lock); + void(*onGroupPassword)(ToxWindow *, Toxic *, uint32_t, const char *, size_t); void(*onGroupSelfJoin)(ToxWindow *, Toxic *, uint32_t); - void(*onGroupRejected)(ToxWindow *, Tox *, uint32_t, Tox_Group_Join_Fail); - void(*onGroupModeration)(ToxWindow *, Tox *, uint32_t, uint32_t, uint32_t, Tox_Group_Mod_Event); - void(*onGroupVoiceState)(ToxWindow *, Tox *, uint32_t, Tox_Group_Voice_State); + void(*onGroupRejected)(ToxWindow *, Toxic *, uint32_t, Tox_Group_Join_Fail); + void(*onGroupModeration)(ToxWindow *, Toxic *, uint32_t, uint32_t, uint32_t, Tox_Group_Mod_Event); + void(*onGroupVoiceState)(ToxWindow *, Toxic *, uint32_t, Tox_Group_Voice_State); #ifdef AUDIO @@ -242,7 +243,7 @@ struct ToxWindow { void(*onCancel)(ToxWindow *, Toxic *, uint32_t, int); void(*onReject)(ToxWindow *, Toxic *, uint32_t, int); void(*onEnd)(ToxWindow *, Toxic *, uint32_t, int); - void(*onWriteDevice)(ToxWindow *, Tox *, uint32_t, int, const int16_t *, unsigned int, uint8_t, unsigned int); + void(*onWriteDevice)(ToxWindow *, Toxic *, uint32_t, int, const int16_t *, unsigned int, uint8_t, unsigned int); bool is_call; int ringing_sound; @@ -355,7 +356,7 @@ int add_window(Toxic *toxic, ToxWindow *w); void del_window(ToxWindow *w); void set_active_window_index(uint8_t index); int get_num_active_windows(void); -void kill_all_windows(Tox *tox); /* should only be called on shutdown */ +void kill_all_windows(Toxic *toxic); /* should only be called on shutdown */ void on_window_resize(void); void force_refresh(WINDOW *w); ToxWindow *get_window_ptr(size_t i);