diff options
| -rw-r--r-- | plugins/DropBox/DropBox_11.vcxproj | 209 | ||||
| -rw-r--r-- | plugins/DropBox/DropBox_11.vcxproj.filters | 44 | ||||
| -rw-r--r-- | plugins/DropBox/res/resource.h | bin | 0 -> 1176 bytes | |||
| -rw-r--r-- | plugins/DropBox/res/resource.rc | bin | 0 -> 6916 bytes | |||
| -rw-r--r-- | plugins/DropBox/src/common.h | 31 | ||||
| -rw-r--r-- | plugins/DropBox/src/dropBox_proto.cpp | 383 | ||||
| -rw-r--r-- | plugins/DropBox/src/dropBox_proto.h | 43 | ||||
| -rw-r--r-- | plugins/DropBox/src/http_request.h | 87 | ||||
| -rw-r--r-- | plugins/DropBox/src/main.cpp | 63 | ||||
| -rw-r--r-- | plugins/DropBox/src/resource.h | bin | 0 -> 1180 bytes | |||
| -rw-r--r-- | plugins/DropBox/src/version.h | 15 | 
11 files changed, 875 insertions, 0 deletions
| diff --git a/plugins/DropBox/DropBox_11.vcxproj b/plugins/DropBox/DropBox_11.vcxproj new file mode 100644 index 0000000000..e0ae749cf7 --- /dev/null +++ b/plugins/DropBox/DropBox_11.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
 +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 +  <ItemGroup Label="ProjectConfigurations">
 +    <ProjectConfiguration Include="Debug|Win32">
 +      <Configuration>Debug</Configuration>
 +      <Platform>Win32</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Debug|x64">
 +      <Configuration>Debug</Configuration>
 +      <Platform>x64</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Release|Win32">
 +      <Configuration>Release</Configuration>
 +      <Platform>Win32</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Release|x64">
 +      <Configuration>Release</Configuration>
 +      <Platform>x64</Platform>
 +    </ProjectConfiguration>
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClInclude Include="res\resource.h" />
 +    <ClInclude Include="src\common.h" />
 +    <ClInclude Include="src\dropBox_proto.h" />
 +    <ClInclude Include="src\http_request.h" />
 +    <ClInclude Include="src\version.h" />
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClCompile Include="src\main.cpp" />
 +    <ClCompile Include="src\dropBox_proto.cpp" />
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ResourceCompile Include="res\Resource.rc" />
 +  </ItemGroup>
 +  <PropertyGroup Label="Globals">
 +    <ProjectGuid>{CBA58126-3E02-4159-9BD3-059AF9DBC84E}</ProjectGuid>
 +    <ProjectName>DropBox</ProjectName>
 +  </PropertyGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>true</UseDebugLibraries>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v110_xp</PlatformToolset>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>true</UseDebugLibraries>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v110_xp</PlatformToolset>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>false</UseDebugLibraries>
 +    <WholeProgramOptimization>true</WholeProgramOptimization>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v110_xp</PlatformToolset>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>false</UseDebugLibraries>
 +    <WholeProgramOptimization>true</WholeProgramOptimization>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v110_xp</PlatformToolset>
 +  </PropertyGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 +  <ImportGroup Label="ExtensionSettings">
 +  </ImportGroup>
 +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <PropertyGroup Label="UserMacros" />
 +  <PropertyGroup>
 +    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
 +    <IgnoreImportLibrary>true</IgnoreImportLibrary>
 +  </PropertyGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 +    <ClCompile>
 +      <WarningLevel>Level3</WarningLevel>
 +      <Optimization>Disabled</Optimization>
 +      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <StringPooling>false</StringPooling>
 +      <FunctionLevelLinking>true</FunctionLevelLinking>
 +      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
 +      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 +      <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName>
 +      <PrecompiledHeaderFile>common.h</PrecompiledHeaderFile>
 +      <PrecompiledHeader>NotUsing</PrecompiledHeader>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin11\lib</AdditionalLibraryDirectories>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
 +      <RandomizedBaseAddress>false</RandomizedBaseAddress>
 +      <AdditionalOptions>/PDBALTPATH:%_PDB% %(AdditionalOptions)</AdditionalOptions>
 +    </Link>
 +    <ResourceCompile>
 +      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
 +    </ResourceCompile>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 +    <ClCompile>
 +      <WarningLevel>Level3</WarningLevel>
 +      <Optimization>Disabled</Optimization>
 +      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <StringPooling>false</StringPooling>
 +      <FunctionLevelLinking>true</FunctionLevelLinking>
 +      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
 +      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 +      <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName>
 +      <PrecompiledHeader>Use</PrecompiledHeader>
 +      <PrecompiledHeaderFile>Steam.h</PrecompiledHeaderFile>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin11\lib</AdditionalLibraryDirectories>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
 +      <RandomizedBaseAddress>false</RandomizedBaseAddress>
 +      <AdditionalOptions>/PDBALTPATH:%_PDB% %(AdditionalOptions)</AdditionalOptions>
 +    </Link>
 +    <ResourceCompile>
 +      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
 +    </ResourceCompile>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 +    <ClCompile>
 +      <WarningLevel>Level3</WarningLevel>
 +      <Optimization>Full</Optimization>
 +      <FunctionLevelLinking>true</FunctionLevelLinking>
 +      <IntrinsicFunctions>true</IntrinsicFunctions>
 +      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
 +      <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName>
 +      <PrecompiledHeader>Use</PrecompiledHeader>
 +      <PrecompiledHeaderFile>Steam.h</PrecompiledHeaderFile>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <OptimizeReferences>true</OptimizeReferences>
 +      <RandomizedBaseAddress>false</RandomizedBaseAddress>
 +      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
 +      <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin11\lib</AdditionalLibraryDirectories>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +    </Link>
 +    <ResourceCompile>
 +      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
 +    </ResourceCompile>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 +    <ClCompile>
 +      <WarningLevel>Level3</WarningLevel>
 +      <Optimization>Full</Optimization>
 +      <FunctionLevelLinking>true</FunctionLevelLinking>
 +      <IntrinsicFunctions>true</IntrinsicFunctions>
 +      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
 +      <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName>
 +      <PrecompiledHeader>Use</PrecompiledHeader>
 +      <PrecompiledHeaderFile>Steam.h</PrecompiledHeaderFile>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <OptimizeReferences>true</OptimizeReferences>
 +      <RandomizedBaseAddress>false</RandomizedBaseAddress>
 +      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
 +      <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin11\lib</AdditionalLibraryDirectories>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +    </Link>
 +    <ResourceCompile>
 +      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
 +    </ResourceCompile>
 +  </ItemDefinitionGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 +  <ImportGroup Label="ExtensionTargets">
 +  </ImportGroup>
 +</Project>
