diff --git a/solanaceae/core/tox_default_impl.cpp b/solanaceae/core/tox_default_impl.cpp index 35d8a9b..e99d98c 100644 --- a/solanaceae/core/tox_default_impl.cpp +++ b/solanaceae/core/tox_default_impl.cpp @@ -1,4 +1,5 @@ #include "./tox_default_impl.hpp" +#include Tox_Connection ToxDefaultImpl::toxSelfGetConnectionStatus(void) { return tox_self_get_connection_status(_tox); @@ -113,6 +114,46 @@ std::tuple, Tox_Err_Friend_Send_Message> ToxDefaultImpl: } } +Tox_Err_File_Control ToxDefaultImpl::toxFileControl(uint32_t friend_number, uint32_t file_number, Tox_File_Control control) { + Tox_Err_File_Control err = TOX_ERR_FILE_CONTROL_OK; + tox_file_control(_tox, friend_number, file_number, control, &err); + return err; +} + +Tox_Err_File_Seek ToxDefaultImpl::toxFileSeek(uint32_t friend_number, uint32_t file_number, uint64_t position) { + Tox_Err_File_Seek err = TOX_ERR_FILE_SEEK_OK; + tox_file_seek(_tox, friend_number, file_number, position, &err); + return err; +} + +std::tuple>, Tox_Err_File_Get> ToxDefaultImpl::toxFileGetFileID(uint32_t friend_number, uint32_t file_number) { + Tox_Err_File_Get err = TOX_ERR_FILE_GET_OK; + std::vector id(TOX_FILE_ID_LENGTH); + tox_file_get_file_id(_tox, friend_number, file_number, id.data(), &err); + if (err == TOX_ERR_FILE_GET_OK) { + return {id, err}; + } else { + return {std::nullopt, err}; + } +} + +std::tuple, Tox_Err_File_Send> ToxDefaultImpl::toxFileSend(uint32_t friend_number, uint32_t kind, uint64_t file_size, const std::vector& file_id, std::string_view filename) { + // TODO: check file_id size + Tox_Err_File_Send err = TOX_ERR_FILE_SEND_OK; + auto res = tox_file_send(_tox, friend_number, kind, file_size, file_id.data(), reinterpret_cast(filename.data()), filename.size(), &err); + if (err == TOX_ERR_FILE_SEND_OK) { + return {res, err}; + } else { + return {std::nullopt, err}; + } +} + +Tox_Err_File_Send_Chunk ToxDefaultImpl::toxFileSendChunk(uint32_t friend_number, uint32_t file_number, uint64_t position, const std::vector& data) { + Tox_Err_File_Send_Chunk err = TOX_ERR_FILE_SEND_CHUNK_OK; + tox_file_send_chunk(_tox, friend_number, file_number, position, data.data(), data.size(), &err); + return err; +} + std::tuple, Tox_Err_Conference_Join> ToxDefaultImpl::toxConferenceJoin(uint32_t friend_number, const std::vector& cookie) { Tox_Err_Conference_Join err = TOX_ERR_CONFERENCE_JOIN_OK; auto res = tox_conference_join(_tox, friend_number, cookie.data(), cookie.size(), &err); diff --git a/solanaceae/core/tox_default_impl.hpp b/solanaceae/core/tox_default_impl.hpp index 92ebd9e..babed20 100644 --- a/solanaceae/core/tox_default_impl.hpp +++ b/solanaceae/core/tox_default_impl.hpp @@ -35,6 +35,12 @@ struct ToxDefaultImpl : public ToxI { std::tuple, Tox_Err_Friend_Send_Message> toxFriendSendMessage(uint32_t friend_number, Tox_Message_Type type, std::string_view message) override; // files + Tox_Err_File_Control toxFileControl(uint32_t friend_number, uint32_t file_number, Tox_File_Control control) override; + Tox_Err_File_Seek toxFileSeek(uint32_t friend_number, uint32_t file_number, uint64_t position) override; + std::tuple>, Tox_Err_File_Get> toxFileGetFileID(uint32_t friend_number, uint32_t file_number) override; + std::tuple, Tox_Err_File_Send> toxFileSend(uint32_t friend_number, uint32_t kind, uint64_t file_size, const std::vector& file_id, std::string_view filename) override; + Tox_Err_File_Send_Chunk toxFileSendChunk(uint32_t friend_number, uint32_t file_number, uint64_t position, const std::vector& data) override; + // conferece std::tuple, Tox_Err_Conference_Join> toxConferenceJoin(uint32_t friend_number, const std::vector& cookie) override; Tox_Err_Conference_Send_Message toxConferenceSendMessage(uint32_t conference_number, Tox_Message_Type type, std::string_view message) override; diff --git a/solanaceae/core/tox_interface.hpp b/solanaceae/core/tox_interface.hpp index ff98c00..882a937 100644 --- a/solanaceae/core/tox_interface.hpp +++ b/solanaceae/core/tox_interface.hpp @@ -48,6 +48,11 @@ struct ToxI_raw { virtual std::vector toxHash(const std::vector& data); // files + virtual Tox_Err_File_Control toxFileControl(uint32_t friend_number, uint32_t file_number, Tox_File_Control control) = 0; + virtual Tox_Err_File_Seek toxFileSeek(uint32_t friend_number, uint32_t file_number, uint64_t position) = 0; + virtual std::tuple>, Tox_Err_File_Get> toxFileGetFileID(uint32_t friend_number, uint32_t file_number) = 0; + virtual std::tuple, Tox_Err_File_Send> toxFileSend(uint32_t friend_number, uint32_t kind, uint64_t file_size, const std::vector& file_id, std::string_view filename) = 0; + virtual Tox_Err_File_Send_Chunk toxFileSendChunk(uint32_t friend_number, uint32_t file_number, uint64_t position, const std::vector& data) = 0; // conferece //bool tox_conference_delete(Tox *tox, uint32_t conference_number, Tox_Err_Conference_Delete *error); @@ -160,6 +165,10 @@ struct ToxI : public ToxI_raw { return toxFriendSendMessage(friend_number, type, message); } + std::tuple, Tox_Err_File_Send> toxFileSend_str(uint32_t friend_number, uint32_t kind, uint64_t file_size, const std::vector& file_id, const std::string& filename) { + return toxFileSend(friend_number, kind, file_size, file_id, filename); + } + Tox_Err_Conference_Send_Message toxConferenceSendMessage_str(uint32_t conference_number, Tox_Message_Type type, const std::string& message) { return toxConferenceSendMessage(conference_number, type, message); }