diff options
author | Alexander Lantsev <aunsane@gmail.com> | 2015-02-15 15:17:05 +0000 |
---|---|---|
committer | Alexander Lantsev <aunsane@gmail.com> | 2015-02-15 15:17:05 +0000 |
commit | e8f11470ac52bc89e955630d69ed8229a06acc79 (patch) | |
tree | 1922fc5a543da79dc8db3ffab647bf885f01fa87 /protocols/Tox/src/tox_core.cpp | |
parent | fd3c3c5c71590bb18372f84e18a51b07671dfa55 (diff) |
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
Diffstat (limited to 'protocols/Tox/src/tox_core.cpp')
-rw-r--r-- | protocols/Tox/src/tox_core.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
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 |