\ No newline at end of file diff --git a/plugins/DropBox/DropBox_11.vcxproj.filters b/plugins/DropBox/DropBox_11.vcxproj.filters new file mode 100644 index 0000000000..0027b45275 --- /dev/null +++ b/plugins/DropBox/DropBox_11.vcxproj.filters @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?>
 +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 +  <ItemGroup>
 +    <ClCompile Include="src\dropBox_proto.cpp">
 +      <Filter>Source Files</Filter>
 +    </ClCompile>
 +    <ClCompile Include="src\main.cpp">
 +      <Filter>Source Files</Filter>
 +    </ClCompile>
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClInclude Include="src\common.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="res\resource.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="src\http_request.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="src\dropBox_proto.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="src\version.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +  </ItemGroup>
 +  <ItemGroup>
 +    <Filter Include="Header Files">
 +      <UniqueIdentifier>{bb96e6a3-2d56-4aed-9352-30558014561b}</UniqueIdentifier>
 +    </Filter>
 +    <Filter Include="Resource Files">
 +      <UniqueIdentifier>{007efe6e-3f6a-49d0-be83-77c03481c085}</UniqueIdentifier>
 +    </Filter>
 +    <Filter Include="Source Files">
 +      <UniqueIdentifier>{badc339a-531c-4f2a-8a2e-e46bd5630044}</UniqueIdentifier>
 +    </Filter>
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ResourceCompile Include="res\Resource.rc">
 +      <Filter>Resource Files</Filter>
 +    </ResourceCompile>
 +  </ItemGroup>
 +</Project>
