From e8f11470ac52bc89e955630d69ed8229a06acc79 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Sun, 15 Feb 2015 15:17:05 +0000 Subject: Tox: - refactoring - nodes settings in db are ansi now - added work with tox network git-svn-id: http://svn.miranda-ng.org/main/trunk@12124 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Tox/src/tox_core.cpp | 108 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 protocols/Tox/src/tox_core.cpp (limited to 'protocols/Tox/src/tox_core.cpp') diff --git a/protocols/Tox/src/tox_core.cpp b/protocols/Tox/src/tox_core.cpp new file mode 100644 index 0000000000..7d97b875f0 --- /dev/null +++ b/protocols/Tox/src/tox_core.cpp @@ -0,0 +1,108 @@ +#include "common.h" + +bool CToxProto::InitToxCore() +{ + debugLogA("CToxProto::InitToxCore: initializing tox profile"); + + Tox_Options options = { 0 }; + options.udp_disabled = getBool("DisableUDP", 0); + options.ipv6enabled = !getBool("DisableIPv6", 0); + + if (hNetlib != NULL) + { + NETLIBUSERSETTINGS nlus = { sizeof(NETLIBUSERSETTINGS) }; + CallService(MS_NETLIB_GETUSERSETTINGS, (WPARAM)hNetlib, (LPARAM)&nlus); + + if (nlus.useProxy) + { + if (nlus.proxyType == PROXYTYPE_HTTP || nlus.proxyType == PROXYTYPE_HTTPS) + { + debugLogA("CToxProto::InitToxCore: setting http user proxy config"); + options.proxy_type = TOX_PROXY_HTTP; + strcpy(&options.proxy_address[0], nlus.szProxyServer); + options.proxy_port = nlus.wProxyPort; + } + + if (nlus.proxyType == PROXYTYPE_SOCKS4 || nlus.proxyType == PROXYTYPE_SOCKS5) + { + debugLogA("CToxProto::InitToxCore: setting socks user proxy config"); + options.proxy_type = TOX_PROXY_SOCKS5; + strcpy(&options.proxy_address[0], nlus.szProxyServer); + options.proxy_port = nlus.wProxyPort; + } + } + } + + tox = tox_new(&options); + password = mir_utf8encodeW(ptrT(getTStringA("Password"))); + bool isProfileLoaded = LoadToxProfile(); + if (isProfileLoaded) + { + tox_callback_friend_request(tox, OnFriendRequest, this); + tox_callback_friend_message(tox, OnFriendMessage, this); + tox_callback_friend_action(tox, OnFriendAction, this); + tox_callback_typing_change(tox, OnTypingChanged, this); + tox_callback_name_change(tox, OnFriendNameChange, this); + tox_callback_status_message(tox, OnStatusMessageChanged, this); + tox_callback_user_status(tox, OnUserStatusChanged, this); + tox_callback_read_receipt(tox, OnReadReceipt, this); + tox_callback_connection_status(tox, OnConnectionStatusChanged, this); + // file transfers + tox_callback_file_control(tox, OnFileRequest, this); + tox_callback_file_send_request(tox, OnFriendFile, this); + tox_callback_file_data(tox, OnFileData, this); + // avatars + tox_callback_avatar_info(tox, OnGotFriendAvatarInfo, this); + tox_callback_avatar_data(tox, OnGotFriendAvatarData, this); + + uint8_t data[TOX_FRIEND_ADDRESS_SIZE]; + tox_get_address(tox, data); + ToxHexAddress address(data, TOX_FRIEND_ADDRESS_SIZE); + setString(NULL, TOX_SETTINGS_ID, address); + + int size = tox_get_self_name_size(tox); + std::string nick(size, 0); + tox_get_self_name(tox, (uint8_t*)nick.data()); + setWString("Nick", ptrW(Utf8DecodeW(nick.c_str()))); + + std::tstring avatarPath = GetAvatarFilePath(); + if (IsFileExists(avatarPath)) + { + SetToxAvatar(avatarPath); + } + } + else + { + if (password != NULL) + { + mir_free(password); + password = NULL; + } + tox_kill(tox); + } + + return isProfileLoaded; +} + +void CToxProto::UninitToxCore() +{ + for (size_t i = 0; i < transfers->Count(); i++) + { + FileTransferParam *transfer = transfers->GetAt(i); + transfer->status = CANCELED; + tox_file_send_control(tox, transfer->friendNumber, transfer->GetDirection(), transfer->fileNumber, TOX_FILECONTROL_KILL, NULL, 0); + ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_DENIED, (HANDLE)transfer, 0); + transfers->Remove(transfer); + } + + ptrA nickname(mir_utf8encodeW(ptrT(getTStringA("Nick")))); + tox_set_name(tox, (uint8_t*)(char*)nickname, mir_strlen(nickname)); + + SaveToxProfile(); + if (password != NULL) + { + mir_free(password); + password = NULL; + } + tox_kill(tox); +} \ No newline at end of file -- cgit v1.2.3