summaryrefslogtreecommitdiff
path: root/protocols/Tox
diff options
context:
space:
mode:
authorAlexander Lantsev <aunsane@gmail.com>2014-08-30 11:37:47 +0000
committerAlexander Lantsev <aunsane@gmail.com>2014-08-30 11:37:47 +0000
commitce49c84f3a26f016f9232d2bffdc830d7fd6169f (patch)
treec6bbdab7b5a42f65461a5d495d962c4ff69b9e97 /protocols/Tox
parentbeaf93e92827b7bcc77c9f6b2a0c7097d355151c (diff)
Tox:
- switch to offline when connection is lost - file transfer support - code refactoring - project reordering - version bump git-svn-id: http://svn.miranda-ng.org/main/trunk@10340 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/Tox')
-rw-r--r--protocols/Tox/Tox_10.vcxproj26
-rw-r--r--protocols/Tox/Tox_10.vcxproj.filters39
-rw-r--r--protocols/Tox/Tox_10.vcxproj.user3
-rw-r--r--protocols/Tox/Tox_12.vcxproj27
-rw-r--r--protocols/Tox/Tox_12.vcxproj.filters38
-rw-r--r--protocols/Tox/docs/dlltolib/start.cmd3
-rw-r--r--protocols/Tox/res/resource.apsbin0 -> 42156 bytes
-rw-r--r--protocols/Tox/src/common.h3
-rw-r--r--protocols/Tox/src/file_transfer.h197
-rw-r--r--protocols/Tox/src/main.cpp4
-rw-r--r--protocols/Tox/src/stdafx.cpp18
-rw-r--r--protocols/Tox/src/tox_account.cpp45
-rw-r--r--protocols/Tox/src/tox_accounts.cpp43
-rw-r--r--protocols/Tox/src/tox_contacts.cpp128
-rw-r--r--protocols/Tox/src/tox_events.cpp274
-rw-r--r--protocols/Tox/src/tox_instances.cpp44
-rw-r--r--protocols/Tox/src/tox_messages.cpp83
-rw-r--r--protocols/Tox/src/tox_netlib.cpp6
-rw-r--r--protocols/Tox/src/tox_options.cpp100
-rw-r--r--protocols/Tox/src/tox_profile.cpp79
-rw-r--r--protocols/Tox/src/tox_proto.cpp90
-rw-r--r--protocols/Tox/src/tox_proto.h111
-rw-r--r--protocols/Tox/src/tox_search.cpp79
-rw-r--r--protocols/Tox/src/tox_services.cpp2
-rw-r--r--protocols/Tox/src/tox_transfer.cpp128
-rw-r--r--protocols/Tox/src/tox_transfers.cpp44
-rw-r--r--protocols/Tox/src/tox_utils.cpp26
-rw-r--r--protocols/Tox/src/version.h2
-rw-r--r--protocols/Tox/tox/README.md (renamed from protocols/Tox/docs/README.md)0
-rw-r--r--protocols/Tox/tox/deflibcreator/as.exe (renamed from protocols/Tox/docs/dlltolib/deflibcreator/as.exe)bin792360 -> 792360 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/as64.exe (renamed from protocols/Tox/docs/dlltolib/deflibcreator/as64.exe)bin1510620 -> 1510620 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/deflibcreator.exe (renamed from protocols/Tox/docs/dlltolib/deflibcreator/deflibcreator.exe)bin77824 -> 77824 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/dlltool.exe (renamed from protocols/Tox/docs/dlltolib/deflibcreator/dlltool.exe)bin611153 -> 611153 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/dlltool64.exe (renamed from protocols/Tox/docs/dlltolib/deflibcreator/dlltool64.exe)bin1023386 -> 1023386 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/link.exe (renamed from protocols/Tox/docs/dlltolib/deflibcreator/link.exe)bin733440 -> 733440 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/link.exe.manifest (renamed from protocols/Tox/docs/dlltolib/deflibcreator/link.exe.manifest)0
-rw-r--r--protocols/Tox/tox/deflibcreator/mspdb80.dll (renamed from protocols/Tox/docs/dlltolib/deflibcreator/mspdb80.dll)bin173056 -> 173056 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/mspdb80.dll.2.manifest (renamed from protocols/Tox/docs/dlltolib/deflibcreator/mspdb80.dll.2.manifest)0
-rw-r--r--protocols/Tox/tox/deflibcreator/src/build.cmd (renamed from protocols/Tox/docs/dlltolib/deflibcreator/src/build.cmd)0
-rw-r--r--protocols/Tox/tox/deflibcreator/src/deflib.manifest (renamed from protocols/Tox/docs/dlltolib/deflibcreator/src/deflib.manifest)0
-rw-r--r--protocols/Tox/tox/deflibcreator/src/deflibcreator.cpp (renamed from protocols/Tox/docs/dlltolib/deflibcreator/src/deflibcreator.cpp)0
-rw-r--r--protocols/Tox/tox/deflibcreator/src/dlc.ico (renamed from protocols/Tox/docs/dlltolib/deflibcreator/src/dlc.ico)bin34494 -> 34494 bytes
-rw-r--r--protocols/Tox/tox/deflibcreator/src/resource.rc (renamed from protocols/Tox/docs/dlltolib/deflibcreator/src/resource.rc)0
-rw-r--r--protocols/Tox/tox/dll/x64/libtox.dll (renamed from protocols/Tox/dll/x64/libtox.dll)bin3480662 -> 3480662 bytes
-rw-r--r--protocols/Tox/tox/dll/x86/libtox.dll (renamed from protocols/Tox/dll/x86/libtox.dll)bin2943841 -> 2943841 bytes
-rw-r--r--protocols/Tox/tox/generate_libs.cmd3
-rw-r--r--protocols/Tox/tox/include/tox.h (renamed from protocols/Tox/src/tox/tox.h)0
-rw-r--r--protocols/Tox/tox/include/toxav.h (renamed from protocols/Tox/src/tox/toxav.h)0
-rw-r--r--protocols/Tox/tox/include/toxdns.h (renamed from protocols/Tox/src/tox/toxdns.h)0
-rw-r--r--protocols/Tox/tox/lib/x64/libtox-x64.exp (renamed from protocols/Tox/lib/x64/libtox-x64.exp)bin215115 -> 215115 bytes
-rw-r--r--protocols/Tox/tox/lib/x64/libtox-x64.lib (renamed from protocols/Tox/lib/x64/libtox-x64.lib)bin353750 -> 353750 bytes
-rw-r--r--protocols/Tox/tox/lib/x64/libtox.def (renamed from protocols/Tox/lib/x64/libtox.def)0
-rw-r--r--protocols/Tox/tox/lib/x86/libtox.def (renamed from protocols/Tox/lib/x86/libtox.def)0
-rw-r--r--protocols/Tox/tox/lib/x86/libtox.exp (renamed from protocols/Tox/lib/x86/libtox.exp)bin240874 -> 240874 bytes
-rw-r--r--protocols/Tox/tox/lib/x86/libtox.lib (renamed from protocols/Tox/lib/x86/libtox.lib)bin398560 -> 398560 bytes
55 files changed, 716 insertions, 929 deletions
diff --git a/protocols/Tox/Tox_10.vcxproj b/protocols/Tox/Tox_10.vcxproj
index a7680d8393..6199826078 100644
--- a/protocols/Tox/Tox_10.vcxproj
+++ b/protocols/Tox/Tox_10.vcxproj
@@ -89,7 +89,7 @@
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
- <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin10\lib;lib\x86</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>tox\lib\x86;$(ProfileDir)..\..\bin10\lib</AdditionalLibraryDirectories>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<AdditionalDependencies>ws2_32.lib;libtox.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -99,7 +99,7 @@
<AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
</ResourceCompile>
<PostBuildEvent>
- <Command>xcopy dll\x86\*.dll $(SolutionDir)$(Configuration) /Y</Command>
+ <Command>xcopy tox\dll\x86\*.dll $(SolutionDir)$(Configuration) /Y</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -107,18 +107,18 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>tox\include;..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<StringPooling>false</StringPooling>
<FunctionLevelLinking>true</FunctionLevelLinking>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeader>Create</PrecompiledHeader>
<PrecompiledHeaderFile>common.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
- <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin10\lib;lib\x64</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>tox\lib\x64;$(ProfileDir)..\..\bin10\lib</AdditionalLibraryDirectories>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<AdditionalDependencies>libtox-x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
@@ -128,7 +128,7 @@
<AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
</ResourceCompile>
<PostBuildEvent>
- <Command>xcopy dll\x64\*.dll $(SolutionDir)$(Configuration)64 /Y</Command>
+ <Command>xcopy tox\dll\x64\*.dll $(SolutionDir)$(Configuration)64 /Y</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -197,27 +197,23 @@
<ClInclude Include="src\common.h" />
<ClInclude Include="src\file_transfer.h" />
<ClInclude Include="src\resource.h" />
- <ClInclude Include="src\tox\tox.h" />
- <ClInclude Include="src\tox\toxav.h" />
- <ClInclude Include="src\tox\toxdns.h" />
<ClInclude Include="src\tox_bootstrap.h" />
<ClInclude Include="src\tox_proto.h" />
<ClInclude Include="src\version.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\main.cpp" />
- <ClCompile Include="src\stdafx.cpp">
- <PrecompiledHeader>Create</PrecompiledHeader>
- </ClCompile>
<ClCompile Include="src\tox_account.cpp" />
+ <ClCompile Include="src\tox_accounts.cpp" />
<ClCompile Include="src\tox_events.cpp" />
- <ClCompile Include="src\tox_instances.cpp" />
+ <ClCompile Include="src\tox_messages.cpp" />
<ClCompile Include="src\tox_netlib.cpp" />
<ClCompile Include="src\tox_options.cpp" />
+ <ClCompile Include="src\tox_profile.cpp" />
<ClCompile Include="src\tox_proto.cpp" />
- <ClCompile Include="src\tox_services.cpp" />
+ <ClCompile Include="src\tox_search.cpp" />
<ClCompile Include="src\tox_contacts.cpp" />
- <ClCompile Include="src\tox_transfers.cpp" />
+ <ClCompile Include="src\tox_transfer.cpp" />
<ClCompile Include="src\tox_utils.cpp" />
</ItemGroup>
<ItemGroup>
diff --git a/protocols/Tox/Tox_10.vcxproj.filters b/protocols/Tox/Tox_10.vcxproj.filters
index 91c0db1488..c2541a28e3 100644
--- a/protocols/Tox/Tox_10.vcxproj.filters
+++ b/protocols/Tox/Tox_10.vcxproj.filters
@@ -10,9 +10,6 @@
<Filter Include="Resource Files">
<UniqueIdentifier>{b818611d-200d-4eb8-be7a-f15b396ae26d}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\tox">
- <UniqueIdentifier>{dcda5d79-c0d1-4515-9513-7eda6a003978}</UniqueIdentifier>
- </Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\version.h">
@@ -27,19 +24,10 @@
<ClInclude Include="src\resource.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="src\tox\tox.h">
- <Filter>Header Files\tox</Filter>
- </ClInclude>
- <ClInclude Include="src\tox\toxav.h">
- <Filter>Header Files\tox</Filter>
- </ClInclude>
- <ClInclude Include="src\tox\toxdns.h">
- <Filter>Header Files\tox</Filter>
+ <ClInclude Include="src\file_transfer.h">
+ <Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\tox_bootstrap.h">
- <Filter>Source Files</Filter>
- </ClInclude>
- <ClInclude Include="src\file_transfer.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
@@ -50,18 +38,9 @@
<ClCompile Include="src\main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\tox_instances.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="src\stdafx.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="src\tox_events.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\tox_services.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="src\tox_contacts.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -77,7 +56,19 @@
<ClCompile Include="src\tox_netlib.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\tox_transfers.cpp">
+ <ClCompile Include="src\tox_accounts.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_messages.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_profile.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_search.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_transfer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
diff --git a/protocols/Tox/Tox_10.vcxproj.user b/protocols/Tox/Tox_10.vcxproj.user
new file mode 100644
index 0000000000..695b5c78b9
--- /dev/null
+++ b/protocols/Tox/Tox_10.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project> \ No newline at end of file
diff --git a/protocols/Tox/Tox_12.vcxproj b/protocols/Tox/Tox_12.vcxproj
index cf0bcaea5f..5f189f3b84 100644
--- a/protocols/Tox/Tox_12.vcxproj
+++ b/protocols/Tox/Tox_12.vcxproj
@@ -82,18 +82,18 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>tox\include;..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<StringPooling>false</StringPooling>
<FunctionLevelLinking>true</FunctionLevelLinking>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeaderFile>common.h</PrecompiledHeaderFile>
- <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
- <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin12\lib;lib\x86</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>tox\lib\x86;$(ProfileDir)..\..\bin12\lib</AdditionalLibraryDirectories>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
@@ -104,7 +104,7 @@
<AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
</ResourceCompile>
<PostBuildEvent>
- <Command>xcopy dll\x86\*.dll $(SolutionDir)$(Configuration) /Y</Command>
+ <Command>xcopy tox\dll\x86\*.dll $(SolutionDir)$(Configuration) /Y</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -123,7 +123,7 @@
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
- <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin12\lib;lib\x64</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>tox\lib\x64;$(ProfileDir)..\..\bin12\lib</AdditionalLibraryDirectories>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
<AdditionalDependencies>libtox-x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
@@ -133,7 +133,7 @@
<AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
</ResourceCompile>
<PostBuildEvent>
- <Command>xcopy dll\x64\*.dll $(SolutionDir)$(Configuration)64 /Y</Command>
+ <Command>xcopy tox\dll\x64\*.dll $(SolutionDir)$(Configuration)64 /Y</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -198,29 +198,24 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="src\common.h" />
- <ClInclude Include="src\file_transfer.h" />
<ClInclude Include="src\resource.h" />
- <ClInclude Include="src\tox\tox.h" />
- <ClInclude Include="src\tox\toxav.h" />
- <ClInclude Include="src\tox\toxdns.h" />
<ClInclude Include="src\tox_bootstrap.h" />
<ClInclude Include="src\tox_proto.h" />
<ClInclude Include="src\version.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\main.cpp" />
- <ClCompile Include="src\stdafx.cpp">
- <PrecompiledHeader>Create</PrecompiledHeader>
- </ClCompile>
<ClCompile Include="src\tox_account.cpp" />
<ClCompile Include="src\tox_events.cpp" />
- <ClCompile Include="src\tox_instances.cpp" />
+ <ClCompile Include="src\tox_accounts.cpp" />
+ <ClCompile Include="src\tox_messages.cpp" />
<ClCompile Include="src\tox_netlib.cpp" />
<ClCompile Include="src\tox_options.cpp" />
+ <ClCompile Include="src\tox_profile.cpp" />
<ClCompile Include="src\tox_proto.cpp" />
- <ClCompile Include="src\tox_services.cpp" />
+ <ClCompile Include="src\tox_search.cpp" />
<ClCompile Include="src\tox_contacts.cpp" />
- <ClCompile Include="src\tox_transfers.cpp" />
+ <ClCompile Include="src\tox_transfer.cpp" />
<ClCompile Include="src\tox_utils.cpp" />
</ItemGroup>
<ItemGroup>
diff --git a/protocols/Tox/Tox_12.vcxproj.filters b/protocols/Tox/Tox_12.vcxproj.filters
index 52d4ff6048..cdd0faa973 100644
--- a/protocols/Tox/Tox_12.vcxproj.filters
+++ b/protocols/Tox/Tox_12.vcxproj.filters
@@ -10,9 +10,6 @@
<Filter Include="Resource Files">
<UniqueIdentifier>{b818611d-200d-4eb8-be7a-f15b396ae26d}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\tox">
- <UniqueIdentifier>{dcda5d79-c0d1-4515-9513-7eda6a003978}</UniqueIdentifier>
- </Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\version.h">
@@ -27,21 +24,9 @@
<ClInclude Include="src\resource.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="src\tox\tox.h">
- <Filter>Header Files\tox</Filter>
- </ClInclude>
- <ClInclude Include="src\tox\toxav.h">
- <Filter>Header Files\tox</Filter>
- </ClInclude>
- <ClInclude Include="src\tox\toxdns.h">
- <Filter>Header Files\tox</Filter>
- </ClInclude>
<ClInclude Include="src\tox_bootstrap.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="src\file_transfer.h">
- <Filter>Header Files</Filter>
- </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\tox_proto.cpp">
@@ -50,18 +35,9 @@
<ClCompile Include="src\main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\tox_instances.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="src\stdafx.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="src\tox_events.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\tox_services.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="src\tox_contacts.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -77,7 +53,19 @@
<ClCompile Include="src\tox_netlib.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\tox_transfers.cpp">
+ <ClCompile Include="src\tox_profile.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_transfer.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_messages.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_search.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\tox_accounts.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
diff --git a/protocols/Tox/docs/dlltolib/start.cmd b/protocols/Tox/docs/dlltolib/start.cmd
deleted file mode 100644
index 913dca85c7..0000000000
--- a/protocols/Tox/docs/dlltolib/start.cmd
+++ /dev/null
@@ -1,3 +0,0 @@
-deflibcreator\deflibcreator ..\..\dll\x86\libtox.dll ..\..\lib\x86\
-
-deflibcreator\deflibcreator ..\..\dll\x64\libtox.dll ..\..\lib\x64\
diff --git a/protocols/Tox/res/resource.aps b/protocols/Tox/res/resource.aps
new file mode 100644
index 0000000000..1bf17c7ce1
--- /dev/null
+++ b/protocols/Tox/res/resource.aps
Binary files differ
diff --git a/protocols/Tox/src/common.h b/protocols/Tox/src/common.h
index bb417850ca..e7fd4ce733 100644
--- a/protocols/Tox/src/common.h
+++ b/protocols/Tox/src/common.h
@@ -29,12 +29,11 @@
#include <m_addcontact.h>
#include <m_message.h>
-#include "tox\tox.h"
+#include <tox.h>
#include "version.h"
#include "resource.h"
#include "tox_proto.h"
-#include "file_transfer.h"
extern HINSTANCE g_hInstance;
diff --git a/protocols/Tox/src/file_transfer.h b/protocols/Tox/src/file_transfer.h
deleted file mode 100644
index 6f30b90241..0000000000
--- a/protocols/Tox/src/file_transfer.h
+++ /dev/null
@@ -1,197 +0,0 @@
-#ifndef _FILE_TRANSFER_H_
-#define _FILE_TRANSFER_H_
-
-class CFileTransfer;
-
-class CFile
-{
-private:
- int number;
- char *name;
- const TCHAR *path;
- size_t size;
-
- const CFileTransfer *transfer;
-
-public:
- CFile(const CFileTransfer *fileTransfer, const TCHAR *filePath, size_t fileSize) :
- number(-1)
- {
- transfer = fileTransfer;
-
- path = filePath;
- name = strrchr(ptrA(mir_utf8encodeT(path)), '\\');
- size = fileSize;
- }
-
- CFile(int number) : number(number), name(NULL) { }
-
- ~CFile()
- {
- number = -1;
- if (name != NULL)
- {
- mir_free(name);
- }
- }
-
- const CFileTransfer *GetTransfer() const
- {
- return this->transfer;
- }
-
- void SetNumber(int fileNumber)
- {
- number = fileNumber;
- }
-
- const TCHAR* GetPath() const
- {
- return path;
- }
-
- const char* GetName() const
- {
- return name;
- }
-
- size_t GetSize() const
- {
- return size;
- }
-};
-
-class CFileTransfer
-{
-private:
- ULONG number;
-
- HANDLE hWait;
- LIST<CFile> files;
- PROTOFILETRANSFERSTATUS pfts;
- const PROTO_INTERFACE *proto;
-
-public:
- CFileTransfer(const PROTO_INTERFACE *proto, MCONTACT hContact, ULONG transferNumber, DWORD flags) :
- files(1, NumericKeySortT)
- {
- this->proto = proto;
-
- pfts.cbSize = sizeof(pfts);
- pfts.flags = PFTS_TCHAR | flags;
- pfts.hContact = hContact;
- pfts.currentFileNumber = 0;
- pfts.currentFileProgress = 0;
- pfts.currentFileSize = 0;
- pfts.totalBytes = 0;
- pfts.totalFiles = 0;
- pfts.totalProgress = 0;
- pfts.pszFiles = NULL;
- pfts.tszWorkingDir = NULL;
- pfts.tszCurrentFile = NULL;
-
- number = transferNumber;
- }
-
- ~CFileTransfer()
- {
- if (pfts.tszWorkingDir)
- mir_free(pfts.tszWorkingDir);
- if (pfts.ptszFiles)
- {
- for (int i = 0; pfts.ptszFiles[i]; i++)
- {
- if (pfts.ptszFiles[i]) mir_free(pfts.ptszFiles[i]);
- }
- mir_free(pfts.ptszFiles);
- }
- }
-
- void ProcessTransferedFiles(TCHAR** ppszFiles)
- {
- for (pfts.totalFiles = 0; ppszFiles[pfts.totalFiles]; pfts.totalFiles++);
- pfts.ptszFiles = (TCHAR**)mir_alloc(sizeof(TCHAR*)*(pfts.totalFiles + 1));
- pfts.ptszFiles[pfts.totalFiles] = NULL;
- for (int i = 0; ppszFiles[i]; i++)
- {
- if (!pfts.tszWorkingDir)
- {
- wchar_t *path = ppszFiles[i];
- int length = wcsrchr(path, '\\') - path;
- pfts.tszWorkingDir = (TCHAR*)mir_alloc(sizeof(TCHAR)*(length + 1));
- lstrcpyn(pfts.tszWorkingDir, ppszFiles[i], length + 1);
- pfts.tszWorkingDir[length] = '\0';
- }
-
- pfts.ptszFiles[i] = mir_tstrdup(ppszFiles[i]);
-
- size_t fileSize = 0;
- FILE *file = _tfopen(ppszFiles[i], _T("rb"));
- if (file != NULL)
- {
- fseek(file, 0, SEEK_END);
- pfts.totalBytes += fileSize = ftell(file);
- fseek(file, 0, SEEK_SET);
- fclose(file);
- }
-
- files.insert(new CFile(this, ppszFiles[i], fileSize));
- }
- }
-
- const PROTO_INTERFACE *GetProtoInstance() const
- {
- return proto;
- }
-
- ULONG GetTransferNumber() const
- {
- return number;
- }
-
- MCONTACT GetContactHandle() const
- {
- return pfts.hContact;
- }
-
- int GetFileCount() const
- {
- return pfts.totalFiles;
- }
-
- CFile *GetFileAt(int idx) const
- {
- return files[idx];
- }
-
- CFile *GetFileByNumber(int number) const
- {
- CFile *search = new CFile(number);
- CFile *file = files.find(search);
- delete search;
-
- return file;
- }
-
- bool HasFile(int number) const
- {
- const CFile *file = GetFileByNumber(number);
-
- return file != NULL;
- }
-
- void Wait()
- {
- WaitForSingleObject(hWait, INFINITE);
- }
-};
-
-class CFileSendTransfer : public CFileTransfer
-{
-public:
- CFileSendTransfer(MCONTACT hContact, ULONG hProcess) : CFileTransfer(NULL, hContact, hProcess, PFTS_SENDING)
- {
- }
-};
-
-#endif //_FILE_TRANSFER_H_ \ No newline at end of file
diff --git a/protocols/Tox/src/main.cpp b/protocols/Tox/src/main.cpp
index f9322d7f3e..dcf36ddbb6 100644
--- a/protocols/Tox/src/main.cpp
+++ b/protocols/Tox/src/main.cpp
@@ -39,8 +39,8 @@ extern "C" int __declspec(dllexport) Load(void)
PROTOCOLDESCRIPTOR pd = { sizeof(pd) };
pd.szName = "TOX";
pd.type = PROTOTYPE_PROTOCOL;
- pd.fnInit = (pfnInitProto)CToxProto::InitProtoInstance;
- pd.fnUninit = (pfnUninitProto)CToxProto::UninitProtoInstance;
+ pd.fnInit = (pfnInitProto)CToxProto::InitAccount;
+ pd.fnUninit = (pfnUninitProto)CToxProto::UninitAccount;
CallService(MS_PROTO_REGISTERMODULE, 0, (LPARAM)&pd);
return 0;
diff --git a/protocols/Tox/src/stdafx.cpp b/protocols/Tox/src/stdafx.cpp
deleted file mode 100644
index 7d92b0fd29..0000000000
--- a/protocols/Tox/src/stdafx.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Copyright (c) 2013-14 Miranda NG project (http://miranda-ng.org)
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation version 2
-of the License.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "common.h"
diff --git a/protocols/Tox/src/tox_account.cpp b/protocols/Tox/src/tox_account.cpp
index 886bf70f7b..3648bb4dbf 100644
--- a/protocols/Tox/src/tox_account.cpp
+++ b/protocols/Tox/src/tox_account.cpp
@@ -1,16 +1,33 @@
#include "common.h"
#include "tox_bootstrap.h"
+bool CToxProto::IsOnline()
+{
+ return isConnected && m_iStatus > ID_STATUS_OFFLINE;
+}
+
+int CToxProto::OnAccountLoaded(WPARAM, LPARAM)
+{
+ HookProtoEvent(ME_OPT_INITIALISE, &CToxProto::OnOptionsInit);
+ HookProtoEvent(ME_PROTO_ACCLISTCHANGED, &CToxProto::OnAccountListChanged);
+ HookProtoEvent(ME_DB_CONTACT_SETTINGCHANGED, &CToxProto::OnSettingsChanged);
+ HookProtoEvent(ME_MSG_PRECREATEEVENT, &CToxProto::OnPreCreateMessage);
+
+ InitNetlib();
+
+ return 0;
+}
+
void CToxProto::InitToxCore()
{
Tox_Options options = { 0 };
options.udp_disabled = getByte("DisableUDP", 0);
options.ipv6enabled = !getByte("DisableIPv6", 0);
- if (hNetlibUser)
+ if (hNetlib)
{
NETLIBUSERSETTINGS nlus = { sizeof(NETLIBUSERSETTINGS) };
- CallService(MS_NETLIB_GETUSERSETTINGS, (WPARAM)hNetlibUser, (LPARAM)&nlus);
+ CallService(MS_NETLIB_GETUSERSETTINGS, (WPARAM)hNetlib, (LPARAM)&nlus);
if (nlus.useProxy)
{
@@ -58,11 +75,6 @@ void CToxProto::UninitToxCore()
tox_kill(tox);
}
-bool CToxProto::IsOnline()
-{
- return isConnected && m_iStatus > ID_STATUS_OFFLINE;
-}
-
void CToxProto::DoBootstrap()
{
static int j = 0;
@@ -77,13 +89,10 @@ void CToxProto::DoBootstrap()
void CToxProto::DoTox()
{
- uint32_t interval = 50;
- {
- mir_cs(tox_lock);
+ mir_cslock((CRITICAL_SECTION&)toxLock);
- tox_do(tox);
- interval = tox_do_interval(tox);
- }
+ tox_do(tox);
+ uint32_t interval = tox_do_interval(tox);
Sleep(interval);
}
@@ -105,7 +114,7 @@ void CToxProto::PollingThread(void*)
isConnected = true;
debugLogA("CToxProto::PollingThread: successfuly connected to DHT");
- LoadContactList();
+ LoadFriendList();
debugLogA("CToxProto::PollingThread: changing status from %i to %i", ID_STATUS_CONNECTING, m_iDesiredStatus);
m_iStatus = m_iDesiredStatus;
@@ -116,6 +125,14 @@ void CToxProto::PollingThread(void*)
DoBootstrap();
}
}
+ else
+ {
+ if (!tox_isconnected(tox))
+ {
+ debugLogA("CToxProto::PollingThread: disconnected from DHT");
+ SetStatus(ID_STATUS_OFFLINE);
+ }
+ }
}
isConnected = false;
diff --git a/protocols/Tox/src/tox_accounts.cpp b/protocols/Tox/src/tox_accounts.cpp
new file mode 100644
index 0000000000..147c328656
--- /dev/null
+++ b/protocols/Tox/src/tox_accounts.cpp
@@ -0,0 +1,43 @@
+#include "common.h"
+
+LIST<CToxProto> CToxProto::accounts(1, CToxProto::CompareAccounts);
+
+int CToxProto::CompareAccounts(const CToxProto *p1, const CToxProto *p2)
+{
+ return _tcscmp(p1->m_tszUserName, p2->m_tszUserName);
+}
+
+CToxProto* CToxProto::InitAccount(const char* protoName, const wchar_t* userName)
+{
+ CToxProto *ppro = new CToxProto(protoName, userName);
+ accounts.insert(ppro);
+
+ return ppro;
+}
+
+int CToxProto::UninitAccount(CToxProto* ppro)
+{
+ accounts.remove(ppro);
+ delete ppro;
+
+ return 0;
+}
+
+int CToxProto::OnAccountListChanged(WPARAM wParam, LPARAM lParam)
+{
+ PROTOACCOUNT* account = (PROTOACCOUNT*)lParam;
+
+ if (wParam == PRAC_ADDED && !strcmp(account->szModuleName, m_szModuleName))
+ {
+ UninitToxCore();
+ DialogBoxParam(
+ g_hInstance,
+ MAKEINTRESOURCE(IDD_PROFILE_MANAGER),
+ account->hwndAccMgrUI,
+ CToxProto::ToxProfileManagerProc,
+ (LPARAM)this);
+ InitToxCore();
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_contacts.cpp b/protocols/Tox/src/tox_contacts.cpp
index e9e3622da9..b696c6b70c 100644
--- a/protocols/Tox/src/tox_contacts.cpp
+++ b/protocols/Tox/src/tox_contacts.cpp
@@ -46,18 +46,9 @@ MCONTACT CToxProto::GetContactFromAuthEvent(HANDLE hEvent)
return DbGetAuthEventContact(&dbei);
}
-
-bool CToxProto::IsProtoContact(MCONTACT hContact)
-{
- return lstrcmpiA(GetContactProto(hContact), m_szModuleName) == 0;
-}
-
MCONTACT CToxProto::FindContact(const std::string &id)
{
MCONTACT hContact = NULL;
-
- //mir_cs(contact_search_lock);
-
for (hContact = db_find_first(m_szModuleName); hContact; hContact = db_find_next(hContact, m_szModuleName))
{
std::string contactId = ToxAddressToId(getStringA(hContact, TOX_SETTINGS_ID));
@@ -66,7 +57,6 @@ MCONTACT CToxProto::FindContact(const std::string &id)
break;
}
}
-
return hContact;
}
@@ -105,7 +95,7 @@ MCONTACT CToxProto::AddContact(const std::string &id, bool isTemporary)
return hContact;
}
-void CToxProto::LoadContactList()
+void CToxProto::LoadFriendList()
{
uint32_t count = tox_count_friendlist(tox);
if (count > 0)
@@ -142,58 +132,100 @@ void CToxProto::LoadContactList()
}
}
-void CToxProto::SearchByIdAsync(void*)
+int CToxProto::OnContactDeleted(MCONTACT hContact, LPARAM lParam)
{
- ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_FAILED, (HWND)1, 0);
+ if (hContact)
+ {
+ std::string toxId(getStringA(hContact, TOX_SETTINGS_ID));
+ std::vector<uint8_t> clientId = HexStringToData(toxId);
+
+ uint32_t number = tox_get_friend_number(tox, clientId.data());
+ if (tox_del_friend(tox, number) == 0)
+ {
+ SaveToxData();
+
+ return 0;
+ }
+ }
+
+ return 1;
}
-void CToxProto::SearchByNameAsync(void* arg)
+void CToxProto::OnFriendRequest(Tox *tox, const uint8_t *address, const uint8_t *message, const uint16_t messageSize, void *arg)
{
- NETLIBHTTPREQUEST request = { sizeof(NETLIBHTTPREQUEST) };
- request.requestType = REQUEST_POST;
- request.szUrl = "https://toxme.se/api";
- request.flags = NLHRF_HTTP11 | NLHRF_SSL | NLHRF_NODUMP;
+ CToxProto *proto = (CToxProto*)arg;
- request.headers = (NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)* 2);
- request.headers[0].szName = "Content-Type";
- request.headers[0].szValue = "text/plain; charset=utf-8";
- request.headersCount = 1;
+ // trim tox address to tox id
+ std::vector<uint8_t> clientId(address, address + TOX_CLIENT_ID_SIZE);
+ std::string id = proto->DataToHexString(clientId);
- std::string query = "{\"action\":3,\"name\":\"";
- query += (char*)arg;
- query += "\"}";
+ MCONTACT hContact = proto->AddContact(id, true);
- request.dataLength = query.length();
- request.pData = (char*)query.c_str();
+ PROTORECVEVENT pre = { 0 };
+ pre.flags = PREF_UTF;
+ pre.timestamp = time(NULL);
+ pre.lParam = (DWORD)(sizeof(DWORD)* 2 + id.length() + messageSize + 5);
- NETLIBHTTPREQUEST* response = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&request);
+ /*blob is: 0(DWORD), hContact(DWORD), nick(ASCIIZ), firstName(ASCIIZ), lastName(ASCIIZ), sid(ASCIIZ), reason(ASCIIZ)*/
+ PBYTE pBlob, pCurBlob;
+ pCurBlob = pBlob = (PBYTE)mir_calloc(pre.lParam);
- if (response)
- {
- std::smatch match;
- std::regex regex("\"public_key\": \"(.+?)\"");
+ *((PDWORD)pCurBlob) = 0;
+ pCurBlob += sizeof(DWORD);
+ *((PDWORD)pCurBlob) = (DWORD)hContact;
+ pCurBlob += sizeof(DWORD);
+ pCurBlob += 3;
+ strcpy((char *)pCurBlob, id.c_str());
+ pCurBlob += id.length() + 1;
+ strcpy((char *)pCurBlob, (char*)message);
- const std::string content = response->pData;
+ ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre);
+}
- if (std::regex_search(content, match, regex))
- {
- std::string toxId = match[1];
+void CToxProto::OnFriendNameChange(Tox *tox, const int number, const uint8_t *name, const uint16_t nameSize, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
- PROTOSEARCHRESULT psr = { sizeof(PROTOSEARCHRESULT) };
- psr.flags = PSR_TCHAR;
- psr.id = mir_a2t(toxId.c_str());
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ proto->setString(hContact, "Nick", (char*)name);
+ }
+}
- ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)1, (LPARAM)&psr);
- ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
+void CToxProto::OnStatusMessageChanged(Tox *tox, const int number, const uint8_t* message, const uint16_t messageSize, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
- return;
- }
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ ptrW statusMessage(mir_utf8decodeW((char*)message));
+ db_set_ws(hContact, "CList", "StatusMsg", statusMessage);
}
+}
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
- mir_free(request.headers);
+void CToxProto::OnUserStatusChanged(Tox *tox, int32_t number, uint8_t usertatus, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
- ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_FAILED, (HANDLE)1, 0);
- mir_free(arg);
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ TOX_USERSTATUS userstatus = (TOX_USERSTATUS)usertatus;
+ int status = proto->ToxToMirandaStatus(userstatus);
+ proto->SetContactStatus(hContact, status);
+ }
+}
+
+void CToxProto::OnConnectionStatusChanged(Tox *tox, const int number, const uint8_t status, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ int newStatus = status ? ID_STATUS_ONLINE : ID_STATUS_OFFLINE;
+ proto->SetContactStatus(hContact, newStatus);
+ }
} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_events.cpp b/protocols/Tox/src/tox_events.cpp
index 1a27e498ef..8a803d8144 100644
--- a/protocols/Tox/src/tox_events.cpp
+++ b/protocols/Tox/src/tox_events.cpp
@@ -1,17 +1,5 @@
#include "common.h"
-int CToxProto::OnAccountLoaded(WPARAM, LPARAM)
-{
- HookProtoEvent(ME_OPT_INITIALISE, &CToxProto::OnOptionsInit);
- HookProtoEvent(ME_PROTO_ACCLISTCHANGED, &CToxProto::OnAccountListChanged);
- HookProtoEvent(ME_DB_CONTACT_SETTINGCHANGED, &CToxProto::OnSettingsChanged);
- HookProtoEvent(ME_MSG_PRECREATEEVENT, &CToxProto::OnPreCreateMessage);
-
- InitNetlib();
-
- return 0;
-}
-
int CToxProto::OnPreShutdown(WPARAM, LPARAM)
{
UninitNetlib();
@@ -29,25 +17,6 @@ INT_PTR CToxProto::OnAccountManagerInit(WPARAM, LPARAM lParam)
(LPARAM)this);
}
-int CToxProto::OnAccountListChanged(WPARAM wParam, LPARAM lParam)
-{
- PROTOACCOUNT* account = (PROTOACCOUNT*)lParam;
-
- if (wParam == PRAC_ADDED && !strcmp(account->szModuleName, m_szModuleName))
- {
- UninitToxCore();
- DialogBoxParam(
- g_hInstance,
- MAKEINTRESOURCE(IDD_PROFILE_MANAGER),
- account->hwndAccMgrUI,
- CToxProto::ToxProfileManagerProc,
- (LPARAM)this);
- InitToxCore();
- }
-
- return 0;
-}
-
int CToxProto::OnOptionsInit(WPARAM wParam, LPARAM)
{
char *title = mir_t2a(m_tszUserName);
@@ -69,25 +38,6 @@ int CToxProto::OnOptionsInit(WPARAM wParam, LPARAM)
return 0;
}
-int CToxProto::OnContactDeleted(MCONTACT hContact, LPARAM lParam)
-{
- if (hContact)
- {
- std::string toxId(getStringA(hContact, TOX_SETTINGS_ID));
- std::vector<uint8_t> clientId = HexStringToData(toxId);
-
- uint32_t number = tox_get_friend_number(tox, clientId.data());
- if (tox_del_friend(tox, number) == 0)
- {
- SaveToxData();
-
- return 0;
- }
- }
-
- return 1;
-}
-
int CToxProto::OnSettingsChanged(WPARAM hContact, LPARAM lParam)
{
DBCONTACTWRITESETTING* dbcws = (DBCONTACTWRITESETTING*)lParam;
@@ -111,228 +61,4 @@ int CToxProto::OnSettingsChanged(WPARAM hContact, LPARAM lParam)
}
return 0;
-}
-
-int CToxProto::OnPreCreateMessage(WPARAM wParam, LPARAM lParam)
-{
- MessageWindowEvent *evt = (MessageWindowEvent *)lParam;
- if (strcmp(GetContactProto(evt->hContact), m_szModuleName))
- {
- return 0;
- }
-
- char *message = (char*)evt->dbei->pBlob;
- if (strncmp(message, "/me ", 4) == 0)
- {
- BYTE *action = (BYTE*)mir_alloc(sizeof(BYTE)* (evt->dbei->cbBlob - 4));
- memcpy(action, (char*)&evt->dbei->pBlob[4], evt->dbei->cbBlob - 4);
- mir_free(evt->dbei->pBlob);
- evt->dbei->pBlob = action;
- evt->dbei->cbBlob -= 4;
-
- evt->dbei->eventType = TOX_DB_EVENT_TYPE_ACTION;
- }
-
- return 1;
-}
-
-void CToxProto::OnFriendRequest(Tox *tox, const uint8_t *address, const uint8_t *message, const uint16_t messageSize, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- // trim tox address to tox id
- std::vector<uint8_t> clientId(address, address + TOX_CLIENT_ID_SIZE);
- std::string id = proto->DataToHexString(clientId);
-
- proto->RaiseAuthRequestEvent(time(NULL), id.c_str(), (char*)message);
-
- proto->SaveToxData();
-}
-
-void CToxProto::OnFriendMessage(Tox *tox, const int number, const uint8_t *message, const uint16_t messageSize, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- PROTORECVEVENT recv = { 0 };
- recv.flags = PREF_UTF;
- recv.timestamp = time(NULL);
- recv.szMessage = (char*)message;
-
- ProtoChainRecvMsg(hContact, &recv);
- }
-}
-
-void CToxProto::OnFriendAction(Tox *tox, const int number, const uint8_t *action, const uint16_t actionSize, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- proto->AddDbEvent(
- hContact,
- TOX_DB_EVENT_TYPE_ACTION,
- time(NULL),
- DBEF_UTF,
- actionSize,
- (BYTE*)action);
- }
-}
-
-void CToxProto::OnTypingChanged(Tox *tox, const int number, uint8_t isTyping, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- CallService(MS_PROTO_CONTACTISTYPING, hContact, (LPARAM)isTyping);
- }
-}
-
-void CToxProto::OnFriendNameChange(Tox *tox, const int number, const uint8_t *name, const uint16_t nameSize, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- proto->setString(hContact, "Nick", (char*)name);
- }
-}
-
-void CToxProto::OnStatusMessageChanged(Tox *tox, const int number, const uint8_t* message, const uint16_t messageSize, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- ptrW statusMessage(mir_utf8decodeW((char*)message));
- db_set_ws(hContact, "CList", "StatusMsg", statusMessage);
- }
-}
-
-void CToxProto::OnUserStatusChanged(Tox *tox, int32_t number, uint8_t usertatus, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- TOX_USERSTATUS userstatus = (TOX_USERSTATUS)usertatus;
- int status = proto->ToxToMirandaStatus(userstatus);
- proto->SetContactStatus(hContact, status);
- }
-}
-
-void CToxProto::OnConnectionStatusChanged(Tox *tox, const int number, const uint8_t status, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- int newStatus = status ? ID_STATUS_ONLINE : ID_STATUS_OFFLINE;
- proto->SetContactStatus(hContact, newStatus);
- }
-}
-
-void CToxProto::OnReadReceipt(Tox *tox, int32_t number, uint32_t receipt, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- proto->ProtoBroadcastAck(
- hContact,
- ACKTYPE_MESSAGE,
- ACKRESULT_SUCCESS,
- (HANDLE)receipt, 0);
- }
-}
-
-void CToxProto::OnFriendFile(Tox *tox, int32_t number, uint8_t fileNumber, uint64_t fileSize, const uint8_t *fileName, uint16_t length, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- FileTransferParam *transfer = new FileTransferParam(fileNumber, ptrT(mir_utf8decodeT((const char*)fileName)), fileSize);
- transfer->pfts.hContact = hContact;
- transfer->pfts.flags |= PFTS_RECEIVING;
- proto->transfers[fileNumber] = transfer;
-
- PROTORECVFILET pre = { 0 };
- pre.flags = PREF_TCHAR;
- pre.fileCount = 1;
- pre.timestamp = time(NULL);
- pre.tszDescription = _T("");
- pre.ptszFiles = (TCHAR**)mir_alloc(sizeof(TCHAR*)* 2);
- pre.ptszFiles[0] = mir_utf8decodeT((char*)fileName);
- pre.ptszFiles[1] = NULL;
- pre.lParam = (LPARAM)fileNumber;
- ProtoChainRecvFile(hContact, &pre);
- }
-}
-
-void CToxProto::OnFileData(Tox *tox, int32_t number, uint8_t fileNumber, const uint8_t *data, uint16_t size, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- FileTransferParam *transfer = proto->transfers.at(fileNumber);
-
- TCHAR filePath[MAX_PATH];
- mir_sntprintf(filePath, SIZEOF(filePath), _T("%s%s"), transfer->pfts.tszWorkingDir, transfer->pfts.tszCurrentFile);
-
- FILE *hFile = NULL;
- if (transfer->pfts.currentFileProgress == 0)
- {
- hFile = _tfopen(filePath, _T("wb"));
- proto->ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)fileNumber, 0);
- }
- else
- {
- hFile = _tfopen(filePath, _T("ab"));
- }
- if (hFile != NULL)
- {
- if (fwrite(data, sizeof(uint8_t), size, hFile) == size)
- {
- transfer->pfts.totalProgress = transfer->pfts.currentFileProgress += size;
- proto->ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_DATA, (HANDLE)fileNumber, (LPARAM)&transfer->pfts);
- }
- fclose(hFile);
- }
- }
-}
-
-void CToxProto::OnFileRequest(Tox *tox, int32_t number, uint8_t isSend, uint8_t fileNumber, uint8_t type, const uint8_t *data, uint16_t length, void *arg)
-{
- CToxProto *proto = (CToxProto*)arg;
-
- MCONTACT hContact = proto->FindContact(number);
- if (hContact)
- {
- FileTransferParam *transfer = proto->transfers.at(fileNumber);
-
- switch (type)
- {
- case TOX_FILECONTROL_ACCEPT:
- break;
-
- case TOX_FILECONTROL_FINISHED:
- tox_file_send_control(proto->tox, number, 1, fileNumber, TOX_FILECONTROL_FINISHED, NULL, 0);
- proto->ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, (HANDLE)fileNumber, 0);
- break;
- }
- }
} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_instances.cpp b/protocols/Tox/src/tox_instances.cpp
deleted file mode 100644
index 414cd7b767..0000000000
--- a/protocols/Tox/src/tox_instances.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "common.h"
-
-LIST<CToxProto> CToxProto::instanceList(1, CToxProto::CompareProtos);
-
-int CToxProto::CompareProtos(const CToxProto *p1, const CToxProto *p2)
-{
- return wcscmp(p1->m_tszUserName, p2->m_tszUserName);
-}
-
-CToxProto* CToxProto::InitProtoInstance(const char* protoName, const wchar_t* userName)
-{
- CToxProto *ppro = new CToxProto(protoName, userName);
- instanceList.insert(ppro);
-
- return ppro;
-}
-
-int CToxProto::UninitProtoInstance(CToxProto* ppro)
-{
- instanceList.remove(ppro);
-
- delete ppro;
-
- return 0;
-}
-
-void CToxProto::UninitInstances()
-{
- instanceList.destroy();
-}
-
-CToxProto* CToxProto::GetContactInstance(MCONTACT hContact)
-{
- char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
-
- if (proto == NULL)
- return NULL;
-
- for (int i = 0; i < instanceList.getCount(); i++)
- if ( !::strcmp(proto, instanceList[i]->m_szModuleName))
- return instanceList[i];
-
- return NULL;
-} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_messages.cpp b/protocols/Tox/src/tox_messages.cpp
new file mode 100644
index 0000000000..0c57fbf68d
--- /dev/null
+++ b/protocols/Tox/src/tox_messages.cpp
@@ -0,0 +1,83 @@
+#include "common.h"
+
+void CToxProto::OnFriendMessage(Tox *tox, const int number, const uint8_t *message, const uint16_t messageSize, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ PROTORECVEVENT recv = { 0 };
+ recv.flags = PREF_UTF;
+ recv.timestamp = time(NULL);
+ recv.szMessage = (char*)message;
+
+ ProtoChainRecvMsg(hContact, &recv);
+ }
+}
+
+void CToxProto::OnFriendAction(Tox *tox, const int number, const uint8_t *action, const uint16_t actionSize, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ proto->AddDbEvent(
+ hContact,
+ TOX_DB_EVENT_TYPE_ACTION,
+ time(NULL),
+ DBEF_UTF,
+ actionSize,
+ (BYTE*)action);
+ }
+}
+
+void CToxProto::OnTypingChanged(Tox *tox, const int number, uint8_t isTyping, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ CallService(MS_PROTO_CONTACTISTYPING, hContact, (LPARAM)isTyping);
+ }
+}
+
+void CToxProto::OnReadReceipt(Tox *tox, int32_t number, uint32_t receipt, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ proto->ProtoBroadcastAck(
+ hContact,
+ ACKTYPE_MESSAGE,
+ ACKRESULT_SUCCESS,
+ (HANDLE)receipt, 0);
+ }
+}
+
+int CToxProto::OnPreCreateMessage(WPARAM wParam, LPARAM lParam)
+{
+ MessageWindowEvent *evt = (MessageWindowEvent *)lParam;
+ if (strcmp(GetContactProto(evt->hContact), m_szModuleName))
+ {
+ return 0;
+ }
+
+ char *message = (char*)evt->dbei->pBlob;
+ if (strncmp(message, "/me ", 4) == 0)
+ {
+ BYTE *action = (BYTE*)mir_alloc(sizeof(BYTE)* (evt->dbei->cbBlob - 4));
+ memcpy(action, (char*)&evt->dbei->pBlob[4], evt->dbei->cbBlob - 4);
+ mir_free(evt->dbei->pBlob);
+ evt->dbei->pBlob = action;
+ evt->dbei->cbBlob -= 4;
+
+ evt->dbei->eventType = TOX_DB_EVENT_TYPE_ACTION;
+ }
+
+ return 1;
+} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_netlib.cpp b/protocols/Tox/src/tox_netlib.cpp
index a2fea7a615..7ebddc66b2 100644
--- a/protocols/Tox/src/tox_netlib.cpp
+++ b/protocols/Tox/src/tox_netlib.cpp
@@ -10,13 +10,13 @@ void CToxProto::InitNetlib()
nlu.flags = NUF_OUTGOING | NUF_INCOMING | NUF_HTTPCONNS | NUF_UNICODE;
nlu.ptszDescriptiveName = name;
nlu.szSettingsModule = m_szModuleName;
- hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu);
+ hNetlib = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu);
debugLogA("Setting protocol/module name to '%s'", m_szModuleName);
}
void CToxProto::UninitNetlib()
{
- Netlib_CloseHandle(hNetlibUser);
- hNetlibUser = NULL;
+ Netlib_CloseHandle(hNetlib);
+ hNetlib = NULL;
}
diff --git a/protocols/Tox/src/tox_options.cpp b/protocols/Tox/src/tox_options.cpp
index 2c920f95b2..7df550d585 100644
--- a/protocols/Tox/src/tox_options.cpp
+++ b/protocols/Tox/src/tox_options.cpp
@@ -1,27 +1,5 @@
#include "common.h"
-INT_PTR CToxProto::SearchDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- CToxProto *proto = (CToxProto*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
-
- switch (uMsg)
- {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwnd);
- {
- proto = (CToxProto*)lParam;
- SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
-
- //ShowWindow(GetDlgItem(GetParent(hwnd), 1408/*IDC_BYCUSTOM*/), SW_HIDE);
- //ShowWindow(GetDlgItem(GetParent(hwnd), 1402/*IDC_ADVANCEDGROUP*/), SW_HIDE);
- SetDlgItemText(GetParent(hwnd), 1408/*IDC_BYCUSTOM*/, TranslateT("Query"));
- }
- return TRUE;
- }
-
- return FALSE;
-}
-
INT_PTR CToxProto::MainOptionsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
CToxProto *proto = (CToxProto*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
@@ -122,82 +100,4 @@ INT_PTR CToxProto::MainOptionsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
}
return FALSE;
-}
-
-INT_PTR CToxProto::ToxProfileManagerProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- CToxProto *proto = (CToxProto*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
- TCHAR *profilePath = (TCHAR*)GetWindowLongPtr(hwnd, DWLP_USER);
-
- switch (uMsg)
- {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwnd);
- {
- proto = (CToxProto*)lParam;
- SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
-
- profilePath = (TCHAR*)mir_calloc(sizeof(TCHAR)* MAX_PATH);
- SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)profilePath);
-
- CheckDlgButton(hwnd, IDC_CREATE_NEW, TRUE);
- }
- return TRUE;
-
- case WM_CLOSE:
- EndDialog(hwnd, 0);
- break;
-
- case WM_DESTROY:
- mir_free(profilePath);
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_USE_EXISTING:
- EnableWindow(GetDlgItem(hwnd, IDC_PROFILE_PATH), IsDlgButtonChecked(hwnd, IDC_USE_EXISTING));
- EnableWindow(GetDlgItem(hwnd, IDC_BROWSE_PROFILE), IsDlgButtonChecked(hwnd, IDC_USE_EXISTING));
- break;
-
- case IDC_BROWSE_PROFILE:
- {
- TCHAR filter[MAX_PATH] = { 0 };
- mir_sntprintf(filter, MAX_PATH, _T("%s\0*.*"), TranslateT("All files (*.*)"));
-
- OPENFILENAME ofn = { sizeof(ofn) };
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = filter;
- ofn.nFilterIndex = 1;
- ofn.lpstrFile = profilePath;
- ofn.lpstrTitle = TranslateT("Select tox profile");
- ofn.nMaxFile = MAX_PATH;
- ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER;
-
- if (GetOpenFileName(&ofn) && profilePath)
- {
- SetDlgItemText(hwnd, IDC_PROFILE_PATH, profilePath);
- }
- }
- break;
-
- case IDOK:
- {
- if (IsDlgButtonChecked(hwnd, IDC_USE_EXISTING))
- {
- if (profilePath != NULL)
- {
- std::tstring toxProfilePath = proto->GetToxProfilePath();
- CopyFile(profilePath, toxProfilePath.c_str(), FALSE);
- }
- }
- EndDialog(hwnd, 1);
- }
- break;
-
- }
- break;
- }
-
- return FALSE;
} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_profile.cpp b/protocols/Tox/src/tox_profile.cpp
new file mode 100644
index 0000000000..145b839f0c
--- /dev/null
+++ b/protocols/Tox/src/tox_profile.cpp
@@ -0,0 +1,79 @@
+#include "common.h"
+
+INT_PTR CToxProto::ToxProfileManagerProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ CToxProto *proto = (CToxProto*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ TCHAR *profilePath = (TCHAR*)GetWindowLongPtr(hwnd, DWLP_USER);
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwnd);
+ {
+ proto = (CToxProto*)lParam;
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
+
+ profilePath = (TCHAR*)mir_calloc(sizeof(TCHAR)* MAX_PATH);
+ SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)profilePath);
+
+ CheckDlgButton(hwnd, IDC_CREATE_NEW, TRUE);
+ }
+ return TRUE;
+
+ case WM_CLOSE:
+ EndDialog(hwnd, 0);
+ break;
+
+ case WM_DESTROY:
+ mir_free(profilePath);
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_USE_EXISTING:
+ EnableWindow(GetDlgItem(hwnd, IDC_PROFILE_PATH), IsDlgButtonChecked(hwnd, IDC_USE_EXISTING));
+ EnableWindow(GetDlgItem(hwnd, IDC_BROWSE_PROFILE), IsDlgButtonChecked(hwnd, IDC_USE_EXISTING));
+ break;
+
+ case IDC_BROWSE_PROFILE:
+ {
+ TCHAR filter[MAX_PATH] = { 0 };
+ mir_sntprintf(filter, MAX_PATH, _T("%s\0*.*"), TranslateT("All files (*.*)"));
+
+ OPENFILENAME ofn = { sizeof(ofn) };
+ ofn.hwndOwner = hwnd;
+ ofn.lpstrFilter = filter;
+ ofn.nFilterIndex = 1;
+ ofn.lpstrFile = profilePath;
+ ofn.lpstrTitle = TranslateT("Select tox profile");
+ ofn.nMaxFile = MAX_PATH;
+ ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER;
+
+ if (GetOpenFileName(&ofn) && profilePath)
+ {
+ SetDlgItemText(hwnd, IDC_PROFILE_PATH, profilePath);
+ }
+ }
+ break;
+
+ case IDOK:
+ {
+ if (IsDlgButtonChecked(hwnd, IDC_USE_EXISTING))
+ {
+ if (profilePath != NULL)
+ {
+ std::tstring toxProfilePath = proto->GetToxProfilePath();
+ CopyFile(profilePath, toxProfilePath.c_str(), FALSE);
+ }
+ }
+ EndDialog(hwnd, 1);
+ }
+ break;
+
+ }
+ break;
+ }
+
+ return FALSE;
+} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_proto.cpp b/protocols/Tox/src/tox_proto.cpp
index 5734700a99..7d9a5150a4 100644
--- a/protocols/Tox/src/tox_proto.cpp
+++ b/protocols/Tox/src/tox_proto.cpp
@@ -1,9 +1,7 @@
#include "common.h"
CToxProto::CToxProto(const char* protoName, const TCHAR* userName) :
- PROTO<CToxProto>(protoName, userName),
- fileTransfers(1, NumericKeySortT),
- hFileProcess(0)
+PROTO<CToxProto>(protoName, userName)
{
InitToxCore();
@@ -51,7 +49,7 @@ DWORD_PTR __cdecl CToxProto::GetCaps(int type, MCONTACT hContact)
switch (type)
{
case PFLAGNUM_1:
- return PF1_IM | PF1_FILERECV | PF1_AUTHREQ | PF1_EXTSEARCH;
+ return PF1_IM | PF1_FILE | PF1_AUTHREQ | PF1_EXTSEARCH;
case PFLAGNUM_2:
return PF2_ONLINE | PF2_SHORTAWAY | PF2_LIGHTDND;
case PFLAGNUM_4:
@@ -108,7 +106,12 @@ int __cdecl CToxProto::Authorize(HANDLE hDbEvent)
}
int __cdecl CToxProto::AuthDeny(HANDLE hDbEvent, const PROTOCHAR* szReason) { return 0; }
-int __cdecl CToxProto::AuthRecv(MCONTACT hContact, PROTORECVEVENT*) { return 0; }
+
+int __cdecl CToxProto::AuthRecv(MCONTACT, PROTORECVEVENT* pre)
+{
+ return Proto_AuthRecv(m_szModuleName, pre);
+ // return 0;
+}
int __cdecl CToxProto::AuthRequest(MCONTACT hContact, const PROTOCHAR* szMessage)
{
@@ -117,8 +120,8 @@ int __cdecl CToxProto::AuthRequest(MCONTACT hContact, const PROTOCHAR* szMessage
ptrA reason(mir_utf8encodeW(szMessage));
- int32_t friendnumber = tox_add_friend(tox, &clientId[0], (uint8_t*)(char*)reason, (uint16_t)strlen(reason));
- if (friendnumber >= 0)
+ int32_t number = tox_add_friend(tox, &clientId[0], (uint8_t*)(char*)reason, (uint16_t)strlen(reason));
+ if (number >= 0)
{
SaveToxData();
@@ -130,7 +133,7 @@ int __cdecl CToxProto::AuthRequest(MCONTACT hContact, const PROTOCHAR* szMessage
delSetting(hContact, "Auth");
std::vector<uint8_t> username(TOX_MAX_NAME_LENGTH);
- tox_get_name(tox, friendnumber, &username[0]);
+ tox_get_name(tox, number, &username[0]);
std::string nick(username.begin(), username.end());
setString(hContact, "Nick", nick.c_str());
@@ -150,9 +153,13 @@ HANDLE __cdecl CToxProto::FileAllow(MCONTACT hContact, HANDLE hTransfer, const P
uint32_t number = tox_get_friend_number(tox, clientId.data());
uint8_t fileNumber = (uint8_t)hTransfer;
- transfers.at(fileNumber)->pfts.tszWorkingDir = mir_tstrdup(tszPath);
+ FileTransferParam *transfer = transfers.at(fileNumber);
+ transfer->pfts.tszWorkingDir = mir_tstrdup(tszPath);
- tox_file_send_control(tox, number, 1, fileNumber, TOX_FILECONTROL_ACCEPT, NULL, 0);
+ //if (!ProtoBroadcastAck(hContact, ACKTYPE_FILE, ACKRESULT_FILERESUME, (HANDLE)fileNumber, (LPARAM)&transfer->pfts))
+ {
+ tox_file_send_control(tox, number, 1, fileNumber, TOX_FILECONTROL_ACCEPT, NULL, 0);
+ }
return hTransfer;
}
@@ -177,7 +184,31 @@ int __cdecl CToxProto::FileDeny(MCONTACT hContact, HANDLE hTransfer, const PROTO
return FileCancel(hContact, hTransfer);
}
-int __cdecl CToxProto::FileResume(HANDLE hTransfer, int* action, const PROTOCHAR** szFilename) { return 0; }
+int __cdecl CToxProto::FileResume(HANDLE hTransfer, int* action, const PROTOCHAR** szFilename)
+{
+ uint8_t fileNumber = (uint8_t)hTransfer;
+ FileTransferParam *transfer = transfers.at(fileNumber);
+
+ switch (*action)
+ {
+ case FILERESUME_SKIP:
+ /*if (ft->p2p_appID != 0)
+ p2p_sendStatus(ft, 603);
+ else
+ msnftp_sendAcceptReject (ft, false);*/
+ break;
+
+ case FILERESUME_RESUME:
+ //replaceStrT(ft->std.tszCurrentFile, *szFilename);
+ break;
+
+ case FILERESUME_RENAME:
+ replaceStrT(transfer->pfts.tszCurrentFile, *szFilename);
+ break;
+ }
+
+ return 0;
+}
int __cdecl CToxProto::GetInfo(MCONTACT hContact, int infoType) { return 0; }
@@ -265,12 +296,41 @@ int __cdecl CToxProto::SendContacts(MCONTACT hContact, int flags, int nContacts,
HANDLE __cdecl CToxProto::SendFile(MCONTACT hContact, const PROTOCHAR* szDescription, PROTOCHAR** ppszFiles)
{
- CFileTransfer *transfer = new CFileSendTransfer(hContact, InterlockedIncrement(&hFileProcess));
- transfer->ProcessTransferedFiles(ppszFiles);
+ std::string toxId(getStringA(hContact, TOX_SETTINGS_ID));
+ std::vector<uint8_t> clientId = HexStringToData(toxId);
+
+ uint32_t number = tox_get_friend_number(tox, clientId.data());
+
+ TCHAR *fileName = _tcsrchr(ppszFiles[0], '\\') + 1;
+
+ size_t fileDirLength = fileName - ppszFiles[0];
+ TCHAR *fileDir = (TCHAR*)mir_alloc(sizeof(TCHAR)*fileDirLength);
+ _tcsncpy(fileDir, ppszFiles[0], fileDirLength);
+ fileDir[fileDirLength] = '\0';
+
+ size_t fileSize = 0;
+ FILE *file = _tfopen(ppszFiles[0], _T("rb"));
+ if (file != NULL)
+ {
+ fseek(file, 0, SEEK_END);
+ fileSize = ftell(file);
+ fseek(file, 0, SEEK_SET);
+ fclose(file);
+ }
+
+ int fileNumber = tox_new_file_sender(tox, number, fileSize, (uint8_t*)(char*)ptrA(mir_utf8encodeT(fileName)), _tcslen(fileName));
+ if (fileNumber < 0)
+ {
+ debugLogA("CToxProto::SendFilesAsync: cannot send file");
+ }
- ForkThread(&CToxProto::SendFilesAsync, transfer);
+ FileTransferParam *transfer = new FileTransferParam(fileNumber, fileName, fileSize);
+ transfer->pfts.hContact = hContact;
+ transfer->pfts.flags |= PFTS_RECEIVING;
+ transfer->pfts.tszWorkingDir = fileDir;
+ transfers[fileNumber] = transfer;
- return (HANDLE)transfer->GetTransferNumber();
+ return (HANDLE)fileNumber;
}
int __cdecl CToxProto::SendMsg(MCONTACT hContact, int flags, const char* msg)
diff --git a/protocols/Tox/src/tox_proto.h b/protocols/Tox/src/tox_proto.h
index 81d03f952c..4718ac7c3f 100644
--- a/protocols/Tox/src/tox_proto.h
+++ b/protocols/Tox/src/tox_proto.h
@@ -1,16 +1,16 @@
#ifndef _TOX_PROTO_H_
#define _TOX_PROTO_H_
-class CFileTransfer;
-
struct FileTransferParam
{
PROTOFILETRANSFERSTATUS pfts;
- uint8_t number;
+ int number;
- FileTransferParam(uint8_t number, const TCHAR* fileName, size_t fileSize)
+ FileTransferParam(int fileNumber, const TCHAR* fileName, size_t fileSize)
{
- pfts = { sizeof(PROTOFILETRANSFERSTATUS) };
+ number = fileNumber;
+
+ pfts.cbSize = sizeof(PROTOFILETRANSFERSTATUS);
pfts.flags = PFTS_TCHAR;
pfts.totalFiles = 1;
pfts.ptszFiles = (TCHAR**)mir_alloc(sizeof(TCHAR*)*(pfts.totalFiles + 1));
@@ -93,30 +93,34 @@ public:
virtual int __cdecl OnEvent(PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam);
// instances
- static CToxProto* InitProtoInstance(const char* protoName, const wchar_t* userName);
- static int UninitProtoInstance(CToxProto* ppro);
-
- static CToxProto* GetContactInstance(MCONTACT hContact);
- static void UninitInstances();
+ static CToxProto* InitAccount(const char* protoName, const wchar_t* userName);
+ static int UninitAccount(CToxProto* ppro);
private:
Tox *tox;
- mir_cs tox_lock;
- HANDLE hPollingThread;
- bool isTerminated;
- bool isConnected;
- HANDLE hNetlibUser;
- ULONG hFileProcess;
- LIST<CFileTransfer> fileTransfers;
+ mir_cs toxLock;
+ HANDLE hNetlib, hPollingThread;
+ bool isTerminated, isConnected;
std::map<uint8_t, FileTransferParam*> transfers;
// tox
void InitToxCore();
void UninitToxCore();
- // instances
- static LIST<CToxProto> instanceList;
- static int CompareProtos(const CToxProto *p1, const CToxProto *p2);
+ // ???
+ void DoBootstrap();
+ void DoTox();
+
+ void __cdecl PollingThread(void*);
+
+ // tox profile
+ static INT_PTR CALLBACK ToxProfileManagerProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+ // accounts
+ static LIST<CToxProto> accounts;
+ static int CompareAccounts(const CToxProto *p1, const CToxProto *p2);
+
+ int __cdecl OnAccountListChanged(WPARAM wParam, LPARAM lParam);
// netlib
void InitNetlib();
@@ -124,61 +128,62 @@ private:
// account
bool IsOnline();
+ int __cdecl OnAccountLoaded(WPARAM, LPARAM);
- void DoBootstrap();
- void DoTox();
- void __cdecl PollingThread(void*);
-
- //events
- int __cdecl OnAccountLoaded(WPARAM, LPARAM);
- int __cdecl OnContactDeleted(MCONTACT, LPARAM);
+ // events
int __cdecl OnPreShutdown(WPARAM, LPARAM);
+ int __cdecl OnSettingsChanged(WPARAM wParam, LPARAM lParam);
+ // options
+ static INT_PTR CALLBACK MainOptionsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int __cdecl OnOptionsInit(WPARAM wParam, LPARAM lParam);
- int __cdecl OnSettingsChanged(WPARAM wParam, LPARAM lParam);
- int __cdecl OnAccountListChanged(WPARAM wParam, LPARAM lParam);
- int __cdecl OnPreCreateMessage(WPARAM wParam, LPARAM lParam);
INT_PTR __cdecl OnAccountManagerInit(WPARAM, LPARAM);
- static void OnFriendRequest(Tox *tox, const uint8_t *address, const uint8_t *message, const uint16_t messageSize, void *arg);
- static void OnFriendMessage(Tox *tox, const int number, const uint8_t *message, const uint16_t messageSize, void *arg);
- static void OnFriendAction(Tox *tox, const int number, const uint8_t *action, const uint16_t actionSize, void *arg);
- static void OnTypingChanged(Tox *tox, const int number, uint8_t isTyping, void *arg);
- static void OnFriendNameChange(Tox *tox, const int number, const uint8_t *name, const uint16_t nameSize, void *arg);
- static void OnStatusMessageChanged(Tox *tox, const int number, const uint8_t* message, const uint16_t messageSize, void *arg);
- static void OnUserStatusChanged(Tox *tox, int32_t number, uint8_t usertatus, void *arg);
- static void OnConnectionStatusChanged(Tox *tox, const int number, const uint8_t status, void *arg);
- static void OnReadReceipt(Tox *tox, int32_t number, uint32_t receipt, void *arg);
-
- //static void OnFileControlCallback(Tox *tox, int32_t number, uint8_t hFile, uint64_t fileSize, uint8_t *name, uint16_t nameSize, void *arg);
- static void OnFileRequest(Tox *tox, int32_t number, uint8_t isSend, uint8_t fileNumber, uint8_t type, const uint8_t *data, uint16_t length, void *arg);
- static void OnFriendFile(Tox *tox, int32_t number, uint8_t fileNumber, uint64_t fileSize, const uint8_t *fileName, uint16_t length, void *arg);
- static void OnFileData(Tox *tox, int32_t number, uint8_t fileNumber, const uint8_t *data, uint16_t length, void *arg);
-
// contacts
WORD GetContactStatus(MCONTACT hContact);
bool IsContactOnline(MCONTACT hContact);
void SetContactStatus(MCONTACT hContact, WORD status);
void SetAllContactsStatus(WORD status);
- bool IsProtoContact(MCONTACT hContact);
+
MCONTACT FindContact(const std::string &id);
MCONTACT FindContact(const int friendNumber);
MCONTACT AddContact(const std::string &id, bool isTemporary = false);
MCONTACT GetContactFromAuthEvent(HANDLE hEvent);
- void LoadContactList();
+ void LoadFriendList();
+ int __cdecl OnContactDeleted(MCONTACT, LPARAM);
+
+ static void OnFriendRequest(Tox *tox, const uint8_t *address, const uint8_t *message, const uint16_t messageSize, void *arg);
+ static void OnFriendNameChange(Tox *tox, const int number, const uint8_t *name, const uint16_t nameSize, void *arg);
+ static void OnStatusMessageChanged(Tox *tox, const int number, const uint8_t* message, const uint16_t messageSize, void *arg);
+ static void OnUserStatusChanged(Tox *tox, int32_t number, uint8_t usertatus, void *arg);
+ static void OnConnectionStatusChanged(Tox *tox, const int number, const uint8_t status, void *arg);
+
+ // contacts search
void __cdecl SearchByIdAsync(void* arg);
void __cdecl SearchByNameAsync(void* arg);
- // file transfer
+ static INT_PTR CALLBACK SearchDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+ // messages
+ static void OnFriendMessage(Tox *tox, const int number, const uint8_t *message, const uint16_t messageSize, void *arg);
+ static void OnFriendAction(Tox *tox, const int number, const uint8_t *action, const uint16_t actionSize, void *arg);
+ static void OnTypingChanged(Tox *tox, const int number, uint8_t isTyping, void *arg);
+ static void OnReadReceipt(Tox *tox, int32_t number, uint32_t receipt, void *arg);
+
+ int __cdecl OnPreCreateMessage(WPARAM wParam, LPARAM lParam);
+
+ // transfer
void __cdecl SendFileAsync(void* arg);
- void __cdecl SendFilesAsync(void* arg);
- CFileTransfer *GetFileTransferByFileNumber(int fileNumber);
+ //static void OnFileControlCallback(Tox *tox, int32_t number, uint8_t hFile, uint64_t fileSize, uint8_t *name, uint16_t nameSize, void *arg);
+ static void OnFileRequest(Tox *tox, int32_t number, uint8_t isSend, uint8_t fileNumber, uint8_t type, const uint8_t *data, uint16_t length, void *arg);
+ static void OnFriendFile(Tox *tox, int32_t number, uint8_t fileNumber, uint64_t fileSize, const uint8_t *fileName, uint16_t length, void *arg);
+ static void OnFileData(Tox *tox, int32_t number, uint8_t fileNumber, const uint8_t *data, uint16_t length, void *arg);
// utils
TOX_USERSTATUS MirandaToToxStatus(int status);
@@ -188,7 +193,6 @@ private:
static void ShowNotification(const wchar_t *caption, const wchar_t *message, int flags = 0, MCONTACT hContact = NULL);
HANDLE AddDbEvent(MCONTACT hContact, WORD type, DWORD timestamp, DWORD flags, DWORD cbBlob, PBYTE pBlob);
- void RaiseAuthRequestEvent(DWORD timestamp, const char* toxId, const char* reason);
std::vector<uint8_t> HexStringToData(std::string hex);
std::string DataToHexString(std::vector<uint8_t>);
@@ -201,11 +205,6 @@ private:
void LoadToxData();
void SaveToxData();
-
- // dialogs
- static INT_PTR CALLBACK SearchDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- static INT_PTR CALLBACK MainOptionsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- static INT_PTR CALLBACK ToxProfileManagerProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};
#endif //_TOX_PROTO_H_ \ No newline at end of file
diff --git a/protocols/Tox/src/tox_search.cpp b/protocols/Tox/src/tox_search.cpp
new file mode 100644
index 0000000000..82dcbd5be7
--- /dev/null
+++ b/protocols/Tox/src/tox_search.cpp
@@ -0,0 +1,79 @@
+#include "common.h"
+
+void CToxProto::SearchByIdAsync(void*)
+{
+ ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_FAILED, (HWND)1, 0);
+}
+
+void CToxProto::SearchByNameAsync(void* arg)
+{
+ NETLIBHTTPREQUEST request = { sizeof(NETLIBHTTPREQUEST) };
+ request.requestType = REQUEST_POST;
+ request.szUrl = "https://toxme.se/api";
+ request.flags = NLHRF_HTTP11 | NLHRF_SSL | NLHRF_NODUMP;
+
+ request.headers = (NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)* 2);
+ request.headers[0].szName = "Content-Type";
+ request.headers[0].szValue = "text/plain; charset=utf-8";
+ request.headersCount = 1;
+
+ std::string query = "{\"action\":3,\"name\":\"";
+ query += (char*)arg;
+ query += "\"}";
+
+ request.dataLength = query.length();
+ request.pData = (char*)query.c_str();
+
+ NETLIBHTTPREQUEST* response = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlib, (LPARAM)&request);
+
+ if (response)
+ {
+ std::smatch match;
+ std::regex regex("\"public_key\": \"(.+?)\"");
+
+ const std::string content = response->pData;
+
+ if (std::regex_search(content, match, regex))
+ {
+ std::string toxId = match[1];
+
+ PROTOSEARCHRESULT psr = { sizeof(PROTOSEARCHRESULT) };
+ psr.flags = PSR_TCHAR;
+ psr.id = mir_a2t(toxId.c_str());
+
+ ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)1, (LPARAM)&psr);
+ ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
+
+ CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
+ return;
+ }
+ }
+
+ CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
+ mir_free(request.headers);
+
+ ProtoBroadcastAck(NULL, ACKTYPE_SEARCH, ACKRESULT_FAILED, (HANDLE)1, 0);
+ mir_free(arg);
+}
+
+INT_PTR CToxProto::SearchDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ CToxProto *proto = (CToxProto*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwnd);
+ {
+ proto = (CToxProto*)lParam;
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
+
+ //ShowWindow(GetDlgItem(GetParent(hwnd), 1408/*IDC_BYCUSTOM*/), SW_HIDE);
+ //ShowWindow(GetDlgItem(GetParent(hwnd), 1402/*IDC_ADVANCEDGROUP*/), SW_HIDE);
+ SetDlgItemText(GetParent(hwnd), 1408/*IDC_BYCUSTOM*/, TranslateT("Query"));
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_services.cpp b/protocols/Tox/src/tox_services.cpp
deleted file mode 100644
index e74c41ff98..0000000000
--- a/protocols/Tox/src/tox_services.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "common.h"
-
diff --git a/protocols/Tox/src/tox_transfer.cpp b/protocols/Tox/src/tox_transfer.cpp
new file mode 100644
index 0000000000..d91d18ca7c
--- /dev/null
+++ b/protocols/Tox/src/tox_transfer.cpp
@@ -0,0 +1,128 @@
+#include "common.h"
+
+void CToxProto::SendFileAsync(void* arg)
+{
+ FileTransferParam *transfer = (FileTransferParam*)arg;
+
+ std::string toxId(getStringA(transfer->pfts.hContact, TOX_SETTINGS_ID));
+ std::vector<uint8_t> clientId = HexStringToData(toxId);
+
+ uint32_t number = tox_get_friend_number(tox, clientId.data());
+ if (number < 0)
+ {
+ return;
+ }
+
+ size_t fileSize = transfer->pfts.currentFileSize;
+ size_t fileProgress = 0;
+ TCHAR filePath[MAX_PATH];
+ mir_sntprintf(filePath, SIZEOF(filePath), _T("%s%s"), transfer->pfts.tszWorkingDir, transfer->pfts.tszCurrentFile);
+
+ FILE *hFile = _wfopen(filePath, _T("rb"));
+ if (hFile != NULL)
+ {
+ size_t chunkSize = min(tox_file_data_size(tox, number), fileSize);
+ uint8_t *data = (uint8_t*)mir_alloc(chunkSize);
+ while (!feof(hFile) && fileProgress < fileSize)
+ {
+ size_t size = min(chunkSize, fileSize - fileProgress);
+ if (fread(data, sizeof(uint8_t), size, hFile) == size)
+ {
+ tox_file_send_data(tox, number, transfer->number, data, size);
+ transfer->pfts.totalProgress = transfer->pfts.currentFileProgress = fileProgress += size;
+
+ ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_DATA, (HANDLE)transfer->number, (LPARAM)&transfer->pfts);
+ }
+ }
+ mir_free(data);
+ tox_file_send_control(tox, number, 0, transfer->number, TOX_FILECONTROL_FINISHED, NULL, 0);
+ }
+ else
+ {
+ ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_FAILED, (HANDLE)transfer->number, 0);
+ }
+}
+
+void CToxProto::OnFriendFile(Tox *tox, int32_t number, uint8_t fileNumber, uint64_t fileSize, const uint8_t *fileName, uint16_t length, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ FileTransferParam *transfer = new FileTransferParam(fileNumber, ptrT(mir_utf8decodeT((const char*)fileName)), fileSize);
+ transfer->pfts.hContact = hContact;
+ transfer->pfts.flags |= PFTS_RECEIVING;
+ proto->transfers[fileNumber] = transfer;
+
+ PROTORECVFILET pre = { 0 };
+ pre.flags = PREF_TCHAR;
+ pre.fileCount = 1;
+ pre.timestamp = time(NULL);
+ pre.tszDescription = _T("");
+ pre.ptszFiles = (TCHAR**)mir_alloc(sizeof(TCHAR*)* 2);
+ pre.ptszFiles[0] = mir_utf8decodeT((char*)fileName);
+ pre.ptszFiles[1] = NULL;
+ pre.lParam = (LPARAM)fileNumber;
+ ProtoChainRecvFile(hContact, &pre);
+ }
+}
+
+void CToxProto::OnFileData(Tox *tox, int32_t number, uint8_t fileNumber, const uint8_t *data, uint16_t size, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ FileTransferParam *transfer = proto->transfers.at(fileNumber);
+
+ TCHAR filePath[MAX_PATH];
+ mir_sntprintf(filePath, SIZEOF(filePath), _T("%s%s"), transfer->pfts.tszWorkingDir, transfer->pfts.tszCurrentFile);
+
+ FILE *hFile = NULL;
+ if (transfer->pfts.currentFileProgress == 0)
+ {
+ hFile = _tfopen(filePath, _T("wb+"));
+ proto->ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)fileNumber, 0);
+ }
+ else
+ {
+ hFile = _tfopen(filePath, _T("ab"));
+ }
+ if (hFile != NULL)
+ {
+ fseek(hFile, transfer->pfts.currentFileProgress + 1, SEEK_SET);
+ if (fwrite(data, sizeof(uint8_t), size, hFile) == size)
+ {
+ transfer->pfts.totalProgress = transfer->pfts.currentFileProgress += size;
+ proto->ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_DATA, (HANDLE)fileNumber, (LPARAM)&transfer->pfts);
+ }
+ fclose(hFile);
+ }
+ }
+}
+
+void CToxProto::OnFileRequest(Tox *tox, int32_t number, uint8_t isSend, uint8_t fileNumber, uint8_t type, const uint8_t *data, uint16_t length, void *arg)
+{
+ CToxProto *proto = (CToxProto*)arg;
+
+ MCONTACT hContact = proto->FindContact(number);
+ if (hContact)
+ {
+ FileTransferParam *transfer = proto->transfers.at(fileNumber);
+
+ switch (type)
+ {
+ case TOX_FILECONTROL_ACCEPT:
+ proto->ForkThread(&CToxProto::SendFileAsync, transfer);
+ proto->ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, (HANDLE)fileNumber, 0);
+ break;
+
+ case TOX_FILECONTROL_FINISHED:
+ tox_file_send_control(proto->tox, number, 1, fileNumber, TOX_FILECONTROL_FINISHED, NULL, 0);
+ proto->ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, (HANDLE)fileNumber, 0);
+ break;
+ }
+ }
+} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_transfers.cpp b/protocols/Tox/src/tox_transfers.cpp
deleted file mode 100644
index 51bab8aac3..0000000000
--- a/protocols/Tox/src/tox_transfers.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "common.h"
-
-void CToxProto::SendFileAsync(void* arg)
-{
- CFile *file = (CFile*)arg;
- const CFileTransfer *transfer = file->GetTransfer();
- CToxProto *proto = (CToxProto*)transfer->GetProtoInstance();
-}
-
-void CToxProto::SendFilesAsync(void* arg)
-{
- CFileTransfer *transfer = (CFileTransfer*)arg;
-
- std::string toxId(getStringA(transfer->GetContactHandle(), TOX_SETTINGS_ID));
- std::vector<uint8_t> clientId = HexStringToData(toxId);
-
- uint32_t number = tox_get_friend_number(tox, clientId.data());
-
- for (int i = 0; transfer->GetFileCount(); i++)
- {
- CFile *file = transfer->GetFileAt(i);
-
- int hFile = tox_new_file_sender(tox, number, file->GetSize(), (uint8_t*)file->GetName(), strlen(file->GetName()));
- if (hFile < 0)
- {
- debugLogA("CToxProto::SendFilesAsync: cannot send file");
- }
- file->SetNumber(hFile);
-
- transfer->Wait();
- }
-}
-
-CFileTransfer *CToxProto::GetFileTransferByFileNumber(int fileNumber)
-{
- for (int i = 0; fileTransfers.getCount(); i++)
- {
- if (fileTransfers[i]->HasFile(fileNumber))
- {
- return fileTransfers[i];
- }
- }
- return NULL;
-} \ No newline at end of file
diff --git a/protocols/Tox/src/tox_utils.cpp b/protocols/Tox/src/tox_utils.cpp
index 5964177965..80d8cdd0e9 100644
--- a/protocols/Tox/src/tox_utils.cpp
+++ b/protocols/Tox/src/tox_utils.cpp
@@ -71,32 +71,6 @@ HANDLE CToxProto::AddDbEvent(MCONTACT hContact, WORD type, DWORD timestamp, DWOR
return db_event_add(hContact, &dbei);
}
-void CToxProto::RaiseAuthRequestEvent(DWORD timestamp, const char* toxId, const char* reason)
-{
- MCONTACT hContact = this->AddContact(toxId);
-
- /*blob is: 0(DWORD), hContact(DWORD), nick(ASCIIZ), firstName(ASCIIZ), lastName(ASCIIZ), sid(ASCIIZ), reason(ASCIIZ)*/
- DWORD cbBlob = (DWORD)
- (sizeof(DWORD)* 2 +
- strlen(toxId) +
- strlen(reason) +
- 5);
-
- PBYTE pBlob, pCurBlob;
- pCurBlob = pBlob = (PBYTE)mir_calloc(cbBlob);
-
- *((PDWORD)pCurBlob) = 0;
- pCurBlob += sizeof(DWORD);
- *((PDWORD)pCurBlob) = (DWORD)hContact;
- pCurBlob += sizeof(DWORD);
- pCurBlob += 3;
- strcpy((char *)pCurBlob, toxId);
- pCurBlob += strlen(toxId) + 1;
- strcpy((char *)pCurBlob, reason);
-
- AddDbEvent(hContact, EVENTTYPE_AUTHREQUEST, timestamp, DBEF_UTF, cbBlob, pBlob);
-}
-
std::vector<uint8_t> CToxProto::HexStringToData(std::string hex)
{
std::stringstream ss;
diff --git a/protocols/Tox/src/version.h b/protocols/Tox/src/version.h
index 2eee3dc6b1..15c8ad26d7 100644
--- a/protocols/Tox/src/version.h
+++ b/protocols/Tox/src/version.h
@@ -1,7 +1,7 @@
#define __MAJOR_VERSION 0
#define __MINOR_VERSION 11
#define __RELEASE_NUM 0
-#define __BUILD_NUM 2
+#define __BUILD_NUM 3
#include <stdver.h>
diff --git a/protocols/Tox/docs/README.md b/protocols/Tox/tox/README.md
index 0879158997..0879158997 100644
--- a/protocols/Tox/docs/README.md
+++ b/protocols/Tox/tox/README.md
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/as.exe b/protocols/Tox/tox/deflibcreator/as.exe
index e1b3143100..e1b3143100 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/as.exe
+++ b/protocols/Tox/tox/deflibcreator/as.exe
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/as64.exe b/protocols/Tox/tox/deflibcreator/as64.exe
index 4f5095abf8..4f5095abf8 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/as64.exe
+++ b/protocols/Tox/tox/deflibcreator/as64.exe
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/deflibcreator.exe b/protocols/Tox/tox/deflibcreator/deflibcreator.exe
index 5969f5d4c2..5969f5d4c2 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/deflibcreator.exe
+++ b/protocols/Tox/tox/deflibcreator/deflibcreator.exe
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/dlltool.exe b/protocols/Tox/tox/deflibcreator/dlltool.exe
index 7874bdd13e..7874bdd13e 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/dlltool.exe
+++ b/protocols/Tox/tox/deflibcreator/dlltool.exe
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/dlltool64.exe b/protocols/Tox/tox/deflibcreator/dlltool64.exe
index 6a41e5228c..6a41e5228c 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/dlltool64.exe
+++ b/protocols/Tox/tox/deflibcreator/dlltool64.exe
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/link.exe b/protocols/Tox/tox/deflibcreator/link.exe
index 5215aecd5d..5215aecd5d 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/link.exe
+++ b/protocols/Tox/tox/deflibcreator/link.exe
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/link.exe.manifest b/protocols/Tox/tox/deflibcreator/link.exe.manifest
index 2981431665..2981431665 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/link.exe.manifest
+++ b/protocols/Tox/tox/deflibcreator/link.exe.manifest
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/mspdb80.dll b/protocols/Tox/tox/deflibcreator/mspdb80.dll
index cbe888915c..cbe888915c 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/mspdb80.dll
+++ b/protocols/Tox/tox/deflibcreator/mspdb80.dll
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/mspdb80.dll.2.manifest b/protocols/Tox/tox/deflibcreator/mspdb80.dll.2.manifest
index 2981431665..2981431665 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/mspdb80.dll.2.manifest
+++ b/protocols/Tox/tox/deflibcreator/mspdb80.dll.2.manifest
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/src/build.cmd b/protocols/Tox/tox/deflibcreator/src/build.cmd
index abcf258d0a..abcf258d0a 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/src/build.cmd
+++ b/protocols/Tox/tox/deflibcreator/src/build.cmd
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/src/deflib.manifest b/protocols/Tox/tox/deflibcreator/src/deflib.manifest
index 414433b643..414433b643 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/src/deflib.manifest
+++ b/protocols/Tox/tox/deflibcreator/src/deflib.manifest
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/src/deflibcreator.cpp b/protocols/Tox/tox/deflibcreator/src/deflibcreator.cpp
index 6480fda7e3..6480fda7e3 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/src/deflibcreator.cpp
+++ b/protocols/Tox/tox/deflibcreator/src/deflibcreator.cpp
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/src/dlc.ico b/protocols/Tox/tox/deflibcreator/src/dlc.ico
index aa524c729c..aa524c729c 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/src/dlc.ico
+++ b/protocols/Tox/tox/deflibcreator/src/dlc.ico
Binary files differ
diff --git a/protocols/Tox/docs/dlltolib/deflibcreator/src/resource.rc b/protocols/Tox/tox/deflibcreator/src/resource.rc
index 503ec99a76..503ec99a76 100644
--- a/protocols/Tox/docs/dlltolib/deflibcreator/src/resource.rc
+++ b/protocols/Tox/tox/deflibcreator/src/resource.rc
diff --git a/protocols/Tox/dll/x64/libtox.dll b/protocols/Tox/tox/dll/x64/libtox.dll
index 832ff1d072..832ff1d072 100644
--- a/protocols/Tox/dll/x64/libtox.dll
+++ b/protocols/Tox/tox/dll/x64/libtox.dll
Binary files differ
diff --git a/protocols/Tox/dll/x86/libtox.dll b/protocols/Tox/tox/dll/x86/libtox.dll
index f892c75fb7..f892c75fb7 100644
--- a/protocols/Tox/dll/x86/libtox.dll
+++ b/protocols/Tox/tox/dll/x86/libtox.dll
Binary files differ
diff --git a/protocols/Tox/tox/generate_libs.cmd b/protocols/Tox/tox/generate_libs.cmd
new file mode 100644
index 0000000000..6111e156e1
--- /dev/null
+++ b/protocols/Tox/tox/generate_libs.cmd
@@ -0,0 +1,3 @@
+deflibcreator\deflibcreator dll\x86\libtox.dll lib\x86\
+
+deflibcreator\deflibcreator dll\x64\libtox.dll lib\x64\
diff --git a/protocols/Tox/src/tox/tox.h b/protocols/Tox/tox/include/tox.h
index 5810c1289c..5810c1289c 100644
--- a/protocols/Tox/src/tox/tox.h
+++ b/protocols/Tox/tox/include/tox.h
diff --git a/protocols/Tox/src/tox/toxav.h b/protocols/Tox/tox/include/toxav.h
index e31c7aad1f..e31c7aad1f 100644
--- a/protocols/Tox/src/tox/toxav.h
+++ b/protocols/Tox/tox/include/toxav.h
diff --git a/protocols/Tox/src/tox/toxdns.h b/protocols/Tox/tox/include/toxdns.h
index a0cc323b43..a0cc323b43 100644
--- a/protocols/Tox/src/tox/toxdns.h
+++ b/protocols/Tox/tox/include/toxdns.h
diff --git a/protocols/Tox/lib/x64/libtox-x64.exp b/protocols/Tox/tox/lib/x64/libtox-x64.exp
index d322ce16b6..d322ce16b6 100644
--- a/protocols/Tox/lib/x64/libtox-x64.exp
+++ b/protocols/Tox/tox/lib/x64/libtox-x64.exp
Binary files differ
diff --git a/protocols/Tox/lib/x64/libtox-x64.lib b/protocols/Tox/tox/lib/x64/libtox-x64.lib
index 9be529069c..9be529069c 100644
--- a/protocols/Tox/lib/x64/libtox-x64.lib
+++ b/protocols/Tox/tox/lib/x64/libtox-x64.lib
Binary files differ
diff --git a/protocols/Tox/lib/x64/libtox.def b/protocols/Tox/tox/lib/x64/libtox.def
index f685a57c30..f685a57c30 100644
--- a/protocols/Tox/lib/x64/libtox.def
+++ b/protocols/Tox/tox/lib/x64/libtox.def
diff --git a/protocols/Tox/lib/x86/libtox.def b/protocols/Tox/tox/lib/x86/libtox.def
index cca6b10ff0..cca6b10ff0 100644
--- a/protocols/Tox/lib/x86/libtox.def
+++ b/protocols/Tox/tox/lib/x86/libtox.def
diff --git a/protocols/Tox/lib/x86/libtox.exp b/protocols/Tox/tox/lib/x86/libtox.exp
index b9b3285af6..b9b3285af6 100644
--- a/protocols/Tox/lib/x86/libtox.exp
+++ b/protocols/Tox/tox/lib/x86/libtox.exp
Binary files differ
diff --git a/protocols/Tox/lib/x86/libtox.lib b/protocols/Tox/tox/lib/x86/libtox.lib
index e796ec22e0..e796ec22e0 100644
--- a/protocols/Tox/lib/x86/libtox.lib
+++ b/protocols/Tox/tox/lib/x86/libtox.lib
Binary files differ