\ No newline at end of file diff --git a/plugins/DropBox/res/resource.h b/plugins/DropBox/res/resource.hBinary files differ new file mode 100644 index 0000000000..4b1586d386 --- /dev/null +++ b/plugins/DropBox/res/resource.h diff --git a/plugins/DropBox/res/resource.rc b/plugins/DropBox/res/resource.rcBinary files differ new file mode 100644 index 0000000000..e8c565a818 --- /dev/null +++ b/plugins/DropBox/res/resource.rc diff --git a/plugins/DropBox/src/common.h b/plugins/DropBox/src/common.h new file mode 100644 index 0000000000..64d4e4cab6 --- /dev/null +++ b/plugins/DropBox/src/common.h @@ -0,0 +1,31 @@ +#ifndef _COMMON_H_
 +#define _COMMON_H_
 +
 +//#include <winsock2.h>
 +#include <windows.h>
 +#include <time.h>
 +
 +#include <newpluginapi.h>
 +
 +#include <m_options.h>
 +#include <m_database.h>
 +
 +#include <m_protoint.h>
 +#include <m_protomod.h>
 +#include <m_protosvc.h>
 +
 +#include <m_netlib.h>
 +
 +#include <m_json.h>
 +#include <m_langpack.h>
 +#include <m_string.h>
 +
 +#include "version.h"
 +#include "..\res\resource.h"
 +
 +#define MODULE "DropBox"
 +
 +extern HINSTANCE     g_hInstance;
 +extern HANDLE        g_hNetlibUser;
 +
 +#endif //_COMMON_H_
