#ifndef C_NGC_FT1_H #define C_NGC_FT1_H // this is a c header #include #include "ngc_ext_common.h" #ifdef __cplusplus extern "C" { #endif // ========== struct / typedef ========== typedef struct NGC_FT1 NGC_FT1; struct NGC_FT1_options { int tmp; }; // uint16_t ? // ffs c does not allow types typedef enum NGC_FT1_file_kind /*: uint8_t*/ { //INVALID = 0u, // id: // group (implicit) // peer pub key + msg_id NGC_HS1_MESSAGE_BY_ID = 1u, // history sync PoC 1 // :) // draft for fun and profit // TODO: should we even support v1? // TODO: design the same thing again for tox? (msg_pack instead of bencode?) // id: infohash TORRENT_V1_METAINFO = 8u, // id: sha1 TORRENT_V1_CHUNK, // id: infohash TORRENT_V2_METAINFO, // id: sha256 TORRENT_V2_CHUNK, } NGC_FT1_file_kind; // ========== init / kill ========== // (see tox api) bool NGC_FT1_init(NGC_EXT_CTX* ngc_ext_ctx, const struct NGC_FT1_options* options); void NGC_FT1_kill(NGC_EXT_CTX* ngc_ext_ctx); // ========== iterate ========== void NGC_FT1_iterate(Tox *tox, NGC_EXT_CTX* ngc_ext_ctx/*, void *user_data*/); // ========== request ========== // TODO: remove? void NGC_FT1_request( Tox *tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, NGC_FT1_file_kind file_kind, const uint8_t* file_id, size_t file_id_size ); void NGC_FT1_send_request_private( Tox *tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, NGC_FT1_file_kind file_kind, const uint8_t* file_id, size_t file_id_size ); typedef void NGC_FT1_recv_request_cb(Tox *tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t* file_id, size_t file_id_size); void NGC_FT1_register_callback_recv_request(NGC_EXT_CTX* ngc_ext_ctx, NGC_FT1_file_kind file_kind, NGC_FT1_recv_request_cb* callback); // ========== send/accept ========== bool NGC_FT1_send_init_private( Tox *tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, NGC_FT1_file_kind file_kind, const uint8_t* file_id, size_t file_id_size, size_t file_size ); // return true to accept, false to deny typedef bool NGC_FT1_recv_init_cb(Tox *tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t* file_id, size_t file_id_size, const uint8_t transfer_id, const size_t file_size); void NGC_FT1_register_callback_recv_init(NGC_EXT_CTX* ngc_ext_ctx, NGC_FT1_file_kind file_kind, NGC_FT1_recv_init_cb* callback); // ========== data ========== typedef void NGC_FT1_recv_data_cb(Tox *tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, uint8_t transfer_id, size_t data_offset, const uint8_t* data, size_t data_size); void NGC_FT1_register_callback_recv_data(NGC_EXT_CTX* ngc_ext_ctx, NGC_FT1_file_kind file_kind, NGC_FT1_recv_data_cb* callback); typedef void NGC_FT1_send_data_cb(Tox *tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, uint8_t transfer_id, size_t data_offset, uint8_t** data, size_t* data_size); void NGC_FT1_register_callback_send_data(NGC_EXT_CTX* ngc_ext_ctx, NGC_FT1_file_kind file_kind, NGC_FT1_send_data_cb* callback); // ========== peer online/offline ========== //void NGC_FT1_peer_online(Tox* tox, NGC_FT1* ngc_hs1_ctx, uint32_t group_number, uint32_t peer_number, bool online); // "callback" void NGC_FT1_handle_group_custom_packet( Tox* tox, NGC_FT1* ngc_hs1_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length //void *user_data ); #ifdef __cplusplus } #endif #endif // C_NGC_FT1_H