diff --git a/src/avatars.c b/src/avatars.c index 884a367..d63eeed 100644 --- a/src/avatars.c +++ b/src/avatars.c @@ -78,27 +78,27 @@ static void avatar_clear(void) }; } -/* Sends avatar to friendnum. +/* Sends avatar to friendnumber. * * Returns 0 on success. * Returns -1 on failure. */ -int avatar_send(Tox *m, uint32_t friendnum) +int avatar_send(Tox *m, uint32_t friendnumber) { Tox_Err_File_Send err; - uint32_t filenum = tox_file_send(m, friendnum, TOX_FILE_KIND_AVATAR, (size_t) Avatar.size, - NULL, (uint8_t *) Avatar.name, Avatar.name_len, &err); + uint32_t filenumber = tox_file_send(m, friendnumber, TOX_FILE_KIND_AVATAR, (size_t) Avatar.size, + NULL, (uint8_t *) Avatar.name, Avatar.name_len, &err); if (Avatar.size == 0) { return 0; } if (err != TOX_ERR_FILE_SEND_OK) { - fprintf(stderr, "tox_file_send failed for friendnumber %u (error %d)\n", friendnum, err); + fprintf(stderr, "tox_file_send failed for friendnumber %u (error %d)\n", friendnumber, err); return -1; } - struct FileTransfer *ft = new_file_transfer(NULL, friendnum, filenum, FILE_TRANSFER_SEND, TOX_FILE_KIND_AVATAR); + struct FileTransfer *ft = new_file_transfer(NULL, friendnumber, filenumber, FILE_TRANSFER_SEND, TOX_FILE_KIND_AVATAR); if (!ft) { return -1; @@ -119,9 +119,7 @@ int avatar_send(Tox *m, uint32_t friendnum) /* Sends avatar to all friends */ static void avatar_send_all(Tox *m) { - size_t i; - - for (i = 0; i < Friends.max_idx; ++i) { + for (size_t i = 0; i < Friends.max_idx; ++i) { if (Friends.list[i].connection_status != TOX_CONNECTION_NONE) { avatar_send(m, Friends.list[i].num); } @@ -182,6 +180,13 @@ void avatar_unset(Tox *m) avatar_send_all(m); } +void on_avatar_friend_connection_status(Tox *m, uint32_t friendnumber, Tox_Connection connection_status) +{ + if (connection_status == TOX_CONNECTION_NONE) { + kill_avatar_file_transfers_friend(m, friendnumber); + } +} + void on_avatar_file_control(Tox *m, struct FileTransfer *ft, Tox_File_Control control) { switch (control) { @@ -245,7 +250,7 @@ void on_avatar_chunk_request(Tox *m, struct FileTransfer *ft, uint64_t position, } Tox_Err_File_Send_Chunk err; - tox_file_send_chunk(m, ft->friendnum, ft->filenum, position, send_data, send_length, &err); + tox_file_send_chunk(m, ft->friendnumber, ft->filenumber, position, send_data, send_length, &err); free(send_data); @@ -254,5 +259,4 @@ void on_avatar_chunk_request(Tox *m, struct FileTransfer *ft, uint64_t position, } ft->position += send_length; - ft->last_keep_alive = get_unix_time(); } diff --git a/src/avatars.h b/src/avatars.h index 9bcdc1d..1017cb7 100644 --- a/src/avatars.h +++ b/src/avatars.h @@ -48,5 +48,6 @@ void avatar_unset(Tox *m); void on_avatar_chunk_request(Tox *m, struct FileTransfer *ft, uint64_t position, size_t length); void on_avatar_file_control(Tox *m, struct FileTransfer *ft, Tox_File_Control control); +void on_avatar_friend_connection_status(Tox *m, uint32_t friendnumber, Tox_Connection connection_status); #endif /* AVATARS_H */ diff --git a/src/chat.c b/src/chat.c index 800cd69..7f0a2c0 100644 --- a/src/chat.c +++ b/src/chat.c @@ -326,15 +326,17 @@ static void chat_pause_file_transfers(uint32_t friendnum) { ToxicFriend *friend = &Friends.list[friendnum]; - size_t i; + for (size_t i = 0; i < MAX_FILES; ++i) { + struct FileTransfer *fts = &friend->file_sender[i]; - for (i = 0; i < MAX_FILES; ++i) { - if (friend->file_sender[i].state >= FILE_TRANSFER_STARTED) { - friend->file_sender[i].state = FILE_TRANSFER_PAUSED; + if (fts->file_type == TOX_FILE_KIND_DATA && fts->state >= FILE_TRANSFER_STARTED) { + fts->state = FILE_TRANSFER_PAUSED; } - if (friend->file_receiver[i].state >= FILE_TRANSFER_STARTED) { - friend->file_receiver[i].state = FILE_TRANSFER_PAUSED; + struct FileTransfer *ftr = &friend->file_receiver[i]; + + if (ftr->file_type == TOX_FILE_KIND_DATA && ftr->state >= FILE_TRANSFER_STARTED) { + ftr->state = FILE_TRANSFER_PAUSED; } } } @@ -342,18 +344,16 @@ static void chat_pause_file_transfers(uint32_t friendnum) /* Tries to resume broken file senders. Called when a friend comes online */ static void chat_resume_file_senders(ToxWindow *self, Tox *m, uint32_t friendnum) { - size_t i; - - for (i = 0; i < MAX_FILES; ++i) { + for (size_t i = 0; i < MAX_FILES; ++i) { struct FileTransfer *ft = &Friends.list[friendnum].file_sender[i]; - if (ft->state != FILE_TRANSFER_PAUSED) { + if (ft->state != FILE_TRANSFER_PAUSED || ft->file_type != TOX_FILE_KIND_DATA) { continue; } Tox_Err_File_Send err; - ft->filenum = tox_file_send(m, friendnum, TOX_FILE_KIND_DATA, ft->file_size, ft->file_id, - (uint8_t *) ft->file_name, strlen(ft->file_name), &err); + ft->filenumber = tox_file_send(m, friendnum, TOX_FILE_KIND_DATA, ft->file_size, ft->file_id, + (uint8_t *) ft->file_name, strlen(ft->file_name), &err); if (err != TOX_ERR_FILE_SEND_OK) { char msg[MAX_STR_SIZE]; @@ -364,14 +364,14 @@ static void chat_resume_file_senders(ToxWindow *self, Tox *m, uint32_t friendnum } } -static void chat_onFileChunkRequest(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenum, uint64_t position, +static void chat_onFileChunkRequest(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenumber, uint64_t position, size_t length) { if (friendnum != self->num) { return; } - struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenum); + struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenumber); if (!ft) { return; @@ -424,7 +424,7 @@ static void chat_onFileChunkRequest(ToxWindow *self, Tox *m, uint32_t friendnum, } Tox_Err_File_Send_Chunk err; - tox_file_send_chunk(m, ft->friendnum, ft->filenum, position, send_data, send_length, &err); + tox_file_send_chunk(m, ft->friendnumber, ft->filenumber, position, send_data, send_length, &err); free(send_data); @@ -434,10 +434,9 @@ static void chat_onFileChunkRequest(ToxWindow *self, Tox *m, uint32_t friendnum, ft->position += send_length; ft->bps += send_length; - ft->last_keep_alive = get_unix_time(); } -static void chat_onFileRecvChunk(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenum, uint64_t position, +static void chat_onFileRecvChunk(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenumber, uint64_t position, const char *data, size_t length) { UNUSED_VAR(position); @@ -446,7 +445,7 @@ static void chat_onFileRecvChunk(ToxWindow *self, Tox *m, uint32_t friendnum, ui return; } - struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenum); + struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenumber); if (!ft) { return; @@ -479,16 +478,16 @@ static void chat_onFileRecvChunk(ToxWindow *self, Tox *m, uint32_t friendnum, ui ft->bps += length; ft->position += length; - ft->last_keep_alive = get_unix_time(); } -static void chat_onFileControl(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenum, Tox_File_Control control) +static void chat_onFileControl(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenumber, + Tox_File_Control control) { if (friendnum != self->num) { return; } - struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenum); + struct FileTransfer *ft = get_file_transfer_struct(friendnum, filenumber); if (!ft) { return; @@ -498,8 +497,6 @@ static void chat_onFileControl(ToxWindow *self, Tox *m, uint32_t friendnum, uint switch (control) { case TOX_FILE_CONTROL_RESUME: { - ft->last_keep_alive = get_unix_time(); - /* transfer is accepted */ if (ft->state == FILE_TRANSFER_PENDING) { ft->state = FILE_TRANSFER_STARTED; @@ -534,12 +531,12 @@ static void chat_onFileControl(ToxWindow *self, Tox *m, uint32_t friendnum, uint * * Returns true if resume is successful. */ -static bool chat_resume_broken_ft(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenum) +static bool chat_resume_broken_ft(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenumber) { char msg[MAX_STR_SIZE]; uint8_t file_id[TOX_FILE_ID_LENGTH]; - if (!tox_file_get_file_id(m, friendnum, filenum, file_id, NULL)) { + if (!tox_file_get_file_id(m, friendnum, filenumber, file_id, NULL)) { return false; } @@ -555,9 +552,8 @@ static bool chat_resume_broken_ft(ToxWindow *self, Tox *m, uint32_t friendnum, u } if (memcmp(ft->file_id, file_id, TOX_FILE_ID_LENGTH) == 0) { - ft->filenum = filenum; + ft->filenumber = filenumber; ft->state = FILE_TRANSFER_STARTED; - ft->last_keep_alive = get_unix_time(); resuming = true; break; } @@ -567,11 +563,11 @@ static bool chat_resume_broken_ft(ToxWindow *self, Tox *m, uint32_t friendnum, u return false; } - if (!tox_file_seek(m, ft->friendnum, ft->filenum, ft->position, NULL)) { + if (!tox_file_seek(m, ft->friendnumber, ft->filenumber, ft->position, NULL)) { goto on_error; } - if (!tox_file_control(m, ft->friendnum, ft->filenum, TOX_FILE_CONTROL_RESUME, NULL)) { + if (!tox_file_control(m, ft->friendnumber, ft->filenumber, TOX_FILE_CONTROL_RESUME, NULL)) { goto on_error; } @@ -615,7 +611,7 @@ static bool valid_file_name(const char *filename, size_t length) return true; } -static void chat_onFileRecv(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenum, uint64_t file_size, +static void chat_onFileRecv(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_t filenumber, uint64_t file_size, const char *filename, size_t name_length) { if (self->num != friendnum) { @@ -623,14 +619,14 @@ static void chat_onFileRecv(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_ } /* first check if we need to resume a broken transfer */ - if (chat_resume_broken_ft(self, m, friendnum, filenum)) { + if (chat_resume_broken_ft(self, m, friendnum, filenumber)) { return; } - struct FileTransfer *ft = new_file_transfer(self, friendnum, filenum, FILE_TRANSFER_RECV, TOX_FILE_KIND_DATA); + struct FileTransfer *ft = new_file_transfer(self, friendnum, filenumber, FILE_TRANSFER_RECV, TOX_FILE_KIND_DATA); if (!ft) { - tox_file_control(m, friendnum, filenum, TOX_FILE_CONTROL_CANCEL, NULL); + tox_file_control(m, friendnum, filenumber, TOX_FILE_CONTROL_CANCEL, NULL); line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "File transfer request failed: Too many concurrent file transfers."); return; @@ -702,7 +698,7 @@ static void chat_onFileRecv(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_ ft->file_size = file_size; snprintf(ft->file_path, sizeof(ft->file_path), "%s", file_path); snprintf(ft->file_name, sizeof(ft->file_name), "%s", filename); - tox_file_get_file_id(m, friendnum, filenum, ft->file_id, NULL); + tox_file_get_file_id(m, friendnum, filenumber, ft->file_id, NULL); free(file_path); diff --git a/src/chat_commands.c b/src/chat_commands.c index a475b06..9b26e59 100644 --- a/src/chat_commands.c +++ b/src/chat_commands.c @@ -183,7 +183,7 @@ void cmd_savefile(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv } Tox_Err_File_Control err; - tox_file_control(m, self->num, ft->filenum, TOX_FILE_CONTROL_RESUME, &err); + tox_file_control(m, self->num, ft->filenumber, TOX_FILE_CONTROL_RESUME, &err); if (err != TOX_ERR_FILE_CONTROL_OK) { goto on_recv_error; diff --git a/src/file_transfers.c b/src/file_transfers.c index 52e8863..ae6e34e 100644 --- a/src/file_transfers.c +++ b/src/file_transfers.c @@ -116,13 +116,11 @@ static void refresh_progress_helper(ToxWindow *self, struct FileTransfer *ft) } /* refreshes active file transfer status bars. */ -void refresh_file_transfer_progress(ToxWindow *self, uint32_t friendnum) +void refresh_file_transfer_progress(ToxWindow *self, uint32_t friendnumber) { - size_t i; - - for (i = 0; i < MAX_FILES; ++i) { - refresh_progress_helper(self, &Friends.list[friendnum].file_receiver[i]); - refresh_progress_helper(self, &Friends.list[friendnum].file_sender[i]); + for (size_t i = 0; i < MAX_FILES; ++i) { + refresh_progress_helper(self, &Friends.list[friendnumber].file_receiver[i]); + refresh_progress_helper(self, &Friends.list[friendnumber].file_sender[i]); } } @@ -133,21 +131,21 @@ static void clear_file_transfer(struct FileTransfer *ft) }; } -/* Returns a pointer to friendnum's FileTransfer struct associated with filenum. - * Returns NULL if filenum is invalid. +/* Returns a pointer to friendnumber's FileTransfer struct associated with filenumber. + * Returns NULL if filenumber is invalid. */ -struct FileTransfer *get_file_transfer_struct(uint32_t friendnum, uint32_t filenum) +struct FileTransfer *get_file_transfer_struct(uint32_t friendnumber, uint32_t filenumber) { for (size_t i = 0; i < MAX_FILES; ++i) { - struct FileTransfer *ft_send = &Friends.list[friendnum].file_sender[i]; + struct FileTransfer *ft_send = &Friends.list[friendnumber].file_sender[i]; - if (ft_send->state != FILE_TRANSFER_INACTIVE && ft_send->filenum == filenum) { + if (ft_send->state != FILE_TRANSFER_INACTIVE && ft_send->filenumber == filenumber) { return ft_send; } - struct FileTransfer *ft_recv = &Friends.list[friendnum].file_receiver[i]; + struct FileTransfer *ft_recv = &Friends.list[friendnumber].file_receiver[i]; - if (ft_recv->state != FILE_TRANSFER_INACTIVE && ft_recv->filenum == filenum) { + if (ft_recv->state != FILE_TRANSFER_INACTIVE && ft_recv->filenumber == filenumber) { return ft_recv; } } @@ -158,7 +156,7 @@ struct FileTransfer *get_file_transfer_struct(uint32_t friendnum, uint32_t filen /* Returns a pointer to the FileTransfer struct associated with index with the direction specified. * Returns NULL on failure. */ -struct FileTransfer *get_file_transfer_struct_index(uint32_t friendnum, uint32_t index, +struct FileTransfer *get_file_transfer_struct_index(uint32_t friendnumber, uint32_t index, FILE_TRANSFER_DIRECTION direction) { if (direction != FILE_TRANSFER_RECV && direction != FILE_TRANSFER_SEND) { @@ -167,8 +165,8 @@ struct FileTransfer *get_file_transfer_struct_index(uint32_t friendnum, uint32_t for (size_t i = 0; i < MAX_FILES; ++i) { struct FileTransfer *ft = direction == FILE_TRANSFER_SEND ? - &Friends.list[friendnum].file_sender[i] : - &Friends.list[friendnum].file_receiver[i]; + &Friends.list[friendnumber].file_sender[i] : + &Friends.list[friendnumber].file_receiver[i]; if (ft->state != FILE_TRANSFER_INACTIVE && ft->index == index) { return ft; @@ -181,21 +179,19 @@ struct FileTransfer *get_file_transfer_struct_index(uint32_t friendnum, uint32_t /* Returns a pointer to an unused file sender. * Returns NULL if all file senders are in use. */ -static struct FileTransfer *new_file_sender(ToxWindow *window, uint32_t friendnum, uint32_t filenum, uint8_t type) +static struct FileTransfer *new_file_sender(ToxWindow *window, uint32_t friendnumber, uint32_t filenumber, uint8_t type) { for (size_t i = 0; i < MAX_FILES; ++i) { - struct FileTransfer *ft = &Friends.list[friendnum].file_sender[i]; + struct FileTransfer *ft = &Friends.list[friendnumber].file_sender[i]; if (ft->state == FILE_TRANSFER_INACTIVE) { clear_file_transfer(ft); ft->window = window; ft->index = i; - ft->friendnum = friendnum; - ft->filenum = filenum; + ft->friendnumber = friendnumber; + ft->filenumber = filenumber; ft->file_type = type; - ft->last_keep_alive = get_unix_time(); ft->state = FILE_TRANSFER_PENDING; - ft->direction = FILE_TRANSFER_SEND; return ft; } } @@ -206,21 +202,20 @@ static struct FileTransfer *new_file_sender(ToxWindow *window, uint32_t friendnu /* Returns a pointer to an unused file receiver. * Returns NULL if all file receivers are in use. */ -static struct FileTransfer *new_file_receiver(ToxWindow *window, uint32_t friendnum, uint32_t filenum, uint8_t type) +static struct FileTransfer *new_file_receiver(ToxWindow *window, uint32_t friendnumber, uint32_t filenumber, + uint8_t type) { for (size_t i = 0; i < MAX_FILES; ++i) { - struct FileTransfer *ft = &Friends.list[friendnum].file_receiver[i]; + struct FileTransfer *ft = &Friends.list[friendnumber].file_receiver[i]; if (ft->state == FILE_TRANSFER_INACTIVE) { clear_file_transfer(ft); ft->window = window; ft->index = i; - ft->friendnum = friendnum; - ft->filenum = filenum; + ft->friendnumber = friendnumber; + ft->filenumber = filenumber; ft->file_type = type; - ft->last_keep_alive = get_unix_time(); ft->state = FILE_TRANSFER_PENDING; - ft->direction = FILE_TRANSFER_RECV; return ft; } } @@ -231,15 +226,15 @@ static struct FileTransfer *new_file_receiver(ToxWindow *window, uint32_t friend /* Initializes an unused file transfer and returns its pointer. * Returns NULL on failure. */ -struct FileTransfer *new_file_transfer(ToxWindow *window, uint32_t friendnum, uint32_t filenum, +struct FileTransfer *new_file_transfer(ToxWindow *window, uint32_t friendnumber, uint32_t filenumber, FILE_TRANSFER_DIRECTION direction, uint8_t type) { if (direction == FILE_TRANSFER_RECV) { - return new_file_receiver(window, friendnum, filenum, type); + return new_file_receiver(window, friendnumber, filenumber, type); } if (direction == FILE_TRANSFER_SEND) { - return new_file_sender(window, friendnum, filenum, type); + return new_file_sender(window, friendnumber, filenumber, type); } return NULL; @@ -267,7 +262,7 @@ void close_file_transfer(ToxWindow *self, Tox *m, struct FileTransfer *ft, int C } if (CTRL >= 0) { - tox_file_control(m, ft->friendnum, ft->filenum, (Tox_File_Control) CTRL, NULL); + tox_file_control(m, ft->friendnumber, ft->filenumber, (Tox_File_Control) CTRL, NULL); } if (message && self) { @@ -283,22 +278,30 @@ void close_file_transfer(ToxWindow *self, Tox *m, struct FileTransfer *ft, int C clear_file_transfer(ft); } -/* Kills all active file transfers for friendnum */ -void kill_all_file_transfers_friend(Tox *m, uint32_t friendnum) +/* Kills active outgoing avatar file transfers for friendnumber */ +void kill_avatar_file_transfers_friend(Tox *m, uint32_t friendnumber) { - size_t i; + for (size_t i = 0; i < MAX_FILES; ++i) { + struct FileTransfer *ft = &Friends.list[friendnumber].file_sender[i]; - for (i = 0; i < MAX_FILES; ++i) { - close_file_transfer(NULL, m, &Friends.list[friendnum].file_sender[i], TOX_FILE_CONTROL_CANCEL, NULL, silent); - close_file_transfer(NULL, m, &Friends.list[friendnum].file_receiver[i], TOX_FILE_CONTROL_CANCEL, NULL, silent); + if (ft->file_type == TOX_FILE_KIND_AVATAR) { + close_file_transfer(NULL, m, ft, TOX_FILE_CONTROL_CANCEL, NULL, silent); + } + } +} + +/* Kills all active file transfers for friendnumber */ +void kill_all_file_transfers_friend(Tox *m, uint32_t friendnumber) +{ + for (size_t i = 0; i < MAX_FILES; ++i) { + close_file_transfer(NULL, m, &Friends.list[friendnumber].file_sender[i], TOX_FILE_CONTROL_CANCEL, NULL, silent); + close_file_transfer(NULL, m, &Friends.list[friendnumber].file_receiver[i], TOX_FILE_CONTROL_CANCEL, NULL, silent); } } void kill_all_file_transfers(Tox *m) { - size_t i; - - for (i = 0; i < Friends.max_idx; ++i) { + for (size_t i = 0; i < Friends.max_idx; ++i) { kill_all_file_transfers_friend(m, Friends.list[i].num); } } diff --git a/src/file_transfers.h b/src/file_transfers.h index eb7fa9f..9a46dc4 100644 --- a/src/file_transfers.h +++ b/src/file_transfers.h @@ -51,18 +51,16 @@ struct FileTransfer { ToxWindow *window; FILE *file; FILE_TRANSFER_STATE state; - FILE_TRANSFER_DIRECTION direction; uint8_t file_type; char file_name[TOX_MAX_FILENAME_LENGTH + 1]; char file_path[PATH_MAX + 1]; /* Not used by senders */ double bps; - uint32_t filenum; - uint32_t friendnum; + uint32_t filenumber; + uint32_t friendnumber; size_t index; uint64_t file_size; uint64_t position; time_t last_line_progress; /* The last time we updated the progress bar */ - time_t last_keep_alive; /* The last time we sent or received data */ uint32_t line_id; uint8_t file_id[TOX_FILE_ID_LENGTH]; }; @@ -75,24 +73,24 @@ void init_progress_bar(char *progline); void print_progress_bar(ToxWindow *self, double pct_done, double bps, uint32_t line_id); /* refreshes active file transfer status bars. */ -void refresh_file_transfer_progress(ToxWindow *self, uint32_t friendnum); +void refresh_file_transfer_progress(ToxWindow *self, uint32_t friendnumber); -/* Returns a pointer to friendnum's FileTransfer struct associated with filenum. - * Returns NULL if filenum is invalid. +/* Returns a pointer to friendnumber's FileTransfer struct associated with filenumber. + * Returns NULL if filenumber is invalid. */ -struct FileTransfer *get_file_transfer_struct(uint32_t friendnum, uint32_t filenum); +struct FileTransfer *get_file_transfer_struct(uint32_t friendnumber, uint32_t filenumber); /* Returns a pointer to the FileTransfer struct associated with index with the direction specified. * Returns NULL on failure. */ -struct FileTransfer *get_file_transfer_struct_index(uint32_t friendnum, uint32_t index, +struct FileTransfer *get_file_transfer_struct_index(uint32_t friendnumber, uint32_t index, FILE_TRANSFER_DIRECTION direction); /* Initializes an unused file transfer and returns its pointer. * Returns NULL on failure. */ -struct FileTransfer *new_file_transfer(ToxWindow *window, uint32_t friendnum, uint32_t filenum, +struct FileTransfer *new_file_transfer(ToxWindow *window, uint32_t friendnumber, uint32_t filenumber, FILE_TRANSFER_DIRECTION direction, uint8_t type); /* Closes file transfer ft. @@ -103,8 +101,11 @@ struct FileTransfer *new_file_transfer(ToxWindow *window, uint32_t friendnum, ui void close_file_transfer(ToxWindow *self, Tox *m, struct FileTransfer *ft, int CTRL, const char *message, Notification sound_type); -/* Kills all active file transfers for friendnum */ -void kill_all_file_transfers_friend(Tox *m, uint32_t friendnum); +/* Kills active outgoing avatar file transfers for friendnumber */ +void kill_avatar_file_transfers_friend(Tox *m, uint32_t friendnumber); + +/* Kills all active file transfers for friendnumber */ +void kill_all_file_transfers_friend(Tox *m, uint32_t friendnumber); void kill_all_file_transfers(Tox *m); diff --git a/src/windows.c b/src/windows.c index 782e990..a05d377 100644 --- a/src/windows.c +++ b/src/windows.c @@ -66,6 +66,8 @@ void on_friend_connection_status(Tox *m, uint32_t friendnumber, Tox_Connection c { UNUSED_VAR(userdata); + on_avatar_friend_connection_status(m, friendnumber, connection_status); + for (uint8_t i = 0; i < MAX_WINDOWS_NUM; ++i) { if (windows[i] != NULL && windows[i]->onConnectionChange != NULL) { windows[i]->onConnectionChange(windows[i], m, friendnumber, connection_status);