\ No newline at end of file diff --git a/plugins/DropBox/src/dropBox_proto.cpp b/plugins/DropBox/src/dropBox_proto.cpp new file mode 100644 index 0000000000..f1991a9924 --- /dev/null +++ b/plugins/DropBox/src/dropBox_proto.cpp @@ -0,0 +1,383 @@ +#include "dropBox_proto.h"
 +
 +HANDLE g_hNetlibUser;
 +ULONG  g_fileId = 1;
 +
 +int OnModulesLoaded(WPARAM wParam, LPARAM lParam)
 +{
 +	NETLIBUSER nlu = { sizeof(nlu) };
 +	nlu.flags = NUF_INCOMING | NUF_OUTGOING | NUF_HTTPCONNS | NUF_TCHAR;
 +	nlu.szSettingsModule = MODULE;
 +	nlu.szSettingsModule = MODULE;
 +	nlu.ptszDescriptiveName = L"DropBox";
 +
 +	g_hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu);
 +
 +	DropBoxLogIn();
 +
 +	return 0;
 +}
 +
 +int OnOptionsInit(WPARAM wParam, LPARAM lParam)
 +{
 +	OPTIONSDIALOGPAGE odp = { sizeof(odp) };
 +	odp.position = 100000000;
 +	odp.hInstance = g_hInstance;
 +	odp.flags = ODPF_BOLDGROUPS;
 +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS_MAIN);
 +	odp.pszGroup = LPGEN("Network");
 +	odp.pszTitle = LPGEN("DropBox");
 +	odp.pfnDlgProc = MainOptionsProc;
 +
 +	//Options_AddPage(wParam, &odp);
 +
 +	return 0;
 +}
 +
 +INT_PTR DropBoxGetCaps(WPARAM wParam, LPARAM lParam)
 +{
 +	switch(wParam)
 +	{
 +	case PFLAGNUM_1:
 +		return PF1_IM | PF1_FILESEND;
 +	case PFLAGNUM_2:
 +		return PF2_ONLINE;
 +	case PFLAG_UNIQUEIDTEXT:
 +		return (INT_PTR) "Dropbox ID";
 +	case PFLAG_UNIQUEIDSETTING:
 +		return (DWORD_PTR)"uid";
 +	}
 +
 +	return 0;
 +}
 +
 +HttpRequest *DropBoxCreateFileChunkedRequest(const char *data, int length)
 +{
 +	HttpRequest *request = new HttpRequest(g_hNetlibUser, REQUEST_PUT, DROPBOX_APICONTENT_URL "/chunked_upload");
 +	request->AddParameter("access_token", db_get_sa(NULL, MODULE, "TokenSecret"));
 +	if (length > 0)
 +	{
 +		//request->AddHeader("Content-Type", "application/octet-stream");
 +		request->dataLength = length;
 +		request->pData = (char*)mir_alloc(sizeof(char) * (length + 1));
 +		memcpy(request->pData, data, length);
 +		request->pData[length] = 0;
 +	}
 +
 +	return request;
 +}
 +
 +bool DropBoxSendFileChunkedStart(const char *data, int length, char *uploadId, int &offset)
 +{
 +	HttpRequest *request = DropBoxCreateFileChunkedRequest(data, length);
 +	NETLIBHTTPREQUEST *response = request->Send();
 +
 +	delete request;
 +
 +	if (response && response->resultCode == 200)
 +	{
 +		JSONNODE *root = json_parse(response->pData);
 +		if (root != NULL)
 +		{
 +			JSONNODE *node = json_get(root, "upload_id");
 +			strcpy(uploadId, mir_u2a(json_as_string(node)));
 +
 +			node = json_get(root, "offset");
 +			offset = json_as_int(node);
 +
 +			return true;
 +		}
 +	}
 +
 +	return 0;
 +}
 +
 +bool DropBoxSendFileChunkedNext(const char *data, int length, const char *uploadId, int &offset)
 +{
 +	HttpRequest *request = DropBoxCreateFileChunkedRequest(data, length);
 +	request->AddParameter("upload_id", uploadId);
 +	request->AddParameter("offset", offset);
 +
 +	NETLIBHTTPREQUEST *response = request->Send();
 +
 +	delete request;
 +
 +	if (response && response->resultCode == 200)
 +	{
 +		JSONNODE *root = json_parse(response->pData);
 +		if (root != NULL)
 +		{
 +			JSONNODE *node = json_get(root, "offset");
 +			offset = json_as_int(node);
 +
 +			return true;
 +		}
 +	}
 +
 +	return false;
 +}
 +
 +bool DropBoxSendFileChunkedEnd(const char *fileName, const char *uploadId, MCONTACT hContact)
 +{
 +	char url[MAX_PATH];
 +	mir_snprintf(
 +		url,
 +		SIZEOF(url),
 +		"%s/commit_chunked_upload/sandbox/%s",
 +		DROPBOX_APICONTENT_URL,
 +		fileName);
 +
 +	HttpRequest *request = new HttpRequest(g_hNetlibUser, REQUEST_POST, url);
 +	request->AddParameter("upload_id", uploadId);
 +	request->AddParameter("access_token", db_get_sa(NULL, MODULE, "TokenSecret"));
 +
 +	NETLIBHTTPREQUEST *response = request->Send();
 +
 +	delete request;
 +
 +	if (response && response->resultCode == 200)
 +	{
 +		//char message[MAX_PATH];
 +		//mir_snprintf(
 +		//	message,
 +		//	SIZEOF(message),
 +		//	"%s/files/sandbox/%s",
 +		//	DROPBOX_APICONTENT_URL,
 +		//	fileName);
 +
 +		//PROTORECVEVENT recv = { 0 };
 +		////recv.flags = flags;
 +		////recv.lParam = (LPARAM)¶m;
 +		//recv.timestamp = time(NULL);
 +		//recv.szMessage = ::mir_strdup(message);
 +		//::ProtoChainRecvMsg(hContact, &recv);
 +
 +		return true;
 +	}
 +
 +	return false;
 +}
 +
 +void DropBoxAsyncFileSend(void *args)
 +{
 +}
 +
 +INT_PTR DropBoxSendFile(WPARAM wParam, LPARAM lParam)
 +{
 +	CCSDATA *pccsd=(CCSDATA*)lParam;
 +
 +	char **files = (char**)pccsd->lParam;
 +	for (int i = 0; files[i]; i++)
 +	{
 +		FILE *file = fopen(files[i], "rb");
 +		if (file != NULL)
 +		{
 +			int offset = 0;
 +			bool isFirstChunk = true;
 +			char *uploadId = new char[32];
 +
 +			const char *fileName = strrchr(files[i], '\\') + 1;
 +
 +			while (!feof(file) && !ferror(file))
 +			{
 +				char *data = new char[DROPBOX_FILE_CHUNK_SIZE + 1];
 +				size_t count = fread(data, sizeof(char), DROPBOX_FILE_CHUNK_SIZE, file);
 +
 +				if (isFirstChunk)
 +				{
 +					DropBoxSendFileChunkedStart(data, count, uploadId, offset);
 +					isFirstChunk = false;
 +				}
 +				else
 +				{
 +					DropBoxSendFileChunkedNext(data, count, uploadId, offset);
 +				}
 +			}
 +
 +			fclose(file);
 +
 +			return DropBoxSendFileChunkedEnd(fileName, uploadId, pccsd->hContact);
 +
 +		}
 +
 +		//ULONG fileId = ::InterlockedIncrement(&g_fileId);
 +
 +		//return fileId;
 +	}
 +
 +	return 0;
 +}
 +
 +INT_PTR DropBoxSendMessage(WPARAM wParam, LPARAM lParam)
 +{
 +	return 0;
 +}
 +
 +INT_PTR DropBoxReceiveMessage(WPARAM wParam, LPARAM lParam)
 +{
 +	/*CCSDATA *pccsd = (CCSDATA *)lParam;
 +	PROTORECVEVENT *ppre = (PROTORECVEVENT *)pccsd->lParam;
 +	return CallService(MS_PROTO_CHAINRECV, wParam, lParam);
 +
 +	DBEVENTINFO dbei = { sizeof(dbei) };
 +	dbei.szModule = MODULE;
 +	dbei.timestamp = ppre->timestamp;
 +	dbei.eventType = type;
 +	dbei.cbBlob = ppre->cbCustomDataSize;
 +	dbei.pBlob = ppre->szMessage;
 +	dbei.flags = flags;
 +	return ::db_event_add(pccsd->hContact, &dbei);*/
 +
 +	return 0;
 +}
 +
 +void SetContactStatus(MCONTACT hContact, int newStatus)
 +{
 +	if (db_get_w(hContact, MODULE, "Status", ID_STATUS_OFFLINE) != newStatus)
 +		db_set_w(hContact, MODULE, "Status", newStatus);
 +}
 +
 +bool DropBoxLogIn()
 +{
 +	char *access_token = db_get_sa(NULL, MODULE, "TokenSecret");
 +	if (!access_token)
 +	{
 +		ShellExecuteA(NULL, "open", "https://www.dropbox.com/1/oauth2/authorize?response_type=code&client_id="DROPBOX_API_KEY, NULL, NULL, SW_SHOWDEFAULT);
 +
 +		char request_token[128];
 +		request_token[0] = 0;
 +
 +		if (DialogBoxParam(
 +			g_hInstance,
 +			MAKEINTRESOURCE(IDD_TOKEN_REQUEST),
 +			NULL, 
 +			TokenRequestProc,
 +			(LPARAM)&request_token) == IDOK)
 +		{
 +			HttpRequest *request = new HttpRequest(g_hNetlibUser, REQUEST_POST, DROPBOX_API_URL "/oauth2/token");
 +			request->AddParameter("grant_type", "authorization_code");
 +			request->AddParameter("code", request_token);
 +			request->AddHeader("Content-Type", "application/x-www-form-urlencoded");
 +			char data[64];
 +			mir_snprintf(
 +				data,
 +				SIZEOF(data),
 +				"client_id=%s&client_secret=%s",
 +				DROPBOX_API_KEY,
 +				DROPBOX_API_SECRET);
 +			request->pData = mir_strdup(data);
 +			request->dataLength = strlen(data);
 +
 +			NETLIBHTTPREQUEST *response = request->Send();
 +
 +			if (response && response->resultCode == 200)
 +			{
 +				JSONNODE *root = json_parse(response->pData);
 +				if (root != NULL)
 +				{
 +					JSONNODE *node = json_get(root, "access_token");
 +					access_token = mir_u2a(json_as_string(node));
 +					db_set_s(NULL, MODULE, "TokenSecret", access_token);
 +
 +					MCONTACT hContact = (MCONTACT)CallService(MS_DB_CONTACT_ADD, 0, 0);
 +					if (!CallService(MS_PROTO_ADDTOCONTACT, hContact, (LPARAM)MODULE))
 +					{
 +						node = json_get(root, "uid");
 +						wchar_t *uid = json_as_string(node);
 +						db_set_ws(hContact, MODULE, "uid", uid);
 +
 +						db_set_s(hContact, MODULE, "Nick", MODULE);
 +						db_set_w(hContact, MODULE, "Status", ID_STATUS_ONLINE);
 +						//SetContactStatus(hContact, ID_STATUS_ONLINE);
 +					}
 +
 +					delete node;
 +					delete root;
 +					delete request;
 +					//delete access_token;
 +
 +					return true;
 +				}
 +			}
 +
 +			delete request;
 +		}
 +	}
 +	/*else
 +	{
 +	for (MCONTACT hContact = db_find_first(MODULE); hContact; hContact = db_find_next(hContact, MODULE))
 +	SetContactStatus(hContact, ID_STATUS_ONLINE);
 +	}*/
 +
 +	return false;
 +}
 +
 +//void LogOut()
 +//{
 +//	HttpRequest<CDropBoxProto> *request = new HttpRequest<CDropBoxProto>(this, REQUEST_POST, DROPBOX_API_URL "/disable_access_token");
 +//	//request->SendAsync(&CDropBoxProto::AsyncFunc);
 +//	request->Send();
 +//
 +//	delete request;
 +//}
 +
 +INT_PTR CALLBACK TokenRequestProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 +{
 +	char *token = reinterpret_cast<char*>(::GetWindowLongPtr(hwndDlg, GWLP_USERDATA));
 +
 +	switch (msg)
 +	{
 +	case WM_INITDIALOG:
 +		TranslateDialogDefault(hwndDlg);
 +
 +		token = (char*)lParam;
 +		SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam);
 +		{
 +			//::SendMessage(hwndDlg, WM_SETICON, ICON_BIG,	(LPARAM)CSkypeProto::IconList[0].Handle);
 +			//::SendMessage(hwndDlg, WM_SETICON, ICON_SMALL,	(LPARAM)CSkypeProto::IconList[0].Handle);
 +
 +			/*wchar_t title[MAX_PATH];
 +			::mir_sntprintf(
 +			title, 
 +			MAX_PATH, 
 +			::TranslateT("Enter a password for %s:"), 
 +			param->login);*/
 +			//::SetDlgItemText(hwndDlg, IDC_INSTRUCTION, title);
 +
 +			SendDlgItemMessage(hwndDlg, IDC_TOKEN, EM_LIMITTEXT, 128 - 1, 0);
 +		}
 +		break;
 +
 +	case WM_CLOSE:
 +		EndDialog(hwndDlg, 0);
 +		break;
 +
 +	case WM_COMMAND:
 +		{
 +			switch (LOWORD(wParam))
 +			{
 +			case IDOK:
 +				{
 +					char data[128];
 +					GetDlgItemTextA(hwndDlg, IDC_TOKEN, data, SIZEOF(data));
 +					strcpy(token, data);
 +
 +					EndDialog(hwndDlg, IDOK);
 +				}
 +				break;
 +
 +			case IDCANCEL:
 +				EndDialog(hwndDlg, IDCANCEL);
 +				break;
 +			}
 +		}
 +		break;
 +	}
 +
 +	return FALSE;
 +}
 +
 +INT_PTR CALLBACK MainOptionsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 +{
 +	return FALSE;
 +}
