#include "./tox_default_impl.hpp" Tox_Connection ToxDefaultImpl::toxSelfGetConnectionStatus(void) { return tox_self_get_connection_status(_tox); } uint32_t ToxDefaultImpl::toxIterationInterval(void) { return tox_iteration_interval(_tox); } std::vector ToxDefaultImpl::toxSelfGetAddress(void) { std::vector self_addr{}; self_addr.resize(TOX_ADDRESS_SIZE); tox_self_get_address(_tox, self_addr.data()); return self_addr; } void ToxDefaultImpl::toxSelfSetNospam(uint32_t nospam) { tox_self_set_nospam(_tox, nospam); } uint32_t ToxDefaultImpl::toxSelfGetNospam(void) { return tox_self_get_nospam(_tox); } std::vector ToxDefaultImpl::toxSelfGetPublicKey(void) { std::vector self_pub{}; self_pub.resize(TOX_PUBLIC_KEY_SIZE); tox_self_get_public_key(_tox, self_pub.data()); return self_pub; } Tox_Err_Set_Info ToxDefaultImpl::toxSelfSetName(std::string_view name) { Tox_Err_Set_Info err = TOX_ERR_SET_INFO_OK; tox_self_set_name(_tox, reinterpret_cast(name.data()), name.size(), &err); return err; } std::string ToxDefaultImpl::toxSelfGetName(void) { std::string name; name.resize(tox_self_get_name_size(_tox)); tox_self_get_name(_tox, reinterpret_cast(name.data())); return name; } Tox_Err_Set_Info ToxDefaultImpl::toxSelfSetStatusMessage(std::string_view status_message) { Tox_Err_Set_Info err = TOX_ERR_SET_INFO_OK; tox_self_set_status_message(_tox, reinterpret_cast(status_message.data()), status_message.size(), &err); return err; } std::string ToxDefaultImpl::toxSelfGetStatusMessage(void) { std::string status; status.resize(tox_self_get_status_message_size(_tox)); tox_self_get_status_message(_tox, reinterpret_cast(status.data())); return status; } void ToxDefaultImpl::toxSelfSetStatus(Tox_User_Status status) { tox_self_set_status(_tox, status); } Tox_User_Status ToxDefaultImpl::toxSelfGetStatus(void) { return tox_self_get_status(_tox); } std::tuple, Tox_Err_Friend_Add> ToxDefaultImpl::toxFriendAdd(const std::vector& address, std::string_view message) { // TODO: check size Tox_Err_Friend_Add err = TOX_ERR_FRIEND_ADD_OK; auto res = tox_friend_add(_tox, address.data(), reinterpret_cast(message.data()), message.size(), &err); if (err == TOX_ERR_FRIEND_ADD_OK) { return {res, err}; } else { return {std::nullopt, err}; } } std::tuple, Tox_Err_Friend_Add> ToxDefaultImpl::toxFriendAddNorequest(const std::vector& public_key) { // TODO: check size Tox_Err_Friend_Add err = TOX_ERR_FRIEND_ADD_OK; auto res = tox_friend_add_norequest(_tox, public_key.data(), &err); if (err == TOX_ERR_FRIEND_ADD_OK) { return {res, err}; } else { return {std::nullopt, err}; } } Tox_Err_Friend_Delete ToxDefaultImpl::toxFriendDelete(uint32_t friend_number) { Tox_Err_Friend_Delete err = TOX_ERR_FRIEND_DELETE_OK; tox_friend_delete(_tox, friend_number, &err); return err; } std::tuple>, Tox_Err_Friend_Get_Public_Key> ToxDefaultImpl::toxFriendGetPublicKey(uint32_t friend_number) { std::vector pub(TOX_PUBLIC_KEY_SIZE); Tox_Err_Friend_Get_Public_Key err = TOX_ERR_FRIEND_GET_PUBLIC_KEY_OK; tox_friend_get_public_key(_tox, friend_number, pub.data(), &err); if (err == TOX_ERR_FRIEND_GET_PUBLIC_KEY_OK) { return {pub, err}; } else { return {std::nullopt, err}; } } std::tuple, Tox_Err_Friend_Send_Message> ToxDefaultImpl::toxFriendSendMessage(uint32_t friend_number, Tox_Message_Type type, std::string_view message) { Tox_Err_Friend_Send_Message err = TOX_ERR_FRIEND_SEND_MESSAGE_OK; auto res = tox_friend_send_message(_tox, friend_number, type, reinterpret_cast(message.data()), message.size(), &err); if (err == TOX_ERR_FRIEND_SEND_MESSAGE_OK) { return {res, err}; } else { return {std::nullopt, err}; } } Tox_Err_Conference_Send_Message ToxDefaultImpl::toxConferenceSendMessage(uint32_t conference_number, Tox_Message_Type type, std::string_view message) { Tox_Err_Conference_Send_Message err = TOX_ERR_CONFERENCE_SEND_MESSAGE_OK; tox_conference_send_message(_tox, conference_number, type, reinterpret_cast(message.data()), message.size(), &err); return err; } Tox_Err_Friend_Custom_Packet ToxDefaultImpl::toxFriendSendLossyPacket(uint32_t friend_number, const std::vector& data) { Tox_Err_Friend_Custom_Packet err = TOX_ERR_FRIEND_CUSTOM_PACKET_OK; tox_friend_send_lossy_packet(_tox, friend_number, data.data(), data.size(), &err); return err; } Tox_Err_Friend_Custom_Packet ToxDefaultImpl::toxFriendSendLosslessPacket(uint32_t friend_number, const std::vector& data) { Tox_Err_Friend_Custom_Packet err = TOX_ERR_FRIEND_CUSTOM_PACKET_OK; tox_friend_send_lossless_packet(_tox, friend_number, data.data(), data.size(), &err); return err; } std::tuple, Tox_Err_Group_New> ToxDefaultImpl::toxGroupNew(Tox_Group_Privacy_State privacy_state, std::string_view group_name, std::string_view name) { Tox_Err_Group_New err = TOX_ERR_GROUP_NEW_OK; auto res = tox_group_new(_tox, privacy_state, reinterpret_cast(group_name.data()), group_name.size(), reinterpret_cast(name.data()), name.size(), &err); if (err == TOX_ERR_GROUP_NEW_OK) { return {res, err}; } else { return {std::nullopt, err}; } } std::tuple, Tox_Err_Group_Join> ToxDefaultImpl::toxGroupJoin(const std::vector& chat_id, std::string_view name, std::string_view password) { Tox_Err_Group_Join err = TOX_ERR_GROUP_JOIN_OK; // TODO: check size auto res = tox_group_join(_tox, chat_id.data(), reinterpret_cast(name.data()), name.size(), reinterpret_cast(password.data()), password.size(), &err); if (err == TOX_ERR_GROUP_JOIN_OK) { return {res, err}; } else { return {std::nullopt, err}; } } std::optional ToxDefaultImpl::toxGroupIsConnected(uint32_t group_number) { Tox_Err_Group_Is_Connected err = TOX_ERR_GROUP_IS_CONNECTED_OK; auto res = tox_group_is_connected(_tox, group_number, &err); if (err == TOX_ERR_GROUP_IS_CONNECTED_OK) { return res; } else { return std::nullopt; } } Tox_Err_Group_Reconnect ToxDefaultImpl::toxGroupReconnect(uint32_t group_number) { Tox_Err_Group_Reconnect err = TOX_ERR_GROUP_RECONNECT_OK; tox_group_reconnect(_tox, group_number, &err); return err; } Tox_Err_Group_Leave ToxDefaultImpl::toxGroupLeave(uint32_t group_number, std::string_view part_message) { Tox_Err_Group_Leave err = TOX_ERR_GROUP_LEAVE_OK; tox_group_leave(_tox, group_number, reinterpret_cast(part_message.data()), part_message.size(), &err); return err; } std::optional ToxDefaultImpl::toxGroupSelfGetName(uint32_t group_number) { std::string name; Tox_Err_Group_Self_Query err = TOX_ERR_GROUP_SELF_QUERY_OK; const auto size = tox_group_self_get_name_size(_tox, group_number, &err); if (err != TOX_ERR_GROUP_SELF_QUERY_OK) { return std::nullopt; } name.resize(size); tox_group_self_get_name(_tox, group_number, reinterpret_cast(name.data()), &err); if (err == TOX_ERR_GROUP_SELF_QUERY_OK) { return name; } else { return std::nullopt; } } std::tuple, Tox_Err_Group_Peer_Query> ToxDefaultImpl::toxGroupPeerGetName(uint32_t group_number, uint32_t peer_id) { std::string name; Tox_Err_Group_Peer_Query err = TOX_ERR_GROUP_PEER_QUERY_OK; const auto size = tox_group_peer_get_name_size(_tox, group_number, peer_id, &err); if (err != TOX_ERR_GROUP_PEER_QUERY_OK) { return {std::nullopt, err}; } name.resize(size); tox_group_peer_get_name(_tox, group_number, peer_id, reinterpret_cast(name.data()), &err); if (err == TOX_ERR_GROUP_PEER_QUERY_OK) { return {name, err}; } else { return {std::nullopt, err}; } } std::tuple, Tox_Err_Group_Peer_Query> ToxDefaultImpl::toxGroupPeerGetConnectionStatus(uint32_t group_number, uint32_t peer_id) { Tox_Err_Group_Peer_Query err = TOX_ERR_GROUP_PEER_QUERY_OK; auto res = tox_group_peer_get_connection_status(_tox, group_number, peer_id, &err); if (err == TOX_ERR_GROUP_PEER_QUERY_OK) { return {res, err}; } else { return {std::nullopt, err}; } } Tox_Err_Group_Topic_Set ToxDefaultImpl::toxGroupSetTopic(uint32_t group_number, std::string_view topic) { Tox_Err_Group_Topic_Set err = TOX_ERR_GROUP_TOPIC_SET_OK; tox_group_set_topic(_tox, group_number, reinterpret_cast(topic.data()), topic.size(), &err); return err; } std::optional ToxDefaultImpl::toxGroupGetTopic(uint32_t group_number) { std::string topic; Tox_Err_Group_State_Queries err = TOX_ERR_GROUP_STATE_QUERIES_OK; const auto size = tox_group_get_topic_size(_tox, group_number, &err); if (err != TOX_ERR_GROUP_STATE_QUERIES_OK) { return std::nullopt; } topic.resize(size); tox_group_get_topic(_tox, group_number, reinterpret_cast(topic.data()), &err); if (err == TOX_ERR_GROUP_STATE_QUERIES_OK) { return topic; } else { return std::nullopt; } } std::optional ToxDefaultImpl::toxGroupGetName(uint32_t group_number) { std::string name; Tox_Err_Group_State_Queries err = TOX_ERR_GROUP_STATE_QUERIES_OK; const auto size = tox_group_get_name_size(_tox, group_number, &err); if (err != TOX_ERR_GROUP_STATE_QUERIES_OK) { return std::nullopt; } name.resize(size); tox_group_get_name(_tox, group_number, reinterpret_cast(name.data()), &err); if (err == TOX_ERR_GROUP_STATE_QUERIES_OK) { return name; } else { return std::nullopt; } } std::optional> ToxDefaultImpl::toxGroupGetChatId(uint32_t group_number) { std::vector chat_id{}; chat_id.resize(TOX_GROUP_CHAT_ID_SIZE); Tox_Err_Group_State_Queries err = TOX_ERR_GROUP_STATE_QUERIES_OK; tox_group_get_chat_id(_tox, group_number, chat_id.data(), &err); if (err == TOX_ERR_GROUP_STATE_QUERIES_OK) { return chat_id; } else { return std::nullopt; } } std::tuple, Tox_Err_Group_Send_Message> ToxDefaultImpl::toxGroupSendMessage(uint32_t group_number, Tox_Message_Type type, std::string_view message) { Tox_Err_Group_Send_Message err = TOX_ERR_GROUP_SEND_MESSAGE_OK; uint32_t message_id = 0; tox_group_send_message(_tox, group_number, type, reinterpret_cast(message.data()), message.size(), &message_id, &err); if (err == TOX_ERR_GROUP_SEND_MESSAGE_OK) { return {message_id, err}; } else { return {std::nullopt, err}; } } Tox_Err_Group_Send_Private_Message ToxDefaultImpl::toxGroupSendPrivateMessage(uint32_t group_number, uint32_t peer_id, Tox_Message_Type type, std::string_view message) { Tox_Err_Group_Send_Private_Message err = TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_OK; tox_group_send_private_message(_tox, group_number, peer_id, type, reinterpret_cast(message.data()), message.size(), &err); return err; } Tox_Err_Group_Send_Custom_Packet ToxDefaultImpl::toxGroupSendCustomPacket(uint32_t group_number, bool lossless, const std::vector& data) { Tox_Err_Group_Send_Custom_Packet err = TOX_ERR_GROUP_SEND_CUSTOM_PACKET_OK; tox_group_send_custom_packet(_tox, group_number, lossless, data.data(), data.size(), &err); return err; } Tox_Err_Group_Send_Custom_Private_Packet ToxDefaultImpl::toxGroupSendCustomPrivatePacket(uint32_t group_number, uint32_t peer_id, bool lossless, const std::vector& data) { Tox_Err_Group_Send_Custom_Private_Packet err = TOX_ERR_GROUP_SEND_CUSTOM_PRIVATE_PACKET_OK; tox_group_send_custom_private_packet(_tox, group_number, peer_id, lossless, data.data(), data.size(), &err); return err; } Tox_Err_Group_Invite_Friend ToxDefaultImpl::toxGroupInviteFriend(uint32_t group_number, uint32_t friend_number) { Tox_Err_Group_Invite_Friend err = TOX_ERR_GROUP_INVITE_FRIEND_OK; tox_group_invite_friend(_tox, group_number, friend_number, &err); return err; } std::tuple, Tox_Err_Group_Invite_Accept> ToxDefaultImpl::toxGroupInviteAccept(uint32_t friend_number, const std::vector& invite_data, std::string_view name, std::string_view password) { Tox_Err_Group_Invite_Accept err = TOX_ERR_GROUP_INVITE_ACCEPT_OK; auto res = tox_group_invite_accept(_tox, friend_number, invite_data.data(), invite_data.size(), reinterpret_cast(name.data()), name.size(), reinterpret_cast(password.data()), password.size(), &err); if (err == TOX_ERR_GROUP_INVITE_ACCEPT_OK) { return {res, err}; } else { return {std::nullopt, err}; } }