1 #ifndef FILE_TRANSFERS_H 2 #define FILE_TRANSFERS_H 3 4 #include <stdbool.h> 5 #include <stdint.h> 6 #include <stdio.h> 7 #include <tox/tox.h> 8 9 typedef struct msg_header MSG_HEADER; 10 11 #define MAX_FILE_TRANSFERS 32 12 13 typedef enum { 14 FILE_TRANSFER_STATUS_NONE, 15 FILE_TRANSFER_STATUS_ACTIVE, 16 FILE_TRANSFER_STATUS_PAUSED_US, 17 FILE_TRANSFER_STATUS_PAUSED_BOTH, 18 FILE_TRANSFER_STATUS_PAUSED_THEM, 19 FILE_TRANSFER_STATUS_BROKEN, 20 FILE_TRANSFER_STATUS_COMPLETED, 21 FILE_TRANSFER_STATUS_KILLED, 22 } UTOX_FILE_TRANSFER_STATUS; 23 24 typedef struct { 25 FILE *file; 26 uint8_t *name; 27 } UTOX_MSG_FT; 28 29 typedef struct file_transfer { 30 bool in_use; 31 bool incoming; 32 bool in_memory; 33 bool avatar; 34 bool inline_img; 35 bool resumeable; 36 37 uint32_t friend_number; 38 uint32_t file_number; 39 40 uint8_t data_hash[TOX_HASH_LENGTH]; 41 42 UTOX_FILE_TRANSFER_STATUS status; 43 44 uint8_t path[1024]; // UTOX_FILE_NAME_LENGTH 45 46 uint8_t *name; 47 size_t name_length; 48 49 size_t target_size; 50 size_t current_size; 51 52 union { 53 uint8_t *memory; 54 uint8_t *avatar; 55 FILE *file; 56 } via; 57 58 /* speed + progress calculations. */ 59 uint32_t speed, num_packets; 60 uint64_t last_check_time, last_check_transferred; 61 62 FILE *resume_file; 63 uint8_t resume_update; 64 65 MSG_HEADER *ui_data; 66 bool decon_wait; // Used to pause decon/file cleanup, for the UI thread to copy the data; 67 } FILE_TRANSFER; 68 69 void ft_local_control(Tox *tox, uint32_t friend_number, uint32_t file_number, TOX_FILE_CONTROL control); 70 71 uint32_t ft_send_avatar(Tox *tox, uint32_t friend_number); 72 73 uint32_t ft_send_file(Tox *tox, uint32_t friend_number, FILE *file, uint8_t *name, size_t name_length, uint8_t *hash); 74 75 uint32_t ft_send_data(Tox *tox, uint32_t friend_number, uint8_t *data, size_t size, uint8_t *name, size_t name_length); 76 77 /** Sets the UI pointer to the File Transfer Message pointer. 78 * 79 * This is non robust and could use some LTC */ 80 bool ft_set_ui_data(uint32_t friend_number, uint32_t file_number, MSG_HEADER *ui_data); 81 82 bool utox_file_start_write(uint32_t friend_number, uint32_t file_number, const char *file); 83 84 void utox_set_callbacks_file_transfer(Tox *tox); 85 86 void ft_friend_online(Tox *tox, uint32_t friend_number); 87 void ft_friend_offline(Tox *tox, uint32_t friend_number); 88 89 #endif 90