\ No newline at end of file diff --git a/plugins/DropBox/src/dropBox_proto.h b/plugins/DropBox/src/dropBox_proto.h new file mode 100644 index 0000000000..2127755059 --- /dev/null +++ b/plugins/DropBox/src/dropBox_proto.h @@ -0,0 +1,43 @@ +#ifndef _DROPBOX_PROTO_H_
 +#define _DROPBOX_PROTO_H_
 +
 +//#include "common.h"
 +#include "http_request.h"
 +
 +#define DROPBOX_API_VER "1"
 +
 +#define DROPBOX_API_URL "https://api.dropbox.com/" DROPBOX_API_VER
 +#define DROPBOX_APICONTENT_URL "https://api-content.dropbox.com/" DROPBOX_API_VER
 +
 +#define DROPBOX_API_KEY "fa8du7gkf2q8xzg"
 +#include "..\..\DropBoxApi\sekret_key.h"
 +
 +#define DROPBOX_FILE_CHUNK_SIZE 100 * 1024 //100 KB
 +//4 * 1024 * 1024  // 4 MB
 +
 +extern ULONG  g_fileId;
 +
 +void SetContactStatus(MCONTACT hContact, int newStatus);
 +bool DropBoxLogIn();
 +
 +int OnOptionsInit(WPARAM wParam, LPARAM lParam);
 +int OnModulesLoaded(WPARAM wParam, LPARAM lParam);
 +
 +INT_PTR DropBoxGetCaps(WPARAM wParam, LPARAM lParam);
 +
 +INT_PTR DropBoxSendMessage(WPARAM wParam, LPARAM lParam);
 +INT_PTR DropBoxReceiveMessage(WPARAM wParam, LPARAM lParam);
 +
 +HttpRequest *DropBoxCreateFileChunkedRequest(const char *data, int length);
 +bool DropBoxSendFileChunkedStart(const char *data, int length, char *uploadId, int &offset);
 +bool DropBoxSendFileChunkedNext(const char *data, int length, const char *uploadId, int &offset);
 +bool DropBoxSendFileChunkedEnd(const char *fileName, const char *uploadId, MCONTACT hContact);
 +
 +void DropBoxAsyncFileSend(void *args);
 +
 +INT_PTR DropBoxSendFile(WPARAM wParam, LPARAM lParam);
 +
 +INT_PTR CALLBACK MainOptionsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
 +INT_PTR CALLBACK TokenRequestProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
 +
 +#endif //_DROPBOX_PROTO_H_
\ No newline at end of file diff --git a/plugins/DropBox/src/http_request.h b/plugins/DropBox/src/http_request.h new file mode 100644 index 0000000000..582de2fa83 --- /dev/null +++ b/plugins/DropBox/src/http_request.h @@ -0,0 +1,87 @@ +#ifndef _HTTP_REQUEST_H_
 +#define _HTTP_REQUEST_H_
 +
 +#include "common.h"
 +
 +class HttpRequest : public NETLIBHTTPREQUEST, public MZeroedObject
 +{
 +public:
 +	HttpRequest(HANDLE hNetlibUser, int requestType, LPCSTR url)
 +	{
 +		cbSize = sizeof(NETLIBHTTPREQUEST);
 +		flags = NLHRF_HTTP11;
 +		this->requestType = requestType;
 +
 +		m_hNetlibUser = hNetlibUser;
 +		m_szUrl = mir_strdup(url);
 +	}
 +
 +	~HttpRequest()
 +	{
 +		for (int i=0; i < headersCount; i++)
 +		{
 +			mir_free(headers[i].szName);
 +			mir_free(headers[i].szValue);
 +		}
 +		mir_free(headers);
 +		mir_free(pData);
 +	}
 +
 +
 +	void AddHeader(LPCSTR szName, LPCSTR szValue)
 +	{
 +		headers = (NETLIBHTTPHEADER*)mir_realloc(headers, sizeof(NETLIBHTTPHEADER)*(headersCount+1));
 +		headers[headersCount].szName = mir_strdup(szName);
 +		headers[headersCount].szValue = mir_strdup(szValue);
 +		headersCount++;
 +	}
 +
 +	void AddParameter(LPCSTR szName, LPCSTR szValue)
 +	{
 +		if(m_szUrl.Find('?') == -1)
 +			m_szUrl.AppendFormat("?%s=%s", szName, szValue);
 +		else
 +			m_szUrl.AppendFormat("&%s=%s", szName, szValue);
 +	}
 +
 +	void AddParameter(LPCSTR szName, int value)
 +	{
 +		if(m_szUrl.Find('?') == -1)
 +			m_szUrl.AppendFormat("?%s=%i", szName, value);
 +		else
 +			m_szUrl.AppendFormat("&%s=%i", szName, value);
 +	}
 +
 +	NETLIBHTTPREQUEST *Send()
 +	{
 +		szUrl = m_szUrl.GetBuffer();
 +		return (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)m_hNetlibUser, (LPARAM)this);
 +	}
 +
 +	//void SendAsync(typename CBaseProto<T>::AsyncHttpRequest callback)
 +	//{
 +	//	szUrl = m_szUrl.GetBuffer();
 +	//	AsyncParam param = { this, proto, callback };
 +	//	/*HANDLE hThread = */mir_forkthread(SendAsync, ¶m);
 +	//	//WaitForSingleObject(hThread, INFINITE);
 +	//}
 +
 +private:
 +
 +	CMStringA m_szUrl;
 +	HANDLE m_hNetlibUser;
 +
 +	/*static void SendAsync(void *arg)
 +	{
 +		AsyncParam *param = (AsyncParam*)arg;
 +		NETLIBHTTPREQUEST* response = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)param->m_proto->m_hNetlibUser, (LPARAM)param->m_request);
 +		
 +		CBaseProto<T> *proto = param->m_proto;
 +		AsyncRequestCallback callback = param->m_callback;
 +		proto->*callback(response);
 +
 +		delete response;
 +	}*/
 +};
 +
 +#endif //_HTTP_REQUEST_H_
\ No newline at end of file diff --git a/plugins/DropBox/src/main.cpp b/plugins/DropBox/src/main.cpp new file mode 100644 index 0000000000..a4e97b0a24 --- /dev/null +++ b/plugins/DropBox/src/main.cpp @@ -0,0 +1,63 @@ +//#include "dropBox_proto.h"
 +#include "dropBox_proto.h"
 +
 +int hLangpack;
 +HINSTANCE g_hInstance;
 +
 +PLUGININFOEX pluginInfo =
 +{
 +	sizeof(PLUGININFOEX),
 +	__PLUGIN_NAME,
 +	PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
 +	__DESCRIPTION,
 +	__AUTHOR,
 +	__AUTHOREMAIL,
 +	__COPYRIGHT,
 +	__AUTHORWEB,
 +	UNICODE_AWARE,
 +	// {B908773A-86F7-4A91-8674-6A20BA0E67D1} 
 +	{0xb908773a, 0x86f7, 0x4a91, {0x86, 0x74, 0x6a, 0x20, 0xba, 0xe, 0x67, 0xd1}}
 +
 +};
 +
 +DWORD WINAPI DllMain(HINSTANCE hInstance, DWORD, LPVOID)
 +{
 +	g_hInstance = hInstance;
 +
 +	return TRUE;
 +}
 +
 +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
 +{
 +	return &pluginInfo;
 +}
 +
 +extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {MIID_PROTOCOL, MIID_LAST};
 +
 +extern "C" int __declspec(dllexport) Load(void)
 +{
 +	mir_getLP(&pluginInfo);
 +
 +	HookEvent(ME_OPT_INITIALISE, OnOptionsInit);
 +	HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
 +
 +	PROTOCOLDESCRIPTOR pd = { PROTOCOLDESCRIPTOR_V3_SIZE };
 +	pd.szName = MODULE;
 +	pd.type = PROTOTYPE_VIRTUAL;
 +
 +	CallService(MS_PROTO_REGISTERMODULE, 0, (LPARAM)&pd);
 +
 +	CreateProtoServiceFunction(MODULE, PS_GETCAPS, DropBoxGetCaps);
 +
 +	CreateProtoServiceFunction(MODULE, PSS_FILE, DropBoxSendFile);
 +
 +	CreateProtoServiceFunction(MODULE, PSS_MESSAGE, DropBoxSendMessage);
 +	CreateProtoServiceFunction(MODULE, PSR_MESSAGE, DropBoxReceiveMessage);
 +
 +	return 0;
 +}
 +
 +extern "C" int __declspec(dllexport) Unload(void)
 +{
 +	return 0;
 +}
\ No newline at end of file diff --git a/plugins/DropBox/src/resource.h b/plugins/DropBox/src/resource.hBinary files differ new file mode 100644 index 0000000000..a88429637c --- /dev/null +++ b/plugins/DropBox/src/resource.h diff --git a/plugins/DropBox/src/version.h b/plugins/DropBox/src/version.h new file mode 100644 index 0000000000..dc8892c2de --- /dev/null +++ b/plugins/DropBox/src/version.h @@ -0,0 +1,15 @@ +#define __MAJOR_VERSION            0
 +#define __MINOR_VERSION            11
 +#define __RELEASE_NUM              0
 +#define __BUILD_NUM                0
 +
 +#include <stdver.h>
 +
 +#define __PLUGIN_NAME              "DropBox"
 +#define __INTERNAL_NAME            "DropBox"
 +#define __FILENAME                 "DropBox.dll"
 +#define __DESCRIPTION              "Provide ability to load file on DropBox."
 +#define __AUTHOR                   "unsane"
 +#define __AUTHOREMAIL              ""
 +#define __AUTHORWEB                "http://miranda-ng.org/p/DropBox/"
 +#define __COPYRIGHT                "© 2014 Miranda NG project"
 | 
